Changeset 42 in svn for trunk


Ignore:
Timestamp:
2006-05-28T06:38:11+02:00 (9 years ago)
Author:
Xuefer
Message:

avoid gnu extension, for installing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/mkstructinfo.awk

    r23 r42  
    1414            instruct = typedefs[instruct];
    1515        }
    16         elm = "";
     16        sizeinfo = "";
    1717        elms = "";
    1818        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] ")";
    2323
    24             if (elms == "") {
     24            if (i == 0) {
    2525                elms = buffer[i];
    2626            }
     
    3131        printf "define(`ELEMENTSOF_%s', `%s')\n", instruct, elms;
    3232        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;
    3434        print "\n";
    3535        for (i in buffer) {
     
    5252    if (brace == 1 && instruct) {
    5353        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;
    5962            buffer_len ++;
    6063        }
    6164        else {
    62             while (gsub(/(\([^)]*\))/, "", str)) {
     65            # ignore any ()s
     66            while (gsub(/(\([^)]*\))/, "")) {
    6367            }
    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;
    6694                buffer_len ++;
    67                 str = a[2];
     95                delete chunks[i];
    6896            }
    6997        }
Note: See TracChangeset for help on using the changeset viewer.