
; *******************************************************
; *							*
; *     Turbo Pascal Run-time Library                   *
; *	Textfile Character Array I/O			*
; *							*
; *     Copyright (c) 1988,92 Borland International     *
; *							*
; *******************************************************

	TITLE	TPCH

	INCLUDE	SE.ASM

CODE	SEGMENT	BYTE PUBLIC

	ASSUME	CS:CODE

; Externals

	EXTRN	ReadText:NEAR,WriteBuffer:NEAR,WriteBlanks:NEAR

; Publics

	PUBLIC	ReadPChar,WritePChar

; Read standard procedure (PChar)

	ARG	FileP,DWORD,1
	ARG	StrP,DWORD,1
	ARG	StrLen,WORD,1

ReadPChar:

	ENTRY	WINFAR
	LES	BX,FileP
	MOV	AX,OFFSET CS:@@10
	MOV	CX,StrLen
	MOV	DI,StrP.ofs
	MOV	DX,StrP.seg
	CALL	ReadText
	MOV	ES,DX
	XOR	AX,AX
	STOSB
	EXIT	6
@@10:	JCXZ	@@13
@@11:	LODSB
	CMP	AL,cr
	JE	@@12
	CMP	AL,eof
	JE	@@12
	STOSB
	CMP	SI,BX
	LOOPNE	@@11
	JCXZ	@@13
	MOV	AX,OFFSET CS:@@11
	RET
@@12:	DEC	SI
@@13:	XOR	AX,AX
	RET

; Write standard procedure (PChar)

WritePChar:

	ARG	FileP,DWORD,1
	ARG	StrP,DWORD,1
	ARG	Width,WORD,1

	ENTRY	WINFAR
	MOV	AX,StrP.ofs
	OR	AX,StrP.seg
	JE	@@1
	LES	DI,StrP
	MOV	CX,0FFFFH
	XOR	AL,AL
	CLD
	REPNE	SCASB
	MOV	AX,0FFFEH
	SUB	AX,CX
@@1:	LES	BX,FileP
	OR	AX,AX
	JS	@@2
	MOV	DX,Width
	SUB	DX,AX
	JLE	@@2
	PUSH	AX
	CALL	WriteBlanks
	POP	AX
@@2:	OR	AX,AX
	JE	@@3
	MOV	SI,StrP.ofs
	MOV	DX,StrP.seg
	CALL	WriteBuffer
@@3:	EXIT	6

CODE	ENDS

	END
