File:  [Research Unix] / researchv9 / jerq / src / lib / mj / comm.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:59 2018 UTC (8 years, 1 month ago) by root
Branches: belllabs, MAIN
CVS tags: researchv9-SUN3_old, researchv9-SUN3, HEAD
researchv9-SUN3(old)

#include <jerq.h>
#include <jerqio.h>
#define _SYSTAG		0375
#define _SYSINIT	0374
#define _SYSSYNC	0373

typedef union {
	short s;
	char c[2];
} schar;

typedef union {
	long l;
	char c[4];
} lchar;

#ifndef MUX
sendnchars(n,s)
register n;
register char *s;
{
	if (n > 0)
	do{
		sendchar(*s++);
}
	while (--n > 0);
}
#endif
#define JXBUFSIZ 512
static char cmdbuf[JXBUFSIZ];	/* command information only */
static char *cmdptr=cmdbuf;	/* command information only */
jflush()
{
	sendnchars((int)(cmdptr-cmdbuf),cmdbuf);
	cmdptr = cmdbuf;
}

jputchar(c)
char c;
{
	*cmdptr++ = c;
	if (cmdptr > &(cmdbuf[JXBUFSIZ - 2]))
		jflush();
}

jputnchars(n,p)
register n;
register char *p;
{
	do {
		*cmdptr++ = *p++;
		if (cmdptr > &(cmdbuf[JXBUFSIZ - 2]))
			jflush();
	} while (--n > 0);
}

jputshort(s)
short s;
{
	jputnchars(2,&s);	/* a feeble improvement */
}

jputlong(l)
lchar l;
{
	jputnchars(4,l.c);	/* but an improvement */
}

jputbuf(p,n)
register char *p;
register short n;
{
	jputshort(n);
	jflush();
	sendnchars(n,p);	/* not always feeble */
}

jputstr(s)
register char *s;
{
	register char c;
	do {
		jputchar(c = *s++);
	} while (c != '\0');
}

#ifdef MUX
#undef jgetchar
jgetchar()
{
	register c;
	while ((c = rcvchar()) == -1)
		wait(RCV);
	return(c);
}
#endif

short
jgetshort()
{
	schar s;
	register char *p;
	p = s.c;
	*p++ = jgetchar();
	*p++ = jgetchar();
	return(s.s);
}

long
jgetlong()
{
	lchar l;
	register char *p;
	p = l.c;
	*p++ = jgetchar();
	*p++ = jgetchar();
	*p++ = jgetchar();
	*p++ = jgetchar();
	return(l.l);
}

jgetbuf(p,n)
register char *p;
register short n;
{
	register short i;
	jputshort(n);
	jflush();
	n = jgetshort();
	for (i = 0; i < n; i++)
		*p++ = jgetchar();
	return(n);
}

jgetstr(s)
register char *s;
{
	while (*s++ = jgetchar());
}

static int synced;

tag(c)
char c;
{
	if (synced == 0) {
		sync();
		synced = 1;
	}
	jputchar(_SYSTAG);
	jputchar(c);
}

sync()
{
	jputchar(_SYSTAG);
	jputchar(_SYSSYNC);
	jflush();
	while (jgetchar() != _SYSSYNC)
		;
}

unix.superglobalmegacorp.com

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