|
|
1.1 ! root 1: #include <jerq.h> ! 2: #include <jerqio.h> ! 3: #define _SYSTAG 0375 ! 4: #define _SYSINIT 0374 ! 5: #define _SYSSYNC 0373 ! 6: ! 7: typedef union { ! 8: short s; ! 9: char c[2]; ! 10: } schar; ! 11: ! 12: typedef union { ! 13: long l; ! 14: char c[4]; ! 15: } lchar; ! 16: ! 17: #ifndef MUX ! 18: sendnchars(n,s) ! 19: register n; ! 20: register char *s; ! 21: { ! 22: if (n > 0) ! 23: do{ ! 24: sendchar(*s++); ! 25: } ! 26: while (--n > 0); ! 27: } ! 28: #endif ! 29: #define JXBUFSIZ 512 ! 30: static char cmdbuf[JXBUFSIZ]; /* command information only */ ! 31: static char *cmdptr=cmdbuf; /* command information only */ ! 32: jflush() ! 33: { ! 34: sendnchars((int)(cmdptr-cmdbuf),cmdbuf); ! 35: cmdptr = cmdbuf; ! 36: } ! 37: ! 38: jputchar(c) ! 39: char c; ! 40: { ! 41: *cmdptr++ = c; ! 42: if (cmdptr > &(cmdbuf[JXBUFSIZ - 2])) ! 43: jflush(); ! 44: } ! 45: ! 46: jputnchars(n,p) ! 47: register n; ! 48: register char *p; ! 49: { ! 50: do { ! 51: *cmdptr++ = *p++; ! 52: if (cmdptr > &(cmdbuf[JXBUFSIZ - 2])) ! 53: jflush(); ! 54: } while (--n > 0); ! 55: } ! 56: ! 57: jputshort(s) ! 58: short s; ! 59: { ! 60: jputnchars(2,&s); /* a feeble improvement */ ! 61: } ! 62: ! 63: jputlong(l) ! 64: lchar l; ! 65: { ! 66: jputnchars(4,l.c); /* but an improvement */ ! 67: } ! 68: ! 69: jputbuf(p,n) ! 70: register char *p; ! 71: register short n; ! 72: { ! 73: jputshort(n); ! 74: jflush(); ! 75: sendnchars(n,p); /* not always feeble */ ! 76: } ! 77: ! 78: jputstr(s) ! 79: register char *s; ! 80: { ! 81: register char c; ! 82: do { ! 83: jputchar(c = *s++); ! 84: } while (c != '\0'); ! 85: } ! 86: ! 87: #ifdef MUX ! 88: #undef jgetchar ! 89: jgetchar() ! 90: { ! 91: register c; ! 92: while ((c = rcvchar()) == -1) ! 93: wait(RCV); ! 94: return(c); ! 95: } ! 96: #endif ! 97: ! 98: short ! 99: jgetshort() ! 100: { ! 101: schar s; ! 102: register char *p; ! 103: p = s.c; ! 104: *p++ = jgetchar(); ! 105: *p++ = jgetchar(); ! 106: return(s.s); ! 107: } ! 108: ! 109: long ! 110: jgetlong() ! 111: { ! 112: lchar l; ! 113: register char *p; ! 114: p = l.c; ! 115: *p++ = jgetchar(); ! 116: *p++ = jgetchar(); ! 117: *p++ = jgetchar(); ! 118: *p++ = jgetchar(); ! 119: return(l.l); ! 120: } ! 121: ! 122: jgetbuf(p,n) ! 123: register char *p; ! 124: register short n; ! 125: { ! 126: register short i; ! 127: jputshort(n); ! 128: jflush(); ! 129: n = jgetshort(); ! 130: for (i = 0; i < n; i++) ! 131: *p++ = jgetchar(); ! 132: return(n); ! 133: } ! 134: ! 135: jgetstr(s) ! 136: register char *s; ! 137: { ! 138: while (*s++ = jgetchar()); ! 139: } ! 140: ! 141: static int synced; ! 142: ! 143: tag(c) ! 144: char c; ! 145: { ! 146: if (synced == 0) { ! 147: sync(); ! 148: synced = 1; ! 149: } ! 150: jputchar(_SYSTAG); ! 151: jputchar(c); ! 152: } ! 153: ! 154: sync() ! 155: { ! 156: jputchar(_SYSTAG); ! 157: jputchar(_SYSSYNC); ! 158: jflush(); ! 159: while (jgetchar() != _SYSSYNC) ! 160: ; ! 161: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.