!*************************** AMUS Program Label ****************************** ! Filename: DBCHKD.BAS Date: 3/26/91 ! Category: UTIL Hash Code: 541-615-103-524 Version: 91.3A(25) ! Initials: MKE/AM Name: DAVID W. BARROW III ! Company: STONEWALL COMPUTER CENTER Telephone #: 4143752667 ! Related Files: DBCHKD.RUN, DBCHKD.WRT, DBCHKD.DOC ! Min. Op. Sys.: AMOS/L 1.3 Expertise Level: BEG ! Special: Need a directory created by DIR/D/H/V (dirnam.ext)=(filspecs). ! Description: Uses VERIFY.LIT and creates a file comparing the directory ! to what is actually on the system. I find it a lot more informative than ! using just VERIFY alone. !***************************************************************************** ! DBCHKD.BAS - Dave Barrow's CHecK Directory ! ! Copyright 1991 by David W. Barrow III ! ! WRITTEN by DAVID W. BARROW III ! at STONEWALL COMPUTER CENTER ! 1894 Elm Drive, Town of Cedarburg ! West Bend, WI 53095 ! Telephone (414) 375-AMOS ! on June 24, 1990 ! ! ACKNOWLEDGEMENT - Thanks to Alan D. Christensen, of Christensen Computer Co., ! for teaching me the technique of writing a program - to write a ! program - to write a program. ! ! DBCHKD (1) makes a copy of a directory file; ! (2) VERIFYs it; ! (3) makes a list of the non-verified files; ! (4) Makes a .CMD file to get the existing file specifications; ! (5) gets the version and hash of those changed files from ! the system; ! (6) prints the old and new data to a file; ! (7) Cleans up the work files. ! ! DBCHKD does NOT modify the directory being checked! ! ! MODIFICATION HISTORY ! Date R Who What !--------- - --- ---------------------------------------------- ! 03-24-91 DWB Copy from FIXDIR and modify ! 03-25-91 A DWB Fix DIRNAM.CHK spacing ! 00999 01000 PROGRAM DBCHKD,91.03A(25) 01019 01100 MAP1 COUNTER, F, 6, 0 ! Loop counter 01110 MAP1 EXIST, F, 6, 0 ! Lookup answer 01120 MAP1 SPEC'END, F, 6, 0 ! Position of end of file'specification 01130 MAP1 CONTINUE, S, 1, "N" ! Answer to "Do you wish to continue?" 01140 MAP1 DIRNAM, S, 10 ! Name of directory file to be checked 01150 MAP1 DSTRING, S, 45 ! Used by ODTIM xcall 01160 MAP1 FILNAM, S, 12 ! names/files accessed by this program 01170 MAP1 OVER'WRITE, S, 180 ! WARNING 01172 MAP1 P'DT$, S, 32 ! Produced date string 01180 MAP1 Q$, S, 1, CHR$(34) ! Puts a quote in output file 01190 MAP1 RUN'DATE, S, 25 ! Put run date into generated programs 01200 MAP1 T$, S, 1, CHR$(9) ! Puts a tab in output file 01209 01300 HOUSEKEEPING: ! Get the date from the system and construct PROGRAM syntax 01310 XCALL ODTIM, DSTRING,0,0,840 ! Get date as MM/DD/YY 01320 RUN'DATE = "PROGRAM " + "UTDCPx" + "," + DSTRING[7,8] + "." & + DSTRING[1,2] + "A(" + DSTRING[4,5] + ")" 01322 P'DT$ = "This file was produced " + DSTRING[1,8] 01329 ! Let the user know what is going on 01330 PRINT TAB(-1,0) ! Clear the screen 01340 PRINT TAB(01,01); "DBCHKD - Dave Barrow's CHecK Directory "; & "program (lists differences)" 01350 PRINT TAB(03,01); " Written by David W. Barrow III at "; & "STONEWALL COMPUTER CENTER" 01360 PRINT TAB(04,01); " 1894 Elm Drive, Town of "; & "Cedarburg, West Bend, WI 53095" 01370 PRINT TAB(05,01); " Telephone "; & "(414) 375-AMOS" 01380 01390 PRINT TAB(07,01); "DBCHKD will take any directory " & "created using 'DIR/D/H/V filnam.ext='" 01400 PRINT TAB(08,36); "AND THEN" 01410 PRINT TAB(09,05); "Phase 1 - Makes a copy of the directory file" 01420 PRINT TAB(10,06); "Phase 2 - Verifies the copy" 01430 PRINT TAB(11,07); "Phase 3 - Eliminates the 'VERIFIED' entries" 01440 PRINT TAB(12,08); "Phase 4 - Makes a .CMD file to get "; & "current version and hash data" 01450 PRINT TAB(13,09); "Phase 5 - Gets that data" 01460 PRINT TAB(14,10); "Phase 6 - Makes a list file of all of "; & "the differences" 01470 PRINT TAB(22,01); 01480 STOP 01489 01490 PRINT TAB(07,01); TAB(-1,10) 01500 PRINT TAB(07,01); "What is the name of the directory to be "; & "checked? (def=AMOS.DIR) "; 01510 INPUT ""; DIRNAM 01520 DIRNAM = UCS(DIRNAM) 01530 XCALL STRIP, DIRNAM 01540 IF ( LEN(DIRNAM) = 0 ) & THEN DIRNAM = "AMOS" 01550 SPEC'END = INSTR(1,DIRNAM,".") 01560 IF ( SPEC'END = 0 ) & THEN DIRNAM = DIRNAM + ".DIR" 01569 01570 ! Abort if VERIFY.LIT doesn't exist 01580 LOOKUP "DSK0:VERIFY.LIT[1,4]", EXIST 01590 IF ( EXIST < 1 ) & THEN PRINT TAB(09,10); "I can't work without "; & "DSK0:VERIFY.LIT[1,4] - Sorry" & : END 01599 01600 ! Abort if the directory doesn't exist 01610 LOOKUP DIRNAM, EXIST 01620 IF ( EXIST < 1 ) & THEN PRINT TAB(09,10); "Fatal error - "; & "I can't find "; DIRNAM & : END 01629 01630 ! Check to see if any name conflicts 01640 DATA "UTDCP1.CMD","UTDCP1.DIR","UTDCP3.BAS","UTDCP3.LST" 01650 DATA "UTDCP3.RUN","UTDCP4.BAS","UTDCP4.RUN","UTDCP5.CMD" 01660 DATA "UTDCP5.DIR","UTDCP5.LST","UTDCP6.BAS","UTDCP6.RUN" 01670 DATA "UTDCP7.BAS","UTDCP8.CMD","DBCHKD.DIR","UTDCP7.RUN" 01680 DATA "VERIFY.LST" 01689 01690 FOR COUNTER = 1 TO 17 01700 READ FILNAM 01710 LOOKUP FILNAM, EXIST 01720 ! Put in the commas between file names 01730 IF ( EXIST <> 0 ) & THEN IF ( LEN(OVER'WRITE) > 2) & THEN OVER'WRITE = OVER'WRITE + ", " 01740 ! Put in the file names that will be over written 01750 IF ( EXIST <> 0 ) & THEN OVER'WRITE = OVER'WRITE + FILNAM 01760 NEXT COUNTER 01770 01780 IF ( LEN(OVER'WRITE) > 2 ) & THEN PRINT; CHR(7) & : PRINT; "WARNING! The following files WILL "; & "be overwritten: "; OVER'WRITE & : PRINT & : PRINT; "Do you wish to continue? (def=N) "; & : INPUT ""; CONTINUE & : IF ( UCS(CONTINUE) <> "Y" ) & THEN END 01789 01800 ! PHASE1: 01810 PRINT TAB(08,01); TAB(-1,10) 01820 PRINT; "Phase 1 of DBCHKD - Create necessary files" 01830 OPEN #1, "UTDCP1.CMD", OUTPUT 01840 PRINT #1; "; UTDCP1.CMD - PHASE 1 and 2 of DBCHKD" 01842 PRINT #1; "; "; P'DT$ 01860 PRINT #1 01870 PRINT #1; "; Compile the Basic files" 01880 PRINT #1; "COMPIL UTDCP3.BAS" 01890 PRINT #1; "COMPIL UTDCP4.BAS" 01900 PRINT #1; "COMPIL UTDCP6.BAS" 01910 PRINT #1; "COMPIL UTDCP7.BAS" 01920 PRINT #1 01930 PRINT #1; "; Copy the directory so we can't damage anything" 01940 PRINT #1; "COPY UTDCP1.DIR = "; DIRNAM 01950 PRINT #1 01960 PRINT #1; "; Let the user know what DBCHKD is doing" 01970 PRINT #1; ":< Phase 2 of DBCHKD - Verify the Directory to a file" 01980 PRINT #1; ">" 01990 PRINT #1; "VERIFY/F UTDCP1.DIR" 02000 PRINT #1; ":R" 02010 PRINT #1; "; Chain to the next step" 02020 PRINT #1; "RUN UTDCP3" 02030 CLOSE #1 02039 03000 ! PHASE 3 takes the file produced by VERIFY and eliminates those that are OK 03010 OPEN #2, "UTDCP3.BAS", OUTPUT 03020 PRINT #2; T$; "! UTDCP3.BAS - PHASE 3 OF DBCHKD" 03030 PRINT #2; T$; "! Takes VERIFY.LST and prints "; & "those changed to UTDCP3.LST" 03032 PRINT #2; T$; "! "; P'DT$ 03040 PRINT #2; T$; "! This is a temporary file - "; & "You may erase it." 03050 PRINT #2; T$; "!" 03060 PRINT #2; "3009" 03070 RUN'DATE = RUN'DATE[1,13] + "3" + RUN'DATE[15,25] ! Fix pgmnam 03080 PRINT #2; "3010"; T$; RUN'DATE 03090 PRINT #2; "3019" 03100 PRINT #2; "3020"; T$; "PRINT; "; Q$; " Phase 3 of DBCHKD - "; & "Eliminate the 'VERIFIED' files"; Q$ 03110 PRINT #2; "3029" 03120 PRINT #2; "3100"; T$; "MAP1 COUNTER,F,6,0 ! Error count" 03130 PRINT #2; "3110"; T$; "MAP1 EXIST,F,6,0 ! LOOKUP answer" 03140 PRINT #2; "3120"; T$; "MAP1 FILNAM,S,10 ! Variable for DATA" 03150 PRINT #2; "3130"; T$; "MAP1 INLINE,S,90 ! Line from VERIFY.LST" 03160 PRINT #2; "3139" 03170 PRINT #2; "3200"; " HOUSEKEEPING:" 03180 PRINT #2; "3210"; T$; "LOOKUP "; Q$; "VERIFY.LST"; Q$; ", EXIST" 03190 PRINT #2; "3220"; T$; T$; "IF"; T$; "( EXIST < 1 )"; T$; T$; & T$; T$; T$; "&" 03200 PRINT #2; T$; T$; "THEN"; T$; "PRINT "; Q$; & "VERIFY didn't work."; Q$; ";"; TAB(72); "&" 03210 PRINT #2; T$; T$; T$; T$; Q$; " Check your directory."; Q$; & TAB(72); "&" 03220 PRINT #2; T$; T$; T$; ": END" 03230 PRINT #2; "3229" 03240 PRINT #2; "3230"; T$; "OPEN #3, "; Q$; "VERIFY.LST"; Q$; ", INPUT" 03250 PRINT #2; "3240"; T$; "OPEN #4, "; Q$; "UTDCP3.LST"; Q$; ", OUTPUT" 03260 PRINT #2; "3249" 03270 PRINT #2; "3300"; " PHASE3:" 03280 PRINT #2; "3310"; T$; "INPUT LINE #3, INLINE" 03290 PRINT #2; "3320"; T$; T$; "IF"; T$; "( EOF(3) <> 0 )"; TAB(72); "&" 03300 PRINT #2; T$; T$; "THEN"; T$; "GOTO EXIT3"; T$; T$; T$; & "! Check for EOF" 03310 PRINT #2; "3340"; T$; T$; "IF"; T$; "( INSTR(1,INLINE,"; & Q$; "VERIFIED"; Q$; ") <> 0 )"; T$; T$; "&" 03320 PRINT #2; T$; T$; "THEN"; T$; "GOTO PHASE3"; T$; T$; & T$; "!If OK don't fix" 03330 PRINT #2; "3350"; T$; T$; "IF"; T$; "( INSTR(1,INLINE,"; & Q$; "Total "; Q$; ") <> 0 )"; T$; T$; "&" 03340 PRINT #2; T$; T$; "THEN"; T$; "COUNTER = COUNTER - 1"; T$; T$; & T$; T$ "&" 03350 PRINT #2; T$; T$; T$; ": GOTO EXIT3" 03360 PRINT #2; "3360"; T$; "PRINT #4, INLINE" 03370 PRINT #2; "3370"; T$; "COUNTER = COUNTER + 1" 03380 PRINT #2; "3380"; T$; "GOTO PHASE3" 03390 PRINT #2; "3389" 03400 PRINT #2; "3400"; " EXIT3:" 03410 PRINT #2; "3410"; T$; "CLOSE #3" 03420 PRINT #2; "3420"; T$; "CLOSE #4" 03430 PRINT #2; "3430"; T$; T$; "IF"; T$; "( COUNTER = 0 )"; T$; & T$; T$; T$; T$; "&" 03440 PRINT #2; T$; T$; "THEN"; T$; "PRINT"; T$; T$; T$; T$; T$; T$; "&" 03450 PRINT #2; T$; T$; T$; ": PRINT TAB(20); "; & Q$; "CONGRATULATIONS!"; Q$; T$; T$; "&" 03460 PRINT #2; T$; T$; T$; ": PRINT; "; Q$; "Your Directory "; & "matches the files "; Q$; ";"; T$; "&" 03470 PRINT #2; T$; T$; T$; T$; Q$; "on your system"; Q$; T$; & T$; T$; T$; "&" 03480 PRINT #2; T$; T$; T$; ": PRINT TAB(15); "; & Q$; "Have a GOOD day!"; Q$; T$; T$; "&" 03490 PRINT #2; T$; T$; T$; ": CALL CLEAN'EM"; TAB(72); "&" 03500 PRINT #2; T$; T$; "ELSE"; T$; "CHAIN "; Q$; "UTDCP4"; Q$ 03510 PRINT #2; "3440"; T$; "END" 03520 PRINT #2; "3449" 03530 PRINT #2; "3500"; " CLEAN'EM:" 03540 PRINT #2; "3510"; T$; "DATA UTDCP1.CMD,UTDCP1.DIR,UTDCP3.BAS,UTDCP3.LST" 03550 PRINT #2; "3520"; T$; "DATA UTDCP3.RUN,UTDCP4.BAS,UTDCP4.RUN,UTDCP5.CMD" 03560 PRINT #2; "3530"; T$; "DATA UTDCP5.DIR,UTDCP5.LST,UTDCP6.BAS,UTDCP6.RUN" 03570 PRINT #2; "3540"; T$; "DATA UTDCP7.BAS,UTDCP8.CMD,UTDCP7.RUN,VERIFY.LST" 03580 PRINT #2; "3549" 03590 PRINT #2; "3550"; T$; "FOR COUNTER = 1 TO 16" 03600 PRINT #2; "3560"; T$; T$; "READ FILNAM" 03610 PRINT #2; "3570"; T$; T$; "LOOKUP FILNAM, EXIST" 03620 PRINT #2; "3580"; T$; T$; T$; "IF"; T$; "( EXIST <> 0 )"; & TAB(72); "&" 03630 PRINT #2; T$; T$; T$; "THEN"; T$; "KILL FILNAM" 03640 PRINT #2; "3590"; T$; "NEXT COUNTER" 03650 PRINT #2; "3600"; T$; "RETURN" 03660 PRINT #2; "3609" 03670 PRINT #2; "3999"; "!"; T$; "*"; T$; "**"; T$; "***"; T$; & "End of UTDCP3.BAS"; T$; "***"; T$; "**"; T$; "*" 03680 CLOSE #2 03999 ! PHASE 4 MAKES A .CMD FILE TO FIND NEW FILE INFO ! I realize that Phase 4 could be combined with Phase 3 04000 04010 OPEN #5, "UTDCP4.BAS", OUTPUT 04020 PRINT #5; T$; "! UTDCP4.BAS - Phase 4 of DBCHKD" 04030 PRINT #5; T$; "! Creates a command file to "; & "get current filspecs" 04032 PRINT #5; T$; "! "; P'DT$ 04040 PRINT #5; T$; "! This is a temporary file - "; & "You may erase it." 04050 PRINT #5; T$; "!" 04060 PRINT #5; "4009" 04070 RUN'DATE = RUN'DATE[1,13] + "4" + RUN'DATE[15,25] ! Fix pgmnam 04080 PRINT #5; "4010"; T$; RUN'DATE 04090 PRINT #5; "4019" 04100 PRINT #5; "4110"; T$; "MAP1 FILNUM, F, 6, 0" 04102 PRINT #5; "4120"; T$; "MAP1 SPEC'END, F, 6, 0" 04110 PRINT #5; "4130"; T$; "MAP1 FILNAM, S, 12 , "; Q$; Q$ 04112 PRINT #5; "4140"; T$; "MAP1 FILNUM$, S, 4, "; Q$; Q$ 04114 PRINT #5; "4150"; T$; "MAP1 INLINE, S, 80, "; Q$; Q$ 04120 PRINT #5; "4159" 04130 PRINT #5; "4200"; " HOUSEKEEPING:" 04140 PRINT #5; "4210"; T$; "OPEN #4, "; Q$; "UTDCP3.LST"; Q$; ", INPUT" 04150 PRINT #5; "4220"; T$; "OPEN #6, "; Q$; "UTDCP5.CMD"; Q$; ", OUTPUT" 04160 PRINT #5; "4229" 04170 PRINT #5; "4230"; T$; "PRINT; "; Q$; " Phase 4 of DBCHKD - "; & "Create a command file to get current file info"; Q$ 04180 PRINT #5; "4239" 04190 PRINT #5; "4240"; T$; "! Put in some header information" 04200 PRINT #5; "4250"; T$; "PRINT #6; "; Q$; "; UTDCP5.CMD - "; & "Gets current file info"; Q$ ! 04210 PRINT #5; "4260"; T$; "PRINT #6; "; Q$; "; "; RUN'DATE[16,25]; Q$ 04212 PRINT #5; "4262"; T$; "PRINT #6; "; Q$; "; "; P'DT$; Q$ 04220 PRINT #5; "4270"; T$; "PRINT #6; "; Q$; "; This is a "; & "temporary file - You may erase it"; Q$ 04230 PRINT #5; "4280"; T$; "PRINT #6" 04240 PRINT #5; "4290"; T$; "PRINT #6; "; Q$; ":R"; Q$ 04250 PRINT #5; "4300"; T$; "PRINT #6; "; Q$; & ":< Phase 5 of DBCHKD - Get the current file info "; Q$ 04260 PRINT #5; "4310"; T$; "PRINT #6; "; Q$; ">"; Q$ 04270 PRINT #5; "4319" 04280 PRINT #5; "4320"; T$; "! Create the Phase 5 output file" 04290 PRINT #5; "4330"; T$; "OPEN #7, "; Q$; "UTDCP5.DIR"; Q$; ", OUTPUT" 04300 PRINT #5; "4340"; T$; "CLOSE #7" 04310 PRINT #5; "4349" 04320 PRINT #5; "4400"; " PHASE4:" 04330 PRINT #5; "4410"; T$; "INPUT LINE #4, INLINE" 04340 PRINT #5; "4420"; T$; T$; "IF"; T$; "( EOF(4) <> 0 )"; T$; T$; & T$; T$; T$; "&" 04350 PRINT #5; T$; T$; "THEN"; T$; "GOTO EXIT4" 04360 PRINT #5; "4430"; T$; T$; "IF"; T$; "( INLINE[1,30] "; & "= SPACE(30) )"; T$; T$; T$; "&" 04370 PRINT #5; T$; T$; "THEN"; T$; "GOTO EXIT4" 04380 PRINT #5; "4440"; T$; "SPEC'END = INSTR(1,INLINE,"; Q$; & "?File not found"; Q$; ")" 04390 PRINT #5; "4450"; T$; T$; "IF"; T$; "( SPEC'END <> 0 )"; & TAB(72); "&" 04400 PRINT #5; T$; T$; "THEN"; T$; "CALL NOT'FOUND"; TAB(72); "&" 04410 PRINT #5; T$; T$; T$; ": GOTO PHASE4" 04430 PRINT #5; "4470"; T$; "SPEC'END = INSTR(1,INLINE,"; Q$; "]"; Q$; ")" 04440 PRINT #5; "4480"; T$; "PRINT #6; "; Q$; & "DIR/D/H/V/K UTDCP5.LST="; Q$; ";"; " INLINE[1,SPEC'END]" 04450 PRINT #5; "4490"; T$; "PRINT #6; "; Q$; "APPEND UTDCP5.DIR "; & "= UTDCP5.DIR, UTDCP5.LST"; Q$ 04460 PRINT #5; "4500"; T$; "GOTO PHASE4" 04470 PRINT #5; "4509" 04480 PRINT #5; "4600"; " EXIT4:" 04490 PRINT #5; "4610"; T$; "CLOSE #4" 04500 PRINT #5; "4620"; T$; "PRINT #6; "; Q$; "RUN UTDCP6"; Q$ 04510 PRINT #5; "4630"; T$; "CLOSE #6" 04520 PRINT #5; "4640"; T$; "CHAIN "; Q$; "UTDCP5.CMD"; Q$ 04530 PRINT #5; "4650"; T$; "END" 04540 PRINT #5; "4659" 04560 PRINT #5; "4700 NOT'FOUND:" 04570 PRINT #5; "4710"; T$; "FILNUM = FILNUM + 1" 04572 PRINT #5; "4720"; T$; "FILNUM$ = FILNUM USING "; Q$; "#ZZZ"; Q$ 04580 PRINT #5; "4730"; T$; "FILNAM = "; Q$; "NF"; Q$; & " + FILNUM$ + "; Q$; ".LST"; Q$ 04590 PRINT #5; "4740"; T$; "OPEN #11, FILNAM, OUTPUT" 04600 PRINT #5; "4750"; T$; "PRINT #11, INLINE[1,30]; INLINE[36,100]" 04610 PRINT #5; "4760"; T$; "CLOSE #11" 04620 PRINT #5; "4770"; T$; "PRINT #6; "; & Q$; "APPEND UTDCP5.DIR = UTDCP5.DIR,"; Q$; "; FILNAM" 04630 PRINT #5; "4780"; T$; "RETURN" 04640 PRINT #5; "4789" 04650 PRINT #5; "4999"; "!"; T$; "*"; T$; "**"; T$; "***"; T$; & "End of UTDCP4.BAS"; T$; "***"; T$; "**"; T$; "*" 04660 CLOSE #5 04999 06000 ! PHASE 6 matches the old directory with current info 06010 OPEN #10, "UTDCP6.BAS", OUTPUT 06020 PRINT #10; T$; "! UTDCP6.BAS - List directory anomolies" 06022 PRINT #10; T$; "! "; P'DT$ 06030 PRINT #10; T$; "! This is a temporary file - "; & "You may erase it." 06040 PRINT #10; T$; "!" 06050 PRINT #10; "6009" 06060 RUN'DATE = RUN'DATE[1,13] + "6" + RUN'DATE[15,25] ! Fix pgmnam 06070 PRINT #10; "6010"; T$; RUN'DATE 06080 PRINT #10; "6019" 06090 PRINT #10; "6100"; T$; "MAP1 CHANGED,F,6,0"; T$; T$; & "! Count #/changed files" 06100 PRINT #10; "6110"; T$; "MAP1 CMNT(3),S,12"; T$; T$; & "! Comment "; "lines for new .DIR" 06110 PRINT #10; "6120"; T$; "MAP1 DSTRING,S,45"; T$; T$; & "! Used by ODTIM.SBR" 06120 PRINT #10; "6130"; T$; "MAP1 NEW'COLON,F,6,0"; T$; T$; & "! Check for two digit logical number" 06130 PRINT #10; "6140"; T$; "MAP1 NEW'LEN,F,6"; T$; T$; & "! Get the length of the new line entry" 06140 PRINT #10; "6150"; T$; "MAP1 NEW'LINE,S,100"; T$; T$; & "! Hold a line for DBCHKD.DIR" 06150 PRINT #10; "6160"; T$; "MAP1 NO'UPDATE,F,6,0"; T$; T$; & "! Count those not updated" 06160 PRINT #10; "6170"; T$; "MAP1 OLD'COLON,F,6,0"; T$; T$; & "! Check for two digit logical number" 06170 PRINT #10; "6180"; T$; "MAP1 OLD'LEN,F,6"; T$; T$; & "! Get the length of the old line entry" 06180 PRINT #10; "6190"; T$; "MAP1 OLD'LINE,S,72"; T$; T$; & "! Hold a line from UTDCP1.DIR" 06190 PRINT #10; "6200"; T$; "MAP1 PRINT'LINE,S,100,0"; T$; & "! Output line" 06200 PRINT #10; "6210"; T$; "MAP1 SPEC'END,F,6,0"; T$; T$; & "! Pos/end of file'spec" 06210 PRINT #10; "6220"; T$; "MAP1 SUBSTITUTE,S,1"; T$; T$; "! Y/N" 06220 PRINT #10; "6229" 06230 PRINT #10; "6300"; " HOUSEKEEPING:" 06240 PRINT #10; "6310"; T$; "OPEN #8, "; Q$; "UTDCP1.DIR"; Q$; & ", INPUT"; T$; T$; T$;"! Directory" 06250 PRINT #10; "6320"; T$; "INPUT LINE #8, OLD'LINE" 06260 PRINT #10; "6330"; T$; "OLD'COLON = INSTR(1,OLD'LINE,"; Q$; & ":"; Q$; ")"; T$; T$; "! Check len/logical#" 06270 PRINT #10; "6340"; T$; "CLOSE #8" 06279 PRINT #10; "6349" 06280 PRINT #10; "6350"; T$; "OPEN #4, "; Q$; "UTDCP5.DIR"; Q$; & ", INPUT"; T$; T$; T$;"! System files" 06290 PRINT #10; "6360"; T$; "INPUT LINE #4, NEW'LINE" 06300 PRINT #10; "6370"; T$; "NEW'COLON = INSTR(1,NEW'LINE,"; & Q$; ":"; Q$; ")"; T$; T$; "! Check len/logical#" 06310 PRINT #10; "6380"; T$; "CLOSE #4" 06320 PRINT #10; "6399" 06330 PRINT #10; "6400"; T$; "OPEN #8, "; Q$; "UTDCP1.DIR"; Q$; & ", INPUT"; T$; T$; T$;"! Directory" 06340 PRINT #10; "6410"; T$; "OPEN #4, "; Q$; "UTDCP5.DIR"; Q$; & ", INPUT"; T$; T$; T$; "! System files" 06350 PRINT #10; "6420"; T$; "CMNT(1) = "; Q$; DIRNAM; Q$ 06360 SPEC'END = INSTR(1,DIRNAM,".") 06370 DIRNAM = DIRNAM[1,(SPEC'END-1)] + ".CHK" 06380 PRINT #10; "6430"; T$; "OPEN #9, "; Q$; DIRNAM; Q$; & ", OUTPUT"; T$; T$; T$; "! Merge file" 06389 PRINT #10; "6439" 06390 PRINT #10; "6440"; T$; "PRINT; "; Q$; " Phase 6 of DBCHKD "; & "- lists differences to file"; Q$ 06399 PRINT #10; "6449" 06400 PRINT #10; "6450"; T$; "! Get the current date" 06410 PRINT #10; "6460"; T$; "XCALL ODTIM, DSTRING,0,0,840"; T$; & T$; T$; "! MM/DD/YY DATE" 06420 PRINT #10; "6470"; T$; "CMNT(2) = DSTRING" 06430 PRINT #10; "6480"; T$; "XCALL ODTIM, DSTRING,0,0,2049"; T$; & T$; T$; "! TIME" 06440 PRINT #10; "6490"; T$; "CMNT(3) = DSTRING" 06449 PRINT #10; "6499" 06450 PRINT #10; "6500"; T$; "PRINT #9; "; Q$; DIRNAM; " is a "; & "list of the differences between "; Q$; ";" 06460 PRINT #10; "6510"; T$; "PRINT #9; CMNT(1); "; & Q$; " and the system."; Q$ 06470 PRINT #10; "6520"; T$; "PRINT #9; "; Q$; "It was produced by "; & "DBCHKD on "; Q$; "; CMNT(2); "; Q$; " at "; Q$; "; CMNT(3)" 06480 PRINT #10; "6530"; T$; "PRINT #9" 06489 PRINT #10; "6540" 06490 PRINT #10; "6549"; " PHASE6A:" 06500 PRINT #10; "6600"; T$; "INPUT LINE #4, NEW'LINE"; T$; T$; T$; & "! Get a line of the new info" 06510 PRINT #10; "6610"; T$; T$; "IF"; T$; "( EOF(4) <> 0 )"; T$; & T$; T$; T$; T$; "&" 06520 PRINT #10; T$; T$; "THEN"; T$; "GOTO EXIT6"; T$; T$; & "! Check for end-of-file" ! ! The location of the colon will tell how many characters the logical number ! has. My version of DIR.LIT only produces one digit but the latest ! ones from AMTEC have three digits. The listing should ! have the same format throughout. ! 06530 PRINT #10; "6620"; T$; T$; "IF"; T$; "( (OLD'COLON "; & "- NEW'COLON) = 1 )"; TAB(72); "&" 06540 PRINT #10; T$; T$; "THEN"; T$; "NEW'LINE = NEW'LINE[1,3] + " & Q$; "0"; Q$; TAB(72); "&" 06550 PRINT #10; TAB(32); " + NEW'LINE[4,29] + NEW'LINE[31,100]" 06560 PRINT #10; "6630"; T$; T$; "IF"; T$; "( (OLD'COLON "; & "- NEW'COLON) = 2 )"; TAB(72); "&" 06570 PRINT #10; T$; T$; "THEN"; T$; "NEW'LINE = NEW'LINE[1,3] + " & Q$; "00"; Q$; TAB(72); "&" 06580 PRINT #10; TAB(32); " + NEW'LINE[4,28] + NEW'LINE[31,100]" ! ! The version of DIR.LIT that I have prints the version at col 39 and ! the hash at col 57. The ones I get from AMTEC have version at ! col 31 and hash at col 50. Since all programs don't have version ! numbers but do have hashes you can find out which format by ! checking the first hash digit. If there is a space (chr 32) at ! col 51 then it must be my format - otherwise it is the AMTEC ! format and the revised info should match it. DWB 05-29-90 ! ! If the directory being checked is in the new format this takes out ! eight spaces between the filspec and the version and then ! adds one space between the version and the hash . ! 06590 PRINT #10; "6640"; T$; T$; "IF"; T$; "( NEW'LINE[51;1] = "; & "CHR$(32) )"; TAB(72); "&" 06600 PRINT #10; TAB(16); "AND"; T$; "( OLD'LINE[51;1] <> CHR$(32) )"; & TAB(72); "&" 06610 PRINT #10; T$; T$; "THEN"; T$; "NEW'LINE = NEW'LINE[1,30] "; & "+ NEW'LINE[39,56] "; TAB(72); "&" 06620 PRINT #10; TAB(32); "+ CHR$(32) + NEW'LINE[57,100]" 06630 PRINT #10; "6650"; T$; T$; "IF"; T$; "( NEW'LINE[51;1] <> " & "CHR$(32) )"; TAB(72); "&" 06640 PRINT #10; TAB(16); "AND"; T$; "( OLD'LINE[51;1] = CHR$(32) )"; & TAB(72); "&" 06650 PRINT #10; TAB(16); "THEN"; T$; "NEW'LINE = NEW'LINE[1,30] "; & "+ SPACE$(8)"; TAB(72); "&" 06660 PRINT #10; TAB(32); "+ NEW'LINE[31,48] + NEW'LINE[50,100]" 06670 PRINT #10; "6660"; T$; "SPEC'END = INSTR(1,NEW'LINE,"; Q$; "]"; Q$; ")" 06679 PRINT #10; "6669" 06700 PRINT #10; "6700"; " PHASE6B:" 06710 PRINT #10; "6710"; T$; "INPUT LINE #8, OLD'LINE" 06720 PRINT #10; "6720"; T$; T$; "IF"; T$; "( EOF(8) <> 0 )"; TAB(72); "&" 06730 PRINT #10; T$; T$; "THEN"; T$; "GOTO EXIT6"; T$; T$; & "! Check for End of File" 06740 PRINT #10; "6730"; T$; T$; "IF"; T$; "( OLD'LINE[1,SPEC'END] "; & "<> NEW'LINE[1,SPEC'END] )"; TAB(72); "&" 06742 PRINT #10; T$; T$; "THEN"; T$; "GOTO PHASE6B"; T$; T$; & "! If same don't report" 06750 PRINT #10; "6740"; T$; "CHANGED = CHANGED + 1" 06760 PRINT #10; "6760"; T$; "PRINT #9; TAB(5); "; Q$; "Anomaly #"; Q$; & "CHANGED; TAB(25); CMNT(1); "; Q$; " Directory shows:"; Q$ 06770 PRINT #10; "6770"; T$; "PRINT #9; OLD'LINE" 06780 PRINT #10; "6780"; T$; "PRINT #9; TAB(25); "; & Q$; "file on system is:"; Q$ 06790 PRINT #10; "6790"; T$; "PRINT #9; NEW'LINE" 06800 PRINT #10; "6800"; T$; "PRINT #9" 06810 PRINT #10; "6810"; T$; "GOTO PHASE6A" 06819 PRINT #10; "6819" 06820 PRINT #10; "6900"; " EXIT6:" 06830 PRINT #10; "6910"; T$; "CLOSE #8" 06840 PRINT #10; "6920"; T$; "PRINT #9; TAB(20); CHANGED; "; & Q$; "Files DIDN'T match the directory"; Q$ 06850 PRINT #10; "6930"; T$; "CLOSE #9" 06860 PRINT #10; "6940"; T$; "CHAIN "; Q$; "UTDCP7"; Q$ 06870 PRINT #10; "6950"; T$; "END" 06880 PRINT #10; "6959" 06890 PRINT #10; "6999"; "!"; T$; "*"; T$; "**"; T$; "***"; T$; & "End of UTDCP6.BAS"; T$; "***"; T$; "**"; T$; "*" 06900 CLOSE #10 06999 07000 ! Phase 7 does the cleanup 07010 OPEN #11, "UTDCP7.BAS", OUTPUT 07020 PRINT #11; T$; "! UTDCP7.BAS - DBCHKD PHASE 7 - CLEANUP" 07022 PRINT #11; T$; "! "; P'DT$ 07030 PRINT #11; T$; "! This is a temporary file "; & "- You may erase it." 07040 PRINT #11; T$; "!" 07049 PRINT #11; "7009" 07050 RUN'DATE = RUN'DATE[1,13] + "7" + RUN'DATE[15,25] ! Fix pgmnam 07060 PRINT #11; "7010"; T$; RUN'DATE 07069 PRINT #11; "7019" 07070 PRINT #11; "7100"; T$; "MAP1 COUNTER,F,6,0"; T$; T$; T$; T$; & "! Loop counter" 07080 PRINT #11; "7110"; T$; "MAP1 DO'IT,S,1,"; Q$; "N"; Q$; T$; & T$; T$; " ! Y/X" 07090 PRINT #11; "7120"; T$; "MAP1 FILNAM,S,10"; T$; T$; T$; T$; & "! File name to erase" 07099 PRINT #11; "7129" 07100 PRINT #11; "7200 HOUSEKEEPING:" 07110 PRINT #11; "7210"; T$; "OPEN #12, "; Q$; "UTDCP8.CMD"; Q$; ", OUTPUT" 07120 PRINT #11; "7220"; T$; "PRINT #12; "; Q$; "; UTDCP8.CMD "; & "- DBCHKD CLEANUP"; Q$ 07122 PRINT #11; "7222"; T$; "PRINT #12; "; Q$; "; "; P'DT$; Q$ 07124 PRINT #11; "7224"; T$; "PRINT #12; "; Q$; "; This is a "; & "temporary file - You may erase it"; Q$ 07130 PRINT #11; "7229" 07140 PRINT #11; "7230"; T$; "PRINT; "; Q$; " Phase 7 of DBCHKD "; & "- Cleanup"; Q$ 07149 PRINT #11; "7239" 07200 PRINT #11; "7300 PHASE7:" 07210 PRINT #11; "7310"; T$; "DO'IT = "; Q$; "N"; Q$ 07220 PRINT #11; "7320"; T$; "PRINT TAB(10); "; & Q$; "Do you want work files erased? (Y/N) (def=N) "; Q$; ";" 07230 PRINT #11; "7330"; T$; "INPUT "; Q$; Q$; "; DO'IT" 07240 PRINT #11; "7340"; T$; "IF"; T$; "( UCS(DO'IT) = "; & Q$; "Y"; Q$; " )"; TAB(72); "&" 07250 PRINT #11; T$; "THEN"; T$; "CALL CLEAN'EM" 07260 PRINT #11; "7350"; T$; "PRINT #12; "; Q$; ":T"; Q$ 07270 PRINT #11; "7360"; T$; "PRINT #12" 07280 PRINT #11; "7370"; T$; "PRINT #12; "; & Q$; ":"; Q$ 07310 PRINT #11; "7400"; T$; "CLOSE #12" 07320 PRINT #11; "7410"; T$; "CHAIN "; Q$; "UTDCP8.CMD"; Q$ 07330 PRINT #11; "7420"; T$; "END" 07339 PRINT #11; "7429" 07340 PRINT #11; "7500"; " CLEAN'EM:" 07350 PRINT #11; "7510"; T$; "DATA UTDCP1.CMD,UTDCP1.DIR,UTDCP3.BAS,UTDCP3.LST" 07360 PRINT #11; "7520"; T$; "DATA UTDCP3.RUN,UTDCP4.BAS,UTDCP4.RUN,UTDCP5.CMD" 07370 PRINT #11; "7530"; T$; "DATA UTDCP5.DIR,UTDCP5.LST,UTDCP6.BAS,UTDCP6.RUN" 07380 PRINT #11; "7540"; T$; "DATA UTDCP7.BAS,UTDCP8.CMD,UTDCP7.RUN,VERIFY.LST" 07389 PRINT #11; "7549" 07390 PRINT #11; "7550"; T$; "FOR COUNTER = 1 TO 16" 07400 PRINT #11; "7560"; T$; T$; "READ FILNAM" 07410 PRINT #11; "7570"; T$; T$; "PRINT #12; "; Q$; "ERASE "; Q$; "; FILNAM" 07420 PRINT #11; "7580"; T$; "NEXT COUNTER" 07430 PRINT #11; "7590"; T$; T$; "PRINT #12; "; Q$; "ERASE NF*.LST"; Q$ 07440 PRINT #11; "7600"; T$; "RETURN" 07450 PRINT #11; "7609" 07460 PRINT #11; "7999"; "!"; T$; "*"; T$; "**"; T$; "***"; T$; & "End of UTDCP7.BAS"; T$; "***"; T$; "**"; T$; "*" 07999 08000 ! Now start working on it 08010 CHAIN "UTDCP1.CMD" 08020 END 08999 09999 ! * ** *** End of DBCHKD.BAS *** ** *