.TITLE RESET .IDENT /V0.1.2/ .SBTTL TITLE PAGE ; ; Written: 14 Feburary 79, -0.0.0-, Bruce C. Wright ; Modified: ; Verified: ; Modified: ; 10 August 82, -0.1.0-, Gerald P. Van Trieste, Jr. ; RCA Corp. Cherry Hill NJ 08358 ; RSX-11M V4.0 support for lower case messages ; and change in system data structures ; ; Modified: ; 1 November 82 -0.1.1-, Gerald P. Van Trieste, Jr. ; RCA Corp Cherry Hill NJ 08358 ; Reset XON (s1.cts) in terminal ucb and do a ; io.wbt to recycle driver ; ; Implemented for Northern Telecom (NSSD) 10 December 84 - T.S. Frank ; ; Modified 10 December 84 by T.S. Frank ; Change(s): ; 1. Added call to switch into system state - $swstk ; .SBTTL MACRO CALLS .MCALL ALUN$S,GMCR$,DIR$,QIOW$,EXIT$S,DCBDF$,UCBDF$ ; .MACRO ERROR STRING .NCHR N, JSR R0,ERROR .WORD N .ASCII "STRING" .EVEN .ENDM ; .SBTTL OFFSET DEFINITIONS ; DCBDF$ UCBDF$ ,,TTDEF,SYSDEF ; ; .SBTTL MAIN LINE CODE ; RESET:: DIR$ #GMCR ; GET MCR COMMAND LINE BCC 1$ ; CONTINUE IF OK ERROR 1$: MOV @#$DSW,R0 ; GET LENGTH OF COMMAND LINE ADD #GMCR+G.MCRB,R0 ; GET TERMINATING CHARACTER 10$: MOV #1,R1 ; SET .TPARS OPTION WORD ; THIS MEANS THAT KEYWORDS CANNOT ; BE ABBREVIATED AND BLANKS ARE ; SIGNIFICANT MOV #KEYTBL,R2 ; GET ADDR OF KEYWORD TABLE MOV @#$DSW,R3 ; SET CHARACTER COUNT MOV #GMCR+G.MCRB,R4 ; GET ADDR OF DATA STRING MOV #START,R5 ; GET ADDR OF FIRST STATE CALL .TPARS ; PARSE STRING BCC 20$ ; CONTINUE IF OK 15$: ERROR 20$: CMP DEV,#"TT ; DEVICE A TT? BNE 15$ ; NO- REPORT ERROR CMP UNIT,#77 ; UNIT # OUT OF RANGE? BLOS 21$ ; NO- CONTINUE ERROR 21$: ALUN$S #2,#"TT,UNIT ; ASSIGN DEVICE TO LUN #2 BCC 22$ ; CONTINUE IF NO ERROR ERROR 22$: MOV UNIT,R2 ; COPY UNIT NUMBER CALL CLRCTS ; CLEAR S1.CTS BIT (CLEAR TO SEND) DIR$ #N1WBT ; BROADCAST BLANK LINE TO TERMINAL BCC 24$ ; CONTINUE IF OK ERROR 24$: EXIT$S ; TERMINATE TASK CLEANLY .SBTTL COMMAND LINE PARSE TABLES .MCALL ISTAT$,STATE$,TRAN$ ; ; INITIALIZE STATE TABLES ; ISTAT$ STAT1,KEYTBL ; ; SKIP OVER COMMAND NAME ; STATE$ START TRAN$ $RAD50 ; STATE$ TRAN$ $BLANK ; ; READ DEVICE AND UNIT NUMBER ; STATE$ TRAN$ $ANY,,SETDV1 ; STATE$ TRAN$ $ANY,,SETDV2 ; STATE$ TRAN$ $NUMBR,DEV1,SETUNT TRAN$ $LAMDA ; STATE$ DEV1 TRAN$ ': ; ; SKIP TO NEXT NON-BLANK ; STATE$ TRAN$ $BLANK,EOS1 TRAN$ $LAMDA ; STATE$ EOS1 TRAN$ $EOS,$EXIT ; STATE$ ; .SBTTL COMMAND LINE PARSE ACTION ROUTINES ; ; GET DEVICE NAME CHARACTER 1 ; SETDV1: MOVB .PCHAR,DEV RETURN ; ; GET DEVICE NAME CHARACTER 2 ; SETDV2: MOVB .PCHAR,DEV+1 RETURN ; ; GET UNIT NUMBER ; SETUNT: MOV .PNUMB,UNIT RETURN .SBTTL SUBROUTINE TO PRINT ERROR MESSAGES ; ; THIS SUBROUTINE IS INVOKED BY THE ERROR MACRO. IT PRINTS THE ARGUMENT ; GENERATED BY THE "ERROR" MACRO ON THE USERS TERMINAL. ; ; CALLING SEQUENCE: ; ; JSR R0,ERROR ; .WORD STRINGLENGTH ; .ASCII "STRING" ; ; THE SUBROUTINE WILL NEVER RETURN TO THE CALLER ; ERROR: MOV (R0)+,QIO+Q.IOPL+2 ; MOVE MSG LENGTH TO QIO CALL MOV R0,QIO+Q.IOPL ; SET MSG ADDR DIR$ #QIO ; PRINT MESSAGE EXIT$S ; AND TERMINATE TASK .SBTTL SUBROUTINE TO CLEAR XON IN UCB ; ; THIS ROUTINE WILL CLEAR S1.CTS BIT IN THE TERMINAL UCB ; SAVE:: .BLKW 2 ; TEMPORARY SAVE LOCATION CLRCTS: CALL $SWSTK,60$ ; GO INTO SYSTEM STATE MOV $DEVHD,R0 ;;; GET FIRST DCB 10$: CMP #"TT,D.NAM(R0) ;;; IS IT A TERMINAL? BNE 50$ ;;; NO CMPB R2,D.UNIT+1(R0) ;;; IN THIS DCB? BGT 50$ ;;; NO- NEXT DCB MOVB D.UNIT(R0),R3 ;;; LOAD R3 WITH LOWEST UNIT # MOV D.UCB(R0),R1 ;;; YES- GET FIRST UCB 20$: CMPB R2,R3 ;;; RIGHT UCB? BEQ 30$ ;;; YES- INC R3 ;;; NO- UPDATE OUR UNIT NUMBER BR 40$ ;;; AND GET ANOTHER UCB 30$: MOV U.TSTA(R1),SAVE ;;; SAVE BEFORE STATUS WORD BIC #S1.CTS,U.TSTA(R1) ;;; CLEAR XON MOV U.TSTA(R1),SAVE+2 ;;; SAVE AFTER STATUS WORD RETURN ;;; EXIT FROM SYSTEM STATE 40$: ADD D.UCBL(R0),R1 ;;; GET NEXT UCB ADDR CMP R0,U.DCB(R1) ;;; SAME DCB? BEQ 20$ ;;; YES- 50$: MOV D.LNK(R0),R0 ;;; NO- GET NEXT DCB BNE 10$ ;;; AND TRY AGAIN ERROR RETURN ;;; EXIT SYSTEM STATE 60$: RETURN ;;; RETURN TO CALLER .SBTTL DATA AREA ; ; RESULTS FROM PARSE STRING ; DEV: .ASCII / / ; ASCII DEVICE NAME UNIT: .WORD 0 ; UNIT NUMBER ; ; MISC DATA AREAS ; IOST: .WORD 0,0 ; I/O STATUS BLOCK ; NULL: .WORD 0 ; NULL STRING FOR IO.WBT NULLEN = .-NULL ; ; DIRECTIVE PARAMETER BLOCKS ; QIO: QIOW$ IO.WVB,1,1,,IOST,,<,,40> N1WBT: QIOW$ IO.WBT,2,2,,IOST,, GMCR: GMCR$ .END RESET