0010 REM OEFCHKNON FILE INTEGRITY CHECKER - NON OSAS VERSION 0030 BEGIN 0040 LET TITLE$="BBX File Checker (non-OSAS version)" 0045 LET EXC$=" XXXXXX ZZZZZZ "; REM FILES TO EXCLUDE- PUT SPACE ON START AND 0045:END 0080 LET SLASH$="\"; REM FOR DOS 0090 IF INFO(0,0)<>"MSDOS" THEN LET SLASH$="/" 0100 LET WAITTIM=0 0110 ERASE "SCR"+FID(0),ERR=0120; GOTO 0110 0150 GOSUB DISP 0160 ASKCOMP: 0170 INPUT @(12,1),COMP$; REM .............................COMP ID 0180 IF COMP$="" THEN PRINT @(12,1),"ALL",; GOTO 0210 0190 IF LEN(COMP$)<>1 THEN PRINT 'RB'; GOTO 0170 0200 PRINT @(12,1),COMP$," ", 0210 LET DIR$=PFX,X=POS(" "=DIR$) 0220 IF X=0 THEN GOTO 0250 0230 LET DIR$=DIR$(1,X-1) 0240 PRINT @(12,2),FILL(30),@(12,2),DIR$, 0250 INPUT @(12,2),X$; REM ................................DIRECTORY 0260 IF X$="M" THEN GOTO 9902 0270 IF X$="" THEN LET X$=DIR$ 0280 LET DIR$=CVS(X$,3) 0290 IF DIR$(LEN(DIR$),1)="/" OR DIR$(LEN(DIR$),1)="\" THEN GOTO 0310 0300 LET DIR$=DIR$+"/" 0310 FOR I=1 TO LEN(DIR$) 0320 IF DIR$(I,1)="/" THEN LET DIR$(I,1)=SLASH$ 0330 NEXT I 0340 PRINT @(12,2),DIR$," ", 0350 OPEN (83,ERR=DIRERR)DIR$ 0360 GOTO 0380 0370 DIRERR: PRINT 'RB'; GOTO 0250 0380 PRINT @(12,2),FILL(30),@(12,2),DIR$, 0460 ASKAPP: 0470 INPUT @(65,1),'CL',APP$; REM ............................APPLICATION 0480 IF APP$="" THEN PRINT @(57,1),"ALL",; GOTO LASTPROMPT 0490 IF LEN(APP$)<>2 THEN PRINT 'RB'; GOTO 0470 0500 PRINT @(57,1),APP$," ", 0510 INPUT @(65,2),'CL',FIL$; REM ........................... FILE NAME 0520 IF FIL$="" THEN GOTO LASTPROMPT 0530 OPEN (88,ERR=NOFIL)DIR$+FIL$ 0540 LOCK (88,ERR=NOFIL) 0550 CLOSE (88) 0560 GOTO LASTPROMPT 0570 NOFIL: 0580 IF ERR=12 THEN PRINT @(10,22),"Error: No such file",; GOTO 0510 0590 IF ERR=0 THEN PRINT @(10,22),"Error: File is in use",; GOTO 0510 0600 PRINT 'CS',"Error number ",ERR," occurred opening ",FIL$ 0610 INPUT *; GOTO 0010 0620 LASTPROMPT: 0630 INPUT @(71,3),'CL',@(65,3),DT$; REM ...................IGNORE BEFORE MMDD 0630:YY 0640 IF DT$="" THEN GOTO 0710 0650 IF LEN(DT$)<>6 THEN GOTO 0630 0660 IF NUM(DT$,ERR=0630)>123199 THEN GOTO 0630 0670 IF DT$(1,2)<"01" OR DT$(1,2)>"12" THEN GOTO 0630 0680 IF DT$(3,2)<"01" OR DT$(3,2)>"31" THEN GOTO 0630 0690 LET DT$=DT$(5,2)+DT$(1,4) 0700 IF DT$(1,2)>"50" THEN LET DT$="19"+DT$ ELSE LET DT$="20"+DT$ 0710 INPUT @(65,4),SKIP$; REM ...............................FLD 1 ONLY 0720 LET SKIPS$=CVS(SKIP$,4) 0730 IF SKIP$="" THEN LET SKIP$="N" 0740 IF SKIP$="YES" THEN LET SKIP$="Y" 0750 IF SKIP$="NO" THEN LET SKIP$="N" 0760 IF POS(SKIP$="YN",1)=0 THEN GOTO 0710 1000 REM 1000,10 1010 REM 1020 INPUT @(10,22),"Printer? S for Screen only ",LP$; REM .............PRINTE 1020:R 1021 IF CVS(LP$,4)="S" THEN OPEN (14)FID(0); GOTO 1031 1030 LET F=14; OPEN (14,ERR=1020)LP$ 1040 LET L$="" 1050 GOSUB HEADER 1060 LET PG_LEN=58 1070 PRINT @(1,5),"Checking file: ",@(30,5),"Total Files Checked:", 1080 LET FCNT=0,FSKP=0 1090 IF FIL$<>"" THEN LET FILNAM$=FIL$; GOTO OPENFILE 1100 GETFILE: REM ......................................READ NEXT FILE 1110 READ RECORD(83,END=DONE)FILNAM$ 1120 IF LEN(FILNAM$)<3 THEN GOTO GETFILE 1130 IF LEN(FILNAM$)>=3 AND FILNAM$(1,3)="SCR" THEN GOTO GETFILE 1140 IF LEN(FILNAM$)=4 THEN GOTO 1200 1150 LET LASTDIG$=FILNAM$(LEN(FILNAM$),1) 1160 LET XDOT=POS("."=FILNAM$) 1170 IF XDOT>0 THEN LET LASTDIGDOT$=FILNAM$(XDOT-1,1) 1180 IF XDOT=0 AND COMP$<>"" AND LASTDIG$<>COMP$ THEN GOTO GETFILE 1190 IF XDOT>0 AND COMP$<>"" AND LASTDIGDOT$<>COMP$ THEN GOTO GETFILE 1200 IF APP$<>"" AND FILNAM$(1,2)<>APP$ THEN GOTO GETFILE 1210 OPENFILE: OPEN (81,ERR=FILERR)DIR$+FILNAM$ 1220 LET KEYERR$="",KEYMTCH=0,ERR7=0 1230 LET FID$=FID(81); IF FID$(1,1)<>$06$ AND FID$(1,1)<>$46$ AND FID$(1,1)<>$ 1230:86$ AND FID$(1,1)<>$C6$ THEN CLOSE (81); GOTO GETFILE 1240 LOCK (81,ERR=FILERR) 1250 CKDATE: IF DT$="" THEN GOTO GETFILESPECS 1260 LET X$="DIR "+DIR$+FILNAM$+" > SCR"+FID(0) 1270 LET X=SCALL(X$); IF X<>0 THEN GOTO CKPROB 1280 OPEN (88,ERR=CKPROB)"SCR"+FID(0) 1290 READ (88,END=CKPROB)Z$; IF LEN(Z$)>=LEN(FILNAM$) AND Z$(1,LEN(FILNAM$))=F 1290:ILNAM$ THEN GOTO 1300 ELSE GOTO 1290 1300 LET RDT$=Z$(30,2)+Z$(24,2)+Z$(27,2) 1310 CLOSE (88) 1320 IF RDT$(1,2)>"50" THEN LET RDT$="19"+RDT$; GOTO 1340 1330 LET RDT$="20"+RDT$ 1340 IF RDT$>=DT$ THEN LET GD=GD+1; GOTO GETFILESPECS ELSE LET OLD=OLD+1 1350 IF FID(0)<>FID(F) THEN PRINT (F)FILNAM$," SKIPPED... OLD DATE"; LET L=L+1 1350:; IF L>PG_LEN THEN GOSUB HEADER 1360 PRINT @(10,22),'CL',"FILE ",FILNAM$," SKIPPED... OLD DATE",'RB',; CLOSE ( 1360:81); GOTO GETFILE 1370 CKPROB: 1380 CLOSE (81); CLOSE (88) 1390 GOTO GETFILE 1400 FILERR: 1410 IF ERR=0 THEN LET FSKP=FSKP+1 1420 IF ERR=0 THEN LET L=L+1; IF L>PG_LEN THEN GOSUB HEADER 1430 IF ERR=0 AND FID(0)<>FID(F) THEN PRINT (F)FILNAM$," IS IN USE... SKIPPED" 1430:; LET L=L+1; IF L>PG_LEN THEN GOSUB HEADER 1440 IF ERR=0 THEN PRINT @(10,22),'CL',"FILE ",FILNAM$," IS IN USE... SKIPPED" 1440:,'RB',; WAIT WAITTIM; CLOSE (81); GOTO GETFILE 1450 PRINT 'CS','RB',"ERROR ",ERR," OPENING FILE ",FILNAM$,; INPUT * 1460 GOTO 0020 1470 GETFILESPECS: REM ........................................GET FILE SPECS 1480 LET FIN$=FIN(81) 1490 LET NUMRECS=DEC(FIN$(77,4)) 1500 LET SEGS=0; LET KEYS=1 1510 IF ASC(FID$(2,1))<>0 THEN LET KEYSIZ=ASC(FID$(2,1)); GOTO 1530; REM MUST 1510:BE SINGLE KEY FILE 1520 GOSUB CALCKEYS 1530 LET RECSIZ=DEC(FID$(7,2)) 1540 LET KEYS=1 1550 IF SEGS>0 THEN LET KEYS=KEYNUM[SEGS]+1 1560 GOTO CHECKIT 1570 CHECKIT: REM ..................................BEGIN FILE CHECK 1580 LET FCNT=FCNT+1 1590 PRINT @(15,5),FILL(12),@(15,5),FILNAM$, 1600 LET STIM=TIM,STIM$=STR(INT(STIM):"00")+":"+STR(FPT(STIM)*60:"00") 1610 PRINT @(50,5),FCNT,@(30,6),"# of keys:",KEYS:"#0"," # records:",NUMRECS, 1610:" ", 1620 FOR I=1 TO 14; PRINT @(1,I+6),'CL',; NEXT I 1630 FOR I=1 TO KEYS 1640 PRINT @(1,I+6),"KEY ",I-1,":", 1650 NEXT I 1660 DIM CNT[KEYS-1] 1670 LET K=0,CNT=0,MTCH=0 1680 KEYLOOP: 1690 GOSUB CHECK_AORD 1700 IF AORD$="A" THEN READ (81,KEY="",KNUM=K,DOM=1710); LET CNT=CNT+1; GOTO 1 1700:740 1710 IF AORD$="D" THEN READ (81,KEY=$FF$,KNUM=K,DOM=1720); GOTO 1740 1720 READLOOP: 1730 LET K$=KEY(81,END=EOF,ERR=BAD1) 1740 IF RECSIZ>0 THEN READ (81,ERR=BAD1)A$ ELSE READ (81,ERR=BAD1) 1750 LET CNT=CNT+1 1760 IF RECSIZ>0 AND K$=A$ THEN LET MTCH=MTCH+1 1770 IF RECSIZ=0 THEN LET MTCH=MTCH+1 1780 IF SEGS=0 AND K=0 AND K$<>A$ THEN GOSUB KEYMATCH 1790 IF K>0 THEN GOTO 1810 1800 IF SEGS>0 AND FLDNUM[1]=1 AND OFST[1]+1=1 AND LENG[1]=LEN(K$) AND K$<>A$ 1800:THEN GOSUB KEYMATCH 1810 PRINT @(8,K+7),CNT, 1820 GOTO READLOOP 1830 KEYMATCH: 1840 REM IF POS(" "+FILNAM$+" "=EXC$)>0 THEN RETURN 1850 IF KEYMTCH>20 THEN RETURN ; REM 20 IS ENUF ERRORS TO REPORT 1860 IF MAXFLD1>KEYSIZ THEN RETURN 1870 LET KX$=K$,AX$=A$; IF LEN(AX$)>60 THEN LET AX$=AX$(1,60) 1880 LET KEYMTCH=KEYMTCH+1 1890 IF POS($EE$=KX$)>0 THEN LET KX$(POS($EE$=KX$),1)="*"; GOTO 1890 1900 IF POS($EE$=AX$)>0 THEN LET AX$(POS($EE$=AX$),1)="*"; GOTO 1900 1910 LET KEYERR$=KEYERR$+"KEY : "+KX$+"< DOESNT MATCH"+$EE$+"FLD 1: "+AX$+"<" 1910:+$EE$ 1920 RETURN 1930 CHECK_AORD: 1940 IF SEGS=0 THEN LET AORD$="A"; RETURN 1950 FOR I=1 TO SEGS 1960 IF KEYNUM[I]=K THEN LET AORD$=ORD$[I]; EXITTO AORD_DONE 1970 NEXT I 1980 ESCAPE; REM SHD NEVER HAPPEN 1990 AORD_DONE: RETURN 1995 BAD1: LET ERR7=1 1996 GOTO PROB 2000 REM 2000,10 2010 EOF: REM .........................................DONE WITH FILE CHECK 2020 LET ETIM=TIM,ETIM$=STR(INT(ETIM):"00")+":"+STR(FPT(ETIM)*60:"00") 2030 LET ELAP=ETIM-STIM; IF ELAP<0 THEN LET ELAP=ELAP+24 2040 LET ELAP=INT(ELAP)*60+FPT(ELAP)*60 2050 LET ELAP$=STR(INT(ELAP/60):"##0")+":"+STR(FPT(ELAP/60):"00") 2060 LET CNT[K]=CNT 2070 LET K=K+1 2075 IF ERR7 THEN GOTO PROB 2080 IF SKIP$="Y" THEN GOTO 2100; REM !!!!!!!!!!!!!!!!!!!!!!!! 2090 IF KMTCH THEN LET ERRTYP$="CM"; GOTO PROB 2120 IF KEYMTCH>0 THEN LET ERRTYP$="CM"; GOTO PROB 2130 FOR I=1 TO KEYS 2140 IF SKIP$="Y" THEN EXITTO 2170 2150 IF CNT[I-1]<>CNT THEN LET ERRTYP$="CC"; EXITTO PROB 2160 NEXT I 2170 GOTO FILEOK 2180 FILEOK: 2190 IF FID(0)=FID(F) THEN GOTO 2220 2200 PRINT (F)FILNAM$,@(18),STIM$,@(26),ETIM$,@(32),ELAP$,@(40),"OK" 2210 LET L=L+1; IF L>PG_LEN THEN GOSUB HEADER 2220 GOTO CLOSEIT 2300 REM 2300,10 2310 PROB: REM .....................................FILE ERRORS FOUND 2320 LET FILE_ERRS=FILE_ERRS+1 2330 IF FID(F)<>FID(0) THEN GOTO PROB_PRT 2340 IF KEYMTCH>0 THEN PRINT @(10,21),"KEY AND FLD 1 MATCH ERROR - FIX FILE" 2341 IF ERR7>0 THEN PRINT @(10,21),"ERROR 7 - FILE REQUIRES REBUILD" 2350 INPUT @(10,22),'RB',"PROBLEM FOUND. NOTE IT AND CONTINUE: ",* 2360 PRINT @(0,22),'CL',@(0,21),'CL', 2370 CLOSEIT: 2380 CLOSE (81) 2390 IF FIL$<>"" THEN GOTO DONE 2400 GOTO GETFILE 2410 PROB_PRT: 2420 IF ERR7=0 THEN PRINT (F)FILNAM$,@(18),STIM$,@(26),ETIM$,@(32),ELAP$,@(40) 2420:,"ERRORS FOUND" 2421 IF ERR7>0 THEN PRINT (F)FILNAM$,@(18),STIM$,@(26),ETIM$,@(32),ELAP$,@(40) 2421:,"ERROR 7 ENCOUNTERED" 2430 LET L=L+1; IF L>PG_LEN THEN GOSUB HEADER 2440 IF KEYMTCH=0 THEN GOTO 2520 2450 LET X=POS($EE$=KEYERR$) 2460 LET KERR$=KEYERR$(1,X-1) 2470 PRINT (F)KERR$; LET L=L+1; IF L>PG_LEN THEN GOSUB HEADER 2480 IF X=LEN(KEYERR$) THEN GOTO 2510 2490 LET KEYERR$=KEYERR$(X+1) 2500 GOTO 2440 2510 LET KEYERR$="" 2520 IF CNT<>MTCH THEN PRINT (F)@(18),"COUNTS IN ALL KEYS DONT MATCH... RUN FI 2520:LE REBUILD ON ",FILNAM$ 2530 LET L=L+2; IF L>PG_LEN THEN GOSUB HEADER 2540 GOTO CLOSEIT 4000 REM 4000,10 4010 CALCKEYS: REM ......................... CALC MKEYED SPECS 4020 LET MK$=FIN$(86)+$FF$ 4030 LET X=POS($FF$=MK$) 4040 LET SEGS=INT((X-1)/8) 4050 IF X=0 THEN LET SEGS=0; GOTO 4180 4060 DIM KEYNUM[SEGS],FLDNUM[SEGS],OFST[SEGS],LENG[SEGS],ORD$[SEGS] 4070 LET MAXFLD1=1; REM USE THIS FOR CK IF FLD1 = KEY TO SKIP KEYMATCH LOGIC 4080 FOR I=1 TO SEGS 4090 LET X$=MK$((I-1)*8+1,8) 4100 LET KEYNUM[I]=DEC(X$(1,1)) 4110 LET FLDNUM[I]=DEC(X$(2,1)) 4120 LET OFST[I]=DEC(X$(3,2)) 4130 LET LENG[I]=DEC(X$(5,1)) 4140 IF FLDNUM[I]=1 AND OFST[I]+LENG[I]>MAXFLD1 THEN LET MAXFLD1=OFST[I]+LENG[ 4140:I] 4150 LET ORD$[I]="A"; IF X$(6,1)=$01$ THEN LET ORD$[I]="D" 4160 NEXT I 4170 LET KEYSIZ=LENG[1] 4180 RETURN 4190 REM .... CALC KNUM =0 FOR REMOVING 4200 LET DKEY$="" 4210 FOR I=1 TO SEGS 4220 IF KEYNUM[I]>0 THEN GOTO 4240 4230 LET DKEY$=DKEY$+FLD$[FLDNUM[I]](OFST[I]+1,LENG[I]) 4240 NEXT I 4250 RETURN 5000 REM 5000,10 5010 DONE: 5020 IF FID(0)=FID(F) THEN GOTO 5040 5030 PRINT (F)'LF',"*** End of Report ***" 5040 IF FID(0)=FID(F) THEN PRINT @(10,22),'CL',"All done... ",FILE_ERRS," Erro 5040:rs Encountered... Press : ", 5041 IF FID(0)<>FID(F) THEN BEGIN ; GOTO QUIT 5042 BEGIN 5045 INPUT 'CI',* 5050 GOTO QUIT 5060 HEADER: 5070 IF FID(F)=FID(0) THEN GOTO 5150 5080 PRINT (F)'FF', 5110 LET P0=P0+1 5128 GOSUB GET_TIME 5130 PRINT (F)DATE(0)," ",T$,@(40),"FILE CHECK AUDIT REPORT" 5135 PRINT (F)" " 5140 PRINT (F)"FILE NAME",@(18),"START",@(26),"STOP",@(32),"ELAPSED",@(40),"ST 5140:ATUS" 5150 LET L=5 5160 RETURN 5170 DISP: 5180 PRINT 'CS','BACKGR','BLUE','WHITE','DEFAULT',@(20),TITLE$ 5190 PRINT @(1,1),"Company Id",@(45,1),"Application", 5200 PRINT @(1,2),"Directory", 5210 PRINT @(45,2),"File Name", 5220 PRINT @(45,3),"Ignore Files Before MMDDYY", 5230 PRINT @(45,4),"Check field 1 only? ",SKIP$ 5240 RETURN 8800 GET_TIME: 8805 LET X=TIM; LET H=INT(X); LET SFX$="am" 8810 IF H>=12 THEN LET SFX$="pm" 8815 IF H>12 THEN LET H=H-12 8820 IF H=0 THEN LET H=12 8825 LET M=FPT(X); LET M=INT(M*60) 8830 IF M=60 THEN LET M=59; REM CAUSE SOMETIMES ROUNDS TO 60 8835 LET T$=STR(H:"00")+":"+STR(M:"00")+SFX$ 8899 RETURN 9900 REM 9900,2 9902 QUIT: 9903 PRINT " DONE" 9906 RUN "MENU",ERR=9908 9910 END