home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64Toolkit / COMPARE-64 (.txt) < prev    next >
Encoding:
Commodore BASIC  |  2019-04-13  |  7.6 KB  |  248 lines

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