]> Devi Nivas Git - cs3210-lab0.git/commitdiff
runoff changes
authorrsc <rsc>
Fri, 8 Sep 2006 13:53:18 +0000 (13:53 +0000)
committerrsc <rsc>
Fri, 8 Sep 2006 13:53:18 +0000 (13:53 +0000)
pr.pl [new file with mode: 0755]
runoff
runoff1 [new file with mode: 0755]
toc.ftr [new file with mode: 0644]
toc.hdr [new file with mode: 0644]

diff --git a/pr.pl b/pr.pl
new file mode 100755 (executable)
index 0000000..2e40b85
--- /dev/null
+++ b/pr.pl
@@ -0,0 +1,35 @@
+#!/usr/bin/perl
+
+use POSIX qw(strftime);
+
+if($ARGV[0] eq "-h"){
+       shift @ARGV;
+       $h = $ARGV[0];
+       shift @ARGV;
+}else{
+       $h = $ARGV[0];
+}
+
+$page = 0;
+$now = strftime "%b %e %H:%M %Y", localtime;
+
+@lines = <>;
+for($i=0; $i<@lines; $i+=50){
+       print "\n\n";
+       ++$page;
+       print "$now  $h  Page $page\n";
+       print "\n\n";
+       for($j=$i; $j<@lines && $j<$i +50; $j++){
+               print $lines[$j];
+       }
+       for(; $j<$i+50; $j++){
+               print "\n";
+       }
+       $sheet = "";
+       if($lines[$i] =~ /^([0-9][0-9])[0-9][0-9] /){
+               $sheet = "Sheet $1";
+       }
+       print "\n\n";
+       print "$sheet\n";
+       print "\n\n";
+}
diff --git a/runoff b/runoff
index 5a1b55668e0f0ad16a33fd874b1b56842b1ccf40..6ee8225e4972afc3e599cc993d67e3ec80efca23 100755 (executable)
--- a/runoff
+++ b/runoff
@@ -16,90 +16,7 @@ files=`grep -v '^#' runoff.list | awk '{print $1}'`
 n=99
 for i in $files
 do
-       perl -e '$n='$n';' -e ' 
-               $n = int(($n+49)/50)*50 - 1;
-
-               @lines = <>;
-               foreach (@lines) {
-                       chomp;
-                       s/\s+$//;
-                       if(length() >= 75){
-                               print "$ARGV[0]:$.: line too long";
-                       }
-               }
-               @outlines = ();
-               $nextout = 0;
-               for($i=0; $i<@lines; ){
-                       # Skip leading blank lines.
-                       $i++ while $i<@lines && $lines[$i] =~ /^$/;
-                       last if $i>=@lines;
-
-                       # If the rest of the file fits, use the whole thing.
-                       if(@lines <= $i+50){
-                               $breakbefore = @lines;
-                       }else{
-                               # Find a good next page break;
-                               # Hope for end of function.
-                               # but settle for a blank line (but not first blank line
-                               # in function, which comes after variable declarations).
-                               $breakbefore = $i;
-                               $lastblank = $i;
-                               $sawbrace = 0;
-                               $breaksize = 15;  # 15 lines to get to function
-                               for($j=$i; $j<$i+50 && $j < @lines; $j++){
-                                       if($lines[$j] =~ /PAGEBREAK:\s*([0-9]+)/){
-                                               $breaksize = int($2);
-                                               $breakbefore = $j;
-                                               $lines[$j] = "";
-                                       }
-                                       if($lines[$j] =~ /^}$/){
-                                               $breakbefore = $j+1;
-                                       }
-                                       if($lines[$j] =~ /^{$/){
-                                               $sawbrace = 1;
-                                       }
-                                       if($lines[$j] =~ /^$/){
-                                               if($sawbrace){
-                                                       $sawbrace = 0;
-                                               }else{
-                                                       $lastblank = $j;
-                                               }
-                                       }
-                               }
-                               if($j<@lines && $lines[$j] =~ /^$/){
-                                       $lastblank = $j;
-                               }
-                               
-                               # If we are not putting enough on a page, try a blank line.
-                               if($breakbefore - $i < 50 - $breaksize && $lastblank > $breakbefore && $lastblank >= $i+50 - 5){
-                                       $breakbefore = $lastblank;
-                                       $breaksize = 5;  # only 5 lines to get to blank line
-                               }
-
-                               # If we are not putting enough on a page, force a full page.
-                               if($breakbefore - $i < 50 - $breaksize && $breakbefore != @lines){
-                                       $breakbefore = $i + 50;
-                                       $breakbefore = @lines if @lines < $breakbefore;
-                               }
-
-                               if($breakbefore < $i+2){
-                                       $breakbefore = $i+2;
-                               }
-                       }
-
-                       # Emit the page.
-                       $i50 = $i + 50;
-                       for(; $i<$breakbefore; $i++){
-                               printf "%04d %s\n", ++$n, $lines[$i];
-                       }
-
-                       # Finish page
-                       for($j=$i; $j<$i50; $j++){
-                               printf "%04d \n", ++$n;
-                       }
-               }
-       ' $i >fmt/$i
-
+       runoff1 -n $n $i >fmt/$i
        nn=`tail -1 fmt/$i | sed 's/ .*//; s/^0*//'`
        if [ "x$nn" != x ]; then
                n=$nn
@@ -107,8 +24,9 @@ do
 done
 
 # create table of contents
+cat toc.hdr >fmt/toc
 pr -e8 -t runoff.list | awk '
-/^[a-z]/ {
+/^[a-z0-9]/ {
        s=$0
        f="fmt/"$1
        getline<f
@@ -119,7 +37,8 @@ pr -e8 -t runoff.list | awk '
 }
 {
        print
-}' >fmt/toc
+}' | pr -3 -t >>fmt/toc
+cat toc.ftr >>fmt/toc
 
 # make definition list
 cd fmt
@@ -197,13 +116,15 @@ awk '
 
 # format the whole thing
 (
-       pr -l60 -e8 README
-       pr -l60 -h "table of contents" -e8 -2 toc
-       pr -l60 -h "definitions" -2 t.defs | pad
-       pr -l60 -h "cross-references" -2 refs | pad 
+       ../pr.pl README
+       ../pr.pl -h "table of contents" toc
+       # pr -t -2 t.defs | ../pr.pl -h "definitions" | pad
+       pr -t -l50 -2 refs | ../pr.pl -h "cross-references" | pad
+       # pr.pl -h "definitions" -2 t.defs | pad
+       # pr.pl -h "cross-references" -2 refs | pad 
        for i in $files
        do
-               cat $i | pr -l60 -e8 -h "xv6/$i"
+               ../pr.pl -h "xv6/$i" $i
        done
 ) | mpage -m50t50b -o -bLetter -T -t -2 -FCourier -L60 >all.ps
 grep Pages: all.ps
diff --git a/runoff1 b/runoff1
new file mode 100755 (executable)
index 0000000..67cb603
--- /dev/null
+++ b/runoff1
@@ -0,0 +1,90 @@
+#!/usr/bin/perl
+
+$n = 0;
+if($ARGV[0] eq "-n") {
+       $n = $ARGV[1];
+       shift @ARGV;
+       shift @ARGV;
+}
+$n = int(($n+49)/50)*50 - 1;
+
+@lines = <>;
+foreach (@lines) {
+       chomp;
+       s/\s+$//;
+       if(length() >= 75){
+               print "$ARGV[0]:$.: line too long";
+       }
+}
+@outlines = ();
+$nextout = 0;
+
+for($i=0; $i<@lines; ){
+       # Skip leading blank lines.
+       $i++ while $i<@lines && $lines[$i] =~ /^$/;
+       last if $i>=@lines;
+
+       # If the rest of the file fits, use the whole thing.
+       if(@lines <= $i+50){
+               $breakbefore = @lines;
+       }else{
+               # Find a good next page break;
+               # Hope for end of function.
+               # but settle for a blank line (but not first blank line
+               # in function, which comes after variable declarations).
+               $breakbefore = $i;
+               $lastblank = $i;
+               $sawbrace = 0;
+               $breaksize = 15;  # 15 lines to get to function
+               for($j=$i; $j<$i+50 && $j < @lines; $j++){
+                       if($lines[$j] =~ /PAGEBREAK:\s*([0-9]+)/){
+                               $breaksize = int($2);
+                               $breakbefore = $j;
+                               $lines[$j] = "";
+                       }
+                       if($lines[$j] =~ /^}$/){
+                               $breakbefore = $j+1;
+                       }
+                       if($lines[$j] =~ /^{$/){
+                               $sawbrace = 1;
+                       }
+                       if($lines[$j] =~ /^$/){
+                               if($sawbrace){
+                                       $sawbrace = 0;
+                               }else{
+                                       $lastblank = $j;
+                               }
+                       }
+               }
+               if($j<@lines && $lines[$j] =~ /^$/){
+                       $lastblank = $j;
+               }
+               
+               # If we are not putting enough on a page, try a blank line.
+               if($breakbefore - $i < 50 - $breaksize && $lastblank > $breakbefore && $lastblank >= $i+50 - 5){
+                       $breakbefore = $lastblank;
+                       $breaksize = 5;  # only 5 lines to get to blank line
+               }
+
+               # If we are not putting enough on a page, force a full page.
+               if($breakbefore - $i < 50 - $breaksize && $breakbefore != @lines){
+                       $breakbefore = $i + 50;
+                       $breakbefore = @lines if @lines < $breakbefore;
+               }
+
+               if($breakbefore < $i+2){
+                       $breakbefore = $i+2;
+               }
+       }
+
+       # Emit the page.
+       $i50 = $i + 50;
+       for(; $i<$breakbefore; $i++){
+               printf "%04d %s\n", ++$n, $lines[$i];
+       }
+
+       # Finish page
+       for($j=$i; $j<$i50; $j++){
+               printf "%04d \n", ++$n;
+       }
+}
diff --git a/toc.ftr b/toc.ftr
new file mode 100644 (file)
index 0000000..8169818
--- /dev/null
+++ b/toc.ftr
@@ -0,0 +1,16 @@
+
+
+
+The source listing is preceded by a cross-reference listing every defined 
+constant, struct, global variable, and function in xv6.  Each entry gives,
+on the same line as the name, the line number (or, in a few cases, numbers)
+where the name is defined.  Successive lines in an entry list the line
+numbers where the name is used.  For example, this entry:
+
+    namei 4760
+        0333 4760 4859 4908
+        4958 5007 5016 5414
+        5427 5512 5560 5640
+
+indicates that namei is defined on line 4760 and is mentioned on twelve lines
+on sheets 03, 47, 48, 49, 50, 54, 55, and 56.
diff --git a/toc.hdr b/toc.hdr
new file mode 100644 (file)
index 0000000..faff6ae
--- /dev/null
+++ b/toc.hdr
@@ -0,0 +1,7 @@
+The numbers to the left of the file names in the table are sheet numbers.
+The source code has been printed in a double column format with fifty
+lines per column, giving one hundred lines per sheet (or page).
+Thus there is a convenient relationship between line numbers and sheet numbers.
+
+
+