1! ZONE.BAS READ DISK REO DIRECTORY AND CREATE ZONE INFO ! THIS PROGRAM READS A DIRECTORY LISTING FILE AND CREATES: ! ! 1. OUTPUT FILES: WITH FILE SPEC, ALLOCATED SIZE AND MODIFY DATE: ! ! A. ZONE 2 - FOR .LIS TYPE FILES TO BE PLACED IN THE MIDDLE. ! ! B. ZONE SYS - FOR [SYSTEM] FILES TO BE PLACED IN THE MIDDLE. ! ! C. ZONE DATA - FOR DATA TYPE FILES TO BE PLACED NEXT TO THE ! DIRECTORIES. ! ! 2. OUTPUT GLOBAL SYMBOLS FOR FILE TYPE COUNTS AND SIZE: ! ! S_TOT_DATA_FILE ! ! S_TOT_DATA_SIZE ! ! S_TOT_DIR_FILE ! ! S_TOT_DIR_SIZE ! ! S_TOT_2_FILE ! ! S_TOT_2_SIZE ! ! S_TOT_2LH_FILE (< 400) ! ! S_TOT_2LH_SIZE ! ! S_TOT_3_FILE ! ! S_TOT_3_SIZE ! ! INPUT: ! ! GLOBAL SYMBOL S_DATA TO DETERMINE WHICH DIR'S ARE FOR DATA. ! ! ZONE_DATA_SEQ FILE TO INDICATE THE RELATIVE POSITION OF FILES ! ON THE PACK. FILES FROM THE S_DATA DIRECTORIES ARE MATCHED TO ! THIS LIST. ONLY ONE MATCH IS ALLOWED. NO-MATCH FILES WILL BE ! PLACED INTO ZONE 2. ! ! GLOBAL SYMBOL S_RECENT_DATE TO DETERMINE WHICH FILES HAVE BEEN ! USED MOST RECENTLY. THEY WILL BE COPIED WITH THE ZONE2 > 400 ! BLOCK FILES. ! ! SOURCE DISK DIRECTORY /SIZ=ALL/DAT=MOD ! ZONE DATA SEQUENCE ARRAY: DIM DATA_SEQ$(300) DATA_SEQ_MAX% = 300% ! INPUT DIR LIST FILE MAP: MAP (ZONE_REC) L$ = 133 ! GET/SET SYMBOL WORK AREA: MAP (SYM_WORK) STRING P_SYM = 32, & P_VAL_254 = 254, & P_VAL_8 = 8, & LONG P_FLAG, & WORD P_LEN ! GET RECENT FILES DATE SYMBOL. FORMAT = "YYMMDD" P_SYM = "S_RECENT_DATE" P_FLAG = 2 CALL LIB$GET_SYMBOL( P_SYM BY DESC, & P_VAL_254 BY DESC, & P_LEN BY REF, & P_FLAG BY REF) S_RECENT_DATE$ = EDIT$(P_VAL_254,254) ! GET DATA DIRECTORY DECLARATION SYMBOL. FORMAT = "DATA1/.../" P_SYM = "S_DATA_DIR" P_FLAG = 2 CALL LIB$GET_SYMBOL( P_SYM BY DESC, & P_VAL_254 BY DESC, & P_LEN BY REF, & P_FLAG BY REF) S_DATA_DIR$ = EDIT$(P_VAL_254,254) + "!/" PRINT PRINT "S_DATA_DIR = "; S_DATA_DIR$ PRINT "S_DATA_DIR LEN ="; P_LEN PRINT "S_RECENT_DATE ="; S_RECENT_DATE$ PRINT 100 OPEN "ZONE_DIR:" FOR INPUT AS FILE 1, & ORGANIZATION SEQUENTIAL VARIABLE, & ACCESS READ, & MAP ZONE_REC 200 OPEN "ZONE2_COM" FOR OUTPUT AS FILE 2, RECORDSIZE 160 210 NOMARGIN #2 240 OPEN "ZONE_DATA" FOR OUTPUT AS FILE 4, RECORDSIZE 160 250 NOMARGIN #4 260 OPEN "ZONE_SYS" FOR OUTPUT AS FILE 5, RECORDSIZE 160 270 NOMARGIN #5 280 NOMARGIN #0 300 ON ERROR GOTO 19000 310 ! READ AND SAVE DATA SEQUENCE INFO: OPEN "ZONE_DATA_SEQ" FOR INPUT AS FILE 3 320 INPUT LINE #3, L$ ! FORMAT: [dir]file.ext DATA_SEQ% = DATA_SEQ% + 1 IF DATA_SEQ% > DATA_SEQ_MAX% THEN PRINT PRINT "WARNING - ZONE_DATA_SEQ EXCEEDS"; DATA_SEQ_MAX%; & " ENTRIES" PRINT GOTO 390 END IF DATA_SEQ$(DATA_SEQ%) = EDIT$(L$, 62) GOTO 320 390 GET #1 UNTIL LEFT(L$, 10) = "Directory " ! LOOK FOR START OF DIR LIST GOTO 450 ! BYPASS NEXT GET AND PROCESS DIR HEADER 400 GET #1 ! GET NEXT DIR LIST LINE 450 ! FORMAT DIR: IF INSTR(1,L$,"Directory ") <> 0 THEN DIR$ = RIGHT( EDIT$(L$,4), 11) DIR$ = "REO_IN" + RIGHT(DIR$, INSTR(1, DIR$,":")) DIR_TEST$ = RIGHT(DIR$, INSTR(1, DIR$,"[") + 1%) DIR_TEST$ = LEFT(DIR_TEST$, INSTR(1, DIR_TEST$,"]") - 1%) GOTO 400 END IF 500 GOTO 400 IF INSTR(1,L$,";") = 0 ! BYPASS NON FILE LINES 550 ! CHECK FOR FILE ERRORS IN THE DIR LIST. SHOULD NOT OCCUR: IF INSTR(1%, L$, "no such file") <> 0% THEN PRINT "ERROR - ";L$ TOT_ERROR_FILE% = TOT_ERROR_FILE% + 1% GOTO 400 END IF 600 SL_POS = INSTR(1,L$,"/") ! GET POSITION OF SIZE DATA 620 ! SAVE FILE NAME, ! IF NO SIZE THEN ITS ON THE NEXT LINE: IF SL_POS = 0 THEN T_FILE$ = EDIT$(L$,4) GET #1 SL_POS = INSTR(1,L$,"/") ELSE T_FILE$ = LEFT(L$,INSTR(1,L$," ")) END IF 650 T_SIZE% = VAL(MID(L$, 29,7)) ! EXTRACT SIZE ! FORMAT DATE: T_MO% = INSTR(1," JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC", & MID(L$,40,3)) / 3 T_DATE$ = MID(L$,46,2) + & FORMAT$( T_MO%, "<0>#") + & FORMAT$( VAL(MID(L$,37,2)), "<0>#") + " " ! LOCATE EXTENSION: T_DOT% = INSTR(1,T_FILE$,".") T_EXT$ = MID(T_FILE$, T_DOT% + 1, INSTR(T_DOT%,T_FILE$,";") - T_DOT% -1%) 670 ! CHECK FOR DATA FILES TO ZONE_DATA: GOTO 680 IF INSTR(1%, S_DATA_DIR$, DIR_TEST$ + "/") = 0 ! SEE IF DATA DIR FILE IS ON THE DATA SEQUENCE LIST: T_SEQ_FILE$ = RIGHT( DIR$, INSTR(1%,DIR$,"[")) + & LEFT( T_FILE$, INSTR(1%,T_FILE$,";") -1%) FOR T_SEQ% = 1% TO DATA_SEQ% GOTO 675 IF DATA_SEQ$(T_SEQ%) = T_SEQ_FILE$ NEXT T_SEQ% GOTO 680 ! NO MATCH, MAKE IT A ZONE 2 OR 3 675 DATA_SEQ$(T_SEQ%) = "" ! ONLY ONE VERSION WILL BE CENTERED TOT_DATA_FILE% = TOT_DATA_FILE% + 1% TOT_DATA_SIZE% = TOT_DATA_SIZE% + T_SIZE% PRINT #4 USING "<0>########", T_SEQ%; ! ADD SEQ # FOR SORT PRINT #4, DIR$; T_FILE$; " "; TAB(110); T_DATE$; PRINT #4 USING "#######", T_SIZE%; PRINT #4, T_EXT$ GOTO 400 680 ! SKIP DIRECTORIES: IF T_EXT$ = "DIR" THEN TOT_DIR_FILE% = TOT_DIR_FILE% + 1% TOT_DIR_SIZE% = TOT_DIR_SIZE% + T_SIZE% GOTO 400 END IF 700 ! TEST ZONE 3: IF INSTR(1%,DIR$,"[SYSTEM") > 0 THEN PRINT #5, "$ BACKUP "; DIR$; T_FILE$; " "; & "REO_OUT:[*...]/OWN=ORI !";TAB(110);T_DATE$; PRINT #5 USING "#######", T_SIZE%; PRINT #5, T_EXT$ TOT_SYS_SIZE% = TOT_SYS_SIZE% + T_SIZE% TOT_SYS_FILE% = TOT_SYS_FILE% + 1% GOTO 400 END IF 750 IF T_EXT$ = "ACL" OR & T_EXT$ = "BAS" OR & MID(T_EXT$,1,1) = "C" OR & T_EXT$ = "DEF" OR & T_EXT$ = "DOC" OR & T_EXT$ = "DTR" OR & MID(T_EXT$,1,3) = "EXE" OR & T_EXT$ = "FDL" OR & T_EXT$ = "FLB" OR & T_EXT$ = "FOR" OR & T_EXT$ = "FRM" OR & T_EXT$ = "LIB" OR & T_EXT$ = "MAR" OR & T_EXT$ = "MEM" OR & T_EXT$ = "OLB" OR & MID(T_EXT$,1,3) = "OLD" OR & T_EXT$ = "RNO" OR & T_EXT$ = "SHL" OR & MID(T_EXT$,1,3) = "TPU" OR & MID(T_EXT$,1,1) = "V" OR & T_EXT$ = "WOR" THEN GOTO 800 780 ! ELSE ZONE 2: IF T_SIZE% > 399% OR T_EXT$ = "GRD" THEN PRINT #2, "$ BACKUP "; DIR$; T_FILE$; " "; & "REO_OUT:[*...]/OWN=ORI !";TAB(110);T_DATE$; PRINT #2 USING "#######", T_SIZE%; PRINT #2, T_EXT$ TOT_2_SIZE% = TOT_2_SIZE% + T_SIZE% TOT_2_FILE% = TOT_2_FILE% + 1% GOTO 400 ELSE TOT_2LH_SIZE% = TOT_2LH_SIZE% + T_SIZE% TOT_2LH_FILE% = TOT_2LH_FILE% + 1% GOTO 400 END IF 800 GOTO 780 IF T_DATE$ >= S_RECENT_DATE$ TOT_3_SIZE% = TOT_3_SIZE% + T_SIZE% TOT_3_FILE% = TOT_3_FILE% + 1% GOTO 400 19000! ERRORS IF ERL = 400 AND ERR = 11 THEN RESUME 32000 END IF IF ERL = 320 AND ERR = 11 THEN RESUME 390 ELSE RESUME 19100 END IF 19100 PRINT ERR,ERL \ STOP 32000 CLOSE #1,#2,#4,#5 32040 PRINT PRINT "TOTAL ERROR FILES: ";TOT_ERROR_FILE% PRINT PRINT "TOTAL DATA FILES: ";TOT_DATA_FILE% PRINT PRINT "TOTAL DATA SIZE: ";TOT_DATA_SIZE% PRINT PRINT "TOTAL DIR FILES: ";TOT_DIR_FILE% PRINT PRINT "TOTAL DIR SIZE: ";TOT_DIR_SIZE% PRINT PRINT "TOTAL ZONE 2 FILES: ";TOT_2_FILE% PRINT PRINT "TOTAL ZONE 2 SIZE: ";TOT_2_SIZE% PRINT PRINT "TOTAL ZONE 2 < 400 FILES: ";TOT_2LH_FILE% PRINT PRINT "TOTAL ZONE 2 < 400 SIZE: ";TOT_2LH_SIZE% PRINT PRINT "TOTAL ZONE 3 FILES: ";TOT_3_FILE% PRINT PRINT "TOTAL ZONE 3 SIZE: ";TOT_3_SIZE% PRINT PRINT "TOTAL SYSTEM FILES: ";TOT_SYS_FILE% PRINT PRINT "TOTAL SYSTEM SIZE: ";TOT_SYS_SIZE% PRINT P_VAL_8 = NUM1$(TOT_ERROR_FILE%) P_SYM = "S_TOT_ERROR_FILE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) P_VAL_8 = NUM1$(TOT_DATA_FILE%) P_SYM = "S_TOT_DATA_FILE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) P_VAL_8 = NUM1$(TOT_DATA_SIZE%) P_SYM = "S_TOT_DATA_SIZE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) P_VAL_8 = NUM1$(TOT_DIR_FILE%) P_SYM = "S_TOT_DIR_FILE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) P_VAL_8 = NUM1$(TOT_DIR_SIZE%) P_SYM = "S_TOT_DIR_SIZE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) P_VAL_8 = NUM1$(TOT_2_FILE%) P_SYM = "S_TOT_2_FILE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) P_VAL_8 = NUM1$(TOT_2_SIZE%) P_SYM = "S_TOT_2_SIZE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) P_VAL_8 = NUM1$(TOT_2LH_FILE%) P_SYM = "S_TOT_2LH_FILE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) P_VAL_8 = NUM1$(TOT_2LH_SIZE%) P_SYM = "S_TOT_2LH_SIZE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) P_VAL_8 = NUM1$(TOT_3_FILE%) P_SYM = "S_TOT_3_FILE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) P_VAL_8 = NUM1$(TOT_3_SIZE%) P_SYM = "S_TOT_3_SIZE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) P_VAL_8 = NUM1$(TOT_SYS_FILE%) P_SYM = "S_TOT_SYS_FILE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) P_VAL_8 = NUM1$(TOT_SYS_SIZE%) P_SYM = "S_TOT_SYS_SIZE" CALL LIB$SET_SYMBOL( P_SYM BY DESC, P_VAL_8 BY DESC, P_FLAG BY REF) 32767 END