C PROGRAM LIST.FT C C C LIST - A BATCH LIST UTILITY PROGRAM FOR OS/8 C -------------------------------------------- C C C C C C PETER LEMKIN C NATIONAL INSTITUTES OF HEALTH C BETHESDA, MD 20014 C C OCT 12, 1971 C REVISED DECEMBER 4, 1972 C C C C ABSTRACT C --------- C PROGRAM LIST IS AN OS/8 PROGRAM WHICH LISTS A MAXIMUM OF C 150 ".DA" FILES ON THE LINEPRINTER. THE LISTINGS INCLUDE THE C FILE NAME, DATE AND LISTING LINE AND PAGE SEQUENCE NUMBERS. C THE SET OF FILES TO BE LISTED MAY BE SPECIFIED INDIVIDUALLY C ON THE TELETYPE OR BY USING AN INDIRECT FILE. FIVE EDIT CODES C ARE AVAILIABLE TO INSERT IN THE TEXT TO MODIFY THE LISTING. C**PAGE C C C INTRODUCTION C ------------ C PROGRAM "LIST" IS AN OS/8 PROGRAM WHICH LISTS ON THE C LINEPRINTER A MAXIMUM OF 150 ".DA" FILES SPECIFIED EITHER: C A) FROM THE TELETYPE (NO .DA EXTENSION IS GIVEN). C OR C B) FROM A SYS: FILE WITH A .DA EXTENSION BY C REQUESTING AN INDIRECT SPECIFICATION . C EG. INDIR=NAME C WHERE NAME IS ANY ".DA" FILE WHICH CONTAINS THE C NAMES OF THE FILES TO BE LISTED. IN THIS CASE C NAME.DA COULD CONSIST OF THE LIST (LEFT JUSTIFIED) C LIST C LISTFL C DATE C UTIL2 C ETC.... C AFTER THE LIST OF NAMES IS EXHAUSTED CONTROL C IS RETURNED TO MODE (A) FOR MORE REQUESTS. C C THE INPUT SPECIFICATION IS TERMINATED BY TYPING THE "RETURN" C KEY IN RESPONSE TO THE REQUEST FOR ANOTHER FILE. AT THIS POINT C THE FILES ARE LISTED ON THE LINEPRINTER WITH PAGE AND SEQUENCE C NUMBERS. FIVE EDIT CODES **DEAF, **LSOF, **LSON, **PAGE,**HEAR C ARE AVAILIABLE FOR USE IN MODIFYING THE TEXT LISTING. CONTROL C IS RETURNED TO OS/8 WHEN ALL OF THE LISTINGS ARE DONE. C C C C C EDIT CODES C ---------- C THERE ARE 5 EDIT CODES WHICH ARE DESCRIBED IN THE C FOLLOWING TABLE. THE EDIT CODE IS USED IN THE FILE TO C BE LISTED AND MUST BE IN COL. 1 TO 10 IN ORDER THAT IT C BE TRAPPED BY "LIST". IF IT IS NOT IN THESE COLUMNS THEN C IT WILL BE IGNORED. C**DEAF C 1. **PAGE - FORCE THE PRINTING OF A NEW PAGE. C 2. **LSOF - TURN OFF THE LISTING C 3. **LSON - TURN ON THE LISTING C 4. **DEAF - DON'T LISTEN TO THE ABOVE EDIT CODES C 5. **HEAR - RESUME LISTENING TO EDIT CODES 1 TO 4 ABOVE. C**HEAR C C C C C C C SEQUENCE NUMBERING C ------------------ C IF THE ANSWER TO THE INITIAL QUESTION "SEQUENCE NUMBERS?YES/NO" C IS YES, THE NAME OF THE FILE BEING LISTED IS PLACED AT THE C TOP OF EACH PAGE ALONG WITH A PAGE NUMBER FOR THAT LISTING. IN C ADDITION, THE LINES ON THE PAGE ARE NUMBERED SEQUENTIALLY 1 TO C THE MAXIMUM NUMBER OF LINES IN THE FILE. EACH NEW LISTING C STARTS THE PAGE NUMBERING OVER AGAIN. C C C HARDWARE REQUIRED C ---------------- C PDP8 WITH 12K OF CORE AND RUNNING OS/8. C A LINEPRINTER (FORTRAN DEVICE 3.) . THE LINEPRINTER C HANDLER SUPPLIED BY DEC WAS REMOVED IN FAVOR OF ONE C FOR A NON-STANDARD LINEPRINTER (A.B. DICK 940 ON C ECLECTIC COMPUTER CORP INTERFACE DEVICE CODE C 65). THE CHANGES WERE MADE IN UTILTY.SB AND THIS IS C CALLED UTIL2.SB AND IS LOADED ***AFTER** LIB8.RL/L. C IF ANOTHER LPT: IS USED, THE UTILITY PACKAGE MUST BE C MODIFIED. ANOTHER APPROACH WOULD BE TO OPEN THE LPT: AS THE C GENERAL I/O "OUTPUT" DEVICE USING THE OS/8 LPT:. THIS LATTER C CAPABILITY IS USED BY CHANGING VARIABLE LPTSW FROM 0 (DEVICE 3) C TO NON-ZERO (DEVICE 4), AND SETTING VARIABLE ALPT TO 'LPT' OR C TO THE OUTPUT DEVICE DESIRED. C C C C C C VARIABLES OF INTEREST C --------------------- C FFF(1) IS THE NAME INPUT FROM THE TTY OR INDIRECT FILE C OF THE FILE TO BE LISTED OR THE NAME OF THE C FILE CONTAINING THE LIST TO BE LISTED. C FFF(2) CONTAINS 'DA ' FILE NAME EXT. USED FOR THE LOOKUP. C ISW =0 FOR DIRECT USE OF FILE NAME FFF(1). C =1 FOR INDIRECT USE OF FILE NAME FFF(1). C ICOUNT IS THE POINTER TO THE FILE NAME STACK "STACK". C HHH1 IS THE INDIRECT SYMBOL "INDIR=" USED TO SIGNAL INDIRECT C INPUT. C IDEV = 1 FOR TTY AND 4 FOR SYS: FOR GETTING THE NEXT NAME. C PAGE IS "YES " OR "NO " USED TO SIGNAL SEQUENCE NUMBERING C OR NOT. C STACK IS THE PUSH DOWN STACK USED TO STORE THE NAMES OF THE C FILES TO BE LISTED. IT IS ASSUMED THAT THEY WILL C BE ON THE SYS. C MAX CURRENTYLY 150, IS THE MAXIMUM NUMBER OF INPUT FILES. C KDEV CURRENTLY 1, IS THE TTY INPUT DEVICE. C ALPT IS THE NAME OF THE DEVICE 4 OUTPUT DEVICE IF DEVICE 3 C (LPT: IN UTIL2.SB) IS NOT USED. C LPTSW IS A SWITCH USED TO DETERMINE THE OUTPUT DEVICE. C LPTSW=0 USES THE UTIL2 LPT: AND LPTSW =1 USES DEVICE 4. C C C C C C LOADING SEQUENCE C ---------------- C .R FORT C *LIST.RL_LIST.FT C .R LOADER C *LIST.RL/I/O - MUST BE LOADED FIRST C *LISTFL.RL,DATE.RL,UTIL2.RL C *LIB8.RL/L C *$ C .SAVE SYS:LIST.SV C C C C C C ERROR MESSAGES C ============== C 1. "FILE XXXXX IS NOT ON DEVICE SYS: TRY AGAIN" WILL BE TYPED C IF THE FILE IS NOT ON DEVICE SYS. IF IT IS ACCEPTING THE C NAME FROM THE TTY: THEN CORRECT THE SPELLING OR TYPE ANOTHER C NAME. IF IT IS FROM THE INDIRECT FILE, THE FILE WILL BE C SKIPED AND NOT LISTED. C 2. "ANSWER YES OR NO" ONLY YES OR NO WILL WORK FOR THE PAGE C NUMBER QUESTION. C 3. "TOO MANY FILES" IS TYPED IF MORE THAN 150 FILES ARE C TO BE LISTED. THE LIST PROGRAM IS RESTARTED WITH ZERO C FILES IN THE STACK. C C C C SUBROUTINES NEEDED: C ------------------ C 1. LISTFL.RL - TO DO THE LISTING OF THE FILE C 2. DATE.RL - TO ACCESS THE OS/8 DATE C 3. UTIL2.RL - (USES EOF.RL - TO CHECK FOR EOF ON FILE INPUT). C C C C**PAGE C ***************************************************** C C COMMON STACK DIMENSION FFF(2),III(3),STACK(150,2) EQUIVALENCE (FFF(1),III(1)) C C C C C 1.0 SET THE OUTPUT DEVICE C *****OUTPUT DEVICE ASSIGNMENT*** ALPT='LPT' C NOTE SET FOR UTIL2.SB DEVICE 3=LPT: LPTSW=0 C ******************************** C C C C C C 1.1. CLEAR THE EOF FLAG, AND SET FLAGS. 110 CALL EOF(IEOF) MAX=150 KDEV=1 ICOUNT=1 FFF(2)='DA ' ISW=0 FNO='NO ' YES='YES ' HHH1='INDIR=' IDEV=1 C C C C 2. ASK WHETHER PAGE/SEQUENCE NUMBERS ARE DESIRED. 56 READ(KDEV,212)PAGE C TEST IF YES OR NO IF(PAGE-YES)58,111,58 58 IF(PAGE-FNO)59,111,59 59 WRITE(KDEV,214) GOTO 56 C C C C 3. LOOP TO GET THE FILENAME. C TEST IF IT IS FROM THE TTY: OR SYS: INDIRECT FILE. 111 IF(IDEV-1)160,150,160 C C 4. THE NAME IS FROM THE TTY. 150 ISW=0 IDEV=1 READ(KDEV,211)FFF(1),GGG C C C C 5. TEST THE INPUT TO SEE IF THE REQUEST IS FOR INDIRECT. IF(HHH1-FFF(1))170,151,170 C C C C 6. IT IS INDIRECT FROM THE SYS: FILE IN GGG, MAKE IT IN FFF(1). 151 FFF(1)=GGG ISW=1 GOTO 170 C C 7. OPEN THE INDIRECT NAME LIST SYS: FILE. 152 CALL IOPEN('SYS',FFF(1)) ISW=0 IDEV=4 C C 8. GO GET THE NAME INDIRECTLY FROM THE DISK FILE. 160 READ(4,171)FFF(1) C C C C 9. TEST THE SYS: EOF FLAG TO SEE IF DONE WITH INDIRECT LIST. CALL EOF(IEOF) IF(IEOF)150,161,150 161 WRITE(KDEV,211)FFF(1) C C 10. CONVERT THE TTY: INPUT NAME TO FILE LOOKUP NAME. C PUT ALL SPACES (.32 DECIMAL) TO 00. C FIRST COPY THE NAME FOR USE IN THE ERROR PRINT MESSAGE. 170 QQQ=FFF(1) DO 777 I=1,3 KKK=III(I) S CLA S TAD \KKK S AND (7700 S TAD (-4000 S SZA CLA S JMP NEXTBYTE S/FIX IT UP TO ZERO S TAD \KKK S AND (0077 S DCA \KKK SNEXTBYTE, TAD \KKK S AND (0077 S TAD (-40 /SPACE? S SZA CLA S JMP \777 S TAD \KKK S AND (7700 S DCA \KKK 777 III(I)=KKK C C C C 11. TEST IF NULL FILENAME IS END OF THE LIST TO SIGNIFY EOF. IF(FFF(1))114,304,114 C C 12. DO LOOKUP TO TEST IF THE FILENAME IS ON DEVICE SYS:. C TRY AGAIN IF FAIL. S\114, CLA S TAD PNTR S DCA LOOKUPNAME S CLA CLL IAC /DEVICE SYS:=0001 S CPAGE 11 S 6212 S JMS 7700 /USR S 2 /LOOKUP ON DEVICE SYS: SLOOKUPNAME, 0 S 0 S JMP \113 /NOT THERE... C C C 13. OK, IT WAS THERE CONTINUE. C TEST IF INDIRECT THEN GO DO INDIRECT FILE LOOKUP. IF(ISW)301,301,152 C C C C 14. TEST IF MORE THAN MAX FILES, IF SO RESTART THE PROGRAM. 301 IF(I-MAX-1)303,302,302 C C C C 15. FAILED BECAUSE TOO MANY FILES, GO RESTART. 302 WRITE(KDEV,322) GOTO 110 C C 15. THE FILE WAS VALID, GO PUSH "FILE NAME"==>STACK. 303 STACK(ICOUNT,1)=FFF(1) ICOUNT=ICOUNT+1 GOTO 111 C C C ..................PHASE II.......................... C 16. DONE WITH INPUT GO POP AND PRINT THE FILES IN THE STACK. 304 JCOUNT=1 C C C C 17. LOOP HERE TO POP AND TEST IF DONE. 305 IF(JCOUNT-ICOUNT)306,350,350 306 FFF(1)=STACK(JCOUNT,1) JCOUNT=JCOUNT+1 C C C C 18. GO LIST IT. C CALL IT WITH THE APPROPRIATE OUTPUT DEVICE. CALL LISTFL(FFF(1),PAGE,ALPT,LPTSW) GOTO 305 C C C 19. ALL DONE, GO EXIT TO PS/8 350 CALL EXIT C C 20. FILE NOT FOUND TELL THEM AND TRY AGAIN 113 WRITE(KDEV,213) QQQ ISW=0 GOTO 111 C C C C FORMAT STATEMENTS.......... 213 FORMAT(/,' FILE: ',A6,'.DA IS NOT ON DEVICE SYS:, TRY AGAIN') 171 FORMAT(1A6) 211 FORMAT('FILE? ',2A6) 322 FORMAT(/,' TOO MANY INPUT FILES') 212 FORMAT(' SEQUENCE NUMBERS?YES/NO:',A6) 214 FORMAT('ANSWER YES OR NO') SPNTR,\FFF END