! SRCFIX.BAS - applies changes to source programs. ! ! The file of changes is created as follows: ! ! .SRCCOM PGM.CHG=PGM.NEW,PGM.OLD/Q ! ! Why not just distribute changed source code instead of going ! thru all this? The problem with that is that I don't hold the ! copyrights to the original programs. I can however distribute ! changes and allow YOU to change YOUR copy of the programs. ! ! tested with SRCCOM.LIT version 1.0(100) hash 070-206-735-655 ! ! Copyright [c] Noel Alaska Systems Technology, 1983. MAP1 NEW'SYNC'POINT ! current sync point MAP2 SP'NEW,F,6,0 MAP2 SP'OLD,F,6,0 MAP1 IN1'LINE$ ! input line (changes) MAP2 IN1'LINE,S,500 MAP2 IN1'CHAR(500),B,1,,@IN1'LINE MAP2 IN1'FORMAT,@IN1'LINE MAP3 IN1'FILL1,S,1 MAP3 IN1'NLINE,S,5 MAP3 IN1'FILL2,S,1 MAP3 IN1'OLINE,S,5 MAP3 IN1'FILL3,S,1 MAP3 IN1'REST,S,487 MAP1 IN2'LINE$,S,500 ! input line (original) MAP1 IN1'FILE,S,30 ! file names MAP1 IN2'FILE,S,30 MAP1 OUT'FILE,S,30 PRINT PRINT "SRCFIX applies changes to source programs" PRINT PRINT " (you MUST enter FULL file specs)" PRINT FN1: INPUT LINE "Name of Changes File is ", IN1'FILE LOOKUP IN1'FILE, X IF X <= 0 THEN PRINT "CAN'T FIND ";IN1'FILE : PRINT : GOTO FN1 FN2: INPUT LINE "Name of Original File is ", IN2'FILE LOOKUP IN2'FILE, X IF X <= 0 THEN PRINT "CAN'T FIND ";IN2'FILE : PRINT : GOTO FN2 FN3: INPUT LINE "Name of New File will be ", OUT'FILE LOOKUP OUT'FILE, X IF X = 0 THEN GOTO OPE PRINT OUT'FILE; " already exists, delete it first? "; INPUT "", X$ X$ = LEFT$(UCS(X$+" "),1) IF X$ = "Y" THEN KILL OUT'FILE : GOTO OPE PRINT GOTO FN3 OPE: OPEN #1, IN1'FILE, INPUT OPEN #2, IN2'FILE, INPUT OPEN #3, OUT'FILE, OUTPUT DOIT: FOR I = 1 TO 15 : IN1'CHAR(I) = 0 : NEXT I ! clean up prefix area INPUT LINE #1, IN1'LINE$ IF EOF(1) THEN GOTO FINISH'UP PRINT "."; IF IN1'CHAR(1) <> CHR$(10) THEN GOTO DOIT4 ! check for ^J IF IN1'CHAR(2) = 0 THEN GOTO DOIT ! if that's all skip I = 1 ! else del the ^J DOIT2: I = I + 1 IF I > 500 THEN GOTO DOIT3 IN1'CHAR(I-1) = IN1'CHAR(I) IF IN1'CHAR(I) = 0 THEN GOTO DOIT4 GOTO DOIT2 DOIT3: IN1'CHAR(500) = 0 DOIT4: IF IN1'FILL1 <> " " THEN GOTO DOIT ! validate line IF IN1'FILL2 <> " " THEN GOTO DOIT IF IN1'FILL3 <> CHR$(9) THEN GOTO DOIT IF IN1'NLINE = "+++++" THEN CALL DELETE'LINE : GOTO DOIT IF IN1'OLINE = "-----" THEN CALL INSERT'LINE : GOTO DOIT CALL SYNC'LINES GOTO DOIT FINISH'UP: ! copy whatever is left in old file IF EOF(2) THEN GOTO FINISH'UP'3 PRINT : PRINT "finishing up..." FINISH'UP'2: ORG'LINE'NUM = ORG'LINE'NUM + 1 INPUT LINE #2, IN2'LINE$ IF EOF(2) THEN GOTO FINISH'UP'3 PRINT #3, IN2'LINE$ GOTO FINISH'UP'2 FINISH'UP'3: CLOSE #1 : CLOSE #2 : CLOSE #3 PRINT : PRINT "done"; CHR$(7) END DELETE'LINE: ! process 'line only in old' line X = IN1'OLINE IF EOF(2) THEN GOTO DL'3 DL'2: ORG'LINE'NUM = ORG'LINE'NUM + 1 INPUT LINE #2, IN2'LINE$ IF EOF(2) THEN GOTO DL'3 IF X = ORG'LINE'NUM THEN GOTO DL'3 PRINT #3, IN2'LINE$ GOTO DL'2 DL'3: INSERT'SWITCH = 0 RETURN INSERT'LINE: ! process 'line only in new' line IF INSERT'SWITCH THEN GOTO IL'3 X = IN1'NLINE DIF = SP'NEW - SP'OLD Y = X - DIF - 1 IF Y < 1 THEN GOTO IL'3 IF EOF(2) THEN GOTO IL'3 IL'2: ORG'LINE'NUM = ORG'LINE'NUM + 1 INPUT LINE #2, IN2'LINE$ IF EOF(2) THEN GOTO IL'3 PRINT #3, IN2'LINE$ IF Y > ORG'LINE'NUM THEN GOTO IL'2 IL'3: INSERT'SWITCH = -1 PRINT #3, IN1'REST RETURN SYNC'LINES: ! process 'line in both' line SP'NEW = IN1'NLINE SP'OLD = IN1'OLINE INSERT'SWITCH = 0 RETURN