home *** CD-ROM | disk | FTP | other *** search
- 10000 REM MBASIC PROGRAM CONCENTRATOR
- 10010 REM VERSION 2.2
- 10040 REM INITIALIZE
- 10050 DEFINT A-Z:OPTION BASE 1:PA=0:BC$="":BF$="":LD=0
- 10060 OPEN "I",1,"XREF.DAT"
- 10061 INPUT #1, COMM$,STRT!
- 10062 INPUT #1, COMM$,CLS
- 10063 CLOSE #1
- 10064 CLS$=CHR$(CLS)
- 10070 DEF FNAC$(RB,CK)=EB$+"Y"+CHR$(31+RB)+CHR$(31+CK)
- 10080 DEF FNPD$(NE!)=CHR$(NE!-INT(NE!/256)*256)+CHR$(INT(NE!/256))
- 10090 DEF FNUA!(PC$)=ASC(LEFT$(PC$,1))+ASC(RIGHT$(PC$,1))*256
- 10100 DEF FNGA(CA$,WA$,PG)=INSTR(CA$,MID$(WA$,PG,1))
- 10110 'MAKE TERST STRINGS
- 10120 CB$=CHR$(9)+CHR$(10)+CHR$(32)+CHR$(0)
- 10130 CC$=CHR$(15)+CHR$(11)+CHR$(12)+CHR$(14)+CHR$(28)+CHR$(29)+CHR$(31)+CHR$(34)
- 10140 CD$="ABCDEFGHIJKLMNOPQRSTUVWXYZ":CE$=".1234567890"
- 10150 CF$="%!#$":CG$=CHR$(143):CH$=CHR$(137)+CHR$(139)
- 10160 ' SCREEN FORMAT
- 10170 PRINT CLS$:PRINT "BASIC PROGRAM CONCENTRATOR [ 2.2 ]":PRINT
- 10180 PRINT "INPUT FILE MUST BE SAVED WITHOUT 'A' OR 'P' OPTION"
- 10190 PRINT "IF DRIVE IS NOT SPECIFIED, DEFAULT IS ASSUMED"
- 10200 PRINT "IF .EXT IS NOT SPECIFIED, '.BAS ' IS ASSUMED"
- 10210 PRINT "FileName.CRF MUST HAVE BEEN CREATED BY XREF.BAS"
- 10220 PRINT "AND BE ON SAME DISK AS INPUT FILE":PRINT:PRINT
- 10230 INPUT "INPUT FILENAME : ";RA$:IF RA$="" THEN END
- 10240 PRINT CLS$
- 10250 ' MAKE FILE NAME
- 10260 IF INSTR(RA$,".")>1 THEN PF$=RA$:RA$=LEFT$(RA$,INSTR(RA$,".")-1) ELSE PF$=RA$+".BAS"
- 10270 CM$=RA$+".CRF":NC$=RA$+".A"
- 10280 ' GET PROGRAM STATS
- 10290 OPEN "I", 1, CM$:INPUT #1, HA,HB,SA!:NA!=SA!:DIM LF(HA)
- 10300 ' LOAD LINE REF ARRAY
- 10310 FOR LD=1 TO HA:INPUT #1,LF(LD):NEXT
- 10320 ' LOAD VAR LIST - MAKE NEW VAR NAMES
- 10330 DIM VB$(HB,2):LA$="A":FOR LD=1 TO HB:INPUT #1,VB$(LD,1)
- 10340 TB$=VB$(LD,1):FA$=LEFT$(TB$,1):IF FA$<>LA$ THEN RESTORE:LA$=FA$
- 10350 IF RIGHT$(TB$,1)="(" THEN PE=1:TB$=LEFT$(TB$,LEN(TB$)-1) ELSE PE=0
- 10360 IF INSTR(CF$,RIGHT$(TB$,1)) > 1 THEN TD$=RIGHT$(TB$,1):TB$=LEFT$(TB$,LEN(TB$)-1) ELSE TD$=""
- 10370 IF LEN(TB$) < 2 THEN 10390
- 10380 READ SB$:TB$=FA$+SB$
- 10390 IF TD$ <> "" THEN TB$=TB$+TD$
- 10400 IF PE=1 THEN TB$=TB$+"("
- 10410 VB$(LD,2)=TB$:NEXT:CLOSE
- 10420 ' OPEN INPUT FILE
- 10430 OPEN "R",1 ,PF$:FIELD#1,128 AS BB$:GET #1
- 10440 IF LEFT$(BB$,1) <> CHR$(255) THEN PRINT "WRONG FILE FORMAT":END
- 10450 BE$=MID$(BB$,2):GET #1:PRINT CLS$:PRINT "PROGRAM NAME - ";PF$
- 10460 OPEN "O",2, NC$
- 10470 PRINT #2, CHR$(255);:' START OUTPUT FILE
- 10480 BD=LEN(BE$):BC$="":PA=1:IF BD<128 THEN BE$=BE$+BB$:GET#1
- 10490 AA$=LEFT$(BE$,2):IF AA$ <> CHR$(0)+CHR$(0) THEN 10520
- 10500 IF LEN(BG$) > 0 THEN GOSUB 11060
- 10510 GOTO 11100
- 10520 LB=FNUA!(AA$)-SA!:SA!=SA!+LB:LC$=MID$(BE$,3,2)
- 10530 LE=FNUA!(LC$):TA=0
- 10540 ' TARGET LINE
- 10550 FOR LD=1 TO HA:IF LE=LF(LD) THEN TA=1:LD=HA
- 10560 NEXT
- 10570 PRINT "PROCESSING LINE : ";FNUA!(LC$)
- 10580 ' GET A LINE OF BASIC
- 10590 BE$=MID$(BE$,5):BD=LEN(BE$):LB=LB-4
- 10600 IF BD < LB THEN BC$=BC$+BE$:BE$=BB$:GET #1:LB=LB-BD:BD=LEN(BE$):GOTO 10600
- 10610 BC$=BC$+LEFT$(BE$,LB):BE$=MID$(BE$,LB+1)
- 10620 ' TIME SAVING PREPROSSOR
- 10630 IF TA > 0 THEN BA=1
- 10640 IF FNGA(CHR$(9)+CHR$(10)+CHR$(32),BC$,1)>0 THEN BC$=MID$(BC$,2):GOTO 10640
- 10650 IF LEFT$(BC$,1)=":" OR LEFT$(BC$,1)=CHR$(143) THEN IF BA=1 THEN AB=1:BF$=LEFT$(BC$,LEN(BC$)-1):GOTO 10990 ELSE 10480
- 10660 IF LEFT$(BC$,1)=CHR$(132) THEN BF$=LEFT$(BC$,LEN(BC$)-1):BA=1:AB=1:GOTO 10990
- 10670 ' EXAMINE LINE ONE CHAR AT A TIME
- 10680 ON FNGA(CB$,BC$,PA) GOTO 10780,10780,10780,10990
- 10690 ON FNGA(CC$,BC$,PA) GOTO 10830,10820,10820,10820,10820,10810,10800,10850
- 10700 IF FNGA(CD$,BC$,PA) > 0 THEN 10890
- 10710 IF FNGA(CG$,BC$,PA) = 0 THEN 10740
- 10720 IF PA=1 THEN 10970
- 10730 IF FNGA(CHR$(255),BC$,PA-1) = 0 THEN 10970
- 10740 IF FNGA(CH$,BC$,PA) = 0 THEN 10770
- 10750 IF PA= 1 THEN AB=1:GOTO 10770
- 10760 IF FNGA(CHR$(255),BC$,PA-1) = 0 THEN AB=1
- 10770 BF$=BF$+MID$(BC$,PA,1)
- 10780 PA=PA+1:GOTO 10680:' SKIP THIS CHAR , GET ANOTHER
- 10790 ' NUMERIC CONSTANTS
- 10800 BF$=BF$+MID$(BC$,PA,4):PA=PA+4:' PASS 8 BYTE NO.
- 10810 BF$=BF$+MID$(BC$,PA,2):PA=PA+2:' PASS 4 BYTE NO.
- 10820 BF$=BF$+MID$(BC$,PA,1):PA=PA+1:' PASS 2 BYTE NO.
- 10830 BF$=BF$+MID$(BC$,PA,2):PA=PA+2: GOTO 10680:' PASS 1 BYTE NO.
- 10840 ' STRING CONSTANTS
- 10850 PB=INSTR(PA+1,BC$,CHR$(34))
- 10860 IF PB=0 THEN PB=LEN(BC$):BC$=LEFT$(BC$,PB-1)+CHR$(34)+CHR$(0)
- 10870 BF$=BF$+MID$(BC$,PA,PB-PA+1):PA=PB+1:GOTO 10680
- 10880 ' VARS
- 10890 VA$="":LD=0
- 10900 VA$=VA$+MID$(BC$,PA,1):PA=PA+1
- 10910 IF FNGA(CD$+CE$,BC$,PA) > 0 THEN 10900
- 10920 IF FNGA(CF$,BC$,PA) > 0 THEN VA$=VA$+MID$(BC$,PA,1):PA=PA+1
- 10930 IF MID$(BC$,PA,1) = "(" THEN VA$=VA$+"(":PA=PA+1
- 10940 ' IF THIS IS A VAR NAME THEN SHORTEN IT
- 10950 LD=LD+1:IF VA$=VB$(LD,1) THEN BF$=BF$+VB$(LD,2):GOTO 10680
- 10960 IF LD=HB THEN BF$=BF$+VA$:GOTO 10680 ELSE 10950
- 10970 IF MID$(BC$,PA-1,1)=":" THEN BF$=LEFT$(BF$,LEN(BF$)-1):PA=PA-1:GOTO 10970
- 10980 ' FILE BUILDING DECISIONS
- 10990 IF BG$="" THEN GOSUB 11050:BA=0:GOTO 11020
- 11000 IF BA=1 THEN BA=0:GOSUB 11060:GOSUB 11050:GOTO 11020
- 11010 IF LEN(BG$)+LEN(BF$) < 100 THEN GOSUB 11080 ELSE GOSUB 11060:GOSUB 11050
- 11020 IF AB = 1 THEN AB=0:GOSUB 11060
- 11030 GOTO 10480
- 11040 ' BUILD NEW FILE
- 11050 BG$=BF$:BF$="":ND$=LC$:RETURN
- 11060 NA!=NA!+LEN(BG$)+5
- 11065 NB$=FNPD$(NA!)
- 11070 PRINT #2,NB$;ND$;BG$;CHR$(0);:BG$="":RETURN
- 11080 BG$=BG$+":"+BF$:BF$="":RETURN
- 11090 ' CLOSE NEW FILE
- 11100 PRINT #2,CHR$(0);CHR$(0);CHR$(26);
- 11110 CLOSE
- 11120 RUN "MENU.BAS"
- 11130 ' DATA
- 11140 DATA A,B,C,D,E,"2",G,H,"3",J,K,L,M,"4","5",P,Q,"6","7",T,U,V,W,X,Y,Z
- 11110 CLOSE
- 1