
; *******************************************************
; *                                                     *
; *     Turbo Pascal Runtime Library                    *
; *     Textfile String I/O                             *
; *                                                     *
; *     Copyright (C) 1988,92 Borland International     *
; *                                                     *
; *******************************************************

        TITLE   TSTR

        INCLUDE SE.ASM
DATA    SEGMENT WORD PUBLIC

; Externals

        EXTRN   LineBrk: Byte

DATA    ENDS

CODE    SEGMENT BYTE PUBLIC

        ASSUME  CS:CODE, DS:DATA

; Externals

        EXTRN   ReadText:NEAR,WriteBlanks:NEAR,WriteBuffer:NEAR

; Publics

        PUBLIC  ReadStr,WriteStr

; Read standard procedure (String)

        ARG     FileP,DWORD,1
        ARG     StrP,DWORD,1
        ARG     StrLen,WORD,1
        loc     LBr, byte, 1
ReadStr:

        ENTRY   WINFAR
        LES     BX,FileP
        mov     al, LineBrk
        mov     LBr, al
        MOV     AX,OFFSET CS:@@10
        MOV     CX,StrLen
        MOV     DI,StrP.ofs
        MOV     DX,StrP.seg
        INC     DI
        CALL    ReadText
        MOV     AX,DI
        LES     DI,StrP
        SUB     AX,DI
        DEC     AX
        STOSB
        EXIT    6

@@10:   LODSB
        cmp     al,LBr
        JE      @@11
        STOSB
        CMP     SI,BX
        LOOPNE  @@10
        JCXZ    @@12
        MOV     AX,OFFSET CS:@@10
        RET
@@11:   DEC     SI
@@12:   XOR     AX,AX
        RET

; Write standard procedure (String)

WriteStr:

        ARG     FileP,DWORD,1
        ARG     StrP,DWORD,1
        ARG     Width,WORD,1

        ENTRY   WINFAR
        LES     BX,StrP
        MOV     AL,ES:[BX]
        XOR     AH,AH
        LES     BX,FileP
        MOV     DX,Width
        SUB     DX,AX
        JLE     @@1
        PUSH    AX
        CALL    WriteBlanks
        POP     AX
@@1:    OR      AX,AX
        JE      @@2
        MOV     SI,StrP.ofs
        MOV     DX,StrP.seg
        INC     SI
        CALL    WriteBuffer
@@2:    EXIT    6

CODE    ENDS

        END
