Annotation of 43BSD/usr.bin/uucp/imsg.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)imsg.c     5.3 (Berkeley) 1/6/86";
                      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:        int foundsync = FAIL;
                     36:        char c;
                     37: 
                     38:        DEBUG(5, "imsg looking for SYNC<", CNULL);
                     39:        for (;;) {
                     40:                if (read(fn, &c, 1) != 1)
                     41:                        return FAIL;
                     42:                c &= 0177;
                     43:                if (c == '\n' || c == '\r')
                     44:                        DEBUG(5, "%c", c);
                     45:                else 
                     46:                        DEBUG(5, (isprint(c) || isspace(c)) ? "%c" : "\\%o",
                     47:                                c & 0377);
                     48:                if (c == Msync[0]) {
                     49:                        DEBUG(5, ">\nimsg input<", CNULL);
                     50:                        msg = amsg;
                     51:                        foundsync = SUCCESS;
                     52:                        continue;
                     53:                } else if (foundsync != SUCCESS)
                     54:                                continue;
                     55:                if (c == '\n' || c == '\0') {
                     56:                        if (!seenend) {
                     57:                                Mend = c;
                     58:                                seenend++;
                     59:                                DEBUG(9, "\nUsing \\%o as End of message char\n", Mend);
                     60:                        }
                     61:                        break;
                     62:                }
                     63:                *msg++ = c;
                     64:                fflush(stderr);
                     65:        }
                     66:        *msg = '\0';
                     67:        DEBUG(5, ">got %d characters\n", strlen(amsg));
                     68:        return foundsync;
                     69: }
                     70: 
                     71: 
                     72: /*
                     73:  *     this is the initial write message routine -
                     74:  *     used before a protocol is agreed upon.
                     75:  *
                     76:  *     return code:  always 0
                     77:  */
                     78: 
                     79: omsg(type, msg, fn)
                     80: register char *msg;
                     81: char type;
                     82: int fn;
                     83: {
                     84:        char buf[MAXFULLNAME];
                     85:        register char *c;
                     86: 
                     87:        c = buf;
                     88:        *c = '\0';      /* avoid pdp 11/23,40 auto-incr stack trap bug */
                     89:        *c++ = Msync[0];
                     90:        *c++ = type;
                     91:        while (*msg)
                     92:                *c++ = *msg++;
                     93:        *c++ = '\0';
                     94:        DEBUG(5, "omsg <%s>\n", buf);
                     95:        if (seenend) 
                     96:                c[-1] = Mend;
                     97:        else
                     98:                *c++ = '\n';
                     99:        write(fn, buf, (int)(c - buf));
                    100:        return 0;
                    101: }

unix.superglobalmegacorp.com

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