IDENTIFICATION DIVISION. PROGRAM-ID. MTAINV. DATE-WRITTEN. 15-JUN-76 DATE-COMPILED. AUTHOR. SHAWN DAVIDSON. INSTALLATION. NEWPORT-MESA UNIFIED SCHOOL DISTRICT. REMARKS. THIS PROGRAM WILL ALLOW YOU TO MODIFY AND MAINTAIN THE MAGNETIC TAPE LIBRARY. IT WAS WRITTEN FOR THE PDP-8 PROGRAM, AND THEREFORE HAS BEEN TAILORED TO ITS NEEDS. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. DECSYSTEM-10. OBJECT-COMPUTER. PDP-10. SPECIAL-NAMES. CONSOLE IS TTY. CHANNEL (1) IS TOP-OF-PAGE. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FIS020-FILE, ASSIGN TO DSK, RECORDING MODE IS SIXBIT, ACCESS MODE IS RANDOM, ACTUAL KEY IS FIS020-INDEX, FILE LIMITS ARE 1 THRU 9999. SELECT SORT-FILE, ASSIGN TO DSK, DSK, DSK. SELECT LPT-FILE, ASSIGN TO DSK, RECORDING MODE IS ASCII, ACCESS MODE IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD FIS020-FILE LABEL RECORDS ARE STANDARD, BLOCK CONTAINS 6 RECORDS, RECORD CONTAINS 120 CHARACTERS, DATA RECORD IS FIS020-REC, VALUE OF IDENTIFICATION IS "FIS020DAT". 01 FIS020-REC. 05 TAPE-NUM PIC X(4). 05 TAPE-TYPE PIC XX. 05 FILLER PIC X(4). 05 TAPE-LOC PIC X(6). 05 TAPE-OWNER PIC X(20). 05 TAPE-DESC PIC X(80). SD SORT-FILE DATA RECORD IS SORT-RECORD. 01 SORT-RECORD. 05 TAPE-NUM PIC 9(4). 05 FILLER PIC X(112). FD LPT-FILE LABEL RECORDS ARE STANDARD, VALUE OF IDENTIFICATION IS "FIS020LPT", DATA RECORD IS P-REC. 01 P-REC. 05 FILLER PIC X(132). WORKING-STORAGE SECTION. 01 H-1-L. 05 FILLER PIC X(8) VALUE "FIS020-A". 05 FILLER PIC X(26) VALUE SPACES. 05 FILLER PIC X(47) VALUE "M A G N E T I C T A P E I N V E N T O R Y". 05 FILLER PIC X(15) VALUE SPACES. 05 REPORT-DATE. 10 MONTH PIC 99. 10 FILLER PIC X VALUE "/". 10 DAY PIC 99. 10 FILLER PIC X VALUE "/". 10 YEAR PIC 99. 10 FILLER PIC XXX VALUE SPACES. 10 HOUR PIC XX. 10 FILLER PIC X VALUE ":". 10 MIN PIC 99. 10 FILLER PIC X VALUE ":". 10 SEC PIC 99. 05 FILLER PIC X(6) VALUE SPACES. 05 FILLER PIC X(5) VALUE "PAGE ". 05 HEADER-PAGE PIC ZZ. 01 H-2-L. 05 FILLER PIC X(26) VALUE "NUM INDEX TYPE LOC ". 05 FILLER PIC X(11) VALUE SPACES. 05 FILLER PIC X(5) VALUE "OWNER". 05 FILLER PIC X(44) VALUE SPACES. 05 FILLER PIC X(11) VALUE "DESCRIPTION". 01 PRINT-LINE. 05 TAPE-NUM PIC X(4). 05 FILLER PIC XXX VALUE SPACES. 05 TAPE-IND PIC ZZZZ. 05 FILLER PIC X(4) VALUE SPACES. 05 TAPE-TYPE PIC XX. 05 FILLER PIC XX VALUE SPACES. 05 TAPE-LOC PIC X(6). 05 FILLER PIC X(4) VALUE SPACES. 05 TAPE-OWNER PIC X(20). 05 FILLER PIC X(3) VALUE SPACES. 05 TAPE-DESC PIC X(80). 01 PRINT-TOTAL. 05 FILLER PIC X(56) VALUE SPACES. 05 FILLER PIC X(9) VALUE "TOTAL OF ". 05 PRINT-TOTAL-RECS PIC ZZZZ. 05 FILLER PIC X(13) VALUE " TAPES LISTED". 01 WORKING-STORAGE-STUFF. 05 DATE-HOLD. 10 YEAR PIC XX. 10 MONTH PIC XX. 10 DAY PIC XX. 10 HOUR PIC XX. 10 MIN PIC XX. 10 SEC PIC XX. 05 FIS020-INDEX PIC 9999 COMP. 05 SEARCH-CALLER PIC X. 05 INPUT-OPTION PIC X. 05 PAGE-COUNTER PIC 99 COMP. 05 LINE-COUNTER PIC 99 COMP. 05 TOTAL-RECS PIC 9999 COMP. 05 FIS020-INDEX-CHAR PIC X(4). 05 TAPE-CHAR PIC X(4). 05 F-NUM PIC X(4). 05 F-TYPE PIC XX. 05 F-IND PIC X(4). 05 F-LOC PIC X(6). 05 F-OWNER PIC X(20). 05 F-DESC PIC X(80). PROCEDURE DIVISION. 0000-START-UP SECTION. DISPLAY " ". DISPLAY "[FIS020] MAGNETIC TAPE INVENTORY". DISPLAY " ". 1000-INITIALIZATION SECTION. MOVE TODAY TO DATE-HOLD. MOVE CORRESPONDING DATE-HOLD TO REPORT-DATE. 1010-OPEN-FILES. OPEN I-O FIS020-FILE. 2000-INPUT-OPTION SECTION. DISPLAY "OPTION = " WITH NO ADVANCING. ACCEPT INPUT-OPTION. IF INPUT-OPTION = "E" OR "END" GO TO 9000-CLOSOUT. IF INPUT-OPTION = "L" OR "LIST" GO TO 3000-LIST. IF INPUT-OPTION = "D" OR "DELETE" GO TO 4000-DELETE. IF INPUT-OPTION = "A" OR "ADD" GO TO 5000-ADD. IF INPUT-OPTION = "F" OR "FIND" GO TO 6000-FIND. IF INPUT-OPTION = "C" OR "CHANGE" GO TO 7000-CHANGE. IF INPUT-OPTION = "S" OR "SORT" GO TO 2500-SORT. IF INPUT-OPTION = SPACES GO TO 2000-INPUT-OPTION. DISPLAY " ". DISPLAY "COMMAND DESCRIPTION". DISPLAY "------- -----------". DISPLAY " ". DISPLAY "ADD ADD ENTRY TO DATA FILE". DISPLAY "CHANGE CHANGE AN ENTRY IN DATA FILE". DISPLAY "DELETE DELETE AN ENTRY FROM THE DATA FILE". DISPLAY "END EXIT FROM PROGRAM". DISPLAY "FIND LOCATE AN ENTRY IN THE DATA FILE". DISPLAY "LIST PRODUCE A LISTING OF ALL ENTRIES IN FILE". DISPLAY "SORT WILL SORT THE FILE". GO TO 2000-INPUT-OPTION. 2500-SORT SECTION. CLOSE FIS020-FILE. DISPLAY "[STARTING SORT]". SORT SORT-FILE ON ASCENDING KEY TAPE-NUM OF SORT-RECORD USING FIS020-FILE, GIVING FIS020-FILE. OPEN I-O FIS020-FILE. DISPLAY "[SORT COMPLETE]". GO TO 2000-INPUT-OPTION. 3000-LIST SECTION. SET LINE-COUNTER TO 54. SET PAGE-COUNTER, TOTAL-RECS TO ZERO. OPEN OUTPUT LPT-FILE. MOVE "L" TO SEARCH-CALLER. 3010-LIST-LOOP. PERFORM 8030-SEARCH. IF TOTAL-RECS NOT = ZERO MOVE TOTAL-RECS TO PRINT-TOTAL-RECS WRITE P-REC FROM PRINT-TOTAL AFTER ADVANCING TOP-OF-PAGE. 3020-LIST-MORE. IF FIS020-INDEX-CHAR = "E" OR "END" CLOSE LPT-FILE GO TO 2000-INPUT-OPTION. SET TOTAL-RECS, PAGE-COUNTER TO ZERO. SET LINE-COUNTER TO 55. GO TO 3010-LIST-LOOP. 4000-DELETE SECTION. DISPLAY "INDEX = " WITH NO ADVANCING. ACCEPT FIS020-INDEX-CHAR. IF FIS020-INDEX-CHAR = "E" OR "END" GO TO 2000-INPUT-OPTION. IF FIS020-INDEX-CHAR = SPACES GO TO 4000-DELETE. MOVE FIS020-INDEX-CHAR TO FIS020-INDEX. READ FIS020-FILE INVALID KEY DISPLAY "? INVALID KEY: ", FIS020-INDEX GO TO 4000-DELETE. IF LOW-VALUES = FIS020-REC DISPLAY "? RECORD DELETED: ", FIS020-INDEX GO TO 4000-DELETE. MOVE LOW-VALUES TO FIS020-REC. WRITE FIS020-REC INVALID KEY DISPLAY "? INVALID KEY: ", FIS020-INDEX GO TO 4000-DELETE. DISPLAY "[RECORD AT ", FIS020-INDEX ," DELETED]". GO TO 4000-DELETE. 5000-ADD SECTION. SET FIS020-INDEX TO ZERO. 5010-SEARCH-LOOP. SET FIS020-INDEX UP BY 1. READ FIS020-FILE INVALID KEY GO TO 5020-GET-DATA. IF LOW-VALUES = FIS020-REC GO TO 5020-GET-DATA. GO TO 5010-SEARCH-LOOP. 5020-GET-DATA. DISPLAY " ". DISPLAY "INDEX = ",FIS020-INDEX. DISPLAY "TAPE NUMBER = " WITH NO ADVANCING. ACCEPT TAPE-CHAR. IF TAPE-CHAR = "E" OR "END" GO TO 2000-INPUT-OPTION. MOVE TAPE-CHAR TO TAPE-NUM OF FIS020-REC. DISPLAY "TYPE = " WITH NO ADVANCING. ACCEPT TAPE-TYPE OF FIS020-REC. DISPLAY "OWNER = " WITH NO ADVANCING. ACCEPT TAPE-OWNER OF FIS020-REC. DISPLAY "LOCATION = " WITH NO ADVANCING. ACCEPT TAPE-LOC OF FIS020-REC. DISPLAY "DESCRIPTION = " WITH NO ADVANCING. ACCEPT TAPE-DESC OF FIS020-REC. WRITE FIS020-REC INVALID KEY DISPLAY "? INVALID KEY: ", FIS020-INDEX GO TO 2000-INPUT-OPTION. GO TO 5010-SEARCH-LOOP. 6000-FIND SECTION. MOVE "F" TO SEARCH-CALLER. PERFORM 8030-SEARCH. IF FIS020-INDEX-CHAR = "E" OR "END" GO TO 2000-INPUT-OPTION. GO TO 6000-FIND. 7000-CHANGE SECTION. DISPLAY " ". DISPLAY "INDEX = " WITH NO ADVANCING. ACCEPT FIS020-INDEX-CHAR. IF FIS020-INDEX-CHAR = "E" OR "END" GO TO 2000-INPUT-OPTION. MOVE FIS020-INDEX-CHAR TO FIS020-INDEX. READ FIS020-FILE INVALID KEY DISPLAY "? INVALID INDEX" GO TO 7000-CHANGE. DISPLAY " ". DISPLAY "TAPE NUMBER = ",TAPE-NUM OF FIS020-REC. DISPLAY "TAPE NUMBER = " WITH NO ADVANCING. ACCEPT F-NUM. IF F-NUM NOT = SPACES MOVE F-NUM TO TAPE-NUM OF FIS020-REC. DISPLAY "TAPE TYPE = ",TAPE-TYPE OF FIS020-REC. DISPLAY "TAPE TYPE = " WITH NO ADVANCING. ACCEPT F-TYPE. IF F-TYPE NOT = SPACES MOVE F-TYPE TO TAPE-TYPE OF FIS020-REC. DISPLAY "OWNER = ", TAPE-OWNER OF FIS020-REC. DISPLAY "OWNER = " WITH NO ADVANCING. ACCEPT F-OWNER. IF F-OWNER NOT = SPACES MOVE F-OWNER TO TAPE-OWNER OF FIS020-REC. DISPLAY "LOCATION = ",TAPE-LOC OF FIS020-REC. DISPLAY "LOCATION = " WITH NO ADVANCING. ACCEPT F-LOC. IF F-LOC NOT = SPACES MOVE F-LOC TO TAPE-LOC OF FIS020-REC. DISPLAY "DESCRIPTION = ", TAPE-DESC OF FIS020-REC. DISPLAY "DESCRIPTION = " WITH NO ADVANCING. ACCEPT F-DESC. IF F-DESC NOT = SPACES MOVE F-DESC TO TAPE-DESC OF FIS020-REC. WRITE FIS020-REC INVALID KEY DISPLAY "? INVALID KEY: ", FIS020-INDEX GO TO 7000-CHANGE. DISPLAY " ". DISPLAY "[RECORD ", FIS020-INDEX ," UPDATED]". GO TO 7000-CHANGE. 8010-HEADER SECTION. SET LINE-COUNTER TO ZERO. SET PAGE-COUNTER UP BY 1. MOVE PAGE-COUNTER TO HEADER-PAGE. WRITE P-REC FROM H-1-L AFTER ADVANCING TOP-OF-PAGE. WRITE P-REC FROM H-2-L AFTER ADVANCING 2 LINES. 8020-HEADER-EXIT. EXIT. 8030-SEARCH SECTION. SET LINE-COUNTER TO 54. SET FIS020-INDEX TO ZERO. DISPLAY "INDEX = " WITH NO ADVANCING. ACCEPT FIS020-INDEX-CHAR. IF FIS020-INDEX-CHAR = "E" OR "END" GO TO 8070-SEARCH-EXIT. IF FIS020-INDEX-CHAR = SPACES GO TO 8040-START-SEARCH. MOVE FIS020-INDEX-CHAR TO FIS020-INDEX. READ FIS020-FILE INVALID KEY SET FIS020-INDEX TO ZERO GO TO 8040-START-SEARCH. MOVE HIGH-VALUES TO F-OWNER. GO TO 8060-FOUND-IT. 8040-START-SEARCH. DISPLAY " ". DISPLAY "TAPE NUMBER = " WITH NO ADVANCING. ACCEPT F-NUM. DISPLAY "TAPE-TYPE = " WITH NO ADVANCING. ACCEPT F-TYPE. DISPLAY "OWNER = " WITH NO ADVANCING. ACCEPT F-OWNER. DISPLAY "LOCATION = " WITH NO ADVANCING. ACCEPT F-LOC. DISPLAY "DESCRIPTION = " WITH NO ADVANCING. ACCEPT F-DESC. DISPLAY " ". DISPLAY "[STARTING SEARCH]". 8050-SEARCH-FILE. SET FIS020-INDEX UP BY 1. READ FIS020-FILE INVALID KEY GO TO 8070-SEARCH-EXIT. IF F-NUM = SPACES OR F-NUM = TAPE-NUM OF FIS020-REC NEXT SENTENCE ELSE GO TO 8050-SEARCH-FILE. IF F-LOC = SPACES OR F-LOC = TAPE-LOC OF FIS020-REC NEXT SENTENCE ELSE GO TO 8050-SEARCH-FILE. IF F-TYPE =SPACES OR F-TYPE = TAPE-TYPE OF FIS020-REC NEXT SENTENCE ELSE GO TO 8050-SEARCH-FILE. IF F-OWNER = SPACES OR F-OWNER =TAPE-OWNER OF FIS020-REC NEXT SENTENCE ELSE GO TO 8050-SEARCH-FILE. IF F-DESC = SPACES OR F-DESC = TAPE-DESC OF FIS020-REC NEXT SENTENCE ELSE GO TO 8050-SEARCH-FILE. 8060-FOUND-IT. IF SEARCH-CALLER = "F" DISPLAY " " DISPLAY "INDEX = ", FIS020-INDEX DISPLAY "NUMBER = ",TAPE-NUM OF FIS020-REC DISPLAY "TYPE = ",TAPE-TYPE OF FIS020-REC DISPLAY "OWNER = ", TAPE-OWNER OF FIS020-REC DISPLAY "LOCATION = ",TAPE-LOC OF FIS020-REC DISPLAY "DESCRIPTION = ",TAPE-DESC OF FIS020-REC DISPLAY " ". IF SEARCH-CALLER = "L" PERFORM 8080-LPT-OUT. GO TO 8050-SEARCH-FILE. 8070-SEARCH-EXIT. EXIT. 8080-LPT-OUT SECTION. MOVE CORRESPONDING FIS020-REC TO PRINT-LINE. MOVE FIS020-INDEX TO TAPE-IND OF PRINT-LINE. SET LINE-COUNTER UP BY 1. IF LINE-COUNTER = 55 PERFORM 8010-HEADER. WRITE P-REC FROM PRINT-LINE AFTER ADVANCING 1 LINE. SET TOTAL-RECS UP BY 1. 8090-LPT-OUT-EXIT. EXIT. 9000-CLOSOUT SECTION. 9010-NORMAL-CLOSOUT. CLOSE FIS020-FILE. DISPLAY " ". DISPLAY "[FIS020 - ENDING EXECUTION]". STOP RUN.