.TITLE PAG .IDENT /MRH001/ .MCALL FINIT$,FSRSZ$,QIOW$,DIR$,CALL,RETURN .MCALL OPEN$W,OPEN$,OPEN$R,GET$,PUT$,CLOSE$ .MCALL CSI$,CSI$1,CSI$2,GMCR$,EXIT$S,GTIM$ .MCALL GCML$,RCML$,GCMLB$,PRINT$ .MCALL FDBDF$,FDAT$A,FDRC$A,FDOP$A,FDBF$A .MCALL FDOP$R,NMBLK$ ;+ ; ; PAG PAGINATE LISTING PROGRAM ; ; PROVIDES LISTINGS OF PROGRAMS ETC ON A PAGINATED BASIS ; HEADER LINES CONTAIN DEVICE, UIC NAME ETC AND DATE TIME ; ; LISTING A MAX OF 55 LINES/PAGE SO DONT PRINT OVER FOLD ; ; ;CALLING SEQUENCE ; ;MCR>PAG[ELIST] DEV:[UIC]NAME.TYPE ; ;FOR OBVIOUS REASONS, NO WILD CARDS ARE SUPPORTED ; ; ; F. BORGER ; MICHAEL REESE MEDICAL CENTER ; ; FEB 27 1980 ; ; ; EVF'S AND LUNS ; OUTLUN =1 ;OUTPUT FILE LUN OUTEVF =1 ;AND EVF ; TILUN =2 ;TERMINAL IO LUN TIEVF =2 ;AND EVF ; TIFLUN =3 ;TERMINAL "FILE" LUN TIFEVF =3 ;AND EVF ; INFLUN =4 ;THE FIRST IN-FILE LUN INFEVF =4 ;AND EVF .SBTTL MAIN LINE CODE START: FINIT$ ;SET UP FOR FILE IO FOR FILE I/O JSR PC,.RDFUI ;GET UIC I'M RUNNING UNDER MOV R1,UIC ;SAVE THE UIC (BINARY) ; GCML$ #GCBLK ;GET THE COMMAND LINE CMPB #GE.EOF,GCBLK+G.ERR ;END OF FILE ON COMMAND INPUT ? BNE 5$ ;NO EXIT$S ;YES, QUIT 5$: TSTB GCBLK+G.ERR ;ANY OTHER ERRORS ? BPL 6$ ;NO DIR$ #ERPRI ;REPORT COMMAND LINE FILE ERROR DIR$ #CMDERR EXIT$S ;FILL IN POINTERS IN CSI BLOCK 6$: MOV GCBLK+G.CMLD+2,CSBLK+C.CMLD+2 MOV GCBLK+G.CMLD,CSBLK+C.CMLD CSI$1 #CSBLK ;AND PARSE IT CSI$2 #CSBLK,OUTPUT ;GET NAME OF FILE TO BE LISTED BITB #CS.DIF,C.STAT(R0) ;DID THEY SPEC A UIC ? BEQ 22$ ;NO MOV #CSBLK+C.DIRD,R2 ;YES POINT TO DESCRIPTOR MOV #UIC,R3 ;PLACE TO STORE IT JSR PC,.ASCPP ;CONVERT STRING TO OCTAL NUMBER 22$: BITB #CS.NMF,C.STAT(R0) ;IS A NAME GIVEN? BNE 4$ ;YES DIR$ #ERPRI DIR$ #NAMERR EXIT$S 4$: FDOP$R #INFDB,,#CSBLK+C.DSDS ;FILL IN FILE NAME TO BE LISTED OPEN$R #INFDB ;AND OPEN IT BCC 44$ ;BR IF OK DIR$ #ERPRI ;ELSE REPORT PROBLEM DIR$ #NAMERR EXIT$S 44$: ;CHANGE OUTPUT FILE TYPE TO "LST MOV CSBLK+C.DSDS+10,R1 ;GET LENGTH OF NAME STRING MOV CSBLK+C.DSDS+12,R2 ;AND START 441$: CMPB (R2)+,#'. ;FOUND THE "." IN THE FILE NAME BEQ 442$ ;YES SOB R1,441$ ;NO, GET ANOTHER ;HAD TO HAVE . TO OPEN INPUT FILE SO ASSUME OK 442$: MOVB #'L,(R2)+ ;OVERWRITE "BAS" WITH "LST" MOVB #'S,(R2)+ MOVB #'T,(R2)+ FDOP$R #OUTFDB,,#CSBLK+C.DSDS ;FILL IN FILENAME OF OUTPUT FILE OPEN$W #OUTFDB ;AND OPEN IT BCC 2$ ;BR IF OPEN WENT DIR$ #ERPRI ;TELL HIM FILE PROBLEMS DIR$ #FILERR JMP DIE ;AND CLOSE INPUT, THEN EXIT ; .SBTTL TRANSFER TO LISTING FILE 2$: DIR$ #GETTIM ;GET DATE AND TIME MOV #1,PAGE ;SET PAGE # TO 1 MOVB INFDB+F.FNB+N.UNIT,DEVNUM ;FILL IN DEVICE UNIT NUMBER IN BLOCK REGO: MOV #EDBLK,R0 ;SET FOR EDMSG MOV #HDRME0,R1 ;ADDRESS OF INPUT LINE MOV #HDRBF0,R2 ;ADDRESS OF BUFFER JSR PC,$EDMSG ;FILL IN NAME MOV #HDRME1,R1 ;ADDRESS OF BUFFER MOV #PAGE,R2 ;ADDRESS OF BUFFER JSR PC,$EDMSG ;FILL IN PAGE # SUB #EDBLK,R0 ;GET LENGTH OF XFER MOV R0,OUTFDB+F.NRBD ;TELL SYS LENGTH PUT$ #OUTFDB,#EDBLK ;PUT THE FIRST HEADER LINE MOV #EDBLK,R0 ;ADDRESS OF OUTPUT BUFFER MOV #EDMES0,R1 ;ADDRESS OF INPUT LINE MOV #EDBUF0,R2 ;ADDRESS OF DATA BUFFER JSR PC,$EDMSG ;DO DEVICE AND UIC MOV #EDMES1,R1 ;POINT TO 2ND DECODE LINE MOV #EDBUF1,R2 ;AND 2ND DATA BUFFER JSR PC,$EDMSG ;DO NAME.TYPE;VERSION MOV #EDMES2,R1 ;POINT TO LAST DECODE LINE MOV #EDBUF2,R2 ;AND LAST DATA BUFFER JSR PC,$EDMSG ;AND DO DATE, TIME, PAGE # SUB #EDBLK,R0 ;SUB START OF RESULTANT HEADER LINE CLR R5 ;CLEAR LINES/PAGE COUNTER MOV R0,OUTFDB+F.NRBD ;SET LENGTH OF VARIABLE LINE PUT$ #OUTFDB,#EDBLK ;PUT OUT VARIABLE HEADER LINE IN: GET$ #INFDB,#BUF1,#132. ;GET A RECORD CMPB INFDB+F.ERR,#IE.EOF ;END OF FILE BEQ DONE ;YES TST INFDB+F.ERR ;NO BPL 333$ ;IF PLUS OK DIR$ #ERPRI DIR$ #FILERR JMP DONE ;AND EXIT 333$: MOV INFDB+F.NRBD,OUTFDB+F.NRBD ;TRANSFER SIZE OF LINE PUT$ #OUTFDB,#BUF1 ;AND PUT THE RECORD BCC 334$ ;BR IF OK DIR$ #ERPRI DIR$ #FILERR JMP DONE ;AND EXIT 334$: INC R5 ;COUNT A LINE CMP R5,#54. ;NEAR END OF PAGE ? BLT IN ;NO, JUST DO NEXT LINE CLR R5 ;YES, CLEAR COUNTER INC PAGE ;INC PAGE NUMBER FOR PRINTOUT BR REGO ;PRINT HEADER LINE AGAIN ; ; DONE: ;NORMAL EXIT PRINT$ #OUTFDB ;SPOOL THE FILE TO LP DIE: CLOSE$ #INFDB ;CLOSE INPUT FILE EXIT$S ;AND EXIT .SBTTL FDB'S .SBTTL INPUT FDB ; ; ; THE INPUT FILE ; INFDB: FDBDF$ ;DEFINE FDB BLOCK FDAT$A R.VAR,FD.CR ;FILE ATTRIBUTES FDRC$A ,BUF1,132. ;RECORD FDOP$A INFLUN ;FILE NAME FDBF$A INFEVF ;EVF ; ; ; ; .SBTTL OUTPUT FDB ; ; ; THE OUTPUT FDB ; ; OUTFDB: FDBDF$ ;DEFINE FDB BLOCK FDAT$A R.VAR,FD.CR ;FILE ATTRIBUTES FDRC$A ,BUF1,132. ;RECORD FDOP$A OUTLUN ;FILE NAME FDBF$A OUTEVF ;EVF ; ; .SBTTL TERMINAL FDB ;;;;; ; ; THE TERMINAL'S FDB ; TIFDB: FDBDF$ ;DEFINE FDB BLOCK FDAT$A R.VAR,FD.CR ;FILES ATTRIBUTES FDRC$A ,BUF1,80. ;RECORD FDOP$A TIFLUN,TIDSDS ;FILE NAME FDBF$A TIFEVF ;FILE EVF ; TIDSDS: .WORD LTI,TI .WORD 0,0 .WORD 0,0 ; TI: .ASCII /TI:/ LTI=.-TI .EVEN .SBTTL ERROR MESSAGES ; ERPRI: QIOW$ IO.WVB,TILUN,TIEVF,,,, PRIMES: .ASCII /***PAG---/ PRILEN=.-PRIMES .EVEN NAMERR: QIOW$ IO.WVB,TILUN,TIEVF,,,, NAMMES: .ASCII /BAD FILE NAME***/ NAMLEN=.-NAMMES .EVEN FILERR: QIOW$ IO.WVB,TILUN,TIEVF,,,, FILMES: .ASCII /ERROR ON FILE IO***/ FILLEN=.-FILMES .EVEN CMDERR: QIOW$ IO.WVB,TILUN,TIEVF,,,, CMDMES: .ASCII /ERROR ON INDIRECT COMMAND FILE***/ CMDLEN=.-CMDMES .EVEN .SBTTL MISCELLANEOUS .SBTTL CSI CONTROL BLOCK ; CSI$ CSBLK: .BLKB C.SIZE .EVEN ; .SBTTL GCML CONTROL BLOCK ; GCLUN =TILUN GCBLK: GCMLB$ 2,RNP,,GCLUN ; .SBTTL OTHER THINGS ; ; EDLEN: .WORD 0 ;LENGTH OF HEADER LINE ; GETTIM: GTIM$ EDBUF2 ;GET TIME IN 2ND EDMSG BUFFER ; BUF1: .BLKW 132. ;THE RECORD BUFFER ; FSRSZ$ 3 ;MAKE ROOM FOR FILE STORAGE .SBTTL EDMSG DATA ; HDRME0: .ASCII /%F%NMICHAEL REESE MEDICAL CENTER - - - / .ASCIZ /DEPARTMENT OF MEDICAL PHYSICS COMPUTER%25S%X/ .EVEN HDRBF0=INFDB+F.FNB+N.FNAM HDRME1: .ASCIZ / PAGE %D/ .EVEN EDMES0: .ASCII /%NLISTING OF %2A%M:/ ;DEVICE AND NUMBER .ASCIZ /[%B,%B]/ ;UIC .EVEN EDBUF0: .WORD INFDB+F.FNB+N.DVNM ;DEVICE STRING DEVNUM: .WORD 0 ;DEVICE NUMBER .WORD GUIC ;GROUP UIC .WORD MUIC ;MEMBER UIC ; UIC: ;START CODE STORES UIC HERE MUIC: .BYTE 0 ;SAVE MEMBER UIC HERE GUIC: .BYTE 0 ;SAVE GROUP UIC ; EDMES1: .ASCIZ /%X%4S/ ;NAME,TYPE VERSION .EVEN EDBUF1=INFDB+F.FNB+N.FNAM ;POINT HIM TO INPUT FDB ; ; EDMES2: .ASCIZ /ON %Y AT %3Z PAGE %D%2N/ ;DATE,TIME PAGE # .EVEN EDBUF2: .BLKW 6 ;ROOM FOR DATE AND TIME PAGE: .BLKW 2 ;DO TIME, THEN SET PAGE # TO WHATEVER ; ; ;NOW THE OUTPUT BUFFER ; EDBLK: .BLKB 150. ;ONE LINE OF OUTPUT .END START