Annotation of 3BSD/cmd/px/31write.s, revision 1.1.1.1

1.1       root        1: #
                      2: # 31write.s
                      3: #
                      4: # WRITE OPERATIONS
                      5: #
                      6: _PUT:
                      7:        incl    r10
                      8:        bbc     $fWRITE,FUNIT(r7),ewriteit
                      9:        pushl   FBUF(r7)        #stream
                     10:        pushl   $1              #number of items
                     11:        pushl   FSIZE(r7)       #item size
                     12:        pushl   r7              #ptr to data
                     13:        calls   $4,_fwrite
                     14: cleanup:
                     15:        movl    FBUF(r7),r5     #ptr to FILE
                     16:        bbs     $ioERR,FLAG(r5),ewrite
                     17:        cmpl    r7,$stdout      #check for output to stdout
                     18:        bneq    l3101
                     19:        tstw    _bufopt         #check for buffering on stdout
                     20:        bneq    l3101
                     21:        pushl   r5              #if unbuffered then flush
                     22:        calls   $1,_fflush
                     23: l3101:
                     24:        jmp     (r8)
                     25: ewriteit:
                     26:        movw    $EWRITEIT,_perrno
                     27:        jbr     error
                     28: ewrite:
                     29:        movw    $EWRITE,_perrno
                     30:        jbr     error
                     31: 
                     32: _WRITEF:
                     33:        cvtbl   (r10)+,r6       #r6 has length of format string
                     34:        cvtwl   (r10)+,r5       #r5 has number of longword arguements
                     35: fentry:
                     36:        bbc     $fWRITE,FUNIT(r7),ewriteit
                     37:        pushal  (sp)[r5]        #addr of format string
                     38:        pushl   FBUF(r7)        #stream
                     39:        addl2   $2,r5           #r5 has total number of arguements
                     40:        calls   r5,_fprintf     #output formatted data
                     41:        addl2   r6,sp           #pop format string
                     42:        jbr     cleanup
                     43: 
                     44: _WRITLN:
                     45:        aobleq  LLIMIT(r7),LCOUNT(r7),l3105
                     46:        movw    $ELLIMIT,_perrno
                     47:        jbr     error
                     48: l3105:
                     49:        movw    $linefeed,-(sp) #push a linefeed
                     50:        clrl    r6
                     51:        cmpl    r7,$stdout      #check for flushing
                     52:        bneq    l3102
                     53:        cmpw    $1,_bufopt      #check for eoln flushing
                     54:        bneq    l3102
                     55:        incl    r6              #set flush request
                     56:        brb     l3102
                     57: _PAGE:
                     58:        movw    $formfeed,-(sp) #push a formfeed
                     59: _WRITEC:
                     60:        clrl    r6
                     61: l3102:
                     62:        incl    r10
                     63:        jbc     $fWRITE,FUNIT(r7),ewriteit
                     64:        cvtwl   (sp)+,r2        #hold data
                     65:        pushl   FBUF(r7)        #stream
                     66:        pushl   r2              #push data
                     67:        calls   $2,_fputc
                     68:        jlbc    r6,cleanup      #if no flush request, normal exit
                     69:        movl    FBUF(r7),r5
                     70:        jbs     $ioERR,FLAG(r5),ewrite  #check for I/O error
                     71:        pushl   r5              #flush
                     72:        calls   $1,_fflush
                     73:        jmp     (r8)
                     74: 
                     75: _WRITES:
                     76:        cvtbl   (r10)+,r5       #r5 has length of format string
                     77:        cvtwl   (r10)+,r6       #r6 has length of data
                     78: sentry:
                     79:        jbc     $fWRITE,FUNIT(r7),ewriteit
                     80:        addl2   sp,r6           #r6 pts to format string
                     81:        pushl   sp              #ptr to data
                     82:        pushl   r6              #ptr to format string
                     83:        addl2   r5,r6           #r6 points to cleared top of stack
                     84:        pushl   FBUF(r7)        #stream
                     85:        calls   $3,_fprintf     #output string
                     86:        movl    r6,sp           #pop data and format string
                     87:        jbr     cleanup
                     88: 
                     89: _WRITEB:
                     90:        cvtbl   (r10)+,r6       #r6 has length of format string
                     91: bentry:
                     92:        jbc     $fWRITE,FUNIT(r7),ewriteit
                     93:        movw    (sp)+,r0        #push addr of appropriate string
                     94:        beql    l3103
                     95:        pushal  s_true
                     96:        brb     l3104
                     97: l3103:
                     98:        pushal  s_false
                     99: l3104:
                    100:        pushal  4(sp)           #addr of format string
                    101:        pushl   FBUF(r7)        #stream
                    102:        calls   $3,_fprintf     #print boolean
                    103:        addl2   r6,sp           #pop format string
                    104:        jbr     cleanup
                    105: 
                    106: s_true:        .byte   't,'r,'u,'e,linefeed,0
                    107: s_false:.byte  'f,'a,'l,'s,'e,linefeed,0

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.