xref: /inferno-os/appl/cmd/strings.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth#
2*37da2899SCharles.Forsyth#	initially generated by c2l
3*37da2899SCharles.Forsyth#
4*37da2899SCharles.Forsyth
5*37da2899SCharles.Forsythimplement Strings;
6*37da2899SCharles.Forsyth
7*37da2899SCharles.Forsythinclude "draw.m";
8*37da2899SCharles.Forsyth
9*37da2899SCharles.ForsythStrings: module
10*37da2899SCharles.Forsyth{
11*37da2899SCharles.Forsyth	init: fn(nil: ref Draw->Context, argl: list of string);
12*37da2899SCharles.Forsyth};
13*37da2899SCharles.Forsyth
14*37da2899SCharles.Forsythinclude "sys.m";
15*37da2899SCharles.Forsyth	sys: Sys;
16*37da2899SCharles.Forsythinclude "bufio.m";
17*37da2899SCharles.Forsyth	bufio: Bufio;
18*37da2899SCharles.Forsyth	Iobuf: import bufio;
19*37da2899SCharles.Forsyth
20*37da2899SCharles.ForsythMINSPAN: con 6;
21*37da2899SCharles.ForsythBUFSIZE: con 70;
22*37da2899SCharles.Forsyth
23*37da2899SCharles.Forsythinit(nil: ref Draw->Context, argl: list of string)
24*37da2899SCharles.Forsyth{
25*37da2899SCharles.Forsyth	sys = load Sys Sys->PATH;
26*37da2899SCharles.Forsyth	bufio = load Bufio Bufio->PATH;
27*37da2899SCharles.Forsyth	argc := len argl;
28*37da2899SCharles.Forsyth	if(argc < 2){
29*37da2899SCharles.Forsyth		stringit("");
30*37da2899SCharles.Forsyth		exit;
31*37da2899SCharles.Forsyth	}
32*37da2899SCharles.Forsyth	argl = tl argl;
33*37da2899SCharles.Forsyth	for(i := 1; i < argc; i++){
34*37da2899SCharles.Forsyth		if(argc > 2)
35*37da2899SCharles.Forsyth			sys->print("%s:\n", hd argl);
36*37da2899SCharles.Forsyth		stringit(hd argl);
37*37da2899SCharles.Forsyth		argl = tl argl;
38*37da2899SCharles.Forsyth	}
39*37da2899SCharles.Forsyth}
40*37da2899SCharles.Forsyth
41*37da2899SCharles.Forsythstringit(str: string)
42*37da2899SCharles.Forsyth{
43*37da2899SCharles.Forsyth	cnt := 0;
44*37da2899SCharles.Forsyth	c: int;
45*37da2899SCharles.Forsyth	buf := string array[BUFSIZE] of { * => byte 'z' };
46*37da2899SCharles.Forsyth
47*37da2899SCharles.Forsyth	if(str == nil)
48*37da2899SCharles.Forsyth		fin := bufio->fopen(sys->fildes(0), Bufio->OREAD);
49*37da2899SCharles.Forsyth	else
50*37da2899SCharles.Forsyth		fin = bufio->open(str, Bufio->OREAD);
51*37da2899SCharles.Forsyth	if(fin == nil){
52*37da2899SCharles.Forsyth		sys->fprint(sys->fildes(2), "cannot open %s\n", str);
53*37da2899SCharles.Forsyth		return;
54*37da2899SCharles.Forsyth	}
55*37da2899SCharles.Forsyth	start := big -1;
56*37da2899SCharles.Forsyth	posn := fin.offset();
57*37da2899SCharles.Forsyth	while((c = fin.getc()) >= 0){
58*37da2899SCharles.Forsyth		if(isprint(c)){
59*37da2899SCharles.Forsyth			if(start == big -1)
60*37da2899SCharles.Forsyth				start = posn;
61*37da2899SCharles.Forsyth			buf[cnt++] = c;
62*37da2899SCharles.Forsyth			if(cnt == BUFSIZE){
63*37da2899SCharles.Forsyth				sys->print("%8bd: %s ...\n", start, buf[0: cnt]);
64*37da2899SCharles.Forsyth				start = big -1;
65*37da2899SCharles.Forsyth				cnt = 0;
66*37da2899SCharles.Forsyth			}
67*37da2899SCharles.Forsyth		}
68*37da2899SCharles.Forsyth		else{
69*37da2899SCharles.Forsyth			if(cnt >= MINSPAN)
70*37da2899SCharles.Forsyth				sys->print("%8bd: %s\n", start, buf[0: cnt]);
71*37da2899SCharles.Forsyth			start = big -1;
72*37da2899SCharles.Forsyth			cnt = 0;
73*37da2899SCharles.Forsyth		}
74*37da2899SCharles.Forsyth		posn = fin.offset();
75*37da2899SCharles.Forsyth	}
76*37da2899SCharles.Forsyth	if(cnt >= MINSPAN)
77*37da2899SCharles.Forsyth		sys->print("%8bd: %s\n", start, buf[0: cnt]);
78*37da2899SCharles.Forsyth	fin = nil;
79*37da2899SCharles.Forsyth}
80*37da2899SCharles.Forsyth
81*37da2899SCharles.Forsythisprint(r: int): int
82*37da2899SCharles.Forsyth{
83*37da2899SCharles.Forsyth	if(r >= ' ' && r < 16r7f || r > 16ra0)
84*37da2899SCharles.Forsyth		return 1;
85*37da2899SCharles.Forsyth	else
86*37da2899SCharles.Forsyth		return 0;
87*37da2899SCharles.Forsyth}
88