1*13652Ssam #ifndef lint 2*13652Ssam static char sccsid[] = "@(#)gio.c 5.1 (Berkeley) 07/02/83"; 3*13652Ssam #endif 4*13652Ssam 5*13652Ssam #define USER 1 6*13652Ssam #include "pk.p" 7*13652Ssam #include <sys/types.h> 8*13652Ssam #include "pk.h" 9*13652Ssam #include <setjmp.h> 10*13652Ssam #include "uucp.h" 11*13652Ssam 12*13652Ssam extern time_t time(); 13*13652Ssam 14*13652Ssam 15*13652Ssam jmp_buf Failbuf; 16*13652Ssam 17*13652Ssam struct pack *Pk; 18*13652Ssam 19*13652Ssam pkfail() 20*13652Ssam { 21*13652Ssam longjmp(Failbuf, 1); 22*13652Ssam } 23*13652Ssam 24*13652Ssam gturnon() 25*13652Ssam { 26*13652Ssam int ret; 27*13652Ssam struct pack *pkopen(); 28*13652Ssam if (setjmp(Failbuf)) 29*13652Ssam return(FAIL); 30*13652Ssam if (Pkdrvon) { 31*13652Ssam ret = pkon(Ofn, PACKSIZE); 32*13652Ssam DEBUG(4, "pkon - %d ", ret); 33*13652Ssam DEBUG(4, "Ofn - %d\n", Ofn); 34*13652Ssam if (ret <= 0) 35*13652Ssam return(FAIL); 36*13652Ssam } 37*13652Ssam else { 38*13652Ssam if (Debug > 4) 39*13652Ssam pkdebug = 1; 40*13652Ssam Pk = pkopen(Ifn, Ofn); 41*13652Ssam if ((int) Pk == NULL) 42*13652Ssam return(FAIL); 43*13652Ssam } 44*13652Ssam return(0); 45*13652Ssam } 46*13652Ssam 47*13652Ssam 48*13652Ssam gturnoff() 49*13652Ssam { 50*13652Ssam if(setjmp(Failbuf)) 51*13652Ssam return(FAIL); 52*13652Ssam if (Pkdrvon) 53*13652Ssam pkoff(Ofn); 54*13652Ssam else 55*13652Ssam pkclose(Pk); 56*13652Ssam return(0); 57*13652Ssam } 58*13652Ssam 59*13652Ssam 60*13652Ssam gwrmsg(type, str, fn) 61*13652Ssam char type; 62*13652Ssam register char *str; 63*13652Ssam { 64*13652Ssam char bufr[BUFSIZ]; 65*13652Ssam register char *s; 66*13652Ssam int len, i; 67*13652Ssam 68*13652Ssam if(setjmp(Failbuf)) 69*13652Ssam return(FAIL); 70*13652Ssam bufr[0] = type; 71*13652Ssam s = &bufr[1]; 72*13652Ssam while (*str) 73*13652Ssam *s++ = *str++; 74*13652Ssam *s = '\0'; 75*13652Ssam if (*(--s) == '\n') 76*13652Ssam *s = '\0'; 77*13652Ssam len = strlen(bufr) + 1; 78*13652Ssam if ((i = len % PACKSIZE)) { 79*13652Ssam len = len + PACKSIZE - i; 80*13652Ssam bufr[len - 1] = '\0'; 81*13652Ssam } 82*13652Ssam gwrblk(bufr, len, fn); 83*13652Ssam return(0); 84*13652Ssam } 85*13652Ssam 86*13652Ssam 87*13652Ssam grdmsg(str, fn) 88*13652Ssam register char *str; 89*13652Ssam { 90*13652Ssam unsigned len; 91*13652Ssam 92*13652Ssam if(setjmp(Failbuf)) 93*13652Ssam return(FAIL); 94*13652Ssam for (;;) { 95*13652Ssam if (Pkdrvon) 96*13652Ssam len = read(fn, str, PACKSIZE); 97*13652Ssam else 98*13652Ssam len = pkread(Pk, str, PACKSIZE); 99*13652Ssam if (len == 0) 100*13652Ssam continue; 101*13652Ssam str += len; 102*13652Ssam if (*(str - 1) == '\0') 103*13652Ssam break; 104*13652Ssam } 105*13652Ssam return(0); 106*13652Ssam } 107*13652Ssam 108*13652Ssam 109*13652Ssam gwrdata(fp1, fn) 110*13652Ssam FILE *fp1; 111*13652Ssam { 112*13652Ssam char bufr[BUFSIZ]; 113*13652Ssam register int len; 114*13652Ssam int ret; 115*13652Ssam time_t t1, t2; 116*13652Ssam long bytes; 117*13652Ssam char text[BUFSIZ]; 118*13652Ssam 119*13652Ssam if(setjmp(Failbuf)) 120*13652Ssam return(FAIL); 121*13652Ssam bytes = 0L; 122*13652Ssam time(&t1); 123*13652Ssam while ((len = fread(bufr, sizeof (char), BUFSIZ, fp1)) > 0) { 124*13652Ssam bytes += len; 125*13652Ssam ret = gwrblk(bufr, len, fn); 126*13652Ssam if (ret != len) { 127*13652Ssam return(FAIL); 128*13652Ssam } 129*13652Ssam if (len != BUFSIZ) 130*13652Ssam break; 131*13652Ssam } 132*13652Ssam ret = gwrblk(bufr, 0, fn); 133*13652Ssam time(&t2); 134*13652Ssam sprintf(text, "sent data %ld bytes %ld secs", bytes, t2 - t1); 135*13652Ssam DEBUG(1, "%s\n", text); 136*13652Ssam syslog(text); 137*13652Ssam sysacct(bytes, t2 - t1); 138*13652Ssam return(0); 139*13652Ssam } 140*13652Ssam 141*13652Ssam 142*13652Ssam grddata(fn, fp2) 143*13652Ssam FILE *fp2; 144*13652Ssam { 145*13652Ssam register int len; 146*13652Ssam char bufr[BUFSIZ]; 147*13652Ssam time_t t1, t2; 148*13652Ssam long bytes; 149*13652Ssam char text[BUFSIZ]; 150*13652Ssam 151*13652Ssam if(setjmp(Failbuf)) 152*13652Ssam return(FAIL); 153*13652Ssam bytes = 0L; 154*13652Ssam time(&t1); 155*13652Ssam for (;;) { 156*13652Ssam len = grdblk(bufr, BUFSIZ, fn); 157*13652Ssam if (len < 0) { 158*13652Ssam return(FAIL); 159*13652Ssam } 160*13652Ssam bytes += len; 161*13652Ssam /* ittvax!swatt: check return value of fwrite */ 162*13652Ssam if (fwrite(bufr, sizeof (char), len, fp2) != len) 163*13652Ssam return(FAIL); 164*13652Ssam if (len < BUFSIZ) 165*13652Ssam break; 166*13652Ssam } 167*13652Ssam time(&t2); 168*13652Ssam sprintf(text, "received data %ld bytes %ld secs", bytes, t2 - t1); 169*13652Ssam DEBUG(1, "%s\n", text); 170*13652Ssam syslog(text); 171*13652Ssam sysacct(bytes, t2 - t1); 172*13652Ssam return(0); 173*13652Ssam } 174*13652Ssam 175*13652Ssam 176*13652Ssam /* call ultouch every TC calls to either grdblk or gwrblk -- rti!trt */ 177*13652Ssam #define TC 20 178*13652Ssam static int tc = TC; 179*13652Ssam 180*13652Ssam grdblk(blk, len, fn) 181*13652Ssam register int len; 182*13652Ssam char *blk; 183*13652Ssam { 184*13652Ssam register int i, ret; 185*13652Ssam 186*13652Ssam /* call ultouch occasionally -- rti!trt */ 187*13652Ssam if (--tc < 0) { 188*13652Ssam tc = TC; 189*13652Ssam ultouch(); 190*13652Ssam } 191*13652Ssam for (i = 0; i < len; i += ret) { 192*13652Ssam if (Pkdrvon) 193*13652Ssam ret = read(fn, blk, len - i); 194*13652Ssam else 195*13652Ssam ret = pkread(Pk, blk, len - i); 196*13652Ssam if (ret < 0) 197*13652Ssam return(FAIL); 198*13652Ssam blk += ret; 199*13652Ssam if (ret == 0) 200*13652Ssam return(i); 201*13652Ssam } 202*13652Ssam return(i); 203*13652Ssam } 204*13652Ssam 205*13652Ssam 206*13652Ssam gwrblk(blk, len, fn) 207*13652Ssam register char *blk; 208*13652Ssam { 209*13652Ssam register int ret; 210*13652Ssam 211*13652Ssam /* call ultouch occasionally -- rti!trt */ 212*13652Ssam if (--tc < 0) { 213*13652Ssam tc = TC; 214*13652Ssam ultouch(); 215*13652Ssam } 216*13652Ssam if (Pkdrvon) 217*13652Ssam ret = write(fn, blk, len); 218*13652Ssam else 219*13652Ssam ret = pkwrite(Pk, blk, len); 220*13652Ssam return(ret); 221*13652Ssam } 222