.TITLE BATCH MESSAGE WAIT TASK .IDENT /V01.1E/ ;15-MAY-78 CHANGE TO READ AFTER PROMPT ;22-JUN-78 ADD CHECK TO SEE IF TAPE PUNCH IS ALLOCATED ; AND CANCEL MARK TIME ;28-JUN-78 ADD NOPUNCH COMMAND FOR DORKS WHO DON'T WANA USE THE PUNCH ;16-JUL-79 CHANGE TIMEOUT TO EXIT W/ SUCCESS ; ^Z STARTS CYCLE OVER AGAIN ; SHOW WHOM HAS THE PUNCH IF IT IS ALLOCATED .MCALL GMCR$,DIR$,QIOW$,EXST$S,MOUT$S,MRKT$,ASTX$S .MCALL EXIT$S,WTSE$,CMKT$ ; DIRECT ASSIGNMENTS BLANK=40 COLUN=1 TILUN=2 EFLG=20. MEFLG=21. PRI=160. BUFSIZ=10. DEL.T=180. TRYS=5 CR=15 LF=12 ; DPB'S GETMCR: GMCR$ MESOUT: QIOW$ IO.RPR,COLUN,EFLG,PRI,IOST,, MESPMT: QIOW$ IO.WVB,COLUN,EFLG,PRI,IOST,, MESIN: QIOW$ IO.RVB,COLUN,EFLG,PRI,IOST,, EXPLNE: QIOW$ IO.WVB,COLUN,EFLG,PRI,IOST,, ABOMES: QIOW$ IO.WVB,TILUN,EFLG,PRI,IOST,, SOSORY: QIOW$ IO.WVB,COLUN,EFLG,PRI,IOST,, DELAY: MRKT$ MEFLG,DEL.T,2,Z.LONG CRLF: QIOW$ IO.WVB!TF.WBT,COLUN,EFLG,PRI,IOST,, KILL: QIOW$ IO.KIL,COLUN,EFLG WAIT: WTSE$ EFLG DELAYS: MRKT$ EFLG,60.,2 TIMKIL: CMKT$ MEFLG,Z.LONG ; .NLIST BEX RETRY: .WORD 0 ;NUMBER OF RETRYS ALLOWED IOST: .BLKW 2 ;I/O STATUS BLOCK BUF: .BLKB BUFSIZ ;INPUT BUFFER PMT: .ASCII <7><12><15><7>/MWAIT--CONTINUE OR ABORT?/<7><7><12><15> PMTSIZ=.-PMT .EVEN NO: .ASCII /AB/ YES: .ASCII /CO/ MABY: .ASCII /WA/ NOPN: .ASCII /NO/ .EVEN XQIO: .WORD XQLN,XQIOSM XQIOSM: .ASCII /SY0:[1,2]QIOSYM.MSG/ XQLN=.-XQIOSM .EVEN EBUF: .BYTE 12,15 .ASCII /ACCEPTABLE COMMANDS ARE CONTINUE, NOPUNCH OR ABORT/ .BYTE 12,15 EBFSZ=.-EBUF .EVEN ABUF: .ASCII <12><12>/*** JOB ABORTED BY OPERATOR ***/<12><15> ABUFSZ=.-ABUF .EVEN SLP: .ASCII <12><12>/*** JOB RESUMED DUE TO MWAIT TIMEOUT ***/<12><15> SLPSIZ=.-SLP .EVEN Z: .ASCII <7><7> .EVEN S.BUF: .ASCII <12><15>/PUNCH ALREADY ALLOCATED BY / WHO: .BLKB 12. .ASCII / ON / .EVEN WHERE: .BLKB 2 UNIT: .BLKB 3 .ASCII <12><15>/WILL TRY AGAIN LATER/<12><15> S.BSIZ=.-S.BUF .EVEN .LIST BIN .ENABL LSB .PAGE START: DIR$ #GETMCR ;GET MESSAGE LINE MOV #GETMCR+G.MCRB,R1 ;GET START ADDRESS OF MESSAGE MOV $DSW,R2 ;GET SIZE 1$: TSTB -(R2) ;TAKE OFF A BYTE CMPB (R1)+,#BLANK ;FIND FIRST BLANK BNE 1$ ;... ; MOVB #CR,-(R1) ; MOVB #LF,-(R1) ; CMPB (R2)+,(R2)+ ; MOV R1,R3 ;+ ADD R2,R3 ;ADD '>' CHARACTER TO END OF MESSAGE MOVB #'>,(R3) ;... INC R2 ; DIR$ #MESPMT ;PUT OUT STANDARD MESSAGE TSTB IOST ; BMI 2$ ; MOV R1,MESOUT+Q.IOPL+6 ;TRANSFER START ADDRESS MOV R2,MESOUT+Q.IOPL+10 ; & BYTE COUNT 99$: MOV #TRYS,RETRY ;LOAD RETRY COUNT 100$: DIR$ #DELAY ;DELAY 180 SEC W/ AST ENTRY DIR$ #CRLF ; DIR$ #MESOUT ;OUTPUT MESSAGE TSTB IOST ;CHECK BPL 5$ ;BR IF OK 2$: MOVB IOST,R5 ;LOAD ERROR CODE CMPB IOST,#IE.EOF ;^Z TYPED? BEQ ESERR ; BR ERROR ; 5$: MOV IOST+2,R2 ; BLE 100$ ; DIR$ #TIMKIL ;CANCEL MARK TIME CMP BUF,YES ;SAY YES? BNE 15$ ;NO CALL WELL ;SEE IF PAPRE PUNCH IS FREE BCC 10$ ;SEEMS IF THAT IS TRUE DIR$ #SOSORY ;SAY IT'S NOW AVAIL BR ESERR ;TRY AGAIN LATER 10$: EXST$S #EX$SUC ;EXIT WITH SUCCESS 15$: CMP BUF,NO ;SAY NO? BNE 20$ ;NO! DIR$ #ABOMES ; BCS 2$ ; EXST$S #EX$SEV ;SEVERE EXIT 20$: CMP BUF,MABY ;THEY WANA WARNING? BNE 30$ ;NOPE EXST$S #EX$WAR ;GIVE IT TO UM 30$: CMP BUF,NOPN ;SAY NOPUNCH? BEQ 10$ ;YES DIR$ #EXPLNE ;TELL THEM ALLOWABLE COMMANDS BCS 2$ ; BR 100$ ; .PAGE ERROR: NEG R5 ; MOUT$S #XQIO,,R5 ; EXIT$S ; ESERR: DIR$ #DELAYS ; DIR$ #WAIT ; BR 99$ ; Z.LONG: DIR$ #KILL ;KILL OUTSTANDING MESSAGE & READ DEC RETRY ; BLE 50$ ; TST (SP)+ ;CLEAN STACK CLR IOST ; ASTX$S ;EXIT AST 50$: MOV #SLP,ABOMES+Q.IOPL ; MOV #SLPSIZ,ABOMES+Q.IOPL+2 ; DIR$ #ABOMES ; EXST$S #EX$SUC ;EXIT WITH SUCCESS & HOPE .DSABL LSB ;ROUTINE TO MAKE SURE PP0: ISN'T ALLOCATED BEFORE CONTINUING ON ; WELL: 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 10$ ;YUP ADD R4,R3 ;NOPE CMP R5,R3 ;END OF TABLE ? BHI 1$ ;NOPE TRY AGAIN 10$: BITB #DF.EX,D.FL(R3) ;ALLOCATED ? BEQ 7$ ;NOPE 5$: MOV D.EX(R3),R5 ;GET UTN ADDRESS MOV R5,R2 ;SAVE A COPY ADD #I.UN,R2 ;POINT TO USER NAME MOV #WHO,R4 ;POINT TO BUFFER MOV #12.,R0 ;LOAD LOOP COUNT 6$: MOVB (R2)+,(R4)+ ;LOAD USER NAME SOB R0,6$ ;TILL DONE MOV I.DN(R5),WHERE ;LOAD TERMINAL TYPE MOVB I.TT(R5),R1 ;LOAD UNIT NUMBER CLR R2 ;CLEAR FLAG MOV #UNIT,R0 ;POINT TO BUFFER CALL $CBOMG ;CONVERT TO ASCII MOVB #':,(R0)+ ;PUT IN COLON SEC ;SET CARRY BIT 7$: RETURN ; .END START