home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / proglc / tnylib.lzh / FPUTC.ASM < prev    next >
Encoding:
Assembly Source File  |  1986-10-16  |  1.1 KB  |  66 lines

  1. include compiler.inc
  2.  
  3.     ttl    FPUTC, 1.05, 10-16-86, jwk
  4.  
  5. ;char output to stream
  6.  
  7.     dseg
  8.     cseg
  9.  
  10.     xtfs    <write,$strhand>
  11.  
  12.     alias    fputc,putc
  13.  
  14.     procdef    fputc, <<chrf, word>, <streamp, ptr>>
  15.     pushreg
  16.     pushds
  17.  
  18.     callit    $strhand <<streamp,ptr>>
  19.     mov    di,ax            ;handle to DI
  20.     inc    ax
  21.     jz    reterr
  22.  
  23.     test    bl,2            ;check MODE bits
  24.     jz    seterr            ;not open for writing
  25.     test    bl,10h
  26.     jnz    reterr            ;error bit was set!
  27. ;
  28.     test    bl,4            ;check for RAW
  29.     jnz    notraw            ;yes, don't translate
  30.     mov    ax,chrf            ;get char for translate test
  31.     cmp    ax,10
  32.     jnz    notnl
  33.     mov    ax,13            ;send CR before each LF
  34.     callit    fputc,<<streamp,ptr>,<ax,reg>>
  35.     jmp    short    notraw
  36. ;
  37. notnl:    cmp    ax,-1
  38.     jnz    notraw
  39.     mov    chrf,1ah        ;EOF marker
  40.     mov    chrf,ax
  41. notraw:    lea    si,chrf
  42.     mov    bx,1            ;just one
  43.     callit    write,<<bx,reg>,<si,preg,ss>,<di,reg>>;
  44.     ldptr    si,streamp
  45.     dec    ax
  46.     jz    fini            ;was 1, all OK
  47.     inc    ax
  48.     jz    seteof            ;was 0, EOF; else is error
  49. seterr:
  50.     or    byte ptr 2[si],10h
  51. seteof:
  52.     or    byte ptr 2[si],08h
  53. reterr:
  54.     mov    chrf,-1            ;change return value to EOF
  55. ;
  56. fini:    mov    ax,chrf            ;return value
  57.     popds
  58.     pret
  59.  
  60.     pend    fputc
  61.  
  62.     finish
  63.  
  64.     end
  65. 
  66.