add directory Linux-0.11
This commit is contained in:
BIN
Linux-0.11/INSTALL/partition-programs/edpart.arc
Normal file
BIN
Linux-0.11/INSTALL/partition-programs/edpart.arc
Normal file
Binary file not shown.
31
Linux-0.11/INSTALL/partition-programs/edpart.doc
Normal file
31
Linux-0.11/INSTALL/partition-programs/edpart.doc
Normal file
@@ -0,0 +1,31 @@
|
||||
Edpart.exe is a disk partition editor capable of managing up to four
|
||||
partitions on PC/XT and AT hard disks. It specifically says "no
|
||||
copyright", so I figured someone else might like to use it rather than
|
||||
doing fdisk/diskfix pairs to create partitions.
|
||||
|
||||
There's no instruction file and no real on-line help, so here's a
|
||||
summary:
|
||||
|
||||
EDPART.EXE maintains up to four hard disk partitions on either of two
|
||||
hard drives. If it sees more than one hard drive, it will ask which
|
||||
one to edit.
|
||||
|
||||
The commands are:
|
||||
|
||||
CREATE Create hard disk partitions
|
||||
DELETE Delete hard disk partitions
|
||||
STATUS Bootable partitions may have the following status:
|
||||
ACTIVE This partition is the boot partition
|
||||
READ/WRITE R/W, not the boot partition
|
||||
Non-bootable partitions (``extensions'') may be any of:
|
||||
READ/WRITE
|
||||
READ-ONLY
|
||||
INACCESSIBLE
|
||||
TYPE There are four types; for Minix purposes, either "extension"
|
||||
type will do to my knowledge.
|
||||
DOS(4) Bootable For DOS 3.x
|
||||
DOS(4) Extension
|
||||
DOS(1) Bootable For DOS 2.x
|
||||
DOS(1) Extension
|
||||
The "Bootable" partitions are recognized by MS-DOS directly,
|
||||
so I don't advise using either of them for Minix.
|
||||
BIN
Linux-0.11/INSTALL/partition-programs/pdisk.arc
Normal file
BIN
Linux-0.11/INSTALL/partition-programs/pdisk.arc
Normal file
Binary file not shown.
79
Linux-0.11/INSTALL/partition-programs/pdisk.doc
Normal file
79
Linux-0.11/INSTALL/partition-programs/pdisk.doc
Normal file
@@ -0,0 +1,79 @@
|
||||
This stuff is mostly self explanatory, but:
|
||||
part takes one optional argument, which is the disk number with
|
||||
which to start (either 0 or 1. 0 is default).
|
||||
|
||||
286pd1.sys and 286pd2.sys are for driving partitions on your first
|
||||
and second disks, respectively. They will only work on 80186 or higher
|
||||
processors. For 8086/8088 computers, use pdisk1.sys, pdisk2.sys. They
|
||||
are just a *wee* bit slower....
|
||||
|
||||
fdins is for use when you're short of free space in "low menory" --
|
||||
i.e. free interrupt vectors. fdintins, on the other hand, doesn't
|
||||
use up any application space memory. In either case, these programs
|
||||
don't do *anything* directly -- you run them in order to create a
|
||||
.COM program that does the dirty work. You get TBL1.com, TBL2.com,
|
||||
TBL1INT.com, or TBL2INT.com, depending on whether you run fdins,
|
||||
fdintins and specifiy disk 1 or 2 (== 0 or 1).
|
||||
|
||||
pformat is for when you want to be particularly destructive with your
|
||||
new partition. You run "pformat <drive>:" where <drive> must be a
|
||||
valid pdisk. It's good for marking newly developed bad sectors,
|
||||
I guess. Be careful.
|
||||
|
||||
According to tests I ran with the PC Magazine benchmark program, disk access
|
||||
to a pdisk is actually faster than the normal DOS driver (i.e. C: or a DOS
|
||||
3.3/4.x extended DOS partition). (This may only be true using the 286 version,
|
||||
and may be affected by your usage. The main point is that you certainly do
|
||||
not take a performance *cut* by using my program.)
|
||||
|
||||
I am not including most of the COPYING file that comes with stuff from the
|
||||
Free Software Foundation (Richard Stallman, et al.) because I don't know
|
||||
if I'm allowed, but that's what I intend for this software. Specifically,
|
||||
you can *give* away as many copies of this software as you like. You can
|
||||
charge a *reasonable* handling fee. You can even incorporate parts of it
|
||||
into other projects, as long as you distribute at least the source you got
|
||||
from pdisk. I don't want money or contributions, I want plaudits. I hope
|
||||
this software is helpful to you.
|
||||
|
||||
When you find the inevitable bug (there are *none* in the driver, but I
|
||||
don't absolutely swear for the partitioning program), please try to
|
||||
fix it yourself and let me know the solution. Failing that, drop me a
|
||||
line describing the situation exactly, especially including DOS version and
|
||||
all hardware, including fixed disk and controller type. I don;t promise
|
||||
to do anything about it, but I might.
|
||||
|
||||
One thing I recommend from experience: my boot code will only work on some
|
||||
IBM compatibles. It is best to use the manafacturer's (or generic) MSDOS
|
||||
fdisk to set up the initial partition, then use "format c: /s" to set up
|
||||
your bootable DOS partition. If you can get this working right with pdisk,
|
||||
that would be nice.
|
||||
|
||||
have fun. Scott E. Garfinkle
|
||||
smsdpg!seg@uunet.uu.net
|
||||
|
||||
<The following is taken from Project Gnu's AWK distribution, the COPYING
|
||||
File. I hope I'm not violating their copyright, or anything.
|
||||
>
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
BECAUSE PDISK IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO
|
||||
WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT
|
||||
WHEN OTHERWISE STATED IN WRITING, SCOTT GARFINKLE
|
||||
AND/OR OTHER PARTIES PROVIDE PDISK "AS IS" WITHOUT
|
||||
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
|
||||
PERFORMANCE OF PDISK IS WITH YOU. SHOULD PDISK PROVE DEFECTIVE, YOU
|
||||
ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL SCOTT GARFINKLE
|
||||
AND/OR ANY OTHER PARTY
|
||||
WHO MAY MODIFY AND REDISTRIBUTE PDISK AS PERMITTED ABOVE, BE LIABLE TO
|
||||
YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER
|
||||
SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
|
||||
INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
|
||||
BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A
|
||||
FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) PDISK, EVEN
|
||||
IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR
|
||||
ANY CLAIM BY ANY OTHER PARTY.
|
||||
182
Linux-0.11/INSTALL/rawrite.c
Normal file
182
Linux-0.11/INSTALL/rawrite.c
Normal file
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
rawrite.c Write a binary image to a 360K diskette.
|
||||
By Mark Becker
|
||||
|
||||
Usage:
|
||||
MS-DOS prompt> RAWRITE
|
||||
|
||||
And follow the prompts.
|
||||
|
||||
History
|
||||
-------
|
||||
|
||||
1.0 - Initial release
|
||||
1.1 - Beta test (fixing bugs) 4/5/91
|
||||
Some BIOS's don't like full-track writes.
|
||||
1.101 - Last beta release. 4/8/91
|
||||
Fixed BIOS full-track write by only
|
||||
writing 3 sectors at a time.
|
||||
1.2 - Final code and documentation clean-ups. 4/9/91
|
||||
*/
|
||||
#include <alloc.h>
|
||||
#include <bios.h>
|
||||
#include <ctype.h>
|
||||
#include <dir.h>
|
||||
#include <dos.h>
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define FALSE 0
|
||||
#define TRUE (!FALSE)
|
||||
|
||||
#define SECTORSIZE 512
|
||||
|
||||
#define RESET 0
|
||||
#define LAST 1
|
||||
#define READ 2
|
||||
#define WRITE 3
|
||||
#define VERIFY 4
|
||||
#define FORMAT 5
|
||||
|
||||
int done;
|
||||
|
||||
/*
|
||||
Catch ^C and ^Break.
|
||||
*/
|
||||
int handler(void)
|
||||
{
|
||||
done = TRUE;
|
||||
return(0);
|
||||
}
|
||||
void msg(char (*s))
|
||||
{
|
||||
fprintf(stderr, "%s\n", s);
|
||||
_exit(1);
|
||||
}
|
||||
/*
|
||||
Identify the error code with a real error message.
|
||||
*/
|
||||
void Error(int (status))
|
||||
{
|
||||
switch (status) {
|
||||
case 0x00: msg("Operation Successful"); break;
|
||||
case 0x01: msg("Bad command"); break;
|
||||
case 0x02: msg("Address mark not found"); break;
|
||||
case 0x03: msg("Attempt to write on write-protected disk"); break;
|
||||
case 0x04: msg("Sector not found"); break;
|
||||
case 0x05: msg("Reset failed (hard disk)"); break;
|
||||
case 0x06: msg("Disk changed since last operation"); break;
|
||||
case 0x07: msg("Drive parameter activity failed"); break;
|
||||
case 0x08: msg("DMA overrun"); break;
|
||||
case 0x09: msg("Attempt to DMA across 64K boundary"); break;
|
||||
case 0x0A: msg("Bad sector detected"); break;
|
||||
case 0x0B: msg("Bad track detected"); break;
|
||||
case 0x0C: msg("Unsupported track"); break;
|
||||
case 0x10: msg("Bad CRC/ECC on disk read"); break;
|
||||
case 0x11: msg("CRC/ECC corrected data error"); break;
|
||||
case 0x20: msg("Controller has failed"); break;
|
||||
case 0x40: msg("Seek operation failed"); break;
|
||||
case 0x80: msg("Attachment failed to respond"); break;
|
||||
case 0xAA: msg("Drive not ready (hard disk only"); break;
|
||||
case 0xBB: msg("Undefined error occurred (hard disk only)"); break;
|
||||
case 0xCC: msg("Write fault occurred"); break;
|
||||
case 0xE0: msg("Status error"); break;
|
||||
case 0xFF: msg("Sense operation failed"); break;
|
||||
}
|
||||
_exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
Identify what kind of diskette is installed in the specified drive.
|
||||
Return the number of sectors per track assumed as follows:
|
||||
9 - 360 K and 720 K 5.25".
|
||||
15 - 1.2 M HD 5.25".
|
||||
18 - 1.44 M 3.5".
|
||||
*/
|
||||
int nsects(int (drive))
|
||||
{
|
||||
static int nsect[] = {18, 15, 9};
|
||||
|
||||
char *buffer;
|
||||
int i, status;
|
||||
/*
|
||||
Read sector 1, head 0, track 0 to get the BIOS running.
|
||||
*/
|
||||
buffer = (char *)malloc(SECTORSIZE);
|
||||
biosdisk(RESET, drive, 0, 0, 0, 0, buffer);
|
||||
status = biosdisk(READ, drive, 0, 10, 1, 1, buffer);
|
||||
if (status == 0x06) /* Door signal change? */
|
||||
status = biosdisk(READ, drive, 0, 0, 1, 1, buffer);
|
||||
|
||||
for (i=0; i < sizeof(nsect)/sizeof(int); ++i) {
|
||||
biosdisk(RESET, drive, 0, 0, 0, 0, buffer);
|
||||
status = biosdisk(READ, drive, 0, 0, nsect[i], 1, buffer);
|
||||
if (status == 0x06)
|
||||
status = biosdisk(READ, drive, 0, 0, nsect[i], 1, buffer);
|
||||
if (status == 0x00) break;
|
||||
}
|
||||
if (i == sizeof(nsect)/sizeof(int)) {
|
||||
msg("Can't figure out how many sectors/track for this diskette.");
|
||||
}
|
||||
free(buffer);
|
||||
return(nsect[i]);
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
char fname[MAXPATH];
|
||||
char *buffer, *pbuf;
|
||||
int count, fdin, drive, head, track, status, spt, buflength, ns;
|
||||
|
||||
puts("RaWrite 1.2 - Write disk file to raw floppy diskette\n");
|
||||
ctrlbrk(handler);
|
||||
printf("Enter source file name: ");
|
||||
scanf("%s", fname);
|
||||
_fmode = O_BINARY;
|
||||
if ((fdin = open(fname, O_RDONLY)) <= 0) {
|
||||
perror(fname);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
printf("Enter destination drive: ");
|
||||
scanf("%s", fname);
|
||||
drive = fname[0];
|
||||
drive = (islower(drive) ? toupper(drive) : drive) - 'A';
|
||||
printf("Please insert a formatted diskette into ");
|
||||
printf("drive %c: and press -ENTER- :", drive + 'A');
|
||||
while (bioskey(1) == 0) ; /* Wait... */
|
||||
if ((bioskey(0) & 0x7F) == 3) exit(1); /* Check for ^C */
|
||||
putchar('\n');
|
||||
done = FALSE;
|
||||
/*
|
||||
* Determine number of sectors per track and allocate buffers.
|
||||
*/
|
||||
spt = nsects(drive);
|
||||
buflength = spt * SECTORSIZE;
|
||||
buffer = (char *)malloc(buflength);
|
||||
printf("Number of sectors per track for this disk is %d\n", spt);
|
||||
printf("Writing image to drive %c:. Press ^C to abort.\n", drive+'A');
|
||||
/*
|
||||
* Start writing data to diskette until there is no more data to write.
|
||||
*/
|
||||
head = track = 0;
|
||||
while ((count = read(fdin, buffer, buflength)) > 0 && !done) {
|
||||
pbuf = buffer;
|
||||
for (ns = 1; count > 0 && !done; ns+=3) {
|
||||
printf("Track: %02d Head: %2d Sector: %2d\r", track, head, ns);
|
||||
status = biosdisk(WRITE, drive, head, track, ns, 3, pbuf);
|
||||
|
||||
if (status != 0) Error(status);
|
||||
|
||||
count -= (3*SECTORSIZE);
|
||||
pbuf += (3*SECTORSIZE);
|
||||
}
|
||||
if ((head = (head + 1) & 1) == 0) ++track;
|
||||
}
|
||||
if (eof(fdin)) {
|
||||
printf("\nDone.\n");
|
||||
biosdisk(2, drive, 0, 0, 1, 1, buffer); /* Retract head */
|
||||
}
|
||||
} /* end main */
|
||||
86
Linux-0.11/INSTALL/rawrite.doc
Normal file
86
Linux-0.11/INSTALL/rawrite.doc
Normal file
@@ -0,0 +1,86 @@
|
||||
RaWrite 1.2
|
||||
-----------
|
||||
|
||||
Purpose
|
||||
-------
|
||||
|
||||
Write a disk image file to a 360K floppy disk.
|
||||
|
||||
|
||||
Equipment/Software Requirements
|
||||
-------------------------------
|
||||
|
||||
PC/XT/AT with a floppy disk drive capable of reading and writing a 360K
|
||||
diskette.
|
||||
|
||||
This program uses generic low-level BIOS diskette read/write functions. It
|
||||
should be portable to nearly every PC in existance. PS/2's should be able
|
||||
to run RawWrite but this has not been tested.
|
||||
|
||||
|
||||
CAVEAT
|
||||
------
|
||||
|
||||
This program will write ANY disk file to a floppy, overwriting any previous
|
||||
information that may have been present. If you wish to re-use a diskette
|
||||
under MS-DOS thats been written to by RawWrite then the disk will need to be
|
||||
reformatted; all MS-DOS specific information will have been erased.
|
||||
|
||||
|
||||
How to Compile
|
||||
--------------
|
||||
|
||||
TCC rawrite.c
|
||||
|
||||
The source code is specific to Borland International's Turbo C 2.01 and has
|
||||
been tested in all memory models.
|
||||
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
C> RAWRITE
|
||||
|
||||
And follow the prompts. All arguments are case-insensitive.
|
||||
|
||||
A sample run is shown below. The disk file being written, in this example,
|
||||
is named DEMODISK and the destination - where the image is being written -
|
||||
is the B: drive.
|
||||
|
||||
This program may be aborted at any time by typing ^C.
|
||||
|
||||
|
||||
Sample Run
|
||||
----------
|
||||
|
||||
C> RAWRITE
|
||||
RaWrite 1.2 - Write disk file to raw floppy diskette
|
||||
|
||||
Enter source file name: DEMODISK
|
||||
Enter destination drive: B
|
||||
Please insert a formatted 360K diskette into drive B: and press -ENTER- :
|
||||
Writing image to drive B:
|
||||
|
||||
|
||||
Errors
|
||||
------
|
||||
|
||||
RaWrite attempts to determine if the diskette is a 360K, 720K, 1.2M, or
|
||||
1.44M diskette by reading specific sectors. If the inserted diskette is not
|
||||
one of the mentioned types, then RaWrite will abort with a short error
|
||||
message.
|
||||
|
||||
Errors such as write protect, door open, bad disk, bad sector, etc. cause a
|
||||
program abort with a short error message.
|
||||
|
||||
|
||||
History
|
||||
-------
|
||||
|
||||
1.0 - Initial release
|
||||
1.1 - Beta test (fixing bugs) 4/5/91
|
||||
Some BIOS's don't like full-track writes.
|
||||
1.101 - Last beta release. 4/8/91
|
||||
Fixed BIOS full-track write by only only
|
||||
writing 3 sectors at a time.
|
||||
1.2 - Final code and documentation clean-ups. 4/9/91
|
||||
BIN
Linux-0.11/INSTALL/rawrite.exe
Normal file
BIN
Linux-0.11/INSTALL/rawrite.exe
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/compilers/gccbin.tar.Z
Normal file
BIN
Linux-0.11/binaries/compilers/gccbin.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/sbin/update.Z
Normal file
BIN
Linux-0.11/binaries/sbin/update.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/usr.bin/archivers/zoo-210.bin.tar.Z
Normal file
BIN
Linux-0.11/binaries/usr.bin/archivers/zoo-210.bin.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/usr.bin/diffbin.tar.Z
Normal file
BIN
Linux-0.11/binaries/usr.bin/diffbin.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/usr.bin/install.tar.Z
Normal file
BIN
Linux-0.11/binaries/usr.bin/install.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/usr.bin/kermit.Z
Normal file
BIN
Linux-0.11/binaries/usr.bin/kermit.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/usr.bin/locate.Z
Normal file
BIN
Linux-0.11/binaries/usr.bin/locate.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/usr.bin/patch.Z
Normal file
BIN
Linux-0.11/binaries/usr.bin/patch.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/usr.bin/pmake/pm_supp.tar.Z
Normal file
BIN
Linux-0.11/binaries/usr.bin/pmake/pm_supp.tar.Z
Normal file
Binary file not shown.
11
Linux-0.11/binaries/usr.bin/pmake/pmake.README
Normal file
11
Linux-0.11/binaries/usr.bin/pmake/pmake.README
Normal file
@@ -0,0 +1,11 @@
|
||||
pmake.Z is the make from the bsd net release #2.
|
||||
pm_supp.tar.Z is a tar file of some support "include" files used
|
||||
by that version of make.
|
||||
|
||||
It may not completely correctly handle error conditions from children,
|
||||
since I had to guess a bit on how to recode its abuse of the old
|
||||
union wait.
|
||||
|
||||
John Kohl
|
||||
jtkohl@cs.berkeley.edu
|
||||
[sources on request; that's another kermit, though.]
|
||||
BIN
Linux-0.11/binaries/usr.bin/pmake/pmake.Z
Normal file
BIN
Linux-0.11/binaries/usr.bin/pmake/pmake.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/usr.bin/sed.Z
Normal file
BIN
Linux-0.11/binaries/usr.bin/sed.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/usr.bin/uemacs.Z
Normal file
BIN
Linux-0.11/binaries/usr.bin/uemacs.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/usr.bin/uniq.Z
Normal file
BIN
Linux-0.11/binaries/usr.bin/uniq.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/binaries/usr.bin/zoo-210.bin.tar.Z
Normal file
BIN
Linux-0.11/binaries/usr.bin/zoo-210.bin.tar.Z
Normal file
Binary file not shown.
256
Linux-0.11/docs/FAQ
Normal file
256
Linux-0.11/docs/FAQ
Normal file
@@ -0,0 +1,256 @@
|
||||
|
||||
daemon@ATHENA.MIT.EDU (Robert Blum) Linux_Activists 12/19/91 01:39 (253 lines)
|
||||
Subject: A FAQ is coming...
|
||||
Date: Thu, 19 Dec 91 07:29:21 +0100
|
||||
From: blum@cip-s01.informatik.rwth-aachen.de (Robert Blum)
|
||||
To: linux-activists@joker.cs.hut.fi
|
||||
|
||||
Hi Linuxers!
|
||||
|
||||
Following is a FAQ-compilation (most credits to Linus) for Linux.
|
||||
Mail me, if you like it, and mail me, if you dislike it or have
|
||||
any ideas on changing this.
|
||||
|
||||
Thanks in advance,
|
||||
Robert Blum
|
||||
|
||||
|
||||
QUESTION: What is linux?
|
||||
|
||||
ANSWER: Linux is a small unix for 386-AT computers, that has the added
|
||||
advantage of being free. It is still in beta-testing, but is slowly
|
||||
getting useful even for somewhat real developement.
|
||||
|
||||
|
||||
QUESTION: Does it run on my computer?
|
||||
|
||||
ANSWER: Linux has been written on a clone-386, with IDE drives and a VGA
|
||||
screen. It should work on most similar setups. The harddisk should be
|
||||
AT-standard (ie not SCSI, ESDI), and the system must be ISA. Otherwise
|
||||
the requirements seem relatively small: a 386 (SX, DX or any 486). The
|
||||
current version (0.10) needs a colour screen adapter, but this is not
|
||||
the case with the next version.
|
||||
|
||||
It needs at least 2M to run, and 4M is definitely a plus. It can happily
|
||||
use up to 16M (and more if you change some things).
|
||||
|
||||
|
||||
QUESTION: Will linux run on a PC or 286-AT? If not, why?
|
||||
|
||||
ANSWER: Linux uses the 386 chip protected mode functions extensively,
|
||||
and is a true 32-bit operating system. Thus x86 chips, x<3, will simply
|
||||
not run it.
|
||||
|
||||
|
||||
QUESTION: Does linux do paging? Can I have virtual memory on my small
|
||||
machine?
|
||||
|
||||
ANSWER: Linux does use the 386 paging unit, but currently only for
|
||||
memory management. No use of disks as expansion RAM. This is one of the
|
||||
things that will be implemented sometime in the (far?) future. Linux
|
||||
also uses the paging unit to share pages between several processes after
|
||||
a fork: thus it needs less memory. However, almost all the user programs
|
||||
available for linux are GNU software, which want gobs and gobs of
|
||||
memory. This is the reason at least 4M is recommended: GNU cc (gcc)
|
||||
simply won't run in less.
|
||||
|
||||
|
||||
QUESTION: Can I have tasks spanning the full 4GB of addressable 386
|
||||
memory? No more 64kB limits like in coherent or standard minix?
|
||||
|
||||
ANSWER: Linux does limit the task-size, but at a much more reasonable
|
||||
64MB (MEGA-byte, not kilos), so bigger programs are no problem.
|
||||
|
||||
|
||||
QUESTION: Does the bigger program sizes mean I can run X?
|
||||
|
||||
ANSWER: X is not ported to linux, and though I hope it will be some day,
|
||||
I cannot guarantee it. It's big, and wants a lot from the system.
|
||||
|
||||
|
||||
QUESTION: Where can I get linux? Is there a mailserver?
|
||||
|
||||
ANSWER: Linux can be gotten by anonymous ftp from
|
||||
nic.funet.fi (128.214.6.100):
|
||||
directory /pub/OS/Linux
|
||||
Tupac-Amaru.Informatik.RWTH-Aachen.DE (137.226.112.31):
|
||||
directory /pub/msdos/replace
|
||||
tsx-11.mit.edu (18.172.1.2):
|
||||
directory /pub/linux
|
||||
ftp.eecs.umich.edu (141.212.99.7):
|
||||
directory linux
|
||||
You might want to check out which of these is the most up-to-date.
|
||||
|
||||
If you don't have ftp-capability, you are in trouble. You might try
|
||||
mailing "mailserver@nic.funet.fi" with "help" in the body of the mail.
|
||||
|
||||
|
||||
QUESTION: Is there a newsgroup or mailing-list about linux? Where can I
|
||||
get my questions answered? How about bug-reports?
|
||||
|
||||
ANSWER: There is a mailing list set up at the address
|
||||
'Linux-activists@niksula.hut.fi'. To join, mail a request to
|
||||
'Linux-activists-request@niksula.hut.fi'. DO NOT mail "I want to
|
||||
[un]subscribe" to the mailing-list, use the request-address.
|
||||
|
||||
Questions and bug-reports can be sent either to the mailing-list or to
|
||||
"torvalds@kruuna.helsinki.fi", depending on which you find more
|
||||
appropriate.
|
||||
|
||||
|
||||
QUESTION: I got the minix-demo, but it won't boot. Linux boots from
|
||||
floppy. What's wrong?
|
||||
|
||||
ANSWER: You probably wrote the minix demo to a 1.44M disk, which (for
|
||||
some unfathomable reason) doesn't work. The minix demo wants a 720kB or
|
||||
1.2M disk.
|
||||
|
||||
|
||||
QUESTION: The minix-demo boots all right, but doesn't seem to recognize
|
||||
my second harddisk. What's up?
|
||||
|
||||
ANSWER: The minix-demo does support a second harddisk, but there are no
|
||||
special files made for it, and the minix demo doesn't include the
|
||||
"mknod" command. Mount the linux root-floppy, and use the devices on
|
||||
that.
|
||||
|
||||
|
||||
QUESTION: How can I be sure I won't be writing over anything important?
|
||||
I have to use DOS in on my machine, and I don't want to lose any files.
|
||||
|
||||
ANSWER: Back up everything. Just in case. Then, write some easily
|
||||
recognizable pattern to the partition you have reserved for linux, using
|
||||
some DOS tool. You can then use "cat /dev/hdX" under minix to examine
|
||||
which of the partitions you used.
|
||||
|
||||
|
||||
QUESTION: Minix mkfs doesn't accept the size I give the device, although
|
||||
I double-checked with fdisk, and it's correct.
|
||||
|
||||
ANSWER: Be sure you give the size in BLOCKS, ie 1024 bytes, not sectors.
|
||||
Also, make doubly certain that you have the correct partition.
|
||||
|
||||
|
||||
QUESTION: I used the minix mkfs to make a filesystem on /dev/hd3 after
|
||||
having checked that this was indeed the partition I had reserved. Minix
|
||||
mounts the new partition ok, but linux doesn't. What gives?
|
||||
|
||||
ANSWER: In some cases partitions are numbered differently under minix
|
||||
and linux. This seems to correlate to the FDISK version you have used.
|
||||
/dev/hd3 under minix may be /dev/hd2 under linux etc.
|
||||
|
||||
There are a few rules about this: /dev/hd0 and /dev/hd5 are always the
|
||||
same under linux and minix. DO NOT USE THEM, they are the whole raw
|
||||
disk, not partitions. Also if a partition is on drive 1 under minix (ie
|
||||
/dev/hd1-4), it is drive 1 under linux as well.
|
||||
|
||||
|
||||
QUESTION: I mounted the linux filesystem, and copied the files from the
|
||||
root-disk to the harddisk. Now I cannot find them any more, and
|
||||
somethimes linux dies with a "panic: trying to free unused inode".
|
||||
|
||||
ANSWER: You have probably forgot to sync before rebooting. Linux, like
|
||||
all unices, use a "buffer cache" to speed up reads and writes to disk.
|
||||
On a machine that has enough memory, this buffer-cache is 1.5MB, and if
|
||||
you forget to sync before exiting, it may not be fully written out to
|
||||
disk. Re-mkfs and re-install (or try to use the preliminary fsck, but
|
||||
remeber that although fsck tries to correct the faults it finds, it may
|
||||
fail.)
|
||||
|
||||
|
||||
QUESTION: the mtools package on the root-disk won't work. I get an
|
||||
ENOENT error message for all devices.
|
||||
|
||||
ANSWER: mtools needs to be told which device to look for. Use 'ln' or
|
||||
'mknod' to create a sepcial file called "/dev/dosX", where X is A, B or
|
||||
C. This file should point to the device you want to read.
|
||||
|
||||
|
||||
QUESTION: Turbo (Microsoft) Assembler won't compile the Linux boot code.
|
||||
In fact, some of the opcodes in these files look completely unfamiliar. Why?
|
||||
|
||||
ANSWER: The Linux boot codes are written in Bruce Evans' minix assembler,
|
||||
which has the same opcodes as the original minix assembler. There are a few
|
||||
differences between these and normal DOS assemblers:
|
||||
|
||||
- No segments - everything is in the same segment (at least in the
|
||||
bootsectors and setup, as they don't use the .data segments)
|
||||
|
||||
- mov[b|w|l] are shorter versions of mov ax,[byte|word|long] ptr [XXX].
|
||||
This is how unix assemblers normally give the size (byte, word or long).
|
||||
Gas has similar constructs.
|
||||
|
||||
- There is no "jmp short", the opcodes are "j" for a short jump and
|
||||
"jmp" for a long one.
|
||||
|
||||
- "jmpi" is a jump with a segment:offset pair. I don't know how this is
|
||||
written in DOS assembly.
|
||||
|
||||
|
||||
QUESTION: While running du I get "Kernel panic: free_inode: bit already
|
||||
cleared". Also, du produces a ENOENT error for all the files in certain
|
||||
of my directories. What's going on?
|
||||
|
||||
ANSWER: These are both consistent with a bad file-system. That's relatively
|
||||
easy to produce by not syncing before rebooting, as linux usually has 1.5MB
|
||||
of buffer space held in memory (unless you have <=4M RAM, in which case
|
||||
the buffers are only about 0.5MB). Also linux doesn't do anything
|
||||
special about the bit-map blocks, and as they are used often, those are
|
||||
the thing most likely to be in memory. If you reboot, and they haven't
|
||||
been written to disk ...
|
||||
|
||||
I'm afraid that as long as there is no fsck for linux there is no way to
|
||||
correct the matter (unless you have minix and can run minix fsck), and
|
||||
the only thing to do is to reinstall the filesystem from scratch (ie do
|
||||
a mkfs from the minix demodisk and reboot from the original
|
||||
linux-floppy).
|
||||
|
||||
A sync is done only every 30 seconds normally (standard unix practice),
|
||||
so do one by hand (some people think you should do 3 syncs after each
|
||||
other, but that's superstition), or by logging out from the
|
||||
startup-shell, which automatically syncs the system. Unmounting a
|
||||
filesystem also syncs it (but of course you can never unmount root).
|
||||
|
||||
Another (sad) possibility is that you have bad blocks on your disk. Not
|
||||
very probable, as they would have to be in the inode-tables, just a
|
||||
couple of blocks in size. Again there aren't programs available to read
|
||||
a disk for bad sectors and put them in some kind of "bad-sector-file".
|
||||
On IDE drives this is no problem (bad sectors are automatically mapped
|
||||
away).
|
||||
|
||||
|
||||
QUESTION: What is the "em" binary?
|
||||
|
||||
ANSWER: Em is micro-EMacs (probably version 3.10).
|
||||
|
||||
QUESTION: I seem to be unable to compile anythong with gcc. Why?
|
||||
|
||||
ANSWER: If you have only 2 MB RAM, gcc will die silently without compiling
|
||||
anything. You must have at least 4 MB to do compilations
|
||||
|
||||
|
||||
QUESTION: I'm using a program that uses signal handlers which are installed
|
||||
using sigaction() with the SA_NOMASK, and they get a general protection
|
||||
error right after the signal handler tries to return. What's going
|
||||
wrong?
|
||||
|
||||
ANSWER: You are using a libc.a that has an out-of-date signal.o and
|
||||
sig_restore.o file, and they don't know how to deal with SA_NOMASK.
|
||||
(The one in gccbin.tar.Z is out-of-date.) You can obtain the newer
|
||||
signal.c from the unistd.tar.Z file, but don't use the associated
|
||||
sig_restore.c from there; the FTP sites should have a separate
|
||||
sig_restore.c which is up to date. While you're at it, you should also
|
||||
get an updated crt0.c file as well, and install your new crt0.o and
|
||||
libc.a in /usr/lib.
|
||||
|
||||
(This answer will likely change in the near future, since there are
|
||||
plans to change the format of the signal trampoline code yet again....
|
||||
but for now, this should be an accurate description of how things stand
|
||||
now.)
|
||||
|
||||
|
||||
QUESTION: gcc complains about not finding crt0.o and the system include files
|
||||
What am i doing wrong ?
|
||||
|
||||
ANSWER: The include files normal place is in /usr/include. libc.a and *.a
|
||||
should be in /usr/lib
|
||||
248
Linux-0.11/docs/FAQ-0.11
Normal file
248
Linux-0.11/docs/FAQ-0.11
Normal file
@@ -0,0 +1,248 @@
|
||||
|
||||
QUESTION: What is linux?
|
||||
|
||||
ANSWER: Linux is a small unix for 386-AT computers, that has the added
|
||||
advantage of being free. It is still in beta-testing, but is slowly
|
||||
getting useful even for somewhat real developement.
|
||||
|
||||
|
||||
QUESTION: Does it run on my computer?
|
||||
|
||||
ANSWER: Linux has been written on a clone-386, with IDE drives and a VGA
|
||||
screen. It should work on most similar setups. The harddisk should be
|
||||
AT-standard (ie not SCSI, ESDI), and the system must be ISA. Otherwise
|
||||
the requirements seem relatively small: a 386 (SX, DX or any 486).
|
||||
|
||||
It needs at least 2M to run, and 4M is definitely a plus. It can happily
|
||||
use up to 16M (and more if you change some things).
|
||||
|
||||
|
||||
QUESTION: Will linux run on a PC or 286-AT? If not, why?
|
||||
|
||||
ANSWER: Linux uses the 386 chip protected mode functions extensively,
|
||||
and is a true 32-bit operating system. Thus x86 chips, x<3, will simply
|
||||
not run it.
|
||||
|
||||
|
||||
QUESTION: Does linux do paging? Can I have virtual memory on my small
|
||||
machine?
|
||||
|
||||
ANSWER: Linux does use the 386 paging unit, but currently only for
|
||||
memory management. It currently is not doing any paging or swapping.
|
||||
This is one of the things that will be implemented sometime in the
|
||||
near future. Linux also uses the paging unit to share pages between
|
||||
several processes after a fork: thus it needs less memory. However,
|
||||
of the interesting programs which have been ported to linux so want
|
||||
gobs and gobs of memory; in particular, the GNU C compiler (gcc) needs
|
||||
at least 4 meg of memory.
|
||||
|
||||
Even after paging is implemented, 4 Megs would still be recommended,
|
||||
since large programs would run very slowly.
|
||||
|
||||
|
||||
QUESTION: Can I have tasks spanning the full 4GB of addressable 386
|
||||
memory? No more 64kB limits like in coherent or standard minix?
|
||||
|
||||
ANSWER: Linux does limit the task-size, but at a much more reasonable
|
||||
64MB (MEGA-byte, not kilos), so bigger programs are no problem.
|
||||
|
||||
|
||||
QUESTION: Does the bigger program sizes mean I can run X?
|
||||
|
||||
ANSWER: X is not ported to linux, and though I hope it will be some day,
|
||||
I cannot guarantee it. It's big, and wants a lot from the system.
|
||||
|
||||
|
||||
QUESTION: Where can I get linux? Is there a mailserver?
|
||||
|
||||
ANSWER: Linux can be gotten by anonymous ftp from
|
||||
nic.funet.fi (128.214.6.100):
|
||||
directory /pub/OS/Linux
|
||||
Tupac-Amaru.Informatik.RWTH-Aachen.DE (137.226.112.31):
|
||||
directory /pub/msdos/replace
|
||||
tsx-11.mit.edu (18.172.1.2):
|
||||
directory /pub/linux
|
||||
ftp.eecs.umich.edu (141.212.99.7):
|
||||
directory linux
|
||||
You might want to check out which of these is the most up-to-date.
|
||||
|
||||
If you don't have ftp-capability, you are in trouble. You might try
|
||||
mailing "mailserver@nic.funet.fi" with "help" in the body of the mail.
|
||||
|
||||
|
||||
QUESTION: Is there a newsgroup or mailing-list about linux? Where can I
|
||||
get my questions answered? How about bug-reports?
|
||||
|
||||
ANSWER: There is a mailing list set up at the address
|
||||
'Linux-activists@niksula.hut.fi'. To join, mail a request to
|
||||
'Linux-activists-request@niksula.hut.fi'. DO NOT mail "I want to
|
||||
[un]subscribe" to the mailing-list, use the request-address.
|
||||
|
||||
Questions and bug-reports can be sent either to the mailing-list or to
|
||||
"torvalds@kruuna.helsinki.fi", depending on which you find more
|
||||
appropriate.
|
||||
|
||||
|
||||
QUESTION: I got the minix-demo, but it won't boot. Linux boots from
|
||||
floppy. What's wrong?
|
||||
|
||||
ANSWER: You probably wrote the minix demo to a 1.44M disk, which (for
|
||||
some unfathomable reason) doesn't work. The minix demo wants a 720kB or
|
||||
1.2M disk.
|
||||
|
||||
In any case, you shouldn't need to use the Minix-demo disk any more;
|
||||
as of version 0.11, Linux comes with sufficient filesystem utilities
|
||||
(mkfs, fsck, etc.) so that Minix should no longer be required to bring
|
||||
up an operating Linux system.
|
||||
|
||||
|
||||
QUESTION: The minix-demo boots all right, but doesn't seem to
|
||||
recognize my second harddisk. What's up? [SUGGESTION: delete this
|
||||
question; see above first paragraph]
|
||||
|
||||
ANSWER: The minix-demo does support a second harddisk, but there are no
|
||||
special files made for it, and the minix demo doesn't include the
|
||||
"mknod" command. Mount the linux root-floppy, and use the devices on
|
||||
that.
|
||||
|
||||
|
||||
QUESTION: How can I be sure I won't be writing over anything important?
|
||||
I have to use DOS in on my machine, and I don't want to lose any files.
|
||||
|
||||
ANSWER: Back up everything. Just in case. Then, write some easily
|
||||
recognizable pattern to the partition you have reserved for linux, using
|
||||
some DOS tool. You can then use "cat /dev/hdX" under minix to examine
|
||||
which of the partitions you used.
|
||||
|
||||
|
||||
QUESTION: The mkfs program doesn't accept the size I give the device,
|
||||
although I double-checked with fdisk, and it's correct.
|
||||
|
||||
ANSWER: Be sure you give the size in BLOCKS, ie 1024 bytes, not sectors.
|
||||
Also, make doubly certain that you have the correct partition.
|
||||
|
||||
|
||||
QUESTION: I used the minix mkfs to make a filesystem on /dev/hd3 after
|
||||
having checked that this was indeed the partition I had reserved. Minix
|
||||
mounts the new partition ok, but linux doesn't. What gives?
|
||||
|
||||
ANSWER: In some cases partitions are numbered differently under minix
|
||||
and linux. This seems to correlate to the FDISK version you have used.
|
||||
/dev/hd3 under minix may be /dev/hd2 under linux etc.
|
||||
|
||||
There are a few rules about this: /dev/hd0 and /dev/hd5 are always the
|
||||
same under linux and minix. DO NOT USE THEM, they are the whole raw
|
||||
disk, not partitions. Also if a partition is on drive 1 under minix (ie
|
||||
/dev/hd1-4), it is drive 1 under linux as well.
|
||||
|
||||
|
||||
QUESTION: I mounted the linux filesystem, and copied the files from the
|
||||
root-disk to the harddisk. Now I cannot find them any more, and
|
||||
somethimes linux dies with a "panic: trying to free unused inode".
|
||||
|
||||
ANSWER: You have probably forgot to sync before rebooting. Linux, like
|
||||
all unices, use a "buffer cache" to speed up reads and writes to disk.
|
||||
On a machine that has enough memory, this buffer-cache is 1.5MB, and if
|
||||
you forget to sync before exiting, it may not be fully written out to
|
||||
disk. Re-mkfs and re-install (or try to use the preliminary fsck, but
|
||||
remeber that although fsck tries to correct the faults it finds, it may
|
||||
fail.)
|
||||
|
||||
|
||||
QUESTION: the mtools package on the root-disk won't work. I get an
|
||||
ENOENT error message for all devices.
|
||||
|
||||
ANSWER: mtools needs to be told which device to look for. Use 'ln' or
|
||||
'mknod' to create a special file called "/dev/dosX", where X is A, B or
|
||||
C. This file should point to the device you want to read.
|
||||
|
||||
|
||||
QUESTION: Turbo (Microsoft) Assembler won't compile the Linux boot code.
|
||||
In fact, some of the opcodes in these files look completely unfamiliar. Why?
|
||||
|
||||
ANSWER: The Linux boot codes are written in Bruce Evans' minix assembler,
|
||||
which has the same opcodes as the original minix assembler. There are a few
|
||||
differences between these and normal DOS assemblers:
|
||||
|
||||
- No segments - everything is in the same segment (at least in the
|
||||
bootsectors and setup, as they don't use the .data segments)
|
||||
|
||||
- mov[b|w|l] are shorter versions of mov ax,[byte|word|long] ptr [XXX].
|
||||
This is how unix assemblers normally give the size (byte, word or long).
|
||||
Gas has similar constructs.
|
||||
|
||||
- There is no "jmp short", the opcodes are "j" for a short jump and
|
||||
"jmp" for a long one.
|
||||
|
||||
- "jmpi" is a jump with a segment:offset pair. I don't know how this is
|
||||
written in DOS assembly.
|
||||
|
||||
|
||||
QUESTION: While running du I get "Kernel panic: free_inode: bit already
|
||||
cleared". Also, du produces a ENOENT error for all the files in certain
|
||||
of my directories. What's going on?
|
||||
|
||||
ANSWER: These are both consistent with a bad file-system. That's relatively
|
||||
easy to produce by not syncing before rebooting, as linux usually has 1.5MB
|
||||
of buffer space held in memory (unless you have <=4M RAM, in which case
|
||||
the buffers are only about 0.5MB). Also linux doesn't do anything
|
||||
special about the bit-map blocks, and as they are used often, those are
|
||||
the thing most likely to be in memory. If you reboot, and they haven't
|
||||
been written to disk ...
|
||||
|
||||
If this happens to you, you should run the fsck program to determine
|
||||
to fix the inconsistencies in the file system. The syntax is:
|
||||
|
||||
fsck [-larvsm] device_name
|
||||
|
||||
You should first run it without any arguments, to assess the damage,
|
||||
and then run it with the -r or (if you're feeling adventurous) -a
|
||||
options to reapir the damage. The -a flag stands for automatic, which
|
||||
means tath fsck won't bother to ask you for confirmation before it
|
||||
fixes each inconsistency.
|
||||
|
||||
While the Linux system is in operation the disk buffers are forced out
|
||||
to disk only every 30 seconds by the /bin/update program (if it were
|
||||
done more frequently it would slow down the system). Before you halt,
|
||||
powerdown, or reboot your system, you should use the 'sync' program to
|
||||
manually write out any disk buffers to disk (some people think you
|
||||
should do 3 syncs after each other, but that's superstition). Or, you
|
||||
can log out out from the startup-shell, which automatically syncs the
|
||||
system. Unmounting a filesystem also syncs it (but of course you can
|
||||
never unmount root).
|
||||
|
||||
Another (sad) possibility is that you have bad blocks on your disk. Not
|
||||
very probable, as they would have to be in the inode-tables, just a
|
||||
couple of blocks in size. Again there aren't programs available to read
|
||||
a disk for bad sectors and put them in some kind of "bad-sector-file".
|
||||
On IDE drives this is no problem (bad sectors are automatically mapped
|
||||
away).
|
||||
|
||||
|
||||
QUESTION: What is the "em" binary?
|
||||
|
||||
ANSWER: Em is micro-EMacs (probably version 3.10).
|
||||
|
||||
QUESTION: I seem to be unable to compile anythong with gcc. Why?
|
||||
|
||||
ANSWER: If you have only 2 MB RAM, gcc will die silently without compiling
|
||||
anything. You must have at least 4 MB to do compilations
|
||||
|
||||
|
||||
QUESTION: I'm using a program that uses signal handlers which are installed
|
||||
using sigaction() with the SA_NOMASK, and they get a general protection
|
||||
error right after the signal handler tries to return. What's going
|
||||
wrong?
|
||||
|
||||
ANSWER: You are using a libc.a that has an out-of-date signal.o and
|
||||
sig_restore.o file, and they don't know how to deal with SA_NOMASK.
|
||||
(The one in gccbin.tar.Z is out-of-date.) You can obtain complete
|
||||
sources to the libc.a library from the FTP sites, and compile your own
|
||||
to make sure that you have the most up-to-date versions of all the
|
||||
library routines.
|
||||
|
||||
QUESTION: gcc complains about not finding crt0.o and the system include files
|
||||
What am i doing wrong ?
|
||||
|
||||
ANSWER: The include files normal place is in /usr/include. libc.a and *.a
|
||||
should be in /usr/lib
|
||||
265
Linux-0.11/docs/FAQv.txt
Normal file
265
Linux-0.11/docs/FAQv.txt
Normal file
@@ -0,0 +1,265 @@
|
||||
head 1.1;
|
||||
branch ;
|
||||
access ;
|
||||
symbols ;
|
||||
locks tytso:1.1; strict;
|
||||
comment @# @;
|
||||
|
||||
|
||||
1.1
|
||||
date 91.12.19.11.59.54; author tytso; state Exp;
|
||||
branches ;
|
||||
next ;
|
||||
|
||||
|
||||
desc
|
||||
@@
|
||||
|
||||
|
||||
|
||||
1.1
|
||||
log
|
||||
@Initial revision
|
||||
@
|
||||
text
|
||||
@
|
||||
QUESTION: What is linux?
|
||||
|
||||
ANSWER: Linux is a small unix for 386-AT computers, that has the added
|
||||
advantage of being free. It is still in beta-testing, but is slowly
|
||||
getting useful even for somewhat real developement.
|
||||
|
||||
|
||||
QUESTION: Does it run on my computer?
|
||||
|
||||
ANSWER: Linux has been written on a clone-386, with IDE drives and a VGA
|
||||
screen. It should work on most similar setups. The harddisk should be
|
||||
AT-standard (ie not SCSI, ESDI), and the system must be ISA. Otherwise
|
||||
the requirements seem relatively small: a 386 (SX, DX or any 486). The
|
||||
current version (0.10) needs a colour screen adapter, but this is not
|
||||
the case with the next version.
|
||||
|
||||
It needs at least 2M to run, and 4M is definitely a plus. It can happily
|
||||
use up to 16M (and more if you change some things).
|
||||
|
||||
|
||||
QUESTION: Will linux run on a PC or 286-AT? If not, why?
|
||||
|
||||
ANSWER: Linux uses the 386 chip protected mode functions extensively,
|
||||
and is a true 32-bit operating system. Thus x86 chips, x<3, will simply
|
||||
not run it.
|
||||
|
||||
|
||||
QUESTION: Does linux do paging? Can I have virtual memory on my small
|
||||
machine?
|
||||
|
||||
ANSWER: Linux does use the 386 paging unit, but currently only for
|
||||
memory management. No use of disks as expansion RAM. This is one of the
|
||||
things that will be implemented sometime in the (far?) future. Linux
|
||||
also uses the paging unit to share pages between several processes after
|
||||
a fork: thus it needs less memory. However, almost all the user programs
|
||||
available for linux are GNU software, which want gobs and gobs of
|
||||
memory. This is the reason at least 4M is recommended: GNU cc (gcc)
|
||||
simply won't run in less.
|
||||
|
||||
|
||||
QUESTION: Can I have tasks spanning the full 4GB of addressable 386
|
||||
memory? No more 64kB limits like in coherent or standard minix?
|
||||
|
||||
ANSWER: Linux does limit the task-size, but at a much more reasonable
|
||||
64MB (MEGA-byte, not kilos), so bigger programs are no problem.
|
||||
|
||||
|
||||
QUESTION: Does the bigger program sizes mean I can run X?
|
||||
|
||||
ANSWER: X is not ported to linux, and though I hope it will be some day,
|
||||
I cannot guarantee it. It's big, and wants a lot from the system.
|
||||
|
||||
|
||||
QUESTION: Where can I get linux? Is there a mailserver?
|
||||
|
||||
ANSWER: Linux can be gotten by anonymous ftp from
|
||||
nic.funet.fi (128.214.6.100):
|
||||
directory /pub/OS/Linux
|
||||
Tupac-Amaru.Informatik.RWTH-Aachen.DE (137.226.112.31):
|
||||
directory /pub/msdos/replace
|
||||
tsx-11.mit.edu (18.172.1.2):
|
||||
directory /pub/linux
|
||||
ftp.eecs.umich.edu (141.212.99.7):
|
||||
directory linux
|
||||
You might want to check out which of these is the most up-to-date.
|
||||
|
||||
If you don't have ftp-capability, you are in trouble. You might try
|
||||
mailing "mailserver@@nic.funet.fi" with "help" in the body of the mail.
|
||||
|
||||
|
||||
QUESTION: Is there a newsgroup or mailing-list about linux? Where can I
|
||||
get my questions answered? How about bug-reports?
|
||||
|
||||
ANSWER: There is a mailing list set up at the address
|
||||
'Linux-activists@@niksula.hut.fi'. To join, mail a request to
|
||||
'Linux-activists-request@@niksula.hut.fi'. DO NOT mail "I want to
|
||||
[un]subscribe" to the mailing-list, use the request-address.
|
||||
|
||||
Questions and bug-reports can be sent either to the mailing-list or to
|
||||
"torvalds@@kruuna.helsinki.fi", depending on which you find more
|
||||
appropriate.
|
||||
|
||||
|
||||
QUESTION: I got the minix-demo, but it won't boot. Linux boots from
|
||||
floppy. What's wrong?
|
||||
|
||||
ANSWER: You probably wrote the minix demo to a 1.44M disk, which (for
|
||||
some unfathomable reason) doesn't work. The minix demo wants a 720kB or
|
||||
1.2M disk.
|
||||
|
||||
|
||||
QUESTION: The minix-demo boots all right, but doesn't seem to recognize
|
||||
my second harddisk. What's up?
|
||||
|
||||
ANSWER: The minix-demo does support a second harddisk, but there are no
|
||||
special files made for it, and the minix demo doesn't include the
|
||||
"mknod" command. Mount the linux root-floppy, and use the devices on
|
||||
that.
|
||||
|
||||
|
||||
QUESTION: How can I be sure I won't be writing over anything important?
|
||||
I have to use DOS in on my machine, and I don't want to lose any files.
|
||||
|
||||
ANSWER: Back up everything. Just in case. Then, write some easily
|
||||
recognizable pattern to the partition you have reserved for linux, using
|
||||
some DOS tool. You can then use "cat /dev/hdX" under minix to examine
|
||||
which of the partitions you used.
|
||||
|
||||
|
||||
QUESTION: Minix mkfs doesn't accept the size I give the device, although
|
||||
I double-checked with fdisk, and it's correct.
|
||||
|
||||
ANSWER: Be sure you give the size in BLOCKS, ie 1024 bytes, not sectors.
|
||||
Also, make doubly certain that you have the correct partition.
|
||||
|
||||
|
||||
QUESTION: I used the minix mkfs to make a filesystem on /dev/hd3 after
|
||||
having checked that this was indeed the partition I had reserved. Minix
|
||||
mounts the new partition ok, but linux doesn't. What gives?
|
||||
|
||||
ANSWER: In some cases partitions are numbered differently under minix
|
||||
and linux. This seems to correlate to the FDISK version you have used.
|
||||
/dev/hd3 under minix may be /dev/hd2 under linux etc.
|
||||
|
||||
There are a few rules about this: /dev/hd0 and /dev/hd5 are always the
|
||||
same under linux and minix. DO NOT USE THEM, they are the whole raw
|
||||
disk, not partitions. Also if a partition is on drive 1 under minix (ie
|
||||
/dev/hd1-4), it is drive 1 under linux as well.
|
||||
|
||||
|
||||
QUESTION: I mounted the linux filesystem, and copied the files from the
|
||||
root-disk to the harddisk. Now I cannot find them any more, and
|
||||
somethimes linux dies with a "panic: trying to free unused inode".
|
||||
|
||||
ANSWER: You have probably forgot to sync before rebooting. Linux, like
|
||||
all unices, use a "buffer cache" to speed up reads and writes to disk.
|
||||
On a machine that has enough memory, this buffer-cache is 1.5MB, and if
|
||||
you forget to sync before exiting, it may not be fully written out to
|
||||
disk. Re-mkfs and re-install (or try to use the preliminary fsck, but
|
||||
remeber that although fsck tries to correct the faults it finds, it may
|
||||
fail.)
|
||||
|
||||
|
||||
QUESTION: the mtools package on the root-disk won't work. I get an
|
||||
ENOENT error message for all devices.
|
||||
|
||||
ANSWER: mtools needs to be told which device to look for. Use 'ln' or
|
||||
'mknod' to create a sepcial file called "/dev/dosX", where X is A, B or
|
||||
C. This file should point to the device you want to read.
|
||||
|
||||
|
||||
QUESTION: Turbo (Microsoft) Assembler won't compile the Linux boot code.
|
||||
In fact, some of the opcodes in these files look completely unfamiliar. Why?
|
||||
|
||||
ANSWER: The Linux boot codes are written in Bruce Evans' minix assembler,
|
||||
which has the same opcodes as the original minix assembler. There are a few
|
||||
differences between these and normal DOS assemblers:
|
||||
|
||||
- No segments - everything is in the same segment (at least in the
|
||||
bootsectors and setup, as they don't use the .data segments)
|
||||
|
||||
- mov[b|w|l] are shorter versions of mov ax,[byte|word|long] ptr [XXX].
|
||||
This is how unix assemblers normally give the size (byte, word or long).
|
||||
Gas has similar constructs.
|
||||
|
||||
- There is no "jmp short", the opcodes are "j" for a short jump and
|
||||
"jmp" for a long one.
|
||||
|
||||
- "jmpi" is a jump with a segment:offset pair. I don't know how this is
|
||||
written in DOS assembly.
|
||||
|
||||
|
||||
QUESTION: While running du I get "Kernel panic: free_inode: bit already
|
||||
cleared". Also, du produces a ENOENT error for all the files in certain
|
||||
of my directories. What's going on?
|
||||
|
||||
ANSWER: These are both consistent with a bad file-system. That's relatively
|
||||
easy to produce by not syncing before rebooting, as linux usually has 1.5MB
|
||||
of buffer space held in memory (unless you have <=4M RAM, in which case
|
||||
the buffers are only about 0.5MB). Also linux doesn't do anything
|
||||
special about the bit-map blocks, and as they are used often, those are
|
||||
the thing most likely to be in memory. If you reboot, and they haven't
|
||||
been written to disk ...
|
||||
|
||||
I'm afraid that as long as there is no fsck for linux there is no way to
|
||||
correct the matter (unless you have minix and can run minix fsck), and
|
||||
the only thing to do is to reinstall the filesystem from scratch (ie do
|
||||
a mkfs from the minix demodisk and reboot from the original
|
||||
linux-floppy).
|
||||
|
||||
A sync is done only every 30 seconds normally (standard unix practice),
|
||||
so do one by hand (some people think you should do 3 syncs after each
|
||||
other, but that's superstition), or by logging out from the
|
||||
startup-shell, which automatically syncs the system. Unmounting a
|
||||
filesystem also syncs it (but of course you can never unmount root).
|
||||
|
||||
Another (sad) possibility is that you have bad blocks on your disk. Not
|
||||
very probable, as they would have to be in the inode-tables, just a
|
||||
couple of blocks in size. Again there aren't programs available to read
|
||||
a disk for bad sectors and put them in some kind of "bad-sector-file".
|
||||
On IDE drives this is no problem (bad sectors are automatically mapped
|
||||
away).
|
||||
|
||||
|
||||
QUESTION: What is the "em" binary?
|
||||
|
||||
ANSWER: Em is micro-EMacs (probably version 3.10).
|
||||
|
||||
QUESTION: I seem to be unable to compile anythong with gcc. Why?
|
||||
|
||||
ANSWER: If you have only 2 MB RAM, gcc will die silently without compiling
|
||||
anything. You must have at least 4 MB to do compilations
|
||||
|
||||
|
||||
QUESTION: I'm using a program that uses signal handlers which are installed
|
||||
using sigaction() with the SA_NOMASK, and they get a general protection
|
||||
error right after the signal handler tries to return. What's going
|
||||
wrong?
|
||||
|
||||
ANSWER: You are using a libc.a that has an out-of-date signal.o and
|
||||
sig_restore.o file, and they don't know how to deal with SA_NOMASK.
|
||||
(The one in gccbin.tar.Z is out-of-date.) You can obtain the newer
|
||||
signal.c from the unistd.tar.Z file, but don't use the associated
|
||||
sig_restore.c from there; the FTP sites should have a separate
|
||||
sig_restore.c which is up to date. While you're at it, you should also
|
||||
get an updated crt0.c file as well, and install your new crt0.o and
|
||||
libc.a in /usr/lib.
|
||||
|
||||
(This answer will likely change in the near future, since there are
|
||||
plans to change the format of the signal trampoline code yet again....
|
||||
but for now, this should be an accurate description of how things stand
|
||||
now.)
|
||||
|
||||
|
||||
QUESTION: gcc complains about not finding crt0.o and the system include files
|
||||
What am i doing wrong ?
|
||||
|
||||
ANSWER: The include files normal place is in /usr/include. libc.a and *.a
|
||||
should be in /usr/lib
|
||||
@
|
||||
113
Linux-0.11/docs/INFO-SHEET-0.11
Normal file
113
Linux-0.11/docs/INFO-SHEET-0.11
Normal file
@@ -0,0 +1,113 @@
|
||||
LINUX INFORMATION SHEET
|
||||
|
||||
|
||||
1. WHAT IS LINUX 0.11
|
||||
LINUX 0.11 is a freely distributable UNIX clone. It is almost
|
||||
fully System V compatible. LINUX has been written from scratch, and
|
||||
therefore does not contain any AT&T or MINIX code--not in the kernel,
|
||||
the compiler, the utilities, or the libraries. For this reason it can
|
||||
be made available with the complete source code via anonymous FTP.
|
||||
Sorrily, it runs only on 386/486 AT-bus-machines. EISA will probably do
|
||||
too, but you need an AT-Bus controller for your harddisk.
|
||||
|
||||
|
||||
Version 0.11 is still a beta release, but it provides almost full
|
||||
functionality. Various users have been able to compile bigger projects
|
||||
like bison/flex by only changing the makefile to their needs, and these
|
||||
tools are fully functional.
|
||||
|
||||
|
||||
2. LINUX features
|
||||
- System call compatible with V7 of the UNIX operating system
|
||||
- Full multiprogramming (multiple programs can run at once)
|
||||
- Memory paging with copy-on-write
|
||||
- Demand loading of executables
|
||||
- Page sharing of executables
|
||||
- ANSI compliant C compiler (gcc)
|
||||
- A complete set of compiler writing tools
|
||||
(bison as yacc-replacement, flex as lex replacement)
|
||||
- The gnu-born again shell (bash)
|
||||
- Micro emacs
|
||||
- most utilities you need for development
|
||||
(cat, cp, kermit, ls, make, etc.)
|
||||
- Over 200 library procedures (atoi, fork, malloc, read, stdio, etc.)
|
||||
- Currently 3 national keyboards: finnish/us/german
|
||||
- Full source code (in C) for the OS is freely distributable
|
||||
- Full source code of the tools can be gotten from many anonymous ftp sites
|
||||
(It's almost completel the GNU project)
|
||||
- Runs in protected mode on 386 and above
|
||||
- Support for extended memory up to 16M on 386 and above
|
||||
- RS-232 serial line support with terminal emulation, kermit, zmodem, etc.
|
||||
- Supports the real time clock
|
||||
|
||||
|
||||
|
||||
3. HARDWARE REQUIRED
|
||||
- A 386 or 486 machine that is an AT-bus-machine. EISA will probably do
|
||||
too.
|
||||
- An IDE hard disk is required to use this system.
|
||||
- Both 5.25" and 3.5" diskettes are supported
|
||||
- At least 2 megabytes of RAM is required for LINUX to be operational,
|
||||
but gcc will only work from 4 MB on.
|
||||
- Any video card will do
|
||||
- Up to two serial lines are supported
|
||||
- The real time clock is supported
|
||||
|
||||
|
||||
4. PARTIAL LIST OF UTILITIES INCLUDED IN OR AVAILABLE FOR LINUX 0.10
|
||||
- The MTOOLS package (reading/writing to DOS)
|
||||
- The complete GNU filetools (ls,cat,cp,mv,...)
|
||||
- The GNU C compiler with GNU assembler,linker,ar,...
|
||||
- bison
|
||||
- flex
|
||||
- rcs
|
||||
- pmake (BSD 4.2 make)
|
||||
- kermit
|
||||
- Micro emacs
|
||||
- less
|
||||
- mkfs
|
||||
- fsck
|
||||
- mount/umount
|
||||
|
||||
|
||||
|
||||
5. LINUX BINARIES
|
||||
The LINUX binaries (including all the tools) are available at three
|
||||
anonymous FTP sites. These are:
|
||||
nic.funet.fi:/pub/OS/Linux
|
||||
tsx-11.mit.edu
|
||||
tupac-amaru.informatik.rwth-aachen.de:/pub/msdos/replace
|
||||
|
||||
|
||||
|
||||
6. LEGAL STATUS OF LINUX
|
||||
Although LINUX is supplied with the complete source code, it is
|
||||
copyrighted software. But it is, opposite to MINIX available for free,
|
||||
provided you obey to the rules specified in the LINUX copyright.
|
||||
|
||||
|
||||
|
||||
7. NEWS ABOUT LINUX
|
||||
Since LINUX's introduction to the public there has been a rapidly
|
||||
growing mailing list, "linux-activists@joker.cs.hut.fi". To subscribe
|
||||
to this list, mail to "linux-activists-requests@joker.cs.hut.fi". If
|
||||
the traffic in this lists increases further, there are plans to swap
|
||||
(at least partially) over to comp.os.misc, so watch out for any LINUX
|
||||
articles in this group. If you simply want to know whats the current
|
||||
state of the art, do a "finger torvalds@kruuna.helsinki.fi", and you'll
|
||||
get some information.
|
||||
|
||||
|
||||
|
||||
8. FUTURE PLANS
|
||||
The major current project is bringing LINUX to a version number
|
||||
greater than 1.0. It has also to undergo some (minor) revisions to be
|
||||
compatible to the IEEE POSIX P1003.1 and P1003.2 standards. Various
|
||||
people are currently working on
|
||||
- math support/fp emulation in the kernel
|
||||
- Page swapping (since paging is alreay implemented)
|
||||
- A virtual filesystem layer
|
||||
- STREAMS
|
||||
If you want to join the developers, join the mailing list
|
||||
|
||||
|
||||
206
Linux-0.11/docs/INSTALL-0.11
Normal file
206
Linux-0.11/docs/INSTALL-0.11
Normal file
@@ -0,0 +1,206 @@
|
||||
|
||||
Using Linux v0.11
|
||||
Linus Torvalds 08.12.91
|
||||
|
||||
NOTE: Users of 0.10, please check the "changed" list before using 0.11.
|
||||
|
||||
Booting linux
|
||||
|
||||
Linux-0.11 can easily be booted by getting the 2 files bootimage-0.11.Z
|
||||
and rootimage-0.11.Z from the linux archive, uncompressing them and
|
||||
writing them out to disks of the same size (ie 2 1.44M floppies or 2
|
||||
1.2M floppies). Writing the disks is done with the "rawrite.exe" program
|
||||
from dos, or with "dd" from unix. Linux is then booted simply by
|
||||
inserting the bootdiskette in drive A, and rebooting the machine. If
|
||||
everything goes well, linux will ask you to insert the root-disk after
|
||||
loading the system. Hopefully linux will then correctly load the shell
|
||||
executable, and leave you as root on the new system (prompt '# ').
|
||||
|
||||
Using it.
|
||||
|
||||
You can get a complete list of available commands by pressing <tab>
|
||||
twice: the root-disk contains mostly setup-programs needed to install
|
||||
the system on a harddisk. You can test them a bit, reading directories
|
||||
etc.
|
||||
|
||||
In order to install linux on the harddisk, first check out your harddisk
|
||||
by executing the command "fdisk" - it should show you all the partitions
|
||||
available. If you have only 1 AT-harddisk, you should get a
|
||||
errormessage, just ignore it. At my system fdisk reports the following:
|
||||
|
||||
/dev/hd1: 20476 blocks minix
|
||||
/dev/hd2: 19975 blocks minix
|
||||
/dev/hd3: 1020 blocks minix
|
||||
/dev/hd4: 170 blocks active 16-bit DOS (>=32M)
|
||||
/dev/hd6: 41641 blocks active minix
|
||||
|
||||
The partition type given (12-bit DOS, minix etc) doesn{t really mean
|
||||
anything, unless it's a "extended partition", in which case you
|
||||
shouldn't use that partition for anything: linux doesn't yet understand
|
||||
them. When later using "mkfs" to make a linux file system, it won't
|
||||
change the output of fdisk, so fdisk may well report "DOS", while in
|
||||
fact you have made it a linux partition.
|
||||
|
||||
If fdisk doesn't print out anything but errors, linux is unable to read
|
||||
your harddisk, and you are f**ked. Play around with the floppy version,
|
||||
but you won't be able to do anything real.
|
||||
|
||||
Making a filesystem
|
||||
|
||||
In order to really use linux, you will have to make a filesystem on your
|
||||
harddisk. This starts by deciding which partition you can use. Look
|
||||
again at what fdisk reports, and try to figure out which of the
|
||||
partitions you are using for DOS, OS/2 etc. /dev/hdX where X={1,2,3,4}
|
||||
always refers to the first harddisk, X={6,7,8,9} always refers to the
|
||||
second disk. /dev/hd0 and /dev/hd5 are special: they are all of the
|
||||
drive, and mkfs will refuse to use them for a filesystem.
|
||||
|
||||
When you are certain you know which device points to which partition,
|
||||
you make a filesystem on the partition of your choice by writing:
|
||||
|
||||
mkfs -c /dev/hdX blocks
|
||||
|
||||
where "-c" means that you want mkfs to check for errors, "dev/hdX" is
|
||||
the free partition you intend to use for linux, and "blocks" is the
|
||||
number of blocks fdisk reports for that particular partition. NOTE! mkfs
|
||||
will overwrite the partition you selected, so be doubly (or triply) sure
|
||||
that you don't mind that.
|
||||
|
||||
Note that when using the "-c" flag, mkfs will read through the entire
|
||||
partition: this can take some time. If there are read errors, mkfs will
|
||||
mark the particular block as bad, and continue: linux will also print a
|
||||
little message "harddisk I/O error". After running mkfs these messages
|
||||
should never occur again: if they do, your data may be corrupted.
|
||||
|
||||
Mounting the filesystem
|
||||
|
||||
After mkfs has exited, it's time to mount the file-system, and do the
|
||||
necessary things to make it a root file system. Mount the new filesystem
|
||||
on /user by writing:
|
||||
|
||||
cd /
|
||||
mount /dev/hdX /user
|
||||
|
||||
If you get errors for this, mkfs failed, and there is probably something
|
||||
seriously wrong.
|
||||
|
||||
After mounting the device, you want to move all the files on the current
|
||||
floppy-root to the new fs. This can most easily be done by writing:
|
||||
|
||||
cd /user
|
||||
for i in bin dev etc usr tmp floppy
|
||||
do
|
||||
cp +recursive +verbose /$i $i
|
||||
done
|
||||
sync
|
||||
|
||||
which will also tell you what it is doing (/bin/sh -> bin/sh etc).
|
||||
|
||||
After that, you should have a new filesystem that contains the bare
|
||||
necessities to start hacking linux. Play around some more, and exit
|
||||
linux by writing "logout or exit". This should result in
|
||||
|
||||
child 4 died with error code 0000
|
||||
#
|
||||
|
||||
Do a couple of syncs (3 is a magic number), and reboot the machine.
|
||||
ALWAYS remember to sync before rebooting: terrible things happen if you
|
||||
don't.
|
||||
|
||||
Using the harddisk as root
|
||||
|
||||
Once you have happily made a new root, you will want to boot up with it.
|
||||
This is done by changing a word at offset 508 in the boot-image. The
|
||||
word (in 386-order, ie low byte first) tells the system which device to
|
||||
use as root: it is initially 0, which means that we want to use a floppy
|
||||
of the same type as the boot-disk (and this is the reason that you may
|
||||
not use a 360kB boot-disk even though the system fits on one: it has to
|
||||
be the same type as the root-diskette).
|
||||
|
||||
In order to use the harddisk as root, this value has to be changed to
|
||||
point to the correct device. Harddisks have a major number of 3 under
|
||||
linux, and the minor nr is the same as the number X in /dev/hdX. The
|
||||
complete device number is then calculated with
|
||||
|
||||
DEV_NO = (major<<8)+minor
|
||||
|
||||
or alternatively major*256+minor. Thus /dev/hd1 is (3<<8)+1 = 0x301,
|
||||
/dev/hd6 = 0x0306 etc. Assuming the partition you made into the new root
|
||||
was /dev/hd2, you will have to write 0x0302 into the boot-image. That
|
||||
is, you should change the 508th byte in the image to 0x02, and the 509th
|
||||
byte to 0x03. There is a sample program for this in some of the older
|
||||
INSTALL-notes, if you don't understand what it's all about.
|
||||
|
||||
Ok, I got the root on hd, what now?
|
||||
|
||||
As you have probably noticed, you cannot get very far with the binaries
|
||||
found on the original root-diskette. So the first thing you want to do
|
||||
is to import some new binaries. To do this you need to tell linux what
|
||||
kind of floppies you have, as that's the easiest way to import things.
|
||||
|
||||
As with harddisk, floppies have device numbers, but this time major = 2
|
||||
instead of 3. The minor number is not as easy: it's a composite that
|
||||
tells which drive (A, B, C or D) and what type of drive (360kB, 1.2M,
|
||||
1.44M etc). The formula is 'minor = type*4+nr', where nr is 0-3 for A-D,
|
||||
and type is 2 for 1.2M disks, and 7 for 1.44M disks. There are other
|
||||
types, but these should suffice for now.
|
||||
|
||||
Thus if you have a 1.2M A-drive, and want to call it "floppy0", you have
|
||||
to tell linux so. This is done with the "mknod" command. mknod takes 4
|
||||
paramters: the unix name of the device, a "b" or a "c" depending on
|
||||
whether it's a Block of Character device, and the major and minor
|
||||
numbers. Thus to make "floppy0" a 1.2M A-drive, you write:
|
||||
|
||||
mknod /dev/floppy0 b 2 8
|
||||
|
||||
b is for Block-device, the 2 is for floppy, and the 8 is 4*2+0, where
|
||||
the 2 is 1.2M-drive and the 0 is drive A. Likewise to make a "floppy1"
|
||||
device that is a 1.44M drive in B, you write:
|
||||
|
||||
mknod /dev/floppy1 b 2 29
|
||||
|
||||
where 29 = 4*7 + 1. There are a couple of standard names, for users
|
||||
that are used to minix (major, minor in parentheses): /dev/PS0 is a
|
||||
1.44M in A (2,28), /dev/PS1 a 1.44M in B (2,29), /dev/at0 is a 1.2M in A
|
||||
(2,8), /dev/at1 is a 1.2M in B (2,9). Use mknod to make those that fit
|
||||
your computer.
|
||||
|
||||
After you have made these special block devices, you can now read a
|
||||
floppy under linux. The easiest way to import things into linux is by
|
||||
writing a tar-file to a floppy with rawrite.exe, and then using:
|
||||
|
||||
tar xvf /dev/floppy0
|
||||
|
||||
to untar it under linux. This way you can get the gcc binaries etc
|
||||
available from the linux-carrying sites.
|
||||
|
||||
Changes from 0.10:
|
||||
|
||||
- /bin/update is no longer automatically executed upon bootup: instead
|
||||
the file /etc/rc is evaluated by the shell. This file can then start the
|
||||
update process, mount andy needed filesystems, possibly fsck'ing them
|
||||
first. A minimal /etc/rc looks like this:
|
||||
|
||||
/bin/update &
|
||||
> /etc/mtab
|
||||
echo " Ok."
|
||||
|
||||
- init() restarts the shell every time it is exited: logout from the
|
||||
login shell results in a "child xxx died with error code yyy", a sync
|
||||
and then a new shell as root.
|
||||
|
||||
- floppies work a lot better than in 0.10. Even using two floppies at
|
||||
the same time seems to work out ok. Reading big chunks at a time is also
|
||||
faster then in 0.10 (I think).
|
||||
|
||||
- harddisk errors are handled better. Use the "-c" option in mkfs to map
|
||||
out all errors.
|
||||
|
||||
- linux accepts most video-cards: harcules, MDA, CGA etc seem to work.
|
||||
|
||||
- ^G beeps on the console, so command completion under bash etc will
|
||||
notify of errors.
|
||||
|
||||
- sticky directories, corrected handling of uid/gid bits, and better
|
||||
handling of protections when not root. Most of these won't be noticeable
|
||||
until we get a init/login.
|
||||
BIN
Linux-0.11/images/bootimage-0.11.Z
Normal file
BIN
Linux-0.11/images/bootimage-0.11.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/images/rootimage-0.11.Z
Normal file
BIN
Linux-0.11/images/rootimage-0.11.Z
Normal file
Binary file not shown.
386
Linux-0.11/info/vt102.codes
Normal file
386
Linux-0.11/info/vt102.codes
Normal file
@@ -0,0 +1,386 @@
|
||||
|
||||
Escape codes for vt102 terminal. <kivinen@hut.fi>
|
||||
|
||||
All numbers below are octal.<n> means numeric value,<c> means character string.
|
||||
If <n> is missing it is 0 or in cursor movements 1.
|
||||
|
||||
Reset and set modes
|
||||
Set Modes
|
||||
Esc [ <c> ; ... ; <c> h
|
||||
033 133 073 073 150
|
||||
Reset Modes
|
||||
Esc [ <c> ; ... ; <c> l
|
||||
033 133 073 073 154
|
||||
|
||||
Where <c> is
|
||||
'2'= Lock keyboard (set); Unlock keyboard (reset)
|
||||
'4'= Insert mode (set); Replace mode (reset)
|
||||
'12'= Echo on (set); Echo off (reset)
|
||||
'20'= Return = CR+LF (set); Return = CR (reset)
|
||||
'?1'= Cursorkeys application (set); Cursorkeys normal (reset)
|
||||
'?2'= Ansi (set); VT52 (reset)
|
||||
'?3'= 132 char/row (set); 80 char/row (reset)
|
||||
'?4'= Jump scroll (set); Smooth scroll (reset)
|
||||
'?5'= Reverse screen (set); Normal screen (reset)
|
||||
'?6'= Sets relative coordinates (set); Sets absolute coordinates (reset)
|
||||
'?7'= Auto wrap (set); Auto wrap off (reset)
|
||||
'?8'= Auto repeat on (set); Auto repeat off (reset)
|
||||
'?18'= Send FF to printer after print screen (set); No char after PS (reset)
|
||||
'?19'= Print screen prints full screen (set); PS prints scroll region (reset)
|
||||
'?25'= Cursor on (set); Cursor off (reset)
|
||||
|
||||
Set scrolling region (n1=upper,n2=lower)
|
||||
Esc [ <n1> ; <n2> r
|
||||
033 133 073 162
|
||||
|
||||
|
||||
Cursor movement (<n>=how many chars or lines), cursor stop at margin.
|
||||
Up
|
||||
Esc [ <n> A
|
||||
033 133 101
|
||||
Down
|
||||
Esc [ <n> B
|
||||
033 133 102
|
||||
Right
|
||||
Esc [ <n> C
|
||||
033 133 103
|
||||
Left
|
||||
Esc [ n D
|
||||
033 133 104
|
||||
Cursor position (<n1>=y,<n2>=x, from top of screen or scroll region)
|
||||
Esc [ <n1> ; <n2> H
|
||||
033 133 073 110
|
||||
Or Esc [ <n1> ; <n2> f
|
||||
033 133 073 146
|
||||
Index (cursor down with scroll up when at margin)
|
||||
Esc D
|
||||
033 104
|
||||
Reverse index (cursor up with scroll down when at margin)
|
||||
Esc M
|
||||
033 115
|
||||
Next line (CR+Index)
|
||||
Esc E
|
||||
033 105
|
||||
Save cursor and attribute
|
||||
Esc 7
|
||||
033 067
|
||||
Restore cursor and attribute
|
||||
Esc 8
|
||||
033 070
|
||||
|
||||
|
||||
Keybad character selection
|
||||
Application keypad mode
|
||||
Esc =
|
||||
033 075
|
||||
Numeric keypad mode
|
||||
Esc >
|
||||
033 076
|
||||
|
||||
Keypadkeys codes generated
|
||||
Numeric Application VT52 Application
|
||||
0 0 (060) Esc O p (033 117 160) Esc ? p (033 077 160)
|
||||
1 1 (061) Esc O q (033 117 161) Esc ? q (033 077 161)
|
||||
2 2 (062) Esc O r (033 117 162) Esc ? r (033 077 162)
|
||||
3 3 (063) Esc O s (033 117 163) Esc ? s (033 077 163)
|
||||
4 4 (064) Esc O t (033 117 164) Esc ? t (033 077 164)
|
||||
5 5 (065) Esc O u (033 117 165) Esc ? u (033 077 165)
|
||||
6 6 (066) Esc O v (033 117 166) Esc ? v (033 077 166)
|
||||
7 7 (067) Esc O w (033 117 167) Esc ? w (033 077 167)
|
||||
8 8 (070) Esc O x (033 117 170) Esc ? x (033 077 170)
|
||||
9 9 (071) Esc O y (033 117 171) Esc ? y (033 077 171)
|
||||
- (minus) - (055) Esc O m (033 117 155) Esc ? m (033 077 155)
|
||||
, (comma) , (054) Esc O l (033 117 154) Esc ? l (033 077 154)
|
||||
. (period) . (056) Esc O n (033 117 156) Esc ? n (033 077 156)
|
||||
Enter CR (015)* Esc O M (033 117 115) Esc ? M (033 077 115)
|
||||
PF1 Esc O P Esc O P (033 117 120) Esc P (033 120)
|
||||
PF2 Esc O Q Esc O Q (033 117 121) Esc Q (033 121)
|
||||
PF3 Esc O R Esc O R (033 117 122) Esc R (033 122)
|
||||
PF4 Esc O S Esc O S (033 117 123) Esc S (033 123)
|
||||
* Or CR+LF (015 012)
|
||||
|
||||
Cursorkeys codes generated (changed by set and reset modes '?1')
|
||||
normal application
|
||||
Up Esc [ A Esc O A
|
||||
033 133 101 033 117 101
|
||||
Down Esc [ B Esc O B
|
||||
033 133 102 033 117 102
|
||||
Right Esc [ C Esc O C
|
||||
033 133 103 033 117 103
|
||||
Left Esc [ D Esc O D
|
||||
033 133 104 033 117 104
|
||||
|
||||
|
||||
Select chaacter set
|
||||
UK as G0
|
||||
Esc ( A
|
||||
033 050 101
|
||||
US as G0
|
||||
Esc ( B
|
||||
033 050 102
|
||||
Special characters and line drawing character set as G0
|
||||
Esc ( 0
|
||||
033 050 060
|
||||
Alternate ROM as G0
|
||||
Esc ( 1
|
||||
033 050 061
|
||||
Alternate ROM special characters character set as G0
|
||||
Esc ( 2
|
||||
033 050 062
|
||||
|
||||
UK as G1
|
||||
Esc ) A
|
||||
033 051 101
|
||||
US as G1
|
||||
Esc ) B
|
||||
033 051 102
|
||||
Special characters and line drawing character set as G1
|
||||
Esc ) 0
|
||||
033 051 060
|
||||
Alternate ROM as G1
|
||||
Esc ) 1
|
||||
033 051 061
|
||||
Alternate ROM special characters character set as G1
|
||||
Esc ) 2
|
||||
033 051 062
|
||||
|
||||
Selects G2 for one character
|
||||
Esc N
|
||||
033 115
|
||||
Selects G3 for one character
|
||||
Esc O
|
||||
033 117
|
||||
|
||||
|
||||
Set graphic rendition
|
||||
Esc [ <n> ; <n> m
|
||||
033 133 073 156
|
||||
|
||||
Where <n> is
|
||||
0 = Turn off attributes
|
||||
1 = Bold (Full)
|
||||
2 = Half
|
||||
4 = Underline
|
||||
5 = Blink
|
||||
7 = Reverse
|
||||
21 = Normal intensity
|
||||
22 = Normal intensity
|
||||
24 = Cancel underlined
|
||||
25 = Cancel blinking
|
||||
27 = Cancel reverse
|
||||
|
||||
Tab stops
|
||||
Set horizontal tab
|
||||
Esc H
|
||||
033 110
|
||||
Clear horizontal tab
|
||||
Esc [ g
|
||||
033 133 147
|
||||
Or Esc [ 0 g
|
||||
033 133 060 147
|
||||
Clear all horizontal tabs
|
||||
Esc [ 3 g
|
||||
033 133 063 147
|
||||
|
||||
|
||||
Line attributes
|
||||
Double-height
|
||||
Top half
|
||||
Esc # 3
|
||||
033 043 063
|
||||
Bottom half
|
||||
Esc # 4
|
||||
033 043 064
|
||||
Single-width, single-height
|
||||
Esc # 5
|
||||
033 043 065
|
||||
Double-width
|
||||
Esc # 6
|
||||
033 043 066
|
||||
|
||||
|
||||
Erasing
|
||||
Erase in line
|
||||
End of line (including cursor position)
|
||||
Esc [ K
|
||||
033 133 113
|
||||
Or Esc [ 0 K
|
||||
033 133 060 113
|
||||
Beginning of line (including cursor position)
|
||||
Esc [ 1 K
|
||||
033 133 061 113
|
||||
Complete line
|
||||
Esc [ 2 K
|
||||
033 133 062 113
|
||||
Erase in display
|
||||
End of screen (including cursor position)
|
||||
Esc [ J
|
||||
033 133 112
|
||||
Or Esc [ 0 J
|
||||
033 133 060 112
|
||||
Beginning of screen (including cursor position)
|
||||
Esc [ 1 J
|
||||
033 133 061 112
|
||||
Complete display
|
||||
Esc [ 2 J
|
||||
033 133 062 112
|
||||
|
||||
|
||||
Computer editing
|
||||
Delete characters (<n> characters right from cursor
|
||||
Esc [ <n> P
|
||||
033 133 120
|
||||
Inser line (<n> lines)
|
||||
Esc [ <n> L
|
||||
033 133 114
|
||||
Delete line (<n> lines)
|
||||
Esc [ <n> M
|
||||
033 133 115
|
||||
|
||||
|
||||
Printing
|
||||
Esc [ <c> i
|
||||
033 133 151
|
||||
|
||||
Where <c> is
|
||||
''= Same as '0'
|
||||
'0'= Prints screen (full or scroll region)
|
||||
'4'= Printer controller off
|
||||
'5'= Printer controller on (Print all received chars to printer)
|
||||
'?1'= Print cursor line
|
||||
'?4'= Auto print off
|
||||
'?5'= Auto print on (Prints line to printer when you exit from it)
|
||||
|
||||
|
||||
Reports
|
||||
Device status
|
||||
Esc [ <c> n
|
||||
033 133 156
|
||||
|
||||
Where <c> is
|
||||
'0'=Response Ready, no malfunctions detected
|
||||
'3'=Malfunction, error in self-test.
|
||||
'5'=Status report request
|
||||
'6'=Request cursor position.
|
||||
'?10'=Response to printer status request, All ok.
|
||||
'?11'=Response to printer status request, Printer is not ready.
|
||||
'?13'=Response to printer status request, No printer.
|
||||
'?15'=Status report request from printer
|
||||
|
||||
Cursor position raport (Response to request cursor position)
|
||||
Esc [ <n1> ; <n2> R
|
||||
033 133 073 122
|
||||
Request terminal to identify itself (esc Z may not be supported in future)
|
||||
Esc [ c
|
||||
033 133 143
|
||||
Esc [ 0 c
|
||||
033 133 060 143
|
||||
Esc Z
|
||||
033 132
|
||||
Response to terminal identify (VT102)
|
||||
Esc [ ? 6 c
|
||||
033 133 077 066 143
|
||||
|
||||
|
||||
Reset to initial state
|
||||
Esc c
|
||||
033 143
|
||||
|
||||
|
||||
Tests
|
||||
Invoke confidence test
|
||||
Esc [ 2 ; <n> y
|
||||
033 133 062 073 171
|
||||
|
||||
Where <n> is
|
||||
'1'= Power-up test
|
||||
'2'= Data loopback test
|
||||
'4'= EIA loopback test
|
||||
'9'= Power-up tests (continuously)
|
||||
'10'= Data loopback tests (continuously)
|
||||
'12'= EIA loopback tests (continuously)
|
||||
'16'= Printer loopback test
|
||||
'24'= Printer loopback tests (continuously)
|
||||
|
||||
|
||||
Screen adjustments
|
||||
Esc # 8
|
||||
033 043 070
|
||||
|
||||
|
||||
Keyboard indicator
|
||||
Led L1 off
|
||||
Esc [ 0 q
|
||||
033 133 060 181
|
||||
Led L1 on
|
||||
Esc [ 1 q
|
||||
033 133 061 181
|
||||
|
||||
|
||||
|
||||
VT52 sequences
|
||||
Ansi mode
|
||||
Esc <
|
||||
033 074
|
||||
Cursor positioning
|
||||
Up Esc A
|
||||
033 101
|
||||
Down Esc B
|
||||
033 102
|
||||
Right Esc C
|
||||
033 103
|
||||
Left Esc D
|
||||
033 104
|
||||
Home Esc H
|
||||
033 110
|
||||
Direct cursor address
|
||||
Esc Y <line+040> <columns+040>
|
||||
033 131
|
||||
Reverse linefeed Esc I
|
||||
033 111
|
||||
Erase to end of line Esc K
|
||||
033 113
|
||||
Erase to end of screen Esc J
|
||||
033 112
|
||||
Auto print on Esc ^
|
||||
033 136
|
||||
Auto print off Esc
|
||||
033 137
|
||||
Printer controller on Esc W
|
||||
033 127
|
||||
Printer controller off Esc X
|
||||
033 130
|
||||
Print cursor line Esc V
|
||||
033 135
|
||||
Print screen Esc ]
|
||||
033 135
|
||||
Indentify request Esc Z
|
||||
033 132
|
||||
Response to indetify Esc / Z
|
||||
request (VT52) 033 057 132
|
||||
Special charset (same Esc F
|
||||
as line draw in VT102 033 106
|
||||
Normal char set Esc G
|
||||
033 107
|
||||
|
||||
|
||||
Control characters
|
||||
000 = Null (fill character)
|
||||
003 = ETX (Can be selected half-duplex turnaround char)
|
||||
004 = EOT (Can be turnaround or disconnect char, if turn, then DLE-EOT=disc.)
|
||||
005 = ENQ (Transmits answerback message)
|
||||
007 = BEL (Generates bell tone)
|
||||
010 = BS (Moves cursor left)
|
||||
011 = HT (Moves cursor to next tab)
|
||||
012 = LF (Linefeed or New line operation)
|
||||
013 = VT (Processed as LF)
|
||||
014 = FF (Processed as LF, can be selected turnaround char)
|
||||
015 = CR (Moves cursor to left margin, can be turnaround char)
|
||||
016 = SO (Selects G1 charset)
|
||||
017 = SI (Selects G0 charset)
|
||||
021 = DC1 (XON, causes terminal to continue transmit)
|
||||
023 = DC3 (XOFF, causes terminal to stop transmitting)
|
||||
030 = CAN (Cancels escape sequence)
|
||||
032 = SUB (Processed as CAN)
|
||||
033 = ESC (Processed as sequence indicator)
|
||||
|
||||
502
Linux-0.11/info/xterm-seqs.ms
Normal file
502
Linux-0.11/info/xterm-seqs.ms
Normal file
@@ -0,0 +1,502 @@
|
||||
.\"#! troff -Q -ms $1
|
||||
.\" This is the "Xterm Control Sequences" document, originally written by
|
||||
.\" Edward Moy, University of California, Berkeley, for the X.V10R4 xterm.
|
||||
.\" Some minor edits have been made to begin to reconcile this document with
|
||||
.\" the current sources, but it still has a long way to go:
|
||||
.\"
|
||||
.\" 1) I don't guarantee that this is 100% correct. I tried most of
|
||||
.\" the things that seemed to be different, and this document
|
||||
.\" reflects what I saw. Stuff that appears to be in the X10R4
|
||||
.\" document and missing from this document is so because it
|
||||
.\" appears not to be present in the X11 version of "xterm" (e.g.,
|
||||
.\" the "Alternate Character ROM" character sets and the Sun TTY
|
||||
.\" emulation).
|
||||
.\"
|
||||
.\" 2) It is definitely not 100% complete; some escape sequences
|
||||
.\" that do something that's either unobservable - at least in
|
||||
.\" the current state of the code - or not useful aren't
|
||||
.\" documented. An example of the former are the Locking Shift
|
||||
.\" sequences that modify the interpretation of the GR
|
||||
.\" characters; at present, it sets a state variable that's
|
||||
.\" unused, but perhaps some future version will use it (perhaps
|
||||
.\" for displaying characters in the range 0200-0377?). An
|
||||
.\" example of the latter is the sequence to set DECANM mode
|
||||
.\" (ANSI/VT52 mode): it doesn't do what it does on a VT100,
|
||||
.\" namely get the terminal to emulate a VT100, it only seems to
|
||||
.\" fiddle the current character set a bit.
|
||||
.\"
|
||||
.\" 3) It doesn't document any of the mouse-related stuff, such as
|
||||
.\" what the "Track Mouse" escape sequence does, or what the
|
||||
.\" different mouse modes (MIT, VT220, "VT220 Hilite") do; I
|
||||
.\" leave that to somebody familiar with that part of the code....
|
||||
.\"
|
||||
.\" Run this file through troff and use the -ms macro package.
|
||||
.ND
|
||||
.de St
|
||||
.sp
|
||||
.nr PD 0
|
||||
.nr PI 1.5i
|
||||
.nr VS 16
|
||||
..
|
||||
.de Ed
|
||||
.nr PD .3v
|
||||
.nr VS 12
|
||||
..
|
||||
.rm CH
|
||||
.ds LH Xterm Control Sequences
|
||||
.nr s 6*\n(PS/10
|
||||
.ds L \s\nsBEL\s0
|
||||
.ds E \s\nsESC\s0
|
||||
.ds T \s\nsTAB\s0
|
||||
.ds X \s\nsETX\s0
|
||||
.ds N \s\nsENQ\s0
|
||||
.ds e \s\nsETB\s0
|
||||
.ds C \s\nsCAN\s0
|
||||
.ds S \s\nsSUB\s0
|
||||
.nr [W \w'\*L'u
|
||||
.nr w \w'\*E'u
|
||||
.if \nw>\n([W .nr [W \nw
|
||||
.nr w \w'\*T'u
|
||||
.if \nw>\n([W .nr [W \nw
|
||||
.nr w \w'\*X'u
|
||||
.if \nw>\n([W .nr [W \nw
|
||||
.nr w \w'\*N'u
|
||||
.if \nw>\n([W .nr [W \nw
|
||||
.nr w \w'\*e'u
|
||||
.if \nw>\n([W .nr [W \nw
|
||||
.nr w \w'\*C'u
|
||||
.if \nw>\n([W .nr [W \nw
|
||||
.nr w \w'\*S'u
|
||||
.if \nw>\n([W .nr [W \nw
|
||||
.nr [W +\w'\|\|'u
|
||||
.de []
|
||||
.nr w \w'\\$2'
|
||||
.nr H \\n([Wu-\\nwu
|
||||
.nr h \\nHu/2u
|
||||
.ds \\$1 \(br\v'-1p'\(br\v'1p'\h'\\nhu'\\$2\h'\\nHu-\\nhu'\(br\l'-\\n([Wu\(ul'\v'-1p'\(br\l'-\\n([Wu\(rn'\v'1p'\|
|
||||
..
|
||||
.[] Et \v'-1p'\*X\v'1p'
|
||||
.[] En \v'-1p'\*N\v'1p'
|
||||
.[] Be \v'-1p'\*L\v'1p'
|
||||
.[] Bs \v'-1p'\s\nsBS\s0\v'1p'
|
||||
.[] Ta \v'-1p'\*T\v'1p'
|
||||
.[] Lf \v'-1p'\s\nsLF\s0\v'1p'
|
||||
.[] Vt \v'-1p'\s\nsVT\s0\v'1p'
|
||||
.[] Ff \v'-1p'\s\nsFF\s0\v'1p'
|
||||
.[] Cr \v'-1p'\s\nsCR\s0\v'1p'
|
||||
.[] So \v'-1p'\s\nsSO\s0\v'1p'
|
||||
.[] Si \v'-1p'\s\nsSI\s0\v'1p'
|
||||
.[] Eb \v'-1p'\*e\v'1p'
|
||||
.[] Ca \v'-1p'\*C\v'1p'
|
||||
.[] Su \v'-1p'\*S\v'1p'
|
||||
.[] Es \v'-1p'\*E\v'1p'
|
||||
.[] Fs \v'-1p'\s\nsFS\s0\v'1p'
|
||||
.[] Gs \v'-1p'\s\nsGS\s0\v'1p'
|
||||
.[] Rs \v'-1p'\s\nsRS\s0\v'1p'
|
||||
.[] Us \v'-1p'\s\nsUS\s0\v'1p'
|
||||
.[] # #
|
||||
.[] (( (
|
||||
.[] ) )
|
||||
.[] * *
|
||||
.[] + +
|
||||
.[] 0 0
|
||||
.[] 1 1
|
||||
.[] 2 2
|
||||
.[] 3 3
|
||||
.[] 4 4
|
||||
.[] 5 5
|
||||
.[] 6 6
|
||||
.[] 7 7
|
||||
.[] 8 8
|
||||
.[] 9 9
|
||||
.[] : :
|
||||
.[] ; ;
|
||||
.[] = =
|
||||
.[] > >
|
||||
.[] ? ?
|
||||
.[] @ @
|
||||
.[] A A
|
||||
.[] cB B
|
||||
.[] C C
|
||||
.[] D D
|
||||
.[] E E
|
||||
.[] F F
|
||||
.[] H H
|
||||
.[] J J
|
||||
.[] K K
|
||||
.[] L L
|
||||
.[] M M
|
||||
.[] N N
|
||||
.[] O O
|
||||
.[] P P
|
||||
.[] R R
|
||||
.[] S S
|
||||
.[] T T
|
||||
.[] Z Z
|
||||
.[] [[ [
|
||||
.[] ] ]
|
||||
.[] ` \`
|
||||
.[] a a
|
||||
.[] b b
|
||||
.[] c c
|
||||
.[] d d
|
||||
.[] f f
|
||||
.[] g g
|
||||
.[] h h
|
||||
.[] i i
|
||||
.[] j j
|
||||
.[] k k
|
||||
.[] l l
|
||||
.[] m m
|
||||
.[] n n
|
||||
.[] o o
|
||||
.[] p p
|
||||
.[] q q
|
||||
.[] r r
|
||||
.[] s s
|
||||
.[] t t
|
||||
.[] x x
|
||||
.[] | |
|
||||
.[] } }
|
||||
.[] c~ ~
|
||||
.ds Cc \fIC\fP
|
||||
.ds Ps \fIP\v'.3m'\h'-.2m'\s-2s\s0\v'-.3m'\fP
|
||||
.ds Pm \fIP\v'.3m'\h'-.2m'\s-2m\s0\v'-.3m'\fP
|
||||
.ds Pt \fIP\v'.3m'\h'-.2m'\s-2t\s0\v'-.3m'\fP
|
||||
.ds Ix \fIx\fP
|
||||
.ds Iy \fIy\fP
|
||||
.ds Iw \fIw\fP
|
||||
.ds Ih \fIh\fP
|
||||
.ds Ir \fIr\fP
|
||||
.ds Ic \fIc\fP
|
||||
.nr LL 6.5i
|
||||
.TL
|
||||
Xterm Control Sequences
|
||||
.am NP
|
||||
.ds CF %
|
||||
..
|
||||
.SH
|
||||
Definitions
|
||||
.IP \*(Cc
|
||||
A single (required) character.
|
||||
.IP \*(Ps
|
||||
A single (usually optional) numeric parameter, composed of one of more digits.
|
||||
.IP \*(Pm
|
||||
A multiple numeric parameter composed of any number of single numeric
|
||||
parameters, separated by \*; character(s).
|
||||
.IP \*(Pt
|
||||
A text parameter composed of printable characters.
|
||||
.SH
|
||||
VT102 Mode
|
||||
.ds RH VT102 Mode
|
||||
.LP
|
||||
Most of these control sequences are standard VT102 control sequences.
|
||||
There are, however, additional ones to provide control of
|
||||
.I xterm
|
||||
dependent functions, like the scrollbar or window size.
|
||||
.St
|
||||
.IP \\*(Be
|
||||
Bell (Ctrl-G)
|
||||
.IP \\*(Bs
|
||||
Backspace (Ctrl-H)
|
||||
.IP \\*(Ta
|
||||
Horizontal Tab (Ctrl-I)
|
||||
.IP \\*(Lf
|
||||
Line Feed or New Line (Ctrl-J)
|
||||
.IP \\*(Vt
|
||||
Vertical Tab (Ctrl-K)
|
||||
.IP \\*(Ff
|
||||
Form Feed or New Page (Ctrl-L)
|
||||
.IP \\*(Cr
|
||||
Carriage Return (Ctrl-M)
|
||||
.IP \\*(So
|
||||
Shift Out (Ctrl-N) \(-> Switch to Alternate Character Set
|
||||
.IP \\*(Si
|
||||
Shift In (Ctrl-O) \(-> Switch to Standard Character Set
|
||||
.IP \\*(Es\\*#\\*8
|
||||
DEC Screen Alignment Test (DECALN)
|
||||
.IP \\*(Es\\*(((\\*(Cc
|
||||
Select G0 Character Set (SCS)
|
||||
\*(Cc = \*0 \(-> Special Character and Line Drawing Set
|
||||
\*(Cc = \*A \(-> United Kingdom (UK)
|
||||
\*(Cc = \*(cB \(-> United States (USASCII)
|
||||
.IP \\*(Es\\*)\\*(Cc
|
||||
Select G1 Character Set (SCS)
|
||||
\*(Cc = \*0 \(-> Special Character and Line Drawing Set
|
||||
\*(Cc = \*A \(-> United Kingdom (UK)
|
||||
\*(Cc = \*(cB \(-> United States (USASCII)
|
||||
.IP \\*(Es\\**\\*(Cc
|
||||
Select G2 Character Set (SCS)
|
||||
\*(Cc = \*0 \(-> Special Character and Line Drawing Set
|
||||
\*(Cc = \*A \(-> United Kingdom (UK)
|
||||
\*(Cc = \*(cB \(-> United States (USASCII)
|
||||
.IP \\*(Es\\*+\\*(Cc
|
||||
Select G3 Character Set (SCS)
|
||||
\*(Cc = \*0 \(-> Special Character and Line Drawing Set
|
||||
\*(Cc = \*A \(-> United Kingdom (UK)
|
||||
\*(Cc = \*(cB \(-> United States (USASCII)
|
||||
.IP \\*(Es\\*7
|
||||
Save Cursor (DECSC)
|
||||
.IP \\*(Es\\*8
|
||||
Restore Cursor (DECRC)
|
||||
.IP \\*(Es\\*=
|
||||
Application Keypad (DECPAM)
|
||||
.IP \\*(Es\\*>
|
||||
Normal Keypad (DECPNM)
|
||||
.IP \\*(Es\\*D
|
||||
Index (IND)
|
||||
.IP \\*(Es\\*E
|
||||
Next Line (NEL)
|
||||
.IP \\*(Es\\*H
|
||||
Tab Set (HTS)
|
||||
.IP \\*(Es\\*M
|
||||
Reverse Index (RI)
|
||||
.IP \\*(Es\\*N
|
||||
Single Shift Select of G2 Character Set (SS2)
|
||||
.IP \\*(Es\\*O
|
||||
Single Shift Select of G3 Character Set (SS3)
|
||||
.IP \\*(Es\\*Z
|
||||
Return Terminal ID (DECID)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*@
|
||||
Insert \*(Ps (Blank) Character(s) (default = 1) (ICH)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*A
|
||||
Cursor Up \*(Ps Times (default = 1) (CUU)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*(cB
|
||||
Cursor Down \*(Ps Times (default = 1) (CUD)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*C
|
||||
Cursor Forward \*(Ps Times (default = 1) (CUF)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*D
|
||||
Cursor Backward \*(Ps Times (default = 1) (CUB)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*;\\*(Ps\|\\*H
|
||||
Cursor Position [row;column] (default = [1,1]) (CUP)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*J
|
||||
Erase in Display (ED)
|
||||
\*(Ps = \*0 \(-> Clear Below (default)
|
||||
\*(Ps = \*1 \(-> Clear Above
|
||||
\*(Ps = \*2 \(-> Clear All
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*K
|
||||
Erase in Line (EL)
|
||||
\*(Ps = \*0 \(-> Clear to Right (default)
|
||||
\*(Ps = \*1 \(-> Clear to Left
|
||||
\*(Ps = \*2 \(-> Clear All
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*L
|
||||
Insert \*(Ps Line(s) (default = 1) (IL)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*M
|
||||
Delete \*(Ps Line(s) (default = 1) (DL)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*P
|
||||
Delete \*(Ps Character(s) (default = 1) (DCH)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*;\\*(Ps\|\\*;\\*(Ps\|\\*;\\*(Ps\|\\*;\\*(Ps\|\\*T
|
||||
Track Mouse [func;startcol;startrow;firstrow;lastrow] XXX - describe
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*c
|
||||
Device Attributes (default 0) (DA)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*;\\*(Ps\|\\*f
|
||||
Horizontal and Vertical Position [row;column] (default = [1,1]) (HVP)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*g
|
||||
Tab Clear
|
||||
\*(Ps = \*0 \(-> Clear Current Column (default)
|
||||
\*(Ps = \*3 \(-> Clear All
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*h
|
||||
Mode Set (SET)
|
||||
\*(Ps = \*4 \(-> Insert Mode (IRM)
|
||||
\*(Ps = \*2\*0 \(-> Automatic Linefeed (LNM)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*l
|
||||
Mode Reset (RST)
|
||||
\*(Ps = \*4 \(-> Insert Mode (IRM)
|
||||
\*(Ps = \*2\*0 \(-> Automatic Linefeed (LNM)
|
||||
.IP \\*(Es\\*([[\\*(Pm\|\\*m
|
||||
Character Attributes (SGR)
|
||||
\*(Ps = \*0 \(-> Normal (default)
|
||||
\*(Ps = \*1 \(-> Blink (appears as Bold)
|
||||
\*(Ps = \*4 \(-> Underscore
|
||||
\*(Ps = \*5 \(-> Bold
|
||||
\*(Ps = \*7 \(-> Inverse
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*n
|
||||
Device Status Report (DSR)
|
||||
\*(Ps = 5 \(-> Status Report \*(Es\*([[\*0\*n \(-> OK
|
||||
\*(Ps = 6 \(-> Report Cursor Position (CPR) [row;column] as
|
||||
\*(Es\*([[\*(Ir\|\*;\*(Ic\|\*R
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*;\\*(Ps\|\\*r
|
||||
Set Scrolling Region [top;bottom] (default = full size of window) (DECSTBM)
|
||||
.IP \\*(Es\\*([[\\*(Ps\|\\*x
|
||||
Request Terminal Parameters (DECREQTPARM)
|
||||
.IP \\*(Es\\*([[\\*?\\*(Ps\|\\*h
|
||||
DEC Private Mode Set (DECSET)
|
||||
\*(Ps = \*1 \(-> Application Cursor Keys (DECCKM)
|
||||
\*(Ps = \*3 \(-> 132 Column Mode (DECCOLM)
|
||||
\*(Ps = \*4 \(-> Smooth (Slow) Scroll (DECSCLM)
|
||||
\*(Ps = \*5 \(-> Reverse Video (DECSCNM)
|
||||
\*(Ps = \*6 \(-> Origin Mode (DECOM)
|
||||
\*(Ps = \*7 \(-> Wraparound Mode (DECAWM)
|
||||
\*(Ps = \*8 \(-> Auto-repeat Keys (DECARM)
|
||||
\*(Ps = \*9 \(-> Send MIT Mouse Row & Column on Button Press
|
||||
\*(Ps = \*3\*8 \(-> Enter Tektronix Mode (DECTEK)
|
||||
\*(Ps = \*4\*0 \(-> Allow 80 \z\(<-\(-> 132 Mode
|
||||
\*(Ps = \*4\*1 \(-> \fIcurses\fP(5) fix
|
||||
\*(Ps = \*4\*4 \(-> Turn On Margin Bell
|
||||
\*(Ps = \*4\*5 \(-> Reverse-wraparound Mode
|
||||
\*(Ps = \*4\*6 \(-> Start Logging
|
||||
\*(Ps = \*4\*7 \(-> Use Alternate Screen Buffer
|
||||
\*(Ps = \*1\*0\*0\*0 \(-> Send VT200 Mouse Row & Column on Button Press
|
||||
\*(Ps = \*1\*0\*0\*3 \(-> Send VT200 Hilite Mouse Row & Column on Button Press
|
||||
.IP \\*(Es\\*([[\\*?\\*(Ps\|\\*l
|
||||
DEC Private Mode Reset (DECRST)
|
||||
\*(Ps = \*1 \(-> Normal Cursor Keys (DECCKM)
|
||||
\*(Ps = \*3 \(-> 80 Column Mode (DECCOLM)
|
||||
\*(Ps = \*4 \(-> Jump (Fast) Scroll (DECSCLM)
|
||||
\*(Ps = \*5 \(-> Normal Video (DECSCNM)
|
||||
\*(Ps = \*6 \(-> Normal Cursor Mode (DECOM)
|
||||
\*(Ps = \*7 \(-> No Wraparound Mode (DECAWM)
|
||||
\*(Ps = \*8 \(-> No Auto-repeat Keys (DECARM)
|
||||
\*(Ps = \*9 \(-> Don't Send Mouse Row & Column on Button Press
|
||||
\*(Ps = \*4\*0 \(-> Disallow 80 \z\(<-\(-> 132 Mode
|
||||
\*(Ps = \*4\*1 \(-> No \fIcurses\fP(5) fix
|
||||
\*(Ps = \*4\*4 \(-> Turn Off Margin Bell
|
||||
\*(Ps = \*4\*5 \(-> No Reverse-wraparound Mode
|
||||
\*(Ps = \*4\*6 \(-> Stop Logging
|
||||
\*(Ps = \*4\*7 \(-> Use Normal Screen Buffer
|
||||
\*(Ps = \*1\*0\*0\*0 \(-> Don't Send Mouse Row & Column on Button Press
|
||||
\*(Ps = \*1\*0\*0\*3 \(-> Don't Send Mouse Row & Column on Button Press
|
||||
.IP \\*(Es\\*([[\\*?\\*(Ps\|\\*r
|
||||
Restore DEC Private Mode
|
||||
\*(Ps = \*1 \(-> Normal/Application Cursor Keys (DECCKM)
|
||||
\*(Ps = \*3 \(-> 80/132 Column Mode (DECCOLM)
|
||||
\*(Ps = \*4 \(-> Jump (Fast)/Smooth (Slow) Scroll (DECSCLM)
|
||||
\*(Ps = \*5 \(-> Normal/Reverse Video (DECSCNM)
|
||||
\*(Ps = \*6 \(-> Normal/Origin Cursor Mode (DECOM)
|
||||
\*(Ps = \*7 \(-> No Wraparound/Wraparound Mode (DECAWM)
|
||||
\*(Ps = \*8 \(-> Auto-repeat/No Auto-repeat Keys (DECARM)
|
||||
\*(Ps = \*9 \(-> Don't Send/Send MIT Mouse Row & Column on Button Press
|
||||
\*(Ps = \*4\*0 \(-> Disallow/Allow 80 \z\(<-\(-> 132 Mode
|
||||
\*(Ps = \*4\*1 \(-> Off/On \fIcurses\fP(5) fix
|
||||
\*(Ps = \*4\*4 \(-> Turn Off/On Margin Bell
|
||||
\*(Ps = \*4\*5 \(-> No Reverse-wraparound/Reverse-wraparound Mode
|
||||
\*(Ps = \*4\*6 \(-> Stop/Start Logging
|
||||
\*(Ps = \*4\*7 \(-> Use Normal/Alternate Screen Buffer
|
||||
\*(Ps = \*1\*0\*0\*0 \(-> Don't Send/Send VT220 Mouse Row & Column on Button Press
|
||||
\*(Ps = \*1\*0\*0\*3 \(-> Don't Send/Send VT220 Hilite Mouse Row & Column on Button Press
|
||||
.IP \\*(Es\\*([[\\*?\\*(Ps\|\\*s
|
||||
Save DEC Private Mode
|
||||
\*(Ps = \*1 \(-> Normal/Application Cursor Keys (DECCKM)
|
||||
\*(Ps = \*3 \(-> 80/132 Column Mode (DECCOLM)
|
||||
\*(Ps = \*4 \(-> Jump (Fast)/Smooth (Slow) Scroll (DECSCLM)
|
||||
\*(Ps = \*5 \(-> Normal/Reverse Video (DECSCNM)
|
||||
\*(Ps = \*6 \(-> Normal/Origin Cursor Mode (DECOM)
|
||||
\*(Ps = \*7 \(-> No Wraparound/Wraparound Mode (DECAWM)
|
||||
\*(Ps = \*8 \(-> Auto-repeat/No Auto-repeat Keys (DECARM)
|
||||
\*(Ps = \*9 \(-> Don't Send/Send MIT Mouse Row & Column on Button Press
|
||||
\*(Ps = \*4\*0 \(-> Disallow/Allow 80 \z\(<-\(-> 132 Mode
|
||||
\*(Ps = \*4\*1 \(-> Off/On \fIcurses\fP(5) fix
|
||||
\*(Ps = \*4\*4 \(-> Turn Off/On Margin Bell
|
||||
\*(Ps = \*4\*5 \(-> No Reverse-wraparound/Reverse-wraparound Mode
|
||||
\*(Ps = \*4\*6 \(-> Stop/Start Logging
|
||||
\*(Ps = \*4\*7 \(-> Use Normal/Alternate Screen Buffer
|
||||
\*(Ps = \*1\*0\*0\*0 \(-> Don't Send/Send VT220 Mouse Row & Column on Button Press
|
||||
\*(Ps = \*1\*0\*0\*3 \(-> Don't Send/Send VT220 Hilite Mouse Row & Column on Button Press
|
||||
.IP \\*(Es\\*]\\*(Ps\|\\*;\\*(Pt\|\\*(Be
|
||||
Set Text Parameters
|
||||
\*(Ps = \*0 \(-> Change Icon Name and Window Title to \*(Pt
|
||||
\*(Ps = \*1 \(-> Change Icon Name to \*(Pt
|
||||
\*(Ps = \*2 \(-> Change Window Title to \*(Pt
|
||||
\*(Ps = \*4\*6 \(-> Change Log File to \*(Pt
|
||||
.IP \\*(Es\\*c
|
||||
Full Reset (RIS)
|
||||
.IP \\*(Es\\*n
|
||||
Locking Shift Select of G2 Character Set (LS2)
|
||||
.IP \\*(Es\\*o
|
||||
Locking Shift Select of G3 Character Set (LS3)
|
||||
.Ed
|
||||
.SH
|
||||
Tektronix 4015 Mode
|
||||
.ds RH Tektronix 4015 Mode
|
||||
.LP
|
||||
Most of these sequences are standard Tektronix 4015 control sequences.
|
||||
The major features missing are the alternate (APL) character set and
|
||||
the write-thru and defocused modes.
|
||||
.St
|
||||
.IP \\*(Be
|
||||
Bell (Ctrl-G)
|
||||
.IP \\*(Bs
|
||||
Backspace (Ctrl-H)
|
||||
.IP \\*(Ta
|
||||
Horizontal Tab (Ctrl-I)
|
||||
.IP \\*(Lf
|
||||
Line Feed or New Line (Ctrl-J)
|
||||
.IP \\*(Vt
|
||||
Vertical Tab (Ctrl-K)
|
||||
.IP \\*(Ff
|
||||
Form Feed or New Page (Ctrl-L)
|
||||
.IP \\*(Cr
|
||||
Carriage Return (Ctrl-M)
|
||||
.IP \\*(Es\\*(Et
|
||||
Switch to VT102 Mode
|
||||
.IP \\*(Es\\*(En
|
||||
Return Terminal Status
|
||||
.IP \\*(Es\\*(Lf
|
||||
PAGE (Clear Screen)
|
||||
.IP \\*(Es\\*(Eb
|
||||
COPY (Save Tektronix Codes to File)
|
||||
.IP \\*(Es\\*(Ca
|
||||
Bypass Condition
|
||||
.IP \\*(Es\\*(Su
|
||||
GIN mode
|
||||
.IP \\*(Es\\*(Fs
|
||||
Special Point Plot Mode
|
||||
.IP \\*(Es\\*(Gs
|
||||
Graph Mode (same as \*(Gs)
|
||||
.IP \\*(Es\\*(Rs
|
||||
Incremental Plot Mode (same as \*(Rs)
|
||||
.IP \\*(Es\\*(Us
|
||||
Alpha Mode (same as \*(Us)
|
||||
.IP \\*(Es\\*8
|
||||
Select Large Character Set
|
||||
.IP \\*(Es\\*9
|
||||
Select #2 Character Set
|
||||
.IP \\*(Es\\*:
|
||||
Select #3 Character Set
|
||||
.IP \\*(Es\\*;
|
||||
Select Small Character Set
|
||||
.IP \\*(Es\\*]\\*(Ps\|\\*;\\*(Pt\|\\*(Be
|
||||
Set Text Parameters
|
||||
\*(Ps = \*0 \(-> Change Icon Name and Window Title to \*(Pt
|
||||
\*(Ps = \*1 \(-> Change Icon Name to \*(Pt
|
||||
\*(Ps = \*2 \(-> Change Window Title to \*(Pt
|
||||
\*(Ps = \*4\*6 \(-> Change Log File to \*(Pt
|
||||
.IP \\*(Es\\*`
|
||||
Normal Z Axis and Normal (solid) Vectors
|
||||
.IP \\*(Es\\*a
|
||||
Normal Z Axis and Dotted Line Vectors
|
||||
.IP \\*(Es\\*b
|
||||
Normal Z Axis and Dot-Dashed Vectors
|
||||
.IP \\*(Es\\*c
|
||||
Normal Z Axis and Short-Dashed Vectors
|
||||
.IP \\*(Es\\*d
|
||||
Normal Z Axis and Long-Dashed Vectors
|
||||
.IP \\*(Es\\*h
|
||||
Defocused Z Axis and Normal (solid) Vectors
|
||||
.IP \\*(Es\\*i
|
||||
Defocused Z Axis and Dotted Line Vectors
|
||||
.IP \\*(Es\\*j
|
||||
Defocused Z Axis and Dot-Dashed Vectors
|
||||
.IP \\*(Es\\*k
|
||||
Defocused Z Axis and Short-Dashed Vectors
|
||||
.IP \\*(Es\\*l
|
||||
Defocused Z Axis and Long-Dashed Vectors
|
||||
.IP \\*(Es\\*p
|
||||
Write-Thru Mode and Normal (solid) Vectors
|
||||
.IP \\*(Es\\*q
|
||||
Write-Thru Mode and Dotted Line Vectors
|
||||
.IP \\*(Es\\*r
|
||||
Write-Thru Mode and Dot-Dashed Vectors
|
||||
.IP \\*(Es\\*s
|
||||
Write-Thru Mode and Short-Dashed Vectors
|
||||
.IP \\*(Es\\*t
|
||||
Write-Thru Mode and Long-Dashed Vectors
|
||||
.IP \\*(Fs
|
||||
Point Plot Mode
|
||||
.IP \\*(Gs
|
||||
Graph Mode
|
||||
.IP \\*(Rs
|
||||
Incremental Plot Mode
|
||||
.IP \\*(Us
|
||||
Alpha Mode
|
||||
.Ed
|
||||
220
Linux-0.11/info/xterm-seqs2.txt
Normal file
220
Linux-0.11/info/xterm-seqs2.txt
Normal file
@@ -0,0 +1,220 @@
|
||||
Date: 12 Sep 89 17:44:43 GMT
|
||||
From: crdgw1!montnaro@uunet.uu.net (Skip Montanaro)
|
||||
Organization: GE Corporate Research & Development, Schenectady, NY
|
||||
Subject: XTerm Escape Sequences (X11 Version)
|
||||
To: xpert@expo.lcs.mit.edu
|
||||
|
||||
I rummaged around through the xterm code and came up with the following
|
||||
stuff. No guarantees. I'm headed out of town for a couple days and thought
|
||||
it better to get it out than let it get stale. Comments, bugs, and other
|
||||
notes are welcome. Somebody else can convert it to troff. I prefer LaTeX.
|
||||
:-) I will try and get to the Tek mode stuff when I return, although I doubt
|
||||
it's changed much from X10 XTerm.
|
||||
|
||||
I gleaned the basic stuff out of the charproc.c code, by hacking VTparse()
|
||||
so it spit out leaves of the parse tree. I was mildly surprised to see
|
||||
things like "ESC # BEL" turn up.
|
||||
|
||||
For most folks, the most interesting stuff will probably be "ESC ] Ps ND
|
||||
string NP" down near the bottom. That's what you use to change the icon and
|
||||
window labels, and the log file name. Most other things appear the same as
|
||||
the X10 documentation, although a few DEC-ish mode parameters (42, 43, 48, &
|
||||
49) seem to have disappeared.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
BEL Bell (Ctrl-G)
|
||||
BS Backspace (Ctrl-H)
|
||||
HT Horizontal Tab (Ctrl-I)
|
||||
NL Line Feed or New Line (Ctrl-J)
|
||||
VT Vertical Tab (Ctrl-K)
|
||||
NP Form Feed or New Page (Ctrl-L)
|
||||
CR Carriage Return (Ctrl-M)
|
||||
SO Shift Out (Ctrl-N) -> Switch to Alternate Character Set
|
||||
SI Shift In (Ctrl-O) -> Switch to Standard Character Set
|
||||
ESC BEL (Same as non-escaped BEL)
|
||||
ESC BS (Same as non-escaped BS)
|
||||
ESC HT (Same as non-escaped HT)
|
||||
ESC NL (Same as non-escaped NL)
|
||||
ESC VT (Same as non-escaped VT)
|
||||
ESC NP (Same as non-escaped NP)
|
||||
ESC CR (Same as non-escaped CR)
|
||||
ESC SO (Same as non-escaped SO)
|
||||
ESC SI (Same as non-escaped SI)
|
||||
ESC # BEL (Same as non-escaped BEL)
|
||||
ESC # BS (Same as non-escaped BS)
|
||||
ESC # HT (Same as non-escaped HT)
|
||||
ESC # NL (Same as non-escaped NL)
|
||||
ESC # VT (Same as non-escaped VT)
|
||||
ESC # NP (Same as non-escaped NP)
|
||||
ESC # CR (Same as non-escaped CR)
|
||||
ESC # SO (Same as non-escaped SO)
|
||||
ESC # SI (Same as non-escaped SI)
|
||||
ESC # 8 DEC Screen Alignment Test (DECALN)
|
||||
ESC ( BEL (Same as non-escaped BEL)
|
||||
ESC ( BS (Same as non-escaped BS)
|
||||
ESC ( HT (Same as non-escaped HT)
|
||||
ESC ( NL (Same as non-escaped NL)
|
||||
ESC ( VT (Same as non-escaped VT)
|
||||
ESC ( NP (Same as non-escaped NP)
|
||||
ESC ( CR (Same as non-escaped CR)
|
||||
ESC ( SO (Same as non-escaped SO)
|
||||
ESC ( SI (Same as non-escaped SI)
|
||||
ESC ( C Select G0 Character Set (SCS)
|
||||
C = 0 -> Special Character and Line Drawing Set
|
||||
C = 1 -> Alternate Character ROM Standard Set
|
||||
C = 2 -> Alternate Character ROM Special Set
|
||||
C = A -> United Kingdom (UK)
|
||||
C = B -> United States (USASCII)
|
||||
ESC ) C Select G1 Character Set (SCS)
|
||||
C takes same values as above
|
||||
ESC * C Select G2 Character Set (SCS)
|
||||
C takes same values as above
|
||||
ESC + C Select G3 Character Set (SCS)
|
||||
C takes same values as above
|
||||
ESC 7 Save Cursor (DECSC)
|
||||
ESC 8 Restore Cursor (DECRC)
|
||||
ESC = Application Keypad (DECPAM)
|
||||
ESC > Normal Keypad (DECNM)
|
||||
ESC D Index (IND)
|
||||
ESC E Next Line (NEL)
|
||||
ESC H Tab Set (HTS)
|
||||
ESC M Reverse Index (RI)
|
||||
ESC N Single Shift Select of G2 Character Set (SS2)
|
||||
ESC O Single Shift Select of G3 Character Set (SS3)
|
||||
ESC [ BEL (Same as non-escaped BEL)
|
||||
ESC [ BS (Same as non-escaped BS)
|
||||
ESC [ HT (Same as non-escaped HT)
|
||||
ESC [ NL (Same as non-escaped NL)
|
||||
ESC [ VT (Same as non-escaped VT)
|
||||
ESC [ NP (Same as non-escaped NP)
|
||||
ESC [ CR (Same as non-escaped CR)
|
||||
ESC [ SO (Same as non-escaped SO)
|
||||
ESC [ SI (Same as non-escaped SI)
|
||||
ESC [ ? BEL (Same as non-escaped BEL)
|
||||
ESC [ ? BS (Same as non-escaped BS)
|
||||
ESC [ ? HT (Same as non-escaped HT)
|
||||
ESC [ ? NL (Same as non-escaped NL)
|
||||
ESC [ ? VT (Same as non-escaped VT)
|
||||
ESC [ ? NP (Same as non-escaped NP)
|
||||
ESC [ ? CR (Same as non-escaped CR)
|
||||
ESC [ ? SO (Same as non-escaped SO)
|
||||
ESC [ ? SI (Same as non-escaped SI)
|
||||
ESC [ ? Ps h DEC Private Mode Set (DECSET)
|
||||
Ps = 1 -> Application Cursor Keys (DECCKM)
|
||||
Ps = 2 -> Set VT52 Mode
|
||||
Ps = 3 -> 132 Column Mode (DECCOLM)
|
||||
Ps = 4 -> Smooth (Slow) Scroll (DECSCLM)
|
||||
Ps = 5 -> Reverse Video (DECSCNM)
|
||||
Ps = 6 -> Origin Mode (DECOM)
|
||||
Ps = 7 -> Wraparound Mode (DECAWM)
|
||||
Ps = 8 -> Auto-Repeat Keys (DECARM)
|
||||
Ps = 9 -> Send MIT Mouse Row & Column on Button
|
||||
Press
|
||||
Ps = 38 -> Enter Tektronix Mode (DECTEK)
|
||||
Ps = 40 -> Allow 80 <-> 132 Mode
|
||||
Ps = 41 -> curses(5) fix
|
||||
Ps = 44 -> Turn on Margin Bell
|
||||
Ps = 45 -> Reverse-wraparound Mode
|
||||
Ps = 46 -> Start Logging
|
||||
Ps = 47 -> Use Alternate Screen Buffer
|
||||
Ps = 1000 -> xtem bogus sequence (???)
|
||||
Ps = 1001 -> xtem sequence w/hilite tracking (???)
|
||||
ESC [ ? Ps l DEC Private Mode Reset (DECRST)
|
||||
Ps = 1 -> Normal Cursor Keys (DECCKM)
|
||||
Ps = 3 -> 80 Column Mode (DECCOLM)
|
||||
Ps = 4 -> Jump (Fast) Scroll (DECSCLM)
|
||||
Ps = 5 -> Normal Video (DECSCNM)
|
||||
Ps = 6 -> Normal Cursor Mode (DECOM)
|
||||
Ps = 7 -> No Wraparound Mode (DECAWM)
|
||||
Ps = 8 -> No Auto-Repeat Keys (DECARM)
|
||||
Ps = 9 -> Don't Send MIT Mouse Row & Column on
|
||||
Button Press
|
||||
Ps = 40 -> Don't Allow 80 <-> 132 Mode
|
||||
Ps = 41 -> No curses(5) fix
|
||||
Ps = 44 -> Turn Off Margin Bell
|
||||
Ps = 45 -> No Reverse-wraparound Mode
|
||||
Ps = 46 -> Stop Logging
|
||||
Ps = 47 -> Use Normal Screen Buffer
|
||||
Ps = 1000 -> xtem bogus sequence (???)
|
||||
Ps = 1001 -> xtem sequence w/hilite tracking (???)
|
||||
ESC [ ? Ps r Restore DEC Private Mode
|
||||
Ps = 1 -> Normal/Application Cursor Keys (DECCKM)
|
||||
Ps = 3 -> 80/132 Column Mode (DECCOLM)
|
||||
Ps = 4 -> Jump (Fast)/Smooth (Slow) Scroll (DECSCLM)
|
||||
Ps = 5 -> Normal/Reverse Video (DECSCNM)
|
||||
Ps = 6 -> Normal/Origin Cursor Mode (DECOM)
|
||||
Ps = 7 -> No Wraparound/Wraparound Mode (DECAWM)
|
||||
Ps = 8 -> Auto-repeat/No Auto-repeat Keys (DECARM)
|
||||
Ps = 9 -> Don't Send/Send MIT Mouse Row & Column on
|
||||
Button Press
|
||||
Ps = 40 -> Disallow/Allow 80 <-> 132 Mode
|
||||
Ps = 41 -> Off/On curses(5) fix
|
||||
Ps = 44 -> Turn Off/On Margin Bell
|
||||
Ps = 45 -> No Reverse-wraparound/Reverse-wraparound
|
||||
Mode
|
||||
Ps = 46 -> Stop/Start Logging
|
||||
Ps = 47 -> Use Normal/Alternate Screen Buffer
|
||||
Ps = 1000 -> mouse bogus sequence (???)
|
||||
Ps = 1001 -> mouse bogus sequence (???)
|
||||
ESC [ ? Ps s Save DEC Private Mode
|
||||
Same P's as Restore DEC Private Mode
|
||||
ESC [ Ps @ Insert Ps (Blank) Character(s) (default = 1) (ICH)
|
||||
ESC [ Ps A Cursor Up Ps Times (default = 1) (CUU)
|
||||
ESC [ Ps B Cursor Down Ps Times (default = 1) (CUD)
|
||||
ESC [ Ps C Cursor Forward Ps Times (default = 1) (CUF)
|
||||
ESC [ Ps D Cursor Backward Ps Times (default = 1) (CUB)
|
||||
ESC [ Ps ; Ps H Cursor Position [row;column] (default = [1,1]) (CUP)
|
||||
ESC [ Ps J Erase in Display
|
||||
Ps = 0 -> Clear Below (default)
|
||||
Ps = 1 -> Clear Above
|
||||
Ps = 2 -> Clear All
|
||||
ESC [ Ps K Erase in Line
|
||||
Ps = 0 -> Clear to Right (default)
|
||||
Ps = 1 -> Clear to Left
|
||||
Ps = 2 -> Clear All
|
||||
ESC [ Ps L Insert Ps lines (default = 1) (IL)
|
||||
ESC [ Ps M Delete Ps lines (default = 1) (DL)
|
||||
ESC [ Ps P Delete Ps Characters (default = 1) (DCH)
|
||||
ESC [ T Track Mouse (???)
|
||||
ESC [ Ps c Device Attributes (DA1)
|
||||
ESC [ Ps ; Ps f Cursor Position [row;column] (default = [1,1]) (HVP)
|
||||
ESC [ Ps g Tab Clear
|
||||
Ps = 0 -> Clear Current Column (default)
|
||||
Ps = 3 -> Clear All
|
||||
ESC [ Ps h Mode Set (SET)
|
||||
Ps = 4 -> Insert Mode (IRM)
|
||||
Ps = 20 -> Automatic Linefeed (LNM)
|
||||
ESC [ Ps l Mode Reset (RST)
|
||||
Ps = 4 -> Insert Mode (IRM)
|
||||
Ps = 20 -> Automatic Linefeed (LNM)
|
||||
ESC [ Pm m Character Attributes (SGR)
|
||||
Ps = 0 -> Normal (default)
|
||||
Ps = 1 -> Blink (appears as Bold)
|
||||
Ps = 4 -> Underscore
|
||||
Ps = 5 -> Bold
|
||||
Ps = 7 -> Inverse
|
||||
ESC [ Ps n Device Status Report (DSR)
|
||||
Ps = 5 -> Status Report ESC [ 0 n -> OK
|
||||
Ps = 6 -> Report Cursor Position (CPR) [row;column]
|
||||
as ESC [ r ; c R
|
||||
ESC [ Ps ; Ps r Set Scrolling Region [top;bottom] (default = full size
|
||||
of window) (DECSTBM)
|
||||
ESC [ Ps x Request Terminal Parameters (DECREQTPARM)
|
||||
ESC ] Ps ND string NP OSC Mode
|
||||
ND can be any non-digit Character (it's discarded)
|
||||
NP can be any non-printing Character (it's discarded)
|
||||
string can be any ASCII printable string
|
||||
(max 511 characters)
|
||||
Ps = 0 -> use string as a new icon name and title
|
||||
Ps = 1 -> use string is a new icon name only
|
||||
Ps = 2 -> use string is a new title only
|
||||
Ps = 46 -> use string as a new log file name
|
||||
|
||||
ESC c Full Reset
|
||||
ESC n Switch to Alternate Character Set LS2
|
||||
ESC o Switch to Alternate Character Set LS3
|
||||
ESC | Switch to Alternate Graphics(?) Set LS3R
|
||||
ESC } Switch to Alternate Graphics(?) Set LS2R
|
||||
ESC ~ Switch to Alternate Graphics(?) Set LS1R
|
||||
--
|
||||
Skip Montanaro (montanaro@crdgw1.ge.com)
|
||||
BIN
Linux-0.11/patchs/buffer.c.Z
Normal file
BIN
Linux-0.11/patchs/buffer.c.Z
Normal file
Binary file not shown.
89
Linux-0.11/patchs/build.c.patch
Normal file
89
Linux-0.11/patchs/build.c.patch
Normal file
@@ -0,0 +1,89 @@
|
||||
*** build.c.orig Sat Nov 9 21:50:51 1991
|
||||
--- build.c Sat Nov 9 22:23:13 1991
|
||||
***************
|
||||
*** 17,24 ****
|
||||
--- 17,27 ----
|
||||
*/
|
||||
|
||||
#include <stdio.h> /* fprintf */
|
||||
+ #include <string.h>
|
||||
#include <stdlib.h> /* contains exit */
|
||||
#include <sys/types.h> /* unistd.h needs this */
|
||||
+ #include <sys/stat.h>
|
||||
+ #include <linux/fs.h>
|
||||
#include <unistd.h> /* contains read/write */
|
||||
#include <fcntl.h>
|
||||
|
||||
***************
|
||||
*** 25,30 ****
|
||||
--- 28,36 ----
|
||||
#define MINIX_HEADER 32
|
||||
#define GCC_HEADER 1024
|
||||
|
||||
+ #define DEFAULT_MAJOR_ROOT 3
|
||||
+ #define DEFAULT_MINOR_ROOT 6
|
||||
+
|
||||
/* max nr of sectors of setup: don't change unless you also change
|
||||
* bootsect etc */
|
||||
#define SETUP_SECTS 4
|
||||
***************
|
||||
*** 46,54 ****
|
||||
{
|
||||
int i,c,id;
|
||||
char buf[1024];
|
||||
|
||||
! if (argc != 4)
|
||||
usage();
|
||||
for (i=0;i<sizeof buf; i++) buf[i]=0;
|
||||
if ((id=open(argv[1],O_RDONLY,0))<0)
|
||||
die("Unable to open 'boot'");
|
||||
--- 52,85 ----
|
||||
{
|
||||
int i,c,id;
|
||||
char buf[1024];
|
||||
+ char major_root, minor_root;
|
||||
+ struct stat sb;
|
||||
|
||||
! if ((argc != 4) && (argc != 5))
|
||||
usage();
|
||||
+ if (argc == 5) {
|
||||
+ if (strcmp(argv[4], "FLOPPY")) {
|
||||
+ if (stat(argv[4], &sb)) {
|
||||
+ perror(argv[4]);
|
||||
+ die("Couldn't stat root device.");
|
||||
+ }
|
||||
+ major_root = MAJOR(sb.st_rdev);
|
||||
+ minor_root = MINOR(sb.st_rdev);
|
||||
+ } else {
|
||||
+ major_root = 0;
|
||||
+ minor_root = 0;
|
||||
+ }
|
||||
+ } else {
|
||||
+ major_root = DEFAULT_MAJOR_ROOT;
|
||||
+ minor_root = DEFAULT_MINOR_ROOT;
|
||||
+ }
|
||||
+ fprintf(stderr, "Root device is (%d, %d)\n", major_root, minor_root);
|
||||
+ if ((major_root != 2) && (major_root != 3) &&
|
||||
+ (major_root != 0)) {
|
||||
+ fprintf(stderr, "Illegal root device (major = %d)\n",
|
||||
+ major_root);
|
||||
+ die("Bad root device --- major #");
|
||||
+ }
|
||||
for (i=0;i<sizeof buf; i++) buf[i]=0;
|
||||
if ((id=open(argv[1],O_RDONLY,0))<0)
|
||||
die("Unable to open 'boot'");
|
||||
***************
|
||||
*** 72,77 ****
|
||||
--- 103,110 ----
|
||||
die("Boot block must be exactly 512 bytes");
|
||||
if ((*(unsigned short *)(buf+510)) != 0xAA55)
|
||||
die("Boot block hasn't got boot flag (0xAA55)");
|
||||
+ buf[508] = (char) minor_root;
|
||||
+ buf[509] = (char) major_root;
|
||||
i=write(1,buf,512);
|
||||
if (i!=512)
|
||||
die("Write call failed");
|
||||
|
||||
|
||||
|
||||
|
||||
195
Linux-0.11/patchs/cons.cdif
Normal file
195
Linux-0.11/patchs/cons.cdif
Normal file
@@ -0,0 +1,195 @@
|
||||
*** cons.11 Tue Dec 24 09:16:31 1991
|
||||
--- console.c Tue Dec 24 08:20:11 1991
|
||||
***************
|
||||
*** 76,81 ****
|
||||
--- 76,82 ----
|
||||
unsigned char vc_def_attr;
|
||||
unsigned long vc_ques;
|
||||
unsigned long vc_state;
|
||||
+ unsigned long vc_restate;
|
||||
unsigned long vc_origin; /* Used for EGA/VGA fast scroll */
|
||||
unsigned long vc_scr_end; /* Used for EGA/VGA fast scroll */
|
||||
unsigned long vc_pos;
|
||||
***************
|
||||
*** 101,106 ****
|
||||
--- 102,108 ----
|
||||
#define x (vc_cons[currcons].vc_x)
|
||||
#define y (vc_cons[currcons].vc_y)
|
||||
#define state (vc_cons[currcons].vc_state)
|
||||
+ #define restate (vc_cons[currcons].vc_restate)
|
||||
#define npar (vc_cons[currcons].vc_npar)
|
||||
#define par (vc_cons[currcons].vc_par)
|
||||
#define ques (vc_cons[currcons].vc_ques)
|
||||
***************
|
||||
*** 370,375 ****
|
||||
--- 372,387 ----
|
||||
}
|
||||
}
|
||||
|
||||
+ static char csi_graph(int currcons, char ch )
|
||||
+ {
|
||||
+ char *val, *ac=
|
||||
+ "0\333a\261h\040I\017`\004f\370g\361j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263~\025";
|
||||
+ if (val = strchr(ac,ch))
|
||||
+ return(*(val+1));
|
||||
+ return(0);
|
||||
+
|
||||
+ }
|
||||
+
|
||||
static inline void set_cursor(int currcons)
|
||||
{
|
||||
if (currcons != fg_console)
|
||||
***************
|
||||
*** 505,511 ****
|
||||
void con_write(struct tty_struct * tty)
|
||||
{
|
||||
int nr;
|
||||
! char c;
|
||||
|
||||
int currcons;
|
||||
|
||||
--- 517,523 ----
|
||||
void con_write(struct tty_struct * tty)
|
||||
{
|
||||
int nr;
|
||||
! char c, ch = 0;
|
||||
|
||||
int currcons;
|
||||
|
||||
***************
|
||||
*** 564,570 ****
|
||||
sysbeep();
|
||||
break;
|
||||
case 1:
|
||||
! state=0;
|
||||
if (c=='[')
|
||||
state=2;
|
||||
else if (c=='E')
|
||||
--- 576,582 ----
|
||||
sysbeep();
|
||||
break;
|
||||
case 1:
|
||||
! state=restate;
|
||||
if (c=='[')
|
||||
state=2;
|
||||
else if (c=='E')
|
||||
***************
|
||||
*** 575,584 ****
|
||||
lf(currcons);
|
||||
else if (c=='Z')
|
||||
respond(currcons,tty);
|
||||
! else if (x=='7')
|
||||
save_cur(currcons);
|
||||
! else if (x=='8')
|
||||
restore_cur(currcons);
|
||||
break;
|
||||
case 2:
|
||||
for(npar=0;npar<NPAR;npar++)
|
||||
--- 587,598 ----
|
||||
lf(currcons);
|
||||
else if (c=='Z')
|
||||
respond(currcons,tty);
|
||||
! else if (c=='7')
|
||||
save_cur(currcons);
|
||||
! else if (c=='8')
|
||||
restore_cur(currcons);
|
||||
+ else if (c == '(' || c == ')')
|
||||
+ state = 6;
|
||||
break;
|
||||
case 2:
|
||||
for(npar=0;npar<NPAR;npar++)
|
||||
***************
|
||||
*** 600,606 ****
|
||||
break;
|
||||
} else state=4;
|
||||
case 4:
|
||||
! state=0;
|
||||
switch(c) {
|
||||
case 'G': case '`':
|
||||
if (par[0]) par[0]--;
|
||||
--- 614,620 ----
|
||||
break;
|
||||
} else state=4;
|
||||
case 4:
|
||||
! state=restate;
|
||||
switch(c) {
|
||||
case 'G': case '`':
|
||||
if (par[0]) par[0]--;
|
||||
***************
|
||||
*** 680,685 ****
|
||||
--- 694,751 ----
|
||||
case 5:
|
||||
/* Function Key */
|
||||
break;
|
||||
+ case 6:
|
||||
+ if (c == '0')
|
||||
+ { state =
|
||||
+ restate = 7;
|
||||
+ }
|
||||
+ else
|
||||
+ if (c == 'B')
|
||||
+ { state =
|
||||
+ restate = 0;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 7:
|
||||
+ if (c == 15)
|
||||
+ { state =
|
||||
+ restate = 9;
|
||||
+ break;
|
||||
+ }
|
||||
+ else
|
||||
+ ch = csi_graph(currcons,c);
|
||||
+ case 9:
|
||||
+ if (c == 14)
|
||||
+ { state =
|
||||
+ restate = 7;
|
||||
+ break;
|
||||
+ }
|
||||
+ else if (c == 27)
|
||||
+ { state = 1;
|
||||
+ break;
|
||||
+ }
|
||||
+ else
|
||||
+ if (state == 9)
|
||||
+ { if (c>31 && c<127)
|
||||
+ ch = c;
|
||||
+ else
|
||||
+ break;
|
||||
+ }
|
||||
+ case 10:
|
||||
+ if (ch)
|
||||
+ if (x>=video_num_columns) {
|
||||
+ x -= video_num_columns;
|
||||
+ pos -= video_size_row;
|
||||
+ lf(currcons);
|
||||
+ }
|
||||
+ __asm__("movb _myattr,%%ah\n\t"
|
||||
+ "movw %%ax,%1\n\t"
|
||||
+ ::"a" (ch),"m" (*(short *)pos)
|
||||
+ :"ax");
|
||||
+ pos += 2;
|
||||
+ x++;
|
||||
+ break;
|
||||
+
|
||||
+
|
||||
}
|
||||
}
|
||||
set_cursor(currcons);
|
||||
***************
|
||||
*** 765,771 ****
|
||||
bottom = video_num_lines;
|
||||
attr=0x07;
|
||||
def_attr=0x07;
|
||||
! state=0;
|
||||
ques = 0;
|
||||
iscolor = 0;
|
||||
|
||||
--- 831,837 ----
|
||||
bottom = video_num_lines;
|
||||
attr=0x07;
|
||||
def_attr=0x07;
|
||||
! restate = state=0;
|
||||
ques = 0;
|
||||
iscolor = 0;
|
||||
|
||||
329
Linux-0.11/patchs/gawk-diffs
Normal file
329
Linux-0.11/patchs/gawk-diffs
Normal file
@@ -0,0 +1,329 @@
|
||||
*** 1.1 1991/12/11 16:13:13
|
||||
--- Makefile 1991/12/11 17:07:11
|
||||
***************
|
||||
*** 64,71 ****
|
||||
# MISSING = -DSPRINTF_INT -DBLKSIZE_MISSING -DSTRERROR_MISSING -DRANDOM_MISSING
|
||||
|
||||
# VAX running Ultrix 3.x
|
||||
- MISSING = -DSTRERROR_MISSING
|
||||
|
||||
# A generic 4.2 BSD machine
|
||||
# (eliminate GETOPT_MISSING for 4.3 release)
|
||||
# (eliminate STRCASE_MISSING and TMPNAM_MISSING for Tahoe release)
|
||||
--- 64,75 ----
|
||||
# MISSING = -DSPRINTF_INT -DBLKSIZE_MISSING -DSTRERROR_MISSING -DRANDOM_MISSING
|
||||
|
||||
# VAX running Ultrix 3.x
|
||||
|
||||
+ # LINUX
|
||||
+ MISSING = -DSPRINTF_INT -DTMPNAM_MISSING -DBLKSIZE_MISSING -DSTRCASE_MISSING \
|
||||
+ -Dalloca=__builtin_alloca -DGCVT_MISSING -DRANDOM_MISSING \
|
||||
+ -DBCOPY_MISSING -DSTRTOD_MISSING
|
||||
+
|
||||
# A generic 4.2 BSD machine
|
||||
# (eliminate GETOPT_MISSING for 4.3 release)
|
||||
# (eliminate STRCASE_MISSING and TMPNAM_MISSING for Tahoe release)
|
||||
***************
|
||||
*** 80,92 ****
|
||||
|
||||
# Comment out the next line if you don't have gcc.
|
||||
# Also choose just one of -g and -O.
|
||||
! #CC= gcc
|
||||
|
||||
! #OPTIMIZE= -O -g
|
||||
PROFILE= #-pg
|
||||
DEBUG= #-DDEBUG #-DMEMDEBUG #-DFUNC_TRACE #-DMPROF
|
||||
DEBUGGER= #-g -Bstatic
|
||||
! WARN= #-W -Wunused -Wimplicit -Wreturn-type -Wcomment # for gcc only
|
||||
|
||||
# Parser to use on grammar -- if you don't have bison use the first one
|
||||
#PARSER = yacc
|
||||
--- 84,96 ----
|
||||
|
||||
# Comment out the next line if you don't have gcc.
|
||||
# Also choose just one of -g and -O.
|
||||
! CC= gcc
|
||||
|
||||
! OPTIMIZE= -O #-g
|
||||
PROFILE= #-pg
|
||||
DEBUG= #-DDEBUG #-DMEMDEBUG #-DFUNC_TRACE #-DMPROF
|
||||
DEBUGGER= #-g -Bstatic
|
||||
! WARN= -W -Wunused -Wimplicit -Wreturn-type -Wcomment # for gcc only
|
||||
|
||||
# Parser to use on grammar -- if you don't have bison use the first one
|
||||
#PARSER = yacc
|
||||
***************
|
||||
*** 154,160 ****
|
||||
|
||||
# rules to build gawk
|
||||
gawk: $(ALLOBJS) $(GNUOBJS)
|
||||
! $(CC) -o gawk $(CFLAGS) $(ALLOBJS) $(GNUOBJS) -lm
|
||||
|
||||
$(AWKOBJS): awk.h
|
||||
|
||||
--- 158,164 ----
|
||||
|
||||
# rules to build gawk
|
||||
gawk: $(ALLOBJS) $(GNUOBJS)
|
||||
! $(CC) -o gawk $(CFLAGS) $(ALLOBJS) $(GNUOBJS) #-lm
|
||||
|
||||
$(AWKOBJS): awk.h
|
||||
|
||||
*** 1.1 1991/12/11 16:18:17
|
||||
--- awk.h 1991/12/11 17:07:45
|
||||
***************
|
||||
*** 42,51 ****
|
||||
extern char *alloca();
|
||||
#endif
|
||||
#else
|
||||
extern char *alloca();
|
||||
#endif
|
||||
#ifdef SPRINTF_INT
|
||||
! extern int sprintf();
|
||||
#else /* not USG */
|
||||
/* nasty nasty berkelixm */
|
||||
#define setjmp _setjmp
|
||||
--- 42,53 ----
|
||||
extern char *alloca();
|
||||
#endif
|
||||
#else
|
||||
+ #ifndef alloca
|
||||
extern char *alloca();
|
||||
#endif
|
||||
+ #endif
|
||||
#ifdef SPRINTF_INT
|
||||
! /* extern int sprintf(); XXX LINUX */
|
||||
#else /* not USG */
|
||||
/* nasty nasty berkelixm */
|
||||
#define setjmp _setjmp
|
||||
***************
|
||||
*** 78,99 ****
|
||||
extern char *memset(char *, int, int);
|
||||
|
||||
/* extern int fprintf(FILE *, char *, ...); */
|
||||
! extern int fprintf();
|
||||
extern int vfprintf();
|
||||
#ifndef MSDOS
|
||||
! extern int fwrite(char *, int, int, FILE *);
|
||||
#endif
|
||||
extern int fflush(FILE *);
|
||||
extern int fclose(FILE *);
|
||||
extern int pclose(FILE *);
|
||||
#ifndef MSDOS
|
||||
! extern int fputs(char *, FILE *);
|
||||
#endif
|
||||
extern void abort();
|
||||
extern int isatty(int);
|
||||
extern void exit(int);
|
||||
extern int system(char *);
|
||||
extern int sscanf(/* char *, char *, ... */);
|
||||
|
||||
extern double atof(char *);
|
||||
extern int fstat(int, struct stat *);
|
||||
--- 80,104 ----
|
||||
extern char *memset(char *, int, int);
|
||||
|
||||
/* extern int fprintf(FILE *, char *, ...); */
|
||||
! /* extern int fprintf(); XXXL */
|
||||
extern int vfprintf();
|
||||
#ifndef MSDOS
|
||||
! /* extern int fwrite(char *, int, int, FILE *); XXXL */
|
||||
#endif
|
||||
extern int fflush(FILE *);
|
||||
extern int fclose(FILE *);
|
||||
extern int pclose(FILE *);
|
||||
#ifndef MSDOS
|
||||
! /* extern int fputs(char *, FILE *); XXXL */
|
||||
#endif
|
||||
extern void abort();
|
||||
extern int isatty(int);
|
||||
extern void exit(int);
|
||||
extern int system(char *);
|
||||
+ #if 0
|
||||
+ /* XXXL */
|
||||
extern int sscanf(/* char *, char *, ... */);
|
||||
+ #endif
|
||||
|
||||
extern double atof(char *);
|
||||
extern int fstat(int, struct stat *);
|
||||
***************
|
||||
*** 100,110 ****
|
||||
extern off_t lseek(int, off_t, int);
|
||||
extern int fseek(FILE *, long, int);
|
||||
extern int close(int);
|
||||
! extern int open();
|
||||
extern int pipe(int *);
|
||||
extern int dup2(int, int);
|
||||
#ifndef MSDOS
|
||||
! extern int unlink(char *);
|
||||
#endif
|
||||
extern int fork();
|
||||
extern int execl(/* char *, char *, ... */);
|
||||
--- 105,115 ----
|
||||
extern off_t lseek(int, off_t, int);
|
||||
extern int fseek(FILE *, long, int);
|
||||
extern int close(int);
|
||||
! /* extern int open(); XXXL */
|
||||
extern int pipe(int *);
|
||||
extern int dup2(int, int);
|
||||
#ifndef MSDOS
|
||||
! /* extern int unlink(char *); XXXL */
|
||||
#endif
|
||||
extern int fork();
|
||||
extern int execl(/* char *, char *, ... */);
|
||||
*** 1.1 1991/12/11 16:29:17
|
||||
--- awk.y 1991/12/11 17:08:04
|
||||
***************
|
||||
*** 96,102 ****
|
||||
|
||||
%type <sval> func_name
|
||||
%token <sval> FUNC_CALL NAME REGEXP
|
||||
! %token <lval> ERROR
|
||||
%token <nodeval> NUMBER YSTRING
|
||||
%token <nodetypeval> RELOP APPEND_OP
|
||||
%token <nodetypeval> ASSIGNOP MATCHOP NEWLINE CONCAT_OP
|
||||
--- 96,102 ----
|
||||
|
||||
%type <sval> func_name
|
||||
%token <sval> FUNC_CALL NAME REGEXP
|
||||
! %token <lval> ERROR_TOK
|
||||
%token <nodeval> NUMBER YSTRING
|
||||
%token <nodetypeval> RELOP APPEND_OP
|
||||
%token <nodetypeval> ASSIGNOP MATCHOP NEWLINE CONCAT_OP
|
||||
***************
|
||||
*** 386,401 ****
|
||||
|
||||
nls
|
||||
: NEWLINE
|
||||
! { $<nodetypeval>$ = NULL; }
|
||||
| nls NEWLINE
|
||||
! { $<nodetypeval>$ = NULL; }
|
||||
;
|
||||
|
||||
opt_nls
|
||||
: /* empty */
|
||||
! { $<nodetypeval>$ = NULL; }
|
||||
| nls
|
||||
! { $<nodetypeval>$ = NULL; }
|
||||
;
|
||||
|
||||
input_redir
|
||||
--- 386,401 ----
|
||||
|
||||
nls
|
||||
: NEWLINE
|
||||
! { $<nodetypeval>$ = (NODETYPE) NULL; }
|
||||
| nls NEWLINE
|
||||
! { $<nodetypeval>$ = (NODETYPE) NULL; }
|
||||
;
|
||||
|
||||
opt_nls
|
||||
: /* empty */
|
||||
! { $<nodetypeval>$ = (NODETYPE) NULL; }
|
||||
| nls
|
||||
! { $<nodetypeval>$ = (NODETYPE) NULL; }
|
||||
;
|
||||
|
||||
input_redir
|
||||
***************
|
||||
*** 953,959 ****
|
||||
case '\\':
|
||||
if (*lexptr++ == '\0') {
|
||||
yyerror("unterminated regexp ends with \\");
|
||||
! return ERROR;
|
||||
} else if (lexptr[-1] == '\n')
|
||||
goto retry;
|
||||
break;
|
||||
--- 953,959 ----
|
||||
case '\\':
|
||||
if (*lexptr++ == '\0') {
|
||||
yyerror("unterminated regexp ends with \\");
|
||||
! return ERROR_TOK;
|
||||
} else if (lexptr[-1] == '\n')
|
||||
goto retry;
|
||||
break;
|
||||
***************
|
||||
*** 969,975 ****
|
||||
case '\0':
|
||||
lexptr--; /* so error messages work */
|
||||
yyerror("unterminated regexp");
|
||||
! return ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
--- 969,975 ----
|
||||
case '\0':
|
||||
lexptr--; /* so error messages work */
|
||||
yyerror("unterminated regexp");
|
||||
! return ERROR_TOK;
|
||||
}
|
||||
}
|
||||
}
|
||||
***************
|
||||
*** 1163,1169 ****
|
||||
case '\n':
|
||||
lexptr--;
|
||||
yyerror("unterminated string");
|
||||
! return ERROR;
|
||||
case '"':
|
||||
yylval.nodeval = make_str_node(tokstart + 1,
|
||||
lexptr-tokstart-2, esc_seen);
|
||||
--- 1163,1169 ----
|
||||
case '\n':
|
||||
lexptr--;
|
||||
yyerror("unterminated string");
|
||||
! return ERROR_TOK;
|
||||
case '"':
|
||||
yylval.nodeval = make_str_node(tokstart + 1,
|
||||
lexptr-tokstart-2, esc_seen);
|
||||
***************
|
||||
*** 1171,1177 ****
|
||||
return YSTRING;
|
||||
}
|
||||
}
|
||||
! return ERROR;
|
||||
|
||||
case '-':
|
||||
if (*lexptr == '=') {
|
||||
--- 1171,1177 ----
|
||||
return YSTRING;
|
||||
}
|
||||
}
|
||||
! return ERROR_TOK;
|
||||
|
||||
case '-':
|
||||
if (*lexptr == '=') {
|
||||
***************
|
||||
*** 1256,1262 ****
|
||||
}
|
||||
return LEX_AND;
|
||||
}
|
||||
! return ERROR;
|
||||
|
||||
case '|':
|
||||
if (*lexptr == '|') {
|
||||
--- 1256,1262 ----
|
||||
}
|
||||
return LEX_AND;
|
||||
}
|
||||
! return ERROR_TOK;
|
||||
|
||||
case '|':
|
||||
if (*lexptr == '|') {
|
||||
***************
|
||||
*** 1279,1285 ****
|
||||
|
||||
if (c != '_' && ! isalpha(c)) {
|
||||
yyerror("Invalid char '%c' in expression\n", c);
|
||||
! return ERROR;
|
||||
}
|
||||
|
||||
/* it's some type of name-type-thing. Find its length */
|
||||
--- 1279,1285 ----
|
||||
|
||||
if (c != '_' && ! isalpha(c)) {
|
||||
yyerror("Invalid char '%c' in expression\n", c);
|
||||
! return ERROR_TOK;
|
||||
}
|
||||
|
||||
/* it's some type of name-type-thing. Find its length */
|
||||
73
Linux-0.11/patchs/hosts.h
Normal file
73
Linux-0.11/patchs/hosts.h
Normal file
@@ -0,0 +1,73 @@
|
||||
#ifndef __HOST_H__
|
||||
#define __HOSTS_H__
|
||||
|
||||
/*
|
||||
File hosts.h
|
||||
SCSI host adapter include file.
|
||||
*/
|
||||
|
||||
#define MAX_SCSI_HOSTS 1
|
||||
|
||||
/*
|
||||
The Scsi_Host type has all that is needed to interface with a SCSI
|
||||
host in a device independant matter.
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/*
|
||||
The name pointer is a pointer to the name of the SCSI
|
||||
device detected.
|
||||
*/
|
||||
|
||||
char *name;
|
||||
|
||||
/*
|
||||
The detect function shall return non zero on detection,
|
||||
and initialize all data necessary for this particular
|
||||
SCSI driver.
|
||||
*/
|
||||
|
||||
int (* detect)(void);
|
||||
|
||||
/*
|
||||
The info function will return whatever useful
|
||||
information the developer sees fit.
|
||||
*/
|
||||
|
||||
char * (* info)(void);
|
||||
|
||||
/*
|
||||
The command function shall return the SCSI return
|
||||
code in the low 8 bits, a driver error in the high 8
|
||||
bits. Target is the target ID, IN normal numbers - not a
|
||||
bit. The cmnd is the variable length command to
|
||||
be sent,
|
||||
buff a pointer to the buffer which will be read from /
|
||||
written to, and bufflen the length of that buffer
|
||||
*/
|
||||
|
||||
int (* command)(unsigned char target, const void *cmnd,
|
||||
void *buff, int bufflen);
|
||||
|
||||
/*
|
||||
present contains a flag as to weather we are present -
|
||||
so we don't have to call detect multiple times.
|
||||
*/
|
||||
|
||||
unsigned char present;
|
||||
} Scsi_Host;
|
||||
|
||||
/*
|
||||
The scsi_hosts array is the array containing the data for all
|
||||
possible <supported> scsi hosts.
|
||||
*/
|
||||
|
||||
extern Scsi_Host scsi_hosts[MAX_SCSI_HOSTS];
|
||||
|
||||
/*
|
||||
scsi_init initializes the scsi hosts.
|
||||
*/
|
||||
|
||||
void scsi_init(void);
|
||||
#endif
|
||||
71
Linux-0.11/patchs/inwrite.cdif
Normal file
71
Linux-0.11/patchs/inwrite.cdif
Normal file
@@ -0,0 +1,71 @@
|
||||
*** cons.c.bad Wed Dec 25 02:12:18 1991
|
||||
--- console.c Wed Dec 25 02:06:44 1991
|
||||
***************
|
||||
*** 530,535 ****
|
||||
--- 530,537 ----
|
||||
}
|
||||
|
||||
|
||||
+ static int in_conwrite = 0;
|
||||
+
|
||||
void con_write(struct tty_struct * tty)
|
||||
{
|
||||
int nr;
|
||||
***************
|
||||
*** 537,542 ****
|
||||
--- 539,546 ----
|
||||
|
||||
int currcons;
|
||||
|
||||
+ in_conwrite++;
|
||||
+
|
||||
for (currcons = 0; currcons<=NR_CONSOLES; currcons++)
|
||||
if (tty == TTY_TABLE(currcons))
|
||||
break;
|
||||
***************
|
||||
*** 772,777 ****
|
||||
--- 776,782 ----
|
||||
}
|
||||
}
|
||||
set_cursor(currcons);
|
||||
+ in_conwrite--;
|
||||
}
|
||||
|
||||
/*
|
||||
***************
|
||||
*** 1004,1009 ****
|
||||
--- 1009,1018 ----
|
||||
|
||||
void blank_screen()
|
||||
{
|
||||
+ if (in_conwrite)
|
||||
+ { blankcount = HZ*20;
|
||||
+ return;
|
||||
+ }
|
||||
if (blanked_fg > -1)
|
||||
return;
|
||||
blanked_fg = fg_console;
|
||||
***************
|
||||
*** 1015,1020 ****
|
||||
--- 1024,1033 ----
|
||||
|
||||
void unblank_screen()
|
||||
{
|
||||
+ if (in_conwrite)
|
||||
+ { blankcount = HZ*20;
|
||||
+ return;
|
||||
+ }
|
||||
if (blanked_fg <= -1)
|
||||
return;
|
||||
fg_console = blanked_fg;
|
||||
***************
|
||||
*** 1051,1056 ****
|
||||
--- 1064,1071 ----
|
||||
*/
|
||||
|
||||
int new_console, old_console;
|
||||
+ if (in_conwrite)
|
||||
+ return;
|
||||
|
||||
if (num >= NR_CONSOLES) return;
|
||||
|
||||
BIN
Linux-0.11/patchs/kybd.cdif.Z
Normal file
BIN
Linux-0.11/patchs/kybd.cdif.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/patchs/lp.tar.Z
Normal file
BIN
Linux-0.11/patchs/lp.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/patchs/lvc.tar.Z
Normal file
BIN
Linux-0.11/patchs/lvc.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/patchs/mtools.tar.Z
Normal file
BIN
Linux-0.11/patchs/mtools.tar.Z
Normal file
Binary file not shown.
132
Linux-0.11/patchs/scsi.h
Normal file
132
Linux-0.11/patchs/scsi.h
Normal file
@@ -0,0 +1,132 @@
|
||||
|
||||
#ifndef __SCSI_H__
|
||||
#define __SCSI_H__
|
||||
/*
|
||||
For documentation on the OPCODES, MESSAGES, and SENSE values,
|
||||
please consult the SCSI standard.
|
||||
*/
|
||||
|
||||
/*
|
||||
SCSI opcodes
|
||||
*/
|
||||
|
||||
#define TEST_UNIT_READY 0x00
|
||||
#define REZERO_UNIT 0x01
|
||||
#define REQUEST_SENSE 0x03
|
||||
#define FORMAT_UNIT 0x04
|
||||
#define REASSIGN_BLOCKS 0x07
|
||||
#define READ_6 0x08
|
||||
#define WRITE_6 0x0a
|
||||
#define SEEK 0x0b
|
||||
#define INQUIRY 0x12
|
||||
#define MODE_SELECT 0x15
|
||||
#define RESERVE 0x16
|
||||
#define RELEASE 0x17
|
||||
#define COPY 0x18
|
||||
#define MODE_SENSE 0x1a
|
||||
#define START_STOP 0x1b
|
||||
#define RECIEVE_DAIGNOSTIC 0x1c
|
||||
#define SEND_DIAGNOSTIC 0x1d
|
||||
#define ALLOW_MEDIUM_REMOVAL 0x1e
|
||||
|
||||
#define READ_CAPACITY 0x25
|
||||
#define READ_10 0x28
|
||||
#define WRITE_10 0x2a
|
||||
#define SEEK_10 0x2b
|
||||
#define WRITE_VERIFY 0x2e
|
||||
#define VERIFY 0x2f
|
||||
#define SEARCH_HIGH 0x30
|
||||
#define SEARCH_EQUAL 0x31
|
||||
#define SEARCH_LOW 0x32
|
||||
#define SET_LIMITS 0x33
|
||||
#define COMPARE 0x39
|
||||
#define COPY_VERIFY 0x3a
|
||||
|
||||
/*
|
||||
MESSAGE CODES
|
||||
*/
|
||||
|
||||
#define COMMAND_COMPLETE 0x00
|
||||
#define EXTENDED_MESSAGE 0x01
|
||||
#define SAVE_POINTERS 0x02
|
||||
#define RESTORE_POINTERS 0x03
|
||||
#define DISCONNECT 0x04
|
||||
#define INITIATOR_ERROR 0x05
|
||||
#define ABORT 0x06
|
||||
#define MESAGE_REJECT 0x07
|
||||
#define NOP 0x08
|
||||
#define MSG_PARITY_ERROR 0x09
|
||||
#define LINKED_CMD_COMPLETE 0x0a
|
||||
#define LINKED_FLG_CMD_COMPLETE 0x0b
|
||||
#define BUS_DEVICE_RESET 0x0c
|
||||
#define IDENTIFY 0x80
|
||||
|
||||
/*
|
||||
Our errors returned by OUR driver, NOT SCSI message. Orr'd with
|
||||
SCSI message passed back to driver <IF any>.
|
||||
*/
|
||||
|
||||
/* NO error */
|
||||
#define DID_OK 0x0000
|
||||
/* Couldn't connect before timeout period */
|
||||
#define DID_NO_CONNECT 0x0100
|
||||
/* BUS stayed busy through time out period */
|
||||
#define DID_BUS_BUSY 0x0200
|
||||
/* TIMED OUT for other reason */
|
||||
#define DID_TIME_OUT 0x0300
|
||||
/* ERROR from TARGET */
|
||||
#define DID_TERROR 0x0400
|
||||
/* TARGET was busy */
|
||||
#define DID_TBUSY 0x0500
|
||||
/* TARGET disconnected prematurely */
|
||||
#define DID_TDISCONNECT 0x0600
|
||||
/* TARGET was off line */
|
||||
#define DID_TOFFLINE 0x0700
|
||||
/* TARGET wants US to send IT a message */
|
||||
#defibe DID_TREQ_MSG_OUT 0x0800
|
||||
/* TARGET parity error */
|
||||
#define DID_TPARITY 0x0900
|
||||
/* TARGET requested reselect */
|
||||
#define DID_TRESELECT 0x0A00
|
||||
/* TARGET was not in the range 0-6 inlclusive */
|
||||
#define DID_BAD_TARGET 0x0B00
|
||||
|
||||
/*
|
||||
SENSE KEYS
|
||||
*/
|
||||
|
||||
#define NO_SENSE 0x00
|
||||
#define RECOVERED_ERROR 0x01
|
||||
#define NOT_READY 0x02
|
||||
#define MEDIUM_ERROR 0x03
|
||||
#define HARDWARE_ERROR 0x04
|
||||
#define ILLEGAL_REQUEST 0x05
|
||||
#define UNIT_ATTENTION 0x06
|
||||
#define DATA_PROTECT 0x07
|
||||
#define BLANK_CHECK 0x08
|
||||
#define COPY_ABORTED 0x0a
|
||||
#define ABORTED_COMMAND 0x0b
|
||||
#define VOLUME_OVERFLOW 0x0d
|
||||
#define MISCOMPARE 0x0e
|
||||
|
||||
|
||||
/*
|
||||
DEVICE TYPES
|
||||
|
||||
*/
|
||||
|
||||
#define TYPE_DISK 0x00
|
||||
#define TYPE_TAPE 0x01
|
||||
#define TYPE_WORM 0x04 /* Treated as ROM by our system */
|
||||
#define TYPE_ROM 0x05
|
||||
#define TYPE_NO_LUN 0x7f
|
||||
/*
|
||||
Every SCSI command starts with a one byte OP-code.
|
||||
The next byte's high three bits are the LUN of the
|
||||
device. Any multi-byte quantities are stored high byte
|
||||
first, and may have a 5 bit MSB in the same byte
|
||||
as the LUN.
|
||||
*/
|
||||
|
||||
|
||||
#endif
|
||||
BIN
Linux-0.11/patchs/sel.tar.Z
Normal file
BIN
Linux-0.11/patchs/sel.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/patchs/slpat.Z
Normal file
BIN
Linux-0.11/patchs/slpat.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/patchs/svga.tar.Z
Normal file
BIN
Linux-0.11/patchs/svga.tar.Z
Normal file
Binary file not shown.
39
Linux-0.11/patchs/tcapdif
Normal file
39
Linux-0.11/patchs/tcapdif
Normal file
@@ -0,0 +1,39 @@
|
||||
*** /A/etc/termcap Sun Dec 8 13:58:19 1991
|
||||
--- termcap Fri Dec 20 06:10:07 1991
|
||||
***************
|
||||
*** 52,54 ****
|
||||
--- 52,85 ----
|
||||
:it#8:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:kb=^H:\
|
||||
:ho=\E[H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:pt:sr=\EM:vt#3:xn:\
|
||||
:sc=\E7:rc=\E8:cs=\E[%i%d;%dr:
|
||||
+
|
||||
+ #
|
||||
+ # Now - like console, but with function keys
|
||||
+ #
|
||||
+ # Standard key code definitions:
|
||||
+ # ku,kd,kl,kr sent by up-, down-, left-, right-arrow
|
||||
+ # kb sent by backspace
|
||||
+ # k1..k9,k0 sent by function key 1..10
|
||||
+ # K1..5 sent by keypad upper left,upper right,centre,lower left,lower right
|
||||
+ # ka,kt,kB sent by clear-all-tabs,clear-tab,backtab
|
||||
+ # kT sent by set-tab-stop
|
||||
+ # kC,kE,kS sent by clear-screen,clear-to-eol,clear-to-eos
|
||||
+ # kD,kL sent by delete-character,delete-line
|
||||
+ # kh,kH sent by home,home-down
|
||||
+ # kI,kA sent by insert char/enter-insert-mode,insert-line
|
||||
+ # kM sent by exit-insert-mode
|
||||
+ # kN,kP sent by next-page,previous-page
|
||||
+ # kF,kR sent by scroll-forward,scroll-backwards
|
||||
+ memacs:\
|
||||
+ :do=^J:co#80:li#25:cl=\E[H\E[J:sf=\ED:\
|
||||
+ :le=^H:bs:am:cm=\E[%i%d;%dH:nd=\E[C:up=\E[A:\
|
||||
+ :ce=\E[K:cd=\E[J:so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\
|
||||
+ :md=\E[1m:mr=\E[7m:mb=\E[5m:me=\E[m:is=\E[1;25r\E[25;1H:\
|
||||
+ :it#8:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:kb=^H:\
|
||||
+ :ho=\E[H:kP=\E[5~:kN=\E[6~:kH=\E[Y:kh=\E[H:kD=\E[3~:kI=\E[2~:\
|
||||
+ :k1=\E[[A:k2=\E[[B:k3=\E[[C:k4=\E[[D:k5=\E[[E:k6=\E[[F:\
|
||||
+ :k7=\E[[G:k8=\E[[H:k9=\E[[I:k0=\E[[J:\
|
||||
+ :K1=\E[[K:K2=\E[[L:\
|
||||
+ :pt:sr=\EM:vt#3:xn:\
|
||||
+ :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:\
|
||||
+ #
|
||||
39
Linux-0.11/patchs/termcap.diff
Normal file
39
Linux-0.11/patchs/termcap.diff
Normal file
@@ -0,0 +1,39 @@
|
||||
*** /A/etc/termcap Sun Dec 8 13:58:19 1991
|
||||
--- termcap Fri Dec 20 06:10:07 1991
|
||||
***************
|
||||
*** 52,54 ****
|
||||
--- 52,85 ----
|
||||
:it#8:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:kb=^H:\
|
||||
:ho=\E[H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:pt:sr=\EM:vt#3:xn:\
|
||||
:sc=\E7:rc=\E8:cs=\E[%i%d;%dr:
|
||||
+
|
||||
+ #
|
||||
+ # Now - like console, but with function keys
|
||||
+ #
|
||||
+ # Standard key code definitions:
|
||||
+ # ku,kd,kl,kr sent by up-, down-, left-, right-arrow
|
||||
+ # kb sent by backspace
|
||||
+ # k1..k9,k0 sent by function key 1..10
|
||||
+ # K1..5 sent by keypad upper left,upper right,centre,lower left,lower right
|
||||
+ # ka,kt,kB sent by clear-all-tabs,clear-tab,backtab
|
||||
+ # kT sent by set-tab-stop
|
||||
+ # kC,kE,kS sent by clear-screen,clear-to-eol,clear-to-eos
|
||||
+ # kD,kL sent by delete-character,delete-line
|
||||
+ # kh,kH sent by home,home-down
|
||||
+ # kI,kA sent by insert char/enter-insert-mode,insert-line
|
||||
+ # kM sent by exit-insert-mode
|
||||
+ # kN,kP sent by next-page,previous-page
|
||||
+ # kF,kR sent by scroll-forward,scroll-backwards
|
||||
+ memacs:\
|
||||
+ :do=^J:co#80:li#25:cl=\E[H\E[J:sf=\ED:\
|
||||
+ :le=^H:bs:am:cm=\E[%i%d;%dH:nd=\E[C:up=\E[A:\
|
||||
+ :ce=\E[K:cd=\E[J:so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\
|
||||
+ :md=\E[1m:mr=\E[7m:mb=\E[5m:me=\E[m:is=\E[1;25r\E[25;1H:\
|
||||
+ :it#8:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:kb=^H:\
|
||||
+ :ho=\E[H:kP=\E[5~:kN=\E[6~:kH=\E[Y:kh=\E[H:kD=\E[3~:kI=\E[2~:\
|
||||
+ :k1=\E[[A:k2=\E[[B:k3=\E[[C:k4=\E[[D:k5=\E[[E:k6=\E[[F:\
|
||||
+ :k7=\E[[G:k8=\E[[H:k9=\E[[I:k0=\E[[J:\
|
||||
+ :K1=\E[[K:K2=\E[[L:\
|
||||
+ :pt:sr=\EM:vt#3:xn:\
|
||||
+ :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:\
|
||||
+ #
|
||||
2281
Linux-0.11/patchs/vc.shar
Normal file
2281
Linux-0.11/patchs/vc.shar
Normal file
File diff suppressed because it is too large
Load Diff
8
Linux-0.11/ports/find-3.2-diffs
Normal file
8
Linux-0.11/ports/find-3.2-diffs
Normal file
@@ -0,0 +1,8 @@
|
||||
70c70
|
||||
< DEFS = -DDIRENT -DST_BLOCKS_MISSING -DSTDC_HEADERS -DPOSIX -DUSG
|
||||
---
|
||||
> DEFS = -DDIRENT -DST_BLOCKS_MISSING -DSTDC_HEADERS -DPOSIX -DUSG -D_POSIX_SOURCE
|
||||
80c80
|
||||
< bindir = $(prefix)/gnubin
|
||||
---
|
||||
> bindir = $(prefix)/bin
|
||||
329
Linux-0.11/ports/gawk-diffs
Normal file
329
Linux-0.11/ports/gawk-diffs
Normal file
@@ -0,0 +1,329 @@
|
||||
*** 1.1 1991/12/11 16:13:13
|
||||
--- Makefile 1991/12/11 17:07:11
|
||||
***************
|
||||
*** 64,71 ****
|
||||
# MISSING = -DSPRINTF_INT -DBLKSIZE_MISSING -DSTRERROR_MISSING -DRANDOM_MISSING
|
||||
|
||||
# VAX running Ultrix 3.x
|
||||
- MISSING = -DSTRERROR_MISSING
|
||||
|
||||
# A generic 4.2 BSD machine
|
||||
# (eliminate GETOPT_MISSING for 4.3 release)
|
||||
# (eliminate STRCASE_MISSING and TMPNAM_MISSING for Tahoe release)
|
||||
--- 64,75 ----
|
||||
# MISSING = -DSPRINTF_INT -DBLKSIZE_MISSING -DSTRERROR_MISSING -DRANDOM_MISSING
|
||||
|
||||
# VAX running Ultrix 3.x
|
||||
|
||||
+ # LINUX
|
||||
+ MISSING = -DSPRINTF_INT -DTMPNAM_MISSING -DBLKSIZE_MISSING -DSTRCASE_MISSING \
|
||||
+ -Dalloca=__builtin_alloca -DGCVT_MISSING -DRANDOM_MISSING \
|
||||
+ -DBCOPY_MISSING -DSTRTOD_MISSING
|
||||
+
|
||||
# A generic 4.2 BSD machine
|
||||
# (eliminate GETOPT_MISSING for 4.3 release)
|
||||
# (eliminate STRCASE_MISSING and TMPNAM_MISSING for Tahoe release)
|
||||
***************
|
||||
*** 80,92 ****
|
||||
|
||||
# Comment out the next line if you don't have gcc.
|
||||
# Also choose just one of -g and -O.
|
||||
! #CC= gcc
|
||||
|
||||
! #OPTIMIZE= -O -g
|
||||
PROFILE= #-pg
|
||||
DEBUG= #-DDEBUG #-DMEMDEBUG #-DFUNC_TRACE #-DMPROF
|
||||
DEBUGGER= #-g -Bstatic
|
||||
! WARN= #-W -Wunused -Wimplicit -Wreturn-type -Wcomment # for gcc only
|
||||
|
||||
# Parser to use on grammar -- if you don't have bison use the first one
|
||||
#PARSER = yacc
|
||||
--- 84,96 ----
|
||||
|
||||
# Comment out the next line if you don't have gcc.
|
||||
# Also choose just one of -g and -O.
|
||||
! CC= gcc
|
||||
|
||||
! OPTIMIZE= -O #-g
|
||||
PROFILE= #-pg
|
||||
DEBUG= #-DDEBUG #-DMEMDEBUG #-DFUNC_TRACE #-DMPROF
|
||||
DEBUGGER= #-g -Bstatic
|
||||
! WARN= -W -Wunused -Wimplicit -Wreturn-type -Wcomment # for gcc only
|
||||
|
||||
# Parser to use on grammar -- if you don't have bison use the first one
|
||||
#PARSER = yacc
|
||||
***************
|
||||
*** 154,160 ****
|
||||
|
||||
# rules to build gawk
|
||||
gawk: $(ALLOBJS) $(GNUOBJS)
|
||||
! $(CC) -o gawk $(CFLAGS) $(ALLOBJS) $(GNUOBJS) -lm
|
||||
|
||||
$(AWKOBJS): awk.h
|
||||
|
||||
--- 158,164 ----
|
||||
|
||||
# rules to build gawk
|
||||
gawk: $(ALLOBJS) $(GNUOBJS)
|
||||
! $(CC) -o gawk $(CFLAGS) $(ALLOBJS) $(GNUOBJS) #-lm
|
||||
|
||||
$(AWKOBJS): awk.h
|
||||
|
||||
*** 1.1 1991/12/11 16:18:17
|
||||
--- awk.h 1991/12/11 17:07:45
|
||||
***************
|
||||
*** 42,51 ****
|
||||
extern char *alloca();
|
||||
#endif
|
||||
#else
|
||||
extern char *alloca();
|
||||
#endif
|
||||
#ifdef SPRINTF_INT
|
||||
! extern int sprintf();
|
||||
#else /* not USG */
|
||||
/* nasty nasty berkelixm */
|
||||
#define setjmp _setjmp
|
||||
--- 42,53 ----
|
||||
extern char *alloca();
|
||||
#endif
|
||||
#else
|
||||
+ #ifndef alloca
|
||||
extern char *alloca();
|
||||
#endif
|
||||
+ #endif
|
||||
#ifdef SPRINTF_INT
|
||||
! /* extern int sprintf(); XXX LINUX */
|
||||
#else /* not USG */
|
||||
/* nasty nasty berkelixm */
|
||||
#define setjmp _setjmp
|
||||
***************
|
||||
*** 78,99 ****
|
||||
extern char *memset(char *, int, int);
|
||||
|
||||
/* extern int fprintf(FILE *, char *, ...); */
|
||||
! extern int fprintf();
|
||||
extern int vfprintf();
|
||||
#ifndef MSDOS
|
||||
! extern int fwrite(char *, int, int, FILE *);
|
||||
#endif
|
||||
extern int fflush(FILE *);
|
||||
extern int fclose(FILE *);
|
||||
extern int pclose(FILE *);
|
||||
#ifndef MSDOS
|
||||
! extern int fputs(char *, FILE *);
|
||||
#endif
|
||||
extern void abort();
|
||||
extern int isatty(int);
|
||||
extern void exit(int);
|
||||
extern int system(char *);
|
||||
extern int sscanf(/* char *, char *, ... */);
|
||||
|
||||
extern double atof(char *);
|
||||
extern int fstat(int, struct stat *);
|
||||
--- 80,104 ----
|
||||
extern char *memset(char *, int, int);
|
||||
|
||||
/* extern int fprintf(FILE *, char *, ...); */
|
||||
! /* extern int fprintf(); XXXL */
|
||||
extern int vfprintf();
|
||||
#ifndef MSDOS
|
||||
! /* extern int fwrite(char *, int, int, FILE *); XXXL */
|
||||
#endif
|
||||
extern int fflush(FILE *);
|
||||
extern int fclose(FILE *);
|
||||
extern int pclose(FILE *);
|
||||
#ifndef MSDOS
|
||||
! /* extern int fputs(char *, FILE *); XXXL */
|
||||
#endif
|
||||
extern void abort();
|
||||
extern int isatty(int);
|
||||
extern void exit(int);
|
||||
extern int system(char *);
|
||||
+ #if 0
|
||||
+ /* XXXL */
|
||||
extern int sscanf(/* char *, char *, ... */);
|
||||
+ #endif
|
||||
|
||||
extern double atof(char *);
|
||||
extern int fstat(int, struct stat *);
|
||||
***************
|
||||
*** 100,110 ****
|
||||
extern off_t lseek(int, off_t, int);
|
||||
extern int fseek(FILE *, long, int);
|
||||
extern int close(int);
|
||||
! extern int open();
|
||||
extern int pipe(int *);
|
||||
extern int dup2(int, int);
|
||||
#ifndef MSDOS
|
||||
! extern int unlink(char *);
|
||||
#endif
|
||||
extern int fork();
|
||||
extern int execl(/* char *, char *, ... */);
|
||||
--- 105,115 ----
|
||||
extern off_t lseek(int, off_t, int);
|
||||
extern int fseek(FILE *, long, int);
|
||||
extern int close(int);
|
||||
! /* extern int open(); XXXL */
|
||||
extern int pipe(int *);
|
||||
extern int dup2(int, int);
|
||||
#ifndef MSDOS
|
||||
! /* extern int unlink(char *); XXXL */
|
||||
#endif
|
||||
extern int fork();
|
||||
extern int execl(/* char *, char *, ... */);
|
||||
*** 1.1 1991/12/11 16:29:17
|
||||
--- awk.y 1991/12/11 17:08:04
|
||||
***************
|
||||
*** 96,102 ****
|
||||
|
||||
%type <sval> func_name
|
||||
%token <sval> FUNC_CALL NAME REGEXP
|
||||
! %token <lval> ERROR
|
||||
%token <nodeval> NUMBER YSTRING
|
||||
%token <nodetypeval> RELOP APPEND_OP
|
||||
%token <nodetypeval> ASSIGNOP MATCHOP NEWLINE CONCAT_OP
|
||||
--- 96,102 ----
|
||||
|
||||
%type <sval> func_name
|
||||
%token <sval> FUNC_CALL NAME REGEXP
|
||||
! %token <lval> ERROR_TOK
|
||||
%token <nodeval> NUMBER YSTRING
|
||||
%token <nodetypeval> RELOP APPEND_OP
|
||||
%token <nodetypeval> ASSIGNOP MATCHOP NEWLINE CONCAT_OP
|
||||
***************
|
||||
*** 386,401 ****
|
||||
|
||||
nls
|
||||
: NEWLINE
|
||||
! { $<nodetypeval>$ = NULL; }
|
||||
| nls NEWLINE
|
||||
! { $<nodetypeval>$ = NULL; }
|
||||
;
|
||||
|
||||
opt_nls
|
||||
: /* empty */
|
||||
! { $<nodetypeval>$ = NULL; }
|
||||
| nls
|
||||
! { $<nodetypeval>$ = NULL; }
|
||||
;
|
||||
|
||||
input_redir
|
||||
--- 386,401 ----
|
||||
|
||||
nls
|
||||
: NEWLINE
|
||||
! { $<nodetypeval>$ = (NODETYPE) NULL; }
|
||||
| nls NEWLINE
|
||||
! { $<nodetypeval>$ = (NODETYPE) NULL; }
|
||||
;
|
||||
|
||||
opt_nls
|
||||
: /* empty */
|
||||
! { $<nodetypeval>$ = (NODETYPE) NULL; }
|
||||
| nls
|
||||
! { $<nodetypeval>$ = (NODETYPE) NULL; }
|
||||
;
|
||||
|
||||
input_redir
|
||||
***************
|
||||
*** 953,959 ****
|
||||
case '\\':
|
||||
if (*lexptr++ == '\0') {
|
||||
yyerror("unterminated regexp ends with \\");
|
||||
! return ERROR;
|
||||
} else if (lexptr[-1] == '\n')
|
||||
goto retry;
|
||||
break;
|
||||
--- 953,959 ----
|
||||
case '\\':
|
||||
if (*lexptr++ == '\0') {
|
||||
yyerror("unterminated regexp ends with \\");
|
||||
! return ERROR_TOK;
|
||||
} else if (lexptr[-1] == '\n')
|
||||
goto retry;
|
||||
break;
|
||||
***************
|
||||
*** 969,975 ****
|
||||
case '\0':
|
||||
lexptr--; /* so error messages work */
|
||||
yyerror("unterminated regexp");
|
||||
! return ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
--- 969,975 ----
|
||||
case '\0':
|
||||
lexptr--; /* so error messages work */
|
||||
yyerror("unterminated regexp");
|
||||
! return ERROR_TOK;
|
||||
}
|
||||
}
|
||||
}
|
||||
***************
|
||||
*** 1163,1169 ****
|
||||
case '\n':
|
||||
lexptr--;
|
||||
yyerror("unterminated string");
|
||||
! return ERROR;
|
||||
case '"':
|
||||
yylval.nodeval = make_str_node(tokstart + 1,
|
||||
lexptr-tokstart-2, esc_seen);
|
||||
--- 1163,1169 ----
|
||||
case '\n':
|
||||
lexptr--;
|
||||
yyerror("unterminated string");
|
||||
! return ERROR_TOK;
|
||||
case '"':
|
||||
yylval.nodeval = make_str_node(tokstart + 1,
|
||||
lexptr-tokstart-2, esc_seen);
|
||||
***************
|
||||
*** 1171,1177 ****
|
||||
return YSTRING;
|
||||
}
|
||||
}
|
||||
! return ERROR;
|
||||
|
||||
case '-':
|
||||
if (*lexptr == '=') {
|
||||
--- 1171,1177 ----
|
||||
return YSTRING;
|
||||
}
|
||||
}
|
||||
! return ERROR_TOK;
|
||||
|
||||
case '-':
|
||||
if (*lexptr == '=') {
|
||||
***************
|
||||
*** 1256,1262 ****
|
||||
}
|
||||
return LEX_AND;
|
||||
}
|
||||
! return ERROR;
|
||||
|
||||
case '|':
|
||||
if (*lexptr == '|') {
|
||||
--- 1256,1262 ----
|
||||
}
|
||||
return LEX_AND;
|
||||
}
|
||||
! return ERROR_TOK;
|
||||
|
||||
case '|':
|
||||
if (*lexptr == '|') {
|
||||
***************
|
||||
*** 1279,1285 ****
|
||||
|
||||
if (c != '_' && ! isalpha(c)) {
|
||||
yyerror("Invalid char '%c' in expression\n", c);
|
||||
! return ERROR;
|
||||
}
|
||||
|
||||
/* it's some type of name-type-thing. Find its length */
|
||||
--- 1279,1285 ----
|
||||
|
||||
if (c != '_' && ! isalpha(c)) {
|
||||
yyerror("Invalid char '%c' in expression\n", c);
|
||||
! return ERROR_TOK;
|
||||
}
|
||||
|
||||
/* it's some type of name-type-thing. Find its length */
|
||||
BIN
Linux-0.11/ports/mtools-patches.tar
Normal file
BIN
Linux-0.11/ports/mtools-patches.tar
Normal file
Binary file not shown.
332
Linux-0.11/ports/shoelace.patch.1
Normal file
332
Linux-0.11/ports/shoelace.patch.1
Normal file
@@ -0,0 +1,332 @@
|
||||
[0029] daemon@ATHENA.MIT.EDU (Peter MacDonald) Linux_Activists 11/10/91 19:38 (329 lines)
|
||||
Subject: patch to use shoelace with linux + fsck and mkfs
|
||||
Date: Sun, 10 Nov 91 16:21:27 PST
|
||||
From: pmacdona@sol.UVic.CA (Peter MacDonald)
|
||||
To: linux-activists@joker.cs.hut.fi
|
||||
|
||||
|
||||
Following are patches to shoelace to allow it to boot the Linux
|
||||
image (sorry, no building by parts cause there are no parts).
|
||||
This also means that the fsck function of shoelace is available,
|
||||
including fsck -m, or mkfs, which I have not tested. Please note
|
||||
that by using strip on the shoelace executable, I was able to fsck
|
||||
a 20Meg partition. 64Meg partitions, I doubt it can handle.
|
||||
In this way, both minix and linux can be run from the same partition,
|
||||
with a bit of mv'ing of directories like bin.
|
||||
|
||||
You will need minix to build these because of the 16bit assembler.
|
||||
I also have not tried compiling laceup under linux yet (no disk space).
|
||||
Perhaps some kind soul can do this and post executables for non-minixers.
|
||||
If you are not already familiar with and using shoelace, please install
|
||||
and learn it first!!! The following assumes this.
|
||||
|
||||
|
||||
To use:
|
||||
- Get shoelace from plains or wherever.
|
||||
- Apply the mxvid50 patches (may not have to, but my diffs are against them)
|
||||
- Copy makefile.bcc to makefile and then apply the patches in shoelace.pat.
|
||||
- Put the bootsect.x file in the shoelace dir.
|
||||
- Type make and cross fingers.
|
||||
- Use strip, ie: strip shoelace
|
||||
- Copy new shoelace to your root. (Might wish to try floppy first).
|
||||
- Reboot, hit enter when shoelace prompt appears and type "load /bootimage" or
|
||||
- If you want an automatic boot, edit /etc/config and set "load /bootimage"
|
||||
You must also ensure config doesn't allow shoelace to find system,
|
||||
fs, mm and init or it will boot from them by default. Either
|
||||
move the executables or set them to a bogus path.
|
||||
|
||||
Why Use Shoelace:
|
||||
1) has fsck and mkfs.
|
||||
2) doesn't require a seperate boot partition.
|
||||
3) allows passing environment variables to kernel (like video mode).
|
||||
4) doesn't require kernel patch (byte 508) to indicate root device.
|
||||
5) allow you to dynamically boot different partitions and different
|
||||
images in the same partition.
|
||||
|
||||
|
||||
Disclaimer:
|
||||
This patch is a bit of a hack. You can set your rootdev in the config
|
||||
file and it should work. But I didn't implement the bootdev.
|
||||
I also did not try to pass on the environment to linux.
|
||||
|
||||
Acknowledgment:
|
||||
Earl Chew for shoelace.
|
||||
|
||||
pmacdona@sol.uvic.ca
|
||||
|
||||
|
||||
table
|
||||
!"#$%&'()*+,-./0123456789:;<=>?
|
||||
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
|
||||
begin 644 slpat.Z
|
||||
M'YV09<:@>0,"#X@6(,2\>4-G3D Z+O H<$@&Q(D77K"\F/.BXPD0/A(N;/@Pz
|
||||
M(@@>/"R^.*$ "Y^6?!(H9.AP#,0Y"1*@&)("1(P<.6* 8)+&39TY(*B\D6,Gy
|
||||
M#!LR<V#"%$FS)-(T2-F\"4.F3,4P=$# P'-C# P8"?. H(.F3,(T;^:TF$,Gx
|
||||
MC!PZ=>" D/.F#IVB9>:P !'&3<4V;^P$GHJU#!LS(/J&?0.9K=L[8=32(<B5w
|
||||
MC)S 2,?F.'MV<.&*:NJT@8/4\F<74EV"2!+6LAL06KDB/>$0+YR/9-)\MLE&v
|
||||
M;1@S=,K( 9&&Y&,0*$3#D'$VA6G#:]N"F).';IDV4\&*Q1.#-(S!1XN> 2$Du
|
||||
MR9,IS-TDER,G;T,7(&+S >'D"94B(8 P1AWTE2%?<=MUEUP;S"$E'F)T@8"#t
|
||||
M"C;44,,,-J257%9ON'$&?E2@@=5V ]7Q5$)NN?'&5'#P)08;WPU6AF*W%96=s
|
||||
M6V;X16 9^"4! F;RK470&F64H5=SVZ6Q&HP@BHA4#3'( ,(:0DQ%I!QN.):Dr
|
||||
M'F[-4>*)8KAE8%]GH"'C'' $E(93"(;1FI,@D/%&8&Z<$-88'=9EHV53B5&'q
|
||||
M&68H)V 8 KGE9GP@M%%4&A*Y-%6(;N76U7)H'!JF@8ER92A2<R@)!XR$(05'p
|
||||
M7)V^6,9U%>$I7U%UQ#759UR!H!Q?<B!U1QILL+%78":&96,8(-3AAABPKA&&o
|
||||
MJ;@M! =^4I0Q4UABJ%6I83W2,96DHGY&!QUJF>$FM&J=4<:VZOTX$*@U;58Kn
|
||||
M86$!^U<;E[65I6++C3I'J4RVU)(+R>%A+18N=&4&8"!\09===+#!:J/\EN&Om
|
||||
MOEA,400554#!1!%.@- #"#3DE--^;BQ'V7;CYC770TM%A8403_@G\1$@:#P>l
|
||||
M#&7!X/%^2Z5Q1E%.$4:&9Z!%!MFS)]NT5$M).)$$%2_'O+%T9]W\HUN(*495k
|
||||
M6&U]=E!D?@E]XX^9M20QQ5 T_30>HU$G=6]Y;5?774AE78;864S1M-/CE1?Uj
|
||||
MQPEZQZ"D7K&;MWG057BA#2G AL544K1,Q1=$%&&%#@F,1=K6<X0![UIYI.FUi
|
||||
M&5K! 8=Q2#VK>$R5XS$##$(A-'"M8<&!<'-PW=8A"*]'Z%D:5H\[1DN-^P>Yh
|
||||
MY#*/M;J4^QD/@PT0&_QVP@OKT!(("52=0!AXL# "RRX7<<3TU2>6 %0L8 ^^g
|
||||
M]=AKG_32+Y\O?F#E-WK&&Y2CG_T8*H=OQ_B"F8^%_@F G__V X>N'6P,:Q"<f
|
||||
M: !U%L4!\%[Q:\D#X:"]L1C!"'O;CUW$T!PYV$4M36%#'=SB Q] 2080>\,:e
|
||||
MOB I@Y4,#M);G&R.,*XX826!N[.:[#P(K_D(9CMI&D,:!C8&-JDE9%Y+5\I>d
|
||||
M0 </(A!B !1(!?%P%@DZ9#WX@\D#458K%HRA40!,WPC6QS3O2=!Z FP4Q*Q8c
|
||||
M!BRJ+#S($11;Q(."&2DG#W_Q4+(T10;K3 T$J5F-D*9B&9+YI@5\\0O! %>1b
|
||||
MX PG8<:)HQP(J9UGO>@-"(RA!-6PFC14C@5CJUC[9 BQ-LSA##&(80)<$*WDa
|
||||
M^&0&+"B/!%W@)B&F 00B8,)6@J-'[O@-!"X(I@AFV4JWQ "6Y8DE,F$ L88]z
|
||||
M# L&(D._Z!##@($E#"V))AFN64TQW"N;AO'F'*3W @4$9" %V5H;\&"'-)"Ay
|
||||
M!LRDB$HRLI&.K 0DB6*G.^%YDI1<A"58, )?&)2E.\S!!56P0AK&X((A!"$$x
|
||||
M=1##&%J OQ 45"X.88IR7( _.:2!7TO)TQM<X)4ZA$ A;G!#&GBD*CS)(3AAw
|
||||
MX&@8("JL<86@#6!!@PMRU((PR4%A;@A8&2"J4CF%P%LCQ%((G% &@TY!.78(v
|
||||
MP4#AI:LFW.ZI>@%!#GR22@OI8'4@@ (1J. 3H,2@)4&XRT)AI .N8FBK(\/3u
|
||||
M:EP0%Q<H2J6-@D).VSJ'-[ !H0IEJ$,MVM2#)G2A#7UH1"=:T8N>3*-RX.@<t
|
||||
M/ I2OLAGI"4]:8=4RM(.N12F,J5IENAPTYSNM X]50Y0A4I4=[[AJ&%(JAN6s
|
||||
M6MBG,D6J;V@#55LBT-RV=:J. 4(2W&"&I>#T+VMP <5:T(01NJ%008T<=)80r
|
||||
MAC2TH IW<(L4<DO5%+2$J08]0R)9TU:Y+JNN=V64V"*JAH>4MT,#.P.!CH6Nq
|
||||
M,7P&4YWB$NZ6 H(F+,H@*)@!#A#7DB: )@SB:D$2B-!6'OPD*%C%@0NB=);Rp
|
||||
MN& &,[C!#(1+7..")0W)76YS#01=%T3.!RTA EC*T%8<@ "K6A5*E'1P%AV4o
|
||||
M!P1': (5Q!9-Y;3UHAPNKAR."V+E5H&YSBVQ=%$ 7J1,04'?\2X6GB"',Q0Fn
|
||||
M#7KX<(?:2H5SJG0.A0)!%51*KT[5I88C?JZ\!D/#(1<F#RTA2I;&R3$8S !Bm
|
||||
M/@)2<BJR&1!\*C.$221V;L46&P)*.08*"YCO>QO$= 4I0N[O^K! &.P45UADl
|
||||
M: F2BJ(J&JTT2$[!3'>$)*!IB0L$*E (6U1 HCFQ@5"&PLZ5LL2&%ZBJKTP:k
|
||||
M PM:,IS<P@%7L:X(4!/H.\6)C2 ^JI35!%(8<57$2ZZ&-:EAY*MVC6$,1FH7j
|
||||
M" HJ(.Z>1I4B:&=7<ON&KIS$T64(R1:*&Z2VZ P-=.C",+&@:C0@JI"JBB_Ni
|
||||
M@%WIBA1E/H3ZBV*:-"*YXA0[O7$0>]PSA9:(P4V!$W<9"(+N4$TM5Q8OY#3Wh
|
||||
M&Z0^XV P,:!!9)83@PS]&@^.B=N[%0<ICF.M#._V%5+> (>_=,@I^ D"&_HZg
|
||||
M&!\5L#9W($AO#&2';NOV-%>Y3;YU!NZANZ'HB_X"GG9^$CS@P0<BN)YA)"@"f
|
||||
MIT/=OE_@BT%/DH<\8+TE=Q"10 +M%MG=*W!]+N2LM12M5CL&UOBI0J?TR):"e
|
||||
M>QL[>>C+H-R0S>9DS9"$ 8'$*5YNMP@K#7%P2Y\#3R#%NW/B(K$+&08SASJLd
|
||||
MW4U<7WS%,33O2%/!(7JDP>44HGFDH."8,L"##'#0$_X6\F"&T3P(K'"$(*S%c
|
||||
M86&I.*'MC4TL!.?0GPD2NU\><\Y[GOA(P0$>/LX<DN('!V/A)[K!+?K&@V &b
|
||||
M$IIW2R!U&Q\QVT.!FWNM;^U7ED+G,Z\6N.0)4L@.7<;PEK]+'9S2$O;#: X]a
|
||||
MT6='X19-X5'T%1@O-@12\ 5#\ 1,, 6#,04*^ 6-<P7P<1H)N(!#@ 1!( 7Pz
|
||||
M413>$2N4T7^B$R=E,#!SUB2!08!VL2:F8BN(YC-=P6=#HART]@)GH!4N0'S8y
|
||||
M81==,BZ:=AOJ9VL'<Q<<Q1R5H1W')1#E0G3"T2'P$B0%Z(+_QW;[A6F*\P2Nx
|
||||
M<2L.<2/&H34P@AR"8QG"88)(Q08- 1W8)WLUD#@0TW(<M![!D3EDT!3R@6!Nw
|
||||
M@16#,4=A(8$:R($>V"#!(D^_XC;U81/]IG@M>( MT15C\&H>9'.W$6F%U$[Zv
|
||||
MUS.+5B2WX2?(=U!)(3="YA;)%BL"V(7 4E"->(($XQKW5VB%$2RB(R@*@6F1u
|
||||
M<1NW9U^:N"4\\HDL*$((:'X#$1=S@P64J(38HR2JL1VXB%]8YA:O-P-28A#Pt
|
||||
MU!-%-(!?LTUUH8M>(W<VZ!@MT6?B]09WD!;?9P,)E':8DAYZ=&G+88EXT3/^s
|
||||
MAX HD ,N4 ,)E";+D8D&LFM8\(Q2PFK\A!#8AVH@( -M2)!24DQ(L3%^0(_Vr
|
||||
MF#B\^!FA" *4ER@Q!S8=1Q #^(UMT86R0P>%,G-N@"##EWC0^!:*!F4,@@(?q
|
||||
MM8O^A5<M(& 9PE\M\@8/]R)J<3O%9P/8=Q9"\@8_,!MQTB%V,B4J,HY#E'_Op
|
||||
MJ"OQ:"M+D4"W4T@\21J\\9-NB 60HA9R4B=A$71R<([X9QE=B%,&D5\(6)(Eo
|
||||
MAY)A-03]]5_&A@5!(#H( FUWAVT!DY1]1I>OAFT^X0(P "P8J'YW61D$\0)'n
|
||||
M(0<;(0=C\ +JUQ(8V&N=!"KJEXAZB7<@, 2FUB4#49=E4)5+MQZ11GF31(QAm
|
||||
M8 =]X5&NM'B)TG@Y9QB#X2E+41?R,1A;691")BZU01 N]4A?@R<CT&\MH3"_l
|
||||
MV1MY= 9)!P(OX#M,I!QM4$1Z$9JG^7M#QC.ZPBUI\I;4=4O8I5W<Y8U8 %QLk
|
||||
M 1%(61$EEQXT0)MD&3R(E00,P(A\ (<Y 8;@08M\9LA,B(C BQ>XABZ8A=,j
|
||||
M:#4H4)-DX'F!4W=>8A??5X\S(&7V21# YT2UH1T#4X5F,%#9D9^**2**P7FEi
|
||||
MF8>YF7@3>BJ[4C7#^)MV) =X)")Z="R)(7G:(0+O&9_S*0*X03 LNJ&):)UNh
|
||||
MT77V%J)?X ::4P8BH#@C4)^98FXPD ,O ,X\ (/)F.I) ,94@54P)9U!YY g
|
||||
M !6=TD;*00<T8*13<)I\Z4A<I!:&.5D;@1=D\ +@R42K49]&ZC!849S[5H6Wf
|
||||
M@G']059A$AGT<@>HF1RW(2S_AQ04)8AHHB8#XQ5PB@7V"2<'NARJHB=N,$Y&e
|
||||
M"B,>4FBK:6XQLZG;%J1&V@*@&JH'$:JD"JJC6JJHFJJJNJJE:J0Q0QT#B4AWd
|
||||
M(*NT"@)24 1!0 1-4 2N^GW+ WZT*@>S*JP((9C'UZL"]A,'0:S,.JMVMY<\c
|
||||
M<JR,:J0]4*W6>JW6:JNXJJM%H#'8^JW5JFF5$1AAT0*0<0*WFJN[^A$M "Q8b
|
||||
M( (D$ ,T&@(;\ZX4)0([<".$]S_G1! G8! (,0=KD :B4R[IRJW0803\YA2Pa
|
||||
M0@9J(:=T 8 E7+#V*\6 ;"RXB\0:K#;NJO0T67^D@( )4^\@1$:<4\H81%3z
|
||||
M (A?4 1/8 0?$1+HVK%%\!$F8 )(@Y%[1FI_]H5],6CX=WR!DGR*MHR-UGB0y
|
||||
MQE]-,&F)>&E;AP6;]EP=XFF)1AAL(&JMH9N9B6KUQFJ5R9>!V8WKUR&XQE+\x
|
||||
M")F_!BH8.&RR I**(T-A*I3*YA;GYVS/*FU]1FW,86W85G.)QVT&]VTM\3_Aw
|
||||
M=GGD9FX\@&[JMGP@X&YE$F_S5F_WIAV?6:?!%A\ 9Q.\LXOWB12!BW#CHG#Mv
|
||||
M\1X.!W$5H9H5=RC9A7&'HG' YW*D1GTA-W(^87*,DG*-NW+C)Z%YTK@P][B"u
|
||||
M2'.2B',@H',\)Y0_MQ9!9TA$9W0'!Q6(\IDQ1+A>IXQR('5^A10\8'58IW69t
|
||||
MA@74.R[-&W5BI[UE=W98D'8+17Q:XW;R%'?:,9D&NIG0FG=[MQY]Y[E_5Q$5s
|
||||
M643["G.N@7C @KK>]WB11VJB:7GCEGDOY7R?IS*$VWWF1GHM87JHMQZJYY.Lr
|
||||
M]U*N!WNR1WNT>WNRN4TOM7N]]WO^DJFM2'R-.$1#6[6,Z[CPYL#0)R'3]YK6q
|
||||
M)R'9AQ;;-[@)4+CC-GKA-[B[BRG V&SI)[:V1K;M=X0H '\?9C7PZQ;V]R/Xp
|
||||
MYX[[QP;]Q\3_%X :V853>(!.-H$-^( 1.($5>('8X8<,"(@?.*G)(8)F0()Zo
|
||||
M(3" X8F0 L:+^()3HS6= 7<UB"6.@8,ZR(-?H36]$813HL3X\SQ'B)?&")(Jn
|
||||
MNAY.:%E1&!9AS,<^>(74TA):F#5<Z*)E\(61<H+M$J$PMQP"$UMHZ'IK:)!7m
|
||||
M*4-PJ#,V1(=V6!>GIH?9(1YLO($=^(%(,8#^=AOZV42>UR[8D<DPDHJ/:!=:l
|
||||
M-HFVIQU8C(E&FQ!_,K1X#(I+(8J-2XI?;"C;UE2IB(*BK#4E^8IY@8\B08M1k
|
||||
MJ1WZ>!MFJ8**Z(M( 8P+X1 5',U4<XSIR2#OK(W^F$[3."C66$C8J)_-N(WQj
|
||||
M*[;?2!#A.(YUAR'G*"^#6"[LJ)19W&V3VGZNYY#W*"COS(\!#9!H(9!HP6JPi
|
||||
MC) :@H ,Z=$0"2D2N<T4*7B* KQZ1FH;B05BV79@$9*U2)+X!RPGR4$I^4LLh
|
||||
MF<,OR2@Q.6"T6Y,WB2 ZV1)3Z9.; 91"69MAL09'B808#8]<?)9/68M?,]4Pg
|
||||
M4)55?959.91<^2-A79([G2EEV8RV@G]I2=1KV99X];9H)9=J\;71BI="1[_2f
|
||||
M%@-^"9BR)K:#26IGBIB3M9B-B06/&1"^QF^3B8%^C1^8B<1WBVV>"5^T#)T$e
|
||||
M4L&E>9K-08"&J\*MN7G,L1JQ61AT0)M$&1:W64-]MIL/T9MO\)NG$9QI,)SCd
|
||||
M4IS'F9P@N9Q#YIS[M1P)/!]WU3,ZJM=8D)UBEEVVVIU:_)W4+9X=YF;(Q2^Hc
|
||||
ME9XDMIY=(38LZ[)&T']HX&AB80/JK:WJVJU\\!+0)!#^^AET(=,C<[ >ZRW b
|
||||
M1@8 =05C('4]( )@< =C<! %[D_X7;-@,&\;$A:P6M)E$ >X1 +^+74T^MX2a
|
||||
M9+$SV]YME3,[ Z2Z8I8%R:3G(2 $0K2Z^!'P6N%C4'II0*W@BJV++,A_=7S>z
|
||||
M&N/7*JZ_%R'F:A'&.D3LZJ[P*J\@0*\@8*\MGJ^VD>'R?;&8,[ %JT<_#ADHy
|
||||
MH+!JRP8-^[!X,*<2FTT[5[%-_J];\Z !5RY3_K' )[(M0;(<04\HZT\KVX$Mx
|
||||
M^[(QZ^.(?7PVB[-8H )\#@(Y.%)HX <)0 4C! )*8"(%"7XU1@,W8&,W4%9!w
|
||||
MT1*B^N<[..B%?NBZ(@/@]Q,Z( ,Y0&,B]Z0MP>>D7NJFK@*CWN<T( ,LP.BHv
|
||||
M1NJ2;JJKS@(!&:J#&S-%@)5%( 49\V^R8F4[X#$OP&HJX@9<PA=<'8^"Z#V^u
|
||||
MIP+E!+ZXKNN\CKG*6!C8VQ7!G@##7NU*YWTC0R1JT2*@ <AN@S 6B5>H]NR4t
|
||||
M!@*Y_A_3[NMS<)39ONW%?NP$D93_G"5>P2E;_1E5TS/.WA(K (C,$0",QM.s
|
||||
M\!],\ 70V!Y,(_ 9.Q\U$B2][( 0F($4^ 06>,9_^,L[ /$C$$U#1,30CIRLr
|
||||
M9F"(@:*ZZ(D!7_+MONL9(RR=<@994A' ]P7P8DK-&.S;OBA_X13-6!%UYR8.q
|
||||
MT0:FDH_/TS9X8FXM3^H"4H00,0:"3NAN@>F)+A8PT.DSH ,7 NEGA06BVL@(p
|
||||
MPU&67O6(KNEEU>DXH ,TX&*BON>G'O>H#O>LE@.PE ,N5NJQCA!V'TO+<ZHMo
|
||||
M<.O4DY1U]'1Z8>1*L_!00 52T!-B8! ;\RQ?L$-!ZD.L! <&X[]+[Q8;LT)@n
|
||||
M\09I4/AV <I\/$E'T"&+S,KA)M$AP(B4)/8=B]+(0*E+_@)0/A$=_@;D_A?m
|
||||
ML/B-?S63[\P]I!P')0:8#_N@P5^=_P6?'_JY7_M8,/ %;P8'GS0*S_ RX/ -l
|
||||
M%_W4L^V] 8L*C'F?.5^2F.X0C_JCK_I?P/I/Y_I1-W5S0/NF/_"W3^6Y7^2[k
|
||||
MGP2*S_@]4?$/J/[-3_21OOE'/>[?\F-_=L#]@9WR)?_.'^Y+?8A/__4^_H?Qj
|
||||
MTA@ W S.S_!!/_K7R]R8S/!_\('5L+$T1@!#GF$8>24O9O0!P1<SP(RUVWPRi
|
||||
MX_&9/AGB].(11YEZE^[L;;I/-P-2R=][>V'OJY$]JF?H=&#:FSU:S^NE.KEGh
|
||||
MZI8@"+ !L(0GO3H^M_>>("R)5;:NY!6\YR)"S,WKXPO)P2;LH'FS[K;@(ZH#g
|
||||
M7G!;Y($Q2/*DG\$[00CO^C4\]@'Q8@84J )"@ DD ;;DZT"@S.!4V(< VD$\f
|
||||
MJ ?Y(,5#8QH//FP,3F60!&%8(81[D-IUP%_V!V/&0$)I-< 1C@ [EB4P7A,(e
|
||||
M O^#4_DC%3"-0![%JH,$CQ.Z!3_(J5HA]M%VK.8W,1L(1?S$&K *FZAY0V\d
|
||||
MF+$)55$G'(&)L!6V0H,$"PE>C9HS8NT6,1KSQ_UXH2K$>+XL$ G#F($"_* (c
|
||||
M1(06* 440UE8*6CANFAG7:*:Z<)-U0O)F2<$A0F 4TU"#V0*3^ <BWZ";]L-b
|
||||
M ;(EF]*0,"-'^.:KQ0F/0B_P0\LK@\]P"'P!*[!@OL 42 ):H%MMJK% ':+&a
|
||||
MMILZ2V$PX(!SM!0JPLA035(@"#0!9@@0?:%;: (#L2 >Q(3(J2Q'3RJ&B$%%z
|
||||
M"(2!(J)D $4L81?QM&7$C=CTF& 3I'L@X ;$ !9P [:*WM."SS!R&($O8 28y
|
||||
M0!5860SH/5"!=.@39$ Q7&6] G>($"_1;2+$/W2&'I$],($@, 260$Y8B,7Px
|
||||
M11"*!+(Q(.)R0 LHX'9(KI0X4A*16>P)5S$59L4K@ 261A'XBC'C!A1#]>5*w
|
||||
MRJ)?X2^/+BUN(H9@;]@B?L! ;Y$9(H1R2#!8X3348=NPU#@SFU +==(QS(7/v
|
||||
M;C$^0V!H@1[CJZH!D1$7BJ2O\<]:GF;,BNL0/CS&:DC&+!Y!XHQ30!MN.VXXu
|
||||
M&7U(,G1GXE#=845S> 2> %%\ E+@"G0@(N 9;8;WLR]^15<(&<Q0PN(B8^R$t
|
||||
MO?$+" &NN 2$HQ0@CM,P!A3#19,<$\)89(X5P3D^PT^(!5J6!.I]':@)J,9-s
|
||||
M51Z*H5$P>H)B9 0&Y_2#XD"2X6D\Q$'D"G$4.$RCJ<(!5]#%D*HE:!.I($Z,r
|
||||
M 3?@!L02 #D%Y]ZZBQG;#@EH'N:('RL?\?.'NG%3^;JE< :R73&T%[3C=HR,q
|
||||
MW'$GNB%^L!%C( \\HH5BS9 /1^14OFY U(JEX"&W'64P ]\OKA"(OK(<*E1Np
|
||||
M&3GKH>4%B!8X$.Y"9.!$6R U=@&>QVJF68BK9IQH:+W(305MC*18= -K8 YLo
|
||||
M@3P8!)S $I".56 HCL0BL"3#XC43%)&JNJ@4/7(E$\@L9'D9L@_,P"H8 P9,n
|
||||
M+,D!4F) ID"3!P(DY$NAD'Y&^(FO6H$A62"UXY UDM6 R/(W(H5#A)B%)U+Im
|
||||
MJ$B%4>"BI*"(BS$C1NY(&BGL6,V-S)&004;R2-QAH3@D,QR2K<9(VJ0_D20Gl
|
||||
M$'DLD]O.25JO7&0IEP.F3)70XM5@22W));TDF!23")%,,LD6*273Y*)@D[K2k
|
||||
M379#."GXY"3)BW,+B+R9-_2V/-;;F<-P\0V=G #ZIBZH&&0X<_H-1O"WEL#Bj
|
||||
M MR *W"%RI],N1.PX+X1N?)54/ @1+@)Q^(N''P+(&%NRG4XC_+A,%%"6QU0i
|
||||
M<##(2!1GEE0<A?MO+:Z"O3A&=>-PW,:X;#;.8>8XJ#6N>-RY@IA [B (N7@Uh
|
||||
MK^J5"+A72DY>,#EMB;$$%L'Z-;U$L-DE&U?E%A:6*P-<0<MQ.34'3;Y<-@ESg
|
||||
M&(O,::Z4&6U6)N$#672 9K(YD^41^HG*&F]T#I_P!I7YU\Q GFMA@,+ B0$Af
|
||||
M,(X\W'R:$ROR"+F JQD0% 9'<8)6DRYES3&0 *: L'@Q1L(2OA(;DTIH0 U0e
|
||||
M@F#/5&U-L>DUR:;9O TP1D*L34]'8S+$VRN0/]'IN4U:=])@7=Q$"(,32@ ^d
|
||||
MP7<P_D*!,TWN9"^<32B EC2;)*,ME(%I #HM^X:)XN$G,]F7'2%HD,Y+>=Kc
|
||||
MPYRO;G/.P!98%QRGX@%]H1-0D<[*^6\$9C=,G1NPW+E.T&E([$#%*9VU$W7Rb
|
||||
M.=7).%LGBRP*C>='Y:.!< <<25BIG+42U1#/DN<Y'R?L#!:32GP]G>=I.FTGa
|
||||
M@AJ>G)- %D@G: -R $\4.3]15-V \W #,H2>?) @8 ]T'=$Y(T3 8! !0&ISz
|
||||
MC,Z%XA:H9 VI9%"H:M$%C[*BD,+^Q#;V\S'VAM'9!_@1_)2?,D][VH$$BC^#y
|
||||
ME&?L"M1&3#R=)^0&+IDA4@\)U#-NJ@@J.QNHH92?+>+?$!T**D(W50H-$@"Tx
|
||||
M@PK0)J(>XM]@:*%^AH"64'ZT"^,G$)LXZ(:"5IQU(Q^Z0 NL(02L*[P QK4%w
|
||||
MFE3(<5(V0-[<T&G8&WQGXS&A>W(/E+@MN@)+GK,$7^+3)CI!&I #:D"KPWL-v
|
||||
ML@J2404));;*^Q2&711^QE%.I2T(Q&V 02PBZX B#?LZJ#70J*G#=WXT6>Wu
|
||||
M1[E?]7R=D;.*5APC( .Z9Z Y [I&>*H TU!E[("4&7A[P &VF]\%;^:? Z1Rt
|
||||
MC[3 A02A<$FI1P+H#5_ BG8%%! [<(9L -;( 9T@>E92.D?X0NE^$1*E-($s
|
||||
MD$FY7TZ086%A8[322KH%9, L)8 YX98"4V^E-]^;[[I(U<HGB!QGNDRC:5K:r
|
||||
MI3D!E=J!Y8,"JNG&<#%!:2Q$"1#05KRI- 4!X90\"(6V(DYI0.Y, ',4!'11q
|
||||
MH24UJ>;(T1E<,]]HS7P*7[XF3@R;FTF?VLVSF3?=WM:+ 6WS;0)!N<E/B0O9p
|
||||
MNYMH,ZL8U$[WZ7Z@60FC3- ))D@6@ /^D>%4GPJ20;Y1W7D\@X1#\$_RP@X@o
|
||||
MA=*),:P JO&>MO(U!0G-R3E9YX<I</!.@J[4RME27ZKPA*G2LZ:25.L9.4DHn
|
||||
MT=FI**"G3E+A24N'*B*-G:K4+0#/RSD+<>><I)[&L\"-OTA4.U#-&" N<&#>m
|
||||
ML9JM^LS\#.B3#Y=2W6%4N><$\20+R &/+GV:JKX'%!9G%IV?LC.$<BK\(4&Ql
|
||||
MZ /%JZ-3KVXJODH'&*@#Y53RLSZX <':"A4K%NVA\E."":DIJDBOZ&'=5%HTk
|
||||
MGGY1&@@X#:33@X(?QP;0 *$@5Q&":#T/ZBU/9D'X2?A0P&UXF# S0QU5T3<8j
|
||||
M\J>(,IW24RQL3I#P-*0,_(P9=11+&**5*/I:@ \XJG!@"[B!+C 83D /. $]i
|
||||
M8>#%@-6YJ8+K;4 !555SBH4\*O#XZ-S;A7\4DP72QC-(NZLAS:I/M7<NTD8:h
|
||||
M/%UI),VN2]656E*(UTMMZ2:-.9[4E]Y2]XI/2.GY.Z7C(I6B&U:* 5DI,96Eg
|
||||
MM/230@=<&A)TZ?FKKZ:TFK(+T&=@7VDQ/:;_59ERTF#Z34$ -=VPS'1V?5AHf
|
||||
MNC&NZ7\%L'0@E7)3<PI.\X:4**<@UIJ*G'2*4,EIWG"GR%2S0DW(0%&F9M7De
|
||||
MEURS?MF;N<DT=Q#8!+*7#0V438*:-O7F,;$Q6\]MPDU1161[)H]0LA"UH*[-d
|
||||
M&5,#MLK?[*QS3W#N1,7Y$\N@&2(8.$5@?0&BAA30S1?X%V9V/(+"+Z 'O21\c
|
||||
MJ+-?DCP*OM_T#)V 1BP"!C%8\H<_^P7T+!8($+^)TW3!';78$M-BPI%+#(ZQb
|
||||
MP4-K#!4M&F2TA\G1+E&.T-S0P+Q!M/'A#'K!1MO8-BU\^A.3%M1:VE&;:4LMa
|
||||
MI$6>72'55EHN>&EQ":E53*:V\^"C25L&*9;'R G;+JD9!,)& PR;T',,XFA*z
|
||||
M)EI:B[@4AJ*X#V@ Q6C!4+MHS\U_B;1T80=)6U$U6FE=ZUBMO/#,=L(TNT+8y
|
||||
MK I[LWM6W'[$.8MG[VS2R+.@,-WV64([)@?MKBJT\9;2+EM1NZ."B:F]-1#!x
|
||||
MT[8$5<ML^^W6A+2=]M/.6GZ+2_PMI.5$LG;?5MLA=7 Y JR]L@I7XM9:BIMKw
|
||||
M\\)&$;A:T-?^VF#[7_I2L4U$84(KC"/G2&UK+0]PMLWAH$3;=+MJW4+BNK8 v
|
||||
M5]ONV'KZ8_'I93,(598S180CZW.++!Y8LGBSR4Y4A,KV0MU%/9S ),CBG:.;u
|
||||
M997NWK0!7V4'1CJZ!SC'J!GE)Z658WQ=U0JJ;)\S@;,Q8Y4\0YRG)LVN*DP t
|
||||
MJ=2=^+SS)U3,H0M)L5&5[JY=;;I\W&Y67'_C@H?X7;O;&P3OZ:N[@ 'NVKN<s
|
||||
MMQ3@#-<=GP>RHR[(N/I1356=I $L0 ;4V)&: /# 4A@?V8,,-(IU=_OD0^J0r
|
||||
M)24/OM$_3@('$@ N^A>UM&!HTQX&#WVIYY4#UR-[^ _Z5T1RA>N= W; O-(_q
|
||||
M^]'J4(#QVZ7_YO0RD]J[>E>#Z]46PE?V!MAMFB=B2.SMO)\W?>Q>ZM%[V<#Op
|
||||
M#;[,EWH07QI@?$G?^4,?9F($B-.O-WS%Q^.;(N9!D](!Y6M>22_K?;Y "(RFo
|
||||
MW@1 0]H%8A 6DP$R&%YH.>?*&Q80"-12O64(C D9L*6&XY;V#3(P8-Q17<1En
|
||||
M?T.8YI+ &;B38!$8,+MD<.\R6;G1>;GB$*:]')G^B@'O2YU!G;21"!:8)TZ m
|
||||
M-B.#62\59C;9<F%A^;8$Z+:=IIMN\4XM8=OQ8.FV77XP&Q@,S46EK)U2M1>Nl
|
||||
MVWCR,-OM/'DW-6,@A HS3#'O 9@$$T/U%UC7KN@9%:=#((ABAT@T41-Q;9AKk
|
||||
M5MB'EC MR ",D .HPFIA+2N&<<($?L"AFZH%2(&CX! PSA7 %0I#<[R1Q5%.j
|
||||
M+%;)++(?:2($CHM 3SA"T0P)E^TC&<U_X@3%9C]E*!YNT*&!.L ?$D->% N-i
|
||||
MKN1P/:W[]425)7:H9#-$<&(GX(ESHEC8>EV6[;F]IPMFPVR?6Y\\D?(:2)NZh
|
||||
M.Z^G>;$_0:)T#M!C)B""GY%<JL$3ODY/7OPYK^>SL*W<,QG?3O!I^I@Q4:T(g
|
||||
MBC4:4]5I3%--7X XI#)/9]0\$U<@Y,/HY)Z@<WI^8_0:CFE>X,!-Y[AT9M=Ef
|
||||
M[%1Y)V%M7E/U="ICZ&>-TRMAC<>T<QM_SVX\/9QJ3D6I1Y5[*E6@BHQGZO14e
|
||||
MG^SST>G)?FR/?0TP#@O"V)@AHO^V0\)"0];'W)@>'U+>^8PM:#YFR 2Y<Z)7d
|
||||
MWIF-3[(D5<?8<^:-XX&9: R"DC'T"] M.-Q#(]G!/><Q_RX'OOBZN62]W$Uc
|
||||
M%LJ1\Q_[Y*(<DH/R(3W(LO7I(-6%_%.I74JNQ6,T!IC154=:#>>F8C7S\.ETb
|
||||
MJ5JV!C:?#G@6'9G4 (L#FB)4@T\IR,PP9@Q<I[J3 P=--L<^&8.@ "DCE]==a
|
||||
M+X615&X.E67O8P+ZY'"$'$E@"BP!*<-MM7*KT[QV]2M?IJDUE@6S64;+YJ[/z
|
||||
MK.49P3^WC5M6#G"YY?5EG3RIQ+%=CL%XN>CH9;Z<'_PR7.9J*, R$V;#?!T1y
|
||||
MLV*6,E@9)ZXZ\TD#9L#;_(F2>4\Y+3XC-P9#-TP5C:<BO$>?XB"TAC!3'%_Yx
|
||||
MV8UFNER:W7%%Z,FJ.09@UVE,FV:$;67-!?DO:\@@,3K?HX<LAO)EW#42SLR7w
|
||||
MEG-:5:.>KM7YYL@<,UB-</Y9Q!G1&&?=L_F4\V=>%YOL.8=FZ=R:2;-,?L?Tv
|
||||
M,SMOY^_9G>W =R[(X?DU^[KRK!K.\[9+SV]G/;>3]OR?F:'3HTL<A:[PRP1Pu
|
||||
M!0('*RXZ3U LK#UH]%5DS-,UQ9MI"&[B3HRB'QV3LC%8=]7!S=SL],J##8@Et
|
||||
M-3;L^F@@378#GTJ^J<6+"!"!6V4WAL(N@0)GE0Z(57,1@_+6+OD:(2HN.]5<s
|
||||
MM:2+0)-F M]"EW"%*?UJ(L0!(1(5(4N+9J=:5<4T&9@"SR-1[A%_@Q12@YE^r
|
||||
M'N5B'#[E("%GZ@#DVZX0^DB[3@.1C'YQEI /2$'8ZI6[,"S5U]I)RU8Z5JSIq
|
||||
M0SJ,-[(Q]LC"=@B8@; *;,>J9Y,O[2LS$P1)X:'!K!/4= I2!NCHL*OI/HZJp
|
||||
M%CD3N3X3Z"[:EP<>62U_*F *=*BP'%^@0!,YRGWT0;*:)_!<1)E%$B]EM5*4o
|
||||
MCEQT@@(%951MD8HOZ KWA8#@%U8(S;A#6&BN#D%P((VV+G]AXL.]";< *W2%n
|
||||
M5X)*D$%2E MAJSAX=)\S2*S.(.GBN2>J#!+FE5(E+0O&#/$<,ZKJ9U(A<OI6m
|
||||
M=]4LK4*T=+_^U.2OJWY5,Q"P$397O1WC,&;H:L7 JW6&KUX.&\,$+.RC7)#El
|
||||
M85M (.4.9*,):;.F,R654]<=)DDB@2=0!+;B$""3+N!,,U,8T!-ZJ;MF-39@k
|
||||
M>; &Q"D*Z]I35([NT[29X(4/!Y'TG@"T@4#A2@11]@&=*"6?IMQ8H@2[S$>j
|
||||
MTL;R'7C QP:E5Z@'5/ST7B: =?DZ)^BO#?$*\IY.GB&C(#>LR60$M'/T7*K'i
|
||||
M-U#?["<H Q2D:.W*N[@U"\-;B@*T@H?H"2B U:" L&V5 ;<)J)SS."&0OBW@h
|
||||
M)W %&5BS$&>6@@#IRIH]HP@L D. "@#'0$L2C=S2;D8U>RX+PQ=*!\R ZRL!g
|
||||
M^HNX4$HZ)>*>L':K'5Q@L0Z&$/6=O?$T]-MG@/76$?K >D%.3FZ%731 B.Y-f
|
||||
MA2,1R!> 7AM#<!-N7Z==4<#A7M"VTO$M[L;]%""W0U@!QO1W<ZKBO4+@0(%+e
|
||||
MWM!A>3MDZ/"\$_?Q9=QUP'%;[S*P F@ AJ6TVQO,K!#\(3.4=W4>Q\S;<"/Nd
|
||||
M:2R]4P#Z5M\/YWI'T=\]O&.&\2L*?UIB9.[-/2:/L@H,U)S*^(FXA]F,*$/@c
|
||||
M/KY;XX"[ 3Q@^D05%,2\ZDTBZVN]W0KY-NX&W/;[0 \SCZR_H7=N/=_4^W$'b
|
||||
M\#(@N2GW:YZ&EWN!+Z!ZZ[F!C5D*W?";3[I0'6JZ10#JUFB@8Z&P[H3FNHE,a
|
||||
MAXC="91V!RGMW0IQM^Z>%;W;)Y0^(3D-";<*: .=HXG(C,%]OP-'_B;?^_M[z
|
||||
M]N\M $]PP/M&E7MU&H-QOL 09 8"G /5<%=_ZHO- D0 '2^L]9.* V;H,$#'y
|
||||
MP&I 7-\)/3Q9Q%8-V<!;X5?/(QC[ D;^A(Y0Q#DF^H4!G%A&,EKSB3'HX_<x
|
||||
M9$.'3B[&HRG-#N7Q$S;+YJX@9> X#@?CGEQF1 XK\ 60 !% "P,/,S-J5!XSw
|
||||
M-+DKW]M4S@VX$*.Q+DIL&^+ED!R6E_+Q *MLMPCUY7B8E']RV1,#QH S!]ZHv
|
||||
MO$__Z>F:S9]TE"X>:,,\7/,(CC+_-"C?Y/+TD5.L^(G*N??Q7D@$B8RK\,*-u
|
||||
MQEVX=H7AZ;MZSW#L_<:GH3OWWO4[?)?Q%9Y;G7<:C]Z*VW_'\/7=OONY,'3Gt
|
||||
M]!M\RW/33-";=_GFWPG]?^MSB+,"!O@XWU0:/(%C;LV]PX/E1P_>)/R!K[O7s
|
||||
M+,$3&@7G$A8\U9"^#%[.3=_<%JT@O :@3Y_]!'$Q3Q+A9?>W=IO1L1D.^@O7r
|
||||
M"[F\G \&-PVE@V=+YQ)!>7O[\(1V$"(?:]AY-]Q)<X6F'B16@%4W2XY0E*, q
|
||||
M;0X";A9T8.I1NEI)AR%0'4HI8FW-/72OTAP\\@:,^CU'ZB]FI#/P8#D84 "7p
|
||||
M9M*Q49R:APBDUTMZ0LR=PA"M^[JS41X:8EA/YT+=N@)J.0K!!^M<+^KV7'I/o
|
||||
M;L6-P)>Z-P^>$]TZ8ZZ>\+FAN@.W7!/<)SA"PJ?-W3J5?!Y=&P^0;?@IV8OVn
|
||||
M%SC:D>,HT^K6_*&-KHCV)"6Z(ISHF)$A-"_7:W0&:<J:JI^KB5=Q*[;1H9@&m
|
||||
M=#JT\&4[ZQB] 1^G[?UFKTS" >P9"" J(^T2WYDX)OD&#]%&-F(-B(&Y?$HCl
|
||||
M2NZ=(JJ';W@&FO,$18YZ9^^GX;V/@!8P%N)[ M@/@J:1B*-])=[%QQ?1'D.@k
|
||||
M$"Z!*0 %=MT2J!*D-SUYWR\B-<Y[ZU8ZE#)+%F0 DD:DQJ/)(V7UBEPR-8K=j
|
||||
M6QT.>)NQ>L-?$?"^X<>[1BSO_WTO: [T+H36.Z5M[V) OX^%5QCCY[M>B!(Ni
|
||||
MYK[?^/PN1OC[]+$9,3[ #Z4[0.#%KX'/'B,@P>_!!=_@I<"#;_$FPO4>7?,^h
|
||||
MXR^\@,CPX=W)[X\.+]_)%<\H?R(^T53B@%HW?_MW5\4T^A/3#!NSHF?QUH71g
|
||||
M6+-N-O<X[XIA@'3W*EVONG==G'@#,&]/3*-0M]!SU'P=U!'K%AT,,&"W?]%:f
|
||||
M'?&TML"&V!.[#%3L,W"QCS+H--ML_I:L9KEMJG$B@.2H>8^GXP#,.QJ&-NI4e
|
||||
M[V0 22:-.T@%A$"8- *[;DR6R6(([C:8T#N3MI) 9\H@D08L-*LI"EW!(*QId
|
||||
M5)CI-_W%EAD:^U.?=JB(AK9J&7#>GRFJI_3C!AU^SBQ$ 2<@=D/7?)6O@+C3c
|
||||
MPRE$(D2QDFM#HDUT*\X0-YH&2/>3M% 1 KI713"BW0OW=Y_HFJZ-D1*"'O(Zb
|
||||
M/8/$ GH@HD^[IW0SR8F#4I9B=(&C2V( 1QXA+K#A$WZ>_R@//Z!>8KLC\0L<a
|
||||
MQ2>]%O\$R>\C1)?^G!@@^9LIYTU\]A[R%0680?ES0KGYT[X<,Z!57K!):J 'z
|
||||
M) ";?UX*\JU0*<\"Y^M\NM06N )=L6) ?R30E2I(\ U^K,ZF"K^N-/PY ?.=y
|
||||
M1<<' 1\?X=--C&]W!"K'/R@>O^+3)>Y=]4U^U5?Y8?_&MWRLP% R?LQG3D?Hx
|
||||
M6:2+H;O2UQW/%_H['];DA:6_[GY^&@CZ8B#GA_RB3P:.OM\W'2OB\8I1G.B;w
|
||||
M6QW>GGM:/^H?E,!&]2F_U9_\6%_LA_JC?XK- .??3!*?(&1]4SKV1[[E-_N6v
|
||||
M7^6+?I9/EUP^)K8[,C_QTWQ@,@5N?1+ EZ:<AQ]DS#S@0D>H"LQ1%0U_M%*u
|
||||
MGZ'^G%CXG[_RVYV(C_E'O_'OFA_%\NM3RQ_Z,S_(+_T()/FW$:UP\E/_=SCZt
|
||||
G'S] /'_7K_UC_]68^[*?A+N VG]!;G_N7R4$@??_CG47$8"_ B@Gs
|
||||
r
|
||||
end
|
||||
--[0029]--
|
||||
42
Linux-0.11/ports/shoelace.patch.2
Normal file
42
Linux-0.11/ports/shoelace.patch.2
Normal file
@@ -0,0 +1,42 @@
|
||||
[0030] daemon@ATHENA.MIT.EDU (Peter MacDonald) Linux_Activists 11/10/91 20:34 (39 lines)
|
||||
Subject: shoelace patch #2
|
||||
Date: Sun, 10 Nov 91 16:57:48 PST
|
||||
From: pmacdona@sol.UVic.CA (Peter MacDonald)
|
||||
To: linux-activists@joker.cs.hut.fi
|
||||
|
||||
|
||||
There is a big difference between floppy the device numbers on linux and
|
||||
on minix. In particular linux has fd0 as 0x208 while minix uses 0x200.
|
||||
ie. linux /dev/fd0 == minix /dev/fd0-dshd5in
|
||||
|
||||
The following patch will keep linux from using 0x200, which it doesn't
|
||||
know about and instead use 0x208 and 0x21c.
|
||||
Apply this after all other patches.
|
||||
|
||||
pmacdona@sol.uvic.ca
|
||||
|
||||
|
||||
|
||||
*** shoe.c.bad Thu Nov 7 08:43:30 1991
|
||||
--- shoe.c Thu Nov 7 08:52:27 1991
|
||||
***************
|
||||
*** 638,646 ****
|
||||
longjmp(errjmp, 1);*/
|
||||
unsigned *myptr = (unsigned int *) (&((char *) bp)[508]);
|
||||
char *myroot = getenvs(SaveConfigPtr,"rootdev");
|
||||
! if (strcmp(myroot,"bootdev"))
|
||||
! *myptr = atoi(myroot);
|
||||
! else
|
||||
*myptr = 0;
|
||||
if (*myptr == 0)
|
||||
{ if (diskcode)
|
||||
--- 638,645 ----
|
||||
longjmp(errjmp, 1);*/
|
||||
unsigned *myptr = (unsigned int *) (&((char *) bp)[508]);
|
||||
char *myroot = getenvs(SaveConfigPtr,"rootdev");
|
||||
! *myptr = atoi(myroot);
|
||||
! if (0x200 == *myptr)
|
||||
*myptr = 0;
|
||||
if (*myptr == 0)
|
||||
{ if (diskcode)
|
||||
--[0030]--
|
||||
38
Linux-0.11/ports/shoelace.patch.3
Normal file
38
Linux-0.11/ports/shoelace.patch.3
Normal file
@@ -0,0 +1,38 @@
|
||||
[0043] daemon@ATHENA.MIT.EDU (Peter MacDonald) Linux_Activists 11/11/91 14:06 (35 lines)
|
||||
Subject: shoelace patch#3: put environment ptr where linux can find it.
|
||||
Date: Mon, 11 Nov 91 10:58:22 PST
|
||||
From: pmacdona@sol.UVic.CA (Peter MacDonald)
|
||||
To: linux-activists@joker.cs.hut.fi
|
||||
|
||||
I know, I know. Three patches in 24 hours... I plead end of term
|
||||
instability. The following one line patch puts the environment
|
||||
offset relative to the shoelace corpse which is located at segment 0x80000.
|
||||
Thus, an offset of 0x1234 would put the address of the env at 0x81234.
|
||||
This offset is stored at location 0x90506: ie. in the word before the
|
||||
root device word (508) in the bootsect.s corpse.
|
||||
|
||||
By including the shoelace header file shoeconf.h, the linux kernel
|
||||
could now read in any of the environment variables it wanted (including
|
||||
scr_cols and scr_rows ;-)
|
||||
|
||||
BTW: Given Bruce Evans comments about shoelace:fsck ties to minix,
|
||||
we may wish to remove it from the code. Who wants a facility that
|
||||
only works with ~20Meg or less partitions anyways :-)
|
||||
|
||||
|
||||
pmacdona@sol.uvic.ca
|
||||
|
||||
--PULL_TAB_HERE -------------------------------
|
||||
*** shoe.c.bad2 Thu Nov 7 09:33:34 1991
|
||||
--- shoe.c Thu Nov 7 09:45:28 1991
|
||||
***************
|
||||
*** 650,655 ****
|
||||
--- 650,656 ----
|
||||
else
|
||||
*myptr = 0x21c;
|
||||
}
|
||||
+ *--myptr=(unsigned int)SaveConfigPtr;
|
||||
Linux = 1;
|
||||
LoadPoint = 0x90000;
|
||||
bpinx = 0;
|
||||
--[0043]--
|
||||
BIN
Linux-0.11/ports/shoelace.tar.Z
Normal file
BIN
Linux-0.11/ports/shoelace.tar.Z
Normal file
Binary file not shown.
10
Linux-0.11/sources/libs/README.curses
Normal file
10
Linux-0.11/sources/libs/README.curses
Normal file
@@ -0,0 +1,10 @@
|
||||
curses.tar.Z contains the curses library from bsd-net-2, with
|
||||
pre-installed diffs & RCS files for linux changes.
|
||||
You'll need to use 'pmake' to build it, or reconstruct the Makefile.
|
||||
|
||||
I'm not completely certain that I got all of the raw(), crmode() etc
|
||||
stuff right. If you have applications that use curses, try them out and
|
||||
send back patches if you find bugs.
|
||||
|
||||
John Kohl <jtkohl@cs.berkeley.edu>
|
||||
|
||||
BIN
Linux-0.11/sources/libs/curses.tar.Z
Normal file
BIN
Linux-0.11/sources/libs/curses.tar.Z
Normal file
Binary file not shown.
103
Linux-0.11/sources/sbin/df.c
Normal file
103
Linux-0.11/sources/sbin/df.c
Normal file
@@ -0,0 +1,103 @@
|
||||
/* df.c: Copywrite (92) Peter MacDonald: distribute freely, don't restrict. */
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <linux/fs.h>
|
||||
|
||||
char *hdr1="\n inodes inodes inodes blocks blocks blocks mount";
|
||||
char *hdr2= "device total used free total used free point";
|
||||
char *hdr3= "--------------------------------------------------------------------";
|
||||
char *fmt = "%-9s %-7d %-7d %-7d %-7d %-7d %-7d %s\n";
|
||||
|
||||
void do_df(char *dev, char *dir);
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{ int i;
|
||||
|
||||
sync();
|
||||
puts(hdr1);
|
||||
puts(hdr2);
|
||||
puts(hdr3);
|
||||
if (argc != 1)
|
||||
for (i=1; i<argc; i++)
|
||||
do_df(argv[i],"");
|
||||
else
|
||||
{ FILE *F = fopen("/etc/mtab","r");
|
||||
if (!F)
|
||||
{ fprintf(stderr,"/etc/mtab not found\n");
|
||||
exit(1);
|
||||
}
|
||||
do
|
||||
{ char buf[200], dev[40], dir[150];
|
||||
fgets(buf,200,F);
|
||||
if (feof(F) || (strlen(buf)<6))
|
||||
break;
|
||||
sscanf(buf,"%s %s",dev,dir);
|
||||
do_df(dev,dir);
|
||||
} while (1);
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
#define oops(str,arg) { fprintf(stderr,str,arg); close(fd); return; }
|
||||
|
||||
int fd;
|
||||
int nibblemap[] = { 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4 };
|
||||
|
||||
ino_t count(unsigned numblocks, unsigned numbits)
|
||||
{ unsigned i, j, end, sum = 0;
|
||||
char buf[BLOCK_SIZE];
|
||||
|
||||
for (i=0; (i<numblocks) && numbits; i++)
|
||||
{
|
||||
if (read(fd,buf,sizeof(buf))<0)
|
||||
return(0);
|
||||
if (numbits >= (8*BLOCK_SIZE))
|
||||
{
|
||||
end = BLOCK_SIZE;
|
||||
numbits -= 8*BLOCK_SIZE;
|
||||
}
|
||||
else
|
||||
{ int tmp;
|
||||
end = numbits >> 3;
|
||||
numbits &= 0x7;
|
||||
tmp = buf[end] & ((1<<numbits)-1);
|
||||
sum += nibblemap[tmp&0xf] + nibblemap[(tmp>>4)&0xf];
|
||||
numbits = 0;
|
||||
}
|
||||
for (j=0; j<end; j++)
|
||||
sum += nibblemap[buf[j] & 0xf] + nibblemap[(buf[j]>>4)&0xf];
|
||||
}
|
||||
return(sum);
|
||||
}
|
||||
|
||||
void do_df(char *dev, char *dir)
|
||||
{ int it,iu,bt,bu;
|
||||
struct super_block supstruct;
|
||||
|
||||
if ((fd=open(dev,O_RDONLY))<0)
|
||||
oops("df can't open device: %s",dev);
|
||||
|
||||
lseek(fd,BLOCK_SIZE,SEEK_SET);
|
||||
if (read(fd,(char*)&supstruct,sizeof(struct super_block))
|
||||
!= sizeof(struct super_block))
|
||||
oops("super block unreadable: %s",dev);
|
||||
|
||||
lseek(fd,BLOCK_SIZE*2,SEEK_SET);
|
||||
if (supstruct.s_magic != SUPER_MAGIC)
|
||||
oops("not a valid file system: %s",dev);
|
||||
|
||||
it = supstruct.s_ninodes;
|
||||
iu = count(supstruct.s_imap_blocks,supstruct.s_ninodes+1);
|
||||
|
||||
bt = supstruct.s_nzones << supstruct.s_log_zone_size;
|
||||
bu = count(supstruct.s_zmap_blocks,supstruct.s_nzones) <<
|
||||
supstruct.s_log_zone_size;
|
||||
|
||||
printf(fmt,dev,it,iu,it-iu,bt,bu,bt-bu,dir);
|
||||
}
|
||||
645
Linux-0.11/sources/sbin/fsck.c
Normal file
645
Linux-0.11/sources/sbin/fsck.c
Normal file
@@ -0,0 +1,645 @@
|
||||
/*
|
||||
* fsck.c - a file system consistency checker for Linux.
|
||||
*
|
||||
* (C) 1991 Linus Torvalds. This file may be redistributed as per
|
||||
* the Linux copyright.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 09.11.91 - made the first rudimetary functions
|
||||
*
|
||||
* 10.11.91 - updated, does checking, no repairs yet.
|
||||
* Sent out to the mailing-list for testing.
|
||||
*
|
||||
* 14.11.91 - Testing seems to have gone well. Added some
|
||||
* correction-code, and changed some functions.
|
||||
*
|
||||
* 15.11.91 - More correction code. Hopefully it notices most
|
||||
* cases now, and tries to do something about them.
|
||||
*
|
||||
* 16.11.91 - More corrections (thanks to Matti Jalava). Most
|
||||
* things seem to work now.
|
||||
*
|
||||
* I've had no time to add comments - hopefully the function names
|
||||
* are comments enough. As with all file system checkers, this assumes
|
||||
* the file system is quiescent - don't use it on a mounted device
|
||||
* unless you can be sure nobody is writing to it (and remember that the
|
||||
* kernel can write to it when it searches for files).
|
||||
*
|
||||
* Usuage: fsck [-larvsm] device
|
||||
* -l for a listing of all the filenames
|
||||
* -a for automatic repairs (not implemented)
|
||||
* -r for repairs (interactive) (not implemented)
|
||||
* -v for verbose (tells how many files)
|
||||
* -s for super-block info
|
||||
* -m for minix-like "mode not cleared" warnings
|
||||
*
|
||||
* The device may be a block device or a image of one, but this isn't
|
||||
* enforced (but it's not much fun on a character device :-).
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <termios.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <linux/fs.h>
|
||||
|
||||
#ifndef __GNUC__
|
||||
#error "needs gcc for the bitop-__asm__'s"
|
||||
#endif
|
||||
|
||||
#ifndef __linux__
|
||||
#define volatile
|
||||
#endif
|
||||
|
||||
#define ROOT_INO 1
|
||||
|
||||
#define UPPER(size,n) ((size+((n)-1))/(n))
|
||||
#define INODE_SIZE (sizeof(struct d_inode))
|
||||
#define INODE_BLOCKS UPPER(INODES,INODES_PER_BLOCK)
|
||||
#define INODE_BUFFER_SIZE (INODE_BLOCKS * BLOCK_SIZE)
|
||||
|
||||
#define BITS_PER_BLOCK (BLOCK_SIZE<<3)
|
||||
|
||||
static char * program_name = "fsck";
|
||||
static char * device_name = NULL;
|
||||
static int IN;
|
||||
static int repair=0, automatic=0, verbose=0, list=0, show=0, warn_mode=0;
|
||||
static int directory=0, regular=0, blockdev=0, chardev=0, links=0, total=0;
|
||||
|
||||
/* this is used to implement the (coming) two-pass zone checking. */
|
||||
static int trust_zone_bit_map=0;
|
||||
|
||||
static int changed = 0; /* flags if the filesystem has been changed */
|
||||
|
||||
/* File-name data */
|
||||
#define MAX_DEPTH 50
|
||||
static int name_depth = 0;
|
||||
static char name_list[MAX_DEPTH][NAME_LEN+1];
|
||||
|
||||
static char * inode_buffer = NULL;
|
||||
#define Inode (((struct d_inode *) inode_buffer)-1)
|
||||
static char super_block_buffer[BLOCK_SIZE];
|
||||
#define Super (*(struct super_block *)super_block_buffer)
|
||||
#define INODES ((unsigned long)Super.s_ninodes)
|
||||
#define ZONES ((unsigned long)Super.s_nzones)
|
||||
#define IMAPS ((unsigned long)Super.s_imap_blocks)
|
||||
#define ZMAPS ((unsigned long)Super.s_zmap_blocks)
|
||||
#define FIRSTZONE ((unsigned long)Super.s_firstdatazone)
|
||||
#define ZONESIZE ((unsigned long)Super.s_log_zone_size)
|
||||
#define MAXSIZE ((unsigned long)Super.s_max_size)
|
||||
#define MAGIC (Super.s_magic)
|
||||
#define NORM_FIRSTZONE (2+IMAPS+ZMAPS+INODE_BLOCKS)
|
||||
|
||||
static char inode_map[BLOCK_SIZE * I_MAP_SLOTS];
|
||||
static char zone_map[BLOCK_SIZE * Z_MAP_SLOTS];
|
||||
|
||||
static unsigned char * inode_count = NULL;
|
||||
static unsigned char * zone_count = NULL;
|
||||
|
||||
void recursive_check(unsigned int ino);
|
||||
|
||||
#define bitop(name,op) \
|
||||
static inline int name(char * addr,unsigned int nr) \
|
||||
{ \
|
||||
int __res; \
|
||||
__asm__("bt" op " %1,%2; adcl $0,%0" \
|
||||
:"=g" (__res) \
|
||||
:"r" (nr),"m" (*(addr)),"0" (0)); \
|
||||
return __res; \
|
||||
}
|
||||
|
||||
bitop(bit,"")
|
||||
bitop(setbit,"s")
|
||||
bitop(clrbit,"c")
|
||||
|
||||
#define inode_in_use(x) (bit(inode_map,(x)))
|
||||
#define zone_in_use(x) (bit(zone_map,(x)-FIRSTZONE+1))
|
||||
|
||||
#define mark_inode(x) (setbit(inode_map,(x)),changed=1)
|
||||
#define unmark_inode(x) (clrbit(inode_map,(x)),changed=1)
|
||||
|
||||
#define mark_zone(x) (setbit(zone_map,(x)-FIRSTZONE+1),changed=1)
|
||||
#define unmark_zone(x) (clrbit(zone_map,(x)-FIRSTZONE+1),changed=1)
|
||||
|
||||
/*
|
||||
* Volatile to let gcc know that this doesn't return. When trying
|
||||
* to compile this under minix, volatile gives a warning, as
|
||||
* exit() isn't defined as volatile under minix.
|
||||
*/
|
||||
volatile void fatal_error(const char * fmt_string)
|
||||
{
|
||||
fprintf(stderr,fmt_string,program_name,device_name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#define usage() fatal_error("Usage: %s [-larvsm] /dev/name\n")
|
||||
#define die(str) fatal_error("%s: " str "\n")
|
||||
|
||||
/*
|
||||
* This simply goes through the file-name data and prints out the
|
||||
* current file.
|
||||
*/
|
||||
void print_current_name(void)
|
||||
{
|
||||
int i=0;
|
||||
|
||||
while (i<name_depth)
|
||||
printf("/%.14s",name_list[i++]);
|
||||
}
|
||||
|
||||
int ask(const char * string,int def)
|
||||
{
|
||||
int c;
|
||||
|
||||
if (!repair) {
|
||||
printf("\n");
|
||||
return 0;
|
||||
}
|
||||
if (automatic) {
|
||||
printf("\n");
|
||||
return def;
|
||||
}
|
||||
printf(def?"%s (y/n)? ":"%s (n/y)? ",string);
|
||||
for (;;) {
|
||||
fflush(stdout);
|
||||
if ((c=getchar())==EOF)
|
||||
return def;
|
||||
c=toupper(c);
|
||||
if (c == 'Y') {
|
||||
def = 1;
|
||||
break;
|
||||
} else if (c == 'N') {
|
||||
def = 0;
|
||||
break;
|
||||
} else if (c == ' ' || c == '\n')
|
||||
break;
|
||||
}
|
||||
if (def)
|
||||
printf("y\n");
|
||||
else
|
||||
printf("n\n");
|
||||
return def;
|
||||
}
|
||||
|
||||
/*
|
||||
* check_zone_nr checks to see that *nr is a valid zone nr. If it
|
||||
* isn't, it will possibly be repaired. Check_zone_nr returns != 0
|
||||
* if it changed the nr.
|
||||
*/
|
||||
int check_zone_nr(unsigned short * nr)
|
||||
{
|
||||
if (!*nr)
|
||||
return 0;
|
||||
if (*nr < FIRSTZONE)
|
||||
printf("Zone nr < FIRSTZONE in file `");
|
||||
else if (*nr >= ZONES)
|
||||
printf("Zone nr > ZONES in file `");
|
||||
else
|
||||
return 0;
|
||||
print_current_name();
|
||||
printf("'.");
|
||||
if (ask("Remove block",1)) {
|
||||
*nr=0;
|
||||
changed = 1;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* read-block reads block *nr into the buffer at addr. It returns
|
||||
* 0 if the *nr is unchanged, 1 if it was changed.
|
||||
*/
|
||||
int read_block(unsigned short * nr, char * addr)
|
||||
{
|
||||
int blk_chg = check_zone_nr(nr);
|
||||
|
||||
if (!*nr || *nr >= ZONES) {
|
||||
memset(addr,0,BLOCK_SIZE);
|
||||
return changed;
|
||||
}
|
||||
if (BLOCK_SIZE*(*nr) != lseek(IN, BLOCK_SIZE*(*nr), SEEK_SET))
|
||||
die("seek failed in read_block");
|
||||
if (BLOCK_SIZE != read(IN, addr, BLOCK_SIZE)) {
|
||||
printf("Read error: bad block in file '");
|
||||
print_current_name();
|
||||
printf("'\n");
|
||||
memset(addr,0,BLOCK_SIZE);
|
||||
}
|
||||
return blk_chg;
|
||||
}
|
||||
|
||||
/*
|
||||
* write_block writes block nr to disk.
|
||||
*/
|
||||
inline void write_block(unsigned int nr, char * addr)
|
||||
{
|
||||
if (!nr)
|
||||
return;
|
||||
if (nr < FIRSTZONE || nr >= ZONES) {
|
||||
printf("Internal error: trying to write bad block\n"
|
||||
"Write request ignored\n");
|
||||
return;
|
||||
}
|
||||
if (BLOCK_SIZE*nr != lseek(IN, BLOCK_SIZE*nr, SEEK_SET))
|
||||
die("seek failed in write_block");
|
||||
if (BLOCK_SIZE != write(IN, addr, BLOCK_SIZE)) {
|
||||
printf("Write error: bad block in file '");
|
||||
print_current_name();
|
||||
printf("'\n");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* mapped-read-block reads block nr blknr from the specified file.
|
||||
* it returns 1 if the inode has been changed due to bad zone nrs
|
||||
*/
|
||||
inline int mapped_read_block(struct d_inode * inode,
|
||||
unsigned int blknr, char * addr)
|
||||
{
|
||||
unsigned short ind[BLOCK_SIZE>>1];
|
||||
unsigned short dind[BLOCK_SIZE>>1];
|
||||
int result;
|
||||
|
||||
if (blknr<7)
|
||||
return read_block(blknr + inode->i_zone,addr);
|
||||
blknr -= 7;
|
||||
if (blknr<512) {
|
||||
result = read_block(7 + inode->i_zone, (char *) ind);
|
||||
if (read_block(blknr + ind,addr))
|
||||
write_block(inode->i_zone[7], (char *) ind);
|
||||
return result;
|
||||
}
|
||||
blknr -= 512;
|
||||
result = read_block(8 + inode->i_zone, (char *) dind);
|
||||
if (read_block(blknr/512 + dind, (char *) ind))
|
||||
write_block(inode->i_zone[8], (char *) dind);
|
||||
if (read_block(blknr%512 + ind,addr))
|
||||
write_block(dind[blknr/512], (char *) ind);
|
||||
return result;
|
||||
}
|
||||
|
||||
void write_tables(void)
|
||||
{
|
||||
if (BLOCK_SIZE != lseek(IN, BLOCK_SIZE, SEEK_SET))
|
||||
die("seek failed in write_tables");
|
||||
if (BLOCK_SIZE != write(IN, super_block_buffer, BLOCK_SIZE))
|
||||
die("unable to write super-block");
|
||||
if (IMAPS*BLOCK_SIZE != write(IN,inode_map,IMAPS*BLOCK_SIZE))
|
||||
die("Unable to write inode map");
|
||||
if (ZMAPS*BLOCK_SIZE != write(IN,zone_map,ZMAPS*BLOCK_SIZE))
|
||||
die("Unable to write zone map");
|
||||
if (INODE_BUFFER_SIZE != write(IN,inode_buffer,INODE_BUFFER_SIZE))
|
||||
die("Unable to write inodes");
|
||||
}
|
||||
|
||||
void read_tables(void)
|
||||
{
|
||||
memset(inode_map,0,sizeof(inode_map));
|
||||
memset(zone_map,0,sizeof(zone_map));
|
||||
if (BLOCK_SIZE != lseek(IN, BLOCK_SIZE, SEEK_SET))
|
||||
die("seek failed");
|
||||
if (BLOCK_SIZE != read(IN, super_block_buffer, BLOCK_SIZE))
|
||||
die("unable to read super block");
|
||||
if (MAGIC != SUPER_MAGIC)
|
||||
die("bad magic number in super-block");
|
||||
if (ZONESIZE != 0 || BLOCK_SIZE != 1024)
|
||||
die("Only 1k blocks/zones supported");
|
||||
if (!IMAPS || IMAPS > I_MAP_SLOTS)
|
||||
die("bad s_imap_blocks field in super-block");
|
||||
if (!ZMAPS || ZMAPS > Z_MAP_SLOTS)
|
||||
die("bad s_zmap_blocks field in super-block");
|
||||
inode_buffer = malloc(INODE_BUFFER_SIZE);
|
||||
if (!inode_buffer)
|
||||
die("Unable to allocate buffer for inodes");
|
||||
inode_count = malloc(INODES);
|
||||
if (!inode_count)
|
||||
die("Unable to allocate buffer for inode count");
|
||||
zone_count = malloc(ZONES);
|
||||
if (!zone_count)
|
||||
die("Unable to allocate buffer for zone count");
|
||||
if (IMAPS*BLOCK_SIZE != read(IN,inode_map,IMAPS*BLOCK_SIZE))
|
||||
die("Unable to read inode map");
|
||||
if (ZMAPS*BLOCK_SIZE != read(IN,zone_map,ZMAPS*BLOCK_SIZE))
|
||||
die("Unable to read zone map");
|
||||
if (INODE_BUFFER_SIZE != read(IN,inode_buffer,INODE_BUFFER_SIZE))
|
||||
die("Unable to read inodes");
|
||||
if (NORM_FIRSTZONE != FIRSTZONE)
|
||||
printf("Warning: Firstzone != Norm_firstzone\n");
|
||||
if (show) {
|
||||
printf("%d inodes\n",INODES);
|
||||
printf("%d blocks\n",ZONES);
|
||||
printf("Firstdatazone=%d (%d)\n",FIRSTZONE,NORM_FIRSTZONE);
|
||||
printf("Zonesize=%d\n",BLOCK_SIZE<<ZONESIZE);
|
||||
printf("Maxsize=%d\n\n",MAXSIZE);
|
||||
}
|
||||
}
|
||||
|
||||
struct d_inode * get_inode(unsigned int nr)
|
||||
{
|
||||
struct d_inode * inode;
|
||||
|
||||
if (!nr || nr > INODES)
|
||||
return NULL;
|
||||
total++;
|
||||
inode = Inode + nr;
|
||||
if (!inode_count[nr]) {
|
||||
if (!inode_in_use(nr)) {
|
||||
printf("Inode %d marked not used, but used for file '",
|
||||
nr);
|
||||
print_current_name();
|
||||
printf("'\n");
|
||||
if (repair)
|
||||
if (ask("Mark in use",1))
|
||||
mark_inode(nr);
|
||||
}
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
directory++;
|
||||
else if (S_ISREG(inode->i_mode))
|
||||
regular++;
|
||||
else if (S_ISCHR(inode->i_mode))
|
||||
chardev++;
|
||||
else if (S_ISBLK(inode->i_mode))
|
||||
blockdev++;
|
||||
} else
|
||||
links++;
|
||||
if (!++inode_count[nr]) {
|
||||
printf("Warning: inode count too big.\n");
|
||||
inode_count[nr]--;
|
||||
}
|
||||
return inode;
|
||||
}
|
||||
|
||||
void check_root(void)
|
||||
{
|
||||
struct d_inode * inode = Inode + ROOT_INO;
|
||||
|
||||
if (!inode || !S_ISDIR(inode->i_mode))
|
||||
die("root inode isn't a directory");
|
||||
}
|
||||
|
||||
static int add_zone(unsigned short * znr)
|
||||
{
|
||||
int result;
|
||||
|
||||
result=check_zone_nr(znr);
|
||||
if (!*znr || *znr >= ZONES)
|
||||
return result;
|
||||
if (zone_count[*znr]) {
|
||||
printf("Block has been used before. Now in file `");
|
||||
print_current_name();
|
||||
printf("'.");
|
||||
if (ask("Clear",1)) {
|
||||
*znr = 0;
|
||||
changed = 1;
|
||||
}
|
||||
}
|
||||
if (!*znr || *znr >= ZONES)
|
||||
return result;
|
||||
if (!zone_in_use(*znr)) {
|
||||
printf("Block %d in file `",*znr);
|
||||
print_current_name();
|
||||
printf("' is marked not in use.");
|
||||
if (ask("Correct",1))
|
||||
mark_zone(*znr);
|
||||
}
|
||||
if (!++zone_count[*znr])
|
||||
zone_count[*znr]--;
|
||||
return result;
|
||||
}
|
||||
|
||||
static int add_zone_ind(unsigned short * znr)
|
||||
{
|
||||
static char blk[BLOCK_SIZE];
|
||||
int i, result, chg_blk=0;
|
||||
|
||||
result = add_zone(znr);
|
||||
if (!*znr || *znr>=ZONES)
|
||||
return result;
|
||||
read_block(znr,blk);
|
||||
for (i=0 ; i < (BLOCK_SIZE>>1) ; i++)
|
||||
chg_blk |= add_zone(i + (unsigned short *) blk);
|
||||
if (chg_blk)
|
||||
write_block(*znr,blk);
|
||||
return result;
|
||||
}
|
||||
|
||||
static int add_zone_dind(unsigned short * znr)
|
||||
{
|
||||
static char blk[BLOCK_SIZE];
|
||||
int i, result, blk_chg=0;
|
||||
|
||||
result = add_zone(znr);
|
||||
if (!*znr || *znr >= ZONES)
|
||||
return result;
|
||||
read_block(znr,blk);
|
||||
for (i=0 ; i < (BLOCK_SIZE>>1) ; i++)
|
||||
blk_chg |= add_zone_ind(i + (unsigned short *) blk);
|
||||
if (blk_chg)
|
||||
write_block(*znr,blk);
|
||||
return result;
|
||||
}
|
||||
|
||||
void check_zones(unsigned int i)
|
||||
{
|
||||
struct d_inode * inode;
|
||||
|
||||
if (!i || i >= INODES)
|
||||
return;
|
||||
if (inode_count[i] > 1) /* have we counted this file already? */
|
||||
return;
|
||||
inode = Inode + i;
|
||||
if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode))
|
||||
return;
|
||||
for (i=0 ; i<7 ; i++)
|
||||
add_zone(i + inode->i_zone);
|
||||
add_zone_ind(7 + inode->i_zone);
|
||||
add_zone_dind(8 + inode->i_zone);
|
||||
}
|
||||
|
||||
void check_file(struct d_inode * dir, unsigned int offset)
|
||||
{
|
||||
static char blk[BLOCK_SIZE];
|
||||
struct d_inode * inode;
|
||||
int ino;
|
||||
char * name;
|
||||
|
||||
changed |= mapped_read_block(dir,offset/BLOCK_SIZE,blk);
|
||||
name = blk + (offset % BLOCK_SIZE) + 2;
|
||||
ino = * (unsigned short *) (name-2);
|
||||
inode = get_inode(ino);
|
||||
if (!offset)
|
||||
if (!inode || strcmp(".",name)) {
|
||||
print_current_name();
|
||||
printf(": bad directory: '.' isn't first\n");
|
||||
} else return;
|
||||
if (offset == 16)
|
||||
if (!inode || strcmp("..",name)) {
|
||||
print_current_name();
|
||||
printf(": bad directory: '..' isn't second\n");
|
||||
} else return;
|
||||
if (!inode)
|
||||
return;
|
||||
if (name_depth < MAX_DEPTH)
|
||||
strncpy(name_list[name_depth],name,14);
|
||||
name_depth++;
|
||||
if (list) {
|
||||
if (verbose)
|
||||
printf("%6d %07o ",ino,inode->i_mode);
|
||||
print_current_name();
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
printf(":\n");
|
||||
else
|
||||
printf("\n");
|
||||
}
|
||||
check_zones(ino);
|
||||
if (inode && S_ISDIR(inode->i_mode))
|
||||
recursive_check(ino);
|
||||
name_depth--;
|
||||
return;
|
||||
}
|
||||
|
||||
void recursive_check(unsigned int ino)
|
||||
{
|
||||
struct d_inode * dir;
|
||||
unsigned int offset;
|
||||
|
||||
dir = Inode + ino;
|
||||
if (!S_ISDIR(dir->i_mode))
|
||||
die("internal error");
|
||||
for (offset = 0 ; offset < dir->i_size ; offset += 16)
|
||||
check_file(dir,offset);
|
||||
}
|
||||
|
||||
void check_counts(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=1 ; i < INODES ; i++) {
|
||||
if (!inode_in_use(i) && Inode[i].i_mode && warn_mode) {
|
||||
printf("Inode %d mode not cleared.",i);
|
||||
if (ask("Clear",1)) {
|
||||
Inode[i].i_mode = 0;
|
||||
changed = 1;
|
||||
}
|
||||
}
|
||||
if (inode_in_use(i)*Inode[i].i_nlinks == inode_count[i])
|
||||
continue;
|
||||
if (!inode_count[i]) {
|
||||
printf("Inode %d not used, marked used in the bitmap.",
|
||||
i);
|
||||
if (ask("Clear",1))
|
||||
unmark_inode(i);
|
||||
} else if (!inode_in_use(i)) {
|
||||
printf("Inode %d used, marked unused in the bitmap.",
|
||||
i);
|
||||
if (ask("Set",1))
|
||||
mark_inode(i);
|
||||
}
|
||||
if (inode_in_use(i) && Inode[i].i_nlinks != inode_count[i]) {
|
||||
printf("Inode %d, i_nlinks=%d, counted=%d.",
|
||||
i,Inode[i].i_nlinks,inode_count[i]);
|
||||
if (ask("Set i_nlinks to count",1)) {
|
||||
Inode[i].i_nlinks=inode_count[i];
|
||||
changed=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i=FIRSTZONE ; i < ZONES ; i++) {
|
||||
if (zone_in_use(i) == zone_count[i])
|
||||
continue;
|
||||
printf("Zone %d: %s in use, counted=%d\n",
|
||||
i,zone_in_use(i)?"":"not",zone_count[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void check(void)
|
||||
{
|
||||
memset(inode_count,0,INODES*sizeof(*inode_count));
|
||||
memset(zone_count,0,ZONES*sizeof(*zone_count));
|
||||
check_zones(ROOT_INO);
|
||||
recursive_check(ROOT_INO);
|
||||
check_counts();
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
struct termios termios,tmp;
|
||||
|
||||
if (argc && *argv)
|
||||
program_name = *argv;
|
||||
if (INODE_SIZE * INODES_PER_BLOCK != BLOCK_SIZE)
|
||||
die("bad inode size");
|
||||
while (argc-- > 1) {
|
||||
argv++;
|
||||
if (argv[0][0] != '-')
|
||||
if (device_name)
|
||||
usage();
|
||||
else
|
||||
device_name = argv[0];
|
||||
else while (*++argv[0])
|
||||
switch (argv[0][0]) {
|
||||
case 'l': list=1; break;
|
||||
case 'a': automatic=1; repair=1; break;
|
||||
case 'r': automatic=0; repair=1; break;
|
||||
case 'v': verbose=1; break;
|
||||
case 's': show=1; break;
|
||||
case 'm': warn_mode=1; break;
|
||||
default: usage();
|
||||
}
|
||||
}
|
||||
if (!device_name)
|
||||
usage();
|
||||
if (repair && !automatic) {
|
||||
if (!isatty(0) || !isatty(1))
|
||||
die("need terminal for interactive repairs");
|
||||
tcgetattr(0,&termios);
|
||||
tmp = termios;
|
||||
tmp.c_lflag &= ~(ICANON|ECHO);
|
||||
tcsetattr(0,TCSANOW,&tmp);
|
||||
}
|
||||
IN = open(device_name,repair?O_RDWR:O_RDONLY);
|
||||
if (IN < 0)
|
||||
die("unable to open '%s'");
|
||||
read_tables();
|
||||
check_root();
|
||||
check();
|
||||
if (verbose) {
|
||||
int i, free;
|
||||
|
||||
for (i=1,free=0 ; i<INODES ; i++)
|
||||
if (!inode_in_use(i))
|
||||
free++;
|
||||
printf("\n%6d inodes used (%d%%)\n",(INODES-free),
|
||||
100*(INODES-free)/INODES);
|
||||
for (i=FIRSTZONE,free=0 ; i<ZONES ; i++)
|
||||
if (!zone_in_use(i))
|
||||
free++;
|
||||
printf("%6d zones used (%d%%)\n",(ZONES-free),
|
||||
100*(ZONES-free)/ZONES);
|
||||
printf("\n%6d regular files\n"
|
||||
"%6d directories\n"
|
||||
"%6d character device files\n"
|
||||
"%6d block device files\n"
|
||||
"%6d links\n"
|
||||
"------\n"
|
||||
"%6d files\n",
|
||||
regular,directory,chardev,blockdev,
|
||||
links-2*directory+1,total-2*directory+1);
|
||||
}
|
||||
if (changed) {
|
||||
write_tables();
|
||||
printf( "----------------------------\n"
|
||||
"FILE SYSTEM HAS BEEN CHANGED\n"
|
||||
"----------------------------\n");
|
||||
}
|
||||
if (repair && !automatic)
|
||||
tcsetattr(0,TCSANOW,&termios);
|
||||
return (0);
|
||||
}
|
||||
BIN
Linux-0.11/sources/sbin/fsck.c.Z
Normal file
BIN
Linux-0.11/sources/sbin/fsck.c.Z
Normal file
Binary file not shown.
96
Linux-0.11/sources/sbin/kill.c
Normal file
96
Linux-0.11/sources/sbin/kill.c
Normal file
@@ -0,0 +1,96 @@
|
||||
/* kill.c : copyright (92) Peter MacDonald: Distribute freely, don't restrict*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
#include <strings.h>
|
||||
|
||||
#define ERR 2
|
||||
const char *usagestr = "usage: kill [-signal] pid ...\n";
|
||||
|
||||
void oops(void)
|
||||
{ write(ERR,usagestr,strlen(usagestr));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
void oops2(char *str1, char *str2)
|
||||
{
|
||||
write(ERR,str1,strlen(str1));
|
||||
write(ERR,str2,strlen(str2));
|
||||
write(ERR,"\n",1);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
char *itoa(int num)
|
||||
{ int sign = 0;
|
||||
static char buf[15];
|
||||
char *cp = buf+sizeof(buf)-1;
|
||||
if (num<0)
|
||||
{ sign = 1;
|
||||
num = -num;
|
||||
}
|
||||
do
|
||||
{
|
||||
*cp-- = '0'+num%10;
|
||||
num /= 10;
|
||||
} while (num);
|
||||
if (sign)
|
||||
*cp-- = '-';
|
||||
return(cp+1);
|
||||
}
|
||||
|
||||
const char *signames[] = {
|
||||
"HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "UNUSED",
|
||||
"FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM",
|
||||
"STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", 0 };
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int i, signum = SIGTERM;
|
||||
|
||||
if (argc < 2)
|
||||
oops();
|
||||
if ((argc>1) && ('-' == *argv[1]))
|
||||
{
|
||||
if ('?' == argv[1][1])
|
||||
for (i=0; i<NSIG; i++)
|
||||
if (!signames[i])
|
||||
{ write(ERR,"\n",1);
|
||||
exit(0);
|
||||
}
|
||||
else
|
||||
{ write(ERR,signames[i],strlen(signames[i]));
|
||||
write(ERR," ", 1);
|
||||
if (i==10)
|
||||
write(ERR,"\n",1);
|
||||
}
|
||||
|
||||
for (i=0; i<NSIG; i++)
|
||||
if (!signames[i])
|
||||
{ i = NSIG;
|
||||
break;
|
||||
}
|
||||
else
|
||||
if (!strcmp(signames[i],argv[1]+1))
|
||||
break;
|
||||
|
||||
if (i < NSIG)
|
||||
signum = i+1;
|
||||
else
|
||||
if ((!(signum = atoi(argv[1]+1))) || (signum<=0) || (signum>NSIG))
|
||||
oops();
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
|
||||
while (--argc)
|
||||
{
|
||||
argv++;
|
||||
if ((i = atoi(*argv)) <= 3)
|
||||
oops();
|
||||
if (kill(i,signum))
|
||||
oops2( "kill: no such process ", itoa(i));
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
365
Linux-0.11/sources/sbin/mkfs.c
Normal file
365
Linux-0.11/sources/sbin/mkfs.c
Normal file
@@ -0,0 +1,365 @@
|
||||
/*
|
||||
* mkfs.c - make a linux (minix) file-system.
|
||||
*
|
||||
* (C) 1991 Linus Torvalds. This file may be redistributed as per
|
||||
* the Linux copyright.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 24.11.91 - time began. Used the fsck sources to get started.
|
||||
*
|
||||
* 25.11.91 - corrected some bugs. Added support for ".badblocks"
|
||||
* The algorithm for ".badblocks" is a bit weird, but
|
||||
* it should work. Oh, well.
|
||||
*
|
||||
* Usuage: mkfs [-c] device size-in-blocks
|
||||
*
|
||||
* -c for readablility checking (SLOW!)
|
||||
*
|
||||
* The device may be a block device or a image of one, but this isn't
|
||||
* enforced (but it's not much fun on a character device :-).
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <termios.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <linux/fs.h>
|
||||
|
||||
#ifndef __GNUC__
|
||||
#error "needs gcc for the bitop-__asm__'s"
|
||||
#endif
|
||||
|
||||
#ifndef __linux__
|
||||
#define volatile
|
||||
#endif
|
||||
|
||||
#define ROOT_INO 1
|
||||
#define BAD_INO 2
|
||||
|
||||
#define TEST_BUFFER_BLOCKS 32
|
||||
#define MAX_GOOD_BLOCKS 512
|
||||
|
||||
#define UPPER(size,n) ((size+((n)-1))/(n))
|
||||
#define INODE_SIZE (sizeof(struct d_inode))
|
||||
#define INODE_BLOCKS UPPER(INODES,INODES_PER_BLOCK)
|
||||
#define INODE_BUFFER_SIZE (INODE_BLOCKS * BLOCK_SIZE)
|
||||
|
||||
#define BITS_PER_BLOCK (BLOCK_SIZE<<3)
|
||||
|
||||
static char * program_name = "mkfs";
|
||||
static char * device_name = NULL;
|
||||
static int DEV = -1;
|
||||
static long BLOCKS = 0;
|
||||
static int check = 0;
|
||||
static int badblocks = 0;
|
||||
|
||||
#define ROOT_INO_STRING "\001\000"
|
||||
#define BAD_INO_STRING "\002\000"
|
||||
|
||||
static char root_block[BLOCK_SIZE] =
|
||||
ROOT_INO_STRING ".\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
ROOT_INO_STRING "..\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
BAD_INO_STRING ".badblocks\0\0\0\0";
|
||||
|
||||
static char * inode_buffer = NULL;
|
||||
#define Inode (((struct d_inode *) inode_buffer)-1)
|
||||
static char super_block_buffer[BLOCK_SIZE];
|
||||
#define Super (*(struct super_block *)super_block_buffer)
|
||||
#define INODES ((unsigned long)Super.s_ninodes)
|
||||
#define ZONES ((unsigned long)Super.s_nzones)
|
||||
#define IMAPS ((unsigned long)Super.s_imap_blocks)
|
||||
#define ZMAPS ((unsigned long)Super.s_zmap_blocks)
|
||||
#define FIRSTZONE ((unsigned long)Super.s_firstdatazone)
|
||||
#define ZONESIZE ((unsigned long)Super.s_log_zone_size)
|
||||
#define MAXSIZE ((unsigned long)Super.s_max_size)
|
||||
#define MAGIC (Super.s_magic)
|
||||
#define NORM_FIRSTZONE (2+IMAPS+ZMAPS+INODE_BLOCKS)
|
||||
|
||||
static char inode_map[BLOCK_SIZE * I_MAP_SLOTS];
|
||||
static char zone_map[BLOCK_SIZE * Z_MAP_SLOTS];
|
||||
|
||||
static unsigned short good_blocks_table[MAX_GOOD_BLOCKS];
|
||||
static int used_good_blocks = 0;
|
||||
|
||||
#define bitop(name,op) \
|
||||
static inline int name(char * addr,unsigned int nr) \
|
||||
{ \
|
||||
int __res; \
|
||||
__asm__ __volatile__("bt" op " %1,%2; adcl $0,%0" \
|
||||
:"=g" (__res) \
|
||||
:"r" (nr),"m" (*(addr)),"0" (0)); \
|
||||
return __res; \
|
||||
}
|
||||
|
||||
bitop(bit,"")
|
||||
bitop(setbit,"s")
|
||||
bitop(clrbit,"r")
|
||||
|
||||
#define inode_in_use(x) (bit(inode_map,(x)))
|
||||
#define zone_in_use(x) (bit(zone_map,(x)-FIRSTZONE+1))
|
||||
|
||||
#define mark_inode(x) (setbit(inode_map,(x)))
|
||||
#define unmark_inode(x) (clrbit(inode_map,(x)))
|
||||
|
||||
#define mark_zone(x) (setbit(zone_map,(x)-FIRSTZONE+1))
|
||||
#define unmark_zone(x) (clrbit(zone_map,(x)-FIRSTZONE+1))
|
||||
|
||||
/*
|
||||
* Volatile to let gcc know that this doesn't return. When trying
|
||||
* to compile this under minix, volatile gives a warning, as
|
||||
* exit() isn't defined as volatile under minix.
|
||||
*/
|
||||
volatile void fatal_error(const char * fmt_string)
|
||||
{
|
||||
fprintf(stderr,fmt_string,program_name,device_name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#define usage() fatal_error("Usage: %s [-c] /dev/name blocks\n")
|
||||
#define die(str) fatal_error("%s: " str "\n")
|
||||
|
||||
void write_tables(void)
|
||||
{
|
||||
if (BLOCK_SIZE != lseek(DEV, BLOCK_SIZE, SEEK_SET))
|
||||
die("seek failed in write_tables");
|
||||
if (BLOCK_SIZE != write(DEV, super_block_buffer, BLOCK_SIZE))
|
||||
die("unable to write super-block");
|
||||
if (IMAPS*BLOCK_SIZE != write(DEV,inode_map,IMAPS*BLOCK_SIZE))
|
||||
die("Unable to write inode map");
|
||||
if (ZMAPS*BLOCK_SIZE != write(DEV,zone_map,ZMAPS*BLOCK_SIZE))
|
||||
die("Unable to write zone map");
|
||||
if (INODE_BUFFER_SIZE != write(DEV,inode_buffer,INODE_BUFFER_SIZE))
|
||||
die("Unable to write inodes");
|
||||
}
|
||||
|
||||
void write_block(int blk, char * buffer)
|
||||
{
|
||||
if (blk*BLOCK_SIZE != lseek(DEV, blk*BLOCK_SIZE, SEEK_SET))
|
||||
die("seek failed in write_block");
|
||||
if (BLOCK_SIZE != write(DEV, buffer, BLOCK_SIZE))
|
||||
die("write failed in write_block");
|
||||
}
|
||||
|
||||
int get_free_block(void)
|
||||
{
|
||||
int blk;
|
||||
|
||||
if (used_good_blocks+1 >= MAX_GOOD_BLOCKS)
|
||||
die("too many bad blocks");
|
||||
if (used_good_blocks)
|
||||
blk = good_blocks_table[used_good_blocks-1]+1;
|
||||
else
|
||||
blk = FIRSTZONE;
|
||||
while (blk < ZONES && zone_in_use(blk))
|
||||
blk++;
|
||||
if (blk >= ZONES)
|
||||
die("not enough good blocks");
|
||||
good_blocks_table[used_good_blocks] = blk;
|
||||
used_good_blocks++;
|
||||
return blk;
|
||||
}
|
||||
|
||||
void mark_good_blocks(void)
|
||||
{
|
||||
int blk;
|
||||
|
||||
for (blk=0 ; blk < used_good_blocks ; blk++)
|
||||
mark_zone(good_blocks_table[blk]);
|
||||
}
|
||||
|
||||
inline int next(int zone)
|
||||
{
|
||||
if (!zone)
|
||||
zone = FIRSTZONE-1;
|
||||
while (++zone < ZONES)
|
||||
if (zone_in_use(zone))
|
||||
return zone;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void make_bad_inode(void)
|
||||
{
|
||||
struct d_inode * inode = &Inode[BAD_INO];
|
||||
int i,j,zone;
|
||||
int ind=0,dind=0;
|
||||
unsigned short ind_block[BLOCK_SIZE>>1];
|
||||
unsigned short dind_block[BLOCK_SIZE>>1];
|
||||
|
||||
#define NEXT_BAD (zone = next(zone))
|
||||
|
||||
if (!badblocks)
|
||||
return;
|
||||
mark_inode(BAD_INO);
|
||||
inode->i_nlinks = 1;
|
||||
inode->i_time = time(NULL);
|
||||
inode->i_mode = S_IFREG + 0000;
|
||||
inode->i_size = badblocks*BLOCK_SIZE;
|
||||
zone = next(0);
|
||||
for (i=0 ; i<7 ; i++) {
|
||||
inode->i_zone[i] = zone;
|
||||
if (!NEXT_BAD)
|
||||
goto end_bad;
|
||||
}
|
||||
inode->i_zone[7] = ind = get_free_block();
|
||||
memset(ind_block,0,BLOCK_SIZE);
|
||||
for (i=0 ; i<512 ; i++) {
|
||||
ind_block[i] = zone;
|
||||
if (!NEXT_BAD)
|
||||
goto end_bad;
|
||||
}
|
||||
inode->i_zone[8] = dind = get_free_block();
|
||||
memset(dind_block,0,BLOCK_SIZE);
|
||||
for (i=0 ; i<512 ; i++) {
|
||||
write_block(ind,(char *) ind_block);
|
||||
dind_block[i] = ind = get_free_block();
|
||||
memset(ind_block,0,BLOCK_SIZE);
|
||||
for (j=0 ; j<512 ; j++) {
|
||||
ind_block[j] = zone;
|
||||
if (!NEXT_BAD)
|
||||
goto end_bad;
|
||||
}
|
||||
}
|
||||
die("too many bad blocks");
|
||||
end_bad:
|
||||
if (ind)
|
||||
write_block(ind, (char *) ind_block);
|
||||
if (dind)
|
||||
write_block(dind, (char *) dind_block);
|
||||
}
|
||||
|
||||
void make_root_inode(void)
|
||||
{
|
||||
struct d_inode * inode = &Inode[ROOT_INO];
|
||||
|
||||
mark_inode(ROOT_INO);
|
||||
inode->i_zone[0] = get_free_block();
|
||||
inode->i_nlinks = 2;
|
||||
inode->i_time = time(NULL);
|
||||
if (badblocks)
|
||||
inode->i_size = 48;
|
||||
else
|
||||
inode->i_size = 32;
|
||||
inode->i_mode = S_IFDIR + 0755;
|
||||
write_block(inode->i_zone[0],root_block);
|
||||
}
|
||||
|
||||
void setup_tables(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
memset(inode_map,0xff,sizeof(inode_map));
|
||||
memset(zone_map,0xff,sizeof(zone_map));
|
||||
memset(super_block_buffer,0,BLOCK_SIZE);
|
||||
MAGIC = SUPER_MAGIC;
|
||||
ZONESIZE = 0;
|
||||
MAXSIZE = (7+512+512*512)*1024;
|
||||
ZONES = BLOCKS;
|
||||
/* some magic nrs: 1 inode / 3 blocks */
|
||||
INODES = BLOCKS/3;
|
||||
/* I don't want some off-by-one errors, so this hack... */
|
||||
if ((INODES & 8191) > 8188)
|
||||
INODES -= 5;
|
||||
if ((INODES & 8191) < 10)
|
||||
INODES -= 20;
|
||||
IMAPS = UPPER(INODES,BITS_PER_BLOCK);
|
||||
ZMAPS = 0;
|
||||
while (ZMAPS != UPPER(BLOCKS - NORM_FIRSTZONE,BITS_PER_BLOCK))
|
||||
ZMAPS = UPPER(BLOCKS - NORM_FIRSTZONE,BITS_PER_BLOCK);
|
||||
FIRSTZONE = NORM_FIRSTZONE;
|
||||
for (i = FIRSTZONE ; i<ZONES ; i++)
|
||||
unmark_zone(i);
|
||||
for (i = ROOT_INO ; i<INODES ; i++)
|
||||
unmark_inode(i);
|
||||
inode_buffer = malloc(INODE_BUFFER_SIZE);
|
||||
if (!inode_buffer)
|
||||
die("Unable to allocate buffer for inodes");
|
||||
memset(inode_buffer,0,INODE_BUFFER_SIZE);
|
||||
printf("%d inodes\n",INODES);
|
||||
printf("%d blocks\n",ZONES);
|
||||
printf("Firstdatazone=%d (%d)\n",FIRSTZONE,NORM_FIRSTZONE);
|
||||
printf("Zonesize=%d\n",BLOCK_SIZE<<ZONESIZE);
|
||||
printf("Maxsize=%d\n\n",MAXSIZE);
|
||||
}
|
||||
|
||||
void check_blocks(void)
|
||||
{
|
||||
unsigned int current_block=0;
|
||||
int try,got;
|
||||
static char buffer[BLOCK_SIZE * TEST_BUFFER_BLOCKS];
|
||||
|
||||
while (current_block < ZONES) {
|
||||
if (lseek(DEV,current_block*BLOCK_SIZE,SEEK_SET) !=
|
||||
current_block*BLOCK_SIZE)
|
||||
die("seek failed in check_blocks");
|
||||
try = TEST_BUFFER_BLOCKS;
|
||||
if (current_block + try > ZONES)
|
||||
try = ZONES-current_block;
|
||||
got = read(DEV, buffer, try * BLOCK_SIZE);
|
||||
if (got<0)
|
||||
got = 0;
|
||||
if (got & (BLOCK_SIZE-1))
|
||||
printf("Weird values in check_blocks: probably bugs\n");
|
||||
got /= BLOCK_SIZE;
|
||||
current_block += got;
|
||||
if (got == try)
|
||||
continue;
|
||||
if (current_block < FIRSTZONE)
|
||||
die("bad blocks before data-area: cannot make fs");
|
||||
mark_zone(current_block);
|
||||
badblocks++;
|
||||
current_block++;
|
||||
}
|
||||
if (badblocks)
|
||||
printf("%d bad block%s\n",badblocks,(badblocks>1)?"s":"");
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
char * tmp;
|
||||
struct stat statbuf;
|
||||
|
||||
if (argc && *argv)
|
||||
program_name = *argv;
|
||||
if (INODE_SIZE * INODES_PER_BLOCK != BLOCK_SIZE)
|
||||
die("bad inode size");
|
||||
while (argc-- > 1) {
|
||||
argv++;
|
||||
if (argv[0][0] != '-')
|
||||
if (device_name) {
|
||||
BLOCKS = strtol(argv[0],&tmp,0);
|
||||
if (*tmp)
|
||||
usage();
|
||||
} else
|
||||
device_name = argv[0];
|
||||
else while (*++argv[0])
|
||||
switch (argv[0][0]) {
|
||||
case 'c': check=1; break;
|
||||
default: usage();
|
||||
}
|
||||
}
|
||||
if (!device_name || BLOCKS<10 || BLOCKS > 65536)
|
||||
usage();
|
||||
DEV = open(device_name,O_RDWR);
|
||||
if (DEV<0)
|
||||
die("unable to open %s");
|
||||
if (fstat(DEV,&statbuf)<0)
|
||||
die("unable to stat %s");
|
||||
if (!S_ISBLK(statbuf.st_mode))
|
||||
check=0;
|
||||
else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0305)
|
||||
die("Will not try to make filesystem on '%s'");
|
||||
setup_tables();
|
||||
if (check)
|
||||
check_blocks();
|
||||
make_root_inode();
|
||||
make_bad_inode();
|
||||
mark_good_blocks();
|
||||
write_tables();
|
||||
return 0;
|
||||
}
|
||||
BIN
Linux-0.11/sources/sbin/mount.c.Z
Normal file
BIN
Linux-0.11/sources/sbin/mount.c.Z
Normal file
Binary file not shown.
54
Linux-0.11/sources/sbin/nice.c
Normal file
54
Linux-0.11/sources/sbin/nice.c
Normal file
@@ -0,0 +1,54 @@
|
||||
/* nice.c: copywrite (92) Peter MacDonald: Distribute freely, don't restrict */
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
|
||||
/* link nice to renice to change running processes priorities. */
|
||||
|
||||
int is_nice;
|
||||
|
||||
void usage()
|
||||
{
|
||||
if (is_nice)
|
||||
puts("usage: nice [-n] command");
|
||||
else
|
||||
puts("usage: renice [-n] pid");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
int renice(int priority, int pid)
|
||||
{
|
||||
puts("renice system call not yet implemented");
|
||||
return(0);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int priority = 10;
|
||||
|
||||
is_nice = (strcmp(*argv+strlen(*argv)-6,"renice"));
|
||||
|
||||
if ((argc>1) && (argv[1][0] == '-'))
|
||||
{ priority = atoi(argv[1]+1);
|
||||
if ((priority>19) || (priority<-20))
|
||||
usage();
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
|
||||
if (argc<2)
|
||||
usage();
|
||||
|
||||
if (!is_nice)
|
||||
if (renice(priority,atoi(argv[1])))
|
||||
usage();
|
||||
else
|
||||
return(0);
|
||||
|
||||
if (nice(priority))
|
||||
usage();
|
||||
|
||||
execvp(argv[1], argv+1);
|
||||
puts("can not execute");
|
||||
exit(-1);
|
||||
}
|
||||
481
Linux-0.11/sources/sbin/setroot.c
Normal file
481
Linux-0.11/sources/sbin/setroot.c
Normal file
@@ -0,0 +1,481 @@
|
||||
From: hns@regent.e-technik.tu-muenchen.dbp.de (Henning Spruth)
|
||||
Newsgroups: alt.os.linux
|
||||
Subject: DOS program to set root device
|
||||
Date: 25 Mar 92 09:06:28 GMT
|
||||
|
||||
Here is a small DOS program I hacked using Turbo C to be able to
|
||||
conveniently set the root partition. It is quite primitive, as it
|
||||
requires major/minor device numbers and can only access a boot disk in
|
||||
drive A:, but it works. Using it, installing Linux can be done in
|
||||
these steps:
|
||||
|
||||
1. boot the Linux boot disk
|
||||
2. make HD file system
|
||||
3. run install script
|
||||
4. sync
|
||||
5. boot DOS
|
||||
6. run setroot.exe to set root file system to HD
|
||||
7. boot the Linux boot disk again
|
||||
|
||||
Here's the source:
|
||||
|
||||
------------------------- begin setroot.c ------------------------------
|
||||
#include <stdio.h>
|
||||
#include <bios.h>
|
||||
#include <conio.h>
|
||||
|
||||
char buffer[512];
|
||||
|
||||
void check(int res)
|
||||
{
|
||||
if(res==0) return;
|
||||
printf("Disk error status: %x\n",res);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
main()
|
||||
{
|
||||
int result,x;
|
||||
char in[80];
|
||||
unsigned int major, minor;
|
||||
printf("\n\nInsert Linux boot disk into drive A: and hit a key ...");
|
||||
getch();
|
||||
printf("\n");
|
||||
printf("Resetting controller ...\n");
|
||||
result=biosdisk(0,0,0,0,1,1,buffer);
|
||||
check(result);
|
||||
printf("Loading boot sector ...\n");
|
||||
result=biosdisk(2,0,0,0,1,1,buffer);
|
||||
if(result==6) result=biosdisk(2,0,0,0,1,1,buffer);
|
||||
check(result);
|
||||
printf("Current major boot device: %d\n",buffer[509]);
|
||||
printf("Current minor boot device: %d\n",buffer[508]);
|
||||
printf("\n");
|
||||
printf("New device values:\n");
|
||||
printf("Enter new major device: ");
|
||||
gets(in);
|
||||
sscanf(in,"%d",&major);
|
||||
printf("Enter new minor device: ");
|
||||
gets(in);
|
||||
sscanf(in,"%d",&minor);
|
||||
printf("\nCheck: changing root disk to major %d, minor %d\n",major,minor);
|
||||
printf("Is this OK (y/n)? ");
|
||||
x=getch(); printf("\n");
|
||||
if(x!='y')
|
||||
{ printf("Aborting ...\n");
|
||||
exit(0);
|
||||
}
|
||||
buffer[508]=minor;
|
||||
buffer[509]=major;
|
||||
printf("Writing boot sector ...\n");
|
||||
result=biosdisk(3,0,0,0,1,1,buffer);
|
||||
check(result);
|
||||
printf("Root device changed!\n");
|
||||
}
|
||||
------------------------- end setroot.c ------------------------------
|
||||
|
||||
|
||||
Here is the uuencoded executable:
|
||||
|
||||
------------------------- begin setroot.uue ----------------------------
|
||||
begin 664 setroot.exe
|
||||
M35KP 1D P @ ___W H /@ $ ^S!J<@
|
||||
M ! W@ ! !
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M "Z;0(NB18U K0PS2&++@( BQXL ([:HY C :.
|
||||
M (D>B@")+J8 Z#T!Q#Z( (O'B]BY_W_\\J[C84,F. 5U]H#-@/?9B0Z( +D!
|
||||
M -/C@\,(@^/XB1Z, (S:*^J+/K@$@?\ G,'OP "B3ZX!(''G@AR* ,^L 1R
|
||||
M(K$$T^]'.^]R&8,^N 0 = >#/K $ '4.OP 0.^]W!XO]ZP/IA &+WP/:B1Z>
|
||||
M (D>H@"AC@ KV([ M$I7S2%?T^?ZCM*+Y_LSP"Z.!C4"OUH&N9X(*\_\\ZJT
|
||||
M ,T:B1:4 (D.E@ S[;AL H[8O@ OPP Z.H +HX>-0+_-H8 _S:$ /\V@@#H
|
||||
M6P$NQ@;G 7(NQ@;6 0!0Z$8$N&P"CMB^# "_# #HN NCAXU O\60@/_%D0#
|
||||
M_Q9& RZ.'C4"Z'( ,\"+\+DM ($@-0 1N+X+:4,= FY&0"Z+0#HQ0"+[+1,
|
||||
MBD8"S2&Y#@"Z1@#IP0 >N US2&)'G( C 9T +@$-<TAB1YV (P&> "X!37-
|
||||
M(8D>>@",!GP N 8US2&)'GX C : +@ )8S*CMJZ7 '-(1_#'K@ )<46<@#-
|
||||
M(1\>N 0EQ19V ,TA'QZX!27%%GH S2$?'K@&)<46?@#-(1_#M/^+UXO>.]]T
|
||||
M%( __W0*.&<!=P6*9P&+TX/#!NOH.]=T((O:'@<&@#\ Q@?_+HX>-0)T!R;_
|
||||
M7P(?Z\4F_U<"'^N^P[1 NP( S2'#N1X NE0 +HX>-0+HZO^X P!0Z/G^ !
|
||||
M %6+[(-^! !U NL4_W8$N*@ 4.A_!EE9N $ 4.C^ EE=PU6+[(/L5%97N+\
|
||||
M4.AD!EGH"!.X^ !0Z%D&6;CZ %#H4099N%H&4+@! %"X 0!0,\!0,\!0,\!0
|
||||
M,\!0Z-L.@\0.B_!6Z)C_6;@4 5#H) 99N%H&4+@! %"X 0!0,\!0,\!0,\!0
|
||||
MN ( 4.BM#H/$#HOP@_X&=2&X6@90N $ 4+@! % SP% SP% SP%"X @!0Z(<.
|
||||
M@\0.B_!6Z$3_6:!7")A0N"T!4.C+!5E9H%8(F%"X3 %0Z+T%65FX:P%0Z+0%
|
||||
M6;AM 5#HK 59N($!4.BD!5F-1JQ0Z @$68U&_E"XF@%0C4:L4.BC#(/$!KB=
|
||||
M 5#H@@59C4:L4.CF UF-1OQ0N+8!4(U&K%#H@0R#Q ;_=OS_=OZXN0%0Z%H%
|
||||
M@\0&N.L!4.A0!5GH]!&+^+C^ 5#H0P59@_]Y= ^X )0Z#8%63/ 4.BW 5F*
|
||||
M1ORB5@B*1OZB5PBX#@)0Z!L%6;A:!E"X 0!0N $ 4#/ 4#/ 4#/ 4+@# %#H
|
||||
MI V#Q Z+\%;H8?Y9N"<"4.CM!%E?7HOE7<-5B^R#/CX"('4%N $ ZQ.+'CX"
|
||||
MT>.+1@2)AUH(_P8^ C/ 7<-5B^R#[ C&1OL Z!\,M ")1O[H%PRQ"-/HM ")
|
||||
M1OSIWP"+7@C_1@B*!XA&^[0 +0< B]B#^P9W+M'C+O^G, 6T#K 'Z .ZW:@
|
||||
MO 2T #M&_GUL_T[^ZV>@O 2T (E&_NM=_T;\ZUB@Q02T O =2Z#/LL$ '0G
|
||||
MBB; !(I&^XE&^(M&_D!0BT;\0%#HDAY24!:-1OA0N $ 4.BJ'NL>BE;^BG;\
|
||||
MM *W .B<#8H>P 2*1ONT";< N0$ Z(L-_T;^H+X$M [1OY]$J"\!+0 B4;^
|
||||
MBT;\ P:Z!(E&_*"_!+0 .T;\?1RP!E"@O 10H+T$4*"^!%"@OP10L %0Z!@(
|
||||
M_T[\BT8&_TX&"\!T ^D4_XI6_HIV_+0"MP#H+ V*1ONT (OE7<(& $H$4P1Q
|
||||
M!&P$<01Q!&($58OLN L$4#/ 4/]V!(U&!E#H%!E=P\-5B^SK"HL>/@+1X_^7
|
||||
M6@BA/@+_#CX""\!UZ_]V!.B:^UE=PU6+[%97BW8$"_9U!>AS .MK.70.= 6X
|
||||
M___K8X,\ 'PI]T0"" !U"HO&!04 .40*=1;'! B\8%!0 Y1 IU"(M$"(E$
|
||||
M"NLUZS.+1 8#!$"+^(L$*\>)!%>+1 B)1 I0BD0$F%#HA J#Q 8[QW0.]T0"
|
||||
M )U!X%, A ZYHSP%]>7<-5B^Q,3%97QT;^ "_% "^2 /K$O=$ @, = A6
|
||||
MZ%__6?]&_H/&$(O'3PO =>>+1OY?7HOE7<-5B^Q65XM>!(,_ 'T(BT<& P=
|
||||
MZPJ+7@2+!YDSPBO"B_"+R(M>!/=' D = +K+XM>!(M_"H,_ 'T=ZPE/B]^
|
||||
M/PIU 4&+QDX+P'7PZQ"+WT> /PIU 4&+QDX+P'7PB\%?7EW" @!5B^Q6BW8$
|
||||
M5NC7_ED+P'0%N/__ZTJ#?@H!=1"#/ !^"U;H=O^9*48&&58(@60"7_['!
|
||||
MBT0(B40*_W8*_W8(_W8&BD0$F%#H- ^#Q B#^O]U"CW__W4%N/__ZP(SP%Y=
|
||||
MPU6+[(/L!%:+=@2*1 284.@5"5F)1OR)5OZ#/ !]#5;H%O^9 4;\$5;^ZPM6
|
||||
MZ G_F2E&_!E6_HM6_HM&_%Z+Y5W#58OL3$Q65XM^!(OWZP:*1OZ(!$:A2 -(
|
||||
MHT@#"\!\#HL>4@/_!E(#B@>T .L(N$@#4.A(#5F)1OX]__]T!3T* '7,@W[^
|
||||
M_W4(._=U!#/ ZQ'&! #W!DH#$ !T!#/ ZP*+QU]>B^5=PU6+[%97_W8$_W8&
|
||||
M_W8(_W8*Z L%"\!U!#/ ZR^+1@@K1@1 B_B+=@;K&1[_=@S_=@16Z%4;4E!7
|
||||
MZ*<$B\?1X %&#$8[=@I^XK@! %]>7<-5B^Q65XM&""M&!$"+^(MV!NL9_W8$
|
||||
M5N@A&U)0'O]V#%?H;P2+Q]'@ 48,1CMV"G[BN $ 7UY=PU6+[(/L!E97BWX&
|
||||
M_W8$5_]V"/]V"NB ! O ="3_=@S_=@Z+1@@K1@2+5@P#T%*+1@HKQXM6#@/0
|
||||
M4NA<! O =00SP.M<B7[^BT8*B4;\QT;Z 0 [?@Y]#HM&"HE&_HE^_,=&^O__
|
||||
MBW;^ZRG_=@R+QBO'BU8. ]!2Z(D:4E#_=@16Z( :4E"+1@@K1@1 4.C+ P-V
|
||||
M^HM&_ -&^CO&=<VX 0!?7HOE7<-5B^RX% I0N%@#4/]V!(U&!E#HA!5=PU6+
|
||||
M[%:+=@:+!$B)!%:*1@284.@% %E97EW#58OL5HMV!HI&!**:"(,\_WTWBP1
|
||||
MB02+7 K_1 J@F@B(!_=$ @@ =!V /IH("G0'@#Z:" UU#U;H/_Q9"\!T!KC_
|
||||
M_^FY .FQ /=$ I =0?W1 (" '4'@4P"$ #KXH%, @ !@WP& '1$@SP = M6
|
||||
MZ C\60O = +KQXM$!O?8B02+7 K_1 J@F@B(!_=$ @@ =!F /IH("G0'@#Z:
|
||||
M" UU"U;HUOM9"\!T NN5ZTV /IH("G4?]T0"0 !U&+@! %"XL@10BD0$F%#H
|
||||
M !J#Q 8] 0!U&+@! %"XF@A0BD0$F%#HZ!F#Q 8] 0!T#_=$ @ "=0B!3 (0
|
||||
M .E&_Z":"+0 7EW#58OL5HMV!+A8 U!6Z._^65E>7<-5B^Q,3%97BWX&BW8$
|
||||
MB7[^]T0"" !T)NL:5HM>"/]&"(H'F%#HP_Y963W__W4%,\#I]P"+QT\+P'7?
|
||||
MZ>H ]T0"0 !U ^F# (-\!@!T93E\!G,H@SP = M6Z G[60O = +KS%?_=@B*
|
||||
M1 284.A'&8/$!CO'<P+KM^FM (L$ \=\&H,\ '4*N/__*T0&B03K"U;HT?I9
|
||||
M"\!T NN45_]V"/]T"NAI#(/$!HL$ \>)! %\"NMU5_]V"(I$!)A0Z/<8@\0&
|
||||
M.\=S ^EF_^M=@WP& '1!ZS:+!$")! O ?1:+7 K_1 I3BUX(_T8(B@=;B >T
|
||||
M .L/5HM>"/]&"(H'4.C2_5E9/?__=0/I)O^+QT\+P'7#ZQ97_W8(BD0$F%#H
|
||||
M,@6#Q 8[QW,#Z0?_BT;^7UZ+Y5W"!@!5B^R-1@10N $ 4#/ 4.BT^%W#58OL
|
||||
M3$R+1@31Z(O(H,0$M !0B\$STEOW\XA&_[0 BA;$!+8 ]^J*T2K0B%;^BF;_
|
||||
MBL*+Y5W"! !5B^Q65XM^!HMV!(L5.Q1T";< M +HJ :)%/[".A;$!'($_L:R
|
||||
M (D57UY=P@0 58OL@^P*5E?H;02)1OB)1OJ+1@P[!LD$=06X 0#K C/ B4;V
|
||||
M"\!T#/]V#/]V"NAI_XE&_HM&"#L&R01U!;@! .L",\"+^ O =%W_=@C_=@;H
|
||||
M1_^)1OSK3PO_=!:-1OQ0C4;Z4.AK_[< M CH) :+\.L*Q%X&)HLW@T8& H-^
|
||||
M]@!T&XU&_E"-1OI0Z$7_B\:*W+D! +< M GH]P7K"L1>"B:)-X-&"@*+1@3_
|
||||
M3@0+P'6GBU;XMP"T NC7!5]>B^5=P@H 58OLH,4$M +P'4;@S[+! !T%/]V
|
||||
M#/]V"O]V"/]V!O]V!.BI%NL2_W8,_W8*_W8(_W8&_W8$Z 3_7<(* %6+[*#$
|
||||
M!+0 B\B@PP2T (O0.4X*=R0Y3@9W'XM&"CM&!G\7.58(=Q(Y5@1W#8M&"#M&
|
||||
M!'\%N $ ZP(SP%W"" !5B^Q65XMV"(M^!HL,L2#K!8D,1D9'.WX$?O9?7EW"
|
||||
M!@!5B^R![* H,4$M +P'0#Z3@!@S[+! !U ^DN 8!^! %T ^DE ?Y&#/Y&
|
||||
M"OY&"/Y&!H!^#@9T ^F( (I&"K0 4(I&#+0 4(I&!K0 4(I&"+0 4(I&"K0
|
||||
M0%"*1@RT %#HI/J#Q R-AF#_4(I&!K0 4(I&#+0 4(I&!K0 4(I&#+0 4.CZ
|
||||
M^8/$"HV&8/]0BD8,M !0BD8(M !0Z$+_C89@_U"*1@:T %"*1@BT %"*1@:T
|
||||
M %"*1@RT %#H$OJ#Q KIH0"*1@JT $!0BD8,M !0BD8&M !(4(I&"+0 4(I&
|
||||
M"K0 4(I&#+0 4.@;^H/$#(V&8/]0BD8*M !0BD8,M !0BD8*M !0BD8,M !0
|
||||
MZ''Y@\0*C89@_U"*1@RT %"*1@BT %#HN?Z-AF#_4(I&"K0 4(I&"+0 4(I&
|
||||
M"K0 4(I&#+0 4.B)^8/$"NL9BC[ !(IF#HI&!(IN"HI.#(IV!HI6".C- XOE
|
||||
M7<(, *!, YA0Z'('60O =0:!)DH#__VX )0A09* W0%N $ ZP(SP% SP%"X
|
||||
M2 -0Z#8 @\0(H%P#F%#H0 =9"\!U!H$F6@/__;@ E"%!EH#= 6X @#K C/
|
||||
M4#/ 4+A8 U#H! "#Q C#58OL5E>+=@2+?@HY= YU#(-^" )_!H'__W]V!KC_
|
||||
M_^FF (,^M@0 =0Z!_E@#=0C'!K8$ 0#K$X,^M 0 =0R!_D@#=0;'!K0$ 0"#
|
||||
M/ !T$;@! % SP#/24%)6Z$KW@\0(]T0"! !T!_]T".CD%%F!9 +S_\=$!@
|
||||
MB\8%!0")1 B)1 J#?@@"=#T+_W8YQP9" U(1@WX& '465^B#%5F)1@8+P'0'
|
||||
M@4P"! #K ^EM_XM&!HE$"HE$"(E\!H-^" %U!8%, @@ ,\!?7EW#58OL5HM>
|
||||
M!(LW_P>*!(K0"L!U!;C__^L$BL*T %Y=PU6+[(M>!O\/7<-5B^R-1@A0_W8&
|
||||
MC48$4+C:#U"XNP]0Z!0(@\0*7<-5B^S_=@C_=@:-1@10N-H/4+B[#U#H]P>#
|
||||
MQ I=PU6+[+@! % SP#/24%+_=@3HXP6#Q A=P[0#MP#H$P*+PL/H\_^T (H6
|
||||
MO 2V "O"0,/HY/^Q"-/HM "*%KT$M@ KPD##58OL@>R* %97BT8(0#T" ',%
|
||||
M,\#IT@"+7@31X_>'B 0 @'02_W8(_W8&_W8$Z#83@\0&Z;, BUX$T>.!IX@$
|
||||
M__V+1@:)1OB+1@B)1OSK5?]._(M>^/]&^(H'B$;[/ IU!,8$#4:*1ON(!$:-
|
||||
MAG;_B]8KT('Z@ !\,8O6*]"+^E)0_W8$Z-\2@\0&B4;^.\=T$PO <P6X___K
|
||||
M2HM&""M&_.L]ZT"-AG;_B_"#?OP =9^-AG;_B]8KT(OZB\(+P'8F4HV&=O]0
|
||||
M_W8$Z)H2@\0&B4;^.\=T$ O <P+KN8M&" -&_BO'ZP.+1@A?7HOE7<-65[\$
|
||||
M +Y( ^L0]T0" P!T!5;H$?193X/&$ O_=>Q?7L-5B^P>!XIF!(I&#HM>$(M.
|
||||
M"M'IT>F X< "3@R*;@J*=@B*5@;-$X!^! AU!8D/B5<"BL2T %W#58OLBT8$
|
||||
MB]2!Z@ ".\)S!Z.: #/ ZPG'!I( " "X__]=PU6+[(M&!(M6!@,&F@"#T@"+
|
||||
MR O2=1"!P0 "<@H[S',&AP:: .L)QP:2 @ N/__7<-5B^S_=@3HI/]97<-5
|
||||
MB^R+1@294E#HM_]965W#58OL5HMV!.L4Q%X&_T8&)HH'B]Y&.@=T!#/ ZPB
|
||||
M/ !UY[@! %Y=P@8 M!*S$.@' (K#!/"T ,-5'E&Y0 ".V5F _ !T"8#\#W16
|
||||
MS1#K:CP#=1JX !K-$#P:= 6 )H< _K0!N0<&S1"X P#KWCQ ==JS$+02S1"
|
||||
M^Q!T/;@2$3+;S1"X !*S(,T0N :S1 \&G0F@ Z' &T ;D !LT0ZQC-$#P#
|
||||
M=1)0Z'__"L!8= F /H0 &'0"L$ ?7<.T#^AW_U#H%P!9M BW .AK_XK$)'^*
|
||||
MX(@FP02()L $PU6+[(I&!*+"!+0/Z$[_B";$!#H&P@1T+:#"!+0 Z#S_M _H
|
||||
M-_^BP@2()L0$@#["! -U$KA ([ )H ^A 8?@7&!L($0( ^P@0#=A. /L($
|
||||
M0',,@#["! =T!;@! .L",\"BQ02 /L($0'0$L!GK"[A ([ )J"$ /[ HL,$
|
||||
M@#["! =T'[@ \+KJ_U!2N,T$4.B1_@O =0SHM/X+P'4%N $ ZP(SP*+&!( ^
|
||||
MP@0'=06X +#K [@ N*/)!,<&QP0 + HKT$HKP$H,0$!/^BO@2@PP0$_Z*_
|
||||
M!%W#58OL@^P$BUX$T>/WAX@$ )T!;@! .M,N !$BUX$S2%R/O;"@'4UN %"
|
||||
M,\F+T<TA<BY24+@"0C/)B]'-(8E&_(E6_EI9<AFX $+-(7(2.U;^<@EW!3M&
|
||||
M_'("Z[<SP.L$4.B4 8OE7<-65[\4 +Y( ^L3BT0")0 #/0 #=056Z"CQ68/&
|
||||
M$(O'3PO =>9?7L-5B^Q6BW8$]T0" )T ^C(__]T!HM$"(E$"E"*1 284.C!
|
||||
M H/$!HD$"\!^"(-D M\SP.L>@SP =0Z+1 (E?_X-( ")1 +K",<$ "#3 (0
|
||||
MN/__7EW" @!5B^Q6BW8$BP1 B016Z 0 65Y=PU6+[%:+=@2#/ !^$(L$2(D$
|
||||
MBUP*_T0*B@?I@@"#/ !\!_=$ A != F#3 (0N/__ZV^!3 * (-\!@!T#%;H
|
||||
M5?\+P'0"Z^;KQ/=$ @ "= /H'/^X 0!0N)P(4(I$!)A0Z,P"@\0&"\!U((I$
|
||||
M!)A0Z)7^63T! '0"ZZ^+1 (E?_X-( ")1 +KI>NC@#Z<" UU!_=$ D =+&#
|
||||
M9 +?H)P(M !>7<.X2 -0Z%;_6<. /M0$ '0*Q@;4! "@U03K!;@ !\TAM ##
|
||||
M5H ^U 0 = ?HW/^+\.L*Z-7_B_!0Z*#U68O&7L-5B^R /M0$ '0%N/__ZPO&
|
||||
M!M0$ 8M&!*+5!%W#58OL5HMV! OV?!6#_EA^ [Y7 (DVU@2*A-@$F(OPZQ&+
|
||||
MQO?8B_ ](P!_Y<<&U@3__XDVD@"X__]>7<(" %6+[+@ 1(M>!,TADB6 %W#
|
||||
M58OLBUX$T>.!IX@$__VT0HI&"HM>!(M."(M6!LTA<@+K!5#HC/^97<-5B^R#
|
||||
M[")65P:+?@H>!XM>"(/[)'=8@/L"<E.+1@R+3@X+R7T1@'X& '0+Q@4M1_?9
|
||||
M]]B#V0"-=M[C#Y$KTO?SD??SB!1&XPGK\2O2]_.(%$8+P'7UC4[>]]D#SOQ.
|
||||
MB@0L"G,$!#KK P)&!*KB[[ J@>+1@I?7HOE7<(, %6+[(-^" IU!HM&!)GK
|
||||
M!8M&!#/24E#_=@;_=@BP 5"P85#H7O]=PU6+[/]V!O]V!/]V"/]V"K 4+!A
|
||||
M4.A$_UW#58OL_W8&_W8$_W8(_W8*@WX*"G4%N $ ZP(SP%"P85#H'_]=PU6+
|
||||
M[%97C-B.P(M^!(MV!HM."-'I_/.E<P&DBT8$7UY=PU6+[(/L!%97BT8(0#T"
|
||||
M '(-BUX$T>/WAX@$ )T!3/ Z8P _W8(_W8&_W8$Z(8 @\0&B4;^0#T" '(-
|
||||
MBUX$T>/WAX@$ (!T!8M&_NMBBT[^BW8&'@>+_HO>_*P\&G0M/ UT!:KB].L<
|
||||
MXO &4[@! %"-1OU0_W8$Z#L @\0&6P?\BD;]JCO[=0+KF>L@4[@! %#WV1O
|
||||
M4%'_=@3H-OZ#Q B+7@31XX&/B 0 ELK^Y=?7HOE7<-5B^RT/XM>!(M."(M6
|
||||
M!LTA<@+K!%#HN/U=PU6+[(/L*E97QT;\ #'1OH .L9BWX,]D;_('0'Q#V#
|
||||
M1@P$PXL]'@>#1@P"PP;\BW8*K K =%T\)71<F)?_1OK_=@C_5@19"\!\)0O_
|
||||
M>#* O3(% 74KDPK;>!B OS(% 741_T;Z_W8(_U8$60O ?^;I30/_=@A3_U8&
|
||||
M65G_3OKKL3O'=*W_=@A0_U8&65G_3OKI0 /I/0/'1O;__\9&_P"LF(EV"I<+
|
||||
M_WP9BITR!3+_@_L5=@/I" /1XR[_IW@<E^EX_^D. X!._P'KU(/O,(=^]@O_
|
||||
M?,JX"@#WYP%&]NO @$[_".NZ@$[_!.NT@$[_ NNN@&;_W^NH@$[_(.NBBT;Z
|
||||
M*]+V1O\!=$_KE;X( .L,O@H ZP>^$ #K C/V]\<@ '4(BD;_# 2(1O^-1OA0
|
||||
MC4;Z4(M&]B7_?U!6_W8(_W8&_W8$Z'@#@\0.@W[X 'X8]D;_ 74/_T;\Z+G^
|
||||
MJ_9&_P1T I*KZ<C^? /I: +I40+H #I9@+_=@A0_U8&65G_3OJ!9O;_?^@
|
||||
M .EU E(\.G05"\!^#/]V"%#_5@996?].^EJ,V^L;Z Z54"6PO ?A!24_]V
|
||||
M"%#_5@996?].^EM:]D;_ 740Z$K^_T;\DJOV1O\@= *3J^E5_NGC 8U&^%"-
|
||||
M1OI0N/]_(T;V4/]V"/]V!O]V!.@J"H/$#(-^^ !^.(I&_YBI 0!U*>@'_O]&
|
||||
M_/9&_P1T!;@$ .L-]D;_"'0%N @ ZP(SP%!7Z/D)@\0$Z?S]Z/0)Z?;]Z.X)
|
||||
M?)SIDP'H #IE 'V1O\!=0;HQ/W_1OR!9O;_?W0I]D;_ 74!JO]&^@;_=@C_
|
||||
M5@19!PO ?A(*P'@)DX"_,@4!DWX%_T[V?]<&_W8(4/]6!EE9!_].^O9&_P%U
|
||||
M [ JNF2_?9&_P%U ^AN_8MV]@OV?0.^ 0!T&O]&^@;_=@C_5@19!PO ?!;V
|
||||
M1O\!=0&J3G_F]D;_ 74#_T;\Z5?]Z>4 *\#\%@>-?M:Y$ #SJZR 9O_O/%YU
|
||||
M!8!._Q"LM "*T(OXL0/3[[D' 2+*TN4(:]:L/ !T)CQ=="4\+77A.A1WW8 \
|
||||
M7738K"K"=.4"T-#%@]< "&O6_LAU].O5Z9P B78*@6;V_W^+=O;V1O\!=0/H
|
||||
MR/Q.?%#_1OH&_W8(_U8$60<+P'Q/EHO>L0/3[KD' 2++TN6$:M:6DW0(]D;_
|
||||
M$'0(ZP_V1O\0= GV1O\!=<2JZ\$&_W8(4/]6!EE9!_].^D8[=O9]"?9&_P%U
|
||||
M!O]&_+ JNF!_$8[=O9]#/9&_P%U!K JO]&_/]V"+C__U#_5@9968-^_ &#
|
||||
M7OP !XM&_.F& /]&^O]V"/]6!%D+P'X3"L!X"9. OS(% 9-TY5F#P0/_X73X
|
||||
M6>N_*]*Y! #_3O9\15)1_T;Z_W8(_U8$65E:"\!^-?[)?#&*Z(#M,'(J@/T*
|
||||
M<A> [1%R((#]!G(*@.T@<A: _09S$8#%"M'BT>+1XM'B M7KMBO @/D$= 99
|
||||
M@\$#_^%9Z5__7UZ+Y5W#Y1OE&^4;T!C7&-T8KAHA&2$9*QGN&?$8_1CW&!P9
|
||||
M4AKL&@\9)AF &0,9"1E3@.LP<B* ^PEV$H#[*G<%@.L'ZP. ZR> ^PEV"SK9
|
||||
M<P=$1/BW .L"6_G#58OL@^P&5E?&1O\ QT;\ #'1OH! /]&_/]V"/]6!%D+
|
||||
MP'QHF)/VPX!U"+]! O8! 77CD_].#'Q:/"MT!SPM=1;^1O__3@Q\2O]&_/]V
|
||||
M"/]6!%D+P'PU*_:+_HM."N--@_DD=RZ ^0)R*3PP=6N ^1!U9/].#'PR_T;\
|
||||
M_W8(_U8$63QX=%$\6'1-ZW/'1OK__^L%QT;Z #_=@A0_U8&65G_3OPKP)GI
|
||||
MIP#IE \,,=&"@H =2/_3@Q\[_]&_/]V"/]6!%G'1@H( #QX= 0\6'4MQT8*
|
||||
M$ #K%XM."I/H]?Z3<K"6ZPJ6]V8* _ 3^G4L_TX,?$S_1OS_=@C_5@19BTX*
|
||||
MD^C/_I-SW>LJEO?AEX?*]^(#]Q/!EQ+6=4?_3@Q\(/]&_/]V"/]6!%F+3@J3
|
||||
MZ*/^DW/6_W8(4/]6!EE9_T[\B]>6@'[_ '0']]KWV(/: (M^#HM>_ $=BWX0
|
||||
MBU[ZB1WK%KC__[K_?P)&_X#4 (/2 ,=&^@( Z]A?7HOE7<.*QN@" (K"U!"&
|
||||
MX.@" (;@!) G%$ GJL-5B^R![)8 5E?'1NX ,=&[% QT;J #K1E>Y__\R
|
||||
MP/*N]]%)7\,VB 5'_D[L?B]345(&C89J_ROXC89J_U!7_W8(_U8*"\!U!<=&
|
||||
MZ@$ QT;L4 !?NZ-OFK_!UI96\,&_(V^:O^)?OR+?OR+=@:L"L!T$CPE=!$V
|
||||
MB 5'_D[L?^[HK/_KZ>GK XEV\*P\)73GB7[\,\F)3O*)3OZ(3O7'1OC__\=&
|
||||
M]O__ZP&L,N2+T(O8@.L@@/M@<Q.*G[D%@_L7=@/IG@/1XR[_I_HBZ90#@/T
|
||||
M=_B#3OX!Z]" _0!W[8-._@+KQ8#] '?B@'[U*W0#B%;UZ[6#9O[?ZP2#3OX@
|
||||
MM07KIX#] '=*]T;^ @!U*8-._@BU >N3Z4D#BWX$-HL%@T8$ H#] G,2"\!Y
|
||||
M!O?8@T[^ HE&^+4#Z6__@/T$==>)1O;^Q>EB_X#]!'/*M03I6/^2+#"8@/T"
|
||||
M=QFU H=&^ O ?-31X(O0T>#1X /" 4;XZ3;_@/T$=9Z'1O8+P'RXT>"+T-'@
|
||||
MT> #P@%&]ND:_X-._A#I:/^!3OX 8-F_N_I7/^W".L*MPKK"K<0L^D"VL9&
|
||||
M]0"(5OLSTHA6^HM^!#:+!>L0MPK&1OH!B%;[BWX$-HL%F4='B78&]T;^$ !T
|
||||
M!3:+%4='B7X$C7Z["\!U+PO2=2N#?O8 =2F+?OR+3OCC&H/Y_W05BT;^)0@
|
||||
M= 2R,.L"LB"*PN@,_N+YZ4S^@T[^!%)05XK'F%"*1OI04^BE]18'BU;V"])_
|
||||
M ^GQ .G\ (A6^XEV!HU^NHM>!#;_-T-#B5X$]T;^( !T$#:+%T-#B5X$%@?H
|
||||
M?OVP.JH6!UKH=?TVQ@4 QD;Z (-F_ON-3KHK^8?/BU;V.]%_ HO1Z9X B78&
|
||||
MB%;[BWX$-HL%@T8$ A8'C7Z[,N0VB06Y 0#IN0")=@:(5ON+?@3W1OX@ '4-
|
||||
M-HL]@T8$ AX'"__K"S;$/8-&! 2,P O'=04>![^R!>@V_3M.]G8#BT[VZWV)
|
||||
M=@:(5ON+?@2+3O8+R7T#N08 5U&-7KM34K@! "-&_E"+1OZI %T";@( (-&
|
||||
M! KK!X-&! BX!@!0Z)X"%@>-?KOW1OX( '08BU;X"])^$>C9_": /2UU 4DK
|
||||
MT7X#B5;RBD;U"L!T$B: /2UT#(-N\@O( 3R:(!>BO_(OWBW[\BU[XN 4
|
||||
M(T;^/04 =1.*9ON _&]U#8-^\@!_!<=&\@$ ZQN _'AT!8#\6'41@T[^0$M+
|
||||
M@V[R GT%QT;R #3O+W1OX" '4,ZP:P(.AH_$L[V7_V]T;^0 !T"[ PZ%?\
|
||||
MBD;[Z%'\BU;R"])^)RO**]HFB@0\+70(/"!T!#PK=0<FK.@R_$E+A\KC![ P
|
||||
MZ"?\XOF'RN,2*]DFK#:(!4?^3NQ_ ^@:_.+P"]M^"8O+L"#H!/SB^>E$_(EV
|
||||
M!HM^!/=&_B =0LVBSV#1@0"'@?K!S;$/8-&! 2X4 J1NP#1NXFB07W1OX0
|
||||
M '0'1T<FQP4 .D%_(MV\(M^_+ EZ+C[K K =?B ?NQ0?0/HL_L'@W[J '0%
|
||||
MN/__ZP.+1NY?7HOE7<(( $P?-A^!'T$?KQ^Y'_<?_A\#(&H?+" *( X@$B"H
|
||||
M(%0A^" 8(8XBRB+*(LHB7!]B'U6+[(M&!$B*%L0$M@#WZE"AQP1: \*+5@9*
|
||||
M \+1X(L6R01=P@0 58OL3$Q65Z#&!+0 B4;^'HM.!.-:Q'X*Q78&_#OW<PJ+
|
||||
MP4C1X /P _C]@W[^ '4$\Z7K.[K: XS C-L[PW01^NS0R'+[[-#(<_NE^^+Q
|
||||
MZQ_Z[-#(<OOLT,AS^ZW[B]CLT,AR^^S0R'/[B\.K^^+A_!]?7HOE7<(* %6+
|
||||
M[(M>!-'C]X>(! (=!.X @!0,\ STE!2_W8$Z"SR@\0(M$"+7@2+3@B+5@;-
|
||||
M(7(/4(M>!-'C@8^(! 06.L$4.BY\5W#NAH&ZP.Z'P:Y!0"T0+L" ,TAN2<
|
||||
MNB0&M$#-(>GQW?\F4@;_)E0&_R96!O\F6 8 5E>+](M<!H/K!'(..QY.!G0%
|
||||
MZ$( ZP/H P!?7L,Y'DP&=".+=P+V! %T!HDV3@;K(#LV3 9T#8O>Z%0 BT<"
|
||||
MHTX&ZPV+WC/ HTP&HTX&HU &4^@5[5O#_P\['DP&=!B+=P*+!*@!=0\#!XD$
|
||||
MBS\#^XEU HO>ZP/H,@"+/P/[BP6H 70!PP$'B_<#\(E< HO?BW\&.]]T#HD^
|
||||
M4 :+=P2)=02)? ;#QP90!@ PXLV4 8+]G00BWP&B5P&B5T$B7\&B7<$PXD>
|
||||
M4 :)7P2)7P;#5E>+](M$!@O =%(%!0!R-B7^_ST( ',#N @ @SY,!@!T'XL>
|
||||
M4 8+VW0-B],Y!W,:BU\&.]IU]>AF .LAZ(H ZQSH' #K%S/ ZQ.+\(/&"#DW
|
||||
M<^GH:___!XO#!00 7U[#4#/ 4%#H5>Q;6R4! '0),])24.A'[%M;6% SVU-0
|
||||
MZ#SL6UL]__]T%(O8B1Y,!HD>3@980(D'@\,$B\/#6S/ PU SVU-0Z!7L6UL]
|
||||
M__]T%HO8H4X&B4<"B1Y.!EA B0>#PP2+P\-8,\##*0>+\P,WB_X#^$")!(E<
|
||||
M HEU H/&!(O&PXOL4U!14.@5_UN+V O =!\>!_R+^(MV_HL,@\8$5H/I!='I
|
||||
M\Z6)1O[H)/Y;BU[^@\0&PXO"@\((.]%W-8O1.QY.!G4/B0?_!P/#4U#H:NM;
|
||||
M6^L>B_L#^(E= BO0*1>+]P/RB7P"0HD5B\N+W^@W_HO9@\,$PU9758OLBUX(
|
||||
MBT8*"\!T-PO;="V#ZP2+#TF+T(/"!8/B_H/Z"',#N@@ .\IR#'<%@\,$ZPCH
|
||||
MA__K ^A/_XO#ZPU0Z&7^ZP93Z)#],\!;75]>PP "B@X 0
|
||||
MU1( 5'5R8F\@0RLK("T@0V]P>7)I9VAT(#$Y.3 @0F]R;&%N
|
||||
M9"!);G1L+@!.=6QL('!O:6YT97(@87-S:6=N;65N= T*1&EV:61E(&5R<F]R
|
||||
M#0I!8FYO<FUA;"!P<F]G<F%M('1E<FUI;F%T:6]N#0H
|
||||
M )X(G@@ !$:7-K
|
||||
M(&5R<F]R('-T871U<SH@)7@* H*26YS97)T($QI;G5X(&)O;W0@9&ES:R!I
|
||||
M;G1O(&1R:79E($$Z(&%N9"!H:70@82!K97D@+BXN H 4F5S971T:6YG(&-O
|
||||
M;G1R;VQL97(@+BXN"@!,;V%D:6YG(&)O;W0@<V5C=&]R("XN+@H 0W5R<F5N
|
||||
M="!M86IO<B!B;V]T(&1E=FEC93H@)60* $-U<G)E;G0@;6EN;W(@8F]O="!D
|
||||
M979I8V4Z("5D"@ * $YE=R!D979I8V4@=F%L=65S.@H 16YT97(@;F5W(&UA
|
||||
M:F]R(&1E=FEC93H@ "5D $5N=&5R(&YE=R!M:6YO<B!D979I8V4Z( E9 *
|
||||
M0VAE8VLZ(&-H86YG:6YG(')O;W0@9&ES:R!T;R!M86IO<B E9"P@;6EN;W(@
|
||||
M)60* $ES('1H:7,@3TL@*'DO;BD_( * $%B;W)T:6YG("XN+@H 5W)I=&EN
|
||||
M9R!B;V]T('-E8W1O<B N+BX* %)O;W0@9&5V:6-E(&-H86YG960A"@
|
||||
M(" @(" @(" @(2$A(2$@(" @(" @(" @(" @(" @(" !0$! 0$! 0$! 0$!
|
||||
M0$! @(" @(" @(" D! 0$! 0$ 4%!04%!0$! 0$! 0$! 0$! 0$! 0$! 0$
|
||||
M!$! 0$! 0!@8&!@8& @(" @(" @(" @(" @(" @(" @(0$! 0"
|
||||
M
|
||||
M
|
||||
M !4!50%5 4 D"
|
||||
M $@# * @$ !8 P @(" : , $,"
|
||||
M P '@# !" @0 "( P #_ F ,
|
||||
M _P *@# /\ "X P #_
|
||||
MR , _P -@# /\ #H P #_
|
||||
M ^ , _P @$ /\ 8! #_
|
||||
M * 0 _P #@$ /\ !(! #_
|
||||
M 6 0 _P &@$ /\ !X! $@
|
||||
M B "( 2@ J#_______________________________________\ T
|
||||
M 0 0 ! $-/35!!40 !," @0%!@@("!05
|
||||
M!1/_%@41 O________________\%!?____________________\/_R,"_P__
|
||||
M____$___ @(%#P+___\3__________\C_____R/_$_\ (" @(" @(" 0$!
|
||||
M 0$" @(" @(" @(" @(" @(" @(! @(" @," @("! (" @("!04%!04%!04%
|
||||
M!0(" @(" @(" @('"A4*# D" @L"% X" @(" @@" A(" A "$ (" @("!@<*
|
||||
M"@H,"0("#0(1#A," @\"" ("$@(" @(" @(H;G5L;"D !04 105%!04% (
|
||||
M% ,$% D%!04%!04%!044%!04%!04%!04% \7#P@4%!0'%!84%!04%!04%!0-
|
||||
M%!04%!04%!04%! *#P\/" H4% 84$@L.%!01% P4% T4%!04%!04 '!R:6YT
|
||||
M('-C86YF(#H@9FQO871I;F<@<&]I;G0@9F]R;6%T<R!N;W0@;&EN:V5D#0H
|
||||
M $"05)!4D%20
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M /M2"0(E!@ O B B !_ #, $ "< 0 ! $ \#$ !
|
||||
M $ / 0 ( N 0 , "H 0 0 @ @ 4
|
||||
M U @ 8 W @ < (@ Y @ & @ (0!: @ & D #G P H
|
||||
M +! L ^!0 P '@!5!0 T !X!0 X #Z!0 \
|
||||
M "6!@ ! #X!@ !$ &P Y!P !( "@!P !, #O!P !0
|
||||
M G" !4 &0#-" !8 #D" !< #^" !@ "@ !D
|
||||
M 4"@ !H !&"P !L ""# !P "_# !T @#0 !X
|
||||
M "*#@ !\ #O#@ " 'P#D#P "$ "$ "( ?$ ",
|
||||
M W$ "0 !!$ "4 !0$ "8 !C$ "< !2$0 "@
|
||||
M&@!S$0 "D "J$0 "H #,$0 "L #]$0 "P )$@ "T
|
||||
M !1$@ "X #5$@ "\ #U$@ # #/$P #$ "U% #(
|
||||
M #)% #, #)% #0 !L%0 #4 '0!U%0 #8 ".%0 #<
|
||||
M ".%0 #@ "K%0 #D "K%0 #H #'%0 #L $%@ #P
|
||||
M 5%@ #T ^%@ #X "[%@ #\ #B%@ $ #\%@ $$
|
||||
M A%P $( !"%P $, #W%P $0 1& $4 #/' $8
|
||||
M !F'@ $< J(P $@ !0(P $D #)(P $H O) $L
|
||||
M S) $P W) $T [) $X ! ) $\ /)0 %
|
||||
M !F)@ %$ &T" %( !R &T" %, !V &T" %0 !Z &T" %4
|
||||
M !^ &T" %8 "" &T" %< "$ &T" %@ "& &T" %D "( &T" %H
|
||||
M "* &T" %L ", &T" %P ". &T" %T "0 &T" %X "0 &T" %\
|
||||
M "1 &T" & "2 &T" &$ "4 &T" &( "8 &T" &, ": &T" &0
|
||||
M "< &T" &4 "@ &T" &8 "D &T" &< ^ FT" &@ ! FT" &D
|
||||
M !" VT" &H !$ VT" &L !& VT" &P !( VT" &T "(!&T" &X
|
||||
M "P!&T" &\ "X!&T" ' "Z!&T" '$ "\!&T" '( #+!&T" ',
|
||||
M #6!&T" '0 #8!&T" '4 !,!FT" '8 !.!FT" '< !0!FT" '@
|
||||
M !2!FT" 'D !4!FT" 'H ( !:!FT" 'L !:"&T" 'P !7T
|
||||
M !7X , !7\ $ !80 ! $ "H0 ! $ "H4
|
||||
M"@#\_P H8 "@#^_P H< & "L_P H@ ! ' !(D ! & !(H
|
||||
M"@ $ !HL !@ $ !H$ "# $)AP " $ 0 !
|
||||
M $ C (T ".
|
||||
M CP ) "1
|
||||
M D@ ), "4
|
||||
M E0 )8 "7
|
||||
M F )D
|
||||
M ": FP )P
|
||||
M "= G@ )\
|
||||
M "@ H0 *(
|
||||
M "C I *4
|
||||
M "F IP
|
||||
M *@ "I J@
|
||||
M *L "L K0
|
||||
M *X "O L
|
||||
M +$ "R LP
|
||||
M +0 "U
|
||||
MM@ +< "X
|
||||
M N0 +H "[
|
||||
M O (( JAIR& < .0() #P""@!$ @L 4 (,
|
||||
M %@"#@!: A, 8@(4 &H"%0!M A8 =0(7 'T"& "= AD H@(: *H"&P#+ AP
|
||||
M\0(= /8"'@ $ Q\ $@,@ !H#(0 B R( *@,C #(#) !$ R4 3 ,F %0#)P!F
|
||||
M R@ =@,I 'X#*@"+ RL D ,L )@#+@"? R\ I0,P *L#,0"S S( U ,S -D#
|
||||
M- #A X 0 .0(A ($ 0 ! / (> 6@*- 8( !0 #
|
||||
M 8@*% 0( Y JX! 0 $ $ 0 ! $ 0 G ! 0
|
||||
M @" ____?P 4 ( 0 (#___]_ & $ & (#___]_"
|
||||
M 0 " _P D ( H /__ * $ , #_____
|
||||
M#0 ! / ( ! H #@ !@ H ! P $
|
||||
M !, /\ ' ( L @ *P "@ : !0 " ",
|
||||
M @ 0 (P ! C < !4 ( ! ( (P ! C $
|
||||
M ", @ 0 &@ ( @ C $ ", $ 7U]E>&ET8VQE86X
|
||||
M7U]E>&ET %]?<F5S=&]R97IE<F\ 7V%B;W)T $1'4D]54$ 7U]-34]$14P
|
||||
M7V-H96-K %]M86EN %]A=&5X:70 7U]#4%543@!?8W!R:6YT9@!?97AI= !?
|
||||
M9F9L=7-H %]F;'5S:&%L; !?9G-E96L 7V9T96QL %]G971S %]G971T97AT
|
||||
M %]P=71T97AT %]M;W9E=&5X= !?<')I;G1F %]?9G!U=&, 7V9P=71C %]F
|
||||
M<'5T8VAA<@!?7T90551. %]P=71C: !?7U-#4D5%3DE/ %]?5D%,241!5$58
|
||||
M60!?7U-#4D],3 !?7W-E='5P:6\ 7W-E='9B=68 7W-S8V%N9@!?=G-S8V%N
|
||||
M9@!?=&5L; !?7W=H97)E>'D 7W=H97)E> !?=VAE<F5Y %]W<FET90!?7WAF
|
||||
M9FQU<V@ 7V)I;W-D:7-K %]?7V)R:P!?7U]S8G)K %]B<FL 7W-B<FL 7U]6
|
||||
M:61E;TEN= !?7V,P8W)T:6YI= !?7V-R=&EN:70 7V5O9@!?7V9G971C %]?
|
||||
M3F9G971C %]F9V5T8P!?9F=E=&-H87( 7V=E=&-H %]?3F=E=&-H90!?9V5T
|
||||
M8VAE %]?3G5N9V5T8V@ 7W5N9V5T8V@ 7U])3T524D]2 %]I<V%T='D 7VQS
|
||||
M965K %]?3$].1U1/00!?:71O80!?=6QT;V$ 7VQT;V$ 7VUE;6-P>0!?<F5A
|
||||
M9 !?7W)E860 7U]S8V%N;F5R %]?<V-A;G1O; !?7U904DE.5$52 %]?5E!4
|
||||
M4@!?7U9204T 7U]W<FET90!?7U)%04Q#5E0 7U]S8V%N=&]D %]?<V-A;G)S
|
||||
M;'0 7U]S8V%N<&]P %]F<F5E %]M86QL;V, 7W)E86QL;V, 1$%405-%1T
|
||||
M7U]);G0P5F5C=&]R %]?26YT-%9E8W1O<@!?7TEN=#5696-T;W( 7U]);G0V
|
||||
M5F5C=&]R %]?0S!A<F=C %]?0S!A<F=V %]?0S!E;G9I<F]N %]?96YV3&YG
|
||||
M %]?96YV<V5G %]?96YV4VEZ90!?7W!S< !?7V]S;6%J;W( 7U]V97)S:6]N
|
||||
M %]?;W-M:6YO<@!?97)R;F\ 7U]3=&%R=%1I;64 7U]?:&5A<&)A<V4 7U]?
|
||||
M8G)K;'9L %]?:&5A<&)A<V4 7U]B<FML=FP 7U]H96%P=&]P %]?871E>&ET
|
||||
M8VYT %]?8W1Y<&4 7U]E>&ET8G5F %]?97AI=&9O<&5N %]?97AI=&]P96X
|
||||
M7U]S=')E86US %]?;W!E;F9D %]?:&5A<&QE;@!?7W-T:VQE;@!?7W=S8W)O
|
||||
M;&P 7U]V:61E;P!?9&ER96-T=FED96\ 7U]D;W-E<G)N;P!?7V1O<T5R<F]R
|
||||
M5&]35@!?7V9I<G-T %]?;&%S= !?7W)O=F5R %]?4F5A;$-V=%9E8W1O<@!?
|
||||
M7U-C86Y4;V1696-T;W( 7V)U9F9E<@!?7V%T97AI='1B; !?7W1U<F)O0W)T
|
||||
M %]?8W9T9F%K %]?04A32$E&5 !?7T%(24Y#4@!#,"Y!4TT 0S!3 %-%5%)/
|
||||
M3U0N0P!315123T]4 ')E<P!M:6YO<@!M86IO<@!I;@!X ')E<W5L= !S:7IE
|
||||
M7W0 9G!O<U]T $%415A)5 !#4%))3E1& $-465!% $58250 1D9,55-( $9)
|
||||
M3$53 $9)3$53,@!&3%532$%,3 !&4T5%2P!'1513 $=05$585 !(14%03$5.
|
||||
M $U/5D5415A4 %!224Y41@!0551# %!55$-( %-#4D5%3@!30U)/3$P 4T54
|
||||
M55!)3P!315160E5& %-30T%.1@!35$M,14X 5$5,3 !72$5215A9 %=2251%
|
||||
M %=30U)/3$P 6$9&3%532 !"24]31$E32P!"4DL 0U)424Y)5 !%3T8 1T54
|
||||
M0P!'151#2 !)3T524D]2 $E3051460!,4T5%2P!,5$]! $U%34-060!214%$
|
||||
M %)%041! %-#04Y.15( 4T-!3E1/3 !64%))3E1%4@!64D%- %=2251%00!#
|
||||
?5E1&04L 4D5!3$-65 !30T%.5$]$ $Y%05)(14%0 !6
|
||||
|
||||
end
|
||||
------------------------- end setroot.uue ----------------------------
|
||||
|
||||
|
||||
If there is some demand, I can extend the program to use
|
||||
standard HD device names instead of major/minor device numbers.
|
||||
|
||||
Enjoy,
|
||||
|
||||
Henning
|
||||
|
||||
|
||||
------------------------------------------------------------------------
|
||||
Henning Spruth spruth@regent.e-technik.tu-muenchen.de
|
||||
Institute of Electronic Design Automation
|
||||
Technical University of Munich, Germany
|
||||
--
|
||||
------------------------------------------------------------------------
|
||||
Henning Spruth spruth@regent.e-technik.tu-muenchen.de
|
||||
Institute of Electronic Design Automation
|
||||
Technical University of Munich, Germany
|
||||
|
||||
BIN
Linux-0.11/sources/sbin/stty.tar.Z
Normal file
BIN
Linux-0.11/sources/sbin/stty.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/sbin/umount.c.Z
Normal file
BIN
Linux-0.11/sources/sbin/umount.c.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/bin16.tar.Z
Normal file
BIN
Linux-0.11/sources/system/bin16.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/include-0.11.tar.Z
Normal file
BIN
Linux-0.11/sources/system/include-0.11.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/linux-0.11-pre.tar.Z
Normal file
BIN
Linux-0.11/sources/system/linux-0.11-pre.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/linux-0.11.tar.Z
Normal file
BIN
Linux-0.11/sources/system/linux-0.11.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/linux-0.12.tar.Z
Normal file
BIN
Linux-0.11/sources/system/linux-0.12.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/lvc.tar.gz
Normal file
BIN
Linux-0.11/sources/system/lvc.tar.gz
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/unistd.tar.Z
Normal file
BIN
Linux-0.11/sources/system/unistd.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/blank.tar.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/blank.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/emacs-18.57.tar.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/emacs-18.57.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/less-177.src.tar.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/less-177.src.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/man.tar.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/man.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/mtools_sh.1.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/mtools_sh.1.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/mtools_sh.2.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/mtools_sh.2.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/mtools_sh.3.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/mtools_sh.3.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/mtools_sh.4.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/mtools_sh.4.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/su.tar.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/su.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/uniq.src.tar.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/uniq.src.tar.Z
Normal file
Binary file not shown.
Reference in New Issue
Block a user