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