File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / rsync / daemon-parm.awk
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 00:32:36 2021 UTC (3 years, 3 months ago) by misho
Branches: rsync, MAIN
CVS tags: v3_2_3, HEAD
rsync 3.2.3

    1: #!/usr/bin/awk -f
    2: 
    3: # The caller must pass arg: daemon-parm.txt
    4: # The resulting code is output into daemon-parm.h
    5: 
    6: BEGIN {
    7:     heading = "/* DO NOT EDIT THIS FILE!  It is auto-generated from a list of values in " ARGV[1] "! */\n\n"
    8:     sect = psect = defines = accessors = prior_ptype = ""
    9:     parms = "\nstatic struct parm_struct parm_table[] = {"
   10:     comment_fmt = "\n/********** %s **********/\n"
   11:     tdstruct = "typedef struct {"
   12: }
   13: 
   14: /^\s*$/ { next }
   15: /^#/ { next }
   16: 
   17: /^Globals:/ {
   18:     if (defines != "") {
   19: 	print "The Globals section must come first!"
   20: 	defines = ""
   21: 	exit
   22:     }
   23:     defines = tdstruct
   24:     values = "\nstatic const all_vars Defaults = {\n    { /* Globals: */\n"
   25:     exps = exp_values = sprintf(comment_fmt, "EXP")
   26:     sect = "GLOBAL"
   27:     psect = ", P_GLOBAL, &Vars.g."
   28:     next
   29: }
   30: 
   31: /^Locals:/ {
   32:     if (sect == "") {
   33: 	print "The Locals section must come after the Globals!"
   34: 	exit
   35:     }
   36:     defines = defines exps "} global_vars;\n\n" tdstruct
   37:     values = values exp_values "\n    }, { /* Locals: */\n"
   38:     exps = exp_values = sprintf(comment_fmt, "EXP")
   39:     sect = "LOCAL"
   40:     psect = ", P_LOCAL, &Vars.l."
   41:     next
   42: }
   43: 
   44: /^(STRING|CHAR|PATH|INTEGER|ENUM|OCTAL|BOOL|BOOLREV|BOOL3)[ \t]/ {
   45:     ptype = $1
   46:     name = $2
   47:     $1 = $2 = ""
   48:     sub(/^[ \t]+/, "")
   49: 
   50:     if (ptype != prior_ptype) {
   51: 	comment = sprintf(comment_fmt, ptype)
   52: 	defines = defines comment
   53: 	values = values comment
   54: 	parms = parms "\n"
   55: 	accessors = accessors "\n"
   56: 	prior_ptype = ptype
   57:     }
   58: 
   59:     if (ptype == "STRING" || ptype == "PATH") {
   60: 	atype = "STRING"
   61: 	vtype = "char*"
   62:     } else if (ptype ~ /BOOL/) {
   63: 	atype = vtype = "BOOL"
   64:     } else if (ptype == "CHAR") {
   65: 	atype = "CHAR"
   66: 	vtype = "char"
   67:     } else {
   68: 	atype = "INTEGER"
   69: 	vtype = "int"
   70:     }
   71: 
   72:     # The name might be var_name|public_name
   73:     pubname = name
   74:     sub(/\|.*/, "", name)
   75:     sub(/.*\|/, "", pubname)
   76:     gsub(/_/, " ", pubname)
   77:     gsub(/-/, "", name)
   78: 
   79:     if (ptype == "ENUM")
   80: 	enum = "enum_" name
   81:     else
   82: 	enum = "NULL"
   83: 
   84:     defines = defines "\t" vtype " " name ";\n"
   85:     values = values "\t" $0 ", /* " name " */\n"
   86:     parms = parms " {\"" pubname "\", P_" ptype psect name ", " enum ", 0},\n"
   87:     accessors = accessors "FN_" sect "_" atype "(lp_" name ", " name ")\n"
   88: 
   89:     if (vtype == "char*") {
   90: 	exps = exps "\tBOOL " name "_EXP;\n"
   91: 	exp_values = exp_values "\tFalse, /* " name "_EXP */\n"
   92:     }
   93: 
   94:     next
   95: }
   96: 
   97: /./ {
   98:     print "Extraneous line:" $0
   99:     defines = ""
  100:     exit
  101: }
  102: 
  103: END {
  104:     if (sect != "" && defines != "") {
  105: 	defines = defines exps "} local_vars;\n\n"
  106: 	defines = defines tdstruct "\n\tglobal_vars g;\n\tlocal_vars l;\n} all_vars;\n"
  107: 	values = values exp_values "\n    }\n};\n\nstatic all_vars Vars;\n"
  108: 	parms = parms "\n {NULL, P_BOOL, P_NONE, NULL, NULL, 0}\n};\n"
  109: 	print heading defines values parms accessors > "daemon-parm.h"
  110:     } else {
  111: 	print "Failed to parse the data in " ARGV[1]
  112: 	exit 1
  113:     }
  114: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>