Compucolor.org – Virtual Media

Listing of file='SETFIL.MAC;06' on disk='vmedia/asm_utility_routines-sideB-sector.ccvf'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;	SETFIL - SET UP A FILE FOR INPUT OR OUTPUT
;
;	ON ENTRY:
;	   A  - OPEN TYPE CODE (0=OLD,1=NEW)
;	   BC - SIZE OF I/O BUFFER (BYTES)
;	   DE - POINTER TO I/O BUFFER
;	   HL - POINTER TO FILE PARAMETER BLOCK
;
;	RETURNS:
;	  <C> = ERROR
;
;	DESTROYS:
;	   ALL REGISTERS
;
;
;	FILE I/O ROUTINES - ADDRESSES MUST BE SET UP
;		PRIOR TO CALL TO THIS ROUTINE
	EXTRN	OPEN,EMESS,INSEQO,RWSEQI
;
;	OFFSETS IN FILE PARAMETER BLOCK

FOPT	EQU	0
FATR	EQU	1
FNAM	EQU	2
FTYP	EQU	8
FVER	EQU	11
FSBK	EQU	12
FSIZ	EQU	14
FLBC	EQU	16
FLAD	EQU	17
FSAD	EQU	19
FSPR	EQU	21
FDBK	EQU	22
FDEN	EQU	23
FAUX	EQU	24
FHAN	EQU	26
FFCN	EQU	28
FDRV	EQU	29
FBLK	EQU	30
FBUF	EQU	32
FXBC	EQU	34
FPTR	EQU	36

;..............................................................
;
;	SETUP A FILE FOR INPUT
;

SETFIL:	MOV	M,A		;SAVE OPEN MODE (0=OLD, 1=NEW)
	SHLD	FPBPTR		;STORE POINTERS TO: FPB
	XCHG
	SHLD	BUFPTR		;   AND I/O BUFFER
	MOV	H,B
	MOV	L,C
	SHLD	KBYTES

	LHLD	FPBPTR		;POINT AT FILE PARAM BLOCK
	CALL	OPEN		;OPEN THE FILE
	JC	ERROR
	LHLD	BUFPTR		;POINT AT I/O BUFFER
	MOV	B,H
	MOV	C,L
	LHLD	FPBPTR
	PUSH	H
	LXI	D,FBUF
	DAD	D
	MOV	M,C		;SAVE I/O BUFFER ADDRESS IN FPB
	INX	H
	MOV	M,B
	POP	H
	LXI	D,FXBC
	DAD	D
	XCHG
	LHLD	KBYTES		;SETUP BUFFER SIZE IN FPB
	XCHG
	MOV	M,E
	INX	H
	MOV	M,D
	LHLD	FPBPTR		;POINT AT FPB
	MOV	A,M
	ORA	A
	JZ	INPUT
	CALL	INSEQO		;INITIALISE OUTPUT FILE
	ORA	A
	RET
INPUT:	CALL	RWSEQI		;REWIND INPUT FILE
	ORA	A
	RET

ERROR:	CALL	EMESS		;EMIT ERROR MESSAGE
	STC
	RET

;..............................................................
;
;	DATA AREA
;
KBYTES:	DS	2	;SIZE OF BUFFER (BYTES)
FPBPTR:	DS	2	;POINTER TO FPB
BUFPTR:	DS	2	;POINTER TO I/O BUFFER

	END