home *** CD-ROM | disk | FTP | other *** search
- include compiler.inc
-
- ttl FPUTC, 1.05, 10-16-86, jwk
-
- ;char output to stream
-
- dseg
- cseg
-
- xtfs <write,$strhand>
-
- alias fputc,putc
-
- procdef fputc, <<chrf, word>, <streamp, ptr>>
- pushreg
- pushds
-
- callit $strhand <<streamp,ptr>>
- mov di,ax ;handle to DI
- inc ax
- jz reterr
-
- test bl,2 ;check MODE bits
- jz seterr ;not open for writing
- test bl,10h
- jnz reterr ;error bit was set!
- ;
- test bl,4 ;check for RAW
- jnz notraw ;yes, don't translate
- mov ax,chrf ;get char for translate test
- cmp ax,10
- jnz notnl
- mov ax,13 ;send CR before each LF
- callit fputc,<<streamp,ptr>,<ax,reg>>
- jmp short notraw
- ;
- notnl: cmp ax,-1
- jnz notraw
- mov chrf,1ah ;EOF marker
- mov chrf,ax
- notraw: lea si,chrf
- mov bx,1 ;just one
- callit write,<<bx,reg>,<si,preg,ss>,<di,reg>>;
- ldptr si,streamp
- dec ax
- jz fini ;was 1, all OK
- inc ax
- jz seteof ;was 0, EOF; else is error
- seterr:
- or byte ptr 2[si],10h
- seteof:
- or byte ptr 2[si],08h
- reterr:
- mov chrf,-1 ;change return value to EOF
- ;
- fini: mov ax,chrf ;return value
- popds
- pret
-
- pend fputc
-
- finish
-
- end
-