|
|
1.1 ! root 1: /* ! 2: * Retrieve files from GCOS via dataphone ! 3: */ ! 4: ! 5: #define SPIDER 0 ! 6: #define PHONE 1 ! 7: #define LPD 0 ! 8: #define FGET 1 ! 9: ! 10: char dname[] = "FGETP"; ! 11: ! 12: #include "gcos.c" ! 13: #include "fgdemon.c" ! 14: ! 15: #define FLUSH (*output)(inp, lbuf-inp); lbuf = inp; ! 16: #define BADCHAR cgset[cp[1] - 040] & 040 ! 17: ! 18: #define NCONERR 4 ! 19: #define BUSY -1 ! 20: #define TIMEOUT -2 ! 21: #define BADID -3 ! 22: #define ERROR -4 ! 23: char conerr[NCONERR+1][8] = {"BUSY","TIMEOUT","BAD ID","ERROR","UNKNOWN"}; ! 24: char conmes[] = "Can't connect to GCOS: %-13s"; ! 25: ! 26: char inp[BUFSIZ]; ! 27: char *ebuf; ! 28: char *lbuf = inp; ! 29: char savc; ! 30: int state; ! 31: int ioc; ! 32: char ibuf[BUFSIZ]; ! 33: ! 34: ! 35: fgd_read() ! 36: { ! 37: register i, n; ! 38: register char *cp; ! 39: extern char cgset[]; ! 40: ! 41: while((i = connect(fget_id)) < 0) { ! 42: if(i == TIMEOUT) ! 43: trouble(BADTRB, 60,"TIMEOUT"); ! 44: if((i = -i) > NCONERR+1) i = NCONERR+1; ! 45: trouble(BADTRB, 60, conmes, conerr[i-1]); ! 46: } ! 47: ! 48: if((ioc = send("$*$out", ibuf)) != 0103) { ! 49: #ifdef DEBUG ! 50: fprintf(stderr, "ioc = %o; *ibuf = %o\n", ioc, *ibuf); /*DEBUG*/ ! 51: fprintf(stderr, "out\n"); /*DEBUG*/ ! 52: #endif ! 53: trouble(BADTRB, 60,"out: ioc=%o", ioc); ! 54: } ! 55: ! 56: if((ioc = gerts(0102, 0100, (char *)0, ibuf)) != 0102) { ! 57: #ifdef DEBUG ! 58: fprintf(stderr, "sack\n"); /*DEBUG*/ ! 59: #endif ! 60: trouble(BADTRB, 60,"sack: ioc=%o", ioc); ! 61: } ! 62: ! 63: if((ioc = gerts(0102, 0100, (char *)0, ibuf)) != 0100) { ! 64: #ifdef DEBUG ! 65: fprintf(stderr, "data\n"); /*DEBUG*/ ! 66: #endif ! 67: trouble(BADTRB, 60,"data: ioc=%o", ioc); ! 68: } ! 69: ! 70: ebuf = inp + BUFSIZ; ! 71: loop: ! 72: if(ibuf[1] != 0127) goto rrec; ! 73: if(ibuf[2] == '!' && ibuf[3] == '!') { ! 74: FLUSH ! 75: endfile(); ! 76: state = 0; ! 77: goto rrec; ! 78: } ! 79: cp = ibuf+1; ! 80: if(BADCHAR) goto rrec; ! 81: state = 0; ! 82: cp = ibuf+2; ! 83: cloop: ! 84: if(*cp == 036) { ! 85: if(*++cp != 0127) goto rrec; ! 86: if(cp[1] == '!' && cp[2] == '!') { ! 87: FLUSH ! 88: endfile(); ! 89: goto rrec; ! 90: } ! 91: if(BADCHAR){ ! 92: #ifdef DEBUG ! 93: fprintf(stderr, "unexpected high bits\n"); ! 94: #endif ! 95: trouble(BADTRB, 60, "unexpected high bits"); ! 96: } ! 97: cp++; ! 98: } ! 99: if(cp >= ibuf+BUFSIZ) { ! 100: #ifdef DEBUG ! 101: fprintf(stderr, "overflow\n"); /*DEBUG*/ ! 102: #endif ! 103: trouble(BADTRB, 60,"overflow"); ! 104: } ! 105: if(cp[1] == 037) { ! 106: n = cgset[cp[2]-040]+1; ! 107: while(n--) ! 108: if(putcod(*cp)){ ! 109: FLUSH ! 110: } ! 111: cp += 3; ! 112: goto cloop; ! 113: } ! 114: if(putcod(*cp++)){ ! 115: FLUSH ! 116: } ! 117: goto cloop; ! 118: rrec: ! 119: if((ioc = gerts(0110, 0100, (char *)0, ibuf)) == 0100) { ! 120: #ifdef DEBUG ! 121: fprintf(stderr, "%o %o %o %o\n", ibuf[0], ibuf[1], ! 122: ibuf[2], ibuf[3]); /*DEBUG*/ ! 123: #endif ! 124: goto loop; ! 125: } ! 126: return; ! 127: } ! 128: ! 129: ! 130: dem_dis() ! 131: { ! 132: FCLOSE(ofd); ! 133: FCLOSE(tfd); ! 134: gerts_dis(); ! 135: } ! 136: ! 137: ! 138: putcod(ch) ! 139: { ! 140: extern char cgset[]; ! 141: register c, code; ! 142: ! 143: if(ch < 040 || ch >= 0140) { ! 144: #ifdef DEBUG ! 145: fprintf(stderr, "%o: ", ch); /*DEBUG*/ ! 146: #endif ! 147: fgderr("Bad code: %o, in file %s", ch, fname); ! 148: } ! 149: c = cgset[ch-040]; ! 150: switch(state) { ! 151: ! 152: case 0: ! 153: state++; ! 154: savc = c; ! 155: return(0); ! 156: ! 157: case 1: ! 158: state++; ! 159: code = (savc<<3)|(c>>3); ! 160: savc = c&07; ! 161: break; ! 162: ! 163: case 2: ! 164: state = 0; ! 165: code = c | ( savc<<6); ! 166: break; ! 167: } ! 168: ! 169: #ifdef DEBUG ! 170: putc(code, stderr); /*DEBUG*/ ! 171: #endif ! 172: *lbuf = code; ! 173: if(++lbuf >= ebuf || code == '\n') ! 174: return(1); ! 175: return(0); ! 176: } ! 177: ! 178: fgderr(s, ch, f) ! 179: char *s; ! 180: char ch; ! 181: char *f; ! 182: { ! 183: ! 184: if(ofd != NULL){ ! 185: fprintf(ofd, s, ch, f); ! 186: putc('\n', ofd); ! 187: } ! 188: trouble(BADTRB, 60,s, ch, f); ! 189: } ! 190: ! 191: send(card, gbuf) ! 192: char *card; ! 193: char *gbuf; ! 194: { ! 195: ! 196: char image[200]; ! 197: register char *cp; ! 198: int fc; ! 199: ! 200: if(*card == '$') fc = 0104; ! 201: else fc = 0110; ! 202: ! 203: cp = image; ! 204: *cp++ = 'H'; ! 205: while(*cp++ = *card++); ! 206: ! 207: cp[-1] = '\36'; ! 208: *cp = '\3'; ! 209: ! 210: ! 211: return(gerts(fc, 0100, image, gbuf)); ! 212: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.