ast@cs.vu.nl (Andy Tanenbaum) (06/28/88)
: This is a shar archive. Extract with sh, not csh.
: This archive ends with exit, so do not worry about trailing junk.
: --------------------------- cut here --------------------------
PATH=/bin:/usr/bin:/usr/ucb
echo Extracting 'LISTING'
sed 's/^X//' > 'LISTING' << '+ END-OF-FILE ''LISTING'
Xtotal 30
X-rw-r--r-- 1 ast 0 Jun 27 22:48 LISTING
X-rw-r--r-- 1 ast 189 Jun 27 22:47 alloc.c.diff
X-rw-r--r-- 1 ast 1284 Jun 27 22:47 break.c.diff
X-rw-r--r-- 1 ast 264 Jun 27 22:47 const.h.diff
X-rw-r--r-- 1 ast 6621 Jun 27 22:47 exec.c.diff
X-rw-r--r-- 1 ast 3020 Jun 27 22:47 forkexit.c.diff
X-rw-r--r-- 1 ast 108 Jun 27 22:47 glo.h.diff
X-rw-r--r-- 1 ast 2170 Jun 27 22:47 main.c.diff
X-rw-r--r-- 1 ast 3807 Jun 27 22:47 makefile.diff
X-rw-r--r-- 1 ast 223 Jun 27 22:48 mm.log
X-rw-r--r-- 1 ast 4452 Jun 27 22:47 signal.c.diff
X-rw-r--r-- 1 ast 669 Jun 27 22:47 table.c.diff
X-rw-r--r-- 1 ast 173 Jun 27 22:47 utility.c.diff
+ END-OF-FILE LISTING
chmod 'u=rw,g=r,o=r' 'LISTING'
set `wc -c 'LISTING'`
count=$1
case $count in
755) :;;
*) echo 'Bad character count in ''LISTING' >&2
echo 'Count should be 755' >&2
esac
echo Extracting 'alloc.c.diff'
sed 's/^X//' > 'alloc.c.diff' << '+ END-OF-FILE ''alloc.c.diff'
X100c100
X< /* Block to be freed goes on front of hole list. */
X---
X> /* Block to be freed goes on front of the hole list. */
X169c169
X< * succesor into it.
X---
X> * successor into it.
+ END-OF-FILE alloc.c.diff
chmod 'u=rw,g=r,o=r' 'alloc.c.diff'
set `wc -c 'alloc.c.diff'`
count=$1
case $count in
189) :;;
*) echo 'Bad character count in ''alloc.c.diff' >&2
echo 'Count should be 189' >&2
esac
echo Extracting 'break.c.diff'
sed 's/^X//' > 'break.c.diff' << '+ END-OF-FILE ''break.c.diff'
X2c2
X< * the combined text, data, and stack segements. The amount used for a child
X---
X> * the combined text, data, and stack segments. The amount used for a child
X40,43c40,41
X< * anybody noticing it. For a file not using separate I & D space,
X< * the parameter, 'addr' is to the total size, text + data. For a file using
X< * separate text and data spaces, it is just the data size. Files using
X< * separate I & D space have the SEPARATE bit in mp_flags set.
X---
X> * anybody noticing it.
X> * The parameter, 'addr' is the new virtual address in D space.
X52c50
X< v = (vir_bytes) addr; /* 'addr' is the new data segment size */
X---
X> v = (vir_bytes) addr;
X53a52,56
X> if (new_clicks < rmp->mp_seg[D].mem_vir) {
X> res_ptr = (char *) -1;
X> return(ENOMEM);
X> }
X> new_clicks -= rmp->mp_seg[D].mem_vir;
X57c60
X< return(r); /* return new size or -1 */
X---
X> return(r); /* return new address or -1 */
X115c118
X< if (changed) sys_newmap(rmp - mproc, rmp->mp_seg);
X---
X> if (changed) sys_newmap((int)(rmp - mproc), rmp->mp_seg);
X147a151
X> #ifndef ATARI_ST
X158a163
X> #endif
X181c186,189
X< sys_getsp(rmp - mproc, &new_sp);
X---
X> sys_getsp((int)(rmp - mproc), &new_sp);
X> #ifdef ATARI_ST
X> new_sp -= CLICK_SIZE; /* one click margin between D and S */
X> #endif
+ END-OF-FILE break.c.diff
chmod 'u=rw,g=r,o=r' 'break.c.diff'
set `wc -c 'break.c.diff'`
count=$1
case $count in
1284) :;;
*) echo 'Bad character count in ''break.c.diff' >&2
echo 'Count should be 1284' >&2
esac
echo Extracting 'const.h.diff'
sed 's/^X//' > 'const.h.diff' << '+ END-OF-FILE ''const.h.diff'
X5a6
X> #ifdef i8088
X10a12,15
X> #endif
X> #ifdef ATARI_ST
X> #define MM_STACK_BYTES MAX_ISTACK_BYTES + ZEROBUF_SIZE + 2048
X> #endif
X17d21
X< #define HDR_SIZE 32 /* # bytes in the exec file header */
X19a24
X> #define HDR_SIZE 32 /* # bytes in the exec file header */
+ END-OF-FILE const.h.diff
chmod 'u=rw,g=r,o=r' 'const.h.diff'
set `wc -c 'const.h.diff'`
count=$1
case $count in
264) :;;
*) echo 'Bad character count in ''const.h.diff' >&2
echo 'Count should be 264' >&2
esac
echo Extracting 'exec.c.diff'
sed 's/^X//' > 'exec.c.diff' << '+ END-OF-FILE ''exec.c.diff'
X30a31
X> #define SYMB 7 /* location of symbol size in header */
X31a33,36
X> #ifdef ATARI_ST
X> PUBLIC long lseek();
X> #endif
X>
X37c42
X< /* Perform the exece(name, argv, envp) call. The user library builds a
X---
X> /* Perform the execve(name, argv, envp) call. The user library builds a
X51a57
X> long sym_bytes;
X73c79
X< m = read_header(fd, &ft, &text_bytes, &data_bytes, &bss_bytes, &tot_bytes,sc);
X---
X> m = read_header(fd, &ft, &text_bytes, &data_bytes, &bss_bytes, &tot_bytes, &sym_bytes, sc);
X97a104,105
X> vsp += (vir_bytes) rmp->mp_seg[S].mem_len << CLICK_SHIFT;
X> vsp -= stk_bytes;
X105a114,119
X> #ifdef ATARI_ST
X> if (lseek(fd, sym_bytes, 1) < 0)
X> ; /* error */
X> if (relocate(fd, mbuf) < 0)
X> ; /* error */
X> #endif
X131c145
X< PRIVATE int read_header(fd, ft, text_bytes, data_bytes, bss_bytes, tot_bytes,sc)
X---
X> PRIVATE int read_header(fd, ft, text_bytes, data_bytes, bss_bytes, tot_bytes, sym_bytes, sc)
X137a152
X> long *sym_bytes; /* place to return symbol table size */
X156,158c171,173
X< * 7: 0x00000000L
X< * The longs are represented low-order byte first and high-order byte last.
X< * The first byte of the header is always 0x01, followed by 0x03.
X---
X> * 7: size of symbol table in bytes
X> * The longs are represented in a machine dependent order,
X> * little-endian on the 8088, big-endian on the 68000.
X169a185,189
X> *bss_bytes = (vir_bytes) buf[BSSB]; /* bss size in bytes */
X> *sym_bytes = buf[SYMB]; /* symbol table size in bytes */
X> *tot_bytes = buf[TOTB]; /* total bytes to allocate for program */
X> if (*tot_bytes == 0) return(ENOEXEC);
X>
X170a191
X> #ifndef ATARI_ST
X173a195,210
X> #else
X> /*
X> * Treating text as data increases the shadowing overhead.
X> * Under the assumption that programs DO NOT MODIFY TEXT
X> * we can share the text between father and child processes.
X> * This is similar to the UNIX V7 -n option of ld(1).
X> * However, for MINIX the linker did not provide alignment
X> * to click boundaries, so an incomplete text click at the end
X> * must be treated as data.
X> * Correct tot_bytes, since it excludes the text segment.
X> */
X> *data_bytes += *text_bytes;
X> *text_bytes = (*text_bytes >> CLICK_SHIFT) << CLICK_SHIFT;
X> *data_bytes -= *text_bytes;
X> *tot_bytes -= *text_bytes;
X> #endif
X176,179d212
X< /* Get bss and total sizes. */
X< *bss_bytes = (vir_bytes) buf[BSSB]; /* bss size in bytes */
X< *tot_bytes = buf[TOTB]; /* total bytes to allocate for program */
X< if (*tot_bytes == 0) return(ENOEXEC);
X182,183c215,216
X< tc = (*text_bytes + CLICK_SHIFT - 1) >> CLICK_SHIFT;
X< dc = (*data_bytes + *bss_bytes + CLICK_SHIFT - 1) >> CLICK_SHIFT;
X---
X> tc = (*text_bytes + CLICK_SIZE - 1) >> CLICK_SHIFT;
X> dc = (*data_bytes + *bss_bytes + CLICK_SIZE - 1) >> CLICK_SHIFT;
X212,213d244
X< char *rzp;
X< vir_bytes vzb;
X215,216c246
X< phys_clicks new_base, old_clicks;
X< phys_bytes bytes, base, count, bss_offset;
X---
X> phys_clicks new_base;
X218a249,256
X> #ifdef ATARI_ST
X> phys_clicks base, size;
X> #else
X> char *rzp;
X> vir_bytes vzb;
X> phys_clicks old_clicks;
X> phys_bytes bytes, base, count, bss_offset;
X> #endif
X240c278,280
X< old_clicks = (phys_clicks) rmp->mp_seg[S].mem_vir + rmp->mp_seg[S].mem_len;
X---
X> #ifndef ATARI_ST
X> old_clicks = (phys_clicks) rmp->mp_seg[S].mem_len;
X> old_clicks += (rmp->mp_seg[S].mem_vir - rmp->mp_seg[D].mem_vir);
X242a283
X> #endif
X249d289
X< rmp->mp_seg[T].mem_vir = 0;
X252d291
X< rmp->mp_seg[D].mem_vir = 0;
X255d293
X< rmp->mp_seg[S].mem_vir = rmp->mp_seg[D].mem_vir + data_clicks + gap_clicks;
X257a296,309
X> #ifdef ATARI_ST
X> rmp->mp_seg[T].mem_vir = rmp->mp_seg[T].mem_phys;
X> rmp->mp_seg[D].mem_vir = rmp->mp_seg[D].mem_phys;
X> rmp->mp_seg[S].mem_vir = rmp->mp_seg[S].mem_phys;
X> #else
X> rmp->mp_seg[T].mem_vir = 0;
X> rmp->mp_seg[D].mem_vir = 0;
X> rmp->mp_seg[S].mem_vir = rmp->mp_seg[D].mem_vir + data_clicks + gap_clicks;
X> #endif
X> #ifdef ATARI_ST
X> sys_fresh(who, rmp->mp_seg, (phys_clicks)(data_bytes >> CLICK_SHIFT),
X> &base, &size);
X> free_mem(base, size);
X> #else
X276a329
X> #endif
X335d387
X< if (seg_bytes == 0) return; /* text size for combined I & D is 0 */
X337,339c389,398
X< ubuf_ptr = (char *) (mp->mp_seg[seg].mem_vir << CLICK_SHIFT);
X< bytes = (int) seg_bytes;
X< read(new_fd, ubuf_ptr, bytes);
X---
X> ubuf_ptr = (char *) ((vir_bytes)mp->mp_seg[seg].mem_vir << CLICK_SHIFT);
X> while (seg_bytes) {
X> bytes = 31*1024; /* <= 32767 */
X> if (seg_bytes < bytes)
X> bytes = (int)seg_bytes;
X> if (read(new_fd, ubuf_ptr, bytes) != bytes)
X> break; /* error */
X> ubuf_ptr += bytes;
X> seg_bytes -= bytes;
X> }
X340a400,469
X>
X> #ifdef ATARI_ST
X> /*===========================================================================*
X> * relocate *
X> *===========================================================================*/
X> PRIVATE int relocate(fd, buf)
X> int fd; /* file descriptor to read from */
X> char *buf; /* borrowed from do_exec() */
X> {
X> register n;
X> register char *p;
X> register c;
X> register phys_bytes off;
X> register phys_bytes adr;
X> register struct mproc *rmp = mp;
X>
X> /* Read in relocation info from the exec file and relocate.
X> * Relocation info is in GEMDOS format. Only longs can be relocated.
X> *
X> * The GEMDOS format starts with a long L: the offset to the
X> * beginning of text for the first long to be relocated.
X> * If L==0 then no relocations have to be made.
X> *
X> * The long is followed by zero or more bytes. Each byte B is
X> * processed separately, in one of the following ways:
X> *
X> * B==0:
X> * end of relocation
X> * B==1:
X> * no relocation, but add 254 to the current offset
X> * B==0bWWWWWWW0:
X> * B is added to the current offset and the long addressed
X> * is relocated. Note that 00000010 means 1 word distance.
X> * B==0bXXXXXXX1:
X> * illegal
X> */
X> off = (phys_bytes)rmp->mp_seg[T].mem_phys << CLICK_SHIFT;
X> p = buf;
X> n = read(fd, p, MAX_ISTACK_BYTES);
X> if (n < sizeof(long))
X> return(-1); /* error */
X> if (*((long *)p) == 0)
X> return(0); /* ok */
X> adr = off + *((long *)p);
X> n -= sizeof(long);
X> p += sizeof(long);
X>
X> for (;;) { /* once per relocation */
X> *((long *)adr) += off;
X> for (;;) { /* once per byte */
X> if (--n < 0) {
X> p = buf;
X> n = read(fd, p, MAX_ISTACK_BYTES);
X> if (--n < 0)
X> return(-1); /* error */
X> }
X> c = *p++ & 0xFF;
X> if (c != 1)
X> break;
X> adr += 254;
X> }
X> if (c == 0)
X> break;
X> if (c & 1)
X> return(-1); /* error */
X> adr += c;
X> }
X> return(0); /* ok */
X> }
X> #endif
+ END-OF-FILE exec.c.diff
chmod 'u=rw,g=r,o=r' 'exec.c.diff'
set `wc -c 'exec.c.diff'`
count=$1
case $count in
6621) :;;
*) echo 'Bad character count in ''exec.c.diff' >&2
echo 'Count should be 6621' >&2
esac
echo Extracting 'forkexit.c.diff'
sed 's/^X//' > 'forkexit.c.diff' << '+ END-OF-FILE ''forkexit.c.diff'
X15a16
X>
X28d28
X< PRIVATE process_group = 1; /* next process grp to be assigned */
X43d42
X< long prog_bytes;
X45d43
X< long parent_abs, child_abs;
X46a45,48
X> #ifndef ATARI_ST
X> long prog_bytes;
X> long parent_abs, child_abs;
X> #endif
X57,61c59,62
X< prog_clicks = (phys_clicks) rmp->mp_seg[T].mem_len + rmp->mp_seg[D].mem_len +
X< rmp->mp_seg[S].mem_len;
X< #ifdef i8088
X< prog_clicks += rmp->mp_seg[S].mem_vir - rmp->mp_seg[D].mem_len; /* gap too */
X< #endif
X---
X> prog_clicks = (phys_clicks) rmp->mp_seg[S].mem_len;
X> prog_clicks += (rmp->mp_seg[S].mem_vir - rmp->mp_seg[D].mem_vir);
X> #ifndef ATARI_ST
X> if (rmp->mp_flags & SEPARATE) prog_clicks += rmp->mp_seg[T].mem_len;
X62a64
X> #endif
X64a67
X> #ifndef ATARI_ST
X69a73
X> #endif
X76c80
X< child_nr = rmc - mproc; /* slot number of the child */
X---
X> child_nr = (int)(rmc - mproc); /* slot number of the child */
X83,85d86
X< /* Set process group. */
X< if (who == INIT_PROC_NR) rmc->mp_procgrp = process_group++;
X<
X86a88
X> #ifndef ATARI_ST
X90a93
X> #endif
X99c102
X< if (rmp->mp_pid == next_pid) {
X---
X> if (rmp->mp_pid == next_pid || rmp->mp_procgrp == next_pid) {
X105a109,111
X> /* Set process group. */
X> if (who == INIT_PROC_NR) rmc->mp_procgrp = rmc->mp_pid;
X>
X106a113,115
X> #ifdef ATARI_ST
X> sys_fork(who, child_nr, rmc->mp_pid, child_base);
X> #else
X108c117
X< tell_fs(FORK, who, child_nr, 0);
X---
X> #endif
X109a119,121
X> tell_fs(FORK, who, child_nr, rmc->mp_pid);
X>
X> #ifndef ATARI_ST
X111a124
X> #endif
X141a155,159
X> #ifdef ATARI_ST
X> phys_clicks base, size;
X> #endif
X> phys_clicks s;
X> register int proc_nr = (int)(rmp - mproc);
X154c172
X< if (rmp->mp_flags & ALARM_ON) set_alarm(rmp - mproc, (unsigned) 0);
X---
X> if (rmp->mp_flags & ALARM_ON) set_alarm(proc_nr, (unsigned) 0);
X155a174,178
X> #ifdef AM_KERNEL
X> /* see if an amoeba transaction was pending or a putrep needed to be done */
X> am_check_sig(proc_nr, 1);
X> #endif
X>
X157,158c180,195
X< sys_xit(rmp->mp_parent, rmp - mproc);
X< tell_fs(EXIT, rmp - mproc, 0, 0); /* file system can free the proc slot */
X---
X> #ifdef ATARI_ST
X> sys_xit(rmp->mp_parent, proc_nr, &base, &size);
X> free_mem(base, size);
X> #else
X> sys_xit(rmp->mp_parent, proc_nr);
X> #endif
X> tell_fs(EXIT, proc_nr, 0, 0); /* file system can free the proc slot */
X>
X> #ifndef ATARI_ST
X> /* Release the memory occupied by the child. */
X> s = (phys_clicks) rmp->mp_seg[S].mem_len;
X> s += (rmp->mp_seg[S].mem_vir - rmp->mp_seg[D].mem_vir);
X> if (rmp->mp_flags & SEPARATE) s += rmp->mp_seg[T].mem_len;
X> free_mem(rmp->mp_seg[T].mem_phys, s); /* free the memory */
X> #endif
X>
X219a257
X> #ifndef ATARI_ST
X220a259
X> #endif
X222c261
X< child_nr = child - mproc;
X---
X> child_nr = (int)(child - mproc);
X229,233d267
X<
X< /* Release the memory occupied by the child. */
X< s = (phys_clicks) child->mp_seg[S].mem_vir + child->mp_seg[S].mem_len;
X< if (child->mp_flags & SEPARATE) s += child->mp_seg[T].mem_len;
X< free_mem(child->mp_seg[T].mem_phys, s); /* free the memory */
+ END-OF-FILE forkexit.c.diff
chmod 'u=rw,g=r,o=r' 'forkexit.c.diff'
set `wc -c 'forkexit.c.diff'`
count=$1
case $count in
3020) :;;
*) echo 'Bad character count in ''forkexit.c.diff' >&2
echo 'Count should be 3020' >&2
esac
echo Extracting 'glo.h.diff'
sed 's/^X//' > 'glo.h.diff' << '+ END-OF-FILE ''glo.h.diff'
X10c10
X< EXTERN int mm_call; /* caller's proc number */
X---
X> EXTERN int mm_call; /* system call number */
+ END-OF-FILE glo.h.diff
chmod 'u=rw,g=r,o=r' 'glo.h.diff'
set `wc -c 'glo.h.diff'`
count=$1
case $count in
108) :;;
*) echo 'Bad character count in ''glo.h.diff' >&2
echo 'Count should be 108' >&2
esac
echo Extracting 'main.c.diff'
sed 's/^X//' > 'main.c.diff' << '+ END-OF-FILE ''main.c.diff'
X77d76
X< if (who < HARDWARE || who >= NR_PROCS) panic("MM called by", who);
X165,168c164,169
X< printf("%c 8%c~0",033, 033); /* go to top of screen and clear screen */
X< printf("Memory size = %dK ", mem1);
X< printf("MINIX = %dK ", mem2);
X< printf("RAM disk = %dK ", mem3);
X---
X> #ifndef ATARI_ST
X> printf("%c[H%c[J",033, 033); /* go to top of screen and clear screen */
X> #endif
X> printf("Memory size = %3dK ", mem1);
X> printf("MINIX = %3dK ", mem2);
X> printf("RAM disk = %3dK ", mem3);
X181d181
X< rmp->mp_seg[S].mem_vir = init_clicks;
X182a183,189
X> #ifdef ATARI_ST
X> rmp->mp_seg[T].mem_vir = rmp->mp_seg[T].mem_phys;
X> rmp->mp_seg[D].mem_vir = rmp->mp_seg[D].mem_phys;
X> rmp->mp_seg[S].mem_vir = rmp->mp_seg[S].mem_phys;
X> #else
X> rmp->mp_seg[S].mem_vir = init_clicks;
X> #endif
X188c195
X<
X---
X> #ifdef ATARI_ST
X190c197
X< * set_map *
X---
X> * get_tot_mem *
X192,195c199,203
X< PRIVATE set_map(proc_nr, base, clicks)
X< int proc_nr; /* whose map to set? */
X< phys_clicks base; /* where in memory does the process start? */
X< phys_clicks clicks; /* total size in clicks (sep I & D not used) */
X---
X> /*
X> * Current memory size is set by TOS in variable 'phystop'.
X> * The TOS variable '_memtop' compensates for VIDEO memory.
X> */
X> PUBLIC phys_clicks get_tot_mem()
X197c205
X< /* Set up the memory map as part of the system initialization. */
X---
X> long i;
X199,213c207,213
X< register struct mproc *rmp;
X< vir_clicks vclicks;
X<
X< rmp = &mproc[proc_nr];
X< vclicks = (vir_clicks) clicks;
X< rmp->mp_seg[T].mem_vir = 0;
X< rmp->mp_seg[T].mem_len = 0;
X< rmp->mp_seg[T].mem_phys = base;
X< rmp->mp_seg[D].mem_vir = 0;
X< rmp->mp_seg[D].mem_len = vclicks;
X< rmp->mp_seg[D].mem_phys = base;
X< rmp->mp_seg[S].mem_vir = vclicks;
X< rmp->mp_seg[S].mem_len = 0;
X< rmp->mp_seg[S].mem_phys = base + vclicks;
X< sys_newmap(proc_nr, rmp->mp_seg);
X---
X> if (mem_copy(
X> HARDWARE, D, (long)0x0436, /* TOS variable _memtop */
X> MM_PROC_NR, D, (long)&i,
X> (long)sizeof(i)
X> ) != OK)
X> panic("get_tot_mem", NO_NUM);
X> return((phys_clicks)(i >> CLICK_SHIFT));
X214a215
X> #endif
+ END-OF-FILE main.c.diff
chmod 'u=rw,g=r,o=r' 'main.c.diff'
set `wc -c 'main.c.diff'`
count=$1
case $count in
2170) :;;
*) echo 'Bad character count in ''main.c.diff' >&2
echo 'Count should be 2170' >&2
esac
echo Extracting 'makefile.diff'
sed 's/^X//' > 'makefile.diff' << '+ END-OF-FILE ''makefile.diff'
X1c1,6
X< CFLAGS= -Di8088 -O
X---
X> # On a PC, cpp and cem are in /lib and will be removed to make space while
X> # linking the kernel. On an AT, they are in /usr/lib are are not removed.
X> # This is because they have to be in /lib on a PC; the diskette is too small
X> # for them to be in /usr/lib.
X> #
X>
X3c8,9
X< l=../lib
X---
X> l=/usr/lib
X> CFLAGS = -Di8088 -F
X5,6c11,12
X< obj = main.o forkexit.o break.o exec.o signal.o getset.o \
X< alloc.o utility.o table.o putc.o
X---
X> obj = main.s forkexit.s break.s exec.s signal.s getset.s \
X> alloc.s utility.s table.s putc.s
X8,11c14,17
X< mm: makefile $l/head.o $(obj) $l/libc.a $l/end.o
X< @echo "Start linking MM"
X< @ld -o mm $l/head.o $(obj) $l/libc.a $l/end.o
X< @echo "MM done"
X---
X> mm: makefile $l/head.s $(obj) $l/libc.a $l/end.s
X> @echo "Start linking MM."
X> @asld -o mm $l/head.s $(obj) $l/libc.a $l/end.s
X> @echo "MM done. "
X12a19,20
X> clean:
X> rm -f $(obj)
X14c22
X< alloc.o: const.h $h/const.h $h/type.h
X---
X> alloc.s: const.h $h/const.h $h/type.h
X16,21c24,29
X< break.o: const.h $h/const.h $h/type.h
X< break.o: $h/error.h
X< break.o: $h/signal.h
X< break.o: glo.h
X< break.o: mproc.h
X< break.o: param.h
X---
X> break.s: const.h $h/const.h $h/type.h
X> break.s: $h/error.h
X> break.s: $h/signal.h
X> break.s: glo.h
X> break.s: mproc.h
X> break.s: param.h
X23,29c31,37
X< exec.o: const.h $h/const.h $h/type.h
X< exec.o: $h/callnr.h
X< exec.o: $h/error.h
X< exec.o: $h/stat.h
X< exec.o: glo.h
X< exec.o: mproc.h
X< exec.o: param.h
X---
X> exec.s: const.h $h/const.h $h/type.h
X> exec.s: $h/callnr.h
X> exec.s: $h/error.h
X> exec.s: $h/stat.h
X> exec.s: glo.h
X> exec.s: mproc.h
X> exec.s: param.h
X31,36c39,44
X< forkexit.o: const.h $h/const.h $h/type.h
X< forkexit.o: $h/callnr.h
X< forkexit.o: $h/error.h
X< forkexit.o: glo.h
X< forkexit.o: mproc.h
X< forkexit.o: param.h
X---
X> forkexit.s: const.h $h/const.h $h/type.h
X> forkexit.s: $h/callnr.h
X> forkexit.s: $h/error.h
X> forkexit.s: glo.h
X> forkexit.s: mproc.h
X> forkexit.s: param.h
X38,43c46,51
X< getset.o: const.h $h/const.h $h/type.h
X< getset.o: $h/callnr.h
X< getset.o: $h/error.h
X< getset.o: glo.h
X< getset.o: mproc.h
X< getset.o: param.h
X---
X> getset.s: const.h $h/const.h $h/type.h
X> getset.s: $h/callnr.h
X> getset.s: $h/error.h
X> getset.s: glo.h
X> getset.s: mproc.h
X> getset.s: param.h
X45,51c53,59
X< main.o: const.h $h/const.h $h/type.h
X< main.o: $h/callnr.h
X< main.o: $h/com.h
X< main.o: $h/error.h
X< main.o: glo.h
X< main.o: mproc.h
X< main.o: param.h
X---
X> main.s: const.h $h/const.h $h/type.h
X> main.s: $h/callnr.h
X> main.s: $h/com.h
X> main.s: $h/error.h
X> main.s: glo.h
X> main.s: mproc.h
X> main.s: param.h
X53,54c61,62
X< putc.o: $h/const.h $h/type.h
X< putc.o: $h/com.h
X---
X> putc.s: $h/const.h $h/type.h
X> putc.s: $h/com.h
X56,64c64,72
X< signal.o: const.h $h/const.h $h/type.h
X< signal.o: $h/callnr.h
X< signal.o: $h/com.h
X< signal.o: $h/error.h
X< signal.o: $h/signal.h
X< signal.o: $h/stat.h
X< signal.o: glo.h
X< signal.o: mproc.h
X< signal.o: param.h
X---
X> signal.s: const.h $h/const.h $h/type.h
X> signal.s: $h/callnr.h
X> signal.s: $h/com.h
X> signal.s: $h/error.h
X> signal.s: $h/signal.h
X> signal.s: $h/stat.h
X> signal.s: glo.h
X> signal.s: mproc.h
X> signal.s: param.h
X66,70c74,78
X< table.o: const.h $h/const.h $h/type.h
X< table.o: $h/callnr.h
X< table.o: glo.h
X< table.o: mproc.h
X< table.o: param.h
X---
X> table.s: const.h $h/const.h $h/type.h
X> table.s: $h/callnr.h
X> table.s: glo.h
X> table.s: mproc.h
X> table.s: param.h
X72,78c80,86
X< utility.o: const.h $h/const.h $h/type.h
X< utility.o: $h/callnr.h
X< utility.o: $h/com.h
X< utility.o: $h/error.h
X< utility.o: $h/stat.h
X< utility.o: glo.h
X< utility.o: mproc.h
X---
X> utility.s: const.h $h/const.h $h/type.h
X> utility.s: $h/callnr.h
X> utility.s: $h/com.h
X> utility.s: $h/error.h
X> utility.s: $h/stat.h
X> utility.s: glo.h
X> utility.s: mproc.h
+ END-OF-FILE makefile.diff
chmod 'u=rw,g=r,o=r' 'makefile.diff'
set `wc -c 'makefile.diff'`
count=$1
case $count in
3807) :;;
*) echo 'Bad character count in ''makefile.diff' >&2
echo 'Count should be 3807' >&2
esac
echo Extracting 'signal.c.diff'
sed 's/^X//' > 'signal.c.diff' << '+ END-OF-FILE ''signal.c.diff'
X5c5
X< * can be signalled. The actual signalling is done by sig_proc().
X---
X> * can be signaled. The actual signaling is done by sig_proc().
X11c11
X< * sig_proc: interrupt or terminate a signalled process
X---
X> * sig_proc: interrupt or terminate a signaled process
X17a18
X>
X35a37,40
X> #ifdef AM_KERNEL
X> PRIVATE int Tfs; /* if true then Tell file server to unpause */
X> #endif
X>
X45a51
X> int sigign = mp->mp_ignore;
X62a69,70
X>
X> if (sigign & mask) return(1);
X85c93
X< * As soon is MM is awaiting new work, the kernel sends MM a message containing
X---
X> * As soon as MM is awaiting new work, the kernel sends MM a message containing
X91c99
X< int i, proc_id, proc_nr, id;
X---
X> int i, j, proc_id, proc_nr, id;
X94,95c102,104
X< /* Only kernel and FS may make this call. */
X< if (who != HARDWARE && who != FS_PROC_NR) return(EPERM);
X---
X> /* Only kernel may make this call. */
X> if (who != HARDWARE) return(EPERM);
X> dont_reply = TRUE; /* don't reply to the kernel */
X106c115
X< if (sig_map == 1 << (STACK_FAULT - 1)) {
X---
X> if (sig_map == 1 << (STACK_FAULT - 1))
X108,109d116
X< return(OK);
X< }
X114c121
X< * and SIGQUIT, use proc_id 0, since multiple processes may have to signalled.
X---
X> * and SIGQUIT, use proc_id 0, since multiple processes may have to signaled.
X116,119c123,126
X< for (i = 0; i < NR_SIGS; i++) {
X< id= (i+1 == SIGINT || i+1 == SIGQUIT ? 0 : proc_id);
X< if (i + 1 == SIGKILL) id = -1; /* simulate kill -1 9 */
X< if ( (sig_map >> i) & 1) check_sig(id, i + 1, SUPER_USER);
X---
X> for (i = 0, j = 1; i < NR_SIGS - 1; i++, j++) {
X> id = (j == SIGINT || j == SIGQUIT) ? 0 : proc_id;
X> if (j == SIGKILL) id = -1; /* simulate kill -1 9 */
X> if ( (sig_map >> i) & 1) check_sig(id, j, SUPER_USER);
X122d128
X< dont_reply = TRUE; /* don't reply to the kernel */
X151c157
X< * - if specific process requested (i.e., 'procpid' > 0, check for match
X---
X> * - if specific process requested (i.e., 'procpid' > 0), check for match
X170c176
X< rmp->mp_flags &= ~ALARM_ON;
X---
X> if (send_sig) rmp->mp_flags &= ~ALARM_ON;
X173c179
X< if (send_sig == FALSE || rmp->mp_ignore & mask) continue;
X---
X> if (send_sig == FALSE) continue;
X174a181
X> if (rmp->mp_ignore & mask) continue;
X175a183,187
X> #ifdef AM_KERNEL
X> /* see if an amoeba transaction should be signalled */
X> Tfs = am_check_sig(rmp - mproc, 0);
X> #endif
X>
X180,181c192,193
X< unpause(rmp - mproc); /* check to see if process is paused */
X< if (proc_id > 0) break; /* only one process being signalled */
X---
X> unpause((int)(rmp - mproc)); /* check to see if process is paused */
X> if (proc_id > 0) break; /* only one process being signaled */
X194c206
X< register struct mproc *rmp; /* pointer to the process to be signalled */
X---
X> register struct mproc *rmp; /* pointer to the process to be signaled */
X213c225
X< sys_getsp(rmp - mproc, &new_sp);
X---
X> sys_getsp((int)(rmp - mproc), &new_sp);
X216c228
X< sys_sig(rmp - mproc, sig_nr, rmp->mp_func);
X---
X> sys_sig((int)(rmp - mproc), sig_nr, rmp->mp_func);
X252c264
X< /* This routine is used by do_alarm() to set the alarm timer. It is also
X---
X> /* This routine is used by do_alarm() to set the alarm timer. It is also used
X289c301
X< PUBLIC unpause(pro)
X---
X> PRIVATE unpause(pro)
X292c304
X< /* A signal is to be sent to a process. It that process is hanging on a
X---
X> /* A signal is to be sent to a process. If that process is hanging on a
X303c315
X< /* Check to see if process is hanging on PAUSE call. */
X---
X> /* Check to see if process is hanging on a PAUSE call. */
X312c324
X< rmp->mp_flags &= ~ WAITING; /* turn off WAITING bit */
X---
X> rmp->mp_flags &= ~WAITING; /* turn off WAITING bit */
X316a329,332
X> #ifdef AM_KERNEL
X> /* if it was an amoeba transaction, it is already tidied up by now. */
X> if (Tfs)
X> #endif
X318c334
X< tell_fs(UNPAUSE, pro, 0, 0);
X---
X> tell_fs(UNPAUSE, pro, 0, 0);
X336c352,353
X< long len, a, c, ct, dest;
X---
X> long len;
X> long a, c, ct, dest;
X342c359
X< slot = rmp - mproc;
X---
X> slot = (int)(rmp - mproc);
X366,372c383,386
X< /* First loop through segments and write each length on core file. */
X< for (i = 0; i < NR_SEGS; i++) {
X< len = rmp->mp_seg[i].mem_len << CLICK_SHIFT;
X< if (write(r, (char *) &len, sizeof len) < 0) {
X< close(r);
X< return;
X< }
X---
X> /* First write the memory map of all segments on core file. */
X> if (write(r, (char *) rmp->mp_seg, sizeof(rmp->mp_seg)) < 0) {
X> close(r);
X> return;
+ END-OF-FILE signal.c.diff
chmod 'u=rw,g=r,o=r' 'signal.c.diff'
set `wc -c 'signal.c.diff'`
count=$1
case $count in
4452) :;;
*) echo 'Bad character count in ''signal.c.diff' >&2
echo 'Count should be 4452' >&2
esac
echo Extracting 'table.c.diff'
sed 's/^X//' > 'table.c.diff' << '+ END-OF-FILE ''table.c.diff'
X18a19,23
X> #ifdef ATARI_ST
X> /*
X> * Creating core files is disabled, except for SIGQUIT and SIGIOT.
X> * Set core_bits to 0x0EFC if you want compatibility with UNIX V7.
X> */
X19a25,27
X> #else
X> unshort core_bits = 0x0EFC; /* which signals cause core images */
X> #endif
X26c34
X< extern no_sys(), unpause(), do_ksig(), do_brk2();
X---
X> extern no_sys(), do_ksig(), do_brk2();
X27a36,39
X> #ifdef AM_KERNEL
X> extern do_amoeba();
X> #endif
X>
X98c110,117
X< no_sys /* 68 = TASK_REPLY */
X---
X> no_sys, /* 68 = TASK_REPLY */
X> #ifdef i8088
X> #ifdef AM_KERNEL
X> do_amoeba, /* 69 = AMOEBA SYSTEM CALL */
X> #else
X> no_sys, /* 69 = AMOEBA SYSTEM CALL */
X> #endif
X> #endif i8088
+ END-OF-FILE table.c.diff
chmod 'u=rw,g=r,o=r' 'table.c.diff'
set `wc -c 'table.c.diff'`
count=$1
case $count in
669) :;;
*) echo 'Bad character count in ''table.c.diff' >&2
echo 'Count should be 669' >&2
esac
echo Extracting 'utility.c.diff'
sed 's/^X//' > 'utility.c.diff' << '+ END-OF-FILE ''utility.c.diff'
X116c116
X< * inconsistency is detected, e.g., a programm_ing error or illegal value of a
X---
X> * inconsistency is detected, e.g., a programming error or illegal value of a
+ END-OF-FILE utility.c.diff
chmod 'u=rw,g=r,o=r' 'utility.c.diff'
set `wc -c 'utility.c.diff'`
count=$1
case $count in
173) :;;
*) echo 'Bad character count in ''utility.c.diff' >&2
echo 'Count should be 173' >&2
esac
exit 0