BEGIN                {
		       countedWeight["all"] = 0;
		       missedWeight["all"] = 0;
		       runtime["all"] = 0;

		       countedWeight["line"] = 0;
		       missedWeight["line"] = 0;
		       runtime["line"] = 0;

		       countedWeight["fill"] = 0;
		       missedWeight["fill"] = 0;
		       runtime["fill"] = 0;

		       countedWeight["blit"] = 0;
		       missedWeight["blit"] = 0;
		       runtime["blit"] = 0;

		       countedWeight["arc"] = 0;
		       missedWeight["arc"] = 0;
		       runtime["arc"] = 0;

		       countedWeight["text"] = 0;
		       missedWeight["text"] = 0;
		       runtime["text"] = 0;

		       countedWeight["complex"] = 0;
		       missedWeight["complex"] = 0;
		       runtime["complex"] = 0;

		       sunValue["line10"]           = 3456.00;
		       sunValue["line100"]          = 1745.45;
		       sunValue["line400"]          =  704.00;

		       sunValue["dline10"]          =  768.00;
		       sunValue["dline100"]         =  170.67;
		       sunValue["dline400"]         =   46.55;

		       sunValue["wline10"]          =   79.45;
		       sunValue["wline100"]         =   20.21;
		       sunValue["wline400"]         =    6.00;

		       sunValue["rects10"]          = 1722.18;
		       sunValue["rects100"]         = 1070.55;
		       sunValue["rects400"]         =  452.92;

		       sunValue["fillrects10"]      = 3916.80;
		       sunValue["fillrects100"]     = 1024.00;
		       sunValue["fillrects400"]     =  176.00;

		       sunValue["tiledrects10"]     = 2739.20;
		       sunValue["tiledrects100"]    =  329.14;
		       sunValue["tiledrects400"]    =   41.29;

		       sunValue["stippledrects10"]  = 1186.91;
		       sunValue["stippledrects100"] =  153.60;
		       sunValue["stippledrects400"] =   35.56;

		       sunValue["invrects10"]       = 3010.10;
		       sunValue["invrects100"]      =  859.91;
		       sunValue["invrects400"]      =  119.50;

		       sunValue["arcs10"]           =    4.82;
		       sunValue["arcs100"]          =    1.27;
		       sunValue["arcs400"]          =    0.55;

		       sunValue["filledarcs10"]     =   15.52;
		       sunValue["filledarcs100"]    =    5.45;
		       sunValue["filledarcs400"]    =    2.60;

		       sunValue["filledpoly100"]    =   90.33;

		       sunValue["screencopy10"]     =  158.50;
		       sunValue["screencopy100"]    =   83.57;
		       sunValue["screencopy400"]    =   17.76;

		       sunValue["scroll"]           =   26.59;

		       sunValue["bitmapcopy10"]     =  232.82;
		       sunValue["bitmapcopy100"]    =   52.76;
		       sunValue["bitmapcopy400"]    =    8.19;

		       sunValue["string"]           = 5009.45;

		       sunValue["complex1"]         =   15.30;
		     }

/ line10 /           { x = "line10";            w = 300;  g = "line"; }
/ line100 /          { x = "line100";           w = 400;  g = "line"; }
/ line400 /          { x = "line400";           w = 300;  g = "line"; }
/ dline10 /          { x = "dline10";           w =  50;  g = "line"; }
/ dline100 /         { x = "dline100";          w = 150;  g = "line"; }
/ dline400 /         { x = "dline400";          w = 100;  g = "line"; }
/ wline10 /          { x = "wline10";           w =  50;  g = "line"; }
/ wline100 /         { x = "wline100";          w = 100;  g = "line"; }
/ wline400 /         { x = "wline400";          w =  50;  g = "line"; }
/ rects10 /          { x = "rects10";           w = 150;  g = "line"; }
/ rects100 /         { x = "rects100";          w = 250;  g = "line"; }
/ rects400 /         { x = "rects400";          w = 150;  g = "line"; }
/ fillrects10 /      { x = "fillrects10";       w = 350;  g = "fill"; }
/ fillrects100 /     { x = "fillrects100";      w = 450;  g = "fill";  }
/ fillrects400 /     { x = "fillrects400";      w = 350;  g = "fill";  }
/ tiledrects10 /     { x = "tiledrects10";      w = 150;  g = "fill";  }
/ tiledrects100 /    { x = "tiledrects100";     w = 250;  g = "fill";  }
/ tiledrects400 /    { x = "tiledrects400";     w = 150;  g = "fill";  }
/ stippledrects10 /  { x = "stippledrects10";   w =  50;  g = "fill";  }
/ stippledrects100 / { x = "stippledrects100";  w = 100;  g = "fill";  }
/ stippledrects400 / { x = "stippledrects400";  w =  50;  g = "fill";  }
/ arcs10 /           { x = "arcs10";            w =  50;  g = "arc";  }
/ arcs100 /          { x = "arcs100";           w = 100;  g = "arc";  }
/ arcs400 /          { x = "arcs400";           w =  50;  g = "arc";  }
/ filledarcs10 /     { x = "filledarcs10";      w =  50;  g = "arc";  }
/ filledarcs100 /    { x = "filledarcs100";     w = 100;  g = "arc";  }
/ filledarcs400 /    { x = "filledarcs400";     w =  50;  g = "arc";  }
/ filledpoly100 /    { x = "filledpoly100";     w = 200;  g = "dummy"; }
/ invrects10 /       { x = "invrects10";        w = 100;  g = "blit"; }
/ invrects100 /      { x = "invrects100";       w = 150;  g = "blit"; }
/ invrects400 /      { x = "invrects400";       w = 100;  g = "blit"; }
/ screencopy10 /     { x = "screencopy10";      w =  50;  g = "blit"; }
/ screencopy100 /    { x = "screencopy100";     w = 150;  g = "blit"; }
/ screencopy400 /    { x = "screencopy400";     w = 100;  g = "blit"; }
/ scroll /           { x = "scroll";            w =1000;  g = "blit"; }
/ bitmapcopy10 /     { x = "bitmapcopy10";      w =  50;  g = "blit"; }
/ bitmapcopy100 /    { x = "bitmapcopy100";     w = 100;  g = "blit"; }
/ bitmapcopy400 /    { x = "bitmapcopy400";     w =  50;  g = "blit"; }
/ imagestring/       { x = "string";            w =3000;  g = "text"; }
/ complex1 /         { x = "complex1";          w = 800;  g = "complex"; }

/rate =/             {
		       if ( x != "dummy" ) {
			 ratio = $3 / sunValue[x];
			 runtime["all"] = runtime["all"] + w/ratio;
			 countedWeight["all"] = countedWeight["all"] + w;

			 runtime[g] = runtime[g] + w/ratio;
			 countedWeight[g] = countedWeight[g] + w;
			 x = "dummy"; w = 1
		       }
		     }

/NOT RUN/            {
		       if (x != "dummy") {
			 missedWeight["all"] = missedWeight["all"] + w;
			 missedWeight[g] = missedWeight[g] + w;
			 x = "dummy"; w = 1
		      }
		     }

END                  {
		       cw = countedWeight["line"];
		       mw = missedWeight["line"];
		       rt = runtime["line"];
		       allWeight = 10000;

		       if (cw == 0) {
			   print "TOTAL ? lineStones"
		       } else {
			   rt = (rt*allWeight)/cw;
			   if (mw > 0) {
			       text = "expected ";
		           } else {
			       text = "";
		           }

			   ratio = allWeight/rt;
			   stones = int(allWeight * ratio);
			   t = sprintf("TOTAL %s %8.0f lineStones",text,stones);
			   print t;
		       }

		       cw = countedWeight["fill"];
		       mw = missedWeight["fill"];
		       rt = runtime["fill"];

		       if (cw == 0) {
			   print "TOTAL ? fillStones"
		       } else {
			   rt = (rt*allWeight)/cw;
			   if (mw > 0) {
			       text = "expected ";
		           } else {
			       text = "";
		           }

			   ratio = allWeight/rt;
			   stones = int(allWeight * ratio);
			   t = sprintf("TOTAL %s %8.0f fillStones",text,stones);
			   print t;
		       }

		       cw = countedWeight["blit"];
		       mw = missedWeight["blit"];
		       rt = runtime["blit"];

		       if (cw == 0) {
			   print "TOTAL ? blitStones"
		       } else {
			   rt = (rt*allWeight)/cw;
			   if (mw > 0) {
			       text = "expected ";
		           } else {
			       text = "";
		           }

			   ratio = allWeight/rt;
			   stones = int(allWeight * ratio);
			   t = sprintf("TOTAL %s %8.0f blitStones",text,stones);
			   print t;
		       }

		       cw = countedWeight["arc"];
		       mw = missedWeight["arc"];
		       rt = runtime["arc"];

		       if (cw == 0) {
			   print "TOTAL ? arcStones"
		       } else {
			   rt = (rt*allWeight)/cw;
			   if (mw > 0) {
			       text = "expected ";
		           } else {
			       text = "";
		           }

			   ratio = allWeight/rt;
			   stones = int(allWeight * ratio);
			   t = sprintf("TOTAL %s %8.0f arcStones",text,stones);
			   print t;
		       }

		       cw = countedWeight["text"];
		       mw = missedWeight["text"];
		       rt = runtime["text"];

		       if (cw == 0) {
			   print "TOTAL ? textStones"
		       } else {
			   rt = (rt*allWeight)/cw;
			   if (mw > 0) {
			       text = "expected ";
		           } else {
			       text = "";
		           }

			   ratio = allWeight/rt;
			   stones = int(allWeight * ratio);
			   t = sprintf("TOTAL %s %8.0f textStones",text,stones);
			   print t;
		       }

		       cw = countedWeight["complex"];
		       mw = missedWeight["complex"];
		       rt = runtime["complex"];

		       if (cw == 0) {
			   print "TOTAL ? complexStones"
		       } else {
			   rt = (rt*allWeight)/cw;
			   if (mw > 0) {
			       text = "expected ";
		           } else {
			       text = "";
		           }

			   ratio = allWeight/rt;
			   stones = int(allWeight * ratio);
			   t = sprintf("TOTAL %s %8.0f complexStones",text,stones);
			   print t;
		       }

		       cw = countedWeight["all"];
		       mw = missedWeight["all"];
		       rt = runtime["all"];

		       if (cw == 0) {
			   print "TOTAL ? xStones"
		       } else {
			   rt = (rt*allWeight)/cw;
			   if (mw > 0) {
			       text = "expected ";
		           } else {
			       text = "";
		           }

			   ratio = allWeight/rt;
			   stones = int(allWeight * ratio);
		           t = sprintf("TOTAL %s %8.0f xStones",text,stones);
			   print t;
		       }
		     }
