.TITLE EXIT - PROGRAM EXIT FOR TECOIO .IDENT "X0211" ; ; COPYRIGHT (C) 1976 BY DIGITAL EQUIPMENT CORPORATION, ; MAYNARD, MASSACHUSETTS ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE IN- ; CLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE ; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH ; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE ; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DIGITAL. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITH- ; OUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ; DIGITAL EQUIPMENT CORPORATION. ; ; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR ; THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS ; NOT SUPPLIED BY DIGITAL. ; ; ANDREW C. GOLDSTEIN 3-APR-79 18:57 ; MARK H. BRAMHALL 27-MAR-79 21:02 ; BRUCE M. BERNSTEIN 8-JAN-80 16:49 ; " 11-FEB-80 11:00 ; " 3-Jun-80 8:48 .MCALL EXIT$S,DIR$,GLUN$C,GTSK$C,STSE$S,QIOW$C EX$ERR = 2 ; EXIT WITH ERROR STATUS EX$SUC = 1 ; EXIT WITH SUCCESS STATUS .SBTTL EXIT ROUTINES ;+ ; ; *** - EXERR EXIT WITH ERROR STATUS ; ; THIS ENTRY IS CALLED BY TECO WHEN IT IS EXITING DUE TO AN ERROR AND ; THE EXIT-ON-ERROR BIT IN ETYPE IS SET. ; ; *** - GEXIT EXIT AND GO ; ; *** - TEXIT EXIT ; ; THESE TWO ENTRIES ARE CALLED BY TECO TO EXIT. "TEXIT" SIMPLY EXITS ; TO THE MONITOR; "GEXIT" IS AN EXIT AND GO. UNDER RSX11M V3.2, IT ; CLEANS UP TECO AND SPAWNS MCR WITH THE GIVEN COMMAND LINE. NOTE ; THAT THE CONSTRUCT EG$$ STILL DOES NOTHING. ; ; NO INPUTS, NO OUTPUTS, NO RETURN. ; ;- .PSECT CODE,RO .ENABL LSB EXERR:: MOV #EX$ERR,-(SP) ; SET FOR EXIT WITH ERROR STATUS BR 10$ GEXIT:: TST NFLG(R5) ; SPECIAL FUNCTION CALL? BMI 3$ ; IF SO, DON'T CLOSE JSR PC,15$ ; CALL CLOSING STUFF 3$: MOV FILBUF(R5),R0 ; GET STRING ADDRESS MOV R0,R4 ; HOLD FOR LENGTH 5$: TSTB (R4)+ ; LOOK FOR EOS BNE 5$ ; LOOP UNTIL DONE SUB R0,R4 ; FORM LENGTH+1 DEC R4 ; MAKE LENGTH BEQ 30$ ; IF NO STRING, FORGET IT CLR -(SP) ; CLEAR OFF THE TERMINAL NUMBER MOV R4,-(SP) ; LOAD CHARACTER COUNT MOV R0,-(SP) ; LOAD STRING ADDRESS CLR -(SP) ; NO STATUS TST NFLG(R5) ; CHECK THAT ASSUMPTION BPL 6$ ; IF EXITING CALL, TRUE MOV #TIMBUF,(SP) ; ELSE NEED STATUS 6$: CLR -(SP) ; NO AST MOV #9.,-(SP) ; EFN 9 CLR -(SP) ; UIC CLR -(SP) ; CLR -(SP) ; RESERVED WORDS CLR -(SP) ; MOV #^R...,-(SP) ; TASK NAME MOV #^RMCR,-(SP) ; ALL OF IT MOV (PC)+,-(SP) ; MOVE DIC ONTO STACK .BYTE 11.,13. ; DIC FOR SPWN$ CALL TTDET ; ALLOW OTHERS TO USE TERMINAL EMT ^O<377> ; SPAWN MCR COMMAND LINE TST NFLG(R5) ; IS THAT ALL? BPL 30$ ; IF EXITING, GO AWAY CMP #IS.SUC,@#$DSW ; SUCCESS? BNE 7$ ; IF NOT, DON'T WAIT STSE$S #9. ; WAIT FOR A HIT MOV TIMBUF,N(R5) ; GRAB THE RETURN STATUS 7$: BIT #ET.DET,ETYPE(R5) ;CHECK IF ATTACH NEEDED BNE 8$ ; IF NOT, JUST LEAVE CALL TTATT ; ELSE REATTACH TERMINAL 8$: RETURN TEXIT:: MOV #EX$SUC,-(SP) ; SET FOR EXIT WITH SUCCESS STATUS 10$: MOV #25$,-(SP) ; SET FOR RETURN 15$: TST OUTFDB+F.BDB ; SEE IF THERE IS AN OUTPUT FILE OPEN BEQ 20$ ; BRANCH IF NOT CALL KILFIL ; IF SO, DELETE IT 20$: CALL CLOSIF ; CLOSE THE INPUT FILE IF NECESSARY CALL INDCLS ; CLOSE THE INDIRECT FILE IF OPEN CALL TDRDEL ; DELETE TEMP DIRECTORY, IF ANY CALL TTDET ; DETACH THE TERMINAL RTS PC ; FROM SUB OR COROUTINE 25$: MOV #<2*256.>+29.,-(SP) ; EXIT WITH STATUS DIC DIR$ ; TRY EXIT WITH STATUS 30$: EXIT$S ; ELSE DO NORMAL EXIT .DSABL LSB .SBTTL FLAG READ/WRITE INTERCEPT ;+ ; ; *** - FLAGRW INTERCEPT FLAG MODIFICATIONS ; ; THIS ROUTINE IS CALLED BY ALL TECO COMMANDS READING OR WRITING THE VARIOUS ; FLAGS. THE ONLY ONE OF CONCERN IS THE SETTING AND CLEARING OF THE ; DETACH FLAG. ; ; INPUTS: (IF R2 <> 0) ; ; R0 = NEW FLAG VALUE (IF R3 = -1) ; R2 = OFFSET TO FLAG CELL FROM R5 ; R3 = -1 IF FLAG IS BEING WRITTEN ; >< -1 IF FLAG IS BEING READ ; ; OUTPUTS: ; ; NONE ; ; ALL REGISTERS PRESERVED ; ; INPUTS: (IF R2 = 0) ; ; R0 = -1 => RETURN AN OPERATING SYSTEM DEPENDENT UNIQUE VALUE ; 0 => RETURN A JOB/TASK/PROCESS UNIQUE VALUE (0 TO 99) ; 1 => RETURN JOB'S/TASK'S/PROCESS'S KEYBOARD NUMBER ; 2 => RETURN JOB'S/TASK'S/PROCESS'S PPN/UIC ; ; OUTPUTS: ; ; R0 = RETURNED VALUE ;- .PSECT CODE,RO .ENABL LSB FLAGRW:: SAVE TST R2 ; IS IT FOR EJ? BEQ 30$ ; YEP CMP R2,#ETYPE ; SEE IF WE ARE MODIFYING THE ET FLAG BNE 70$ ; BRANCH IF NOT INC R3 ; SEE IF WE ARE WRITING IT BNE 70$ ; BRANCH IF NOT MOV ETYPE(R5),R1 ; GET OLD VALUE MOV R0,R2 ; COPY NEW VALUE BIC R1,R2 ; COMPUTE XOR OF VALUES BIC R0,R1 ; IN R1 BIS R2,R1 ; BIT #ET.DET,R1 ; SEE IF THE DETACH FLAG IS CHANGING BEQ 20$ ; BRANCH IF NOT BIT #ET.DET,R0 ; IF IT IS BEING SET BEQ 10$ CALL TTDET ; DETACH THE TERMINAL AS REQUESTED BR 25$ 10$: BIC #ET.DET,ETYPE(R5) ;ASSUME SUCCESS FOR THE ATTACH CALL TTATT ; OR ATTACH IF IT IS BEING CLEARED 20$: MOV ETYPE(R5),R2 ; GRAB ON TO FLAG BIC #^C,R2 ; MASK DETACH FLAG BIC #ET.DET,R0 ; CLEAN IT OFF THE NEW FLAG BIS R2,R0 ; ENTER PROPER VALUE 25$: MOV R0,SR0(SP) ; MAKE SURE IT IS REMEMBERED BIT #ET.LOC,R1 ; Check if upper / lower case flag changed BEQ 60$ ; If EQ, no. MOV R0,R2 ; Else get the flag BIC #^C,R2 ; And mask off the bit ASR R2 ; Move value down ASR R2 ; Works iff ET.LOC = 4 MOVB R2,TTCHAR+1 ; Put it where QIO wants it QIOW$C SF.SMC,TTYLUN,TTYEFN,,IOSTAT,,,CODE ; Now set the driver appropriately RETURN ; AND GO AWAY 30$: DEC R0 ; WHAT EJ CALL IS THIS? BMI 50$ ; IT'S -1 OR 0 BEQ 80$ ; IT'S 1 GTSK$C GTSKBF,CODE ; IT'S 2, GET TASK PARAMETERS MOV GTSKBF+G.TSPC,R0 ; SET UIC (G.TSGC/G.TSPC) BR 60$ ; GO EXIT 50$: INC R0 ; IS IT -1 OR 0? BEQ 60$ ; IT'S 0, GO RETURN A 0... MOVB OPSYS,R0 ; IT'S -1, RETURN OP-SYS INDICATION 60$: MOV R0,SR0(SP) ; SET THE RETURNED VALUE 70$: RETURN ; EXIT 80$: GLUN$C TTYLUN,GTSKBF,CODE ; GET INFO ABOUT TTYLUN (TI:) CLR R0 ; GET THE KEYBOARD NUMBER BISB GTSKBF+G.LUNU,R0 ; WITHOUT ANY SIGN EXTENSION CMPB OPSYS,#5 ; IS IT VAX/VMS? BNE 60$ ; NOPE, VALUE O.K. AS IS MOV R0,R1 ; YEP, COPY THE VALUE BIC #^C<17>,R0 ; LEAVE ONLY UNIT (0 TO 17) HERE BIC R0,R1 ; AND TAKE UNIT AWAY FROM THE REST ASL R1 ; PUT CONTROL NUMBER INTO HIGH BYTE ASL R1 ASL R1 ASL R1 BIS R1,R0 ; .OR. CONTROL NUMBER INTO UNIT BR 60$ ; GO EXIT .DSABL LSB .SBTTL NO CONTROL/O ;+ ; ; *** - NOCTLO NO CONTROL/O ; ; THIS ROUTINE DISABLES THE AFFECT OF A PREVIOUSLY TYPED CONTROL O ; ; INPUTS: NONE ; ; OUTPUTS: NONE ; ; ALL REGISTERS ARE PRESERVED ; ;- NOCTLO:: DECB CTOFLG ; MAKE FLAG NON-ZERO RETURN .END