home *** CD-ROM | disk | FTP | other *** search
- 10 REM THIS PROGRAM ORIGINATED AT
- 20 REM HONEYWELL LTD,(U.K) IN THE
- 30 REM LATE 60'S OR EARLY 70'S. IT WAS
- 32 REM TRANSLATED FROM ASSEMBLER TO
- 34 REM FORTRAN BY RUSS BARBOUR, AND HAS
- 40 REM BEEN UPDATED BY JIM BUTLER FOR
- 41 REM VARIOUS MINICOMPUTERS. THIS
- 42 REM VERSION WAS TRANSLATED FROM THE
- 43 REM FORTRAN BY ERIC SPIEWAK - 1984.
- 45 GOSUB 8100: REM INITIALIZE 'STRING THING' , PART 1
- 49 RV$="2.0"
- 50 PRINT "[147]COMPARE-64 REV. ";RV$
- 60 GOSUB 5220
- 64 GOSUB 8200
- 65 CM$=","
- 70 FR=FRE(0):IFFR<0THENFR=65536+FR
- 500 INPUT "OLD MASTER";OM$
- 505 IF LEN(OM$)=0THENPRINT"ERROR":GOTO500
- 510 INPUT "NEW MASTER";NM$
- 515 IF LEN(NM$)=0THENPRINT"ERROR":GOTO510
- 520 PRINT "DIFFERENCE (FILE NAME OR"
- 521 INPUT " S[146]CREEN OR P[146]RINTER) S[157][157][157]";DF$
- 525 FX$="@0:"+DF$+",S,W":SA=3
- 530 D=8:IF DF$="P"THEND=4:FX$="":SA=7
- 540 IF DF$="S"THEND=3
- 545 INPUT "FILE TYPE (PRG OR SEQ) PRG[157][157][157][157][157]";FT$
- 546 SQ=0:PG=-1:IF FT$="SEQ"THENSQ=-1:PG=0:LQ=1:GOTO 550
- 547 JL=80:LQ$="":INPUT "IGNORE DIFFERENT LINE NUMBERS Y[157][157][157]";IG$
- 548 LQ=3:IF IG$="N"THENLQ=1:LQ$="NOT "
- 549 GOTO 560
- 550 INPUT "LINE LENGTH";JL
- 560 IN=-1:OPEN 15,8,15,"I0"
- 570 OPEN 1,8,4,"0:"+OM$+","+FT$+",R"
- 575 FI$=OM$:GOSUB4530:IF(IE)THEN830
- 580 OPEN 2,8,2,"0:"+NM$+","+FT$+",R"
- 585 FI$=NM$:GOSUB4530:IF(IE)THEN830
- 590 OPEN 3,D,SA,FX$
- 595 IFD=8THENFI$=NM$:GOSUB4530:IF(IE)THEN830
- 596 IN=0:REM FINISHED INITIALIZATION
- 599 REM CALCULATE COMPARISON DEPTH
- 600 LM=10*INT((FR/2-1000)/(10*(JL+3))):DIMXO$(LM):DIM XN$(LM):DIM R(2):DIM AB(2)
- 602 CH%=2:REM NUMBER OF MATCHES TO END NON-MATCH
- 605 IF SQ THEN 680
- 610 GET#1,L$,H$:IF L$=""THENL$=CHR$(0)
- 620 IF H$=""THENH$=CHR$(0)
- 630 S1=ASC(L$)+ASC(H$)*256
- 640 GET#2,L$,H$:IF L$=""THENL$=CHR$(0)
- 650 IF H$=""THENH$=CHR$(0)
- 660 S2=ASC(L$)+ASC(H$)*256
- 670 IF S1<>S2 THEN PRINT OM$" STARTS AT";S1;NM$" STARTS AT";S2
- 680 PRINT#3,"COMPARE-64 REV. ";RV$
- 685 PRINT#3,"OLD MASTER = ";OM$
- 690 PRINT#3,"NEW MASTER = ";NM$
- 692 PRINT#3,"FILE TYPE = ";FT$
- 693 IF PG THEN PRINT#3,"LINE NUMBER DIFFERENCES ARE ";LQ$;"IGNORED"
- 694 EN$="":IF SQ THEN EN$=CHR$(13)
- 695 PRINT#3,"LINE LENGTH= ";JL;" DEPTH = ";LM
- 696 PRINT "START OF COMPARISON - ";TI$
- 699 REM BEGIN COMPARISON
- 700 BO=0:BN=0:OV=0:DO=0:DN=0
- 701 BO=BO+1:BN=BN+1:REM NEXT RECORD
- 703 OV=0:EX=0:DN=0
- 705 DO=0
- 710 IF(DN>=LM-EX OR DO>=LM-EX)THEN1000
- 720 J=1:GOSUB 4400:OL$=C$
- 730 J=2:GOSUB 4400:NL$=C$
- 740 IF MID$(OL$,LQ)<>MID$(NL$,LQ)THEN910:REM COMPARE TWO RECORDS
- 750 IF DO+DN=0 THEN 800:REM CHECK EOF
- 760 REM CHECK FOR TRIVIAL MATCH AFTER MIS-MATCH
- 765 TL=1:IFPGTHENTL=4-LQ:REM 3 OR 1 FOR BASIC WITH/WITHOUT LINE #'S INCLUDED
- 770 IF LEN(MID$(OL$,LQ))<>TLTHEN2000
- 780 EX=EX+1:GOTO710
- 800 IFN(1)+N(2)>=2E9THEN 820
- 809 IF OV<>0 THEN 703
- 810 IF (BO-AB(1)+BN-AB(2))<LM/5THEN701
- 811 FORI=0TOR(1)-BO+1:XO$(I)=XO$(BO-AB(1)+I):NEXT:AB(1)=BO
- 812 FORI=0TOR(2)-BN+1:XN$(I)=XN$(BN-AB(2)+I):NEXT:AB(2)=BN
- 815 GOTO 701
- 820 PRINT#3,"END OF COMPARISON"
- 825 PRINT "END OF COMPARISON - ";TI$
- 830 CLOSE 1:CLOSE 2:CLOSE 3:CLOSE 15
- 840 END
- 905 REM LINES DO NOT COMPARE
- 906 REM SET CH=NUMBER WHICH MUST COMPARE TO END MISMATCH
- 910 EX=0:CH=CH%:I=DN:DN=DO:DO=I
- 920 IF(DO-DN)>0 THEN 710
- 930 IF(DO-DN)=0 THEN DN=DN+1:GOTO 705
- 940 DO=DO+1:GOTO 710
- 1000 PRINT "OVERFLOW"
- 1010 EX=0:J=1:II=0:PRINT "OLD MASTER - ";BO
- 1020 FOR I=0TO3
- 1025 IFII>=LMTHEN1050
- 1030 DO=II:GOSUB4400:P$=C$:IFPGTHENLI$=P$:GOSUB5710
- 1035 II=II+1
- 1040 PRINTP$:IF(LEN(MID$(C$,LQ))=TL)THEN 1025
- 1050 NEXT
- 1060 EX=0:J=2:II=0:PRINT "NEW MASTER - ";BN
- 1070 FOR I=0TO3
- 1075 IFII>=LMTHEN1095
- 1080 DN=II:GOSUB4400:P$=C$:IFPGTHENLI$=P$:GOSUB5710
- 1085 II=II+1
- 1090 PRINTP$:IF(LEN(MID$(C$,LQ))=TL)THEN 1075
- 1095 NEXT
- 1110 PRINT "DO YOU THINK IT'S 'R[146]EPLACE', 'I[146]NSERT', 'D[146]ELETE',"
- 1120 INPUT "OR SHOULD I Q[146]UIT";AN$
- 1130 AN$=LEFT$(AN$,1):DO=0:DN=0:EX=0
- 1135 IF(AN$="R" OR AN$="I")THEN DN=R(2)-BN:OV=1
- 1137 IF(AN$="I")THEN2020
- 1140 IF(AN$="R" OR AN$="D")THEN DO=R(1)-BO:OV=1:GOTO2020
- 1150 IF AN$="Q" THEN 1200
- 1160 GOTO 1110
- 1200 CLOSE 1:CLOSE 2:CLOSE 3:CLOSE 15
- 1210 END
- 2000 REM RECORDS MATCH AFTER NON-MATCH
- 2010 CH=CH-1:IFCH<>0THEN780
- 2020 IF DO+DN=0 THEN 800
- 2030 CB$="OMITTED":IF DO=0THENCB$="INSERTED"
- 2040 IF (DO<>0)AND(DN<>0)THENCB$="CHANGED"
- 2050 IF DO>1THEN 2100
- 2060 PRINT#3,"***** ";CB$;" AT ";BO;" *****"
- 2070 GOTO 2220
- 2100 PRINT#3,"***** ";CB$;" AT ";BO;","BO+DO-1;" *****"
- 2220 IF DO=0 THEN 2274
- 2222 IF CB$<>"OMITTED" THEN PRINT#3,"OLD MASTER HAD:"
- 2224 FOR I=BO-AB(1) TO DO+BO-AB(1)-1 :P$=XO$(I):IFPGTHENLI$=P$:GOSUB5710
- 2226 PRINT#3,P$:NEXT
- 2270 IF DN=0 THEN 2277
- 2272 PRINT#3," ":PRINT#3,"NEW MASTER HAS:":PRINT#3," "
- 2274 FOR I=BN-AB(2) TO DN+BN-AB(2)-1 :LI$=XN$(I):P$=LI$:IFFT$="PRG"THENGOSUB5710
- 2276 PRINT#3,P$:NEXT
- 2277 REM PRINT AB(1);R(1);BO;DO;AB(2);R(2);BN;DN;XO$(0);XN$(0):STOP
- 2280 FORI=DOTO(R(1)-BO):XO$(I-DO)=XO$(I+BO-AB(1)):NEXT
- 2284 FORI=DNTO(R(2)-BN):XN$(I-DN)=XN$(I+BN-AB(2)):NEXT
- 2288 BO=BO+DO:BN=BN+DN:DO=0:DN=0:EX=0
- 2289 AB(1)=BO:AB(2)=BN:BO=BO+EX:BN=BN+EX
- 2295 GOTO 800
- 3999 REM PSEUDO "GET" ROUTINE FOR DE-TOKENIZER
- 4000 A$=MID$(LI$,IX,1):IX=IX+1:RETURN
- 4399 REM DISK I/O ROUTINE - MANAGES ARRAY STORAGE
- 4400 IF(J=1)AND(BO+DO+EX)>R(1) THEN 4420
- 4405 IF(J=2)AND(BN+DN+EX)>R(2) THEN 4420
- 4410 IF(J=1)THENC$=XO$(DO+BO-AB(1)+EX):GOTO4580
- 4415 IF(J=2)THENC$=XN$(DN+BN-AB(2)+EX):GOTO4580
- 4420 IF DS(J)<>0THENC$="":GOTO4580
- 4422 IF SQ THEN C$="":GOTO 4490
- 4425 GET#J,A$,B$
- 4430 IF A$="" AND B$="" GOTO 4540
- 4440 GET#J,A$,B$
- 4450 IF A$="" THEN A$=CHR$(0)
- 4460 IF B$="" THEN B$=CHR$(0)
- 4470 N(J)=ASC(A$)+ASC(B$)*256
- 4480 C$=A$+B$
- 4490 POKE143,J:POKE251,ASC(EN$+CHR$(0))
- 4500 SYS 49152:DS(J)=ST
- 4510 C$=C$+LEFT$(SQ$,PEEK(142))
- 4520 IFDS(J)=0THEN R(J)=R(J)+1:GOTO4550
- 4525 FI$=OM$:IFJ=2THENFI$=NM$
- 4530 IE=0:INPUT#15,E1$,E2$,E3$,E4$
- 4532 IF(E1$="00"ANDLEN(C$)<254ANDIN)THEN RETURN
- 4534 PRINT "DISK I/O ERROR- ";FI$
- 4535 PRINT " STATUS = ";E1$CM$E2$CM$E3$CM$E4$:IF(IN)THEN IE=-1:RETURN
- 4536 PRINT "RECORD LENGTH = ";LEN(C$)
- 4540 N(J)=1E9:C$="":DS(J)=64:RETURN
- 4550 IF J=1ANDDO=0 THEN AB(1)=BO
- 4555 IF J=2ANDDN=0THEN AB(2)=BN
- 4560 IF(J=1)THENXO$(DO+BO-AB(1)+EX)=C$
- 4570 IF(J=2)THENXN$(DN+BN-AB(2)+EX)=C$
- 4580 IFDS(J)<>0THENN(J)=1E9
- 4590 REM PRINT "FILE ";J;R(J);BO;DO;BN;DN;MID$(C$,1)
- 4600 RETURN
- 5090 REM THE FOLLOWING IS TAKEN FROM LISTER..VIC/64 COMPUTE! DEC 1983
- 5100 DATA 19,147,17,145,29,157,18,146,20, 148,141,32
- 5110 REM 80-COLUMN CURSOR STUFF
- 5120 DATA 129,149,150,151,152,14,142,153, 154
- 5130 DATA 155
- 5140 REM VIC STUFF
- 5150 DATA 144,5,28,159,156,30,31,158
- 5160 DATA 8,9,133,137,134,138,135,139,136 ,140
- 5170 DATA HOME,CLEAR,DOWN,UP,RIGHT,LEFT,RVS,RVOFF,DEL,INST,RETURN,SPACE
- 5180 DATA ORANGE,BROWN,L.RED,GRAY1,GRAY2,TEXT,GRAPHIC,L.GREEN,L.BLUE
- 5190 DATA GRAY3
- 5200 DATA BLACK,WHITE,RED,CYAN,MAGENTA,GREEN,BLUE,YELLOW
- 5210 DATA LOCK,UNLOCK,F1,F2,F3,F4,F5,F6,F7,F8
- 5220 DIMA(40),A$(40),K$(90)
- 5230 FORJ=0TO39:READA(J):NEXTJ
- 5240 FORJ=0TO39:READA$(J):NEXTJ
- 5250 DATA END,FOR,NEXT,DATA,INPUT#,INPUT,DIM,READ,LET,GOTO,RUN,IF,RESTORE,GOSUB
- 5260 DATA RETURN,REM,STOP,ON,WAIT,LOAD,SAVE,VERIFY,DEF,POKE,PRINT#,PRINT,CONT
- 5270 DATA LIST,CLR,CMD,SYS,OPEN,CLOSE,GET,NEW,TAB(,TO,FN,SPC(,THEN,NOT,STEP
- 5280 DATA +,-,*,/,^,AND,OR,>,=,<,SGN,INT,ABS,USR,FRE,POS,SQR,RND,LOG,EXP,COS
- 5290 DATA SIN,TAN,ATN,PEEK,LEN,STR$,VAL,ASC,CHR$,LEFT$,RIGHT$,MID$,GO,CONCAT
- 5300 DATA DOPEN,DCLOSE,RECORD,HEADER,COLLECT,BACKUP,COPY,APPEND,DSAVE,DLOAD
- 5310 DATA CATALOG,RENAME,SCRATCH,DIRECTORY
- 5320 FORJ=0TO90:READK$(J):NEXTJ
- 5330 P1$="[":P2$="]":P3$="[":P4$="]":F$=P1$
- 5340 T7=1:REM TRANSLATE CURSOR MOVES
- 5350 RETURN
- 5700 REM NEW LINE
- 5710 IX=1:GOSUB7010:Q=0:T1=1:C1=-1
- 5730 GOSUB4000:X$=A$:GOSUB4000:B$=A$:A$=X$
- 5740 L=ASC(A$+CHR$(0))+ASC(B$+CHR$(0))*256
- 5770 F2=1:P$=STR$(L)+" "
- 5780 IF LEFT$(P$,1)=" "THENP$=MID$(P$,2):GOTO5780
- 5800 REM START TEXT HERE
- 5810 GOSUB4000:IFA$=""THEN RETURN
- 5820 T=0:A=ASC(A$):IFA=32ANDF$=","GOTO5840
- 5830 IFQ=0OR(AAND127)>31ORT7=0GOTO5900
- 5840 FORJ=0TO40:IFA=A(J)THENB$=A$(J):GOTO 5860
- 5850 NEXTJ:GOTO6000
- 5860 IFB$=B1$THENB=B+1:GOTO5810
- 5870 IFB>0THENA$=MID$(STR$(B+1),2)+F$+B$:GOTO5890
- 5880 A$=F$+B$
- 5890 B=0:B1$=B$:F$=",":F1=1:GOTO6010
- 5900 A=A-128:IFA<0ORQ<>0GOTO6000
- 5910 IFA=127THENA$="[255]":GOTO6000
- 5920 T=1:A$=K$(A)
- 5930 IFA=15THENQ=2
- 6000 GOSUB7010
- 6010 IFA$=CHR$(34)THENQ=1-Q
- 6020 REM C=-1 FOR ALPHANUMERIC
- 6030 C=ASC(LEFT$(A$,1)):C=(C<48ORC>57)AND(C<65ORC>90)
- 6040 IFT<>T1ORT=1THENT1=T
- 6050 C=ASC(RIGHT$(A$,1)):C1=((C<48ORC>57)AND(C<65ORC>90))ORA=37
- 6060 P$=P$+A$
- 6070 GOTO5810
- 7000 REM CLOSE OFF CURSOR EXPRESSION
- 7010 IFF1=0GOTO7040
- 7020 IFB>0THENP$=P$+MID$(STR$(B+1),2)
- 7030 B=0:F1=0:B1$="":P$=P$+P2$:F$=P1$
- 7040 RETURN
- 8070 REM JIM BUTTERFIELD'S STRING THING
- 8080 REM MODIFIED FOR VARIABLE FILE #
- 8085 REM AT 143 (HEX 8F)
- 8086 REM AND VARIABLE TERMINATION CHAR
- 8087 REM AT 251 (HEX FB)
- 8100 SQ$="ABCDEFGHIJKLMNOPQ"
- 8110 SQ$=SQ$+SQ$+SQ$+SQ$+SQ$
- 8120 SQ$=SQ$+SQ$+SQ$
- 8125 RETURN
- 8130 REM ABOVE SETS STRING FOR MAX(255)
- 8200 DATA 160,2,177,45,153,137,0,200,192,6
- 8210 DATA 208,246,166,143,32,198,255
- 8220 DATA 32,228,255,197,251,240,11,164,142,145
- 8230 DATA 140,200,132,142,196,139,208,238,76,204,255
- 8250 FOR J=49152 TO 49189:READ X:POKEJ,X:T=T+X:NEXT J
- 8260 IF T<>5915 THEN STOP
- 8300 RETURN
-