1*74a4d8c2SCharles.Forsyth /*
2*74a4d8c2SCharles.Forsyth * send S records to rpcg
3*74a4d8c2SCharles.Forsyth */
4*74a4d8c2SCharles.Forsyth
5*74a4d8c2SCharles.Forsyth #include <u.h>
6*74a4d8c2SCharles.Forsyth #include <libc.h>
7*74a4d8c2SCharles.Forsyth #include <bio.h>
8*74a4d8c2SCharles.Forsyth
9*74a4d8c2SCharles.Forsyth static int dbg;
10*74a4d8c2SCharles.Forsyth static char buf[2048];
11*74a4d8c2SCharles.Forsyth static int run=1;
12*74a4d8c2SCharles.Forsyth static void stuffbym(char*, int, int);
13*74a4d8c2SCharles.Forsyth static void getdot(void);
14*74a4d8c2SCharles.Forsyth
15*74a4d8c2SCharles.Forsyth void
main(int argc,char ** argv)16*74a4d8c2SCharles.Forsyth main(int argc, char **argv)
17*74a4d8c2SCharles.Forsyth {
18*74a4d8c2SCharles.Forsyth int n;
19*74a4d8c2SCharles.Forsyth char *l;
20*74a4d8c2SCharles.Forsyth Biobuf *f;
21*74a4d8c2SCharles.Forsyth static int p;
22*74a4d8c2SCharles.Forsyth
23*74a4d8c2SCharles.Forsyth ARGBEGIN{
24*74a4d8c2SCharles.Forsyth case 'd': dbg++; break;
25*74a4d8c2SCharles.Forsyth case 'n': run=0; break;
26*74a4d8c2SCharles.Forsyth }ARGEND
27*74a4d8c2SCharles.Forsyth
28*74a4d8c2SCharles.Forsyth f = Bopen(*argv? *argv: "k.mx", OREAD);
29*74a4d8c2SCharles.Forsyth if(f == 0) {
30*74a4d8c2SCharles.Forsyth fprint(2, "sload: cannot open k.mx: %r\n");
31*74a4d8c2SCharles.Forsyth exits("sload");
32*74a4d8c2SCharles.Forsyth }
33*74a4d8c2SCharles.Forsyth getdot();
34*74a4d8c2SCharles.Forsyth while((l = Brdline(f, '\n')) != 0) {
35*74a4d8c2SCharles.Forsyth l[Blinelen(f)-1] = '\r';
36*74a4d8c2SCharles.Forsyth stuffbym(l, Blinelen(f), 16);
37*74a4d8c2SCharles.Forsyth getdot();
38*74a4d8c2SCharles.Forsyth if(++p % 25 == 0)
39*74a4d8c2SCharles.Forsyth write(2, ".", 1);
40*74a4d8c2SCharles.Forsyth }
41*74a4d8c2SCharles.Forsyth exits(0);
42*74a4d8c2SCharles.Forsyth }
43*74a4d8c2SCharles.Forsyth
44*74a4d8c2SCharles.Forsyth static void
stuffbym(char * l,int n,int m)45*74a4d8c2SCharles.Forsyth stuffbym(char *l, int n, int m)
46*74a4d8c2SCharles.Forsyth {
47*74a4d8c2SCharles.Forsyth int nr, ns;
48*74a4d8c2SCharles.Forsyth
49*74a4d8c2SCharles.Forsyth while(n > 0) {
50*74a4d8c2SCharles.Forsyth ns = n;
51*74a4d8c2SCharles.Forsyth if(ns > m)
52*74a4d8c2SCharles.Forsyth ns = m;
53*74a4d8c2SCharles.Forsyth write(1, l, ns);
54*74a4d8c2SCharles.Forsyth l += ns;
55*74a4d8c2SCharles.Forsyth n -= ns;
56*74a4d8c2SCharles.Forsyth }
57*74a4d8c2SCharles.Forsyth }
58*74a4d8c2SCharles.Forsyth
59*74a4d8c2SCharles.Forsyth static void
getdot(void)60*74a4d8c2SCharles.Forsyth getdot(void)
61*74a4d8c2SCharles.Forsyth {
62*74a4d8c2SCharles.Forsyth char c;
63*74a4d8c2SCharles.Forsyth
64*74a4d8c2SCharles.Forsyth for(;;){
65*74a4d8c2SCharles.Forsyth if(read(0, &c, 1) != 1)
66*74a4d8c2SCharles.Forsyth exits("bang");
67*74a4d8c2SCharles.Forsyth write(2, &c, 1);
68*74a4d8c2SCharles.Forsyth if(c == '.')
69*74a4d8c2SCharles.Forsyth break;
70*74a4d8c2SCharles.Forsyth }
71*74a4d8c2SCharles.Forsyth }
72