runoff changes
This commit is contained in:
parent
72a590d9e5
commit
ec5783cbd2
5 changed files with 160 additions and 91 deletions
35
pr.pl
Executable file
35
pr.pl
Executable file
|
@ -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";
|
||||||
|
}
|
103
runoff
103
runoff
|
@ -16,90 +16,7 @@ files=`grep -v '^#' runoff.list | awk '{print $1}'`
|
||||||
n=99
|
n=99
|
||||||
for i in $files
|
for i in $files
|
||||||
do
|
do
|
||||||
perl -e '$n='$n';' -e '
|
runoff1 -n $n $i >fmt/$i
|
||||||
$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
|
|
||||||
|
|
||||||
nn=`tail -1 fmt/$i | sed 's/ .*//; s/^0*//'`
|
nn=`tail -1 fmt/$i | sed 's/ .*//; s/^0*//'`
|
||||||
if [ "x$nn" != x ]; then
|
if [ "x$nn" != x ]; then
|
||||||
n=$nn
|
n=$nn
|
||||||
|
@ -107,8 +24,9 @@ do
|
||||||
done
|
done
|
||||||
|
|
||||||
# create table of contents
|
# create table of contents
|
||||||
|
cat toc.hdr >fmt/toc
|
||||||
pr -e8 -t runoff.list | awk '
|
pr -e8 -t runoff.list | awk '
|
||||||
/^[a-z]/ {
|
/^[a-z0-9]/ {
|
||||||
s=$0
|
s=$0
|
||||||
f="fmt/"$1
|
f="fmt/"$1
|
||||||
getline<f
|
getline<f
|
||||||
|
@ -119,7 +37,8 @@ pr -e8 -t runoff.list | awk '
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
print
|
print
|
||||||
}' >fmt/toc
|
}' | pr -3 -t >>fmt/toc
|
||||||
|
cat toc.ftr >>fmt/toc
|
||||||
|
|
||||||
# make definition list
|
# make definition list
|
||||||
cd fmt
|
cd fmt
|
||||||
|
@ -197,13 +116,15 @@ awk '
|
||||||
|
|
||||||
# format the whole thing
|
# format the whole thing
|
||||||
(
|
(
|
||||||
pr -l60 -e8 README
|
../pr.pl README
|
||||||
pr -l60 -h "table of contents" -e8 -2 toc
|
../pr.pl -h "table of contents" toc
|
||||||
pr -l60 -h "definitions" -2 t.defs | pad
|
# pr -t -2 t.defs | ../pr.pl -h "definitions" | pad
|
||||||
pr -l60 -h "cross-references" -2 refs | 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
|
for i in $files
|
||||||
do
|
do
|
||||||
cat $i | pr -l60 -e8 -h "xv6/$i"
|
../pr.pl -h "xv6/$i" $i
|
||||||
done
|
done
|
||||||
) | mpage -m50t50b -o -bLetter -T -t -2 -FCourier -L60 >all.ps
|
) | mpage -m50t50b -o -bLetter -T -t -2 -FCourier -L60 >all.ps
|
||||||
grep Pages: all.ps
|
grep Pages: all.ps
|
||||||
|
|
90
runoff1
Executable file
90
runoff1
Executable file
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
16
toc.ftr
Normal file
16
toc.ftr
Normal file
|
@ -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.
|
7
toc.hdr
Normal file
7
toc.hdr
Normal file
|
@ -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.
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue