Annotation of 43BSDTahoe/lib/libc/stdio/stdio.vax/gets.s, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1985 Regents of the University of California.
        !             3:  * All rights reserved.
        !             4:  *
        !             5:  * Redistribution and use in source and binary forms are permitted
        !             6:  * provided that the above copyright notice and this paragraph are
        !             7:  * duplicated in all such forms and that any documentation,
        !             8:  * advertising materials, and other materials related to such
        !             9:  * distribution and use acknowledge that the software was developed
        !            10:  * by the University of California, Berkeley.  The name of the
        !            11:  * University may not be used to endorse or promote products derived
        !            12:  * from this software without specific prior written permission.
        !            13:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
        !            14:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
        !            15:  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        !            16:  */
        !            17: 
        !            18: #if defined(LIBC_SCCS) && !defined(lint)
        !            19:        .asciz "@(#)gets.s      5.4 (Berkeley) 6/27/88"
        !            20: #endif /* LIBC_SCCS and not lint */
        !            21: 
        !            22: /*
        !            23:  * char *gets(s);
        !            24:  * char *s;
        !            25:  *
        !            26:  * argument: a target string
        !            27:  * side effects: reads bytes up to and including a newline from the
        !            28:  *     standard input into the target string and replaces the newline
        !            29:  *     with a null to null-terminate the string.
        !            30:  * result: the target string if successful, 0 otherwise.
        !            31:  */
        !            32: 
        !            33: #include "DEFS.h"
        !            34: 
        !            35: #define                NL      0xa
        !            36: 
        !            37: ENTRY(gets, R11|R10)
        !            38: 
        !            39: #define                S       r11
        !            40:        movl    4(ap),S
        !            41: #define                IPTR    r10
        !            42: #define                _CNT
        !            43: #define                _PTR    4
        !            44: #define                _BASE   8
        !            45: #define                _BUFSIZ 12
        !            46: #define                _FLAG   16
        !            47:        movab   __iob,IPTR
        !            48: 
        !            49: #define                OLD_S   4(ap)
        !            50: 
        !            51:        /*
        !            52:         * If no characters, call _filbuf() to get some.
        !            53:         */
        !            54:        tstl    _CNT(IPTR)
        !            55:        jgtr    Lscan
        !            56: 
        !            57: Lloop:
        !            58:        pushl   IPTR
        !            59:        calls   $1,__filbuf
        !            60:        tstl    r0                      /* What did _filbuf() return? */
        !            61:        jlss    Leof
        !            62:        cmpb    r0,$NL
        !            63:        jneq    1f
        !            64:        clrb    (S)
        !            65:        jbr     Lret
        !            66: 1:
        !            67:        movb    r0,(S)+                 /* Save the returned character */
        !            68:        tstl    _BASE(IPTR)             /* Is input buffered? */
        !            69:        jeql    Lloop
        !            70: 
        !            71:        /*
        !            72:         * Look for a newline in the buffer.
        !            73:         */
        !            74: Lscan:
        !            75:        locc    $NL,_CNT(IPTR),*_PTR(IPTR)
        !            76:        jeql    Lagain
        !            77: 
        !            78:        /*
        !            79:         * Success -- copy the data and return.
        !            80:         */
        !            81:        subl3   r0,_CNT(IPTR),r2
        !            82:        subl2   r2,_CNT(IPTR)
        !            83:        movc3   r2,*_PTR(IPTR),(S)      /* Copy the data */
        !            84:        clrb    (r3)
        !            85:        movl    r1,_PTR(IPTR)
        !            86:        decl    _CNT(IPTR)              /* Skip the newline */
        !            87:        incl    _PTR(IPTR)
        !            88: 
        !            89:        /*
        !            90:         * Normal return.
        !            91:         */
        !            92: Lret:
        !            93:        movl    OLD_S,r0
        !            94:        ret
        !            95: 
        !            96:        /*
        !            97:         * If we run out of characters, copy the buffer and loop.
        !            98:         */
        !            99: Lagain:
        !           100:        movc3   _CNT(IPTR),*_PTR(IPTR),(S)      /* Copy the data */
        !           101:        movl    r3,S
        !           102:        movl    _BASE(IPTR),_PTR(IPTR)          /* Reset stdio */
        !           103:        clrl    _CNT(IPTR)
        !           104:        jbr     Lloop
        !           105: 
        !           106:        /*
        !           107:         * End of file?  Check to see if we copied any data.
        !           108:         */
        !           109: Leof:
        !           110:        cmpl    S,OLD_S
        !           111:        jeql    Lerror
        !           112:        clrb    (S)
        !           113:        jbr     Lret
        !           114: 
        !           115:        /*
        !           116:         * Error/eof return -- null pointer.
        !           117:         */
        !           118: Lerror:
        !           119:        clrl    r0
        !           120:        ret

unix.superglobalmegacorp.com

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