.TITLE EXIT - PROGRAM EXIT FOR TECOIO .IDENT "X0213" ; ; 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 26-MAR-80 23:25 .MCALL EXIT$S,DIR$,SPWN$S EX$ERR = 2 ; EXIT WITH ERROR STATUS EX$SUC = 1 ; EXIT WITH SUCCESS STATUS .SBTTL EXIT ROUTINES ;+ ; *** - GEXIT EXIT AND GO ; ; "GEXIT" IS EXIT AND GO (IF NFLG(R5) >=0) OR SPECIAL FUNCTION ; CALL (IF NFLG(R5)<0). EXIT AND GO FUNCTION IS DONE BY SPAWNING ; MCR WITH THE SUPPLIED COMMAND STRING. ; SINCE NO SPECIAL FUNCTIONS ARE PROVIDED, ALL JUST RETURN 0. ; ; *** - 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. ; ; *** - TEXIT EXIT ; ; THIS ENTRY IS CALLED BY TECO TO EXIT. ; ; NO INPUTS, NO OUTPUTS, NO RETURN. ; ;- .PSECT PURE,RO,D MCR: .RAD50 /MCR.../ .PSECT CODE,RO .ENABL LSB 5$: CLR N(R5) ; RETURN FAILURE (0) RETURN ; AND EXIT GEXIT:: TST NFLG(R5) ; SPECIAL FUNCTION CALL? BMI 5$ ; YES MOV #EX$SUC,-(SP) ; SET FOR EXIT WITH SUCCESS STATUS BR 15$ EXERR:: MOV #EX$ERR,-(SP) ; SET FOR EXIT WITH ERROR STATUS BR 10$ TEXIT:: MOV #EX$SUC,-(SP) ; SET FOR EXIT WITH SUCCESS STATUS 10$: CLRB @FILBUF(R5) ; ENSURE NO COMMAND LINE TO EXECUTE 15$: CLR R0 ; SET ARGUMENT TO TURN OFF EVERYTHING MOV #10000.,NWATCH(R5) ; AND ENSURE IT'S NOT A DEFAULT CALL CALL WATCH ; GO TURN OFF ANY FUNNY SCOPE STUFF 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 MOV FILBUF(R5),R4 ; GET START OF (POTENTIAL) COMMAND LINE MOV R4,R0 ; AND COPY IT 30$: TSTB (R0)+ ; END? BNE 30$ ; NOT YET... SUB R4,R0 ; FIND LINE'S DEC R0 ; TRUE LENGTH BEQ 40$ ; NO LENGTH, SO NO COMMAND SPWN$S TNAME=#MCR,CMDLIN=R4,CMDLEN=R0 ; ACTIVATE MCR W/ COMMAND LINE BCC 40$ ; EXIT SUCCESSFUL MOV #EX$ERR,-(SP) ; SET FOR EXIT WITH ERROR STATUS 40$: MOV #<2*256.>+29.,-(SP) ; EXIT WITH STATUS DIC DIR$ ; TRY EXIT WITH STATUS EXIT$S ; ELSE DO NORMAL EXIT .DSABL LSB .SBTTL MAINTAIN VT52 DISPLAY ;+ ; ; *** - WATCH MAINTAIN DISPLAY ; ; THIS ROUTINE APPEARS HERE AS A NULL ROUTINE TO MAINTAIN THE TEXT DISPLAY. ; IT OCCUPIES THE OVERLAYABLE PSECT "SCREEN" AND MAY BE OVERLAID WITH A REAL ; ROUTINE TO MAINTAIN THE DISPLAY (SUCH AS THE VT52 SCREEN MODULE). ; ; INPUTS: NONE ; ; OUTPUTS: NONE ; ; ALL REGISTARE PRESERVED ; ;- R0OFF == SR0 ; FOR WATCH MODULE... .PSECT SCREEN,RO,I,GBL,REL,OVR WATCH:: ; ROUTINE ENTRY POINT SCREEN::RETURN ; DUMMY RETURN .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 50$ ; BRANCH IF NOT INC R3 ; SEE IF WE ARE WRITING IT BNE 50$ ; 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 20$ 10$: CALL TTATT ; OR ATTACH IF IT IS BEING CLEARED 20$: MOV ETYPE(R5),R1 ; GET ORIGINAL ET FLAG BIC #ET.VT11!ET.VT52,R0 ; REMOVE THESE FROM USER'S VALUE BIC #^C,R1 ; GET ONLY THOSE FROM ORIGINAL BIS R1,R0 ; AND PUT THEM IN USER'S VALUE BR 40$ ; GO EXIT 30$: INC R0 ; CHANGE EJ CODE FROM -1 TO 2 INTO 0 TO 3 CMP R0,#3 ; NOW CHECK THE CODE'S VALIDITY BHI 50$ ; IT'S INVALID, JUST RETURN THE CALL ARG ASL R0 ; MAKE 0 TO 3 INTO 0 TO 6 FOR WORD OFFSET MOV OPSYS(R0),R0 ; AND FETCH THE CORRECT VALUE 40$: MOV R0,SR0(SP) ; SET THE RETURNED VALUE 50$: RETURN ; 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