Annotation of 3BSD/cmd/px/31write.s, revision 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.