DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

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

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦896bd3f2e⟧ TextFile

    Length: 2176 (0x880)
    Types: TextFile
    Names: »FILEXT.SRC«

Derivation

└─⟦c9df7130d⟧ Bits:30005915 Pascal MT+ Release 5.2 (Jet-80)
    └─ ⟦this⟧ »FILEXT.SRC« 

TextFile

;ROUTINES  SUPPORT RESETTING AN INPUT FILE AND REWRITING AN OUTPUT FILE
;
	NAME FILEXT
	ENTRY SCAN,MOVNAM
	EXT TIN,TOUT,FILNAM,MXOUT1
	INCLUDE DEFLT.SRC

;SCAN CHECKS THE OUTPUT FILE LIST FOR THE CONTENTS
;OF HL. Y POINTS TO THE START OF THE LIST
;SCAN SETS THE CARRY AND RETURNS THE ELEMENTS ADDRESS IN BC
SCAN:	INX	Y
	MOV	A,L
	LXI	B,MXOUT1	;NUMBER OF BYTES OF OUTPUT FILE ADDRS.
CONTLK:	CMP	0(Y)
	JRZ	FNDLOW	;LOW BYTE MATCH
	INX	Y
	INX	Y	;NEXT OUTPUT FILE ADDRESS
	DCR	B
	DJNZ	CONTLK
	XRA	A	;ELEMENT NOT FOUND
	RET

;FOUND LOW BYTE		;CHECK HIGH BYTE
FNDLOW:	MOV	A,H
	INX	Y
	DCR	B
	CMP	0(Y)
	JRZ	FNDIT	;HIGH BYTE MATCH
	MOV	A,L
	INX	Y
	DJNZ	CONTLK
	XRA	A	;ELEMENT NOT FOUND
	RET

;FOUND ELEMENT IN LIST
FNDIT:	PUSH	Y
	POP	B
	XRA	A
	STC
	RET


;MOVNAM MOVES THE FILENAME FROM TI BUFFER
;STACK INTO THE FILE BUFFER AREA
;MOVNAM IS CALLED WITH A ZERO.
;DE CONTAINING THE FIRST RETURN ADDRESS
;HL CONTAINING THE FILE CONTROL BLOCK
;AND THE FILENAME ON THE STACK
;MOVNAM MUST RETURN THESE REGISTERS UNCHANGED
;AND THE FILENAME REMOVED FROM THE STACK
;THE LENGTH OF THE STRING TO BE MOVED IS IN C

STAKSP	EQU	3

MOVNAM:	CALL	TIN	;EXHAUST TI BUFFER
	JRNC	MOVNAM
	PUSH	H	;FILE CONTROL BLOCK
	LXI	H,STAKSP;GET DISPLACEMENT
	DAD	S
	XRA	A
	MOV	B,A
	DAD	B	;ADD LENGTH
	PUSH	H	;NEW STACK POINTER
;MOVE FILENAME TO THE TI BUFFER
	MOV	B,C
TOTI:	MOV	C,M
	CALL	TOUT
	DCX	H
	DJNZ	TOTI
;MOVE A CARRIAGE RETURN INTO TI BUFFER
	MVI	C,CR
	CALL	TOUT
;PARSE FILENAME AND MOVE IT INTO BUFFER AREA
	POP	B	;NEW STACK POINTER
	POP	H	;FILE CONTROL BLOCK
	CALL	FILNAM
	EXAF
EMPBUF:	CALL	TIN
	CPI	CR
	JRNZ	EMPBUF
	EXAF
	PUSH	B	;NEW SP
	XTHL		;HL <- NEW SP
	POP	B	;GET FILE CONTROL BLOCK
	MOV	M,D	;HIGH BYTE OF FIRST RETURN ADDRESS
	DCX	H	;DECR. NEW SP
	MOV	A,E	;LOW BYTE OF FIRST RETURN ADDRESS
	MOV	D,B	;FILE CONTROL BLOCK INTO DE
	MOV	E,C
	POP	B	;SECOND RETURN ADDRESS
	SPHL		;REMOVE FILENAME FROM STACK
	XCHG		;FILE CONTROL BLOCK
	POP	D	;HIGH BYTE OF FIRST RETURN ADDRESS
	MOV	E,A	;LOW BYTE
	PUSH	B	;SECOND RETURN ADDRESS
	MVI	A,0	;CLEAR ACC WITHOUT DISTURBING CARRY
	RET
«eof»