Index: trunk/ippMonitor/scripts/generate
===================================================================
--- trunk/ippMonitor/scripts/generate	(revision 18212)
+++ trunk/ippMonitor/scripts/generate	(revision 19302)
@@ -27,4 +27,5 @@
     &init_key ("MENU");
     &init_key ("STYLE");
+    &init_key ("MODE");
     &init_key ("TABLE");
     &init_key ("TITLE");
@@ -32,4 +33,5 @@
 
     &init_key ("FIELDS");
+    &init_key ("GROUPS");
 
     foreach $line (@list) {
@@ -47,16 +49,21 @@
 	    ($field, $width, $format, $name, $show, $link, $extras) = split (/,\s+/, $value, 7);
 	    if (! $name) { die "table $ARGV[0] missing required elements\n"; }
-	    # ($field) = $field =~ m|\s*(\S+)\s*|;
-
+	    if ($field =~ m|\S+\s+as\s+\S+|) {
+		($fieldreal) = $field =~ m|\S+\s+as\s+(\S+)|;
+	    } else {
+		$fieldreal = $field;
+	    }
+	    
 	    if ($VERBOSE) { printf "%-20s %-20s %-20s %-20s %-20s %-20s\n", $field, $name, $format, $show, $link, $extras; }
 
 	    if ($show eq "") {$show = "value";}
-	    push @field,   $field;
-	    push @width,   $width;
-	    push @format,  $format;
-	    push @name,    $name;
-	    push @show,    $show;
-	    push @link,    $link;
-	    push @extras,  $extras;
+	    push @field,     $field;
+	    push @fieldreal, $fieldreal;
+	    push @width,     $width;
+	    push @format,    $format;
+	    push @name,      $name;
+	    push @show,      $show;
+	    push @link,      $link;
+	    push @extras,    $extras;
 	}
 
@@ -73,4 +80,9 @@
 	if ($key eq "IMAGE") {
 	    push @imagedefs, $value;
+	}
+
+	# the GROUP entries are used in summary tables as arguments to the GROUP BY sql statement
+	if ($key eq "GROUP") {
+	    push @group, $value;
 	}
 
@@ -108,4 +120,5 @@
     &check_key ("MENU", "ipp.menu.dat");
     &check_key ("STYLE", "ipp.css");
+    &check_key ("MODE", "basic");
     &check_key ("TABLE", "");
     &check_key ("TITLE", "");
@@ -115,5 +128,16 @@
     for ($i = 0; $i < @key; $i++) {
 	if ($key[$i] eq "MENU") { $MENU = $value[$i]; }
-    }
+	if ($key[$i] eq "MODE") { 
+	    if ($value[$i] eq "summary") {
+		if (@group == 0) {
+		    print STDERR "a summary table must have at least one group\n";
+		    exit 1;
+		}
+		&define_groups_string (@group);
+	    }
+	}
+    }
+
+    &check_key ("GROUPS", "none");
 
     # define FIELDS and WHERE strings, add to keypairs
@@ -246,5 +270,5 @@
 	    print FILE "write_sort_cell (\"list\", \"$opf{$value}\", \$buttonLink, \$ID, '$myFile');\n";
 	} else {
-	    print FILE "write_sort_cell (\"list\", \"$field[$i]\", \$buttonLink, \$ID, '$myFile');\n";
+	    print FILE "write_sort_cell (\"list\", \"$fieldreal[$i]\", \$buttonLink, \$ID, '$myFile');\n";
 	}
     }
@@ -281,5 +305,5 @@
     }	
     for ($i = 0; $i < @field; $i++) {
-	$value = $field[$i];
+	$value = $fieldreal[$i];
 	if ($value eq "*") { next; }
 	if ($format[$i] eq "%s") {
@@ -291,5 +315,5 @@
 	}
     }
-    print FILE "\$WHERE = check_ordering (\$WHERE);\n";
+    print FILE "\$WHERE = check_ordering ('$GROUPS', \$WHERE);\n";
 }
 
@@ -298,5 +322,5 @@
 
     for ($i = 0; $i < @field; $i++) {
-	$value = $field[$i];
+	$value = $fieldreal[$i];
 	if ($value eq "*") { next; }
 	if ($format[$i] eq "%s") {
@@ -323,7 +347,7 @@
 	} else {
 	    if ($format[$i] eq "%s") {
-		print FILE "write_query_row ('$field[$i]', $width[$i], 'string');\n";
+		print FILE "write_query_row ('$fieldreal[$i]', $width[$i], 'string');\n";
 	    } else {
-		print FILE "write_query_row ('$field[$i]', $width[$i], 'min');\n";
+		print FILE "write_query_row ('$fieldreal[$i]', $width[$i], 'min');\n";
 	    }
 	}
@@ -336,5 +360,5 @@
 	    print FILE "echo \"<td> &nbsp; </td>\\n\";\n";
 	} else {
-	    print FILE "write_query_row ('$field[$i]', $width[$i], 'max');\n";
+	    print FILE "write_query_row ('$fieldreal[$i]', $width[$i], 'max');\n";
 	}
     }
@@ -421,4 +445,17 @@
 }
 
+sub define_groups_string {
+    my (@array) = @_;
+    my ($i);
+
+    $GROUPS = "$array[0]";
+    for ($i = 1; $i < @array; $i++) {
+	# skip * fields (not a valid query element
+	if ($array[$i] eq "*") { next; }
+	$GROUPS = "$GROUPS,$array[$i]";
+    }
+    set_keypair ("GROUPS", $GROUPS);
+}
+
 sub define_fields_count {
     my ($i, $Nrow);
@@ -502,7 +539,7 @@
 	    for ($i = 0; $i < @field; $i++) {
 		if ($field[$i] eq "*") { next; }
-		if ($value =~ m|^\$$field[$i]|) {
-		    # print "field: $field[$i]\n";
-		    ($name, $extra) = $value =~ m|^\$($field[$i])\@(\S+)|;
+		if ($value =~ m|^\$$fieldreal[$i]|) {
+		    # print "field: $fieldreal[$i]\n";
+		    ($name, $extra) = $value =~ m|^\$($fieldreal[$i])\@(\S+)|;
 		    # print "name: $name\n";
 		    # print "extra: $extra\n";
@@ -543,8 +580,8 @@
 
     for ($i = 0; $i < @field; $i++) {
-	# print STDERR "$i: $field[$i] : $fieldname\n";
+	# print STDERR "$i: $fieldreal[$i] : $fieldname\n";
 
 	if ($field[$i] eq "*") { next; }
-	if ($fieldname ne $field[$i]) { next; }
+	if ($fieldname ne $fieldreal[$i]) { next; }
 
 
