diff options
Diffstat (limited to 'runoff')
| -rwxr-xr-x | runoff | 128 | 
1 files changed, 128 insertions, 0 deletions
| @@ -0,0 +1,128 @@ +#!/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; i<nb; i++) printf("%04d\n", n+ ++nr); nb=0; printf("%04d %s\n", n+ ++nr, $0)} +		END{for(nr++; nr%50 != 1; nr++) printf("%04d\n", n+nr);} +		' $i >fmt/$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 +	getline<f +	close(f) +	n=$1 +	printf("%02d %s\n", n/100, s); +	next +} +{ +	print +}' >fmt/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 +9 sed -n 's/^([0-9]+ [a-zA-Z0-9_]+)(.*)$/\1/p' $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=/home/am8/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 | 
