# requirez(fileExists.awk) # requirez(size.awk) function simulateFromFile(f) { if (fileExists(f)) { array(Names); array(Cdf); file2Cdf(f,Names,Cdf); simulate(); } else { bad(f " unknown") }; } function simulate( com,x,want,start,here,i,wants,max,sum) { if (empty(Cdf)) return 1; if (Risk) printf ""> Risk; start=here=N com=simFilter(); while(here-- > 0 ) { array(Cache); array(want); if (Pause && ! ((start - N) % Pause)) blab(" " start - N); sample1(Names[0],Cdf,Cache); select(Wbs,WbsRows,Names[0],Cdf,Cache,want); for(i in want) { wants[i]++ max = wants[i] >= max ? wants[i] : max; } } simReport(wants,max,com); close(com); } function emulate(f, com,lines,i,want,any,max) { com=simFilter(); while(getline < f) { if (++lines==1) { for(i=1;i<=NF;i++) { Names[++Names[0]]=$i; Names[$i]= Names[0] } } else { if (NF == Names[0]) { array(Cache); array(want); for(i=1;i<=NF;i++) Cache[i]=$i; select(Wbs,WbsRows,Names[0],Cdf,Cache,want); for(i in want) { wants[i]++; max = wants[i] >= max ? wants[i] : max; }}}} simReport(wants,max,com); close(com); close(f); } function simFilter() { return "sort -t: -n +2 -n +0 | malign -b :" } function simReport(wants,max,com, i,x) { for( i in wants) { x= round(100*wants[i]/max); printf("%s : %s : %s %% : %s\n", i, Wbs["wbs",i,"factor"], x > 100 ? 100 : x, str(30*wants[i]/max,"*")) | com } } function doVerboseStuff() { if (Verbose) { demo4(); printCdf(Names,Cdf,Verbose); }}