Annotation of researchv8dc/cmd/uucp/line.c, revision 1.1

1.1     ! root        1: /*     %W%
        !             2: */
        !             3: #include "uucp.h"
        !             4: VERSION(%W%);
        !             5: 
        !             6: static struct sg_spds {
        !             7:        int     sp_val,
        !             8:                sp_name;
        !             9: } spds[] = {
        !            10:        { 300,  B300},
        !            11:        { 600,  B600},
        !            12:        {1200, B1200},
        !            13:        {2400, B2400},
        !            14:        {4800, B4800},
        !            15:        {9600, B9600},
        !            16: #ifdef EXTA
        !            17:        {19200, EXTA},
        !            18: #endif
        !            19: #ifdef B19200
        !            20:        {19200, B19200},
        !            21: #endif
        !            22: #ifdef B38400
        !            23:        {38400, B38400},
        !            24: #endif
        !            25:        {0,    0}
        !            26: };
        !            27: 
        !            28: #define PACKSIZE       64
        !            29: #define HEADERSIZE     6
        !            30: #define SNDFILE        'S'
        !            31: #define RCVFILE 'R'
        !            32: #define RESET  'X'
        !            33: 
        !            34: int    linebaudrate = 0;       /* for speedup hook in pk (unused in ATTSV) */
        !            35: 
        !            36: #ifdef ATTSV
        !            37: 
        !            38: static struct termio Savettyb;
        !            39: /*
        !            40:  * set speed/echo/mode...
        !            41:  *     tty     -> terminal name
        !            42:  *     spwant  -> speed
        !            43:  *     type    -> type
        !            44:  *
        !            45:  *     if spwant == 0, speed is untouched
        !            46:  *     type is unused, but needed for compatibility
        !            47:  *
        !            48:  * return:  
        !            49:  *     none
        !            50:  */
        !            51: fixline(tty, spwant, type)
        !            52: int    tty, spwant, type;
        !            53: {
        !            54:        register struct sg_spds *ps;
        !            55:        struct termio           ttbuf;
        !            56:        int                     speed = -1;
        !            57: 
        !            58:        DEBUG(6, "fixline(%d, ", tty);
        !            59:        DEBUG(6, "%d)\n", spwant);
        !            60:        if (ioctl(tty, TCGETA, &ttbuf) != 0)
        !            61:                return;
        !            62:        if (spwant > 0) {
        !            63:                for (ps = spds; ps->sp_val; ps++)
        !            64:                        if (ps->sp_val == spwant) {
        !            65:                                speed = ps->sp_name;
        !            66:                                break;
        !            67:                        }
        !            68:                ASSERT(speed >= 0, "BAD SPEED", "", speed);
        !            69:                ttbuf.c_cflag = speed;
        !            70:        } else
        !            71:                ttbuf.c_cflag &= CBAUD;
        !            72:        ttbuf.c_iflag = ttbuf.c_oflag = ttbuf.c_lflag = (ushort)0;
        !            73: 
        !            74: #ifdef NO_MODEM_CTRL
        !            75:        /*   CLOCAL may cause problems on pdp11s with DHs */
        !            76:        if (type == D_DIRECT) {
        !            77:                DEBUG(4, "fixline - direct\n", "");
        !            78:                ttbuf.c_cflag |= CLOCAL;
        !            79:        } else
        !            80: #endif NO_MODEM_CTRL
        !            81: 
        !            82:                ttbuf.c_cflag &= ~CLOCAL;
        !            83:        ttbuf.c_cflag |= (CS8 | CREAD | (speed ? HUPCL : 0));
        !            84:        ttbuf.c_cc[VMIN] = HEADERSIZE;
        !            85:        ttbuf.c_cc[VTIME] = 1;
        !            86:        
        !            87:        ASSERT(ioctl(tty, TCSETA, &ttbuf) >= 0,
        !            88:            "RETURN FROM fixline ioctl", "", errno);
        !            89:        return;
        !            90: }
        !            91: 
        !            92: sethup(dcf)
        !            93: int    dcf;
        !            94: {
        !            95:        struct termio ttbuf;
        !            96: 
        !            97:        if (ioctl(dcf, TCGETA, &ttbuf) != 0)
        !            98:                return;
        !            99:        if (!(ttbuf.c_cflag & HUPCL)) {
        !           100:                ttbuf.c_cflag |= HUPCL;
        !           101:                (void) ioctl(dcf, TCSETA, &ttbuf);
        !           102:        }
        !           103: }
        !           104: 
        !           105: genbrk(fn)
        !           106: register int   fn;
        !           107: {
        !           108:        if (isatty(fn)) 
        !           109:                (void) ioctl(fn, TCSBRK, 0);
        !           110: }
        !           111: 
        !           112: 
        !           113: /*
        !           114:  * optimize line setting for sending or receiving files
        !           115:  * return:
        !           116:  *     none
        !           117:  */
        !           118: setline(type)
        !           119: register char  type;
        !           120: {
        !           121:        static struct termio tbuf;
        !           122:        
        !           123:        if (ioctl(Ifn, TCGETA, &tbuf) != 0)
        !           124:                return;
        !           125:        DEBUG(2, "setline - %c\n", type);
        !           126:        switch (type) {
        !           127:        case RCVFILE:
        !           128:                if (tbuf.c_cc[VMIN] != PACKSIZE) {
        !           129:                    tbuf.c_cc[VMIN] = PACKSIZE;
        !           130:                    (void) ioctl(Ifn, TCSETAW, &tbuf);
        !           131:                }
        !           132:                break;
        !           133: 
        !           134:        case SNDFILE:
        !           135:        case RESET:
        !           136:                if (tbuf.c_cc[VMIN] != HEADERSIZE) {
        !           137:                    tbuf.c_cc[VMIN] = HEADERSIZE;
        !           138:                    (void) ioctl(Ifn, TCSETAW, &tbuf);
        !           139:                }
        !           140:                break;
        !           141:        }
        !           142: }
        !           143: 
        !           144: savline()
        !           145: {
        !           146:        int ret;
        !           147: 
        !           148:        ret = ioctl(0, TCGETA, &Savettyb);
        !           149:        Savettyb.c_cflag = (Savettyb.c_cflag & ~CS8) | CS7;
        !           150:        Savettyb.c_oflag |= OPOST;
        !           151:        Savettyb.c_lflag |= (ISIG|ICANON|ECHO);
        !           152:        return(ret);
        !           153: }
        !           154: 
        !           155: /***
        !           156:  *     sytfixline(tty, spwant) set speed/echo/mode...
        !           157:  *     int tty, spwant;
        !           158:  *
        !           159:  *     return codes:  none
        !           160:  */
        !           161: 
        !           162: sytfixline(tty, spwant)
        !           163: int tty, spwant;
        !           164: {
        !           165:        struct termio ttbuf;
        !           166:        struct sg_spds *ps;
        !           167:        int speed = -1;
        !           168:        int ret;
        !           169: 
        !           170:        for (ps = spds; ps->sp_val >= 0; ps++)
        !           171:                if (ps->sp_val == spwant)
        !           172:                        speed = ps->sp_name;
        !           173:        DEBUG(4, "sytfixline - speed= %d\n", speed);
        !           174:        ASSERT(speed >= 0, "BAD SPEED", "", speed);
        !           175:        (void) ioctl(tty, TCGETA, &ttbuf);
        !           176:        ttbuf.c_iflag = (ushort)0;
        !           177:        ttbuf.c_oflag = (ushort)0;
        !           178:        ttbuf.c_lflag = (ushort)0;
        !           179:        ttbuf.c_cflag = speed;
        !           180:        ttbuf.c_cflag |= (CS8|CLOCAL);
        !           181:        ttbuf.c_cc[VMIN] = 6;
        !           182:        ttbuf.c_cc[VTIME] = 1;
        !           183:        ret = ioctl(tty, TCSETAW, &ttbuf);
        !           184:        ASSERT(ret >= 0, "RETURN FROM sytfixline", "", ret);
        !           185:        return;
        !           186: }
        !           187: 
        !           188: sytfix2line(tty)
        !           189: int tty;
        !           190: {
        !           191:        struct termio ttbuf;
        !           192:        int ret;
        !           193: 
        !           194:        (void) ioctl(tty, TCGETA, &ttbuf);
        !           195:        ttbuf.c_cflag &= ~CLOCAL;
        !           196:        ttbuf.c_cflag |= CREAD|HUPCL;
        !           197:        ret = ioctl(tty, TCSETAW, &ttbuf);
        !           198:        ASSERT(ret >= 0, "RETURN FROM sytfix2line", "", ret);
        !           199:        return;
        !           200: }
        !           201: 
        !           202: 
        !           203: restline()
        !           204: {
        !           205:        return(ioctl(0, TCSETA, &Savettyb));
        !           206: }
        !           207: 
        !           208: #else !ATTSV
        !           209: 
        !           210: static struct sgttyb Savettyb;
        !           211: 
        !           212: /***
        !           213:  *     fixline(tty, spwant, type)      set speed/echo/mode...
        !           214:  *     int tty, spwant;
        !           215:  *
        !           216:  *     if spwant == 0, speed is untouched
        !           217:  *     type is unused, but needed for compatibility
        !           218:  *
        !           219:  *     return codes:  none
        !           220:  */
        !           221: 
        !           222: /*ARGSUSED*/
        !           223: fixline(tty, spwant, type)
        !           224: int tty, spwant, type;
        !           225: {
        !           226:        struct sgttyb   ttbuf;
        !           227:        struct sg_spds  *ps;
        !           228:        int              speed = -1;
        !           229: 
        !           230:        DEBUG(6, "fixline(%d, ", tty);
        !           231:        DEBUG(6, "%d)\n", spwant);
        !           232: 
        !           233:        if (ioctl(tty, TIOCGETP, &ttbuf) != 0)
        !           234:                return;
        !           235:        if (spwant > 0) {
        !           236:                for (ps = spds; ps->sp_val; ps++)
        !           237:                        if (ps->sp_val == spwant) {
        !           238:                                speed = ps->sp_name;
        !           239:                                break;
        !           240:                        }
        !           241:                ASSERT(speed >= 0, "BAD SPEED", "", speed);
        !           242:                ttbuf.sg_ispeed = ttbuf.sg_ospeed = speed;
        !           243:        } else {
        !           244:                for (ps = spds; ps->sp_val; ps++)
        !           245:                        if (ps->sp_name == ttbuf.sg_ispeed) {
        !           246:                                spwant = ps->sp_val;
        !           247:                                break;
        !           248:                        }
        !           249:                ASSERT(spwant >= 0, "BAD SPEED", "", spwant);
        !           250:        }
        !           251:        ttbuf.sg_flags = (ANYP | RAW);
        !           252:        (void) ioctl(tty, TIOCSETP, &ttbuf);
        !           253:        (void) ioctl(tty, TIOCHPCL, STBNULL);
        !           254:        (void) ioctl(tty, TIOCEXCL, STBNULL);
        !           255:        linebaudrate = spwant;          /* for hacks in pk driver */
        !           256:        return;
        !           257: }
        !           258: 
        !           259: sethup(dcf)
        !           260: int    dcf;
        !           261: {
        !           262:        if (isatty(dcf)) 
        !           263:                (void) ioctl(dcf, TIOCHPCL, STBNULL);
        !           264: }
        !           265: 
        !           266: /***
        !           267:  *     genbrk          send a break
        !           268:  *
        !           269:  *     return codes;  none
        !           270:  */
        !           271: 
        !           272: genbrk(fn)
        !           273: {
        !           274:        if (isatty(fn)) {
        !           275:                (void) ioctl(fn, TIOCSBRK, 0);
        !           276: #ifndef V8
        !           277:                nap(HZ/10);                             /* 0.1 second break */
        !           278:                (void) ioctl(fn, TIOCCBRK, 0);
        !           279: #endif
        !           280:        }
        !           281:        return;
        !           282: }
        !           283: 
        !           284: /*
        !           285:  * V7 and RT aren't smart enough for this -- linebaudrate is the best
        !           286:  * they can do.
        !           287:  */
        !           288: /*ARGSUSED*/
        !           289: setline(dummy) { }
        !           290: 
        !           291: savline()
        !           292: {
        !           293:        int     ret;
        !           294: 
        !           295:        ret = ioctl(0, TIOCGETP, &Savettyb);
        !           296:        Savettyb.sg_flags |= ECHO;
        !           297:        Savettyb.sg_flags &= ~RAW;
        !           298:        return(ret);
        !           299: }
        !           300: 
        !           301: restline()
        !           302: {
        !           303:        return(ioctl(0, TIOCSETP, &Savettyb));
        !           304: }
        !           305: #endif

unix.superglobalmegacorp.com

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