Metropoli BBS
VIEWER: fputc.asm MODE: TEXT (ASCII)
;****************************************************************************
; Filename: FPUTC.ASM
;   Author: Adam Seychell
;  Version: 0.0
;  Created: 1995.Aug.11
;  Updated: -
;****************************************************************************
; Copyright Peter Andersson, 1994-1995.
; All rights reserved.
;****************************************************************************
; Function: char @fputc(char,  FILE * stream)
;  Comment: writes a single character to file stream.
;    Input: Eax = pointer to opened file stream.
;    Input: Dl = character to write.
;   Output: Eax = character written to file/device. Returns EOF on error.
;****************************************************************************

        Include STDDEF.INC


Extrn __UpdateBuffer:Near

        Codeseg

Proc  fputc, 2
        Push    Eax
;        Test    [Edx+FILE._mode],2          ; Error if not writable
;        Jz      @@EOF
;        And     [Edx+FILE._mode],NOT 1      ; clear readable flag


        Mov     Ecx, [edx+FILE._position]
        Add     Ecx, [edx+FILE._base]
        Mov     [ecx],Al                    ; Put character in buffer.
        Inc     [edx+FILE._position]

        Mov     Ecx, [edx+FILE._position]
        Cmp     Ecx, [edx+FILE._buffersize]
        Jb      @@NoUpdate1                 ; flush buffer when full.
        Mov     Eax,Edx
        Call    @fflush
        And     Eax,Eax
        Jnz     @@EOF
@@NoUpdate1:
        Pop     Eax
        And     Eax,0FFh
        Ret

@@EOF:
        Pop     Eax
        Mov     Eax,EOF
        Ret

Endp

        End
[ RETURN TO DIRECTORY ]