Annotation of researchv8dc/cmd/uucp/line.c, revision 1.1.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.