; ******************************************************* ; * * ; * 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