Changeset 42 for trunk/mkstructinfo.awk


Ignore:
Timestamp:
2006-05-28T06:38:11+02:00 (8 years ago)
Author:
moo
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.