	.TITLE	EXSRV - RANDOM EXEC SERVICES FOR TECOIO

	.IDENT	"X0212"

;
; 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  7-MAR-78  23:11
; MARK H. BRAMHALL    25-MAR-79  18:17

	.MCALL	EXRG$S,GTIM$C,GSSW$S

.SBTTL	SIZER - EXPAND MEMORY IF POSSIBLE

	.PSECT	PURE,RO,D

;
; MEMORY ALLOCATION MESSAGE
;
CORMSG:	.ASCII	"K bytes]"<15><12>
CORMSL	= .-CORMSG
	.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::
	SAVE
	ADD	#1777,R1	; ROUND UP TO 1K BYTE BOUNDARY
	BIC	#1777,R1
	MOV	R1,R2		; SAVE # BYTES
	ASR	R1		; FIND # 32WD HUNKS (DIVIDE BY 64)
	ASR	R1
	ASR	R1
	ASR	R1
	ASR	R1
	ASR	R1
	EXRG$S	R1		; ASK FOR SPACE
	BCS	30$		; BRANCH ON ANY ERROR, EXIT C=1
	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	20$		; BRANCH IF YES, BUT GO EXIT C=0
	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
10$:	MOVB	(R1)+,(R0)+
	SOB	R2,10$
	MOV	#STRING,R3	; START OF MESSAGE
	MOV	R0,R4		; END
	SUB	R3,R4		; COMPUTE BYTE COUNT
	CALL	PRINTC		; OUTPUT TO TERMINAL
	BIS	#1,OUTDNE(R5)	; INDICATE MEMORY MESSAGE OUTPUT (+1)
20$:	CLC			; C=0 FOR MEMORY ALLOCATED
30$:	RETURN

.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	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

