summaryrefslogtreecommitdiff
path: root/runoff
diff options
context:
space:
mode:
Diffstat (limited to 'runoff')
-rwxr-xr-xrunoff249
1 files changed, 0 insertions, 249 deletions
diff --git a/runoff b/runoff
deleted file mode 100755
index c6580ca..0000000
--- a/runoff
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/bin/sh
-
-echo This script takes a minute to run. Be patient. 1>&2
-
-LC_CTYPE=C export LC_CTYPE
-
-# pad stdin to multiple of 120 lines
-pad()
-{
- awk '{print} END{for(; NR%120!=0; NR++) print ""}'
-}
-
-# create formatted (numbered) files
-mkdir -p fmt
-mkdir -p fmt/kernel
-mkdir -p fmt/user
-rm -f fmt/kernel/*
-rm -f fmt/user/*
-cp README fmt
-echo > fmt/blank
-files=`grep -v '^#' runoff.list | awk '{print $1}'`
-n=99
-for i in $files
-do
- ./runoff1 -n $n $i >fmt/$i
- nn=`tail -1 fmt/$i | sed 's/ .*//; s/^0*//'`
- if [ "x$nn" != x ]; then
- n=$nn
- fi
-done
-
-# create table of contents
-cat toc.hdr >fmt/toc
-pr -e8 -t runoff.list | awk '
-/^[a-z0-9]/ {
- s=$0
- f="fmt/"$1
- getline<f
- close(f)
- n=$1
- printf("%02d %s\n", n/100, s);
- printf("TOC: %04d %s\n", n, s) >"fmt/tocdata"
- next
-}
-{
- print
-}' | pr -3 -t >>fmt/toc
-cat toc.ftr >>fmt/toc
-
-# check for bad alignments
-perl -e '
- $leftwarn = 0;
- while(<>){
- chomp;
- s!#.*!!;
- s!\s+! !g;
- s! +$!!;
- next if /^$/;
-
- if(/TOC: (\d+) (.*)/){
- $toc{$2} = $1;
- next;
- }
-
- if(/sheet1: (left|right)$/){
- print STDERR "assuming that sheet 1 is a $1 page. double-check!\n";
- $left = $1 eq "left" ? "13579" : "02468";
- $right = $1 eq "left" ? "02468" : "13579";
- next;
- }
-
- if(/even: (.*)/){
- $file = $1;
- if(!defined($toc{$file})){
- print STDERR "Have no toc for $file\n";
- next;
- }
- if($toc{$file} =~ /^\d\d[^0]/){
- print STDERR "$file does not start on a fresh page.\n";
- }
- next;
- }
-
- if(/odd: (.*)/){
- $file = $1;
- if(!defined($toc{$file})){
- print STDERR "Have no toc for $file\n";
- next;
- }
- if($toc{$file} !~ /^\d\d5/){
- print STDERR "$file does not start on a second half page.\n";
- }
- next;
- }
-
- if(/(left|right): (.*)/){
- $what = $1;
- $file = $2;
- if(!defined($toc{$file})){
- print STDERR "Have no toc for $file\n";
- next;
- }
- if($what eq "left" && !($toc{$file} =~ /^\d[$left][05]/)){
- print STDERR "$file does not start on a left page [$toc{$file}]\n";
- }
- # why does this not work if I inline $x in the if?
- $x = ($toc{$file} =~ /^\d[$right][05]/);
- if($what eq "right" && !$x){
- print STDERR "$file does not start on a right page [$toc{$file}] [$x]\n";
- }
- next;
- }
-
- print STDERR "Unknown spec: $_\n";
- }
-' fmt/tocdata runoff.spec
-
-# make definition list
-cd fmt
-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;
- }
- if (/^[0-9]+ extern/) {
- next;
- }
- if (/^[0-9]+ struct [a-zA-Z0-9_]+;/) {
- next;
- }
- if (/^([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";
- }
-
- if(/^^([0-9]+) \.globl ([a-zA-Z0-9_]+)/){
- $isglobl{$2} = 1;
- }
- if(/^^([0-9]+) ([a-zA-Z0-9_]+):$/ && $isglobl{$2}){
- print "$1 $2\n";
- }
-
- 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]+) (enum|struct|union) +([A-Za-z0-9_]+) +{/){
- print "$1 $3\n";
- }
- # TODO: enum members
- }
-' $files >defs
-
-(for i in $files
-do
- case "$i" in
- *.S)
- cat $i | sed 's;#.*;;; s;//.*;;;'
- ;;
- *)
- cat $i | sed 's;//.*;;; s;"([^"\\]|\\.)*";;;'
- esac
-done
-) >alltext
-
-perl -n -e 'print if s/^([0-9]+ [a-zA-Z0-9_]+)\(.*$/\1/;' alltext |
- egrep -v ' (STUB|usage|main|if|for)$' >>defs
-#perl -n -e 'print if s/^([0-9]+) STUB\(([a-zA-Z0-9_]+)\)$/\1 \2/;' alltext \
-# >>defs
-(
->s.defs
-
-# make reference list
-for i in `awk '{print $2}' defs | sort -f | uniq`
-do
- defs=`egrep '^[0-9]+ '$i'( |$)' defs | awk '{print $1}'`
- echo $i $defs >>s.defs
- uses=`egrep -h '([^a-zA-Z_0-9])'$i'($|[^a-zA-Z_0-9])' alltext | awk '{print $1}'`
- if [ "x$defs" != "x$uses" ]; then
- echo $i $defs
- echo $uses |fmt -29 | sed 's/^/ /'
-# else
-# echo $i defined but not used >&2
- fi
-done
-) >refs
-
-# build defs list
-awk '
-{
- printf("%04d %s\n", $2, $1);
- for(i=3; i<=NF; i++)
- printf("%04d \" \n", $i);
-}
-' s.defs > t.defs
-
-# format the whole thing
-(
- ../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
- ../pr.pl blank # make sheet 1 start on left page
- ../pr.pl blank
- for i in $files
- do
- ../pr.pl -h "xv6/$i" $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
-nicefont=LucidaSans-Typewriter83
-if [ ! -f ../$nicefont ]
-then
- if git cat-file blob font:$nicefont > ../$nicefont~; then
- mv ../$nicefont~ ../$nicefont
- fi
-fi
-if [ -f ../$nicefont ]
-then
- echo nicefont
- (sed 1q all.ps; cat ../$nicefont; sed "1d; s/Courier/$nicefont/" all.ps) >allf.ps
-else
- echo ugly font!
- cp all.ps allf.ps
-fi
-ps2pdf allf.ps ../xv6.pdf
-# cd ..
-# pdftops xv6.pdf xv6.ps