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

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

unix.superglobalmegacorp.com

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