]> Devi Nivas Git - cs3210-lab0.git/commitdiff
runoff fixes
authorrsc <rsc>
Wed, 6 Sep 2006 19:43:59 +0000 (19:43 +0000)
committerrsc <rsc>
Wed, 6 Sep 2006 19:43:59 +0000 (19:43 +0000)
runoff

diff --git a/runoff b/runoff
index caa8a1135c173b0045f8ea8244ed0919926d0364..1d0fbb5c6104a887ce6270be35b477b7fb3f10d2 100755 (executable)
--- 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