.TITLE EXSRV - RANDOM EXEC SERVICES FOR TECOIO .IDENT "X0210" ; ; 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 28-MAR-77 10:40 .MCALL EXRG$S,GTIM$C,GSSW$S .SBTTL SIZER - EXPAND MEMORY IF POSSIBLE .IF NE,R$$DYM .PSECT PURE,RO,D ; ; MEMORY ALLOCATION MESSAGE ; CORMSG: .ASCII "K bytes]"<15><12> CORMSL = .-CORMSG .ENDC .EVEN ;+ ; ; *** - SIZER EXPAND MEMORY IF POSSIBLE ; ; THIS ROUTINE EXPANDS THE AMOUNT OF MEMORY USED BY TECO. THE ; AMOUNT OF MEMORY ALLOCATED (IF ANY) IS LEFT IN CURFRE(R5). ; ; INPUTS: ; ; R1 = MINIMUM AMOUNT TO ALLOCATE ; ; OUTPUTS: ; ; C=0 IF SUCCESSFUL, C=1 IF FAILED ; CURFRE(R5) UPDATED IF SUCCESSFUL ; ; ALL REGISTERS PRESERVED ; ;- .PSECT CODE,RO,I SIZER:: .IF EQ,R$$DYM SEC RETURN .IFF SAVE ADD #1777,R1 ; ROUND UP TO 1K BYTE BOUNDARY BIC #1777,R1 MOV R1,R2 ; SAVE # BYTES MOV CORSIZ,R3 ; GET CURRENT BUFFER SIZE CMP R3,#BUFLIM ; SEE IF WE ARE ALREADY OVER THE LIMIT BHI 10$ ; BRANCH IF YES ADD R2,R3 ; CHECK NEW SIZE CMP #BUFLIM,R3 ; AGAINST LIMIT BLO 30$ ; BRANCH IF WOULD GO OVER ; NOTE CARRY IS SET 10$: ASR R1 ASR R1 ASR R1 ASR R1 ASR R1 ASR R1 EXRG$S R1 ; ASK FOR SPACE BCS 30$ ; BRANCH ON ERROR ADD R2,CURFRE(R5) ; STORE SIZE FOR TECO ADD R2,CORSIZ ; ACCUMULATE TOTAL SIZE BIT #ET.DET!ET.EXI,ETYPE(R5) ; SEE IF MESSAGES INHIBITED BNE 30$ ; BRANCH IF YES MOV #STRING,R0 ; GET STRING BUFFER MOVB #'[,(R0)+ ; START MESSAGE MOV CORSIZ,R1 ; GET TOTAL SIZE CLRB R1 SWAB R1 ; CONVERT TO # OF K BYTES ASR R1 ASR R1 CLR R2 CALL $CBDMG ; CONVERT TO DECIMAL STRING MOV #CORMSG,R1 ; GET REST OF MESSAGE MOV #CORMSL,R2 20$: MOVB (R1)+,(R0)+ SOB R2,20$ MOV #STRING,R3 ; START OF MESSAGE MOV R0,R4 ; END SUB R3,R4 ; COMPUTE BYTE COUNT CALL PRINTI ; OUTPUT TO TERMINAL 30$: RETURN .ENDC .SBTTL SYSTEM DATE ROUTINE ;+ ; ; *** - DATE GET SYSTEM DATE ; ; THIS ROUTINE RETURNS THE DATE FROM THE SYSTEM IN A ONE WORD ; NUMERICALLY USEFUL FORM. BITS 0-4 CONTAIN THE DAY, BITS 5-8 CONTAIN ; THE MONTH, AND BITS 9-15 CONTAIN THE YEAR-1900. ; ; INPUTS: NONE ; ; OUTPUTS: ; ; R0 = DATE WORD ; ; ALL OTHER REGISTERS ARE PRESERVED. ; ;- DATE:: SAVE GTIM$C TIMBUF,CODE ; GET TIME PARAMETERS FROM RSX BCS DIRERR MOV TIMBUF+G.TIYR,R0 ; GET YEAR SWAB R0 ; INTO HIGH ORDER BIS TIMBUF+G.TIMO,R0 ; GET MONTH ASLB R0 ASLB R0 ASLB R0 ASLB R0 ASL R0 ; ALIGN YEAR AND MONTH BIS TIMBUF+G.TIDA,R0 ; AND GET DAY MOV R0,SR0(SP) ; PUT IN CALLER'S R0 RETURN RETURN .SBTTL SYSTEM TIME ROUTINE ;+ ; ; *** - TIME GET SYSTEM TIME ; ; THIS ROUTINE RETURNS THE TIME OF DAY FROM THE SYSTEM IN A ONE ; WORD NUMERICALLY USEFUL FORM. TIME IS RETURNED AS HALF ; THE NUMBER OF SECONDS SINCE MIDNIGHT. TOO BAD IT CAN'T BE JUST SECONDS, ; BUT THE NUMBER OF SECONDS IN A DAY IS GREATER THAN 16 BITS. ; ; INPUTS: NONE ; ; OUTPUTS: ; ; R0 = TIME WORD ; ; ALL OTHER REGISTERS ARE PRESERVED. ; ;- TIME:: SAVE GTIM$C TIMBUF,CODE ; GET TIME FROM RSX SYSTEM BCS DIRERR CLR R0 MOV TIMBUF+G.TIHR,R1 ; GET HOURS ASL R1 ; *16 ASL R1 ASL R1 ASL R1 SUB TIMBUF+G.TIHR,R1 ; *15 ASL R1 ; *60 ASL R1 ADD TIMBUF+G.TIMI,R1 ; ADD IN MINUTES MOV R1,-(SP) ASL R1 ; *16 ASL R1 ASL R1 ASL R1 SUB (SP)+,R1 ; *15 ASL R1 ; *60 ASL R1 ROL R0 ; CARRY ADD TIMBUF+G.TISC,R1 ; ADD IN SECONDS ADC R0 ROR R0 ; DIVIDE BY 2 ROR R1 MOV R1,SR0(SP) ; PUT IN CALLER'S RETURN REGISTER RETURN .SBTTL GET CONSOLE SWITCHES ROUTINE ;+ ; ; *** - SWITCH GET CONSOLE SWITCHES ; ; THIS ROUTINE RETURNS THE CONSOLE SWITCHES TO THE CALLING PROGRAM. ; ; INPUTS: NONE ; ; OUTPUTS: ; ; R0 = SWITCH WORD ; ; ALL OTHER REGISTERS ARE PRESERVED. ; ;- SWITCH:: SAVE GSSW$S ; GET SWITCH SETTING FROM RSX BCS DIRERR MOV @#$DSW,SR0(SP) ; GET VALUE FROM DSW RETURN ; ; TO HERE ON DIRECTIVE ERROR ; DIRERR: JMP SYSERR .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: ; ; 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 ; ;- FLAGRW:: SAVE CMP R2,#ETYPE ; SEE IF WE ARE MODIFYING THE ET FLAG BNE 20$ ; BRANCH IF NOT INC R3 ; SEE IF WE ARE WRITING IT BNE 20$ ; 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$: RETURN .SBTTL NULL ROUTINES ;+ ; ; THESE ARE ENTRIES REQUIRED IN THE TECOIO PACKAGE THAT HAVE NO MEANING ; UNDER RSX-11. THEY ARE APPROPRIATELY NO-OP'ED. ; ;- ;+ ; ; *** - STOPON HANDLE CONTROL C TRAP ; ; THIS ROUTINE IS CALLED TO ALLOW NON-AST SYSTEMS TO HANDLE CONTROL C TRAPS. ; ;- STOPON:: XITNOW:: ; DE-CONDITION TTY CLC RETURN .END