[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]

    {
    MARCO MILTENBURG

    > One cannot seek in a Text File...

    Sure you can... For Dos, TextFiles are Really the same things as Typed
    Files, so why don't ask Dos ;-) ?  Try this one. F is a TextFile and n is the
    File-offset.
    }

    Procedure tSeek(Var f : Text; n : LongInt); Assembler;
    Asm
      push  DS
      push  BP

      lds   SI, f
      lodsw                            { handle }
      mov   BX, AX

      mov   CX, Word ptr [BP+8]
      mov   DX, Word ptr [BP+6]

      mov   AX, 4200h              {AL = 2, AH = 42}
      int   21h

      les   DI, f
      mov   AX, DI
      add   AX, 8
      mov   DI, AX

      lodsw                            { mode }
      lodsw                            { bufsize }
      mov   CX, AX                      { CX = number of Bytes to read }
      lodsw                            { private }
      lodsw                            { bufpos  }
      lodsw                            { bufend  }
      lodsw                            { offset of Pointer to Textbuf }
      mov   DX, AX                      { DX = offset of Textbuf }
      lodsw
      mov   DS, AX                      { DS = segment of Textbuf }
      mov   AH, 3Fh
      int   21h
      push  AX                         { Save AX on stack }

      les   DI, f                       { ES:DI points to f }
      mov   AX, DI                      { Move Pointer to position 8 }
      add   AX, 8
      mov   DI, AX

      mov   AX, 0                       { Bufpos = 0 }
      stosw
      pop   AX                         { Bufend = number of Bytes read }
      stosw

      pop   BP
      pop   DS
    end; { tSeek }

[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]