home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1997 April
/
Chip_1997-04_cd.bin
/
prezent
/
cb
/
data.z
/
READCHAR.ASM
< prev
next >
Wrap
Assembly Source File
|
1997-01-16
|
2KB
|
94 lines
; *******************************************************
; * *
; * Delphi Runtime Library *
; * *
; * Copyright (c) 1996 Borland International *
; * *
; *******************************************************
INCLUDE SE.ASM
INCLUDE FILEIO.ASM
.386
.MODEL FLAT
EXTRN Input:DWORD, _ResetText:NEAR, SetInOutRes:NEAR
PUBLIC _ReadChar
.CODE
; FUNCTION _ReadChar( t: Text ) : Char;
_ReadChar PROC
; -> EAX Pointer to text record
; <- AL Character read. For eof, #$1A is returned. For errors,
; SetInOutRes is called and #$1A is returned.
CMP [EAX].Mode,fmInput
JNE @@fileNotOpenForInput
@@checkBuf:
MOV EDX,[EAX].BufPos
CMP EDX,[EAX].BufEnd
JAE @@fillBuf
@@cont:
MOV ECX,[EAX].BufPtr
MOV CL,[ECX+EDX]
CMP CL,eof
JZ @@exit
INC EDX
MOV [EAX].BufPos,EDX
@@exit:
MOV AL,CL
RET
@@fileNotOpenForInput:
CMP EAX,offset Input
JE @@openInput
@@notOpenError:
MOV EAX,104
CALL SetInOutRes
MOV AL,eof
RET
@@openInput:
CALL _ResetText
MOV EAX,offset Input
CMP [EAX].Mode,fmInput
JE @@checkBuf
JMP @@notOpenError
@@fillBuf:
PUSH EAX
CALL [EAX].InOutFunc
TEST EAX,EAX
JNE @@error
POP EAX
MOV EDX,[EAX].BufPos
CMP EDX,[EAX].BufEnd
JB @@cont
; so we didn't get characters. must be eof then.
; store one eof in the buffer and increment BufEnd
@@eof:
MOV ECX,[EAX].BufPtr
MOV byte ptr [ECX+EDX],eof
INC [EAX].BufEnd
MOV AL,eof
RET
@@error:
CALL SetInOutRes
POP EAX
MOV AL,eof
RET
_ReadChar ENDP
END