1*37da2899SCharles.Forsythimplement Tcl_Utils; 2*37da2899SCharles.Forsythinclude "sys.m"; 3*37da2899SCharles.Forsythinclude "draw.m"; 4*37da2899SCharles.Forsythinclude "tk.m"; 5*37da2899SCharles.Forsythinclude "tcl.m"; 6*37da2899SCharles.Forsythinclude "tcllib.m"; 7*37da2899SCharles.Forsythinclude "utils.m"; 8*37da2899SCharles.Forsyth 9*37da2899SCharles.Forsythbreak_it(s : string) : array of string { 10*37da2899SCharles.Forsyth argv:= array[200] of string; 11*37da2899SCharles.Forsyth buf : string; 12*37da2899SCharles.Forsyth argc := 0; 13*37da2899SCharles.Forsyth nc := 0; 14*37da2899SCharles.Forsyth outer: 15*37da2899SCharles.Forsyth for (i := 0; i < len s ; ) { 16*37da2899SCharles.Forsyth case int s[i] { 17*37da2899SCharles.Forsyth ' ' or '\t' or '\n' => 18*37da2899SCharles.Forsyth if (nc > 0) { # end of a word? 19*37da2899SCharles.Forsyth argv[argc++] = buf; 20*37da2899SCharles.Forsyth buf = nil; 21*37da2899SCharles.Forsyth nc = 0; 22*37da2899SCharles.Forsyth } 23*37da2899SCharles.Forsyth i++; 24*37da2899SCharles.Forsyth '{' => 25*37da2899SCharles.Forsyth if (s[i+1]=='}'){ 26*37da2899SCharles.Forsyth argv[argc++] = nil; 27*37da2899SCharles.Forsyth buf = nil; 28*37da2899SCharles.Forsyth nc = 0; 29*37da2899SCharles.Forsyth i+=2; 30*37da2899SCharles.Forsyth }else{ 31*37da2899SCharles.Forsyth nbra := 1; 32*37da2899SCharles.Forsyth for (i++; i < len s; i++) { 33*37da2899SCharles.Forsyth if (s[i] == '{') 34*37da2899SCharles.Forsyth nbra++; 35*37da2899SCharles.Forsyth else if (s[i] == '}') { 36*37da2899SCharles.Forsyth nbra--; 37*37da2899SCharles.Forsyth if (nbra == 0) { 38*37da2899SCharles.Forsyth i++; 39*37da2899SCharles.Forsyth continue outer; 40*37da2899SCharles.Forsyth } 41*37da2899SCharles.Forsyth } 42*37da2899SCharles.Forsyth buf[nc++] = s[i]; 43*37da2899SCharles.Forsyth } 44*37da2899SCharles.Forsyth } 45*37da2899SCharles.Forsyth * => 46*37da2899SCharles.Forsyth buf[nc++] = s[i++]; 47*37da2899SCharles.Forsyth } 48*37da2899SCharles.Forsyth } 49*37da2899SCharles.Forsyth if (nc > 0) # fix up last word if present 50*37da2899SCharles.Forsyth argv[argc++] = buf; 51*37da2899SCharles.Forsyth ret := array[argc] of string; 52*37da2899SCharles.Forsyth ret[0:] = argv[0:argc]; 53*37da2899SCharles.Forsyth return ret; 54*37da2899SCharles.Forsyth} 55*37da2899SCharles.Forsyth 56*37da2899SCharles.Forsytharr_resize(argv : array of string) : array of string { 57*37da2899SCharles.Forsyth ret := array[len argv + 25] of string; 58*37da2899SCharles.Forsyth ret[0:]=argv; 59*37da2899SCharles.Forsyth return ret; 60*37da2899SCharles.Forsyth} 61*37da2899SCharles.Forsyth 62