#!/usr/bin/mawk -We
# *********************************************************************
# maketable: builds a valid table header from a template file.
#
# Copyright (c) 1998,1999,2000,2001,2002,2003 Carlo Strozzi
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# *********************************************************************
#  $Id: maketable,v 1.3 2003/08/11 13:56:31 carlo Exp $

BEGIN {
   NULL = ""; FS = OFS = "\t"

   # Get local settings.
   nosql_install = ENVIRON["NOSQL_INSTALL"]
   stdout = ENVIRON["NOSQL_STDOUT"]
   stderr = ENVIRON["NOSQL_STDERR"]

   # Set default values if necessary.
   if (nosql_install == NULL) nosql_install = "/usr/local/nosql"
   if (stdout == NULL) stdout = "/dev/stdout"
   if (stderr == NULL) stderr = "/dev/stderr"

   while(ARGV[++i] != NULL) {
      if (ARGV[i] == "-i" || ARGV[i] == "--input") i_file = ARGV[++i]
      else if (ARGV[i] == "-m" || ARGV[i] == "--match") pattern = ARGV[++i]
      else if (ARGV[i] == "-o" || ARGV[i] == "--output") o_file = ARGV[++i]
      else if (ARGV[i] == "-c" || ARGV[i] == "--count") cnt = 1
      else if (ARGV[i] == "-n" || ARGV[i] == "--names-only") names = 1
      else if (ARGV[i] == "-h" || ARGV[i] == "--help") {
	 system("grep -v '^#' " nosql_install "/help/maketable.txt")
	 rc = 1
	 exit(rc)
      }
   }

   ARGC = 1						# Fix argv[]

   if (o_file == NULL) o_file = stdout
   if (i_file != NULL) { ARGV[1] = i_file; ARGC = 2 }
}

# Skip empty and comment lines.
/^[ \t]*$/ || /^[ \t]*#/ { next }

{
  # Make sure we do not get fooled by blanks.
  sub(/^ +/, NULL)
  gsub(/ +/, "\t")
  if (pattern != NULL) {
     if ($1 ~ pattern) {
     	if ($1 ~ /^[0-9]+$/) out_rec = out_rec OFS $2
     	else out_rec = out_rec OFS $1
     }
  }  else {
     if ($1 ~ /^[0-9]+$/) out_rec = out_rec OFS $2
     else out_rec = out_rec OFS $1
  }
}

END {
  if (rc) exit(rc)

  # Remove the extra leading tab.
  sub(/^\t/, NULL, out_rec)

  # Insert SOH markers if necessary.
  if (!names) {
     printf("\001")
     gsub(/\t/,"\t\001", out_rec)
  }

  print out_rec > o_file

  if (cnt && !names) {
     $0 = out_rec
     out_rec = 1
     i = 1
     while (++i <= NF) out_rec = out_rec OFS i
     print out_rec > o_file
  }
}

# End of program
