home *** CD-ROM | disk | FTP | other *** search
/ Chip 1997 April / Chip_1997-04_cd.bin / prezent / cb / data.z / READSTRI.ASM < prev    next >
Assembly Source File  |  1997-01-16  |  2KB  |  150 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    _ReadChar:NEAR, _ResetText:NEAR, Input:DWORD, SetInOutRes:NEAR
  18.  
  19.     PUBLIC    _ReadString, _ReadCString
  20.  
  21.     .CODE
  22.  
  23. ;    PROCEDURE _ReadString( t: Text; var s: string; maxLen: Longint );
  24.  
  25. _ReadString PROC
  26.  
  27. ; ->    EAX    Pointer to text record
  28. ;    EDX    Pointer to string
  29. ;    ECX    Maximum length of string
  30.  
  31.     PUSH    EDX
  32.     INC    EDX
  33.     CALL    ReadLine
  34.     POP    EDX
  35.     MOV    [EDX],CL
  36.     RET
  37.  
  38. _ReadString ENDP
  39.  
  40. ;    PROCEDURE _ReadCString( t: Text; s: PChar; maxLen: Longint );
  41.  
  42. _ReadCString PROC
  43.  
  44. ; ->    EAX    Pointer to text record
  45. ;    EDX    Pointer to string
  46. ;    ECX    Maximum length of string
  47.  
  48.     PUSH    EDX
  49.     CALL    ReadLine
  50.     POP    EDX
  51.     MOV    byte ptr [EDX+ECX],0
  52.     RET
  53.  
  54. _ReadCString ENDP
  55.  
  56.  
  57. ;    PROCEDURE ReadLine( t: Text; buf: Pointer; maxLen: Longint );
  58.  
  59. ReadLine PROC
  60.  
  61. ; ->    EAX    Pointer to text record
  62. ;    EDX    Pointer to buffer
  63. ;    ECX    Maximum count of chars to read
  64. ; <-    ECX    Actual count of chars in buffer
  65.  
  66.  
  67.     PUSH    EBX
  68.     PUSH    ESI
  69.     PUSH    EDI
  70.     PUSH    ECX
  71.  
  72.     MOV    EBX,EAX
  73.     MOV    ESI,ECX
  74.     MOV    EDI,EDX
  75.  
  76.     CMP    [EBX].Mode,fmInput
  77.     JNE    @@fileNotOpenForInput
  78.  
  79. @@isOpenNow:
  80.  
  81.     TEST    ESI,ESI
  82.     JLE    @@exit
  83.  
  84.     MOV    EDX,[EBX].BufPos
  85.     MOV    ECX,[EBX].BufEnd
  86.     SUB    ECX,EDX
  87.     ADD    EDX,[EBX].BufPtr
  88.  
  89. @@loop:
  90.     DEC    ECX
  91.     JL    @@readChar
  92.     MOV    AL,[EDX]
  93.     INC    EDX
  94. @@cont:
  95.     CMP    AL,eof
  96.     JE    @@exit
  97.  
  98.     CMP    AL,cr
  99.     JE    @@cr
  100.  
  101.     STOSB
  102.     DEC    ESI
  103.     JG    @@loop
  104.     JMP    @@finish
  105.  
  106. @@cr:
  107.     DEC    EDX
  108. @@finish:
  109.     SUB    EDX,[EBX].BufPtr
  110.     MOV    [EBX].BufPos,EDX
  111. @@exit:
  112.     POP    ECX
  113.     SUB    ECX,ESI
  114.     POP    EDI
  115.     POP    ESI
  116.     POP    EBX
  117.     RET
  118.  
  119. @@readChar:
  120.     MOV    [EBX].BufPos,EDX
  121.     MOV    EAX,EBX
  122.     CALL    _ReadChar
  123.     MOV    EDX,[EBX].BufPos
  124.     MOV    ECX,[EBX].BufEnd
  125.     SUB    ECX,EDX
  126.     ADD    EDX,[EBX].BufPtr
  127.     JMP    @@cont
  128.  
  129. @@fileNotOpenForInput:
  130.     CMP    EAX,offset Input
  131.     JE    @@openInput
  132. @@notOpenError:
  133.     MOV    EAX,104
  134.         CALL    SetInOutRes
  135.     JMP    @@exit
  136.  
  137. @@openInput:
  138.     CALL    _ResetText
  139.     CMP    [EBX].Mode,fmInput
  140.     JE    @@isOpenNow
  141.     JMP    @@notOpenError
  142.  
  143. ReadLine ENDP
  144.  
  145.  
  146.  
  147.  
  148.  
  149.     END
  150.