home *** CD-ROM | disk | FTP | other *** search
/ Chip 1997 April / Chip_1997-04_cd.bin / prezent / cb / data.z / WRITEREC.ASM < prev    next >
Assembly Source File  |  1997-01-16  |  1KB  |  80 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.     .386
  14.     .MODEL    FLAT
  15.  
  16.     EXTRN    WriteFile:NEAR, GetLastError:NEAR, SetInOutRes:NEAR
  17.  
  18.     PUBLIC    _WriteRec
  19.  
  20.     .CODE
  21.  
  22. ;    PROCEDURE _WriteRec( f: File; buffer: Pointer );
  23.  
  24. _WriteRec PROC
  25.  
  26. ; ->    EAX    Pointer to file variable
  27. ;    EDX    Pointer to buffer
  28. ; <-    EAX    Pointer to file variable
  29.     PUSH    EBX
  30.  
  31.     MOV    EBX,EAX
  32.  
  33.     MOV    EAX,[EAX].Mode
  34.     SUB    EAX,fmOutput
  35.     CMP    EAX,fmInOut-fmOutput    ; File must be fmInOut or fmOutput
  36.     JA    @@fileNotOpen
  37.  
  38. ;    WriteFile(f.Handle, buffer, f.RecSize, @result, Nil);
  39.  
  40.     PUSH    0            ; space for OS result
  41.     MOV    EAX,ESP
  42.  
  43.     PUSH    0            ; pass lpOverlapped
  44.     PUSH    EAX            ; pass @result
  45.  
  46.     PUSH    [EBX].RecSize        ; pass nNumberOfBytesToRead
  47.  
  48.     PUSH    EDX            ; pass lpBuffer
  49.     PUSH    [EBX].Handle        ; pass hFile
  50.     CALL    WriteFile
  51.     POP    EDX            ; pop result
  52.     DEC    EAX            ; check EAX = TRUE
  53.     JNZ    @@error
  54.  
  55.     CMP    EDX,[EBX].RecSize    ; result = f.RecSize ?
  56.     JNE    @@writeError
  57. @@exit:
  58.     MOV    EAX,EBX
  59.     POP    EBX
  60.  
  61.     RET
  62.  
  63. @@error:
  64.     CALL    GetLastError
  65. @@errExit:
  66.         CALL    SetInOutRes
  67.     JMP    @@exit
  68.  
  69. @@fileNotOpen:
  70.     MOV    EAX,5
  71.     JMP    @@errExit
  72.  
  73. @@writeError:
  74.     MOV    EAX,101
  75.     JMP    @@errExit
  76.  
  77. _WriteRec ENDP
  78.  
  79.     END
  80.