!*************************** 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$; ":<I hope you found DBCHKD useful";         &
                       " - Dave Barrow";  Q$
07290   PRINT #11; "7380"; T$; "PRINT #12; TAB(10); ";                  &
                       Q$; "The comparison file is "; DIRNAM; Q$
07300   PRINT #11; "7390"; 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       ***     **      *