* DICT.UPDATE - UPDATE DICTIONARY FILES BETWEEN ACCOUNTS * $INCLUDE BP.MASTER GEN.COM2 * CRT "Enter ACCOUNT to compare file with:": GET(ARG.,1) ACCOUNT THEN CRT " ":ACCOUNT END ELSE ACCOUNT=''; INPUT ACCOUNT END *CRT "Enter FILE NAME to compare:": *GET(ARG.,2) FNAME THEN *CRT " ":FNAME *END ELSE *FNAME=''; INPUT FNAME *END FNAME='*' FNAME<2>='QFILE' ACCOUNT<2>=@WHO PRINTER ON IF FNAME<1>='*' THEN OPEN 'VOC' TO VOC ELSE ABORT 201,'VOC' EOV=0 LIST1=1 SELECT VOC TO LIST1 LOOP READNEXT ID FROM LIST1 ELSE EOV=1 UNTIL EOV DO BEGIN CASE CASE ID[1,1]='&' CLEARDATA CONTINUE ;* skip universe files CASE ID[1,2]='UV' CLEARDATA CONTINUE CASE ID[1,3]='SYS' CLEARDATA CONTINUE CASE ID[1,8]='UNIVERSE' CLEARDATA CONTINUE CASE 1 READV TYPE FROM VOC,ID,1 ELSE VREC='' IF TYPE[1,1]='F' THEN FNAME=ID CRT "Current File: DICT ":FNAME GOSUB 1000 END END CASE REPEAT END ELSE GOSUB 1000 END GO 9999 * 1000 * CLEARDATA DATA \QFILE\ EXECUTE \SET-FILE \:ACCOUNT<1>:\ \:FNAME OPEN "DICT ":FNAME TO FVAR ELSE PRINT "DICT ":FNAME:" DOES NOT EXIST IN ":@WHO:" ACCOUNT" PRINT RETURN END OPEN 'DICT QFILE' TO QFILE ELSE PRINT "DICT ":FNAME:" DOES NOT EXIST IN ":ACCOUNT<1>:" ACCOUNT" PRINT RETURN END * PRINT "DICT update run on ":@WHO:" account, using DICT ":FNAME<1>:", against ":ACCOUNT<1>:" account." PRINT T=0 ; T<2>=0 TOK=0 ; TOK<2>=0 TNEW=0 ; TNEW<2>=0 TDIFF=0 ; TDIFF<2>=0 OUTPUT='' FOR XX=1 TO 2 PASS1=XX IF XX=1 THEN F1=FVAR ; F2=QFILE DATA \NSELECT DICT \:FNAME<2> END ELSE F1=QFILE ; F2=FVAR * ALREADY PROCESSED THE ITEMS IN FNAME<1> SO CAN SKIP THEM. DATA \NSELECT DICT \:FNAME<1> END 100 * EXECUTE \SSELECT DICT \:FNAME CAPTURING JUNK EOF=0 LOOP READNEXT KEY ELSE EOF=1 UNTIL EOF DO READ SOURCE FROM F1,KEY THEN IF PASS1 ELSE T=T+1 READ QSOURCE FROM F2,KEY THEN IF SOURCE = QSOURCE THEN IF PASS1 ELSE TOK=TOK+1 END ELSE IF PASS1 ELSE WRITE SOURCE ON F2,KEY TDIFF=TDIFF+1 PRINT 'Item different: ':KEY END END END ELSE IF PASS1 THEN IF PASS1=1 THEN WRITE SOURCE ON F2,KEY TNEW=TNEW+1 PRINT 'Item missing in ':ACCOUNT:': ':KEY END END END REPEAT IF PASS1=1 THEN PASS1=0 ; GO 100 NEXT XX * CRT FNAME:' records checked: ':T:' OK=':TOK:' New=':TNEW:' Diff: ':TDIFF PRINT PRINT FNAME<1>:' records checked: ':T<1>:' OK=':TOK<1>:' New=':TNEW<1>:' Diff: ':TDIFF<1>:' Missing: ':TNEW<2> PRINT ; PRINT RETURN * 9999 * PRINTER OFF PRINTER CLOSE STOP