diff options
author | Andrew Tridgell <tridge@samba.org> | 2000-05-15 13:41:05 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2000-05-15 13:41:05 +0000 |
commit | 32a7cf9188672b0c4766056eb762972f8488aa8e (patch) | |
tree | 04d27186b802525e7449c03a908827a67f67200a /source3/aparser/header.awk | |
parent | e2e33eb3207e1a6f85ca36cafc564aa9427fd7af (diff) | |
download | samba-32a7cf9188672b0c4766056eb762972f8488aa8e.tar.gz samba-32a7cf9188672b0c4766056eb762972f8488aa8e.tar.bz2 samba-32a7cf9188672b0c4766056eb762972f8488aa8e.zip |
started update to handle arbitrary arrays
note: this code is currently broken.
(This used to be commit 15646ebd84ee4e63a251c87800677f3dd2ae6971)
Diffstat (limited to 'source3/aparser/header.awk')
-rw-r--r-- | source3/aparser/header.awk | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/source3/aparser/header.awk b/source3/aparser/header.awk index e7e5b2cff4..406335c930 100644 --- a/source3/aparser/header.awk +++ b/source3/aparser/header.awk @@ -1,37 +1,38 @@ # produce a header file for a parsed struct file -function header_union(f, struct_num, union, - LOCAL, i) +function header_elstring(elnum, + LOCAL, elem) { - xprintf(f,"\tunion {\n"); - for (i=0;i<structs[struct_num, "unions", union, "num_elems"];i++) { - xprintf(f,"\t\t%s %s;\n", - structs[struct_num, "unions", union, i, "type"], - structs[struct_num, "unions", union, i, "elem"]); - } - xprintf(f,"\t} %s;\n", union); + elem=elements[elnum, "elem"]; + if (elements[elnum, "ptr"]=="1") elem="*"elem; + if (elements[elnum, "array_len"]!="") elem="*"elem; + return elem; } -function header_array(f, struct_num, elem_num) +function header_element(f, elnum, + LOCAL, type) { - xprintf(f,"\t%s *%s; /* array of length %s */ \n", - structs[struct_num, elem_num, "type"], - structs[struct_num, elem_num, "elem"], - structs[struct_num, elem_num, "array_len"]); + type=elements[elnum, "type"]; + xprintf(f,"\t%s %s;\n", type, header_elstring(elnum)); } -function header_elem(f, struct_num, elem_num) +function header_union(f, elnum, + LOCAL, i) { - if (structs[struct_num, elem_num, "type"] == ".align") return; + xprintf(f,"\tunion {\n"); + for (i=0;i<unions[elnum, "num_elems"];i++) { + header_element(f, unions[elnum, i]); + } + xprintf(f,"\t} %s;\n", header_elstring(elnum)); +} - if (structs[struct_num, elem_num, "type"] == "union") { - header_union(f, struct_num, structs[struct_num, elem_num, "elem"]); - } else if (structs[struct_num, elem_num, "array_len"]) { - header_array(f, struct_num, elem_num); +function header_elem(f, elnum) +{ + + if (elements[elnum, "type"] == "union") { + header_union(f, elnum); } else { - xprintf(f,"\t%s %s;\n", - structs[struct_num, elem_num, "type"], - structs[struct_num, elem_num, "elem"]); + header_element(f, elnum); } } @@ -42,7 +43,7 @@ function header_struct(f, struct_num, structs[struct_num, "name"]); xprintf(f,"typedef struct {\n"); for (i=0;i < structs[struct_num, "num_elems"];i++) { - header_elem(f, struct_num, i); + header_elem(f, structs[struct_num, i]); } xprintf(f,"} %s;\n\n\n", structs[struct_num, "name"]); } |