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