Changeset 42 for trunk/mkstructinfo.awk
- Timestamp:
- 2006-05-28T06:38:11+02:00 (7 years ago)
- File:
-
- 1 edited
-
trunk/mkstructinfo.awk (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/mkstructinfo.awk
r23 r42 14 14 instruct = typedefs[instruct]; 15 15 } 16 elm= "";16 sizeinfo = ""; 17 17 elms = ""; 18 18 for (i = 0; i in buffer; i ++) { 19 if (i) elm = elm " + ";20 # elm = elm "sizeof(((`" instruct "'*)NULL)->`" buffer[i] "')";21 # elms = elms " `" buffer[i] "'";22 elm = elm"sizeof(((" instruct "*)NULL)->" buffer[i] ")";19 if (i) { 20 sizeinfo = sizeinfo " + "; 21 } 22 sizeinfo = sizeinfo "sizeof(((" instruct "*)NULL)->" buffer[i] ")"; 23 23 24 if ( elms == "") {24 if (i == 0) { 25 25 elms = buffer[i]; 26 26 } … … 31 31 printf "define(`ELEMENTSOF_%s', `%s')\n", instruct, elms; 32 32 printf "define(`COUNTOF_%s', `%s')\n", instruct, i; 33 printf "define(`SIZEOF_%s', `( %s )')\n", instruct, elm;33 printf "define(`SIZEOF_%s', `( %s )')\n", instruct, sizeinfo; 34 34 print "\n"; 35 35 for (i in buffer) { … … 52 52 if (brace == 1 && instruct) { 53 53 sub(/.*[{}]/, ""); 54 gsub(/\[[^\]]+\]/, ""); 55 gsub(/:[0-9]+/, ""); 56 str = $0; 57 if (match(str, /\([ ]*\*([^)]+)\)/, a)) { 58 buffer[buffer_len] = a[1]; 54 gsub(/\[[^\]]+\]/, ""); # ignore [...] 55 gsub(/:[0-9]+/, ""); # ignore struct bit 56 if (match($0, /^[^(]*\([ ]*\*([^)]+)\)/)) { 57 sub(/ +/, "") 58 sub(/^[^(]*\(\*/, ""); 59 sub(/\).*/, ""); 60 # function pointer 61 buffer[buffer_len] = $0; 59 62 buffer_len ++; 60 63 } 61 64 else { 62 while (gsub(/(\([^)]*\))/, "", str)) { 65 # ignore any ()s 66 while (gsub(/(\([^)]*\))/, "")) { 63 67 } 64 while (match(str, /([^*() ]+)[ ]*[,;](.*)/, a)) { 65 buffer[buffer_len] = a[1]; 68 if (match($0, /[()]/)) { 69 next; 70 } 71 gsub(/[*]/, " "); 72 gsub(/ +/, " "); 73 gsub(/ *[,;]/, ";"); 74 if (!match($0, /;/)) { 75 next; 76 } 77 split($0, chunks, ";"); 78 # get var of "int *var, var;" etc 79 for (i in chunks) { 80 if (chunks[i] == "") { 81 delete chunks[i]; 82 continue; 83 } 84 split(chunks[i], pieces, " "); 85 86 for (j in pieces) { 87 last_piece = pieces[j]; 88 delete pieces[i]; 89 } 90 if (last_piece == "") { 91 print "=====" chunks[i]; 92 } 93 buffer[buffer_len] = last_piece; 66 94 buffer_len ++; 67 str = a[2];95 delete chunks[i]; 68 96 } 69 97 }
Note: See TracChangeset
for help on using the changeset viewer.

