[comp.os.minix] Protected mode MINIX for 80286 Part 1 - By Bruce Evans

worsley@ditmela.oz (Andrew Worsley) (05/18/89)

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 10)."
# Contents:  MANIFEST README INSTALL crc-after crc-before crc-dist
#   crc-misc commandsdif fsdif hdif kerneldif libdif mmdif toolsdif
#   commandsdif/CHANGES fsdif/CHANGES hdif/CHANGES libdif/CHANGES
#   mmdif/CHANGES toolsdif/CHANGES commandsdif/readclock.c.cd
#   fsdif/at_makefile.cd fsdif/device.c.cdif
# Wrapped by sys@besplex on Sun Mar 26 06:33:40 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'MANIFEST' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'MANIFEST'\"
else
echo shar: Extracting \"'MANIFEST'\" \(2471 characters\)
sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
X   File Name		Archive #	Description
X-----------------------------------------------------------
X MANIFEST                   1	This shipping list
X README                     1	
X INSTALL                    1	
X crc-after                  1	
X crc-before                 1	
X crc-dist                   1	
X crc-misc                   1	
X commandsdif                1	
X fsdif                      1	
X hdif                       1	
X kerneldif                  1	
X libdif                     1	
X mmdif                      1	
X toolsdif                   1	
X commandsdif/CHANGES        1	
X fsdif/CHANGES              1	
X hdif/CHANGES               1	
X kerneldif/CHANGES          2	
X libdif/CHANGES             1	
X mmdif/CHANGES              1	
X toolsdif/CHANGES           1	
X commandsdif/readclock.c.cd  1	
X fsdif/at_makefile.cd       1	
X fsdif/cache.c.cdif         2	
X fsdif/device.c.cdif        1	
X fsdif/inode.c.cdif         2	
X fsdif/main.c.cdif          2	
X fsdif/misc.c.cdif          2	
X fsdif/pipe.c.cdif          2	
X fsdif/super.c.cdif         2	
X fsdif/table.c.cdif         2	
X fsdif/utility.c.cdif       2	
X hdif/boot.h.cdif           2	
X hdif/com.h.cdif            2	
X hdif/const.h.cdif          2	
X kerneldif/Bconsole.c.cdi   2	
X kerneldif/Brs232.c.cdif    2	
X kerneldif/Btty.c.cdif      3	
X kerneldif/at_wini.c.cdif   3	
X kerneldif/axmakefile.cdi   3	
X kerneldif/clock.c.cdif     3	
X kerneldif/console.c.cdif   3	
X kerneldif/const.h.cdif     3	
X kerneldif/dmp.c.cdif       4	
X kerneldif/exception.c.cd   4	
X kerneldif/floppy.c.cdif    4	
X kerneldif/glo.h.cdif       4	
X kerneldif/i8259.c.cdif     4	
X kerneldif/klib286.x.cdif   4	
X kerneldif/klib88.x.cdif    5	
X kerneldif/main.c.cdif      4	
X kerneldif/memory.c.cdif    6	
X kerneldif/misc.c.cdif      6	
X kerneldif/mpx286.x.cdif    6	
X kerneldif/mpx88.x.cdif     6	
X kerneldif/printer.c.cdif   6	
X kerneldif/proc.c.cdif      7	
X kerneldif/proc.h.cdif      7	
X kerneldif/protect.c.cdif   8	
X kerneldif/protect.h.cdif   7	
X kerneldif/rs2.x.cdif       8	
X kerneldif/rs232.c.cdif     8	
X kerneldif/sconst.h.cdif    8	
X kerneldif/sglo.h.cdif      8	
X kerneldif/system.c.cdif    9	
X kerneldif/table.c.cdif     6	
X kerneldif/tty.c.cdif       3	
X kerneldif/type.h.cdif      7	
X kerneldif/xt_wini.c.cdif   8	
X libdif/head.s.cdif         8	
X mmdif/alloc.c.cdif         9	
X mmdif/main.c.cdif          9	
X mmdif/signal.c.cdif        4	
X toolsdif/build.c.cdif     10	
X toolsdif/fsck.c.cdif       9	
X toolsdif/fsck1.s.cdif      8	
END_OF_FILE
if test 2471 -ne `wc -c <'MANIFEST'`; then
    echo shar: \"'MANIFEST'\" unpacked with wrong size!
fi
# end of 'MANIFEST'
fi
if test -f 'README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(9669 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
XHere are patches to Minix 1.3d to provide:
X
X	o use of 286 protected mode on 286's and 386's.
X	o overhaul of interrupt handling to reduce latency by a huge factor.
X	o changes to FS and boot programs to allow the root device and RAM
X	  disk size to be specified at boot time.
X	o several minor bug fixes.
X
XThe 286 system binaries remain capable of running on 8088 systems, and can
Xbe limited at boot time to 8088 mode on 286's to provide full backward
Xcompatibility. Most testing was done on a 386-AT, some on a real PC, and
Xa little on a clone-AT and a Toshiba 1100 (8088 portable). I tried to avoid
Xbreaking nonstandard configurations but didn't touch Amoeba (it can no
Xlonger work) and may have messed up the PS/2 Model 30.
X
XProtected mode.
X---------------
X
XThe protection is of of system processes from wild user processes.
XProtected mode also provides a 16MB address space, limited mainly by
Xavailable RAM and by the small model to 64K code + 64K data per process.
XI am usually greeted by a startup message like:
X
XMemory size = 1024K     MINIX = 127K     RAM disk =   0K     Available = 897K
X
XProtected mode has some drawbacks. Interrupt handling is 5 to 10% slower
Xbecause loading segment registers takes a long time. It is imprudent to
Xallow users easy access to the i/o ports and another project to allow access
Xto memory outside the data segment. Badly-behaved programs try to do these
Xthings and will cause an exception in protected mode. Other pitfalls are
Xwriting to the code segment, and assuming code segment == data segment
Xbecause the program is common I&D. It is possible for a program to almost
Xlock up the system if it ignores SIGSEGV and then causes one (many
Xexceptions resume at the faulty PC since the signal handlers are too
Xsimple). CTRL-F9 is needed to break out of that. Fortunately most Minix
Xprograms are well-behaved.
X
XThis kernel provides /dev/port to go with /dev/mem so ports can be accessed
X(slowly) by suitably privileged users. Only readclock uses this now. Things
Xlike EGA graphics will require immediate access to both ports and screen
Xmemory. It is easy to provide the memory access by expanding the per-process
Xlocal descriptor table, but not clear how to interface the capability. Ports
Xare more difficult since the 286 allows access to all or none, depending on
Xthe IOPL bits in the PSW. The 386 allows a more flexible permissions bitmap.
XStill, port-mapped i/o is awful for software.
X
XMy 386 protected mode code is not included here since it offers few
Xcapabilities beyond what the 286 can do, so I'm reserving it for a proper
X32 bit 386 version. The changes for it are simple but bulky. All the
Xassembler code uses 386 instructions where appropriate. This is not
Xessential (below 16M) but is cleaner - until you ask asld to assemble it.
XThe interrupt handlers have to save and restore 32 bit registers - this
Xinvolves little more than putting 'e' in front of register names and 'd'
Xafter some instructions. The process table structure has to be larger to
Xhold the larger registers. "protect.c" needs a few more lines to initialize
Xthe top 2 bytes in segment descriptors and to build 32 bit TSS's.
XEverywhere that a saved register is accessed, the code needs to test the
Xprocessor variable to decide whether to use an r16 (8088-286) register or
Xr32 (386) register. It is practical to store 8088 r16's in the r32's (for
Xan 8088/386 kernel like I started with) but not 80286 r16's since that
Xrequires too much rebuilding of the stack frame. And all this is worthless
Xwithout a 386 compiler and a hacked library to interface to the 16 bit
Xkernel.
X
XInterrupt handling.
X-------------------
X
XThe 1.3 kernel leaves interrupts off while it does context-switching and
Xhardware interrupt handling. This takes a few hundred instructions, well
Xover 1ms on a 5MHz 8088, and sometimes an iteration causes an even longer
Xdelay. My TTY driver with this kernel will go no faster than 2400 baud,
Xwhich suggests that the normal worst case latency is about 4ms. The 1.3
XTTY driver has internal inefficiencies which makes it another 4 to 8
Xtimes slower.
X
XThis kernel improves the interrupt latency by a factor of about 12 in two
Xsteps. The first step is to run the main part of the context-switcher
X(sys_call()) with interrupts enabled, and rewrite the interrupt handler
Xto task interface (interrupt()) to be more efficient. This, together with
Xother small changes to proc.c, mainly using pointers instead of arrays and
Xarrays instead of pointer arithmetic, gives about a factor of 4 improvement.
X
XThe second step is to enable interrupts while most interrupt handlers are
Xrunning. Ideally, only save() and restart() and some *small* critical
Xregions should have interrupts disabled. In practice, fast asynchronous
Xinput devices like RS232 need interrupts disabled throughout their
Xinterrupt handler.
X
XSeveral methods are used to prevent reentry to critical regions without
Xlocking everything. The variable 'k_reenter' is the most important. It
Xcounts reentries into the kernel (context-switching and interrupt handling).
XInterrupt() may not reenter unless k_reenter is 0 (when there is exactly
Xone interrupt handler in the kernel, and no sys_call()). Calls from nested
Xhandlers are delayed until the first handler finishes, using a little queue.
XThis is cheap because now only task numbers have to be queued. Calls to
Xcontext-switching functions are also critical. The main one, sys_call(),
Xneeds no special treatment since interrupt handlers may not call it.
XComplications are caused by calls from tasks, e.g. sched(), when k_reenter
Xis -1. These are protected by the flag 'switching', since k_reenter is
Xused to tell when to switch stacks as well as for locking, so cannot be
Xadjusted. Curiously, interrupt() may be called when k_reenter is -1 (e.g.
Xfor TTY_O_DONE), but this causes no trouble.
X
XHardware locking is still used for individual interrupt lines to ensure
Xthat no interrupt handler is ever reentered. This bounds the amount of
Xkernel stack required, and eliminates most competition for shared variables.
XSee mpx88.x and klib88.x. I think the low level is now correct for level-
Xsensitive interrupts on PS/2's, but haven't tested it. Access to shared
Xvariables is now very tricky. The clock handler locks everything for short
Xregions. The printer driver uses a test-and-set on its hardware mask bit.
XMy TTY driver uses a test-and-set on a normal variable - see tty_wakeup().
XThis is beginning to look like another operating system beneath the message
Xpassing.
X
XSelect root device etc. at boot time.
X-------------------------------------
X
XThe boot program (standalone fsck) has several more options on the menu, to
Xselect the system configuration:
X
X	o root device
X	o RAM image device
X	o RAM disk size
X	o processor limit
X
XNot all combinations are valid. The keyboard type was already specified by
Xthe scan code. The processor limit is the way of handicapping 286 and 386
Xprocessors so they run in 8088 mode. Fsck fills in a structure with the
Xoptions and passes it to kernel and FS.
X
XThis lets me test lots of variants of the system without recompiling. In
Xparticular I can keep my setup with the hard disk as root when testing
Xthe version to be posted!
X
XThe changes in FS mainly involve replacing BOOT_DEV and ROOT_DEV by
Xvariables and eliminating unwarranted messages about the RAM disk being
Xroot. The "h/boot.h" file is kept separate and so needs including all over
Xbecause it is needed by the bootstrap program (fsck.c here). Supporting
Xcode is in fsck.c, fsck1.s, mpx88.x, com.h and system.c. Adding a system
Xcall to support copying the parameters from kernel to FS was a lot of
Xwork but FS can't sensibly call sys_copy() since it doesn't know where
Xthey are.
X
X
XReorganized assembler files.
X----------------------------
X
XIt was too hard to maintain constants across several files without being 
Xable to include header files, and asld lacked the ability to handle 286 code
Xeven via macros. So all the '.s' files are renamed '.x' files and passed
Xthrough the C preprocessor (automatically with make). Most of the constants
Xdefined in the C header files become available in the assembler code. One
Xproblem is that asld wants "[]" for parentheses, so many derived constants
Xhave to be defined as if they were fundamental.
X
XTTY.
X----
X
XThe TTY driver I posted in January should have been a prerequisite to these
Xchanges, but I forgot to say so at the time. I didn't want to post it all
Xagain since this is already too long, so made minimal changes to get the 1.3
Xdriver working. Diffs for both versions are included. I don't trust the
X1.3 version but used it to upload this posting at 2400 baud with no trouble.
X
XMy version now works at 19.2K baud on a 4.77MHz 8088 (1700 chars/sec
Xthroughput) and on 2 lines at 115.2K baud on a 20MHz 386 (2 x 8000 chars/sec
Xthroughput). The 1.3 version works at 2400 baud on the PC and 2 x 9600 baud
Xon the 386. Running RS232 at a high speed is a good test of interrupt
Xhandling. I ran the dual lines test by logging into tty2 using term on tty1.
XThis requires 2 serial ports but no fast external devices.
X
XDebugger.
X---------
X
XThe debugger I posted last December needs upgrading to work with this kernel.
XEven in real mode, it needs small changes. I have a version for protected
Xmode, but it only runs on 386's since it needs to switch to real mode to run.
XI consider a debugger essential for serious work on the system, but mine no
Xlonger compiles with the usual tools:
X
XAsld problems.
X--------------
X
XAsld may be close to running out of space when linking the kernel. It failed
Xungracefully when trying to link the kernel + debugger. Yet a core dump
Xshowed it had 10K of zeros between heap and stack.
END_OF_FILE
if test 9669 -ne `wc -c <'README'`; then
    echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'INSTALL' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'INSTALL'\"
else
echo shar: Extracting \"'INSTALL'\" \(4428 characters\)
sed "s/^X//" >'INSTALL' <<'END_OF_FILE'
XInstallation guide for protected mode Minix.
X--------------------------------------------
X
X1. Unpack the shars. It is best to work in a fresh directory. The shell will
Xcreate files README, INSTALL, MANIFEST, crc-dist, crc-before, crc-after and
Xcrc-misc, and subdirectories commandsdif, fsdif, hdif, kerneldif, libdif,
Xmmdif and toolsdif. You will need about 400K more space. The diffs include
Xseveral new files in cdiff format so patch can handle them.
X
X2. Examine crc-before for the list of prerequisite files. This is just the
Xheart of what I think is 1.3d (from the "1.3 - final wrapup" posting last
XOctober). If your files are different, the new kernel may not work. If you
Xhave the right files but usually use a patched version, I suggest going back
Xto 1.3d to start with (except the 1.4a floppy.c and my patches for TTY are
Xsupported here). In the kernel directory, there are so many changes that
Xsomething is sure to go wrong if you start from the wrong base. The other
Xpatches here won't cause so much trouble, but beware of clashes with ones
XI've already posted and the one to FS to put the root file system on the
Xhard disk.
X
X3. Make full working copies of the fs, h, kernel, mm and tools directories
X(or back up everything). Also make directories and files commands/readclock.c
Xand lib/IBM_PC/head.s. This requires about 800K more space.
X
X4. If you have the 1.4a floppy.c, use it. The floppy diff is in fact relative
Xto this version, but the 1.3d version works too (but causes warnings from
Xpatch). If you want to use my TTY (posted in January), move tty.c.cdif,
Xrs232.c.cdif and console.c.cdif in kerneldif somewhere out of the diff list,
Xand rename Btty.c.cdif, Brs232.c.cdif and Bconsole.c.cdif to them, and get
Xthe files tty.c, rs232.c, console.c and tty.h (only) from my posting. Use
Xcrc-misc to check the files are correct.
X
X5. Apply the patches. The diffs were made from the minix directory (the one
Xabove kernel, mm etc.) so patch can do everything in one step with a
Xcommand like:
X
X	(cd dir-used-to-unpack; cat *dif/[a-z]*) | \
X	(cd dir-used-for-source-dirs; patch -p -N 2>&1 | tee patch.out)
X
XThis requires about 1100K more space (patch will make 550K files in /tmp).
XYou may have to do the patches a few at a time if space is tight, or one at
Xa time in case of trouble.
X
X6. Check the new files against crc-after.
X
X7. Move the original copies of the patched files to backup directories or
Xdelete them. Do the same with the following kernel files which have become
Xobsolete:
X
X	at_makefile, klib88.s, mpx88.s, xt_makefile.
X
XThe separate copy of wini.c is also obsolete. In the old lib/IBM_PC (not
Xtouched by the patches), getutil.s and portio.s are obsolete. These can be
Xleft for now, but it is best to take them out of libc.a since they will give
Xcore dumps in protected mode.
X
X8. Link or copy all the at_makefile's or xt_makefile's to makefile's. In
Xthe fs directory, there is a new at_makefile but no new xt_makefile - patch
Xxt_makefile if you need to use it. In the kernel directory, there is now only
Xaxmakefile, for both. It will compile for XT's but may need editing to run
Xon XT's. If you are using my TTY, edit the kernel makefile to select it.
XThere are many options in axmakefile which are of no use to anyone but me,
Xbut you may want to reverse the LINEWRAP and STUPID_WINI selections to
Xsomething saner, and maybe try SPARE_VIDEO. The whole kernel should really
Xdepend on axmakefile to force recompiling it all when a define is changed.
X
X9. Re-make tools/build and tools/fsck and then an image with your old
Xkernel+mm+fs+init and check that the image still works. The new options on
Xthe fsck menu should do nothing.
X
X10. Link or copy the new lib/IBM_PC/head.s to /usr/lib/head.s.
X
X11. Re-make kernel, mm, fs, init as usual. The old ones must not be mixed,
Xsince kernel, mm and fs use a new CLICK_SIZE and a couple more system calls,
Xand kernel wants init to have a larger initial stack.
X
X12. Make a new image.
X
X13. Make the new readclock and then the port device for readclock to use:
X
X	su root
X	mknod /dev/port c 1 4
X
Xand fix the memory device for it:
X
X	rm /dev/mem
X	mknod /dev/mem c 1 1
X
XThese must go on the (old) root DISK.
X
X14. Boot the new image. There are several new installation possibilities
Xprovided from the new options on the boot menu. I suggest changing the
Xdefault boot parameters in fsck.c if they don't suit you. I use /dev/hd2
Xfor the root device and 0 for the RAM disk size.
END_OF_FILE
if test 4428 -ne `wc -c <'INSTALL'`; then
    echo shar: \"'INSTALL'\" unpacked with wrong size!
fi
# end of 'INSTALL'
fi
if test -f 'crc-after' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'crc-after'\"
else
echo shar: Extracting \"'crc-after'\" \(2915 characters\)
sed "s/^X//" >'crc-after' <<'END_OF_FILE'
X25125   6397 commands/readclock.c
X62514   4313 fs/at_makefile
X61318   2988 fs/buf.h
X63516  10843 fs/cache.c
X49601   2925 fs/const.h
X32651    273 fs/dev.h
X28661   8604 fs/device.c
X43804    474 fs/file.h
X08379   3225 fs/filedes.c
X03291   1502 fs/fproc.h
X32100   1013 fs/glo.h
X45668   7813 fs/inode.c
X05436   1943 fs/inode.h
X37259   5662 fs/link.c
X20987  16844 fs/main.c
X49598   7693 fs/misc.c
X59037   6257 fs/mount.c
X08819   9226 fs/open.c
X59312   1557 fs/param.h
X44200  10716 fs/path.c
X46842   4266 fs/pc_makefile
X19890   8581 fs/pipe.c
X01700   5864 fs/protect.c
X11848   1440 fs/putc.c
X15755  12205 fs/read.c
X14710   5397 fs/stadir.c
X61743   8935 fs/super.c
X10348   2081 fs/super.h
X52747   4314 fs/table.c
X03667   2620 fs/time.c
X56368    710 fs/type.h
X15923   5419 fs/utility.c
X00551   7367 fs/write.c
X46158   1142 h/boot.h
X45442   1683 h/callnr.h
X10716   7725 h/com.h
X25227   4420 h/const.h
X48562   2191 h/error.h
X03794   1412 h/sgtty.h
X06265   1115 h/signal.h
X51139    861 h/stat.h
X16557   4001 h/type.h
X50110   3188 kernel/at_makefile
X27982  16308 kernel/at_wini.c
X42574   7662 kernel/axmakefile
X22105  11246 kernel/clock.c
X60674  34356 kernel/console.c
X52636   4410 kernel/const.h
X60752   3349 kernel/dmp.c
X08141   2109 kernel/exception.c
X26501  27169 kernel/floppy.c
X00100   1763 kernel/glo.h
X41282   2138 kernel/i8259.c
X12547   7691 kernel/klib286.x
X16069  36914 kernel/klib88.x
X33778  10292 kernel/main.c
X50746   5654 kernel/memory.c
X31337   2467 kernel/misc.c
X45692   6750 kernel/mpx286.x
X01231  15602 kernel/mpx88.x
X65108   3375 kernel/pc_makefile
X25702  10264 kernel/printer.c
X45651  17211 kernel/proc.c
X06198   3783 kernel/proc.h
X26519   9012 kernel/protect.c
X52909   4675 kernel/protect.h
X12176  18813 kernel/ps_wini.c
X05156   5764 kernel/rs2.x
X39870  19682 kernel/rs232.c
X23697   4804 kernel/sconst.h
X13106   4177 kernel/sglo.h
X48093  24928 kernel/system.c
X28634   3838 kernel/table.c
X38180  28073 kernel/tty.c
X34455   7485 kernel/tty.h
X44806   4708 kernel/ttymaps.h
X23087   1815 kernel/type.h
X32712  26756 kernel/xt_wini.c
X24479    880 lib/IBM_PC/head.s
X32432   8523 mm/alloc.c
X49710   1833 mm/at_makefile
X05784   7234 mm/break.c
X43289    744 mm/const.h
X37617  17077 mm/exec.c
X17024   9871 mm/forkexit.c
X34366   1572 mm/getset.c
X06761    799 mm/glo.h
X36536   8885 mm/main.c
X46388   1661 mm/mproc.h
X21684    677 mm/param.h
X39295   1890 mm/pc_makefile
X54292   1487 mm/putc.c
X45715  13879 mm/signal.c
X09215   3143 mm/table.c
X17333    238 mm/type.h
X20567   4181 mm/utility.c
X59520   2249 tools/at_makefile
X13594   8083 tools/bootblok.s
X61341  24303 tools/build.c
X53860   1298 tools/changemem
X36909  48595 tools/fsck.c
X18310   3421 tools/fsck1.s
X39871     44 tools/group
X21308   6082 tools/init.c
X43560    327 tools/message
X52749  25884 tools/mkfs.c
X52059     97 tools/passwd
X59520   2249 tools/pc_makefile
X00735    105 tools/profile
X09800    197 tools/rc
X12541      4 tools/ttys
X10241     22 tools/ttytype
END_OF_FILE
if test 2915 -ne `wc -c <'crc-after'`; then
    echo shar: \"'crc-after'\" unpacked with wrong size!
fi
# end of 'crc-after'
fi
if test -f 'crc-before' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'crc-before'\"
else
echo shar: Extracting \"'crc-before'\" \(2574 characters\)
sed "s/^X//" >'crc-before' <<'END_OF_FILE'
X52678   4113 commands/readclock.c
X19878   4197 fs/at_makefile
X61318   2988 fs/buf.h
X31034  10863 fs/cache.c
X49601   2925 fs/const.h
X32651    273 fs/dev.h
X54203   8530 fs/device.c
X43804    474 fs/file.h
X08379   3225 fs/filedes.c
X03291   1502 fs/fproc.h
X32100   1013 fs/glo.h
X62665   7839 fs/inode.c
X05436   1943 fs/inode.h
X37259   5662 fs/link.c
X15515  15303 fs/main.c
X43484   7670 fs/misc.c
X59037   6257 fs/mount.c
X08819   9226 fs/open.c
X59312   1557 fs/param.h
X44200  10716 fs/path.c
X46842   4266 fs/pc_makefile
X08656   8462 fs/pipe.c
X01700   5864 fs/protect.c
X11848   1440 fs/putc.c
X15755  12205 fs/read.c
X14710   5397 fs/stadir.c
X11343   8912 fs/super.c
X10348   2081 fs/super.h
X46563   4312 fs/table.c
X03667   2620 fs/time.c
X56368    710 fs/type.h
X42080   5396 fs/utility.c
X00551   7367 fs/write.c
X45442   1683 h/callnr.h
X55177   7424 h/com.h
X21531   4403 h/const.h
X48562   2191 h/error.h
X03794   1412 h/sgtty.h
X06265   1115 h/signal.h
X51139    861 h/stat.h
X16557   4001 h/type.h
X50110   3188 kernel/at_makefile
X64098  16075 kernel/at_wini.c
X11053   9335 kernel/clock.c
X01201  33549 kernel/console.c
X46559   2880 kernel/const.h
X09961   3543 kernel/dmp.c
X37030  26551 kernel/floppy.c
X39457    881 kernel/glo.h
X29135  26496 kernel/klib88.s
X01335  11156 kernel/main.c
X36060   5296 kernel/memory.c
X09331  13834 kernel/mpx88.s
X65108   3375 kernel/pc_makefile
X56408   9952 kernel/printer.c
X10507  13753 kernel/proc.c
X21644   2324 kernel/proc.h
X12176  18813 kernel/ps_wini.c
X59321  19053 kernel/rs232.c
X61988  19960 kernel/system.c
X38305   3634 kernel/table.c
X03407  28073 kernel/tty.c
X34455   7485 kernel/tty.h
X44806   4708 kernel/ttymaps.h
X27554    742 kernel/type.h
X14198  26433 kernel/xt_wini.c
X63856    478 lib/IBM_PC/head.s
X59150   7857 mm/alloc.c
X49710   1833 mm/at_makefile
X05784   7234 mm/break.c
X43289    744 mm/const.h
X37617  17077 mm/exec.c
X17024   9871 mm/forkexit.c
X34366   1572 mm/getset.c
X06761    799 mm/glo.h
X41965   7272 mm/main.c
X46388   1661 mm/mproc.h
X21684    677 mm/param.h
X39295   1890 mm/pc_makefile
X54292   1487 mm/putc.c
X55828  13811 mm/signal.c
X09215   3143 mm/table.c
X17333    238 mm/type.h
X20567   4181 mm/utility.c
X59520   2249 tools/at_makefile
X13594   8083 tools/bootblok.s
X02360  19714 tools/build.c
X53860   1298 tools/changemem
X51921  45901 tools/fsck.c
X34431   3158 tools/fsck1.s
X39871     44 tools/group
X21308   6082 tools/init.c
X43560    327 tools/message
X52749  25884 tools/mkfs.c
X52059     97 tools/passwd
X59520   2249 tools/pc_makefile
X00735    105 tools/profile
X09800    197 tools/rc
X12541      4 tools/ttys
X10241     22 tools/ttytype
END_OF_FILE
if test 2574 -ne `wc -c <'crc-before'`; then
    echo shar: \"'crc-before'\" unpacked with wrong size!
fi
# end of 'crc-before'
fi
if test -f 'crc-dist' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'crc-dist'\"
else
echo shar: Extracting \"'crc-dist'\" \(2232 characters\)
sed "s/^X//" >'crc-dist' <<'END_OF_FILE'
X39626   4428 INSTALL
X61974   9669 README
X19619   2915 crc-after
X62357   2574 crc-before
X20225    521 crc-misc
X27208    585 commandsdif/CHANGES
X27898   2780 commandsdif/readclock.c.cd
X52949   1602 fsdif/CHANGES
X58458    742 fsdif/at_makefile.cd
X55444    629 fsdif/cache.c.cdif
X33361    296 fsdif/device.c.cdif
X64779    651 fsdif/inode.c.cdif
X09177   7501 fsdif/main.c.cdif
X28991    200 fsdif/misc.c.cdif
X63682    733 fsdif/pipe.c.cdif
X23503    202 fsdif/super.c.cdif
X32449    596 fsdif/table.c.cdif
X52345    206 fsdif/utility.c.cdif
X07989   1334 hdif/CHANGES
X56867   1346 hdif/boot.h.cdif
X11669   1355 hdif/com.h.cdif
X11064   1785 hdif/const.h.cdif
X54703   7608 kerneldif/Bconsole.c.cdi
X10299    314 kerneldif/Brs232.c.cdif
X44727   2878 kerneldif/Btty.c.cdif
X61366  13586 kerneldif/CHANGES
X53869   4503 kerneldif/at_wini.c.cdif
X29962   8507 kerneldif/axmakefile.cdi
X19879  10602 kerneldif/clock.c.cdif
X33096   3676 kerneldif/console.c.cdif
X17774   7031 kerneldif/const.h.cdif
X18063   4759 kerneldif/dmp.c.cdif
X23580   2371 kerneldif/exception.c.cd
X43539   3990 kerneldif/floppy.c.cdif
X32425   2154 kerneldif/glo.h.cdif
X00732   2394 kerneldif/i8259.c.cdif
X36863   8420 kerneldif/klib286.x.cdif
X01389  39670 kerneldif/klib88.x.cdif
X00997  13597 kerneldif/main.c.cdif
X56052   3714 kerneldif/memory.c.cdif
X28868   2738 kerneldif/misc.c.cdif
X01013   7400 kerneldif/mpx286.x.cdif
X35915  16900 kerneldif/mpx88.x.cdif
X41122   6243 kerneldif/printer.c.cdif
X21517  26431 kerneldif/proc.c.cdif
X28250   4435 kerneldif/proc.h.cdif
X59265   9757 kerneldif/protect.c.cdif
X36213   5010 kerneldif/protect.h.cdif
X30637   6495 kerneldif/rs2.x.cdif
X03401   3649 kerneldif/rs232.c.cdif
X31596   5266 kerneldif/sconst.h.cdif
X09445   4801 kerneldif/sglo.h.cdif
X27539  20205 kerneldif/system.c.cdif
X30325   1373 kerneldif/table.c.cdif
X11117    808 kerneldif/tty.c.cdif
X42827   2827 kerneldif/type.h.cdif
X55080   4227 kerneldif/xt_wini.c.cdif
X19725    344 libdif/CHANGES
X18965   1162 libdif/head.s.cdif
X11734   1851 mmdif/CHANGES
X29780   3094 mmdif/alloc.c.cdif
X27845   5879 mmdif/main.c.cdif
X35100    448 mmdif/signal.c.cdif
X26848    524 toolsdif/CHANGES
X16877  16217 toolsdif/build.c.cdif
X33760   5747 toolsdif/fsck.c.cdif
X07957    462 toolsdif/fsck1.s.cdif
END_OF_FILE
if test 2232 -ne `wc -c <'crc-dist'`; then
    echo shar: \"'crc-dist'\" unpacked with wrong size!
fi
# end of 'crc-dist'
fi
if test -f 'crc-misc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'crc-misc'\"
else
echo shar: Extracting \"'crc-misc'\" \(521 characters\)
sed "s/^X//" >'crc-misc' <<'END_OF_FILE'
X1.4a floppy.c, before patching
X------------------------------
X02252  28600 kernel/floppy.c
X
X1.4a floppy.c, after patching
X-----------------------------
X26150  29218 kernel/floppy.c
X
XMy tty files, before patching
X-----------------------------
X57278  34367 kernel/console.c
X65263  19504 kernel/rs232.c
X16498  37486 kernel/tty.c
X40473   8522 kernel/tty.h
X
XMy tty files, after patching
X----------------------------
X41029  39407 kernel/console.c
X58421  19572 kernel/rs232.c
X28361  37783 kernel/tty.c
X40473   8522 kernel/tty.h
END_OF_FILE
if test 521 -ne `wc -c <'crc-misc'`; then
    echo shar: \"'crc-misc'\" unpacked with wrong size!
fi
# end of 'crc-misc'
fi
if test ! -d 'commandsdif' ; then
    echo shar: Creating directory \"'commandsdif'\"
    mkdir 'commandsdif'
fi
if test ! -d 'fsdif' ; then
    echo shar: Creating directory \"'fsdif'\"
    mkdir 'fsdif'
fi
if test ! -d 'hdif' ; then
    echo shar: Creating directory \"'hdif'\"
    mkdir 'hdif'
fi
if test ! -d 'kerneldif' ; then
    echo shar: Creating directory \"'kerneldif'\"
    mkdir 'kerneldif'
fi
if test ! -d 'libdif' ; then
    echo shar: Creating directory \"'libdif'\"
    mkdir 'libdif'
fi
if test ! -d 'mmdif' ; then
    echo shar: Creating directory \"'mmdif'\"
    mkdir 'mmdif'
fi
if test ! -d 'toolsdif' ; then
    echo shar: Creating directory \"'toolsdif'\"
    mkdir 'toolsdif'
fi
if test -f 'commandsdif/CHANGES' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'commandsdif/CHANGES'\"
else
echo shar: Extracting \"'commandsdif/CHANGES'\" \(585 characters\)
sed "s/^X//" >'commandsdif/CHANGES' <<'END_OF_FILE'
Xreadclock.c:
X	o Avoided the direct access to ports and memory.
X	  It is not allowed in protected mode.
X	  The routines here may belong in the library (instead of portio.s)
X	  but are slow and waste file descriptors.
X	  They do everything through /dev/port and /dev/mem.
X	  They are subtly different since they are not guaranteed to succeed,
X	  so an error code must be checked for.
X	  The 640K size in the inode of the version 1.3 /dev/mem is bogus.
X	  It needs to be 1M for the peek in readclock.c, and 16M to be
X	  reasonable on AT's.
X	  Device sizes in inodes don't work very well.
END_OF_FILE
if test 585 -ne `wc -c <'commandsdif/CHANGES'`; then
    echo shar: \"'commandsdif/CHANGES'\" unpacked with wrong size!
fi
# end of 'commandsdif/CHANGES'
fi
if test -f 'fsdif/CHANGES' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'fsdif/CHANGES'\"
else
echo shar: Extracting \"'fsdif/CHANGES'\" \(1602 characters\)
sed "s/^X//" >'fsdif/CHANGES' <<'END_OF_FILE'
XGeneral:
X	o The root device, RAM image device and RAM disk size can be changed
X	  at boot time (using the new tools/fsck.c).
X	  The magic numbers are passed in a structure from the bootstrap
X	  program through the kernel to FS.
X	  ../h/boot.h declares this structure and defines some constants.
X	  This should make most of the special ST code unnecessary.
Xcache.c:
X	o Included boot.h and changed message about out of space on device.
Xdevice.c:
X	o Adjusted TTY_SPEED returned by do_ioctl for V1.2 compatibility.
X	  Programs like elle compiled with old libraries sometimes trashed
X	  the speed.
Xinode.c:
X	o Included boot.h and changed message about out of inodes on device.
Xmain.c:
X	o Included boot.h.
X	o Deleted constants involving memory sizes.
X	  Only the kernel should know them.
X	o Added and called get_boot_parameters.
X	o Changed get_base to get_physbase, added get_physbase.
X	  FS shouldn't know about memory, let alone segments.
X	  Better if the kernel did the checking (for DMA boundaries.)
X	o Added logic for skipping load of RAM disk when ram disk is not root.
X	o Deleted code telling MM where to put RAM disk.
X	  MM now tells FS.
X	o Added code to boot fast by prefetching blocks at good interleave.
X	  FLOPPY is not smart enough to do this.
Xmisc.c:
X	o Included boot.h.
Xpipe.c:
X	o Fixed unpause bug.
X	  CANCEL used open mode and not current i/o mode.
X	o Fixed another unpause bug.
X	  CANCEL did not go through dev switch, so pseudo-devices
X	  like /dev/tty were mishandled.
Xsuper.c:
X	o Included boot.h.
Xtable.c:
X	o Changed comment involving boot device numbers.
Xutility.c:
X	o Included boot.h.
END_OF_FILE
if test 1602 -ne `wc -c <'fsdif/CHANGES'`; then
    echo shar: \"'fsdif/CHANGES'\" unpacked with wrong size!
fi
# end of 'fsdif/CHANGES'
fi
if test -f 'hdif/CHANGES' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'hdif/CHANGES'\"
else
echo shar: Extracting \"'hdif/CHANGES'\" \(1334 characters\)
sed "s/^X//" >'hdif/CHANGES' <<'END_OF_FILE'
Xboot.h:
X	o Added it.
Xcom.h:
X	o Added IDLE task to let kernel do better accounting.
X	  It is split off from the HARDWARE task.
X	  Accounting can now be done for the hardware interrupts and context
X	  switching since most interrupt handling is now done with (clock)
X	  interrupts enabled.
X	  Eventually, IDLE could be a user task and do something more
X	  interesting.
X	o Deleted obsolete DISKINT and CLOCK_INT.
X	  These are replaced by a single HARD_INT.
X	  TTY_CHAR_INT and TTY_O_DONE should be obsolete but are not since
X	  TTY and PRINTER still use them instead of the correct HARD_INT.
X	o Added PORT_DEV, minor number for dev/port.
X	  The old port_in and port_out are denied to users in protected	mode.
X	o Added functions SYS_GBOOT, SYS_UMAP and SYS_MEM to SYSTASK.
Xconst.h:
X	o Increased NR_TASKS by 1 for IDLE.
X	o Doubled NR_PROCS for room.
X	  Optional.
X	o Changed CLICK_SIZE to 256 to allow access to 16MB on 386's and
X	  286's.
X	  This should probably be the standard, since it matches the ST
X	  value and shifting by 8 is (or should be) easier than by 4.
X	  The advantage of matching the hardware click size of 16 is
X	  superficial.
X	o Added macros to convert between clicks and kbytes.
X	  These are mainly used when printing values for the user.
X	o Deleted BOOT_DEV and ROOT_DEV.
X	  These are now variables, defined in boot.h.
END_OF_FILE
if test 1334 -ne `wc -c <'hdif/CHANGES'`; then
    echo shar: \"'hdif/CHANGES'\" unpacked with wrong size!
fi
# end of 'hdif/CHANGES'
fi
if test -f 'libdif/CHANGES' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libdif/CHANGES'\"
else
echo shar: Extracting \"'libdif/CHANGES'\" \(344 characters\)
sed "s/^X//" >'libdif/CHANGES' <<'END_OF_FILE'
Xhead.s:
X	o Increased the stack size and documented all the register slots
X	  needed (stack size is too small mainly for separate I&D - fixed
X	  and reported a while ago).
X	o Put CLICK_SHIFT at locations 2-3 in the data.
X	  WARNING! It is hard coded as 8 since head.s is not (yet) set
X	  up to include h/const.h like the kernel assembler files.
END_OF_FILE
if test 344 -ne `wc -c <'libdif/CHANGES'`; then
    echo shar: \"'libdif/CHANGES'\" unpacked with wrong size!
fi
# end of 'libdif/CHANGES'
fi
if test -f 'mmdif/CHANGES' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mmdif/CHANGES'\"
else
echo shar: Extracting \"'mmdif/CHANGES'\" \(1851 characters\)
sed "s/^X//" >'mmdif/CHANGES' <<'END_OF_FILE'
XGeneral:
X	o CLICK-SIZE now 256 for PC's, AT's and ST's.
X	  This is a complicated system-wide change for PC's and AT's.
X	  It is needed mainly so MM's tables can handle extended memory on
X	  AT's (now normal memory with the 286 kernel).
X	  The change doesn't affect the internals of MM much - a few things
X	  depended on CLICK_SIZE <= 1024, and everything still depends on
X	  it being a power of 2.
Xalloc.c:
X	o Changed mem_init() to get memory sizes from kernel.
X	  It used to be passed a single parameter, but now there are multiple
X	  sizes.
X	o Changed mem_init() to handle fragmented memory.
X	  The fragments are needed for AT extended memory and ROM shadow
X	  memory on AT's.
X	o Added mem_left() to count total memory left.
X	  This is currently only used to get the amount left after
X	  initialization for printing in the startup message.
Xmain.c:
X	o Changed do_brk2() to handle fragmented memory.
X	o Allocated extended memory RAM disk in do_brk2().
X	  The 1.3 MM was not able to handle extended memory, so FS only told
X	  MM about RAM disks in normal memory.
X	  Now, FS doesn't know about extended memory, and MM knows only
X	  enough to prefer it for allocating the RAM disk.
X	  This means that the extended memory RAM disk is lost with the old
X	  CLICK_SIZE of 16.
X	  Only unprotected mode 286's and 386's can have extended memory, and
X	  the protected mode kernel is supposed to make those modes obsolete.
X	o Replaced get_tot_mem() with get_mem().
X	  The i8088 version requires a new system call (SYS_MEM) to the
X	  system task.
X	  The version in getutil.s is obsolete (the wrong way to do it).
X	  The ST code is changed but not tested (it doesn't use SYS_MEM but
X	  should).
Xsignal.c:
X	o Added call to sys_sig() to tell kernel that signal handling is done.
X	  This helps fix the bug which allowed processes undergoing signal
X	  handling to run.
END_OF_FILE
if test 1851 -ne `wc -c <'mmdif/CHANGES'`; then
    echo shar: \"'mmdif/CHANGES'\" unpacked with wrong size!
fi
# end of 'mmdif/CHANGES'
fi
if test -f 'toolsdif/CHANGES' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'toolsdif/CHANGES'\"
else
echo shar: Extracting \"'toolsdif/CHANGES'\" \(524 characters\)
sed "s/^X//" >'toolsdif/CHANGES' <<'END_OF_FILE'
Xbuild.c:
X	o The 1.3 version needed massive changes since it fails miserably
X	  when CLICK_SIZE != 16.
X	o This version also puts symbol tables into the image.
X	o It also has #ifdef'ed code to handle old Xenix a.out headers.
X	  Minix headers are handled very untidily here and in fs/exec.c.
Xfsck.c:
X	o Initialized default boot parameters and allowed user to change them.
X	o Eliminated non-portable preprocessor quoting trick.
X	  Printk should be used for further simplifications.
Xfsck1.s:
X	o Passed boot parameters to kernel.
END_OF_FILE
if test 524 -ne `wc -c <'toolsdif/CHANGES'`; then
    echo shar: \"'toolsdif/CHANGES'\" unpacked with wrong size!
fi
# end of 'toolsdif/CHANGES'
fi
if test -f 'commandsdif/readclock.c.cd' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'commandsdif/readclock.c.cd'\"
else
echo shar: Extracting \"'commandsdif/readclock.c.cd'\" \(2780 characters\)
sed "s/^X//" >'commandsdif/readclock.c.cd' <<'END_OF_FILE'
X*** commands-1.3/readclock.c	Wed Oct  5 22:29:09 1988
X--- commands/readclock.c	Thu Jan 19 07:09:40 1989
X***************
X*** 132,136 ****
X  
X!   port_out( CLK_ELE, reg_addr );
X!   port_in(CLK_IO, &val);
X    return( val );
X  }
X--- 132,219 ----
X  
X!   if ( port_out( CLK_ELE, reg_addr ) < 0 || port_in(CLK_IO, &val) < 0 ) {
X!     printf( "-q\n" );
X!     exit( 1 );
X!   }
X    return( val );
X+ }
X+ 
X+ 
X+ /***********************************************************************/
X+ /*                                                                     */
X+ /*    Peek and poke using /dev/mem.                                    */
X+ /*    Callers now ought to check the return values.                    */
X+ /*    In Minix 1.3c, /dev/mem is incorrectly truncated to 640K,        */
X+ /*    so the CPU type byte is not accessable.                          */
X+ /*                                                                     */
X+ /***********************************************************************/
X+ 
X+ long lseek();
X+ 
X+ int peek( seg, offset )
X+ unsigned seg;
X+ unsigned offset;
X+ {
X+   static int memfd = -1;
X+   unsigned char val;
X+ 
X+   if ( memfd < 0 )
X+     memfd = open( "/dev/mem", 0 );
X+   if ( lseek( memfd, (unsigned long) seg * 0x10 + offset, 0 ) < 0 ||
X+        read( memfd, &val, 1 ) != 1 )
X+     return -1;
X+   return val;
X+ }
X+ 
X+ int poke( seg, offset, val )
X+ unsigned seg;
X+ unsigned offset;
X+ unsigned char val;
X+ {
X+   static int memfd = -1;
X+ 
X+   if ( memfd < 0 )
X+     memfd = open( "/dev/mem", 1 );
X+   if ( lseek( memfd, (unsigned long) seg * 0x10 + offset, 0 ) < 0 ||
X+        write( memfd, &val, 1 ) != 1 )
X+     return -1;
X+   return val ;
X+ }
X+ 
X+ 
X+ /***********************************************************************/
X+ /*                                                                     */
X+ /*    Port i/o functions using /dev/port.                              */
X+ /*    Callers now ought to check the return values.                    */
X+ /*                                                                     */
X+ /***********************************************************************/
X+ 
X+ long lseek();
X+ 
X+ int port_in( port, valp )
X+ unsigned port;
X+ unsigned *valp;
X+ {
X+   static int portfd = -1;
X+   unsigned char val;
X+ 
X+   if ( portfd < 0 )
X+     portfd = open( "/dev/port", 0 );
X+   if ( lseek( portfd, (long) port, 0 ) < 0 ||
X+        read( portfd, &val, 1 ) != 1 )
X+     return *valp = -1;
X+   return *valp = val;
X+ }
X+ 
X+ int port_out( port, val )
X+ unsigned port;
X+ unsigned char val;
X+ {
X+   static int portfd = -1;
X+ 
X+   if ( portfd < 0 )
X+     portfd = open( "/dev/port", 1 );
X+   if ( lseek( portfd, (long) port, 0 ) < 0 ||
X+        write( portfd, &val, 1 ) != 1 )
X+     return -1;
X+   return val ;
X  }
END_OF_FILE
if test 2780 -ne `wc -c <'commandsdif/readclock.c.cd'`; then
    echo shar: \"'commandsdif/readclock.c.cd'\" unpacked with wrong size!
fi
# end of 'commandsdif/readclock.c.cd'
fi
if test -f 'fsdif/at_makefile.cd' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'fsdif/at_makefile.cd'\"
else
echo shar: Extracting \"'fsdif/at_makefile.cd'\" \(742 characters\)
sed "s/^X//" >'fsdif/at_makefile.cd' <<'END_OF_FILE'
X*** fs-1.3/at_makefile	Wed Oct  5 21:55:48 1988
X--- fs/at_makefile	Wed Mar 22 03:41:32 1989
X***************
X*** 23,24 ****
X--- 23,25 ----
X  cache.s:	$h/error.h
X+ cache.s:	$h/boot.h
X  cache.s:	buf.h
X***************
X*** 49,50 ****
X--- 50,52 ----
X  inode.s:	$h/error.h
X+ inode.s:	$h/boot.h
X  inode.s:	buf.h
X***************
X*** 69,70 ****
X--- 71,73 ----
X  main.s:		$h/error.h
X+ main.s:		$h/boot.h
X  main.s:		buf.h
X***************
X*** 81,82 ****
X--- 84,86 ----
X  misc.s:		$h/error.h
X+ misc.s:		$h/boot.h
X  misc.s:		buf.h
X***************
X*** 164,165 ****
X--- 168,170 ----
X  super.s:	$h/error.h
X+ super.s:	$h/boot.h
X  super.s:	buf.h
X***************
X*** 194,195 ****
X--- 199,201 ----
X  utility.s:	$h/error.h
X+ utility.s:	$h/boot.h
X  utility.s:	buf.h
END_OF_FILE
if test 742 -ne `wc -c <'fsdif/at_makefile.cd'`; then
    echo shar: \"'fsdif/at_makefile.cd'\" unpacked with wrong size!
fi
# end of 'fsdif/at_makefile.cd'
fi
if test -f 'fsdif/device.c.cdif' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'fsdif/device.c.cdif'\"
else
echo shar: Extracting \"'fsdif/device.c.cdif'\" \(296 characters\)
sed "s/^X//" >'fsdif/device.c.cdif' <<'END_OF_FILE'
X*** fs-1.3/device.c	Wed Aug  3 21:05:11 1988
X--- fs/device.c	Sun Dec 18 04:34:36 1988
X***************
X*** 125,126 ****
X--- 125,127 ----
X    m1.TTY_FLAGS = dev_mess.TTY_FLAGS;	/* flags */
X+   m1.TTY_SPEED = dev_mess.TTY_FLAGS >> 16;	/* kludge for V1.2 TIOCGETP */
X    return(dev_mess.REP_STATUS);
END_OF_FILE
if test 296 -ne `wc -c <'fsdif/device.c.cdif'`; then
    echo shar: \"'fsdif/device.c.cdif'\" unpacked with wrong size!
fi
# end of 'fsdif/device.c.cdif'
fi
echo shar: End of archive 1 \(of 10\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 10 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Division of Information Technology (Melbourne), Phone +61 3 347 8644
C.S.I.R.O.                                      Fax  +61 3 347 8987
55 Barry St.                                    Telex AA 152914
Carlton, Vic, 3053, Australia                   E-mail: worsley@ditmela.oz.au