home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l040 / 13.ddi / RTLSYS.ZIP / FFUN.ASM < prev    next >
Encoding:
Assembly Source File  |  1992-10-28  |  1.6 KB  |  123 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Turbo Pascal Run-time Library                   *
  5. ; *    File Support Functions                *
  6. ; *                            *
  7. ; *     Copyright (c) 1988,92 Borland International     *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    FFUN
  12.  
  13.     INCLUDE    SE.ASM
  14.  
  15. DATA    SEGMENT    WORD PUBLIC
  16.  
  17. ; Externals
  18.  
  19.     EXTRN    InOutRes:WORD
  20.  
  21. DATA    ENDS
  22.  
  23. CODE    SEGMENT    BYTE PUBLIC
  24.  
  25.     ASSUME    CS:CODE,DS:DATA
  26.  
  27. ; Externals
  28.  
  29.     EXTRN    LongDiv:NEAR
  30.  
  31. ; Publics
  32.  
  33.     PUBLIC    GetFPos,GetFSize,GetFEof
  34.  
  35. ; FilePos standard function
  36.  
  37. GetFPos:
  38.  
  39.     CALL    FileData
  40.     JC    @@1
  41.     MOV    CX,ES:[DI].fBufSize
  42.     CMP    CX,1
  43.     JE    @@1
  44.     XOR    BX,BX
  45.     PUSH    CS
  46.     CALL    LongDiv
  47. @@1:    RETF    4
  48.  
  49. ; FileSize standard function
  50.  
  51. GetFSize:
  52.  
  53.     CALL    FileData
  54.     JC    @@1
  55.     MOV    AX,CX
  56.     MOV    DX,BX
  57.     MOV    CX,ES:[DI].fBufSize
  58.     CMP    CX,1
  59.     JE    @@1
  60.     XOR    BX,BX
  61.     PUSH    CS
  62.     CALL    LongDiv
  63. @@1:    RETF    4
  64.  
  65. ; Eof standard function
  66.  
  67. GetFEof:
  68.  
  69.     CALL    FileData
  70.     JC    @@1
  71.     SUB    AX,CX
  72.     SBB    DX,BX
  73.     JC    @@1
  74.     MOV    AL,1
  75.     RETF    4
  76. @@1:    XOR    AL,AL
  77.     RETF    4
  78.  
  79. ; Get file data
  80. ; Out    ES:DI = File record pointer
  81. ;    DX:AX = File position
  82. ;    BX:CX = File size
  83. ;    CF    = 1 if not open
  84.  
  85. FileData:
  86.  
  87.     MOV    BX,SP
  88.     LES    DI,SS:[BX+6]
  89.     CMP    ES:[DI].fMode,fmInOut
  90.     JNE    @@1
  91.     XOR    CX,CX
  92.     XOR    DX,DX
  93.     MOV    BX,ES:[DI].fHandle
  94.     MOV    AX,dosSeek*256+1
  95.     INT    DOS
  96.     PUSH    DX
  97.     PUSH    AX
  98.     XOR    CX,CX
  99.     XOR    DX,DX
  100.     MOV    BX,ES:[DI].fHandle
  101.     MOV    AX,dosSeek*256+2
  102.     INT    DOS
  103.     POP    BX
  104.     POP    CX
  105.     PUSH    DX
  106.     PUSH    AX
  107.     MOV    DX,BX
  108.     MOV    BX,ES:[DI].fHandle
  109.     MOV    AX,dosSeek*256
  110.     INT    DOS
  111.     POP    CX
  112.     POP    BX
  113.     RET
  114. @@1:    MOV    InOutRes,103
  115.     XOR    AX,AX
  116.     XOR    DX,DX
  117.     STC
  118.     RET
  119.  
  120. CODE    ENDS
  121.  
  122.     END
  123.