Annotation of embedaddon/rsync/daemon-parm.awk, revision 1.1
1.1 ! misho 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>