.TITLE LPT PAPER TAPE LABEL .IDENT /V02.1B/ ;19-JUL-78 ; THIS PROGRAM WRITES AN MCR COMMAND LINE TO PAPER TAPE ; IN MAN READABLE 5 X 7 DOT MATRIX FORM ; ; MODIFIED: 08-NOV-77 ; ; RGR01 -- TO USE EXST$S (EXIT WITH STATUS) ; ; RGR02 -- TO USE SWITCH (/TI) TO PUNCH TIME AND DATE ; ; RGR03 -- TO CHECK ALLOCATION OF PUNCH ; ;MACRO CALLS .MCALL DIR$,QIOW$,GMCR$,EXST$S ;LUNS TILUN=1 PPLUN=2 ; ;DPB'S ; GETMCR: GMCR$ ATT: QIOW$ IO.ATT,PPLUN,2,50,STAT DET: QIOW$ IO.DET,PPLUN,2,50,STAT ATTER: QIOW$ IO.WLB,TILUN,3,50,,, DETER: QIOW$ IO.WLB,TILUN,3,50,,, ALOER: QIOW$ IO.WLB,TILUN,3,50,,, ;*RGR03 PUNCH: QIOW$ IO.WLB,PPLUN,4,50,,,<0,7,0> ; ;ERROR MESSAGES ; .NLIST BEX NOAT: .ASCII 'LPT -- PUNCH IS BUSY' NOATS=.-NOAT NODT: .ASCII 'LPT -- COULD NOT RELEASE PUNCH - GET HELP!' NODTS=.-NODT NOAL: .ASCII 'LPT -- PUNCH IS NOT ALLOCATED' ;*RGR03 NOALS=.-NOAL ;*RGR03 .EVEN ; ; IO STATUS BLOCK ; STAT: .BLKW 2 EREXIT: .WORD EX$SUC ;*RGR01 FLAG: .WORD 0 ;*RGR02 TILINK: .WORD 1,TIMBUF ;FORTRAN LINK ;*RGR02 DTLINK: .WORD 1,DTEBUF ;FORTRAN LINK ;*RGR02 BUF: .ASCII / / ;START OF TIME-DATE BUF ;*RGR02 TIMBUF: .ASCII /XX:XX:XX / ;TIME ;*RGR02 DTEBUF: .ASCII /XX-XXX-XX / ;DATE PLUS EXTRA LEADER ;*RGR02 BUFSIZ= .-BUF ;NUMBER OF CHARACTERS ;*RGR02 .EVEN ;*RGR02 START: DIR$ #GETMCR ;REQUEST COMMAND LINE MOV $DSW,R0 ;PICK UP CHAR COUNT SUB #4,R0 ;TAKE OUT "LPT" BEQ QUIT BMI QUIT MOV #GETMCR+G.MCRB+4,R1 ;POINT TO CHARACTERS DIR$ #ATT ;ATTATCH PUNCH TSTB STAT ;DID IT WORK? BPL 1$ ;YES DIR$ #ATTER ;NO -- TELL USER MOV #EX$SEV,EREXIT ;FATAL ERROR PP: BUSY BR QUIT 1$: JSR PC,ALLOC ;? IS PUNCH ALLOCATED BY ME ;*RGR03 BCC 2$ ;BR IF SO ;*RGR03 DIR$ #ALOER ;NO -- TELL USER ;*RGR03 MOV #EX$SEV,EREXIT ;FATAL ERROR PP: NOT ALLOCATED ;*RGR03 BR QUIT ;CONTINUE ;*RGR03 2$: MOV R1,R3 ;SAVE POINTER ;*RGR02 CMPB (R1)+,#'/ ;CHECK STRING ? (/TI) ;*RGR02 BNE 3$ ;BR IF NOT ;*RGR02 CMPB (R1)+,#'T ;NEXT ;*RGR02 BNE 3$ ;BR IF NOT ;*RGR02 CMPB (R1)+,#'I ;NEXT (LAST) ;*RGR02 BNE 3$ ;BR IF NOT ;*RGR02 INC FLAG ;SET TIME-DATE FLAG ;*RGR02 SUB #3,R0 ;REMOVE /TI FROM CHAR COUNT ;*RGR02 BEQ 5$ ;BR IF ONLY TIME DATE ;*RGR02 BMI 5$ ;BR IF MESSED UP ;*RGR02 BR 4$ ;CONTINUE ;*RGR02 3$: MOV R3,R1 ;RESTORE R1 (NO /TI SWITCH) ;*RGR02 4$: MOVB (R1)+,R3 ;GET CHAR AND FIND IT IN TABLE SUB #40,R3 MUL #8.,R3 ADD #TRANS,R3 ;SET UP PUNCH BUFFER ADDRESS MOV R3,PUNCH+Q.IOPL DIR$ #PUNCH ;PUNCH CHARACTER SOB R0,2$ 5$: TST FLAG ;? DO THEY WANT THE TIME&DATE ;*RGR02 BEQ 6$ ;BR IF NOT (OR ALREADY DONE) ;*RGR02 CLR FLAG ;DON'T WANT TO LOOP ;*RGR02 MOV #DTLINK,R5 ;POINT TO LIST FOR FORTRAN ;*RGR02 JSR PC,DATE ;GET DATE IN ASCII ;*RGR02 MOV #TILINK,R5 ;POINT TO TIME LIST ;*RGR02 JSR PC,TIME ;GET TIME IN ASCII ;*RGR02 MOV #BUF,R1 ;POINT TO NEW STRING TO PUNCH ;*RGR02 MOV #BUFSIZ,R0 ;GET SIZE OF STRING ;*RGR02 BR 4$ ;GO PUNCH IT ;*RGR02 6$: DIR$ #DET ;DETATCH PUNCH TSTB STAT ;DID IT WORK? BPL QUIT MOV #EX$SEV,EREXIT ;FATAL ERROR CAN'T DETACH PP: ;*RGR01 DIR$ #DETER ;PRINT ERROR QUIT: EXST$S EREXIT ;EXIT WITH STATUS ;*RGR01 .PAGE .SBTTL ALLOC IS PUNCH ALLOCATED ;18-JUL-78 ; ; RGR03 ; ALLOC: MOV R0,-(SP) ;SAVE R0 MOV R1,-(SP) ;SAVE R1 MOV .DVTRM,R3 ;GET START OF REMOVABLE DEVICE TABLE MOV .DTESZ,R4 ;GET DEVICE TABLE ENTRY SIZE MOV .DVTEND,R5 ;GET END OF TABLE ADDRESS MOV #"PP,R2 ;DEVICE NAME WE WANT 1$: CMP @D.PU(R3),R2 ;THIS THE DEVICE TABLE ENTRY FOR PP0: ? BEQ 5$ ;YUP ADD R4,R3 ;NOPE CMP R5,R3 ;END OF TABLE ? BHI 1$ ;NOPE TRY AGAIN 5$: BITB #DF.EX,D.FL(R3) ;ALLOCATED ? BNE 10$ ;YES BR 15$ ;NOPE 10$: MOV .CRTSK,R0 ;GET OUR ATL NODE MOV A.TI(R0),R0 ;GET OUR TI PUD POINTER MOV D.PU(R3),R3 ;GET PUD ADDRESS FOR PP0: MOV U.AF(R3),R3 ;GET ATTATCH PUD POINTER CMP R0,R3 ;SAME TI? BEQ 16$ ;YES IT'S OK 15$: SEC ;BAD RETURN 16$: MOV (SP)+,R1 ;RESTORE R1 MOV (SP)+,R0 ;RESTORE R0 RETURN ;GO AWAY TRANS: .BYTE 000,000,000,000,000,000,000,000 ;SP .BYTE 000,000,137,000,000,000,000,000 ;! .BYTE 000,007,000,007,000,000,000,000 ;" .BYTE 024,177,024,177,024,000,000,000 ;# .BYTE 044,052,177,052,022,000,000,000 ;$ .BYTE 043,023,010,144,142,000,000,000 ;% .BYTE 066,111,111,066,110,000,000,000 ;& .BYTE 000,000,004,003,000,000,000,000 ;' .BYTE 000,000,034,042,101,000,000,000 ;( .BYTE 101,042,034,000,000,000,000,000 ;) .BYTE 042,024,177,024,042,000,000,000 ;* .BYTE 010,010,076,010,010,000,000,000 ;+ .BYTE 000,000,140,000,000,000,000,000 ;, .BYTE 010,010,010,010,010,000,000,000 ;- .BYTE 000,000,100,000,000,000,000,000 ;. .BYTE 040,020,010,004,002,000,000,000 ;/ .BYTE 076,121,111,105,076,000,000,000 ;0 .BYTE 000,102,177,100,000,000,000,000 ;1 .BYTE 142,121,111,111,106,000,000,000 ;2 .BYTE 041,101,111,115,073,000,000,000 ;3 .BYTE 030,024,022,177,020,000,000,000 ;4 .BYTE 057,111,111,111,061,000,000,000 ;5 .BYTE 074,112,111,111,061,000,000,000 ;6 .BYTE 001,141,021,011,007,000,000,000 ;7 .BYTE 066,111,111,111,066,000,000,000 ;8 .BYTE 106,111,111,051,036,000,000,000 ;9 .BYTE 000,000,042,000,000,000,000,000 ;: .BYTE 000,000,142,000,000,000,000,000 ;; .BYTE 000,010,024,042,000,000,000,000 ;< .BYTE 024,024,024,024,024,000,000,000 ;= .BYTE 000,042,024,010,000,000,000,000 ;> .BYTE 002,001,131,006,000,000,000,000 ;? .BYTE 076,101,135,111,116,000,000,000 ;@ .BYTE 176,011,011,011,176,000,000,000 ;A .BYTE 177,111,111,111,066,000,000,000 ;B .BYTE 076,101,101,101,042,000,000,000 ;C .BYTE 177,101,101,101,076,000,000,000 ;D .BYTE 177,111,111,111,101,000,000,000 ;E .BYTE 177,011,011,011,001,000,000,000 ;F .BYTE 076,101,101,121,062,000,000,000 ;G .BYTE 177,010,010,010,177,000,000,000 ;H .BYTE 000,101,177,101,000,000,000,000 ;I .BYTE 040,100,100,100,077,000,000,000 ;J .BYTE 177,010,024,042,101,000,000,000 ;K .BYTE 177,100,100,100,100,000,000,000 ;L .BYTE 177,002,014,002,177,000,000,000 ;M .BYTE 177,004,010,020,177,000,000,000 ;N .BYTE 076,101,101,101,076,000,000,000 ;O .BYTE 177,011,011,011,006,000,000,000 ;P .BYTE 076,101,121,041,136,000,000,000 ;Q .BYTE 177,011,031,051,106,000,000,000 ;R .BYTE 046,111,111,111,062,000,000,000 ;S .BYTE 001,001,177,001,001,000,000,000 ;T .BYTE 077,100,100,100,077,000,000,000 ;U .BYTE 017,060,100,060,017,000,000,000 ;V .BYTE 177,040,030,040,177,000,000,000 ;W .BYTE 143,024,010,024,143,000,000,000 ;X .BYTE 003,004,170,004,003,000,000,000 ;Y .BYTE 141,121,111,105,103,000,000,000 ;Z .BYTE 000,000,177,101,101,000,000,000 ;[ .BYTE 002,004,010,020,040,000,000,000 ;BACKSLASH .BYTE 101,101,177,000,000,000,000,000 ;T .BYTE 010,004,002,004,010,000,000,000 ;^ .BYTE 100,100,100,100,100,000,000,000 ;UNDERLINE .END START