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

1.1     ! root        1: /*     %W%
        !             2: */
        !             3: #include "uucp.h"
        !             4: VERSION(%W%);
        !             5: 
        !             6: #ifdef DATAKIT
        !             7: #include <dk.h>
        !             8: 
        !             9: #define XBUFSIZ 1024
        !            10: time_t time();
        !            11: static jmp_buf Dfailbuf;
        !            12: 
        !            13: /*
        !            14:  * Datakit protocol
        !            15:  */
        !            16: static dalarm() {longjmp(Dfailbuf);}
        !            17: static int (*dsig)();
        !            18: #ifndef V8
        !            19: static short dkrmode[3] = { DKR_BLOCK, 0, 0 };
        !            20: static short dkeof[3] = { 106, 0, 0 }; /* End of File signal */
        !            21: #endif
        !            22: 
        !            23: /*
        !            24:  * turn on protocol
        !            25:  */
        !            26: dturnon()
        !            27: {
        !            28: 
        !            29:        dsig=signal(SIGALRM, dalarm);
        !            30: #ifndef V8
        !            31:        if(ioctl(Ofn, DIOCRMODE, dkrmode) < 0) {
        !            32:            int ret; extern int errno;
        !            33:            ret=ioctl(Ofn, DIOCRMODE, dkrmode);
        !            34:            DEBUG(4, "dturnon: ret=%d, ", ret);
        !            35:            DEBUG(4, "Ofn=%d, ", Ofn);
        !            36:            DEBUG(4, "errno=%d\n", errno);
        !            37:            return(-1);
        !            38:        }
        !            39: #endif !V8
        !            40:        return(0);
        !            41: }
        !            42: dturnoff()
        !            43: {
        !            44:        (void) signal(SIGALRM, dsig);
        !            45:        return(0);
        !            46: }
        !            47: 
        !            48: /*
        !            49:  * write message across Datakit link
        !            50:  *     type    -> message type
        !            51:  *     str     -> message body (ascii string)
        !            52:  *     fn      -> Datakit file descriptor
        !            53:  * return
        !            54:  *     SUCCESS -> message sent
        !            55:  *     FAIL    -> write failed
        !            56:  */
        !            57: dwrmsg(type, str, fn)
        !            58: register char *str;
        !            59: int fn;
        !            60: char type;
        !            61: {
        !            62:        register char *s;
        !            63:        char bufr[XBUFSIZ];
        !            64: 
        !            65:        bufr[0] = type;
        !            66:        s = &bufr[1];
        !            67:        while (*str)
        !            68:                *s++ = *str++;
        !            69:        *s = '\0';
        !            70:        if (*(--s) == '\n')
        !            71:                *s = '\0';
        !            72:        return(write(fn, bufr, (unsigned) strlen(bufr) + 1) < 0 ? FAIL : SUCCESS);
        !            73: }
        !            74: 
        !            75: /*
        !            76:  * read message from Datakit link
        !            77:  *     str     -> message buffer
        !            78:  *     fn      -> Datakit file descriptor
        !            79:  * return
        !            80:  *     FAIL    -> send timed out
        !            81:  *     SUCCESS -> ok message in str
        !            82:  */
        !            83: drdmsg(str, fn)
        !            84: register char *str;
        !            85: {
        !            86: 
        !            87:        register int len;
        !            88: 
        !            89:        if(setjmp(Dfailbuf))
        !            90:                return(FAIL);
        !            91: 
        !            92:        (void) alarm(60);
        !            93:        for (;;) {
        !            94:                if( (len = read(fn, str, XBUFSIZ)) <= 0) {
        !            95:                        (void) alarm(0);
        !            96:                        return(FAIL);
        !            97:                }
        !            98:                str += len;
        !            99:                if (*(str - 1) == '\0')
        !           100:                        break;
        !           101:        }
        !           102:        (void) alarm(0);
        !           103:        return(SUCCESS);
        !           104: }
        !           105: 
        !           106: /*
        !           107:  * read data from file fp1 and write
        !           108:  * on Datakit link
        !           109:  *     fp1     -> file descriptor
        !           110:  *     fn      -> Datakit descriptor
        !           111:  * returns:
        !           112:  *     FAIL    ->failure in Datakit link
        !           113:  *     SUCCESS -> ok
        !           114:  */
        !           115: dwrdata(fp1, fn)
        !           116: register FILE *fp1;
        !           117: {
        !           118:        register int len, ret;
        !           119:        long bytes;
        !           120:        char bufr[XBUFSIZ];
        !           121:        char text[128];
        !           122:        time_t  ticks;
        !           123: 
        !           124:        bytes = 0L;
        !           125:        (void) millitick();     /* set msec timer */
        !           126:        while ((len = fread(bufr, sizeof (char), XBUFSIZ, fp1)) > 0) {
        !           127:                bytes += len;
        !           128:                ret = write(fn, bufr, (unsigned) len);
        !           129:                if (ret != len) {
        !           130:                        return(FAIL);
        !           131:                }
        !           132:                if (len != XBUFSIZ)
        !           133:                        break;
        !           134:        }
        !           135: #ifndef V8
        !           136:        ioctl(fn, DIOCXCTL, dkeof);
        !           137: #endif
        !           138:        ret = write(fn, bufr, (unsigned) 0);
        !           139:        ticks = millitick();
        !           140:        (void) sprintf(text, "-> %ld / %ld.%.3d secs",
        !           141:                bytes, ticks / 1000, ticks % 1000);
        !           142:        DEBUG(4, "%s\n", text);
        !           143:        syslog(text);
        !           144:        return(SUCCESS);
        !           145: }
        !           146: 
        !           147: /*
        !           148:  * read data from Datakit link and
        !           149:  * write into file
        !           150:  *     fp2     -> file descriptor
        !           151:  *     fn      -> Datakit descriptor
        !           152:  * returns:
        !           153:  *     SUCCESS -> ok
        !           154:  *     FAIL    -> failure on Datakit link
        !           155:  */
        !           156: drddata(fn, fp2)
        !           157: register FILE *fp2;
        !           158: {
        !           159:        register int len;
        !           160:        long bytes;
        !           161:        char text[128];
        !           162:        char bufr[XBUFSIZ];
        !           163:        time_t ticks;
        !           164: 
        !           165:        bytes = 0L;
        !           166:        (void) millitick();     /* set msec timer */
        !           167:        for (;;) {
        !           168:                len = drdblk(bufr, XBUFSIZ, fn);
        !           169:                if (len < 0) {
        !           170:                        return(FAIL);
        !           171:                }
        !           172:                bytes += len;
        !           173:                fwrite(bufr, sizeof (char), len, fp2);
        !           174:                if (len < XBUFSIZ)
        !           175:                        break;
        !           176:        }
        !           177:        ticks = millitick();
        !           178:        (void) sprintf(text, "<- %ld / %ld.%.3d secs",
        !           179:                bytes, ticks / 1000, ticks % 1000);
        !           180:        DEBUG(4, "%s\n", text);
        !           181:        syslog(text);
        !           182:        return(SUCCESS);
        !           183: }
        !           184: 
        !           185: /*
        !           186:  * read block from Datakit link
        !           187:  * reads are timed
        !           188:  *     blk     -> address of buffer
        !           189:  *     len     -> size to read
        !           190:  *     fn      -> Datakit descriptor
        !           191:  * returns:
        !           192:  *     FAIL    -> link error timeout on link
        !           193:  *     i       -> # of bytes read
        !           194:  */
        !           195: drdblk(blk, len,  fn)
        !           196: register char *blk;
        !           197: {
        !           198:        register int i, ret;
        !           199: 
        !           200:        if(setjmp(Dfailbuf))
        !           201:                return(FAIL);
        !           202: 
        !           203:        for (i = 0; i < len; i += ret) {
        !           204:                (void) alarm(60);
        !           205:                if ((ret = read(fn, blk, (unsigned) len - i)) < 0) {
        !           206:                        (void) alarm(0);
        !           207:                        return(FAIL);
        !           208:                }
        !           209:                blk += ret;
        !           210:                if (ret == 0)   /* zero length block contains only EOF signal */
        !           211:                        break;
        !           212:        }
        !           213:        (void) alarm(0);
        !           214:        return(i);
        !           215: }
        !           216: #endif DATAKIT

unix.superglobalmegacorp.com

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