Annotation of 41BSD/cmd/px/30read.s, revision 1.1

1.1     ! root        1: #
        !             2: # Copyright (c) 1979 Regents of the University of California
        !             3: #
        !             4: # char sccsid[] = "@(#)30read.s 4.2 10/29/80";
        !             5: #
        !             6: # READ OPERATIONS
        !             7: #
        !             8: _GET:
        !             9:        incl    r10
        !            10:        calls   $0,_iosync      #insure that something is in the window
        !            11:        jbs     $fEOF,FUNIT(r7),eeof
        !            12:        bisw2   $SYNC,FUNIT(r7) #throw it away
        !            13:        jmp     (r8)
        !            14: eeof:
        !            15:        movw    $EPASTEOF,_perrno
        !            16:        jbr     error
        !            17: _FNIL:
        !            18:        incl    r10
        !            19:        movl    (sp),r0
        !            20:        jbs     $fWRITE,FUNIT(r0),l3002 #ignore sync of output files
        !            21:        movl    r7,r6
        !            22:        calls   $0,_unit        #do not discard arguement to unit on return
        !            23:        calls   $0,_iosync
        !            24:        jbs     $fEOF,FUNIT(r7),eeof
        !            25:        movl    r6,r7
        !            26:        movl    PFNAME(r7),_file
        !            27: l3002:
        !            28:        jmp     (r8)
        !            29: _READ4:
        !            30:        incl    r10
        !            31:        calls   $0,_unsync      #prepare input stream
        !            32:        pushl   $0              #space for answer
        !            33:        pushl   sp              #ptr to answer space
        !            34:        pushal  rd4             #ptr to input format
        !            35:        pushl   FBUF(r7)        #stream
        !            36:        calls   $3,_fscanf
        !            37:        cmpl    $1,r0
        !            38:        bneq    eiread
        !            39:        bisw2   $SYNC,FUNIT(r7)
        !            40:        jmp     (r8)
        !            41: eiread:
        !            42:        movw    $EBADINUM,_perrno
        !            43:        jbr     error
        !            44: _READ8:
        !            45:        incl    r10
        !            46:        calls   $0,_unsync      #prepare input stream
        !            47:        clrd    -(sp)           #space for answer
        !            48:        pushl   sp              #ptr to answer space
        !            49:        pushal  rd8             #ptr to input format
        !            50:        pushl   FBUF(r7)        #stream
        !            51:        calls   $3,_fscanf
        !            52:        cmpl    $1,r0
        !            53:        bneq    efread
        !            54:        bisw2   $SYNC,FUNIT(r7)
        !            55:        jmp     (r8)
        !            56: efread:
        !            57:        movw    $EBADFNUM,_perrno
        !            58:        jbr     error
        !            59: _READLN:
        !            60:        incl    r10
        !            61:        calls   $0,_iosync
        !            62:        jbs     $fEOLN,FUNIT(r7),l3005  #check for already at end of line
        !            63:        movab   -1024(sp),sp    #temp space
        !            64:        pushl   FBUF(r7)        #file
        !            65:        pushl   $1024           #buffer
        !            66:        pushal  8(sp)           #ptr to buffer
        !            67:        calls   $3,_fgets
        !            68:        movab   1024(sp),sp     #pop temp space
        !            69: l3005:
        !            70:        jbs     $fEOF,FUNIT(r7),eeof
        !            71:        bisw2   $SYNC,FUNIT(r7)
        !            72:        jmp     (r8)
        !            73: _READC:
        !            74:        incl    r10
        !            75:        calls   $0,_iosync
        !            76:        cvtbw   (r7),-(sp)
        !            77:        jbs     $fEOF,FUNIT(r7),eeof
        !            78:        bisw2   $SYNC,FUNIT(r7)
        !            79:        jmp     (r8)
        !            80: _READE:
        !            81:        incl    r10
        !            82:        calls   $0,_unsync      #push back char if present
        !            83:        subl2   $bufsze,sp      #allocate space for name
        !            84:        pushl   sp              #ptr to buffer
        !            85:        pushal  rden            #format string
        !            86:        pushl   FBUF(r7)        #FILE ptr
        !            87:        calls   $3,_fscanf      #read name
        !            88:        cmpl    r0,$1           #check for valid input
        !            89:        bneq    entfd
        !            90:        locc    $0,$bufsze,(sp) #find size of input
        !            91:        subl3   r0,$bufsze+1,r6 #r6 has length of input
        !            92:        addl3   (r10),ap,r5     #r5 points to candidate data
        !            93:        cvtwl   (r5)+,r4        #r4 has number of candidates
        !            94:        movaw   2(r5)[r4],r1    #r1 has addr of candidate name list
        !            95: l3006:
        !            96:        subw3   (r5)+,(r5),r0   #r0 has candidate length
        !            97:        cmpw    r0,r6           #check for correct length
        !            98:        bneq    l3007
        !            99:        cmpc3   r0,(r1),(sp)    #check for actual match
        !           100:        beql    l3008
        !           101: l3007:
        !           102:        addl2   r0,r1           #update ptr to next candidate
        !           103:        sobgtr  r4,l3006
        !           104: entfd:
        !           105:        addl2   $bufsze,sp      #deallocate buffer
        !           106:        addl2   $4,r10
        !           107:        movw    $ENUMNTFD,_perrno
        !           108:        jbr     error
        !           109: l3008:
        !           110:        addl2   $bufsze,sp      #deallocate buffer
        !           111:        addl3   (r10)+,ap,r0    #r0 has number of cases
        !           112:        subw3   r4,(r0),-(sp)   #push internal value
        !           113:        jmp     (r8)
        !           114: 
        !           115:        .set    bufsze,84
        !           116: rd4:   .asciz  "%ld"
        !           117: rd8:   .asciz  "%lf"
        !           118: rden:  .asciz  "%*[ \t\n]%80[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]",

unix.superglobalmegacorp.com

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