home *** CD-ROM | disk | FTP | other *** search
/ Chip 1997 April / Chip_1997-04_cd.bin / prezent / cb / data.z / FILESIZE.ASM < prev    next >
Assembly Source File  |  1997-01-16  |  1KB  |  64 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    GetFileSize:NEAR, GetLastError:NEAR, SetInOutRes:NEAR, InOutError:NEAR
  17.  
  18.     PUBLIC    _FileSize
  19.  
  20.     .CODE
  21.  
  22. ;    PROCEDURE _FileSize( f: File );
  23.  
  24. _FileSize PROC
  25.  
  26. ; ->    EAX    Pointer to file variable
  27. ; <-    EAX    File size in records
  28.  
  29.     PUSH    EBX
  30.     MOV    EBX,EAX
  31.  
  32.     MOV    EDX,[EBX].Mode        ; check whether file is open
  33.     SUB    EDX,fmInput
  34.     CMP    EDX,fmInOut-fmInput
  35.     JA    @@fileNotOpen
  36.  
  37.     PUSH    0            ; get file size from OS
  38.     PUSH    [EBX].Handle
  39.     CALL    GetFileSize
  40.     CMP    EAX,-1
  41.     JZ    @@error
  42.  
  43.     XOR    EDX,EDX
  44.     DIV    [EBX].RecSize
  45.  
  46. @@exit:
  47.     POP    EBX
  48.     RET
  49.  
  50. @@error:
  51.     CALL    InOutError
  52.     OR    EAX,-1
  53.     JMP    @@exit
  54.  
  55. @@fileNotOpen:
  56.     MOV    EAX,103
  57.         CALL    SetInOutRes
  58.     OR    EAX,-1
  59.     JMP    @@exit
  60.  
  61. _FileSize ENDP
  62.  
  63.     END
  64.