pdp11v/usr/src/cmd/uucp/imsg.c
/* @(#)imsg.c 1.3 */
#include "uucp.h"
char Msync[2] = "\020";
/*
* read message routine used before a
* protocol is agreed upon.
* msg -> address of input buffer
* fn -> input file descriptor
* returns:
* EOF -> no more messages
* 0 -> message returned
*/
imsg(msg, fn)
register char *msg;
register int fn;
{
register char c;
short fndsync;
int ret;
char *bmsg, c1;
fndsync = 0;
bmsg = msg;
DEBUG(7, "imsg %s>", "");
while ((ret = read(fn, &c1, sizeof(c))) == sizeof(c)){
c = c1;
DEBUG(7, (c>037) ? "%c" : "\\%3o ", c & 0377);
if (c == Msync[0]) {
msg = bmsg;
fndsync = 1;
}
else if (c == '\0' || c == '\n') {
if (fndsync) {
*msg = '\0';
return(0);
}
} else {
if (fndsync)
*msg++ = c;
}
}
*msg = '\0';
return(EOF);
}
/*
* initial write message routine -
* used before a protocol is agreed upon.
* type -> message type
* msg -> message body address
* fn -> file descriptor
* return:
* always 0
*/
omsg(type, msg, fn)
register char *msg;
register char type;
int fn;
{
register char *c;
char buf[BUFSIZ];
c = buf;
*c++ = Msync[0];
*c++ = type;
while (*msg)
*c++ = *msg++;
*c++ = '\0';
write(fn, buf, (unsigned) strlen(buf) + 1);
return(0);
}