! This is "Freeware". The program is published for everyone to look ! at and try. If you like it and can use it PLEASE send $5.00 to: ! DAVID W. BARROW III ! 1894 Elm Drive ! West Bend, WI 53095 ! If you have questions or problems with this program you may call ! (414) 375-AMOS evenings and weekends ! ! UTBASD.BAS - UTility BASic Directory ! ! This program takes a directory file produced by ! DIR/F BASIC.DIR=ALL:*.BAS[] and will then go thru those source ! files and get the top few lines and print the information out ! to UTBASD.LST. If you want to change the scope of the search ! just change the DIR specifications to limit to a DSK or a P,PN ! ! To run this under control of Task Manager set up the following ! .CTL file and submit it ! $; UTBASD.CTL - Submits the UTility BASic Directory ! $; Log into the system ! LOG SYS: ! $; Generate the system directory ! DIR/F BASIC.DIR=ALL:*.BAS[] ! $; Yes I do want to run this program ! Y ! $; No I don't want a screen counter ! N ! $; Were all done ! LOGOFF ! ! Copyright @1985 by David W. Barrow III ! ! Date Who S What !-------- --- - --------------------------------------------------- !04-21-85 DWB A Original Coding !04-27-85 DWB B Cleanup, standardize ! MAP1 VERSION,S,9,"VER042785" PROGRAM BASDIR,85.04B(27) MAP1 DIRECTORY'RECORD ! Produced by DIR/F BASIC.DIR=ALL:.BAS[] MAP2 DR'NAME,S,7,SAPCE$(7) !0-6 NNNNNN_ MAP2 DR'EXT,S,4,SPACE$(4) !7-10 NNN_ MAP2 DR'CONTIG,S,2,SPACE#(2) !11-12 C_ MAP2 DR'BLOCKS,S,6,SPACE$(6) !13-18 XXXXX_ MAP2 DR'HASH,S,16,SPACE$(16) !19-34 XXX-XXX-XXX-XXX MAP2 DR'VERSION,S,22,SPACE$(22) !35-56 XX.XXN(XX) MAP2 DR'BASE,S,6,SPACE$(6) !57-63 XXXXXXX_ MAP2 DR'LOG,S,16,SPACE$(16) !64-79 DSK??:[XXX,XXX] MAP1 MISC'FP'MAPS MAP2 COUNTER,F,6,0 ! Loop counter MAP2 END'POS,F,6,0 ! INSTR ending position MAP2 EXIST,F,6,0 ! answer from lookup MAP2 NAME'LEN,F,6,0 ! Length of program name MAP2 ST'POS,F,6,0 ! INSTR starting position MAP1 MISC'STR'MAPS MAP2 CONTINUE,S,1,"N" ! Answer to continue MAP2 LOGICAL$,S,2,SPACE$(2) ! STR$ of Logical# (##) MAP2 P$,S,3,SPACE$(3) ! STR$ of project# (###) MAP2 PN$,S,3,SPACE$(3) ! STR$ of programmer# (###) MAP2 SCR'CNTR,S,1,"N" ! Screen counter? MAP2 SOURCE'LINE,S,132, SPACE$(132) ! Line from source program MAP2 TGT'FILESPEC,S,26,SPACE$(26) ! DSK??:XXXXXX.XXX[XXX,XXX] ! HOUSEKEEPING: ! Standard Error Routine ON ERROR GOTO ERR'ROUTINE ! Announce program PRINT TAB(-1,0) ! Clear the screen PRINT TAB(03,17); "UTBASD.BAS - UTility BASic Directory" PRINT TAB(05,01); "This program takes a directory file " & "produced by DIR/F BASIC.DIR=ALL:*.BAS[]" PRINT TAB(06,01); "and will then go thru those source files "; & "and get the top few lines" PRINT TAB(07,01); "and print the information out to UTBASD.LST" ! Check to see if this is the right program to run PRINT TAB(09,10); "Do you really want to run THIS program (Y/N) "; INPUT CONTINUE IF ( CONTINUE # "Y" ) & THEN GOTO NO'RUN'EXIT PRINT TAB(11,10); "Do you want a screen counter (Y/N) "; INPUT SCR'CNTR LOOKUP "BASIC.DIR", EXIST IF ( EXIST = 0 ) & THEN PRINT TAB(10,15); "Directory file doesn't exist" & : GOTO EXIT OPEN #1, "BASIC.DIR", INPUT OPEN #2, "UTBASD.LST", OUTPUT ! MAINLINE: FOR COUNTER = 1 TO 1000 ! Blank directory record to avoid carryover DIRECTORY'RECORD = SPACE$(80) ! Get another .BAS file from the directory INPUT LINE #1, DIRECTORY'RECORD ! Check for end of file IF ( EOF(1) = 1 ) & THEN COUNTER = 1000 & : GOTO NEXT'RECORD ! Screen counter every 5 files IF ( SCR'CNTR = "Y" ) & AND INT(COUNTER/5) = (COUNTER/5) & THEN PRINT TAB(15,35); COUNTER ! take care of the blank lines between the ppns IF ( DIRECTORY'RECORD[1,20] = SPACE$(20) ) & THEN GOTO NEXT'RECORD ! Take care of the total lines IF ( DIRECTORY'RECORD[1,5] = "Total" ) & THEN PRINT #2, DIRECTORY'RECORD & : PRINT #2 & : GOTO NEXT'RECORD ! Grand total line says we're finished IF ( DIRECTORY'RECORD[1,5] = "Grand" ) & THEN PRINT #2, DIRECTORY'RECORD & : PRINT #2 & : COUNTER = 1000 & : GOTO NEXT'RECORD PRINT #2, DIRECTORY'RECORD CALL FIX'FILESPEC IF ( TGT'FILESPEC[7,7] ="." ) & THEN GOTO NEXT'RECORD ! Open the file, get the wanted info, close it OPEN #3, TGT'FILESPEC, INPUT CALL DIR'LINE CLOSE #3 NEXT'RECORD: ! put a line between entries PRINT #2 NEXT COUNTER EXIT: CLOSE #1 ! We won't need the system directory any more ! LOOKUP "BASIC.DIR", EXIST ! IF ( EXIST # 0 ) & ! THEN KILL "BASIC.DIR" CLOSE #2 XCALL SPOOL, "UTBASD.LST", "",17 NO'RUN'EXIT: END !!!!!!!!!!!!!!!!!!!!!!! ! PROGRAM SUBROUTINES ! !!!!!!!!!!!!!!!!!!!!!!! DIR'LINE: ! Get a line of the source program INPUT LINE #3, SOURCE'LINE ! Check to see if we have run out of comments IF ( SOURCE'LINE[1,1] # "!" ) & THEN RETURN ! Output the line from the .BAS file to the listing PRINT #2, SOURCE'LINE GOTO DIR'LINE ! this is the end of DIR'LINE subroutine FIX'FILESPEC: ! Gets full filespecification into a form I can use ! Program name - get right length to avoid spaces ! Don't have to get a starting position starts in col. 1 END'POS = INSTR(1,DIRECTORY'RECORD," ") DR'NAME = DIRECTORY'RECORD[1,(END'POS-1)] ! see if log info on this line - if not default to prev. info IF ( DIRECTORY'RECORD[65,65] = " " ) & THEN GOTO ASSEMBLE'FILESPEC ! Logical surface number - won't work if logical isn't XXK ST'POS = INSTR(63,DIRECTORY'RECORD,"K") END'POS = INSTR(63,DIRECTORY'RECORD,":") LOGICAL$ = VAL(DIRECTORY'RECORD[(ST'POS+1),(END'POS-1)]) USING "#Z" ! Project number ST'POS = INSTR(63,DIRECTORY'RECORD,"[") END'POS = INSTR(63,DIRECTORY'RECORD,",") P$ = VAL(DIRECTORY'RECORD[(ST'POS+1),(END'POS-1)]) USING "#ZZ" ! Programmer number ST'POS = INSTR(1,DIRECTORY'RECORD,",") END'POS = INSTR(1,DIRECTORY'RECORD,"]") PN$ = VAL(DIRECTORY'RECORD[(ST'POS+1),(END'POS-1)]) USING "#ZZ" ASSEMBLE'FILESPEC: TGT'FILESPEC = DIRECTORY'RECORD[65,67] + LOGICAL$ + ":" & + DR'NAME + ".BAS" & + "[" + P$ + "," + PN$ + "]" RETURN ! End of FIX'FILESPEC subroutine !!!!!!!!!!!!!!!!!!!!!!!! ! STANDARD SUBROUTINES ! !!!!!!!!!!!!!!!!!!!!!!!! ERR'ROUTINE: ! Check for AlphaBASIC error IF ( ERR(0) = 0 ) & THEN GOTO ISAM'ERROR ! Display Basic error PRINT TAB(16,15); "?? Fatal AlphaBASIC Error "; STR$(ERR(0)) IF ( ERR(1) ) & THEN PRINT " at line "; STR$(ERR(1)) IF ( ERR(2) ) & THEN PRINT " on Channel "; STR$(ERR(2)) GOTO ERROR'ABORT ISAM'ERROR: ! IF ( ERROR'ABORT: PRINT PRINT CHR$(7) : PRINT CHR$(7) PRINT "!! Contact System Operator Immediately !!" PRINT GOTO EXIT ! ******* END OF UTBASD.SUB *******