! The following are definitions for processing an INSTALL/LIST/FULL ! listing to obtain information about what images are installed on ! a system. ! ! B. Z. Lederman REDEFINE DOMAIN INSTALL_IN USING INSTALL_IN_RECORD ON INSTALL_PROCESS.LOG; REDEFINE RECORD INSTALL_IN_RECORD OPTIMIZE 01 INS_IN_REC. ! ! This reads data from an INSTALL/LIST/FULL log file ! ! B. Z. Lederman 29-Sep-1987 ITT World Communications ! 31-Dec-1990 Add fields for qualifiers on line ! after image name ! 10 TEXT_IN PIC X(80). 10 PARSE_FIELDS REDEFINES TEXT_IN. 20 DISK PIC XXX. 20 IMAGE PIC X(77). 20 PARSE_2 REDEFINES IMAGE. 30 BLANK1 PIC X(5). 30 TYPE PIC X(10). 20 PARSE_3 REDEFINES IMAGE. 30 BLANK2 PIC X(17). 30 QUAL2 PIC X(60). ; REDEFINE DOMAIN INSTALL_P USING INSTALL_P_RECORD ON INS_P.SEQ; REDEFINE PROCEDURE INSTALL_PROCESS ! FN$INIT_TIMER ! Just for some extra information ! ! This procedure reads the data from a log file containing an ! INSTALL /LIST/FULL command, and normalizes the data. ! ! B. Z. Lederman 29-Sep-1987 ITT World Communications ! 21-Oct-1990 Compensate for error messages in log ! 31-Dec-1990 handle install qualifiers on line after ! image name ! READY INSTALL_IN ! ! clear out a new data file (remember to purge old ones) ! DEFINE FILE FOR INSTALL_P ALLOCATION = 30; READY INSTALL_P WRITE ! DECLARE OUT_PUT PIC X. ! decide when to store output OUT_PUT = "F" ! DECLARE I USAGE LONG. ! character pointer ! DECLARE T_DIRECTORY PIC X(64). ! temporary data fields. DECLARE T_IMAGE PIC X(32). DECLARE T_OPEN PIC X. DECLARE T_HDR PIC X. DECLARE T_SHAR PIC X. DECLARE T_PRV PIC X. DECLARE T_PROT PIC X. DECLARE T_LNKBL PIC X. DECLARE T_CMODE PIC X. DECLARE T_NOPURG PIC X. DECLARE T_ACNT PIC X. DECLARE T_ENTRY PIC X(6). DECLARE T_MAX_SHARED PIC X(6). DECLARE T_SHARED_WORK PIC X(32). DECLARE T_GLOBAL PIC X(6). ! FOR INSTALL_IN WITH TEXT_IN NOT CONTAINING "%" BEGIN IF TEXT_IN = "" BEGIN ! end of a data set IF OUT_PUT = "T" BEGIN ! if we have something STORE INSTALL_P USING BEGIN ! store it DIRECTORY = T_DIRECTORY IMAGE = T_IMAGE OPEN = T_OPEN HDR = T_HDR SHAR = T_SHAR PRV = T_PRV PROT = T_PROT LNKBL = T_LNKBL CMODE = T_CMODE NOPURG = T_NOPURG ACNT = T_ACNT ENTRY = T_ENTRY MAX_SHARED = T_MAX_SHARED GLOBAL = T_GLOBAL END ! ! clear out fields for next set of data ! OUT_PUT = "F" T_IMAGE = " " T_OPEN = " " T_HDR = " " T_SHAR = " " T_PRV = " " T_PROT = " " T_LNKBL = " " T_CMODE = " " T_NOPURG = " " T_ACNT = " " T_ENTRY = "000000" T_MAX_SHARED = "000000" T_GLOBAL = "000000" END END ELSE BEGIN ! ! Pull out the information line-by-line by looking for unique ! identification for each line. ! IF DISK = "DIS" BEGIN I = FN$STR_LOC (TEXT_IN, " ") ! find end of data T_DIRECTORY = FN$STR_EXTRACT(TEXT_IN, 1, I) END ELSE IF TYPE = "Entry acce" BEGIN I = FN$STR_LOC (TEXT_IN, "=") ! find start of data T_ENTRY = FN$STR_EXTRACT (TEXT_IN, (I + 2), 6) ! get data OUT_PUT = "T" END ELSE IF TYPE = "Current / " BEGIN I = FN$STR_LOC (TEXT_IN, "=") ! find start of numbers T_SHARED_WORK = FN$STR_EXTRACT(TEXT_IN, I, 32) ! get numbers I = FN$STR_LOC (T_SHARED_WORK, "/") ! find start of real data T_MAX_SHARED = FN$STR_EXTRACT(T_SHARED_WORK, (I + 1), 32) ! get real data OUT_PUT = "T" END ELSE IF TYPE = "Global sec" BEGIN I = FN$STR_LOC (TEXT_IN, "=") ! find start of data T_GLOBAL = FN$STR_EXTRACT (TEXT_IN, (I + 2), 6) ! get data OUT_PUT = "T" END ELSE IF BLANK2 = " " BEGIN ! qualifiers on line IF FN$STR_LOC (QUAL2, "Open") > 0 THEN T_OPEN = "O" ! following IF FN$STR_LOC (QUAL2, "Hdr") > 0 THEN T_HDR = "H" ! image IF FN$STR_LOC (QUAL2, "Shar") > 0 THEN T_SHAR = "S" ! name IF FN$STR_LOC (QUAL2, "Prv") > 0 THEN T_PRV = "V" IF FN$STR_LOC (QUAL2, "Prot") > 0 THEN T_PROT = "T" IF FN$STR_LOC (QUAL2, "Lnkbl") > 0 THEN T_LNKBL = "L" IF FN$STR_LOC (QUAL2, "Cmode") > 0 THEN T_CMODE = "C" IF FN$STR_LOC (QUAL2, "Nopurg") > 0 THEN T_NOPURG = "N" IF FN$STR_LOC (QUAL2, "Acnt") > 0 THEN T_ACNT = "A" END ELSE BEGIN I = FN$STR_LOC (IMAGE, ";") ! look for semi-colon IF I > 0 BEGIN ! if there is one T_IMAGE = FN$STR_EXTRACT(IMAGE, 1, (I - 1)) ! image name, no ";" IF FN$STR_LOC (IMAGE, "Open") > 0 THEN T_OPEN = "O" IF FN$STR_LOC (IMAGE, "Hdr") > 0 THEN T_HDR = "H" IF FN$STR_LOC (IMAGE, "Shar") > 0 THEN T_SHAR = "S" IF FN$STR_LOC (IMAGE, "Prv") > 0 THEN T_PRV = "V" IF FN$STR_LOC (IMAGE, "Prot") > 0 THEN T_PROT = "T" IF FN$STR_LOC (IMAGE, "Lnkbl") > 0 THEN T_LNKBL = "L" IF FN$STR_LOC (IMAGE, "Cmode") > 0 THEN T_CMODE = "C" IF FN$STR_LOC (IMAGE, "Nopurg") > 0 THEN T_NOPURG = "N" IF FN$STR_LOC (IMAGE, "Acnt") > 0 THEN T_ACNT = "A" END END END END ! FN$SHOW_TIMER ! just for some extra info. ! END_PROCEDURE REDEFINE RECORD INSTALL_P_RECORD OPTIMIZE 01 INS_P_REC. ! ! This matches the records produced from the INSTALL_PROCESS ! program which normalizes the data from an INSTALL/LIST/FULL ! ! B. Z. Lederman 29-Sep-1987 ITT World Communications ! 08-Jun-1989 SRC add Acnt field ! 10 H_DIR. 20 FILLER PIC X(64). 10 R_DIR REDEFINES H_DIR. 20 DIRECTORY PIC X(64). 10 TRIMMED COMPUTED BY FN$TRIM_FILESPEC(DIRECTORY,16) EDIT_STRING T(16). 10 IMAGE PIC X(32) EDIT_STRING T(18). 10 QUALIFIERS PIC X(10). 10 QUAL REDEFINES QUALIFIERS. 20 OPEN PIC X. ! matches INSTALL abbreviations 20 HDR PIC X. 20 SHAR PIC X. 20 PRV PIC X. 20 PROT PIC X. 20 LNKBL PIC X. 20 CMODE PIC X. 20 NOPURG PIC X. 20 ACNT PIC X. 10 ENTRY PIC 9(6) EDIT_STRING ZZZ,ZZ9. 10 MAX_SHARED PIC 9(6) EDIT_STRING ZZZ,ZZ9. 10 GLOBAL PIC 9(6) EDIT_STRING ZZZ,ZZ9. ; DELETE INSTALL_REPORT; REDEFINE PROCEDURE INSTALL_REPORT READY INSTALL_P REPORT INSTALL_P SORTED BY DESC ENTRY, MAX_SHARED, ASCENDING IMAGE ON *."file name or TT" SET REPORT_NAME = "Installed Image Use" !PRINT TRIMMED USING X(18), PRINT_THIS PRINT IMAGE, QUALIFIERS, ENTRY, MAX_SHARED, GLOBAL AT BOTTOM OF REPORT PRINT TOTAL(ENTRY), MAX(MAX_SHARED), TOTAL(GLOBAL) END_REPORT END_PROCEDURE DELETE T132; REDEFINE PROCEDURE T132 SET COLUMNS_PAGE=132 FN$WIDTH(132) ![?3h END_PROCEDURE DELETE T80; REDEFINE PROCEDURE T80 SET COLUMNS_PAGE=80 FN$WIDTH(80) ![?3l END_PROCEDURE