(*f1)->writable = 1;
(*f1)->pipe = p;
return 0;
+
oops:
if(p)
kfree((char*) p, PAGE);
kfree((char*) p, PAGE);
}
+//PAGEBREAK: 20
int
pipe_write(struct pipe *p, char *addr, int n)
{
}
sleep(&p->readp, &p->lock);
}
-
for(i = 0; i < n; i++){
if(p->readp == p->writep)
break;
close(f)
n=$1
printf("%02d %s\n", n/100, s);
+ printf("TOC: %04d %s\n", n, s) >"fmt/tocdata"
next
}
{
}' | pr -3 -t >>fmt/toc
cat toc.ftr >>fmt/toc
+# check for bad alignments
+perl -e '
+ while(<>){
+ chomp;
+ s!#.*!!;
+ s!\s+! !g;
+ s! +$!!;
+ next if /^$/;
+
+ if(/TOC: (\d+) (.*)/){
+ $toc{$2} = $1;
+ 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\d[^5]/){
+ print STDERR "$file does not start on a second half page.\n";
+ }
+ next;
+ }
+
+ print STDERR "Unknown spec: $_\n";
+ }
+' fmt/tocdata runoff.spec
+
# make definition list
cd fmt
perl -e '
--- /dev/null
+even: mmu.h
+even: bootasm.S
+even: bootother.S
+even: bootmain.c
+even: main.c
+even: spinlock.c
+even: proc.h
+even: proc.c
+odd: kalloc.c
+even: trap.c
+odd: bio.c
--- /dev/null
+#!/bin/sh
+
+runoff1 "$@" | pr.pl -h "xv6/$@" | mpage -m50t50b -o -bLetter -T -t -2 -FCourier -L60 >x.ps; gv --swap x.ps
extern int sys_link(void);
extern int sys_mkdir(void);
extern int sys_mknod(void);
+//PAGEBREAK: 0
extern int sys_open(void);
extern int sys_pipe(void);
extern int sys_read(void);
return;
}
- // PAGEBREAK: 10
// Increment nlock to make sure interrupts stay off
// during interrupt handler. Decrement before returning.
cpus[cpu()].nlock++;
+ // PAGEBREAK: 10
switch(tf->trapno){
case IRQ_OFFSET + IRQ_TIMER:
lapic_timerintr();
default:
if(cp) {
// Assume process divided by zero or dereferenced null, etc.
- cprintf("pid %d %s: unhandled trap %d on cpu %d eip %x -- kill proc\n",
- cp->pid, cp->name, tf->trapno, cpu(), tf->eip);
+ cprintf("pid %d %s: unhandled trap %d err %d on cpu %d eip %x -- kill proc\n",
+ cp->pid, cp->name, tf->trapno, tf->err, cpu(), tf->eip);
proc_exit();
}