#!/bin/sh echo This script takes a minute to run. Be patient. 1>&2 # pad stdin to multiple of 120 lines pad() { awk '{print} END{for(; NR%120!=0; NR++) print ""}' } # create formatted (numbered) files mkdir -p fmt rm fmt/* cp README fmt files=`grep -v '^#' runoff.list | awk '{print $1}'` n=99 for i in $files do awk -v 'n='$n ' BEGIN{n=int((n+49)/50)*50-1; nb=0; nr=0} NF==0 { nb++; next } {for(i=0; ifmt/$i n=`tail -1 fmt/$i | awk '{print $1}'` done # create table of contents pr -e8 -t runoff.list | awk ' /^[a-z]/ { s=$0 f="fmt/"$1 getlinefmt/toc # 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 } } $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; } ' $files >defs perl -n -e 'print if s/^([0-9]+ [a-zA-Z0-9_]+)\(.*$/\1/;' $files | egrep -v ' (usage|main|if|for)$' >>defs ( >s.defs # make reference list for i in `awk '{print $2}' defs | sort -fu` 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])' $files | awk '{print $1}'` echo $i $defs echo $uses |fmt -24 | sed 's/^/ /' 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 -l60 -e4 README pr -l60 -e4 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 grep Pages: all.ps # if we have the nice font, use it nicefont=~rsc/plan9/sys/lib/postscript/font/LucidaSans-Typewriter83 if [ -f $nicefont ] then (sed 1q all.ps; cat $nicefont; sed '1d; s/Courier/LucidaSans-Typewriter83/' all.ps) >allf.ps else cp all.ps allf.ps fi ps2pdf allf.ps ../xv6.pdf