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

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Turbo Pascal Run-time Library                   *
  5. ; *    Standard Textfile Open Routine            *
  6. ; *                            *
  7. ; *     Copyright (c) 1988,92 Borland International     *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    TFIO
  12.  
  13.     INCLUDE    SE.ASM
  14.  
  15. CODE    SEGMENT    BYTE PUBLIC
  16.  
  17.     ASSUME    CS:CODE
  18.  
  19. ; Externals
  20.  
  21.     EXTRN    FileRead:FAR,FileWrDev:FAR,FileWrite:FAR
  22.     EXTRN    FileClose:FAR
  23.  
  24. ; Publics
  25.  
  26.     PUBLIC    FileOpen
  27.  
  28. ; Standard textfile open procedure
  29.  
  30. FileOpen:
  31.  
  32.     MOV    BX,SP
  33.     PUSH    DS
  34.     LDS    DI,SS:[BX+4]
  35.     XOR    CX,CX
  36.     MOV    [DI].fHandle,CX
  37.     MOV    AX,dosOpen*256
  38.     CMP    [DI].fMode,fmInput
  39.     JE    @@1
  40.     MOV    AL,2
  41.     INC    [DI].fHandle
  42.     CMP    [DI].fMode,fmInOut
  43.     JE    @@1
  44.     MOV    AH,dosCreate
  45. @@1:    CMP    [DI].fName,0
  46.     JE    @@2
  47.     LEA    DX,[DI].fName
  48.     INT    DOS
  49.     JC    @@6
  50.     MOV    [DI].fHandle,AX
  51. @@2:    MOV    AX,OFFSET FileRead
  52.     MOV    DX,SEG FileRead
  53.     XOR    CX,CX
  54.     XOR    BX,BX
  55.     CMP    [DI].fMode,fmInput
  56.     JE    @@5
  57.     MOV    BX,[DI].fHandle
  58.     MOV    AX,dosIOCtl*256
  59.     INT    DOS
  60.     TEST    DL,80H
  61.     MOV    AX,OFFSET FileWrDev
  62.     MOV    DX,SEG FileWrDev
  63.     MOV    CX,AX
  64.     MOV    BX,DX
  65.     JNE    @@4
  66.     CMP    [DI].fMode,fmInOut
  67.     JNE    @@3
  68.     CALL    FileAppend
  69. @@3:    MOV    AX,OFFSET FileWrite
  70.     MOV    DX,SEG FileWrite
  71.     XOR    CX,CX
  72.     XOR    BX,BX
  73. @@4:    MOV    [DI].fMode,fmOutput
  74. @@5:    MOV    [DI].fInOutProc.ofs,AX
  75.     MOV    [DI].fInOutProc.seg,DX
  76.     MOV    [DI].fFlushProc.ofs,CX
  77.     MOV    [DI].fFlushProc.seg,BX
  78.     MOV    [DI].fCloseProc.ofs,OFFSET FileClose
  79.     MOV    [DI].fCloseProc.seg,SEG FileClose
  80.     XOR    AX,AX
  81. @@6:    POP    DS
  82.     RETF    4
  83.  
  84. ; Prepare textfile for appending
  85.  
  86. FileAppend:
  87.  
  88.     XOR    DX,DX
  89.     XOR    CX,CX
  90.     MOV    BX,[DI].fHandle
  91.     MOV    AX,dosSeek*256+2
  92.     INT    DOS
  93.     SUB    AX,128
  94.     SBB    DX,0
  95.     JNC    @@1
  96.     XOR    AX,AX
  97.     XOR    DX,DX
  98. @@1:    MOV    CX,DX
  99.     MOV    DX,AX
  100.     MOV    BX,[DI].fHandle
  101.     MOV    AX,dosSeek*256
  102.     INT    DOS
  103.     LEA    DX,[DI].fBuffer
  104.     MOV    CX,128
  105.     MOV    BX,[DI].fHandle
  106.     MOV    AH,dosRead
  107.     INT    DOS
  108.     JNC    @@2
  109.     XOR    AX,AX
  110. @@2:    XOR    BX,BX
  111. @@3:    CMP    BX,AX
  112.     JE    @@5
  113.     CMP    [DI].fBuffer[BX],eof
  114.     JE    @@4
  115.     INC    BX
  116.     JMP    @@3
  117. @@4:    MOV    DX,BX
  118.     SUB    DX,AX
  119.     MOV    CX,-1
  120.     MOV    BX,[DI].fHandle
  121.     MOV    AX,dosSeek*256+2
  122.     INT    DOS
  123.     XOR    CX,CX
  124.     MOV    BX,[DI].fHandle
  125.     MOV    AH,dosWrite
  126.     INT    DOS
  127. @@5:    RET
  128.  
  129. CODE    ENDS
  130.  
  131.     END
  132.