summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsc <rsc>2006-09-06 19:43:59 +0000
committerrsc <rsc>2006-09-06 19:43:59 +0000
commit26dfb4c80df3b6cada200477d9a1b694a1232d80 (patch)
tree16580a84da86a48bfcf0a22b391ffbae3430466f
parent2a55cc55012ab090c67e25c845cb6cbe3e8fdc56 (diff)
downloadxv6-labs-26dfb4c80df3b6cada200477d9a1b694a1232d80.tar.gz
xv6-labs-26dfb4c80df3b6cada200477d9a1b694a1232d80.tar.bz2
xv6-labs-26dfb4c80df3b6cada200477d9a1b694a1232d80.zip
runoff fixes
-rwxr-xr-xrunoff91
1 files changed, 50 insertions, 41 deletions
diff --git a/runoff b/runoff
index caa8a11..1d0fbb5 100755
--- a/runoff
+++ b/runoff
@@ -42,44 +42,50 @@ pr -e8 -t runoff.list | awk '
# make definition list
cd fmt
-awk '
- /^[0-9]+ [A-Za-z0-9_]+ .*[A-Za-z0-9_].*;/ {
- s=$0;
- sub(/\[.*/, "", s);
- sub(/\(.*/, "", s);
- sub(/ *=.*/, "", s);
- sub(/.* \**/, "", s);
- sub(/;.*/, "", s);
- print $1, s
- }
- $2=="#define" {
- if($3 ~ /\(/){
- sub(/\(.*/, "", $3); print $1, $3
- } else {
- s = ""
- for(i=4; i<=NF; i++){
- s = s $i
- }
- print $1, $3, s
+perl -e '
+ while(<>) {
+ chomp;
+
+ s!//.*!!;
+ s!/\*([^*]|[*][^/])*\*/!!g;
+ s!\s! !g;
+ s! +$!!;
+
+ # look for declarations like char* x;
+ if (/^[0-9]+ typedef .* u(int|short|long|char);/) {
+ next;
}
- }
- $2=="enum" { inenum = 1; v=-1; }
- $2 == "};" { inenum = 0; }
- inenum && $2 ~ /^[A-Z][a-zA-Z0-9_]+$/ {
- if($3 == "="){
- s = ""
- for(i=4; i<=NF; i++){
- s = s " " $i
- }
- sub(/,$/, "", s);
- sub(/^ /, "", s);
- v = s;
- }else
- v++;
- print $1, $2, v;
- }
- $2=="struct" && $3 ~ /^[A-Z][a-zA-Z0-9_]+$/ {
- print $1, $3;
+ if (/^[0-9]+ extern/) {
+ next;
+ }
+ if (/^[0-9]+ struct [a-zA-Z0-9_]+;/) {
+ next;
+ }
+ if (/\(/) {
+ next;
+ }
+
+ if (/^([0-9]+) (((static|struct|extern|union|enum) +)*([A-Za-z0-9_]+))( .*)? +([A-Za-z_][A-Za-z0-9_]*)[,;]/) {
+
+ print "$1 $7\n"
+ }
+
+ elsif (/^([0-9]+) #define +([A-za-z0-9_]+) +?\(.*/) {
+ print "$1 $2\n"
+ }
+
+ elsif (/^([0-9]+) #define +([A-Za-z0-9_]+) +([^ ]+)$/) {
+ print "$1 $2 $3\n";
+ }
+
+ elsif (/^([0-9]+) #define +([A-Za-z0-9_]+)/) {
+ print "$1 $2\n";
+ }
+
+ elsif(/^([0-9]+) (enum|struct|union) +([A-Za-z0-9_]+) +{/){
+ print "$1 $3\n";
+ }
+ # TODO: enum members
}
' $files >defs
@@ -110,12 +116,15 @@ awk '
# format the whole thing
(
- pr -l60 -e4 README
- pr -l60 -e4 toc
+ pr -l60 -e8 README
+ pr -l60 -e8 -2 toc
pr -l60 -h "definitions" -2 t.defs | pad
pr -l60 -h "cross-references" -2 refs | pad
- pr -l60 -e4 $files
-) | mpage -m50t50b -o -bLetter -t -2 -FCourier -L60 >all.ps
+ for i in $files
+ do
+ cat $i | pr -l60 -e8 -h "xv6/$i"
+ done
+) | mpage -m50t50b -o -bLetter -T -t -2 -FCourier -L60 >all.ps
grep Pages: all.ps
# if we have the nice font, use it