Annotation of coherent/a/usr/bob/uusrc/dcp/dcpunix.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * dcpunix.c
        !             3:  *
        !             4:  * Coherent/Unix/Minix support for dcp
        !             5:  * Copyright 1989 (c) by Peter S. Housel.
        !             6:  * Changes Copyright (c) 1989-1991 by Mark Williams Company.
        !             7:  */
        !             8: 
        !             9: #include <stdio.h>
        !            10: 
        !            11: #include <signal.h>
        !            12: #include "dial.h"
        !            13: #include "dcp.h"
        !            14: #include "alarm.h"
        !            15: 
        !            16: #if SGTTY
        !            17: #include <sgtty.h>
        !            18: #elif TERMIO
        !            19: #include <termio.h>
        !            20: #endif
        !            21: 
        !            22: int swritefd;          /* fd for serial write */
        !            23: int sreadfd;           /* fd for serial read */
        !            24: 
        !            25: swrite(data, num)
        !            26: char *data; 
        !            27: int num;
        !            28: {
        !            29:        return( write(swritefd, data, num) );
        !            30: }
        !            31: 
        !            32: #define        MINTIMEOUT      2
        !            33: 
        !            34: int sread(data, num, timeout)
        !            35: char *data; 
        !            36: int num, timeout;
        !            37: {
        !            38:        int ret;
        !            39:        register char *ptr;
        !            40: 
        !            41:        SETALRM( (timeout>MINTIMEOUT) ? timeout: MINTIMEOUT );
        !            42:        ret = read(sreadfd, data, num);
        !            43:        CLRALRM();
        !            44: 
        !            45:        if ( stripflg )
        !            46:                for (ptr=data; ptr<data+ret; ptr++)
        !            47:                        *ptr &= 0x7F;
        !            48: #if 0
        !            49:        printmsg(M_DATA, "sread: {%s}", visbuf(data, num));
        !            50: #endif
        !            51:        return( (ret>0) ? ret: 0 );
        !            52: }
        !            53: 
        !            54: int sread2(data, num)
        !            55: char *data; 
        !            56: int num;
        !            57: {
        !            58:        int retval = read(sreadfd, data, num);
        !            59:        register char *ptr;
        !            60: 
        !            61:        if ( stripflg )
        !            62:                for (ptr=data; ptr<data+retval; ptr++)
        !            63:                        *ptr &= 0x7F;
        !            64: #if 0
        !            65:        printmsg(M_DATA, "sread2: %d: {%s}", retval, visbuf(data, retval));
        !            66: #endif
        !            67:        return(retval);
        !            68: }
        !            69: 
        !            70: /*
        !            71:  *  Coherent support for setting the line parameters.
        !            72:  *
        !            73:  *  initline()  --  Used for uucico SLAVE mode.
        !            74:  *     Sets the serial file descriptors: sreadfd and swritefd.
        !            75:  *     Returns (1) for success, (0) for failure.
        !            76:  *
        !            77:  *  fixline()
        !            78:  *     Fixes the line to RAW for uucico MASTER mode.
        !            79:  */
        !            80: 
        !            81: int initline()
        !            82: {
        !            83: #if SGTTY
        !            84:        struct sgttyb ttyb;
        !            85: 
        !            86:        sreadfd = 0;    /* standard input */
        !            87:        swritefd = 1;   /* standard output */
        !            88:        ioctl(sreadfd, TIOCHPCL);
        !            89:        gtty(sreadfd, &ttyb);   /* set raw mode */
        !            90:        ttyb.sg_flags |= (RAW | CBREAK);
        !            91:        stripflg = 0;
        !            92:        ttyb.sg_flags &= ~(XTABS | EVENP | ODDP | CRMOD | ECHO | LCASE);
        !            93:        stty(sreadfd, &ttyb);
        !            94: 
        !            95: #elif TERMIO
        !            96:        struct termio tio;
        !            97: 
        !            98:        sreadfd = 0;                    /* standard input */
        !            99:        swritefd = 1;                   /* standard output */
        !           100:        ioctl(sreadfd, TCGETA, &tio);
        !           101:        tio.c_iflag = 0;
        !           102:        tio.c_oflag = 0;
        !           103:        tio.c_cflag &= ~(CSIZE|PARENB);
        !           104:        tio.c_cflag |= (HUPCL|CS8);
        !           105:        stripflg = 0;
        !           106:        tio.c_lflag = 0;
        !           107:        ioctl(sreadfd, TCSETA, &tio);
        !           108: #endif
        !           109:        return(1);
        !           110: }
        !           111: 
        !           112: fixline()
        !           113: {
        !           114: #if SGTTY
        !           115:        struct sgttyb ttyb;
        !           116: 
        !           117:        gtty(sreadfd, &ttyb);
        !           118:        ttyb.sg_flags |= (RAW | CBREAK);
        !           119:        stripflg = 0;
        !           120:        stty(sreadfd, &ttyb);
        !           121: 
        !           122: #elif TERMIO
        !           123:        struct termio tio;
        !           124: 
        !           125:        ioctl(sreadfd, TCGETA, &tio);
        !           126: #if 0
        !           127:        printmsg(M_LOG, "tio.c_iflag = 0x%04x", tio.c_iflag);
        !           128: #endif
        !           129:        tio.c_iflag = 0;
        !           130:        stripflg = 0;
        !           131:        ioctl(sreadfd, TCSETA, &tio);
        !           132: #endif
        !           133: }
        !           134: 
        !           135: 
        !           136: /*
        !           137:  *  Coherent support for dialing and connecting with a modem device.
        !           138:  *  Used for uucico MASTER mode.
        !           139:  *
        !           140:  *  dcpdial(dev, speed, tel)  char *dev, *speed, *tel;
        !           141:  *     Initiates the call, utilizing the modemcap dial package,
        !           142:  *     and sets the serial file descriptors: sreadfd and swritefd.
        !           143:  *     Returns (1) for success, and (0) for failure.
        !           144:  *
        !           145:  *  dcpundial()
        !           146:  *     Closes the serial file descriptors set up with dcpdial().
        !           147:  */
        !           148: 
        !           149: static CALL call;              /* dial(3) structure, see "dial.h"      */
        !           150: 
        !           151: int dcpdial(dev, speed, tel)
        !           152: char *dev, *speed, *tel;
        !           153: {
        !           154:        char    *cp;
        !           155: 
        !           156:        call.baud = atoi(speed);
        !           157:        call.line = dev;
        !           158:        call.telno = tel;
        !           159: 
        !           160:        printmsg(M_CALL, "Trying to connect at speed %d", call.baud);
        !           161:        if (tel != NULL)
        !           162:                printmsg(M_CALL, "Calling phone# %s", call.telno);
        !           163:        if ((sreadfd = swritefd = dial(&call)) < 0) {
        !           164:                plog(M_CALL, "Dial failed, %s {%d}", _merr_list[-merrno],
        !           165:                        processid);
        !           166:                while ((cp = index(modembuf, '\r')) != NULL)
        !           167:                        *cp = ' ';
        !           168:                while ((cp = index(modembuf, '\n')) != NULL)
        !           169:                        *cp = ' ';
        !           170:                plog(M_CALL, "Modem says %s", modembuf);
        !           171:                dcpundial();
        !           172:                return( 0 );
        !           173:        }
        !           174:        return( 1 );
        !           175: }
        !           176: 
        !           177:        /* dcpundial() is called by sysend(), possibly others.
        !           178:         * Dcpundial calls hangup. Hangup terminates the call and hangs up the
        !           179:         * modem. Hangup then calls undial() which removes device lock files
        !           180:         * and re-enables any ports if necessary. Bob H. 11/22/91
        !           181:         */
        !           182: 
        !           183: dcpundial()
        !           184: {
        !           185:        printmsg(M_DEBUG,"dcpundial: about to call hangup().");
        !           186: 
        !           187:        if (role == MASTER)
        !           188:                hangup(swritefd);
        !           189:        else {
        !           190: #if 0
        !           191:                ioctl(swritefd, TIOCHPCL);
        !           192: #endif
        !           193:                /* slave mode */
        !           194:                close(swritefd); /* stdout */
        !           195:                close(sreadfd);  /* stdin  */
        !           196:                close(2);        /* stderr */
        !           197:        }
        !           198: 
        !           199: #if 0
        !           200:        plog(M_CALL, "dcpundial(%d)", sreadfd);
        !           201:        if (sreadfd > 2)
        !           202:                hangup(sreadfd);
        !           203:        else {
        !           204:                ioctl(sreadfd, TIOCHPCL);
        !           205:                close(sreadfd);
        !           206:        }
        !           207: #endif
        !           208: }
        !           209: 
        !           210: sendbrk()
        !           211: {
        !           212: #if SGTTY
        !           213:        ioctl(swritefd, TIOCSBRK);
        !           214:        sleep(1);
        !           215:        ioctl(swritefd, TIOCCBRK);
        !           216: #endif
        !           217: }

unix.superglobalmegacorp.com

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