DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦1e5a3ecaa⟧

    Length: 20678 (0x50c6)
    Notes: pts_type(SC)
    Names: »ASSRUT.SC«

Derivation

└─⟦48601905a⟧ Bits:30009668 Philips computer tape "600121"
    └─⟦this⟧ »S:DU/ASSRUT.SC« 
└─⟦79fbed147⟧ Bits:30009697 Philips computer tape "600414"
    └─⟦this⟧ »S:DU/ASSRUT.SC« 
└─⟦d2a299635⟧ Bits:30009698 Philips computer tape "600415"
    └─⟦this⟧ »S:DU/ASSRUT.SC« 

PTS(SC)

	IDENT    ASSRUT	UPD 80-03-20/CHST
			UPD 80-02-22/CHST
			UPD 80-01-16/CHST
			UPD 79-11-08/PEEN
			UPD 79-01-30/PEEN
* ASSEMBLER ROUTINES USED BY PTS DE-UTILITIES 

	ENTRY	CHANFC 
	ENTRY	CREVOL 
	ENTRY	CREFIL 
	ENTRY	DELFIL 
	ENTRY	GETVOL 
	ENTRY	COPYDD 
	ENTRY	GETFRE 
	ENTRY	CHVOL
	ENTRY	SURVEY 
	ENTRY	UPDBOL 
	ENTRY	UPDBIN 
	ENTRY	SETB 
	ENTRY	TESTB
	ENTRY	CLEARB 
	ENTRY	MSKOUT 
	ENTRY	RDSECT 
	ENTRY	SETOCC 
	ENTRY	SETFRE 
	ENTRY	VOLNAM 
	ENTRY	ATTWB
	ENTRY	CMPIND 
	ENTRY	GETIND 
	ENTRY	RESTOR 
	ENTRY	WRITDK 
	ENTRY	READDK 
	ENTRY	CLOSEF 
	ENTRY	OPENF
* 
	EXTRN	I:EVA0 
	EXTRN	CRVOL
	EXTRN	CRFILE 
	EXTRN	DLFILE 
*    COPY SYSVOL TO SYSVOL NOT IN THIS REL. 
*	EXTRN	COPVOL
	EXTRN	PRVTOC 
* 
	EXTRN	T:FDSP 
	EXTRN	I:RT1
	EXTRN	T:LOFS 
* 
CALL	FORM	16=/F6A1,16 
	EJECT
* 
*   CHANGE FILE CODE IN ECB 
*   CALL: 
*        CALL CHANFC,DATASET,FILECODE 
* 
CHANFC	EQU	*
	CF	A14,T:FDSP	GET ECB-ADDRESS
	CF	A14,I:EVA0	GET ADDRESS TO BIN.
	LC	A3,1,A9	GET FILE CODE 
	SC	A3,1,A8	STORE FILE CODE IN ECB
	RF	RET 
	EJECT
******************
*  CREATE VOLUME
******************
CREVOL	EQU	*
	LDKL	A1,CRVOL
	CALL	UTINF 
	EJECT
* 
*     PERFORME A CALL TO ONE OF THE ROUTINES
*       CRVOL,CRFILE,DLFILE,COPVOL OR PRVTOC
*      A1   ADDRESS TO THE WANTED ROUTINE 
* 
UTINF	EQU	* 
	ST	A1,RUTIN
	CF	A14,I:EVA0	A9 = :A PBLOCK 
	LDR	A6,A9	ADRESS TO PBLOCK 
	CF	A14,I:EVA0	A9 = :A BUF1 
	STR	A9,A6	STORE BUF1 ADRESS
	CF	A14,I:EVA0	A9 = :A BUF2 
	ST	A9,2,A6	STORE BUF2 ADRESS 
	STR	A12,A14	SAVE A12 
	ST	A13,-2,A14	SAVE A13 
	SUKL	A14,4 
	LDR	A12,A6 
	CF	A14,CRVOL 
RUTIN	EQU	*-2 
	ADKL	A14,4 
	LD	A13,-2,A14
	LDR*	A12,A14 
	LDR	A6,A1	SAVE RETURN CODE 
	CF	A14,I:EVA0	GET ADRESS TO RETCOD 
	STR	A6,A9
	ADKL	A14,4 
	ABL	I:RT1
	EJECT
****************
*  CREATE FILE
****************
CREFIL	EQU	*
	LDKL	A1,CRFILE 
	CALL	UTINF 
	EJECT
****************
*  DELETE FILE
******************
DELFIL	EQU	*
	LDKL	A1,DLFILE 
	CALL	UTINF 
	EJECT
*     COPY SYSVOL TO SYSVOL IS NOT IMPLEMENTED IN THIS REL. 
**********************
*  COPY DISK TO DISK
**********************
COPYDD	EQU	*
*	LDKL	A1,COPVOL
*	CALL	UTINF
	ABL	I:RT1
	EJECT
* GET VOLUME NAME TO A STRING VARIABEL
*  SYNTAX: CALL GETVOL,DSET,BUFFER,VOLNAM,RETCOD
*          RETCOD = 0 IF OK, ELSE 1 
* 
GETVOL	EQU	*
	CALL	T:FDSP	GET DSET ADDRESS TO A8 
	CALL	I:EVA0	GET BUFFER ADDRESS TO A9 
	ADKL	A9,1	MAKE BUFFER ADDRESS EVEN 
	ANKL	A9,/FFFE
	ST	A9,2,A8	STORE BUFFER ADDRESS IN DSET
	LDK	A6,6	REQUESTED LENGTH =6 
	ST	A6,4,A8	=> VOLUME NAME AS OUTPUT TEST STATUS
	CALL	I:EVA0	GET ADDRESS TO VOLNAM
	LDK	A7,/80	LOAD ORDER CODE 
*      A7    ORDER CODE FOR TEST STATUS 
*      A8    DSET ADDRESS 
	LKM
	DATA	1 
	LD	A1,8,A8	LOAD RETURN CODE
	RF(NZ)	ERROR 
*     STORE THE VOLUME NAME (OUTPUT FROM TEST STATUS) 
*     IN CALLERS BUFFER VOLNAM
	LD	A1,2,A8	LOAD BUFFER ADDRESS 
	LDK	A2,6	NO OF BYTES IN VOLUME NAME
LOOP	EQU	*
	LCR	A3,A1
	SCR	A3,A9
	ADK	A1,1 
	ADKL	A9,1
	SUK	A2,1 
	RB(P)	LOOP 
UT	EQU	*
	LDK	A6,0 
VIN	CF	A14,I:EVA0 
	STR	A6,A9	STORE RETURN-CODE
RET	ABL	I:RT1 
ERROR	LDK	A6,1
	RB	VIN 
	EJECT
*  GET A FREE RECORD FROM FREE-SPACE RECORD 
*  SYNTAX:  CALL GETFRE,BPOOL(IND),RPOOL(IND),NUMB
*   OUTPUT: NUMB = FOUND RECORD NUMBER (=0 IF NOT FOUND)
GETFRE	EQU	*
	CALL	GETPAR	GET PARAMETER ADDRESSES
	LD	A4,-2,A7	GET NUMBER OF FRE RECORDS
	RF(Z)	NOK	IF NONE FREE 
GET100	EQU	*
	CWR	A7,A8
	RF(E)	NOK	END OF RECORD
	LCR	A4,A7	GET BITS FOR 8 RECORDS 
	SLL	A4,8	SHIFT TO RIGHTMOST
	RF(NZ)	SEARCH	AT LEAST ONE RECORD FREE 
	ADK	A7,1	INCREMENT POINTER 
	ADK	A6,8	UPDATE RECORD NUMBER
	RB	GET100
SEARCH	EQU	*
	LDK	A5,0	INDICATE FIRST BIT IN BYTE
	LDR	A4,A4
SEA100	RF(N)	FOUND	IF FOUND 
	ADK	A5,1	INCREMENT COUNTER 
	SLL	A4,1 
	RB	SEA100
FOUND	SLL	A4,1	CLEAR BIT
	ADR	A6,A5	UPDATE RELATIVE RECORD NUMBER
FOU100	SRL	A4,1 
	SUK	A5,1	DECREMENT POINTER 
	RB(NN)	FOU100
	SRL	A4,8 
	SCR	A4,A7	STORE UPDATED BYTE 
	LC	A7,17,A9
	ECR	A7,A7
	LC	A7,18,A9	GET START RECORD NUMBER
	ADR	A6,A7	GET CURRENT RECORD NUMBER
	LDKL	A1,-1 
	ADRS	A1,A2	DECREMENT NO. OF FREE RECS. 
NOK	EQU	* 
	CALL	I:EVA0
NOK100	STR	A6,A9	STORE FOUND INDEX
	RB	RET 
	EJECT
GETPAR	EQU	*
	CALL	I:EVA0	ADDRESS TO BPOOL 
	LDR	A7,A9	COPY ADDRESS 
	CALL	I:EVA0	ADDRESS TO RPOOL 
	LC	A8,15,A9
	ECR	A8,A8
	LC	A8,16,A9	GET OCCUPIED BYTES 
	ADR	A8,A7	GET END ADDRESS
	SUKL	A8,10 
	LDR	A2,A7	SAVE START ADDRESS 
	ADK	A7,2	ADDRESS TO FIRST BITS 
	LDK	A6,0 
	RTN	A14
	EJECT
************************
*  CHANGE VOLUME NAME  *
************************
CHVOL	EQU	* 
	CALL	T:FDSP
	CM	10,A8	SECTOR NO. = 0
	CM	12,A8 
CHV100	LDKL	A1,256
	ST	A1,4,A8	STORE REQUESTED LENGTH
	CALL	I:EVA0
	ST	A9,2,A8	STORE BUFFER ADRESS 
	LDK	A7,/B7	LOCK
	LKM
	DATA	1 
	LD	A6,8,A8	GET RETURN CODE 
	LDK	A7,/81	BASIC READ
	LKM
	DATA	1 
	CALL	I:EVA0	GET VOLUME NAME
	LD	A1,2,A8 
	LDK	A2,6 
CHV200	LCR	A3,A9	READ CHARACTER 
	SCR	A3,A1	STORE CHARACTER
	ADK	A1,1 
	ADKL	A9,1
	SUK	A2,1 
	RB(NZ)	CHV200	IF NOT FINISHED
	LDK	A7,/85	WRITE BASIC 
	LKM
	DATA	1 
	LDK	A7,/80 
	LKM
	DATA	1 
	LDR	A6,A6
	RF(NZ)	CHVUT	JUMP IF NOT TO BE UNLOADED
	LDK	A7,/B8 
	LKM
	DATA	1 
CHVUT	EQU	* 
	ABL	I:RT1
	EJECT
********* 
*  PVC  * 
********* 
SURVEY	EQU	*
	LDKL	A1,PRVTOC 
	CALL	UTINF 
	EJECT
* 
*   MOVE CONTENTS OF BIN ITEM TO CORRESPONDING
*   16 BOOLEAN ITEMS
* 
UPDBOL	EQU	*
	CALL	I:EVA0	GET ADDRESS TO BIN ITEM
	LDR*	A1,A9	GET BIN CONTENTS
	ST	A1,-2,A9	STORE BOOLEANS 
	ABL	I:RT1
* 
*   MOVE 16 BOOLEAN ITEMS TO CORRESPONDING BIN
* 
UPDBIN	EQU	*
	CALL	I:EVA0	GET ADDRESS TO BIN ITEM
	LD	A1,-2,A9	GET BOOLEANS 
	STR	A1,A9	STORE IN BIN 
	ABL	I:RT1
	EJECT
* 
*   SEARCH WANTED BIT IN A CHARACTER STRING 
*    A3 = BIT INDEX 
*    A7 = CHARACTER STRING START ADDRESS
* 
SEABIT	EQU	*
SET050	SUK	A3,8 
	RF(N)	SET100 
	ADK	A7,1 
	CWR	A7,A8
	RB(NE)	SET050	CONTINUE IN NOT EOR
	LDK	A6,0	INDICATE INCORRECT REC. NO. 
	RTN	A14
* PLACED IN CURRENT BYTE
SET100	EQU	*
	ADK	A3,8 
	LCR	A4,A7
	SLL	A4,8	GET BYTE RIGHTMOST
	LDR	A1,A3	COPY A3
	RF(Z)	TEST	IF FIRST BIT
SET300	EQU	*
	SLC	A4,1 
	SUK	A1,1 
	RB(NZ)	SET300
TEST	EQU	*
	RTN	A14
	EJECT
* 
*  SET WANTED BIT IN A STRING OR BIN ITEM 
*  SYNTAX:  CALL  SETB,ITEM,INDEX 
* 
SETB	EQU	*
	SUR	A10,A10	INDICATE 'SET' 
SETB10	EQU	*
	CALL	I:EVA0	GET ADDRESS TO ITEM
	LDR	A7,A9	COPY ADDRESS 
	LDR	A8,A5	COPY ENDADDRESS
	CALL	I:EVA0	GET ADDRESS TO INDEX 
	LDR*	A3,A9	GET INDEX 
	CALL	SEABIT	SEARCH WANTED BIT
	LDR	A10,A10
	RF(N)	SETB30	IF TEST BIT 
	RF(Z)	SETB20	JUMP IF SETBIT
* CLEAR BIT 
	ANKL	A4,/7FFF	CLEAR BIT
	RF	TES200	RESTORE BYTE 
* SET BIT 
SETB20	EQU	*
	ORKL	A4,/8000	SET BIT
	RF	TES200	RESTORE BYTE 
SETB30	EQU	*
	LDK	A1,0	INDICATE FALSE
	LDR	A4,A4	TEST BIT 
	RF(NN)	SETB40	IF FALSE 
	LDK	A1,1	INDICATE TRUE 
SETB40	EQU	*
	LD	A4,2,A13	GET STACK BASE 
	SC	A1,-2,A4	STORE CR ON STACK
	ABL	I:RT1
* 
*  CLEAR BIT IN STRING OR BIN VARIABLE
*   SYNTAX:  CALL  CLEARB,ITEM,INDEX
* 
CLEARB	EQU	*
	LDKL	A10,1	INDICATE 'CLEAR BIT'
	RB	SETB10	CONTINUE 
* 
*  TEST BIT IN STRING OR BIN VARIABLE 
*   SYNTAX:  CALL  TESTB,ITEM,INDEX 
*   OUTPUT:  CR = 0 (BIT IS FALSE)
*            CR = 1 (BIT IS TRUE) 
* 
TESTB	EQU	* 
	LDKL	A10,-1	INDICATE 'TEST BIT'
	RB	SETB10	CONTINUE 
	EJECT
* 
*  MASK OUT WANTED BITS ACCORDING TO MASK 
*  SYNTAX:  CALL  MSKOUT,MASK,BIN 
*   MASK= BIN ITEM HOLDING THE MASK; WILL CONTAIN 
*         THE RESULT AFTER THE LOGICAL AND OPERATION
*    BIN= BIN HOLDING THE VALUE TO BE MASKED
* 
MSKOUT	EQU	*
	CALL	I:EVA0	ADDRESS TO MASK
	LDR	A6,A9
	CALL	I:EVA0	ADDRESS TO BIN 
	LDR*	A1,A9	GET CONTENTS OF BIN 
	ANRS	A1,A6	LOGICAL AND WITH MASK AND 
			STORE RESULT IN MASK 
	ABL	I:RT1
* 
	EJECT
**********************
*  READ DISK SECTOR  *
**********************
RDSECT	EQU	*
	CALL	T:FDSP
	CALL	I:EVA0
	LDR*	A1,A9 
	CM	10,A8 
	ST	A1,12,A8	STORE SECTOR NUMBER
RDS100	LDKL	A1,256
	ST	A1,4,A8	STORE REQUESTED LENGTH
	CALL	I:EVA0
	ST	A9,2,A8	STORE BUFFER ADRESS 
	LDK	A7,/B7	LOCK
	LKM
	DATA	1 
	LDK	A7,/81	BASIC READ
	LKM
	DATA	1 
	LDK	A7,/B8	UNLOCK
	LKM
	DATA	1 
RET1	ABL	I:RT1
	EJECT
*  SETFRE: INDICATE RECORD FREE AND UPDATE NO.OF
*          FREE RECORD COUNTER. THIS IS ONLY DONE 
*          IF CURRENT RECORD WAS BUSY 
*  SYNTAX: CALL SETFRE,BPOOL(IND),RPOOL(IND),NUMB 
*          NUMB = CURRENT RECORD NUMBER (=0 IF WRONG NUMBER)
* 
SETFRE	EQU	*
	SUR	A10,A10	INDICATE SETFRE
SET	EQU	* 
	CALL	GETPAR
	LDR	A6,A9	COPY ADDRESS 
	CALL	I:EVA0	GET ADDRESS TO REC. NO.
	LDR	A2,A7	COPY A7
	LDR*	A3,A9	GET INDEX 
	LC	A1,17,A6
	ECR	A1,A1
	LC	A1,18,A6	GET START RECORD NUMBER
	SUR	A3,A1	GET RELATIVE RECORD NO.
	CALL	SEABIT	SEARCH WANTED BIT
	LDR	A6,A6
	RF(Z)	NOK150	JUMP IF ERROR 
	LDR	A10,A10
	RF(NZ)	TEST0	IF SET0CC 
* SETFRE: TEST IF ALREADY FREE
TEST1	LDR	A4,A4 
	RB(N)	RET1	IF ALREADY FREE 
	ORKL	A4,/8000	SET RECORD FREE
	LDK	A1,1	INDICATE INCREMENT
TES100	ADS	A1,-2,A2	IN-/DE-CREMENT COUNTER
TES200	SUK	A3,1 
	RF(N)	TES300	BYTE RESTORED 
	SRC	A4,1 
	RB	TES200
TES300	SRL	A4,8	MOVE TO RIGHTMOST BYTE
	SCR	A4,A7	STORE UPDATED BYTE 
	RB	RET1
* 
* SETOCC: TEST IF ALREADY OCCUPIED
TEST0	EQU	* 
	LDR	A4,A4
	RB(NN)	RET1	IF ALREADY OCCUPIED
	SUK	A1,1	A1 = -1; INDICATE DECREMENT 
	ANKL	A4,/7FFF	INDICATE OCCUPIED
	RB	TES100
NOK150	EQU	*
	STR	A6,A9
	RB	RET1
	EJECT
* SET RECORD OCCUPIED AND DECREMENT NUMBER OF 
* FREE RECORDS; THIS IS ONLY DONE IF CURRENT RECORD 
* IS FREE 
*   SYNTAX: CALL SETOCC,BPOOL(IND),RPOOL(IND),NUMB
*       NUMB = CURRENT RECORD NUMBER (= 0 AS OUTPUT IF
*                                       WRONG NUMBER) 
SETOCC	EQU	*
	LDR	A10,A14	INDICATE SETOCC
	RB	SET 
* 
*  VOLNAM - SUBROUTINE TO CRVOL  *
* 
VOLNAM	EQU	*
	LDK	A1,0 
	RTN	A14
	EJECT
* 
*  ATTACH A STRING VARIABLE AS WORKBLOCK TO 
*  THE TERMINAL CONTROL AREA
*   SYNTAX:    CALL  ATTWB,STRG,DISPL,BLOCK 
*     STRG= STRING ITEM TO BE WORKBLOCK 
*    DISPL= BIN ITEM HOLDING DISPLACEMENT RELATIVE
*           'STRG'-START
*    BLOCK= BIN ITEM HOLDING BLOCK NUMBER WITHIN T:A
* 
ATTWB	EQU	* 
	LDKL	A10,2	INDICATE WB 
ATT	EQU	* 
	CALL	I:EVA0	ADDRESS TO NEW WB
	LDR	A7,A9	SAVE ADDRESS 
	CALL	I:EVA0	GET DISPLACEMENT 
	ADR*	A7,A9 
	CALL	I:EVA0	ADDRESS TO WB NUMBER 
	LDR*	A1,A9 
	SLL	A1,2	TIMES 4 
	ADR	A1,A13	ADDRESS TO DB 
	ADR	A1,A10	GET ADDRESS TO WB OR DB 
ATT100	EQU	*
	STR	A7,A1	STORE NEW WB/DB-ADDRESS
	RB	RET1
	EJECT
* 
*  SAVE POINTERS TO DB:S/WB:S IN STRING ITEM
*   SYNTAX: CALL  SAVE,DISPL,LENGTH,STRG
*   DISPL= BIN ITEM HOLDING DISPLACEMENT RELATIVE 
*          THE VERY FIRST DB:POINTER
*  LENGTH= BIN ITEM HOLDING THE NUMBER OF BYTES TO BE MOVED 
*    STRG= STRING VARIABLE TO STORE THE SAVED POINTERS IN 
* 
SAVE	EQU	*
	CALL	GETP	GET PARAMETERS 
SAV100	EQU	*
	ADR	A2,A7
	ADR	A7,A9
SAV200	EQU	*
	LCR	A1,A2
	SCR	A1,A7
	ADK	A2,1 
	ADK	A7,1 
	SUK	A6,1 
	RB(NZ)	SAV200
	RB	RET1
* 
*  RESTORE DB/WB-POINTERS FROM A STRING VARIABLE
*  TO THE T:A (TERMINAL CONTROL AREA) 
*   SYNTAX:  CALL  RESTOR,DISPL,LENGTH,STRG 
*   DISPL= DISPLACEMENT RELATIVE THE VERY FIRST DB-POINTER
*  LENGTH= NUMBER OF BYTES TO RESTORE 
*    STRG= STRING ITEM HOLDING POINTERS TO BE RESTORED
* 
RESTOR	EQU	*
	CALL	GETP
	LDR	A1,A2
	LDR	A2,A9	CHANGE 
	LDR	A9,A1	ADDRESSES
	RB	SAV100	START TO RESTORE 
* 
*   GET PARAMETERS FOR SAVE/RESTORE 
* 
GETP	EQU	*
	CALL	I:EVA0
	LDR*	A7,A9	START DISPLACEMENT
	CALL	I:EVA0
	LDR*	A6,A9	GET LENGTH
	CALL	I:EVA0
	LDK	A2,40
	ADR	A2,A13	GET ADDRESS TO DB-POINTER /A
	RTN	A14
	EJECT
* 
*   GET DIMENSION OF INDEXED VARIABLE AND LENGTH
* 
*      SYNTAX:   CALL     GETIND,ITEM(W1),LENGTH,DIMENSION
* 
*                         ITEM(W1)      = CURRENT ITEM
*                         LENGTH        = BIN HOLDING ITEM LENGTH 
*                         DIMENSION     = BIN HOLDING DIMENSION 
*                                         (NUMBER OF ELEMENTS)
* 
GETIND	EQU	*
	CALL	I:EVA0	ADDRESS TO ITEM
	LD	A10,-6,A14	READ DIMENSION STORED BY I:EVA0
	LDR	A7,A5	COPY END ADDRESS 
	SUR	A7,A9	CALCULATE ITEM LENGTH
	CALL	I:EVA0	ADDRESS TO LENGTH ITEM 
	STR	A7,A9	STORE LENGTH 
	CALL	I:EVA0	ADDRESS TO DIMENSION 
	STR	A10,A9	STORE IN ITEM 
ATTRET	EQU	*
	RB	RET1
	EJECT
* 
*   COMPARE INDEX VARIABLE WITH DIMENSION OF INDEXED ITEM 
* 
*      SYNTAX:       CALL   CMPIND,INDEX,ITEM(INDEX1) 
* 
*        OUTPUT:           CR = 0  IF INDEX=MAX. INDEX OF ITEM
*                          CR = 1  IF INDEX>MAX. INDEX OF ITEM
*                           CR = 2  IF INDEX<MAX. INDEX OF ITEM 
* 

CMPIND	EQU	*
	CALL	I:EVA0	GET ADDRESS TO INDEX 
	LDR*	A6,A9	SAVE INDEX VALUE
	CALL	I:EVA0	GET ADDRESS AND DIMENSION OF ITEM
	LDR	A6,A6
	RF(NP)	LESS
	CW	A6,-6,A14	COMPARE WITH DIMENSION
	RF(G)	GREAT
* 
EQUAL	EQU	* 
UT150	EQU	* 
	LDK	A1,0	INDICATE CR = 0 
UT200	EQU	* 
	ABL	SETB40	STORE CR AND RETURN 
GREAT	EQU	* 
NOTFND	EQU	*
	LDK	A1,1	INDICATE CR = 1 
	RB	UT200	STORE CR AND RETURN 
LESS	EQU	*
	LDK	A1,2 
	RB	UT200 
	EJECT
* 
*      CALL WRITDK,DSET,FILECODE,BUF,LEN,RECNO
* 
*            DSET      EVENT CONTROL BLOCK
*            FILECODE  FILE NUMBER
*            BUF       BUFFER 
*            LEN       REQUESTED LENGTH 
*            RECNO     REALATIV SECTOR NO WITHIN THE FILE 
* 
WRITDK	EQU	*
	LDKL	A11,/95	ORDER CODE
	RF	READ00
	EJECT
* 
*      CALL READDK,DSET,FILECODE,BUF,LEN,RECNO
* 
*            DSET      EVENT CONTROL BLOCK
*            FILECODE  FILE NUMBER
*            BUF       BUFFER 
*            LEN       REQUESTED LENGTH 
*            RECNO     RELATIVE SECTOR NO WITHIN THE FILE 
* 
READDK	EQU	*
	LDKL	A11,/91	ORDER CODE
READ00	EQU	*
	CALL	T:FDSP	GET DSET ADDRESS TO A8 
*    GET PARAMETERS FROM PARAMETER LIST AND STORE 
*    THEM IN DSET 
	CALL	I:EVA0	FILE CODE
	LDR*	A6,A9 
	SC	A6,1,A8 
	CALL	I:EVA0	BUFFER ADDRESS 
	ST	A9,2,A8 
	CALL	I:EVA0	RECORD LENGTH
	LDR*	A6,A9 
	ST	A6,4,A8 
	CALL	I:EVA0	RECORD NO
	LDR*	A6,A9 
	ST	A6,12,A8
	CM	10,A8 
	LDR	A7,A11 
READ20	EQU	*
*      A7     ORDER CODE
*      A8     DSET ADDRESS
	LKM
	DATA	15
* 
*     CHECK ON ERROR CODE 
READ40	EQU	*
	LD	A6,8,A8 
	RB(Z)	EQUAL	SET COND CODE TO 0 ,OK 
	ANKL	A6,/2000
	RB(NZ)	GREAT	SET COND CODE TO 1  ,EOF
	RB	LESS	SET COND CODE TO 2 ,ERROR
* 
	EJECT
* 
*      CALL  CLOSEF,DSET,FILECODE,BUFF,RECNO
* 
*             DSET      EVENT CONTROL BLOCK 
*             FILECODE  FILE NUMBER 
*             BUF       FILE PARAMETER BUFFER 
*             RECNO     NUMBER OF RECORDS IN SPEC. FILE 
* 
CLOSEF	EQU	*
	LDR	A11,A14
	RF	OPENF0
CLOS10	LDR*	A1,A9	GET REC.NO. 
	ST	A1,60,A6
	LDR*	A6,A10
	SC	A6,1,A8 
	LDK	A7,/A2	LOAD ORDER CODE 
	RB	READ20
	EJECT
* 
*       CALL OPENF,DSET,FILECODE,BUF,FILE,VOLUME
* 
*              DSET      EVENT CONTROL BLOCK
*              FILECODE  FILE NUMBER
*              BUF       FILE PARAMETER BUFFER
*              FILE      FILE NAME
*              VOLUME    VOLUME NAME
* 
OPENF	EQU	* 
	SUR	A11,A11
OPENF0	EQU	*
	CALL	T:FDSP	GET DSET ADDRESS TO A8 
	CALL	I:EVA0	SAVE ADDRESS TO FILE CODE
	LDR	A10,A9 
	CALL	I:EVA0	GET ADDRESS TO FPB(FILE PARAM.BUF) 
	ADKL	A9,1	AND MAKE SURE IT IS EVEN 
	ANKL	A9,/FFFE
	LDR	A6,A9	SAVE ADDRESS TO FPB
	ST	A9,2,A8	STORE THE ADDRESS IN DSET 
	LDK	A3,80	NO OF BYTES IN FPB 
	LDR	A2,A9	ADDRESS TO FPB 
OPEN00	EQU	*
	CMR	A2	STORE ZERO IN FPB 
	ADK	A2,2	INCREACE ADDRESS
	SUK	A3,2 
	RB(NZ)	OPEN00
* 
*     GET FILE NAME AND STORE IT IN FPB 
*      A3 CONTAINES FPB ADDRESS 
	CALL	I:EVA0
	LDR	A11,A11
	RB(NZ)	CLOS10
	ADK	A6,8	ADDRESS TO FILE NAME IN FPB 
	LDK	A4,8	NO OF CHAR IN FILE NAME 
OPEN20	EQU	*
	LCR	A3,A9	GET ON CHAR
	SCR	A3,A6	STORE ONE CHAR IN FPB
	ADKL	A9,1
	ADK	A6,1 
	SUK	A4,1 
	RB(NZ)	OPEN20
* 
*    GET VOLUME NAME AND STORE IT IN FPB
	CALL	I:EVA0
	ADK	A6,2	ADDRESS TO VOLUME IN FPB
	LDK	A4,6	NO OF CHAR IN VOLUME NAME 
OPEN40	EQU	*
	LCR	A3,A9
	SCR	A3,A6	STORE ONE CHAR IN FPB
	ADKL	A9,1
	ADK	A6,1 
	SUK	A4,1 
	RB(NZ)	OPEN40
	LDK	A7,/A1	LOAD ORDER CODE 
	LKM
	DATA	15
*   STORE FILE CODE IN FILE CODE BUFFER 
	LC	A3,1,A8 
	STR	A3,A10 
	RB	READ40	CHEC ON ERROR CODE 
	END

Full view