.TITLE SSET .IDENT /RICE01/ .MCALL $QIO,$QIOW,$SSDEF,$ASSIGN,$CREMBX,$GETDVI .mcall $DVIDEF,$DCDEF,$DEVDEF $DVIDEF ; Define identifier codes $DCDEF ; Define characteristics $DEVDEF ; Define devices .PSECT STATSC,NOEXE,GBL,OVR,pic,shr,long ISTOP: .WORD 0 ; None zero, stops analysis ISTAT: .WORD -2 ; Number of bytes available BUFF: .BLKB 82. ; Input data array .psect $VARS,NOEXE,CON,LCL,WRT MBBUFF: .BLKB 12 TERM: .LONG 0,-1 ; All are terminators STAT: .BLKW 4 TTNAM: .ASCID /TT:/ MBNAME: .ASCID /INPUT_MAILBOX/ .EVEN TTCHAN: .LONG 0 MBCHAN: .LONG 0 ; Will be mailbox chan number BUSY: .BYTE 0 PROMPT: .BYTE ^O15,^O12 .ASCII /#/ CC: .BYTE 32,0,0,0 CHRMSK: .LONG 0,^XFFFFFFF7 ; Short terminator mask TTSTAT: .word 4,DVI$_DEVCLASS .address DEVCL .long 0,0 DEVCL: .long 0,0 ; ; Fortran entry to set up I/O ; .ENTRY SSET,^M TSTB BUSY ; Busy ? BNEQ XIT ; Yes ? BSBW TTEST ; TT set up ? SSET1: CLRW ISTAT ; Set buffer empty INCB BUSY ; And input busy ; Output initial carriage return $QIO_S CHAN=TTCHAN,FUNC=#IO$_WRITEVBLK!IO$M_PURGE,- P1=PROMPT,P2=#1 ; Set up to receive AST $QIOW_S CHAN=MBCHAN,FUNC=#IO$_SETMODE!IO$M_WRTATTN,- P1=CTCAST,P3=#3 XIT: RET ; ; Ast entry after QIO ; INAST: .WORD ^M CLRB BUSY MOVW STAT+2,ISTAT BNEQ 20$ ; Character string ? ADDW STAT+6,ISTAT 20$: CMPB BUFF,#3 ; Cntrl C ? 30$: RET ; ; AST entry after control C ; CTCAST: .WORD ^M ; Ast entry $QIOW_S CHAN=MBCHAN,FUNC=#IO$_READVBLK!IO$M_NOW,- P1=MBBUFF,P2=#10 $QIO_S CHAN=TTCHAN,- FUNC=#IO$_READPROMPT!IO$M_TRMNOECHO,IOSB=STAT,- ASTADR=INAST,- P1=BUFF,P2=#80,- P3=#120,P4=#TERM,- P5=#PROMPT,P6=#3, ; ; Read with prompt, 120 sec time limit, any control char terminates ; RET ; ; Control character AST entry ; ; ; CALL MSG('message to be typed') ; .ENTRY MSG,^M<> BSBW TTEST ; Check if TT: set up 10$: TSTB (AP) ; Param available ? BLEQ 20$ ; No MOVL 4(AP),R0 ; Get descriptor MOVZWL (R0),R1 ; Byte count BEQL 20$ ; None ? MOVL 4(R0),R0 ; Location $QIO_S CHAN=TTCHAN,FUNC=#IO$_WRITEVBLK,- P1=(R0),P2=R1,P4=#CC 20$: RET ; ; This section tests if the devices are set up ; TTEST: TSTL TTCHAN ; Already set up ? BNEQ 10$ ; Yes ? TSTL DEVCL ; Device characteristics set up BNEQ 20$ ; Set up ? $GETDVI_S DEVNAM=TTNAM,ITMLST=TTSTAT CMPL DEVCL,#DC$_TERM ; Check if device is terminal BNEQ 20$ ; No ? $CREMBX_S CHAN=MBCHAN,PROMSK=#^XFF00,LOGNAM=MBNAME $ASSIGN_S DEVNAM=TTNAM,CHAN=TTCHAN,MBXNAM=MBNAME 10$: RSB 20$: RET .END