Google
 

Trailing-Edge - PDP-10 Archives - bb-bt99e-bb - cblio.c07
There is 1 other file named cblio.c07 in the archive. Click here to see a list.
 INS 4/2	;07C1
	;JSM	09-NOV-83 [1103] On Fake Read for SMU Retain on TOPS-10, check for
	;			 EOF Return and don't cause program failure if so.
	;JEH	08-NOV-83 [1102] Determine TOPS-20 monitor level and if < 5.0,
	;			     skip all read unrestricted code - not implemented
	;JM/RF	25-OCT-83 [1100] SMU with relative file gets race condition,
	;				record not written to disk but gets
	;				invalid key error.
	;JEH	24-OCT-83 [1077] If dynamic access and REWRITE, update pointers
	;				so READ NEXT can work
	;JBB	22-AUG-83 [1075] Prevent multi-level ISAM file from missing records
	;			 when using START, READ NEXT sequences
	;RLF/JM	21-APR-83 [1065] Make FREE RECORD KEY work for SMU after RETAIN NEXT
 DEL 29/3	;07C2
	;[D1007]	IFNDEF	TOPS2X,<TOPS2X==0>	; [667] THIS CODE HAS NOT BEEN TESTED YET
		TOPS2X==TOPS20			;[1007] TURN ON TOPS2X FOR VERSION 5
 INS 51/5	;07C3
	EXTERN	SU.T1			;[1065] SMU, CARRY RRT ENTRY ADDR HERE
 REP 11/7	;07C4

 WIT
	IFN TOPS20, <
		MOVEI 	AC1,.SCOUNT	;[1102]
		GETAB			;[1102] SEE WHICH VERSION WE'RE RUNNING UNDER
		 ERJMP	[ CAIN AC1,GTABX1	;[1102] DOES THIS TABLE EXIST
			  SKIPA AC2,[-1]	;[1102] NO - SAY VERSION 4.1
			  SETZM AC2		;[1102] SAY V 5
			  MOVEM AC2,MNTR5##	;[1102] STORE IT
			  JRST .+1]		;[1102]
	>; END TOPS20
 REP 41/45	;07C5
	OPNC3A:	SKIPN	F.WSMU(I16)	; SKIP IF SIMULTANEOUS UPDATE
 WIT
	OPNC3A:				;[1066]
	IFN TOPS20,<			;[1066]
		TXNE	AC13,DV.MTA	;[1066] IS IT AN MTA
		TLNN	FLG1,MSTNDR	;[1066]  AND MONITOR IS LABELING?
		SKIPA			;[1066]  NO
		JRST	OPNC3C		;[1066]  YES, OPEN FILE USING FILOP
	>				;[1066]
		SKIPN	F.WSMU(I16)	;[1066] SKIP IF SIMULTANEOUS UPDATE
 REP 2/46	;07C6
	IFN TOPS2X,<
 WIT
	IFN TOPS20, <
		SKIPGE	MNTR5##		;[1102] IF NOT AT LEAST V5.0 OF MONITOR,
		JRST	OPNC40		;[1102] NO UNRESTRICTED READ
 REP 7/46	;07C7
	>
 WIT
	OPNC40:				;[1102] 
	>; END TOPS20			;[1102]
 REP 60/47	;07C8
		TXNN	AC13,DV.MTA	;[561] MTA??
 WIT
		TXNE	AC13,DV.MTA	;[561][1066] MTA??
		TLNE	FLG1,MSTNDR	;[1066]  MTA IS UNLABELED TAPE?
 REP 15/49	;07C9
	IFN TOPS2X,<
		TLNE	FLG,OPNOUT	;[1007][667] IF OPEN READ ONLY OR
	>
 WIT
	IFN TOPS20,<
		SKIPL	MNTR5		;[1102] NO UNRESTRICTED READ
		TLNE	FLG,OPNOUT	;[1007][667] IF OPEN READ ONLY OR
	>; END TOPS20			;[1102]
 REP 13/50	;07C10
		SKIPN	F.WSMU(I16)	; SIMULTANEOUS UPDATE?
	IFN TOPS2X,<
		TLNN	FLG,OPNOUT	;[1007] [667] OR OPEN READ ONLY 
		TRNA			;[667] YES
	>
		JRST	OPNI21		; NO
	IFE TOPS20,<
 WIT
	IFN TOPS20,<
		SKIPL	MNTR5		;[1102] IF (AT LEAST V5.0
		TLNE	FLG,OPNOUT	;[1102]  AND READ ONLY) OR
		SKIPE	F.WSMU(I16)	;[1102]  SIMULTANEOUS UPDATE
		TRNA			;[1102] THEN SKIP
		JRST	OPNI21		;[1102]  ELSE ON TO OPNI21
	>; END TOPS20
	IFE TOPS20,<
		SKIPN	F.WSMU(I16)	;[1102] SIMULTANEOUS UPDATE?
		JRST	OPNI21		;[1102] NO
 REP 14/61	;07C11
	IFN TOPS2X,<
 WIT
	IFN TOPS20, <
		SKIPGE	MNTR5		;[1102] IF MONITOR NOT AT LEAST V5.0,
		JRST	OPNLO2		;[1102]  DIDN'T DO THE LOOKUP
 REP 22/61	;07C12
	>
 WIT
	OPNLO2:				;[1102] 
	>; END TOPS20
 REP 133/64	;07C13
	IFE TOPS2X,<
		TRO	AC0,OF%THW		; [431] THAWED I.E. SIMULTANEOUS UPDATE
	>
	IFN TOPS2X,<
		SKIPN	F.WSMU(I16)		;[667] SIMULTANEOUS UPDATE?
 WIT
		SKIPL	MNTR5			;[1102] IF NOT AT LEAST V5.0,
		JRST	OCPT11			;[1102]  NO UNRESTRICTED READ DEFINED
		TRO	AC0,OF%THW		; [431] THAWED I.E. SIMULTANEOUS UPDATE
		JRST	OCPT12			;[1102]
	OCPT11:	SKIPN	F.WSMU(I16)		;[1102][667] SIMULTANEOUS UPDATE?
 REP 141/64	;07C14
	>
		MOVEM	AC0,CP.BK3		; [431] INIT AC2 OPENF BITS
 WIT
	OCPT12:	MOVEM	AC0,CP.BK3		; [1102] [431] INIT AC2 OPENF BITS
 INS 176/64	;07C15
		TXNE	AC13,DV.MTA		; [1066] IS IT A LABELED MTA?
		PUSHJ	PP,OCP1A		; [1066]  YES, GO SET UP ATTR. BLOCK
 INS 211/64	;07C16
	IFN TOPS20,<				;[1066]
	;[1066] This routine is used to set up the attribute block for the GTJFN jsys.
	;[1066] The GTJFN call uses the attribute block when opening system labeled
	;[1066] tapes. The format is set to D if the RECORDING MODE IS ASCII or
	;[1066] if the RECORDING MODE IS STANDARD-ASCII.
	OCPTFO:	ASCIZ/FORMAT:D/			;[1066]

	OCP1A:	PUSH	PP,AC0			;[1066]
		HRRZ	AC0,D.RFLG(I16)		;[1066] Get information flag
		TXNN	AC0,SASCII		;[1066] Recording mode ASCII ?
		JRST	OCP1B			;[1066]  No, exit
		HRRI	AC0,.GJATR-.GJJFN	;[1066] Get number of words
		HRRM	AC0,GJ.BLK##+.GJF2	;[1066] Set up number of extra
						;[1066]  words in GTJFN block
		TXO	AC0,GJ%XTN+GJ%FOU	;[1066] Set GJ%XTN in GTJFN block
		TXZ	AC0,GJ%SHT		;[1066]
		MOVEM	AC0,GJ.BLK+.GJGEN	;[1066]
		HRROI	AC0,GJ.ATR##		;[1066]
		MOVEM	AC0,GJ.BLK+.GJATR	;[1066] GTJFN points to attribute block
		MOVEI	AC0,2			;[1066]
		HRRM	AC0,GJ.ATR		;[1066] Set number of words in attr.
		MOVE	AC0,[POINT 7,OCPTFO]	;[1066] Setup byte pointer in attribute
		MOVEM	AC0,GJ.ATR+1		;[1066]  block
		MOVE	AC0,[.NULIO,,.NULIO]	;[1066]
		MOVEM	AC0,GJ.BLK+.GJSRC	;[1066]
		HRRZI	AC0,GJ.BLK		;[1066]
		MOVEM	AC0,CP.BLK+1		;[1066]
	OCP1B:	POP	PP,AC0			;[1066]
		POPJ	PP,			;[1066]
	>;END IFN TOPS20			;[1066]

 INS 23/75	;07C17

 REP 74/95	;07C18
	OPNCKP:	SKIPN	M7.00		;IS IT 7.00 OR LATER?
		POPJ	PP,		;NO
 WIT
	OPNCKP:
	;	SKIPN	M7.00		;[1100] IS IT 7.00 OR LATER?
	;	POPJ	PP,		;[1100] NO
 INS 8/150	;07C19
		CAIE	AC0,%FAM.D	;[1077] IF DYNAMIC, COULD NEED SEQ POINTERS
 REP 14/150	;07C20
	RANXI0:	TLNE	FLG,RANFIL	;[273] IF A RANDOM FILE
 WIT
	RANXI0:	SKIPN	F.WSMU(I16)	;[1065] SIMULTANEOUS UPDATE?
		 JRST	RNXI0A		;[1065] NO
		MOVE	AC2,SU.T1##	;[1065] GET RRT ENTRY
		HLLZ	AC3,1(AC2)	;[1065] IS RETAIN NEXT
		TLNN	AC3,400000	;[1065] FLAG ON?
		 JRST	RNXI0A		;[1065] NO.
		MOVE	AC1,F.RACK(I16)	;[1065] IF SO, WE NEED TO GET 
		MOVE	AC3,(AC1)	;[1065] THE KEY AND
		MOVEM	AC3,2(AC2)	;[1065] PUT IT IN THE RRT.
	RNXI0A:				;[1065]
		TLNE	FLG,RANFIL	;[273] IF A RANDOM FILE
 REP 103/159	;07C21
		POPJ	PP,		;[605] RETURN
 WIT
		JRST	SETLRW		;[1075] [605] GO UPDATE LRW
 REP 33/188	;07C22
	GBDER:	MOVE	AC0,[E.MINP+E.FIDA+E.BDAT]	;ERROR NUMBER
 WIT
	GBDER:				;[1103]

	IFE TOPS20,<			;[1103] TOPS-10 ONLY EOF ERROR FLAG TO TEST
		SKIPE	SU.FRF		;[1103] DOING FAKE READ, I.E. SMU RETAIN?
		PUSHJ	PP,GBDEOF	;[1103] YES, GO TEST FOR EOF FLAG FROM IN UUO
		 JRST	GBDER1		;[1103]  TEST IS FALSE, RETURN +1
		PUSHJ	PP,CLRDS	;[1103]  TEST IS TRUE, RETURN +2, GO CLEAR STATUS
		JRST	GETB0F		;[1103]   AND GO RETURN BLOCK = 0, WHICH IS OK
	GBDER1:				;[1103] 
	>				;[1103] END IFE TOPS20

		MOVE	AC0,[E.MINP+E.FIDA+E.BDAT]	;ERROR NUMBER
 INS 39/188	;07C23
		;[1103] TEST TOPS-10 EOF ERROR FLAG FROM IN UUO

	IFE TOPS20,<			;[1103] 

	GBDEOF:				;[1103] 
		PUSH	PP,AC2		;[1103] SAVE CHANNEL INFO FROM IN UUO CALL
		XCT	UGETS.		;[1103] DO A GETSTS UUO ON CHANNEL
		TXNE	AC2,IO.ERR	;[1103] REPORTING A REAL I-O ERROR?
		 JRST	GBDEO1		;[1103]  YES, RETURN +1
		TXNE	AC2,IO.EOF	;[1103] EOF FLAG SET FOR IN UUO?
		 AOS	-1(PP)		;[1103]  YES, SET UP TO RETURN +2
	GBDEO1:				;[1103] 
		POP	PP,AC2		;[1103] RESTORE CHANNEL INFO
		POPJ	PP,		;[1103]  AND RETURN
	>				;[1103] END IFE TOPS20

 REP 23/206	;07C24
	IFE TOPS20,<
		SKIPE	M7.00		;IF 7.00
		JRST	PPOPJ		;RIB UPDATE WILL BE DONE BY MONITOR
	>
 WIT
	;IFE TOPS20,<			;[1100, don't let monitor control update]
	;	SKIPE	M7.00		;[1100] IF 7.00
	;	JRST	PPOPJ		;[1100] RIB UPDATE WILL BE DONE BY MONITOR
	;>				;[1100]
 REP 33/206	;07C25
	IFE TOPS20,<
		SKIPE	M7.00		;IF 7.00
		JRST	PPOPJ		;RIB UPDATE WILL BE DONE BY MONITOR
	>
 WIT
	;IFE TOPS20,<			;[1100, don't let control update]
	;	SKIPE	M7.00		;[1100] IF 7.00
	;	JRST	PPOPJ		;[1100] RIB UPDATE WILL BE DONE BY MONITOR
	;>				;[1100]
 SUM 252991