perm filename CHANGE.FAI[IP,NET] blob sn#702363 filedate 1983-03-06 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	Changes to page 14 of CLKSER[S,SYS]:
C00003 00003	Replace page 64 of COMCSS[S,SYS]:
C00007 00004	Change to page 92 of UUOCON[S,SYS]:
C00008 00005	Change to page 96 of UUOCON[S,SYS]:
C00009 ENDMK
C⊗;
;Changes to page 14 of CLKSER[S,SYS]:

;In the once-a-second section:

IFN IMPNUM,<
	HGMAC(??)
	PUSHACS				;only if we care about ACs preserved
	PUSHJ P,IMPSEC↑
	POPACS				;if we did a PUSHACS
>;IFN IMPNUM

;Every tick:

IFN IMPNUM,<
	SKIPE IMPRQF↑		:ANY IMP REQUESTS PENDING?
	 PUSHJ P,IMPTIK↑	;YES, SERVICE THEM
>;IFN IMPNUM

;or if ACs need to be preserved:

IFN IMPNUM,<
	SKIPN IMPRQF↑
	 JRST NIMPRQ
	PUSHACS
	PUSHJ P,IMPTIK↑
	POPACS
NIMPRQ:
>;IFN IMPNUM
;Replace page 64 of COMCSS[S,SYS]:

;IOSETC ITMCNT ITMCN1 ITMCN2

;CALLED FROM INPUT AND OUTPUT UUOS.

;CALLING SEQUENCE
;	MOVE JBUF,<ADDRESS OF USER'S BUFFER HEADER>
;	MOVE TAC1,<ADDRESS OF BUFFER>
;	MOVE ITEM,<BUFFER WC>
;	PUSHJ P,IOSETC
;	EXIT		ALWAYS RETURNS HERE

;SETS JBFPTR18-35:=C(TAC1 18-35)
;JBFCTR:=C(ITEM)*[WORD LENGTH/BYTE SIZE]
;WHERE:	WORD LENGTH:=36 DECIMAL
;	BYTE SIZE:=C(JBFPTR6-11)
;	[X]:= INTEGER PART OF X


↑IOSETC:MOVSI TAC,7777			;CLEAR BYTE POINTER IN BUFFER HEADER.
	XCTR XRW,[ANDM TAC,1(JBUF)]	;CLEAR ALL BUT BYTE SIZE, INDEX.
	XCTR XRW,[HRRM TAC1,1(JBUF)]	;SET ADDRESS PART.
	XCTR XRW,[AOS 1(JBUF)]		;ADVANCE ADDRESS TO WC WORD
	XCTR XLB,[LDB AC2,[POINT 6,1(JBUF),11]]		;USER'S BYTE SIZE.
	PUSHJ P,ITMCNT
	XCTR XW,[MOVEM ITEM,2(JBUF)]	;STORE ITEM COUNT IN USER'S BUFFER HEADER
	POPJ P,				;EXIT TO USER.

;Subroutine to compute number of bytes in a buffer.

;CALLING SEQUENCE
;	MOVE TAC1,<ADDRESS OF BUFFER>
;	MOVE ITEM,<BUFFER WC>
;	PUSHJ P,ITMCNT
;	EXIT		ALWAYS RETURNS HERE

;If LH(ITEM) is nonzero it assumed to be the LH of a byte pointer, and the
;byte count is adjusted to account for unused bytes.  This is for special
;devices, like the IMP, which compute an exact byte count.

↑ITMCNT:XCTR XLB,[LDB TAC1,[POINT 17,(TAC1),17]]	;GET BUFFER SIZE
IFN IMPNUM,<
	HLLZ AC1,ITEM			;Get LH of byte ptr
	HRRZ ITEM,ITEM			;Get word count
	CAIG ITEM,-1(TAC1)		;Word count too big?
	 JRST ITMCN1			;No.
	MOVEI ITEM,-1(TAC1)		;Yes, reduce it
	SETZ AC1,			;And forget about later adjustment
ITMCN1:
>;IFN IMPNUM
IFE IMPNUM,<
	CAILE ITEM,-1(TAC1)		;IS THE DATA WC TOO BIG?
	MOVEI ITEM,-1(TAC1)		;YES.  REDUCE IT TO WHAT CAN FIT IN BUFFER
>;IFE IMPNUM
	MOVEI TAC,=36			;COMPUTE ITEM COUNT FROM NUMBER OF DATA
	IDIV TAC,AC2			;  WORDS*NUMBER OF BYTES/WORD USING THIS
	IMUL ITEM,TAC			;  BYTE SIZE.
IFN IMPNUM,<
	JUMPE AC1,ITMCN2		;Jump if no byte ptr
	LDB AC1,[POINT 6,AC1,5]		;Number of unused bits in last word
	CAIL AC1,=36			;Virgin byte ptr?
	 JRST ITMCN2			;Yes - don't believe it!
	IDIV AC1,AC2			;Compute leftovers
	SUBI ITEM,(AC1)			;Subtract from byte count
ITMCN2:
>;IFN IMPNUM
	POPJ P,				;EXIT TO USER.
;Change to page 92 of UUOCON[S,SYS]:

;Replace:
INPUT2:	XCTR XR,[HRRZ ITEM,1(TAC1)]	;GET ACTUAL WC FROM THE BUFFER.

;With:
INPUT2:
IFN IMPNUM,<
	MOVSI AC1,DEPCBC		;Does WC word in buffer contain a byte ptr?
	TDNE AC1,DEVCMR(DDB)
	XCTR XR,[SKIPA ITEM,1(TAC1)]	;Yes.  Set ITEM to entire word
>;IFN IMPNUM
	XCTR XR,[HRRZ ITEM,1(TAC1)]	;No.  Set item to word count in buffer
;Change to page 96 of UUOCON[S,SYS]:

;Replace:
	XCTR	XRW,[HRRM TAC,(TAC1)]	;STORE WORD COUNT IN 3RD WORD OF BUFFER.

;With:
IFE IMPNUM,<
	XCTR	XRW,[HRRM TAC,(TAC1)]	;STORE WORD COUNT IN 3RD WORD OF BUFFER.
>;IFE IMPNUM
IFN IMPNUM,<
	HRRZ TAC,TAC			;Zero LH(TAC)
	MOVSI AC2,DEPCBC
	TDNE AC2,DEVCMR(DDB)		;Should we store LH of byte ptr?
	 XCTR XR,[HLL TAC,(JBUF)]	;Yes
	XCTR XRW,[MOVEM TAC,(TAC1)]	;Store in 3rd word of buffer
>;IFN IMPNUM