#!/usr/local/bin/perl
$index = 0;
while (<STDIN>) {
    next if /^[ \t]*$/ || /^#/;
    chop;
    ($name, $value, $char, $color) = split(/\t+/);
    $value{$name} = $value;
    $char = '"' . $char . '"' if length($char) == 1;
    $char{$name} = $char;
    $color{$name} = $color;
    ($NAME{$name} = $name) =~ tr/a-z/A-Z/;
    ($Name{$name} = $name) =~ s/^(.)/\u\1/;
    $index{$name} = $index++;
    push(@names,$name);
}

$num = @names;

format = 
@<<<<<< @<<<<<<<<<<<<<<< @>>
$define,$NAME{$i},        $value{$i}
.
$define='#define';

print "#define NSPECVALS $num\n\n";

foreach $i (@names) {
#    print "#define $NAME{$i} $value{$i}\n";
  write;
}

print <<'END';

static tValueSpec ValueSpec[] = {
END
foreach $i (@names) {
    print "  {$NAME{$i}, \"$i\"},\n";
}
print "};\n";

print <<'END';

static XtResource application_resources[] = {
  {"background", "Background", XtRPixel, sizeof(Pixel),  
   (Cardinal)&bg, XtRString, (caddr_t) "gray51"},
  {"font", "Font", XtRString, sizeof(String), 
   (Cardinal)&fontname, XtRString, (caddr_t) "fixed"},
  {"foreground", "Foreground", XtRPixel,  sizeof(Pixel),  
   (Cardinal)&fg, XtRString, (caddr_t) "black"},
  {"name", "Name", XtRString, sizeof(char *), 
   (Cardinal)&progname, XtRString, APP_NAME},

  {"cells", "Cells", XtRInt, sizeof(int),
   (Cardinal)&cells, XtRInt, (caddr_t) &defaultCells},
  {"cellsize", "Cellsize", XtRInt, sizeof(int),
   (Cardinal)&cellsize, XtRInt, (caddr_t) &defaultCellsize},
END

foreach $i (@names) {
    print "
  {\"${i}_color\", \"$Name{$i}_color\", XtRString, sizeof(String),
   (Cardinal)&ValueSpec[$index{$i}].cname,XtRString, (caddr_t) \"$color{$i}\"},
  {\"${i}_char\", \"$Name{$i}_char\", XtRString, sizeof(String),
   (Cardinal)&ValueSpec[$NAME{$i}].ch, XtRString, (caddr_t) $char{$i}},
";
}
print "};\n";
print <<'END';

static XrmOptionDescRec optionDescList[] = {
  {"-cells", "*cells", XrmoptionSepArg, (caddr_t) NULL},
  {"-cellsize", "*cellsize", XrmoptionSepArg, (caddr_t) NULL},
END

foreach $i (@names) {
  print "
  {\"-${i}_color\", \"*${i}_color\", XrmoptionSepArg, (caddr_t) NULL},
  {\"-${i}_char\", \"*${i}_char\", XrmoptionSepArg, (caddr_t) NULL},
";
}
print "};\n";
