home *** CD-ROM | disk | FTP | other *** search
/ Chip 1997 April / Chip_1997-04_cd.bin / prezent / cb / data.z / READCHAR.ASM < prev    next >
Assembly Source File  |  1997-01-16  |  2KB  |  94 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Delphi Runtime Library                          *
  5. ; *                            *
  6. ; *    Copyright (c) 1996 Borland International    *
  7. ; *                            *
  8. ; *******************************************************
  9.  
  10.     INCLUDE    SE.ASM
  11.     INCLUDE    FILEIO.ASM
  12.  
  13.  
  14.     .386
  15.     .MODEL    FLAT
  16.  
  17.     EXTRN    Input:DWORD, _ResetText:NEAR, SetInOutRes:NEAR
  18.  
  19.     PUBLIC    _ReadChar
  20.  
  21.     .CODE
  22.  
  23. ;    FUNCTION _ReadChar( t: Text ) : Char;
  24.  
  25. _ReadChar PROC
  26.  
  27. ; ->    EAX    Pointer to text record
  28. ; <-    AL    Character read. For eof, #$1A is returned. For errors,
  29. ;        SetInOutRes is called and #$1A is returned.
  30.  
  31.     CMP    [EAX].Mode,fmInput
  32.     JNE    @@fileNotOpenForInput
  33. @@checkBuf:
  34.     MOV    EDX,[EAX].BufPos
  35.     CMP    EDX,[EAX].BufEnd
  36.     JAE    @@fillBuf
  37. @@cont:
  38.     MOV    ECX,[EAX].BufPtr
  39.     MOV    CL,[ECX+EDX]
  40.     CMP    CL,eof
  41.     JZ    @@exit
  42.     INC    EDX
  43.     MOV    [EAX].BufPos,EDX
  44. @@exit:
  45.     MOV    AL,CL
  46.     RET
  47.  
  48. @@fileNotOpenForInput:
  49.     CMP    EAX,offset Input
  50.     JE    @@openInput
  51. @@notOpenError:
  52.     MOV    EAX,104
  53.         CALL    SetInOutRes
  54.     MOV    AL,eof
  55.     RET
  56.  
  57. @@openInput:
  58.     CALL    _ResetText
  59.     MOV    EAX,offset Input
  60.     CMP    [EAX].Mode,fmInput
  61.     JE    @@checkBuf
  62.     JMP    @@notOpenError
  63.  
  64. @@fillBuf:
  65.     PUSH    EAX
  66.     CALL    [EAX].InOutFunc
  67.     TEST    EAX,EAX
  68.     JNE    @@error
  69.     POP    EAX
  70.     MOV    EDX,[EAX].BufPos
  71.     CMP    EDX,[EAX].BufEnd
  72.     JB    @@cont
  73.  
  74. ;    so we didn't get characters. must be eof then.
  75. ;    store one eof in the buffer and increment BufEnd
  76.  
  77. @@eof:
  78.     MOV    ECX,[EAX].BufPtr
  79.     MOV    byte ptr [ECX+EDX],eof
  80.     INC    [EAX].BufEnd
  81.     MOV    AL,eof
  82.     RET
  83.  
  84. @@error:
  85.         CALL    SetInOutRes
  86.     POP    EAX
  87.     MOV    AL,eof
  88.     RET
  89.  
  90. _ReadChar ENDP
  91.  
  92.  
  93.     END
  94.