Index: gen_conf.sh
===================================================================
--- gen_conf.sh (revision 33456)
+++ gen_conf.sh (nonexistent)
@@ -1,206 +0,0 @@
-#!/bin/sh
-
-# TODO: rewrite this in C for better portability
-
-if test -z "$AWK"
-then
- AWK="awk"
-fi
-
-# Trickery: the name (for path) of the current struct is learned only at
-# the end, when the struct is closed because struct type names would be
-# global and pollute the namespace while variable names are local. So to
-# pick up trailing variable names:
-# - each struct gets an integer uid, 0 being the root; structs remember
-# their ancestry using PARENT[uid].
-# - each entry is remembered in an SRC[uid, n], where n is between 0
-# and LEN[uid]
-# - the output is build in END{} after loading everything into those arrays
-
-
-$AWK -v "docdir=$1" '
- BEGIN {
- level = -1
- q = "\""
- cm = ","
- uids = 0
- stderr = "/dev/stderr"
- }
-
- function doc_head(fn, path)
- {
- if (fn in DOCS)
- return
- DOCS[fn]++
- print "
" > fn
- print "pcb-rnd conf tree
" > fn
- print "subtree: " path "
" > fn
- print "" > fn
- print "node name | type | flags | description" > fn
-
- }
-
- function doc_foot(fn)
- {
- print " |
---|
" > fn
- }
-
- function gen(path, src_line,state_tags, id, name, type, array, desc, flags,path_tmp,type2,fn)
- {
- name=src_line
- sub("^.*CFT_", "RND_CFN_", name)
- sub(";.*", "", name)
- type=name
- sub("[ \t]*[^ \t]*$", "", type)
- sub("[^ \t]*[ \t]*", "", name)
- array = (name ~ "[[]")
- if (array)
- sub("[[].*$", "", name)
- id = path
- sub("^/", "", id)
- gsub("/", ".", id)
- id = id "." name
-
- desc = src_line
- if (desc ~ "/[*]") {
- sub("^.*/[*]", "", desc)
- sub("[*]/.*$", "", desc)
- sub("^[ \t]*", "", desc)
- sub("[ \t]*$", "", desc)
- }
- else
- desc = ""
- if (desc == "")
- desc = "<" name ">"
-
- flags = "";
- while(match(desc, "@[a-zA-Z_]+")) {
- flag=substr(desc, RSTART, RLENGTH)
- sub("[ \t]*" flag "[ \t]*", " ", desc)
- sub("^@", "",flag)
- flag="RND_CFF_" toupper(flag)
- if (flags == "")
- flags = flag
- else
- flags = flags " | " flag
- }
- if (flags == "")
- flags = 0;
- sub("^[ \t]*", "", desc)
- sub("[ \t]*$", "", desc)
-
- path_tmp=path
- sub("^/", "", path_tmp)
- printf("conf_reg(%-36s %s %-16s %-25s %-25s %s, %s)\n", id cm, (array ? "array, " : "scalar,"), type cm, q path_tmp q cm, q name q cm, q desc q, flags)
- if (docdir != "") {
- path_tmp2 = path_tmp
- gsub("/", "_", path_tmp2)
- fn = docdir "/" path_tmp2 ".html"
- doc_head(fn, path_tmp)
- type2 = tolower(type)
- sub("^cfn_", "", type2)
-
- print "", name, " | ", type2, " | ", flags, " | ", state_tags desc > fn
- }
- }
-
- function push_uid()
- {
- level++
- UID_STACK[level] = uid
- }
-
- function pop_uid()
- {
- level--
- uid = UID_STACK[level]
- }
-
- function gen_path(uid ,path) {
- path = ""
- while(LEVEL[uid] > 0) {
- path = NAME[uid] "/" path
- uid = PARENT[uid]
- }
- sub("/$", "", path)
- return path
- }
-
- # structs on the first level must be const
- /struct/ && (level == 0) {
- if (!($0 ~ "struct *[a-z_]*temp_s")) { # special case for core/librnd temp storage
- tmp=$0
- sub("struct.*$", "", tmp)
- if (!(tmp ~ "const")) {
- print "First level structs must be const in line", NR > stderr
- exit 1
- }
- }
- }
-
- /[{]/ {
- uid = uids++
- LEN[uid] = 0
- push_uid()
- }
-
- /^[ \t]*[\/][\/]/ { next }
-
- /CFT_/ {
- SRC[uid, LEN[uid]] = $0
-
- state_tags = ""
- for(st in STATE)
- if (STATE[st]) state_tags=state_tags "," st
- if (state_tags != "") {
- sub("^,", "[", state_tags)
- state_tags = state_tags "] "
- }
- SRC_STATE[uid, LEN[uid]] = state_tags
- LEN[uid]++
- }
-
- /[}]/ {
- name = $0
- sub(".*}[ \t]*", "", name)
- sub("[ \t{].*", "", name)
- sub(";.*", "", name);
-
- PARENT[uid] = UID_STACK[level-1]
- NAME[uid] = name
- LEVEL[uid] = level
-
- pop_uid()
- }
-
- /@conf_gen.sh:/ {
- sub(".*@conf_gen.sh: *", "", $0)
- sub("[*]/", "", $0)
- if ($1 == "begin")
- STATE[$2] = 1
- else if ($1 == "end")
- STATE[$2] = 0
- else
- print "Unknown @conf_gen.sh directive:", $0 > stderr
- }
-
-
- END {
- if (level != -1)
- print "Error: unbalanced braces" > "/dev/stderr"
-
- if (LEN[0] != 0) {
- for(n = 0; n < LEN[0]; n++)
- print "gen_conf ERROR: ignoring line \"" SRC[0, n] "\" in root - needs to be within a struct" > stderr
- }
-
- for(uid = 0; uid < uids; uid++) {
- path = gen_path(uid)
- for(n = 0; n < LEN[uid]; n++)
- gen(path, SRC[uid, n], SRC_STATE[uid, n])
- }
-
- for(fn in DOCS)
- doc_foot(fn)
- }
-'
Property changes on: gen_conf.sh
___________________________________________________________________
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
|