1000 DIM MSG$(21) 1020 PREV=0: DRV$="" 1040 ON ERROR GOTO 1100 1060 OPEN "I",1,DRV$+"FCMSGS.OVR" 1080 GOTO 1120 1100 CLOSE: IF DRV$="" THEN DRV$="A:": RESUME 1060 ELSE DRV$="": RESUME 1520 1120 ON ERROR GOTO 0 1140 INPUT #1,REC$ 1160 INPUT #1,MASK$ 1180 INPUT #1,MSK1$ 1200 INPUT #1,MSK2$ 1220 INPUT #1,MSK3$ 1240 INPUT #1,LIN$ 1260 INPUT #1,DUM 1280 INPUT #1,ZER$ 1300 INPUT #1,ONE$ 1320 INPUT #1,REF,ESC,WRT,CLF,CDN,CUP,CRT 1340 INPUT #1,CLR$ 1360 INPUT #1,HI$ 1380 INPUT #1,LO$ 1400 INPUT #1,EOL$ 1420 INPUT #1,INIT$ 1440 INPUT #1,DINIT$ 1460 INPUT #1,POS.XY$ 1480 INPUT #1,NUL,R.C,BIASX,BIASY 1500 PREV=1 1520 CLOSE 1540 IF PREV THEN 1940 1560 MSG$(1)="(^R)": REF=&H12 1580 MSG$(2)="(^C)": ESC=&H3 1600 MSG$(3)="(^W)": WRT=&H17 1620 MSG$(4)="(^S)": CLF=&H13 1640 MSG$(5)="(^D)": CRT=&H4 1660 MSG$(6)="(^E)": CUP=&H5 1680 MSG$(7)="(^X)": CDN=&H18 1700 MSG$(8)="(^[,'*')": CLR$=CHR$(27)+"*" 1720 MSG$(9)="(^[,'(')": HI$=CHR$(27)+"(" 1740 MSG$(10)="(^[,')')": LO$=CHR$(27)+")" 1760 MSG$(11)="(^[,'T')": EOL$=CHR$(27)+"T" 1780 MSG$(17)="(^@)": INIT$=CHR$(0) 1800 MSG$(18)="(^@)": DINIT$=CHR$(0) 1820 MSG$(12)="(^[,'=')": POS.XY$=CHR$(27)+"=" 1840 MSG$(13)=" (32)": BIASX=32 1860 MSG$(14)=" (32)": BIASY=32 1880 MSG$(15)="(0)": R.C=0 1900 MSG$(16)=" (10)": NUL=10 1920 GOTO 2360 1940 MSG$(1)="(^"+CHR$(REF+64)+")" 1960 MSG$(2)="(^"+CHR$(ESC+64)+")" 1980 MSG$(3)="(^"+CHR$(WRT+64)+")" 2000 MSG$(4)="(^"+CHR$(CLF+64)+")" 2020 MSG$(5)="(^"+CHR$(CRT+64)+")" 2040 MSG$(6)="(^"+CHR$(CUP+64)+")" 2060 MSG$(7)="(^"+CHR$(CDN+64)+")" 2080 EXPN$=CLR$: GOSUB 6220: MSG$(8)="("+EXPN$+")" 2100 EXPN$=HI$: GOSUB 6220: MSG$(9)="("+EXPN$+")" 2120 EXPN$=LO$: GOSUB 6220: MSG$(10)="("+EXPN$+")" 2140 EXPN$=EOL$: GOSUB 6220: MSG$(11)="("+EXPN$+")" 2160 EXPN$=INIT$: GOSUB 6220: MSG$(17)="("+EXPN$+")" 2180 EXPN$=DINIT$: GOSUB 6220: MSG$(18)="("+EXPN$+")" 2200 EXPN$=POS.XY$: GOSUB 6220: MSG$(12)="("+EXPN$+")" 2220 MSG$(13)="("+MID$(STR$(BIASX),2)+")" 2240 MSG$(14)="("+MID$(STR$(BIASY),2)+")" 2260 IF R.C THEN MSG$(15)="(1)" ELSE MSG$(15)="(0)" 2280 MSG$(16)="("+MID$(STR$(NUL),2)+")" 2300 MSG$(16)=STRING$(5-LEN(MSG$(16))," ")+MSG$(16) 2320 MSG$(13)=STRING$(5-LEN(MSG$(13))," ")+MSG$(13) 2340 MSG$(14)=STRING$(5-LEN(MSG$(14))," ")+MSG$(14) 2360 ' ' Prompt for specifics ' 2380 PRINT:PRINT:PRINT 2400 PRINT "File Compare & Edit [INSTALL] utility v1.5" 2420 PRINT "Copyright 1980,81,82 (C) by John R. Burns" 2440 PRINT:PRINT 2460 PRINT "Default entries are shown in (parens)." 2480 PRINT "^] - Put next character in even if control." 2500 PRINT:PRINT 2520 MODE=0 2540 REC$ = "#### - Record number verified" 2560 MASK$= " \ \ - \ \ - Rec \ \ - Len \ \" 2580 MSK1$= "Edit" 2600 MSK2$= "Srce" 2620 MSK3$= "Cros" 2640 LIN$ = "---- " 2660 FOR I=1 TO 16 2680 LIN$ = LIN$ + " --" 2700 NEXT I 2720 LIN$ = LIN$ + " " + STRING$(16,"-") 2740 DUM = 128 2760 ZER$ = "0000" 2780 ONE$ = "0100" 2800 OFF=53 2820 PRINT "User Control Definitions:" 2840 PRINT STRING$(77,"-") 2860 PRINT "Define EDIT mode command control keys" TAB(48) "(#7 single character commands)" 2880 PRINT 2900 PRINT TAB(10) " #1) Refresh edit mode display" TAB(48) MSG$(1) " ";: GOSUB 4160 2920 IF INPT$="" THEN GOTO 2940 ELSE REF=ASC(INPT$) 2940 PRINT TAB(10) " #2) Escape from edit mode" TAB(48) MSG$(2) " ";: GOSUB 4160 2960 IF INPT$="" THEN GOTO 2980 ELSE ESC=ASC(INPT$) 2980 PRINT TAB(10) " #3) Re-write edited record into file" TAB(48) MSG$(3) " ";: GOSUB 4160 3000 IF INPT$="" THEN GOTO 3020 ELSE WRT=ASC(INPT$) 3020 PRINT TAB(10) " #4) Move edit pointer left" TAB(48) MSG$(4) " ";: GOSUB 4160 3040 IF INPT$="" THEN GOTO 3060 ELSE CLF=ASC(INPT$) 3060 PRINT TAB(10) " #5) Move edit pointer right" TAB(48) MSG$(5) " ";: GOSUB 4160 3080 IF INPT$="" THEN GOTO 3100 ELSE CRT=ASC(INPT$) 3100 PRINT TAB(10) " #6) Move edit pointer up" TAB(48) MSG$(6) " ";: GOSUB 4160 3120 IF INPT$="" THEN GOTO 3140 ELSE CUP=ASC(INPT$) 3140 PRINT TAB(10) " #7) Move edit pointer down" TAB(48) MSG$(7) " ";: GOSUB 4160 3160 IF INPT$="" THEN GOTO 3180 ELSE CDN=ASC(INPT$) 3180 PRINT 3200 PRINT TAB(15) "Accept new edit control values" TAB(49) "(Y) ";: GOSUB 4160 3220 PRINT 3240 IF INPT$="" OR INPT$="Y" OR INPT$="y" THEN 3260 ELSE 2900 3260 PRINT 3280 PRINT 3300 PRINT "Terminal Control Definitions:" 3320 PRINT STRING$(77,"-") 3340 PRINT "Define terminal control sequences" TAB(48) "(#7 multi-character sequences)" 3360 PRINT 3380 MODE=1 3400 OFF=48 3420 PRINT TAB(10) " #1) Sequence to clear screen" TAB(48) MSG$(8) TAB(48);: GOSUB 4160 3440 IF INPT$="" THEN GOTO 3460 ELSE CLR$=INPT$ 3460 PRINT TAB(10) " #2) Sequence to highlight screen" TAB(48) MSG$(9) TAB(48);: GOSUB 4160 3480 IF INPT$="" THEN GOTO 3500 ELSE HI$=INPT$ 3500 PRINT TAB(10) " #3) Sequence to de-highlight screen" TAB(48) MSG$(10) TAB(48);: GOSUB 4160 3520 IF INPT$="" THEN GOTO 3540 ELSE LO$=INPT$ 3540 PRINT TAB(10) " #4) Sequence to erase to end of line" TAB(48) MSG$(11) TAB(48);: GOSUB 4160 3560 IF INPT$="" THEN GOTO 3580 ELSE EOL$=INPT$ 3580 PRINT TAB(10) " #5) Sequence to initialize term" TAB(48) MSG$(17) TAB(48);: GOSUB 4160 3600 IF INPT$="" THEN GOTO 3620 ELSE INIT$=INPT$ 3620 PRINT TAB(10) " #6) Sequence to de-initialize term" TAB(48) MSG$(18) TAB(48);: GOSUB 4160 3640 IF INPT$="" THEN GOTO 3660 ELSE DINIT$=INPT$ 3660 PRINT TAB(10) " #7) Lead-in for cursor addressing" TAB(48) MSG$(12) TAB(48);: GOSUB 4160 3680 IF INPT$="" THEN GOTO 3700 ELSE POS.XY$=INPT$ 3700 MODE=0 3720 PRINT 3740 OFF=48+LEN(MSG$(13)) 3760 PRINT TAB(15) "Offset to add to row (0 asc)" TAB(47) MSG$(13) " ";: GOSUB 4160 3780 OFF=48+LEN(MSG$(14)) 3800 IF INPT$="" THEN GOTO 3820 ELSE BIASX=VAL(INPT$) 3820 PRINT TAB(15) "Offset to add to col (0 asc)" TAB(47) MSG$(14) " ";: GOSUB 4160 3840 PRINT 3860 OFF=49+LEN(MSG$(15)) 3880 IF INPT$="" THEN GOTO 3900 ELSE BIASY=VAL(INPT$) 3900 PRINT TAB(15) "Addressing order:" 3920 PRINT TAB(15) "[0] Row/Column; [1] Column/Row" TAB(48) MSG$(15) " ";: GOSUB 4160 3940 IF INPT$="" THEN GOTO 4020 ELSE R.C=VAL(INPT$) 3960 IF R.C=0 THEN 4020 3980 IF R.C=1 THEN 4020 4000 PRINT CHR$(7);: GOTO 3920 4020 OFF=48+LEN(MSG$(16)) 4040 PRINT: PRINT TAB(15) "Major screen operations:" 4060 PRINT TAB(15) "Number of nulls added to opps" TAB(47) MSG$(16) " ";: GOSUB 4160 4080 IF INPT$="" THEN 4100 ELSE NUL=VAL(INPT$) 4100 PRINT 4120 PRINT TAB(15) "Accept new term control values" TAB(49) "(Y) ";: GOSUB 4160 4140 IF INPT$="" OR INPT$="Y" OR INPT$="y" THEN 5120 ELSE 3360 4160 INPT$="" 4180 CH=0 4200 TEMP$=INPUT$(1) 4220 IF TEMP$=CHR$(29) THEN CNTRL=1: GOTO 4200 4240 IF CNTRL THEN CNTRL=0: GOTO 4360 4260 IF TEMP$=CHR$(3) THEN PRINT: PRINT "Abort (Y/N) ?";: TEMP$=INPUT$(1): IF TEMP$="Y" OR TEMP$="y" THEN PRINT "Y": GOTO 6200 ELSE PRINT "N": PRINT TAB(OFF) INPT$;: GOTO 4200 4280 IF TEMP$=CHR$(8) OR TEMP$=CHR$(&H5F) OR TEMP$=CHR$(&H7F) THEN 4540 4300 IF TEMP$=CHR$(18) THEN 4920 4320 IF TEMP$=CHR$(24) THEN 4700 4340 IF TEMP$=CHR$(13) THEN 4860 4360 IF TEMP$<" " THEN PRINT "^" CHR$(ASC(TEMP$)+64);: GOTO 4440 4380 IF MODE=1 THEN PRINT "'"; 4400 PRINT TEMP$; 4420 IF MODE=1 THEN PRINT "'"; 4440 CH=CH+1 4460 INPT$=INPT$+TEMP$ 4480 IF CH>20 THEN 4860 4500 IF MODE=1 THEN PRINT ","; 4520 GOTO 4200 4540 IF CH=0 THEN 4160 4560 CH=CH-1 4580 PRINT CHR$(8) " " CHR$(8); 4600 IF RIGHT$(INPT$,1)<" " THEN PRINT CHR$(8) " " CHR$(8); 4620 IF RIGHT$(INPT$,1)>=" " AND MODE=1 THEN PRINT CHR$(8) " " CHR$(8);: PRINT CHR$(8) " " CHR$(8); 4640 IF MODE=1 THEN PRINT CHR$(8) " " CHR$(8); 4660 INPT$=LEFT$(INPT$,CH) 4680 GOTO 4200 4700 IF CH=0 THEN 4160 4720 CH=CH-1 4740 PRINT CHR$(8) " " CHR$(8); 4760 IF RIGHT$(INPT$,1)<" " THEN PRINT CHR$(8) " " CHR$(8); 4780 IF RIGHT$(INPT$,1)>=" " AND MODE=1 THEN PRINT CHR$(8) " " CHR$(8);: PRINT CHR$(8) " " CHR$(8); 4800 IF MODE=1 THEN PRINT CHR$(8) " " CHR$(8); 4820 INPT$=LEFT$(INPT$,CH) 4840 GOTO 4700 4860 PRINT 4880 RETURN 4900 END 4920 ' ' Expand string for ^R & ^C. ' 4940 PRINT "#" TAB(OFF); 4960 FOR IN=1 TO LEN(INPT$) 4980 IF MID$(INPT$,IN,1)<" " THEN PRINT "^" CHR$(ASC(MID$(INPT$,IN,1))+64);: GOTO 5060 5000 IF MODE=1 THEN PRINT "'"; 5020 PRINT MID$(INPT$,IN,1); 5040 IF MODE=1 THEN PRINT "'"; 5060 IF MODE=1 THEN PRINT ","; 5080 NEXT IN 5100 GOTO 4200 5120 ' ' define messages. ' 5140 MSG$(1) ="File comparison & edit utility v2.0" 5160 MSG$(2) ="Copyright 1980,81,82 (C) by John R. Burns" 5180 MSG$(3) ="Edit, Compare, or Stop? (E/C/S): " 5200 MSG$(4) ="Enter file to edit: " 5220 MSG$(5) ="Enter source file for compare: " 5240 MSG$(6) ="Enter cross reference file: " 5260 MSG$(7) ="Option? Stop, Read, Edit, New files, (S/R/E/N): " 5280 MSG$(8) ="Option? Hex, Ascii, New files, (+ or -) rec #: (H/A/N/+/-): " 5300 MSG$(9) ="Option? Edit Source or Cross reference record: (S/C): " 5320 MSG$(10)="[Edit Mode] INDEX = 0 dec 0 hex " 5340 MSG$(11)="[^Q for HELP menu]" 5360 MSG$(12)="Re-Writting into " 5380 MSG$(13)="Cursor movement: ^" + CHR$(CUP+64) + " = Up ^" + CHR$(CDN+64) + " = Down ^" + CHR$(CLF+64) + " = Left ^" + CHR$(CRT+64) + " = Right" 5400 MSG$(14)=" ^A = Goto ascii field ^H" + " = Goto hex field" 5420 MSG$(15)=" ^" + CHR$(ESC+64) + " = Exit edit mode ^" + CHR$(REF+64) + " = Refresh display" 5440 MSG$(16)=" ^" + CHR$(WRT+64) + " = Write current record back into file" 5460 MSG$(17)=" ^Z = Exchange source" + " & cross reference records" 5480 MSG$(18)="Strike key when ready to return to editing: " 5500 MSG$(19)="By Address or Record: (A/R): " 5520 MSG$(20)="Enter starting address in hex: " 5540 MSG$(21)="Enter starting record number: " 5560 ' ' Subroutine to write parameter file. ' 5580 OPEN "O",1,DRV$+"FCMSGS.OVR" 5600 PRINT #1,REC$ 5620 PRINT #1,MASK$ 5640 PRINT #1,MSK1$ 5660 PRINT #1,MSK2$ 5680 PRINT #1,MSK3$ 5700 PRINT #1,LIN$ 5720 PRINT #1,DUM 5740 PRINT #1,ZER$ 5760 PRINT #1,ONE$ 5780 PRINT #1,REF,ESC,WRT,CLF,CDN,CUP,CRT 5800 PRINT #1,CLR$ 5820 PRINT #1,HI$ 5840 PRINT #1,LO$ 5860 PRINT #1,EOL$ 5880 PRINT #1,INIT$ 5900 PRINT #1,DINIT$ 5920 PRINT #1,POS.XY$ 5940 PRINT #1,NUL,R.C,BIASX,BIASY 5960 FOR I=1 TO 21 5980 PRINT #1,MSG$(I) 6000 NEXT I 6020 CLOSE 6040 ON ERROR GOTO 6160 6060 PRINT 6080 PRINT "Load & Execute 'FC.COM' (Y) ";: GOSUB 4160 6100 PRINT 6120 IF INPT$="" OR INPT$="Y" OR INPT$="y" THEN 6140 ELSE 6200 6140 CHAIN "FC.COM" 6160 PRINT "Can't find 'FC.COM'" 6180 PRINT 6200 CALL EXIT 6220 ' ' subroutine to expand exp$ ' 6240 NEXP$="" 6260 IF EXPN$="" THEN EXPN$="^@": RETURN 6280 FOR IN=1 TO LEN(EXPN$) 6300 IF MID$(EXPN$,IN,1)<" " THEN NEXP$=NEXP$+"^"+CHR$(ASC(MID$(EXPN$,IN,1))+64): GOTO 6340 6320 NEXP$=NEXP$+"'"+MID$(EXPN$,IN,1)+"'" 6340 NEXP$=NEXP$+"," 6360 NEXT IN 6380 EXPN$=LEFT$(NEXP$,LEN(NEXP$)-1) 6400 RETURN 0 NEXP$=NEXP$+"'"+MID$(EXPN$,IN,1)+"'" 6340 NEXP$=NEXP$+"," 6360 NEXT IN 6380 EXPN$=LEFT$(NEXP