#!/bin/sh PROGNAME="$0" usage() { cat <&2 exit 1 } debug() { if [ $DEBUG -ge $1 ]; then echo "`basename $PROGNAME`: $2" >&2 fi } # # Process the options # DEBUG=0 VARS="" TYPE=man while getopts "t:v:D:h?" opt do case $opt in t) TYPE="$OPTARG";; v) VARS="$VARS -v $OPTARG";; D) DEBUG="$OPTARG";; h|\?) usage;; esac done shift `expr $OPTIND - 1` # # Main Program # if [ -x /opt/sfw/bin/gawk ]; then AWK=/opt/sfw/bin/gawk else AWK=awk fi case "$TYPE" in sh) ;; man) ;; html) ;; *) error "Wrong type '$TYPE'; should be sh, man, or html" ;; esac $AWK -v TYPE="$TYPE" $VARS ' function do1(file, i) { if (nfiles++ != 0) nrec = nr+1 else nrec = 0 while ((getline < file) > 0) { ++nrec if (nrec == nr) { print comment_begin if (!comment_blank) print comment print comment " DO NOT EDIT! This file is generated from " file print comment_end } split($0, a) if (a[1] == "#include") { gsub(/"/, "", a[2]) if (comment_blank) print "" do1(a[2]) } else if (a[1] == "#define") { def[a[2]] = 1 print comment } else if (a[1] == "#ifdef") { if (!def[a[2]]) skip = 1 print comment } else if (a[1] == "#ifndef") { if (def[a[2]]) skip = 1 print comment } else if (a[1] == "#endif") { skip = 0 print comment } else if (skip) print comment else print $0 } close(file) } BEGIN { if (TYPE == "sh") { nr = 2 comment_begin = "#" comment = "#" comment_end = "#" comment_blank = 0 } else if (TYPE == "man") { nr = 1 comment_begin = "'"'"'\\\" t" comment = "'"'"'\\\"" comment_end = "'"'"'\\\"" comment_blank = 0 } else if (TYPE == "html") { nr = 1 comment_begin = "" comment_blank = 1 } if (DEF1) def[DEF1] = 1; if (DEF2) def[DEF2] = 1; if (DEF3) def[DEF3] = 1; if (DEF4) def[DEF4] = 1; if (DEF5) def[DEF5] = 1; if (DEF6) def[DEF6] = 1; if (DEF7) def[DEF7] = 1; if (DEF8) def[DEF8] = 1; if (DEF9) def[DEF9] = 1; #for (i in def) #print i, def[i] do1(ARGV[1]) exit }' $*