Annotation of 43BSDTahoe/usr.bin/uucp/imsg.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)imsg.c     5.4 (Berkeley) 2/24/88";
        !             3: #endif
        !             4: 
        !             5: #include "uucp.h"
        !             6: #include <ctype.h>
        !             7: 
        !             8: char Msync[2] = "\020";
        !             9: 
        !            10: /* to talk to both eunice and x.25 without also screwing up tcp/ip
        !            11:  * we must adaptively  choose what character to end the msg with
        !            12:  * 
        !            13:  * The idea is that initially we send ....\000\n
        !            14:  * Then, after they have sent us a message, we use the first character
        !            15:  * they send.
        !            16:  */
        !            17: 
        !            18: int seenend = 0;
        !            19: char Mend = '\0';
        !            20: 
        !            21: /*
        !            22:  *     this is the initial read message routine -
        !            23:  *     used before a protocol is agreed upon.
        !            24:  *
        !            25:  *     return codes:
        !            26:  *             FAIL - no more messages
        !            27:  *             SUCCESS - message returned
        !            28:  */
        !            29: 
        !            30: imsg(amsg, fn)
        !            31: char *amsg;
        !            32: register int fn;
        !            33: {
        !            34:        register char *msg = amsg;
        !            35:        register int nchars = 0;
        !            36:        int foundsync = FAIL;
        !            37:        char c;
        !            38: 
        !            39:        DEBUG(5, "imsg looking for SYNC<", CNULL);
        !            40:        for (;;) {
        !            41:                if (read(fn, &c, 1) != 1)
        !            42:                        return FAIL;
        !            43:                DEBUG(9,"\t%o", c&0377);
        !            44:                c &= 0177;
        !            45:                if (c == '\n' || c == '\r')
        !            46:                        DEBUG(5, "%c", c);
        !            47:                else 
        !            48:                        DEBUG(5, (isprint(c) || isspace(c)) ? "%c" : "\\%o",
        !            49:                                c & 0377);
        !            50:                c &= 0177;
        !            51:                if (c == Msync[0]) {
        !            52:                        DEBUG(5, ">\nimsg input<", CNULL);
        !            53:                        msg = amsg;
        !            54:                        nchars = 0;
        !            55:                        foundsync = SUCCESS;
        !            56:                        continue;
        !            57:                } else if (foundsync != SUCCESS)
        !            58:                                continue;
        !            59:                if (c == '\n' || c == '\0') {
        !            60:                        if (!seenend) {
        !            61:                                Mend = c;
        !            62:                                seenend++;
        !            63:                                DEBUG(9, "\nUsing \\%o as End of message char\n", Mend);
        !            64:                        }
        !            65:                        break;
        !            66:                }
        !            67:                *msg++ = c;
        !            68:                /* MAXFULLNAME should really be passed in as a parameter */
        !            69:                if (nchars++ > MAXFULLNAME) {
        !            70:                        DEBUG(1, "buffer overrun in imsg", CNULL);
        !            71:                        return FAIL;
        !            72:                }
        !            73:                fflush(stderr);
        !            74:        }
        !            75:        *msg = '\0';
        !            76:        DEBUG(5, ">got %d characters\n", strlen(amsg));
        !            77:        return foundsync;
        !            78: }
        !            79: 
        !            80: 
        !            81: /*
        !            82:  *     this is the initial write message routine -
        !            83:  *     used before a protocol is agreed upon.
        !            84:  *
        !            85:  *     return code:  always 0
        !            86:  */
        !            87: 
        !            88: omsg(type, msg, fn)
        !            89: register char *msg;
        !            90: char type;
        !            91: int fn;
        !            92: {
        !            93:        char buf[MAXFULLNAME];
        !            94:        register char *c;
        !            95: 
        !            96:        c = buf;
        !            97:        *c = '\0';      /* avoid pdp 11/23,40 auto-incr stack trap bug */
        !            98:        *c++ = Msync[0];
        !            99:        *c++ = type;
        !           100:        while (*msg)
        !           101:                *c++ = *msg++;
        !           102:        *c++ = '\0';
        !           103:        DEBUG(5, "omsg <%s>\n", buf);
        !           104:        if (seenend) 
        !           105:                c[-1] = Mend;
        !           106:        else
        !           107:                *c++ = '\n';
        !           108:        write(fn, buf, (int)(c - buf));
        !           109:        return 0;
        !           110: }

unix.superglobalmegacorp.com

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