home *** CD-ROM | disk | FTP | other *** search
-
- ; *******************************************************
- ; * *
- ; * Turbo Pascal Run-time Library *
- ; * Standard Textfile Open Routine *
- ; * *
- ; * Copyright (c) 1988,92 Borland International *
- ; * *
- ; *******************************************************
-
- TITLE TFIO
-
- INCLUDE SE.ASM
-
- CODE SEGMENT BYTE PUBLIC
-
- ASSUME CS:CODE
-
- ; Externals
-
- EXTRN FileRead:FAR,FileWrDev:FAR,FileWrite:FAR
- EXTRN FileClose:FAR
-
- ; Publics
-
- PUBLIC FileOpen
-
- ; Standard textfile open procedure
-
- FileOpen:
-
- MOV BX,SP
- PUSH DS
- LDS DI,SS:[BX+4]
- XOR CX,CX
- MOV [DI].fHandle,CX
- MOV AX,dosOpen*256
- CMP [DI].fMode,fmInput
- JE @@1
- MOV AL,2
- INC [DI].fHandle
- CMP [DI].fMode,fmInOut
- JE @@1
- MOV AH,dosCreate
- @@1: CMP [DI].fName,0
- JE @@2
- LEA DX,[DI].fName
- INT DOS
- JC @@6
- MOV [DI].fHandle,AX
- @@2: MOV AX,OFFSET FileRead
- MOV DX,SEG FileRead
- XOR CX,CX
- XOR BX,BX
- CMP [DI].fMode,fmInput
- JE @@5
- MOV BX,[DI].fHandle
- MOV AX,dosIOCtl*256
- INT DOS
- TEST DL,80H
- MOV AX,OFFSET FileWrDev
- MOV DX,SEG FileWrDev
- MOV CX,AX
- MOV BX,DX
- JNE @@4
- CMP [DI].fMode,fmInOut
- JNE @@3
- CALL FileAppend
- @@3: MOV AX,OFFSET FileWrite
- MOV DX,SEG FileWrite
- XOR CX,CX
- XOR BX,BX
- @@4: MOV [DI].fMode,fmOutput
- @@5: MOV [DI].fInOutProc.ofs,AX
- MOV [DI].fInOutProc.seg,DX
- MOV [DI].fFlushProc.ofs,CX
- MOV [DI].fFlushProc.seg,BX
- MOV [DI].fCloseProc.ofs,OFFSET FileClose
- MOV [DI].fCloseProc.seg,SEG FileClose
- XOR AX,AX
- @@6: POP DS
- RETF 4
-
- ; Prepare textfile for appending
-
- FileAppend:
-
- XOR DX,DX
- XOR CX,CX
- MOV BX,[DI].fHandle
- MOV AX,dosSeek*256+2
- INT DOS
- SUB AX,128
- SBB DX,0
- JNC @@1
- XOR AX,AX
- XOR DX,DX
- @@1: MOV CX,DX
- MOV DX,AX
- MOV BX,[DI].fHandle
- MOV AX,dosSeek*256
- INT DOS
- LEA DX,[DI].fBuffer
- MOV CX,128
- MOV BX,[DI].fHandle
- MOV AH,dosRead
- INT DOS
- JNC @@2
- XOR AX,AX
- @@2: XOR BX,BX
- @@3: CMP BX,AX
- JE @@5
- CMP [DI].fBuffer[BX],eof
- JE @@4
- INC BX
- JMP @@3
- @@4: MOV DX,BX
- SUB DX,AX
- MOV CX,-1
- MOV BX,[DI].fHandle
- MOV AX,dosSeek*256+2
- INT DOS
- XOR CX,CX
- MOV BX,[DI].fHandle
- MOV AH,dosWrite
- INT DOS
- @@5: RET
-
- CODE ENDS
-
- END
-