add directory bin-src

This commit is contained in:
gohigh
2024-02-19 00:21:55 -05:00
parent 42f484790f
commit a4db56af05
520 changed files with 34677 additions and 0 deletions

BIN
bin-src/EM-diffs.Z Normal file

Binary file not shown.

2409
bin-src/Linus.patch Normal file

File diff suppressed because it is too large Load Diff

46
bin-src/MAKEDEV-1.2.lsm Normal file
View File

@@ -0,0 +1,46 @@
Begin2
Title = MAKEDEV
Version = 1.2
Desc1 = Updated MAKEDEV script to create devices in /dev
Desc2 =
Desc3 =
Desc4 =
Desc5 =
Author = Nick Holloway
AuthorEmail = alfie@dcs.warwick.ac.uk
Maintainer =
MaintEmail =
Site1 = tsx-11.mit.edu
Path1 = /pub/linux/sources/sbin
File1 = MAKEDEV-1.2.tar.gz
FileSize1 = 2981
Site2 = sunsite.unc.edu
Path2 = /pub/Linux/system/Admin
File2 = MAKEDEV-1.2.tar.gz
FileSize2 = 2981
Site3 = ftp.funet.fi
Path3 = /pub/OS/Linux/tools
File3 = MAKEDEV-1.2.tar.gz
FileSize3 = 2981
Site4 =
Path4 =
File4 =
FileSize4 =
Required1 = Requires /bin/sh to be a bourne/POSIX compatible shell (bash,
Required2 = ash or ksh) and the external commands expr, rm, mknod, chown,
Required3 = chmod and ln.
Required4 =
CopyPolicy1 = Freely redistributable
CopyPolicy2 =
Keywords = MAKEDEV mknod Linux devices
Comment1 =
Comment2 =
Comment3 =
Comment4 =
RelFiles1 =
RelFiles2 =
RelFiles3 =
Entered = 02DEC93
EnteredBy = Nick Holloway
CheckedEmail = alfie@dcs.warwick.ac.uk
End

BIN
bin-src/MAKEDEV-1.2.tar Normal file

Binary file not shown.

BIN
bin-src/MAKEDEV-1.2.tar.gz Normal file

Binary file not shown.

46
bin-src/MAKEDEV-1.4.lsm Normal file
View File

@@ -0,0 +1,46 @@
Begin2
Title = MAKEDEV
Version = 1.4
Desc1 = Updated MAKEDEV script to create devices in /dev
Desc2 =
Desc3 =
Desc4 =
Desc5 =
Author = Nick Holloway
AuthorEmail = alfie@dcs.warwick.ac.uk
Maintainer =
MaintEmail =
Site1 = tsx-11.mit.edu
Path1 = /pub/linux/sources/sbin
File1 = MAKEDEV-1.4.tar.gz
FileSize1 = 3219
Site2 = sunsite.unc.edu
Path2 = /pub/Linux/system/Admin
File2 = MAKEDEV-1.4.tar.gz
FileSize2 = 3219
Site3 = ftp.funet.fi
Path3 = /pub/OS/Linux/tools
File3 = MAKEDEV-1.4.tar.gz
FileSize3 = 3219
Site4 =
Path4 =
File4 =
FileSize4 =
Required1 = Requires /bin/sh to be a bourne/POSIX compatible shell (bash,
Required2 = ash or ksh) and the external commands expr, rm, mknod, chown,
Required3 = chmod and ln.
Required4 =
CopyPolicy1 = Freely redistributable
CopyPolicy2 =
Keywords = MAKEDEV mknod Linux devices
Comment1 =
Comment2 =
Comment3 =
Comment4 =
RelFiles1 =
RelFiles2 =
RelFiles3 =
Entered = 15FEB94
EnteredBy = Nick Holloway
CheckedEmail = alfie@dcs.warwick.ac.uk
End

BIN
bin-src/MAKEDEV-1.4.tar.gz Normal file

Binary file not shown.

Binary file not shown.

1
bin-src/NEWEST_IS_0.98.3 Normal file
View File

@@ -0,0 +1 @@
So, look dates.

35
bin-src/PBMPlus.README Normal file
View File

@@ -0,0 +1,35 @@
Here are the PBMPlus utilities originally written by Jef Poskanzer, including
the libtiff libraries written by Sam Leffler of SGI. There are two files,
for those who just want binaries (sorry, no man pages there), then you should
get pbmplus.bin.tar.Z. If you want the man pages and sources get the other
file pbmplus.src.tar.Z also.
I've built this on Linux 0.95c+, with gcc-2.1 with success. To build the
package, login as root, cd to /, and tar xzvf pbmbin.tar.Z, then tar xzvf
pmbsrc.tar.Z. Once they're done, cd to /usr/local/pbmplus10dec91/libtiff,
type make (make sure you have lots of swap space available), then cd ..
and type make install. This should build and install all the utilities and
man pages for you. All you have to do is add /usr/local/pbmplus to your
path and play with some images.
Sorry, there's no viewer here (that I know of). Perhaps later I can add one.
But in the meantime ... Have fun. My early tests show that this runs about
1.25 times as fast as a MicroVax II, running Ultrix 3.1.
Oh yea, I believe the binaries are built NOT using shared libs - someone pleaes
check me on this. But, the Makefiles all specifiy that NEW images built will
use shared libraries. Small inconsistency, but I figured those who would
build their own would probably want the shared binaries anyway.
Enjoy! If you have questions I'll try to help, but I only check this mail
about once a week since it's long distance. But if you get stuck and aren't
in a hurry, email me at
Louie.Williams@bbs.oit.unc.eud
Thanks to everybody responsible for Linux! I can't imagine PBMPlus on DOS!
-Lou Williams

358
bin-src/READ.ME Normal file
View File

@@ -0,0 +1,358 @@
KA9Q TCP is an implementation of TCP/IP for the PC. This is a Unix
port based on a version from mid-1989. Unfortunately the more recent
versions of KA9Q are harder to port to Linux.
I don't have a manual for this exact version. There's builtin help.
The commands primarily set parameters (the ip and tcp commands), or
start services. In general the same command is used to set and
examine parameters. When you type the command with no value, it shows
the current value.
To use KA9Q, put startup.net and possibly domain.txt in your home
directory, and run "net". You will probably need to tailor
startup.net for your configuration. See the section at the end of
this document on configuration. Note that you can give an argument to
the "net" command. It will be used as the startup file in place of
startup.net. By default, startup.net and other files are in your home
directory (the value of the environment variable HOME). You can put
them somewhere else by using the environment variable NETHOME.
If you are using SLIP, note that you must first dial the modem and
establish a SLIP connection. The exact details on doing this are
different at each site. Unfortunately you're probably going to need
help from system or network support staff in order to use SLIP.
Because SLIP effectively connects you to someone's local network,
using it normally requires logging in with a password. I recommend
using kermit's script facility to dial and set up SLIP. It did not
seem work adding a similar facility to KA9Q.
If your site does not current support SLIP, they will probably have to
do a bit of systems work. For Unix systems, typically this will
involve adding a SLIP device driver, and then enabling routing. (An
appropriate driver is available for the Sun, although I don't know
where. I believe it can be installed without Sun source.) Many
terminal servers will support SLIP directly, so enabling it will
merely involve changing a configuration file.
Aside from configuration commands (which typically go into
startup.net), the most common commands are probably telnet and ftp.
Both take a host name. Once you are connected, the "escape character"
(initially ^]) lets you do some special things. You type it followed
by another character. Except for the escape character, the characters
are folded, so that c, C, and ^C are equivalent. Here's a list of the
special characters:
escape character (i.e. two in a row) - send a real escape character
x or ^x - return to command mode
b or ^b - send break
c or ^c - send interrupt process
o or ^c - abort output
t or ^t - are you there?
h or ^h - send telnet erase character
u or ^u - send telnet erase line
? - print this help message
Once you return to command mode, the "session" command can be used to
switch between connections. With no arguments, it shows the current
sessions. With a number, it will reconnect you to that session.
There's a disconnect command to kill a session (also some stronger
ways of doing it).
Telnet normally operates in full duplex, with the other system
echoing. However if that system refuses echoing, or if you use the
command "echo refuse", KA9Q will echo locally. In this case you have
the normal line editing functions. Several control characters have
special functions. Note that in local echo mode, you do not need to
hit the escape character first.
escape character - return to command mode
^v - quote the next character
^b - send break
^c - send interrupt process
^o - abort output
^t - are you there?
Telnet will pass your TERM environment variable as the terminal type
if the other end asks for it. It will implement flow control locally
if the other end understand the remote flow control option. If the
other end does a "telnet sync" correctly, it will suppress output when
appropriate. E.g. when talking to a Unix system, if you type ^C or ^O
in the middle of a large output, output should stop immediately.
However there may be a pause before getting the next prompt, as some
previously buffered data is probably still going to be transmitted.
The "ip stat" and "tcp stat" commands are useful to get statistics.
"Ip stat" shows both the IP and SLIP level. If header compression is
being used, it will show how many packets were compressed and how many
were oot.
FTP is sort of odd. It looks like you are in an interactive
conversation with the FTP server at the other end, with no local
command prompt. Most commands are passed directly to the remote
server, but in fact there is a local command parser, which will
intervene for a few commands:
cd, dir, list, get, ls, mkdir, nlst, rmdir, put, type
get and put should be used to transfer files.
There's very minimal support for X11. If you are running under
X on your Linux system, you can use the command "start x".
This will cause KA9Q to front-end the Linux X11 software, so
that you can run X-based software on other hosts. As usual,
you set a DISPLAY environment variable of the form
myhost:0.0
where myhost is the host name or IP address of your Linux system (i.e.
the address that KA9Q is using). This function is currently very
primitive. There is no access control -- once you've started X,
anyone can connect to your display from anywhere on the network. KA9Q
will put out a message whenever someone connects, so at least you'll
know. If people find this feature useful, I'll put in access control.
With the current implementation, there are still two things you could
do: (1) use xauth, (2) turn on the X server only when you actually
want to start up X software. You can do "stop x". This will not
close down existing X connections. It will just prevent new ones,
until the next "start x". Unfortunately, X involves a lot of network
traffic. Over a 9600 bps line -- which is the primary audience for
this implementation -- it's probably too slow to be useful.
It's possible to run a server which others can connect to, though I
haven't tried it except for ftp. The command is "start ftp", etc.
For ftp, a login is required. The file ftpusers, in your home
directory, contains a list of users and passwords.
Here's a list of commands:
! - call a recursive shell
arp - set arp parameters
ax25 - configure ham interface
attach - define an interface - must be used for each interface
bootp - request our IP address from a server
connect - for AX25, define call sign for interface
cd
close
disconnect
dir - do a directory on the local system
domain - configure domain name system
eaglestat
echo - refuse or accept - request to disable telnet remote echo
eol - Unix or standard end of line options [standard is recommended,
even for use on Unix systems]
escape - change escape character
etherstat
exit
finger
forward - divert packets from one interface to another
ftp - open an ftp connection
hapnstat
help - print command list
hostname - set/examine host name
kick
log
ip - set/examine IP level parameters
memstat
mbox, mode - AX25 commands
mulport
netrom
nrstat
param - set/examine interafce parameters
ping - send ping to a host
pwd
rdate [offset] [host] - set date/time from UDP time daemon. see below
record
remote
reset - kill connection
route - set up routes
session - see above: move to a different session
shell - call a subshell
smtp - mail handling
start - start server
stop - stop server
tcp - set/examine tcp parameters
telnet - open telnet connection
trace - enable low-level debugging (no arguments - show current status)
trace to <file> - put trace output on file (use "con" for console)
trace <device> [<bits>] - trace packets on device
device is typically "sl0" or "loopback"
bits are in hex:
1 - output, 10 - input (else no tracing)
100 - dump data in ascii, 200 - hex (else headers only)
trace cmdmode|allmode - show trace just when at command level?
trace telnet [on | off] - show telnet options and urgent data
udp - set/examine udp parameters
upload
wait - control mail select
The rdate command uses the old-style time protocol (often known as
"rdate"), on UDP port 37, to get the date and time, and then sets the
system clock. Note that the protocol always gives time in GMT. If
your system clock is running on GMT (which is the normal way Unix
should run), this is fine. Otherwise, you'll need to specify the
offset in minutes. For time zones west of GMT, this should be a
negative number. For the Eastern U.S., when not in daylight time, the
offset is -300, because EST is 5 hours (300 minutes) west of GMT.
If no host is specified, a UDP broadcast is used.
This configuration of KA9Q has been tested only with SLIP. Code is
also included for the KISS device (for ham radio) and Linux generic
Ethernet support using /dev/eth. /dev/eth should either work or come
close to working: it's based on diffs made from a recent version of
KA9Q. I don't know of anyone who has tested KISS. Past experience
suggests that users will prefer Kermit to SLIP unless you use SLIP
with header compression.
Note that this program depends up non-blocking I/O and the select
system call. In Linux 0.12, these did not work. There are patches,
nonblock.tar.Z and select.patch, on the major distribution machines.
Don't forget: after patching a kernel source file, you must do a make
in each directory where you changed a file. The main make file
doesn't rebuild things all the time when it should. Linux 0.95
and later has all the necessary patches.
CONFIGURATION:
Here's some advice on preparing a configuration file. I assume you're
planning to use SLIP (dialup IP) or Ethernet. I'm going to explain my
configuration file line by line, as it's likely to be close to what
you need:
attach asy 0 /dev/tty64 cslip sl0 2048 1500 9600
You must include an attach command in every configuration file. It
defines the device. For SLIP, the line above should be about right.
Some variationos:
- /dev/tty64 is the serial line. Obviously you can adjust this
to use a different line.
- cslip specifies SLIP with Van Jacobsen header compression.
If you're using normal slip, use "slip" instead of "cslip".
In my opinion, response on normal SLIP is too slow for it
to be very useful.
- 9600 is the line speed. Use whatever speed you are set for.
If you have a "smart" modem, we recommend turning off
any error correction or compression. These features
introduce enough delay to be objectionable.
The following attach command could be used for Linux generic
Ethernet (/dev/eth)
attach linux arpa eth0 1500 1.2.3.fa.fb.fc
The last item is your Ethernet hardware address, in hex. It should
be printed when your system boots. E.g. if it prints 01 02 03 04 05 06
then you put in 1.2.3.4.5.6. Each of the six numbers is in hex, and
may be one or two digits.
wait 0
This should only be needed with older version of the kernel. It
disables the select system call. Instead, runs in a tight loop
continuously testing for input. Unfortunately select has a history of
problems under Linux. It appears to be fine in version 0.96. However
in earlier version, select did not work properly when there was
another program running. (In some cases it works OK unless the other
program uses select. E.g. if you enter emacs in another window, your
FTP comes to a halt.) If you are trying to use KA9Q while another
program is running, and you find that the connection hangs, you might
try "wait 0". Otherwise, you should leave the default setting, which
is "wait 100". The argument to wait is in milliseconds. It's the
amount of time to wait in the main loop. The select will trigger if
input arrives on the serial line, or you hit a key. Otherwise it
waits this amount of time. I don't recommend values larger than 100.
Smaller values might possibly be useful in some siuations.
route add default sl0
This says that all packets should be sent out the SLIP line. Presumably
this is what you want. If you are using Ethernet, of course you'd
use the name of your Ethernet device instead of sl0, e.g.
route add default eth0
bootp
This says that the system will find out its IP address by sending a
BOOTP request out the serial line. Since dialups are normally
in "hunt groups", you will probably get a different line each time
you dial up. Thus your IP address will probably not be the same.
BOOTP is a way of asking the terminal server (or whatever else
you're connected to) to tell you your IP address. If your terminal
server does not support BOOTP, you explicitly set your IP address
using a command of the form
ip address [1.2.3.4]
where 1.2.3.4 is your IP address. You would use this command
instead of the BOOTP command.
tcp mss 64
tcp window 256
These commands set TCP performance parameters. These control a
tradeoff between overall throughput, jerkiness of output, etc. These
parameters seem to give good performance for interactive connectionos.
For FTP you might want larger values, particularly if you are going
over a long-haul network like the Internet. For FTP the best value
for mss is at least 512, and probably more like 1024, with window
between 2 and 4 times mss. However Linux has fairly small buffers for
the serial line, so you may not be able to get away with parameters
much larger than the ones shown here. If you are using Ethernet,
of course you'll want larger values. I suggest starting with
tcp mss 1460
tcp window 5840
This should work for traffic on the local Ethernet. If your
traffic tends to go through routers, a safer set of values is
tcp mss 512
tcp window 2048
domain suffix rutgers.edu
domain add [128.6.4.4]
These parameters control the domain system. That's the set of servers
you use to look up host names. You'll need to adjust these for your
campus. The suffix is tacked onto all host names you type, unless
they already have a dot in them. This lets you type "athos" instead
of "athos.rutgers.edu". Set it for the domain you most commonly use.
The address 128.6.4.4 should be the address of a domain server on your
campus. All name lookups will be directed to that server. You can
define more than one, by using several "domain add" lines.
If your campus does not support the domain system, you can use a host
table instead. In that case you would omit the "domain" commands.
The host table is called "domain.txt", in your home directory. It's
in the format of a domain master file. The most important entries
look like
athos.rutgers.edu. IN A 128.6.4.4
Note that IN and A must be in upper case, and the name must include
the whole suffix, and end in a dot.
Note that this is a very old domain implementation, and is not up to
the level of the current MS/DOS version. It does not use TTL's.
Every time you type a name, it first looks in domain.txt. If there's
an entry there, it will be used. Otherwise, it will query the domain
server you specified. If it gets an answer, that information will be
added to domain.txt. If a host changes its address, you'll be in
trouble, because you'll continue getting the old information from
domain.txt. Thus it's probably a good idea to remove domain.txt now
and then.
start finger
start telnet
These start daemons to respond to incoming finger and telnet
connections. This is optional, but most people will probably find
them useful to help people find you. The finger server uses files
stored in a subdirectory "finger" of your home directory. Files
should have names of the form xxx.txt, where xxx is a user name.
Finger with no arguments will list all users on the system (i.e. it
will look for all files ~/finger/*.txt, and list the names). Finger
with a specific user name will display the text of that file, i.e.
~/finger/xxx.txt.
The telnet server is really more like a talk link. When someone
telnets to your machine, you'll get a message saying that there is an
incoming telnet connection. At that point you should escape to the
coommand level (using ^] or whatever your escape character is), do
"session" to see the session number of the incoming connection and do
"session NN" to connect to it. At that point you'll be in an
interactive link with the person. There is also a server designed to
allow "real" telnet connections, i.e. connections that create a real
login session. It is activated with the command "start telunix".
However that code is incomplete, and currently does nothing useful.

201
bin-src/README Normal file
View File

@@ -0,0 +1,201 @@
ANNOUNCING - CDROM support for linux (beta 0.2).
CDROM support for linux is now ready for beta testing. You
must have a CDROM drive, a SCSI adapter and a ISO9660 format disc
before this will be of any use to you. You will also need to have the
source tree for linux 0.97 kernel sources available. This will work with
either 0.97 or 0.97pl1, but pl1 is probably better mainly because it handles
memory better (unrelated to the CDROM, but still an important point).
This project was a team effort. The SCSI work was done by
David Giller rafetmad@cheshire.oxy.edu, and the filesystem was written
by Eric Youngdale eric@tantalus.nrl.navy.mil. So far, the code has been
tested with an aha1542 SCSI card and both NEC and Sony CDROM drives.
A number of different discs have been tested.
To install, unpack the archive in your linux kernel directory
(usually /usr/src. This will add a number of new files to the linux
source tree). You will then need to apply the patches found in cdrom.diff
with the following command:
patch -p0 < cdrom.diff
and then build the kernel. Once you have booted the system, you will need
to add a device with major=11, minor=0 for the first cdrom drive, minor=1 for
the second and so forth. You can use a command something like:
mknod -m 500 /dev/cdrom b 11 0
To mount a disc, use a command something like:
mount -t iso9660 /dev/cdrom /mnt
I would be interested in hearing about any successes or failures with this
code.
CHANGES SINCE 0.1:
Error detection/correction have been improved. You should not
get any more multiply queued commands, and I increased the timeout
period such that the drive no longer times out. My drive is fairly
fast, so other drives may have timeout problems. I need to know this
so that I can increase the timeout period to a workable value for all
drives. The error detection/correction should be pretty solid now.
Support for Rock Ridge extensions has been added to the filesystem.
This means:
* Longer filenames (My implementation limits it to 256 chars).
* Mixed case filenames, Normal unix syntax availible.
* Files have correct modes, number of links, and uid/gid
* Separate times for atime, mtime, and ctime.
* Symbolic links.
* Block and Character devices (Untested).
* Deep directories (Untested).
I was able to implement this because Adam Richter was kind
enough to lend me the Andrew Toolkit disc, which has the Rock Ridge
extensions. I should point out that the block and character devices
and the deep directories have not been tested, since they do not
appear on the disc that I have. If anyone has some pre-mastering software,
and could throw together a *very* small volume (i.e. one floppy disc)
that has some of these things, I could use the floppy to test and debug
these features.
A single element cache was added that sits between the readdir
function and the lookup function. Many programs that traverse the
directory tree (i.e. ls) also need to know the inode number and find
information about the file from the inode table. For the CDROM this
is kind of silly, since all of the information is in one place, but we
have to make it look kind of like unix. Thus the readdir function
returns a name, and then we do a stat, given that name and have to
search the same directory again for the file that we just extracted in
readdir. On the Andrew toolkit disc, there is one directory that
contains about 700 files and is nearly 80kb long - doing an ls -l in
that directory takes several minutes, because each lookup has to
search the directory. Since it turns out that we often call lookup
just after we read the directory, I added a one element cache to save
enough information so as to eliminate the need to search the directory
again.
Scatter-gather for the cdrom is now enabled. This should lead
to slightly faster I/O.
KNOWN PROBLEMS:
None.
********************************************
Some general comments are in order:
On some drives, there is a feature where the drive can be
locked under software control to essentially deactivate the eject
button. The iso9660 filesystem activates this feature on drives so
equipt, so you may be unable to remove the disc while it is mounted.
The eject button will be re-enabled once the disc is dismounted.
Since it is impossible to corrupt a CDROM, it is unlikely that
a bug in the iso9660 filesystem will lead to data corruption on your
hard disk, with the possible exception of files copied from the CDROM
to the hard disk. Nonetheless, it is a good idea to have a backup or
your hard disk, just in case. Then again, I really did not need to
say that, did I :-)
There were several bugs in error handling in the scsi code.
Previously when a command failed, the higher level drivers would not
receive the correct sense data from the failed command, or would misinterpret
the data that they did get. These has been fixed.
Up until now, SCSI devices were either discs or tapes (and the
tapes have not been fully implemented). CDROM drives are now a third
category. There are several reasons why we do not want to treat then
the same as a regular hard disk, and it was cleaner to make a third
type of device. One reason was that.....
The CDROM has a sector size of 2048 bytes, but the buffer
cache has buffer sizes of 1024 bytes. The SCSI high level driver for
the cdrom must perform buffering of all of the I/O in order to satisfy
the request. At some point in the near future support will be present
in the kernel for buffers in the buffer cache which are != 1024 bytes,
at which time this code will be remove.
Only the ISO 9660 filesystem is supported. High Sierra is not
supported. The High Sierra format is just an earlier version of
ISO9660, but there are minor differences between the two. Sometimes
people use the two names interchangably, but nearly all newer discs
are the ISO9660 format. It would not be that difficult to support HS,
but I doubt that there are very many HS discs are out there. I will
add this if there is demand for it.
The inode numbers for files are essentially just the byte
offset of the beginning of the directory record from the start of the
disc. A disc can only hold about 660 MB, so the inode numbers will
be somewhere between about 60K and 660M. Any tool that performs
a stat() on the CDROM obviously needs to be recompiled if it was
compiled before 32 bit inode support was in the kernel.
A number of ioctl functions have been provided, some of which
are only of use when trying to play an audio disc. An attempt has
been made to make the ioctls compatible with the ioctls on a Sun, but
we have been unable to get any of the audio functions to work. My
NEC drive and David's Sony reject all of these commands, and we currently
believe that both of these drives implement the audio functions using
vendor-specific command codes rather than the universal ones specified
in the SCSI-II specifications.
The filesystem has been tested under a number of conditions,
and has proved to be quite reliable so far. This filesystem is
considerably simpler than a read/write filesystem (Files are
contiguous, so no file allocation tables need to be maintained, there
is no free space map, and we do not need to know how to rename, create
or delete files).
Text files on a CDROM can have several types of line
terminators. Lines can be terminated by LF, CRLF, or a CR. The
filesystem scans the first 1024 bytes of the file, searching for out
of band characters (i.e. > 0x80 or some control characters), and if it
finds these it assumes the the file is a binary format. If there are
no out of band characters the filesystem will assume that the file is
a text file (keeping track of whether the lines are terminated by a
CR, CRLF, or LF), and automatically converts the line terminators to a
LF, which is the unix standard. In the case of CRLF termination, the
CR is converted to a ' '.
***************************************
***************************************
The remaining comments *only* apply to discs *without* the Rock Ridge
extensions:
The find command does not work without the -noleaf switch.
The reason for this is that the number of links for each directory file
is not easily obtainable, so it is set to 2. The default behavior for
the find program is to look for (i_links-2) subdirectories in each
directory, and it then assumes that the rest are regular files. The
-noleaf switch disables this optimization.
The filesystem currently has the execute permission set for
any non-directory file that does not have a period in its name. This
is a crude assumption for now, but it kind of works. There is not an
easy way of telling whether a file should be executable or not.
Theoretically it is possible to read the file itself and check for a
magic number, but this would considerably degrade performance.
The filesystem does not support block or character devices,
fifos, or symbolic links. Also, the setuid bit is never set for any
program. The main reason for this is that there is no information in
the directory entry itself which could be used to indicate these
special types of files.
Filenames under ISO9660 are normally all upper case on the
disc but the filesystem maps these to all lower case. The filenames
on the disc also have a version number (like VMS) which appears at the
end of the filename, and is separated from the rest of the filename by
a ';' character. The filesystem strips the version numbers from the
filename if the version number is 1, and replaces the ';' by a '.' if
the version number is >1.
eric@tantalus.nrl.navy.mil

239
bin-src/README.CDROM Normal file
View File

@@ -0,0 +1,239 @@
ANNOUNCING - CDROM support for linux (beta 0.4).
CDROM support for linux is now ready for beta testing. You
must have a CDROM drive, a SCSI adapter and a ISO9660 format disc
before this will be of any use to you. You will also need to have the
source tree for linux 0.97, patch level 4 kernel sources available.
This project was a team effort. The initial SCSI work was
done by David Giller rafetmad@cheshire.oxy.edu, and the filesystem and
later SCSI work was written by Eric Youngdale
eric@tantalus.nrl.navy.mil. So far, the code has been tested with an
aha1542 SCSI card and both NEC and Sony CDROM drives. A number of
different discs have been tested.
To install, unpack the archive in your linux kernel directory
(usually /usr/src. This will add a number of new files to the linux
source tree). You will then need to apply the patches found in cdrom.diff
with the following command:
patch -p0 < cdrom.diff
and then build the kernel. Once you have booted the system, you will need
to add a device with major=11, minor=0 for the first cdrom drive, minor=1 for
the second and so forth. You can use a command something like:
mknod -m 500 /dev/cdrom b 11 0
To mount a disc, use a command something like:
mount -t iso9660 /dev/cdrom /mnt
I would be interested in hearing about any successes or failures with this
code.
CHANGES SINCE 0.3:
The main difference is that the filesystem has been updated to
work with 0.97pl4.
Also, one new mount option has been added, "norock", which will
inhibit the rock ridge protocol.
CHANGES SINCE 0.2:
Support has been added for the older (and now obsolete) variant
of the iso9660 filesystem, which is known as High Sierra. There are apparently
a number of discs still out there that are in this format, and High Sierra
is actually nearly identical to iso9660, so I added support.
Mount options have been added which can disable filename mapping,
and control the conversion of text files. The options are
map=off
map=normal
conv=binary
conv=text
conv=mtext
The effect that these options have is described later on in this document.
One small scsi error was fixed which would result in the driver
hanging if there were an unusual error of any kind.
CHANGES SINCE 0.1:
Error detection/correction have been improved. You should not
get any more multiply queued commands, and I increased the timeout
period such that the drive no longer times out. My drive is fairly
fast, so other drives may have timeout problems. I need to know this
so that I can increase the timeout period to a workable value for all
drives. The error detection/correction should be pretty solid now.
Support for Rock Ridge extensions has been added to the filesystem.
This means:
* Longer filenames (My implementation limits it to 256 chars).
* Mixed case filenames, Normal unix syntax availible.
* Files have correct modes, number of links, and uid/gid
* Separate times for atime, mtime, and ctime.
* Symbolic links.
* Block and Character devices (Untested).
* Deep directories (Untested).
I was able to implement this because Adam Richter was kind
enough to lend me the Andrew Toolkit disc, which has the Rock Ridge
extensions. I should point out that the block and character devices
and the deep directories have not been tested, since they do not
appear on the disc that I have. If anyone has some pre-mastering software,
and could throw together a *very* small volume (i.e. one floppy disc)
that has some of these things, I could use the floppy to test and debug
these features.
A single element cache was added that sits between the readdir
function and the lookup function. Many programs that traverse the
directory tree (i.e. ls) also need to know the inode number and find
information about the file from the inode table. For the CDROM this
is kind of silly, since all of the information is in one place, but we
have to make it look kind of like unix. Thus the readdir function
returns a name, and then we do a stat, given that name and have to
search the same directory again for the file that we just extracted in
readdir. On the Andrew toolkit disc, there is one directory that
contains about 700 files and is nearly 80kb long - doing an ls -l in
that directory takes several minutes, because each lookup has to
search the directory. Since it turns out that we often call lookup
just after we read the directory, I added a one element cache to save
enough information so as to eliminate the need to search the directory
again.
Scatter-gather for the cdrom is now enabled. This should lead
to slightly faster I/O.
KNOWN PROBLEMS:
None.
********************************************
Some general comments are in order:
On some drives, there is a feature where the drive can be
locked under software control to essentially deactivate the eject
button. The iso9660 filesystem activates this feature on drives so
equipt, so you may be unable to remove the disc while it is mounted.
The eject button will be re-enabled once the disc is dismounted.
Since it is impossible to corrupt a CDROM, it is unlikely that
a bug in the iso9660 filesystem will lead to data corruption on your
hard disk, with the possible exception of files copied from the CDROM
to the hard disk. Nonetheless, it is a good idea to have a backup or
your hard disk, just in case. Then again, I really did not need to
say that, did I :-)
There were several bugs in error handling in the scsi code.
Previously when a command failed, the higher level drivers would not
receive the correct sense data from the failed command, or would misinterpret
the data that they did get. These has been fixed.
Up until now, SCSI devices were either discs or tapes (and the
tapes have not been fully implemented). CDROM drives are now a third
category. There are several reasons why we do not want to treat then
the same as a regular hard disk, and it was cleaner to make a third
type of device. One reason was that.....
The CDROM has a sector size of 2048 bytes, but the buffer
cache has buffer sizes of 1024 bytes. The SCSI high level driver for
the cdrom must perform buffering of all of the I/O in order to satisfy
the request. At some point in the near future support will be present
in the kernel for buffers in the buffer cache which are != 1024 bytes,
at which time this code will be remove.
Both the ISO 9660 filesystem and the High Sierra are
supported. The High Sierra format is just an earlier version of
ISO9660, but there are minor differences between the two. Sometimes
people use the two names interchangably, but nearly all newer discs
are the ISO9660 format.
The inode numbers for files are essentially just the byte
offset of the beginning of the directory record from the start of the
disc. A disc can only hold about 660 MB, so the inode numbers will
be somewhere between about 60K and 660M. Any tool that performs
a stat() on the CDROM obviously needs to be recompiled if it was
compiled before 32 bit inode support was in the kernel.
A number of ioctl functions have been provided, some of which
are only of use when trying to play an audio disc. An attempt has
been made to make the ioctls compatible with the ioctls on a Sun, but
we have been unable to get any of the audio functions to work. My
NEC drive and David's Sony reject all of these commands, and we currently
believe that both of these drives implement the audio functions using
vendor-specific command codes rather than the universal ones specified
in the SCSI-II specifications.
The filesystem has been tested under a number of conditions,
and has proved to be quite reliable so far. This filesystem is
considerably simpler than a read/write filesystem (Files are
contiguous, so no file allocation tables need to be maintained, there
is no free space map, and we do not need to know how to rename, create
or delete files).
Text files on a CDROM can have several types of line
terminators. Lines can be terminated by LF, CRLF, or a CR. The
filesystem scans the first 1024 bytes of the file, searching for out
of band characters (i.e. > 0x80 or some control characters), and if it
finds these it assumes the the file is a binary format. If there are
no out of band characters the filesystem will assume that the file is
a text file (keeping track of whether the lines are terminated by a
CR, CRLF, or LF), and automatically converts the line terminators to a
LF, which is the unix standard. In the case of CRLF termination, the
CR is converted to a ' '. The heuristic can be explicitly overridden
with the conv= mount option, which tells the filesystem that *all* files
on the volume are the specified type.
Rock Ridge extensions can be inhibited with the "norock" mount
option. This could be of use if you have scripts that work with the
non-Rock Ridge filenames, or if you encounter a bug in the filesystem
which really screws you up.
***************************************
***************************************
The remaining comments *only* apply to discs *without* the Rock Ridge
extensions:
The find command does not work without the -noleaf switch.
The reason for this is that the number of links for each directory file
is not easily obtainable, so it is set to 2. The default behavior for
the find program is to look for (i_links-2) subdirectories in each
directory, and it then assumes that the rest are regular files. The
-noleaf switch disables this optimization.
The filesystem currently has the execute permission set for
any non-directory file that does not have a period in its name. This
is a crude assumption for now, but it kind of works. There is not an
easy way of telling whether a file should be executable or not.
Theoretically it is possible to read the file itself and check for a
magic number, but this would considerably degrade performance.
The filesystem does not support block or character devices,
fifos, or symbolic links. Also, the setuid bit is never set for any
program. The main reason for this is that there is no information in
the directory entry itself which could be used to indicate these
special types of files.
Filenames under ISO9660 are normally all upper case on the
disc but the filesystem maps these to all lower case. The filenames
on the disc also have a version number (like VMS) which appears at the
end of the filename, and is separated from the rest of the filename by
a ';' character. The filesystem strips the version numbers from the
filename if the version number is 1, and replaces the ';' by a '.' if
the version number is >1. The mount option map=off will disable all
of the name mapping, and when this is in effect, all filenames will be
in upper case, and the semicolons and version numbers will always appear.
eric@tantalus.nrl.navy.mil
ericy@gnu.ai.mit.edu

243
bin-src/README.CDROM-05 Normal file
View File

@@ -0,0 +1,243 @@
ANNOUNCING - CDROM support for linux (beta 0.5).
CDROM support for linux is now ready for beta testing. You
must have a CDROM drive, a SCSI adapter and a ISO9660 format disc
before this will be of any use to you. You will also need to have the
source tree for linux 0.97, patch level 5 kernel sources available.
With the patch level 5 kernel, the scsi cdrom support is now in the
distribution, so there are no longer any special scsi patches for the
cdrom. The filesystem is not yet a part of the kernel because it is eventually
envisioned (by Linus) that this will be installable at run time once the
installable driver/filesystem code is working in the kernel.
To install, unpack the archive in your linux kernel directory
(usually /usr/src. This will add a number of new files to the linux
source tree). You will then need to apply the patches found in cdrom.diff
with the following command:
patch -p0 < cdrom.diff
and then build the kernel. Once you have booted the system, you will need
to add a device with major=11, minor=0 for the first cdrom drive, minor=1 for
the second and so forth. You can use a command something like:
mknod -m 500 /dev/cdrom b 11 0
To mount a disc, use a command something like:
mount -t iso9660 /dev/cdrom /mnt
I would be interested in hearing about any successes or failures with this
code.
CHANGES SINCE 0.4:
No functional changes to filesystem, scsi code is now part of
distribution kernel as of pl5.
CHANGES SINCE 0.3:
The main difference is that the filesystem has been updated to
work with 0.97pl4.
Also, one new mount option has been added, "norock", which will
inhibit the rock ridge protocol.
CHANGES SINCE 0.2:
Support has been added for the older (and now obsolete) variant
of the iso9660 filesystem, which is known as High Sierra. There are apparently
a number of discs still out there that are in this format, and High Sierra
is actually nearly identical to iso9660, so I added support.
Mount options have been added which can disable filename mapping,
and control the conversion of text files. The options are
map=off
map=normal
conv=binary
conv=text
conv=mtext
The effect that these options have is described later on in this document.
One small scsi error was fixed which would result in the driver
hanging if there were an unusual error of any kind.
CHANGES SINCE 0.1:
Error detection/correction have been improved. You should not
get any more multiply queued commands, and I increased the timeout
period such that the drive no longer times out. My drive is fairly
fast, so other drives may have timeout problems. I need to know this
so that I can increase the timeout period to a workable value for all
drives. The error detection/correction should be pretty solid now.
Support for Rock Ridge extensions has been added to the filesystem.
This means:
* Longer filenames (My implementation limits it to 256 chars).
* Mixed case filenames, Normal unix syntax availible.
* Files have correct modes, number of links, and uid/gid
* Separate times for atime, mtime, and ctime.
* Symbolic links.
* Block and Character devices (Untested).
* Deep directories (Untested).
I was able to implement this because Adam Richter was kind
enough to lend me the Andrew Toolkit disc, which has the Rock Ridge
extensions. I should point out that the block and character devices
and the deep directories have not been tested, since they do not
appear on the disc that I have. If anyone has some pre-mastering software,
and could throw together a *very* small volume (i.e. one floppy disc)
that has some of these things, I could use the floppy to test and debug
these features.
A single element cache was added that sits between the readdir
function and the lookup function. Many programs that traverse the
directory tree (i.e. ls) also need to know the inode number and find
information about the file from the inode table. For the CDROM this
is kind of silly, since all of the information is in one place, but we
have to make it look kind of like unix. Thus the readdir function
returns a name, and then we do a stat, given that name and have to
search the same directory again for the file that we just extracted in
readdir. On the Andrew toolkit disc, there is one directory that
contains about 700 files and is nearly 80kb long - doing an ls -l in
that directory takes several minutes, because each lookup has to
search the directory. Since it turns out that we often call lookup
just after we read the directory, I added a one element cache to save
enough information so as to eliminate the need to search the directory
again.
Scatter-gather for the cdrom is now enabled. This should lead
to slightly faster I/O.
KNOWN PROBLEMS:
None.
********************************************
Some general comments are in order:
On some drives, there is a feature where the drive can be
locked under software control to essentially deactivate the eject
button. The iso9660 filesystem activates this feature on drives so
equipt, so you may be unable to remove the disc while it is mounted.
The eject button will be re-enabled once the disc is dismounted.
Since it is impossible to corrupt a CDROM, it is unlikely that
a bug in the iso9660 filesystem will lead to data corruption on your
hard disk, with the possible exception of files copied from the CDROM
to the hard disk. Nonetheless, it is a good idea to have a backup or
your hard disk, just in case. Then again, I really did not need to
say that, did I :-)
There were several bugs in error handling in the scsi code.
Previously when a command failed, the higher level drivers would not
receive the correct sense data from the failed command, or would misinterpret
the data that they did get. These has been fixed.
Up until now, SCSI devices were either discs or tapes (and the
tapes have not been fully implemented). CDROM drives are now a third
category. There are several reasons why we do not want to treat then
the same as a regular hard disk, and it was cleaner to make a third
type of device. One reason was that.....
The CDROM has a sector size of 2048 bytes, but the buffer
cache has buffer sizes of 1024 bytes. The SCSI high level driver for
the cdrom must perform buffering of all of the I/O in order to satisfy
the request. At some point in the near future support will be present
in the kernel for buffers in the buffer cache which are != 1024 bytes,
at which time this code will be remove.
Both the ISO 9660 filesystem and the High Sierra are
supported. The High Sierra format is just an earlier version of
ISO9660, but there are minor differences between the two. Sometimes
people use the two names interchangably, but nearly all newer discs
are the ISO9660 format.
The inode numbers for files are essentially just the byte
offset of the beginning of the directory record from the start of the
disc. A disc can only hold about 660 MB, so the inode numbers will
be somewhere between about 60K and 660M. Any tool that performs
a stat() on the CDROM obviously needs to be recompiled if it was
compiled before 32 bit inode support was in the kernel.
A number of ioctl functions have been provided, some of which
are only of use when trying to play an audio disc. An attempt has
been made to make the ioctls compatible with the ioctls on a Sun, but
we have been unable to get any of the audio functions to work. My
NEC drive and David's Sony reject all of these commands, and we currently
believe that both of these drives implement the audio functions using
vendor-specific command codes rather than the universal ones specified
in the SCSI-II specifications.
The filesystem has been tested under a number of conditions,
and has proved to be quite reliable so far. This filesystem is
considerably simpler than a read/write filesystem (Files are
contiguous, so no file allocation tables need to be maintained, there
is no free space map, and we do not need to know how to rename, create
or delete files).
Text files on a CDROM can have several types of line
terminators. Lines can be terminated by LF, CRLF, or a CR. The
filesystem scans the first 1024 bytes of the file, searching for out
of band characters (i.e. > 0x80 or some control characters), and if it
finds these it assumes the the file is a binary format. If there are
no out of band characters the filesystem will assume that the file is
a text file (keeping track of whether the lines are terminated by a
CR, CRLF, or LF), and automatically converts the line terminators to a
LF, which is the unix standard. In the case of CRLF termination, the
CR is converted to a ' '. The heuristic can be explicitly overridden
with the conv= mount option, which tells the filesystem that *all* files
on the volume are the specified type.
Rock Ridge extensions can be inhibited with the "norock" mount
option. This could be of use if you have scripts that work with the
non-Rock Ridge filenames, or if you encounter a bug in the filesystem
which really screws you up.
***************************************
***************************************
The remaining comments *only* apply to discs *without* the Rock Ridge
extensions:
The find command does not work without the -noleaf switch.
The reason for this is that the number of links for each directory file
is not easily obtainable, so it is set to 2. The default behavior for
the find program is to look for (i_links-2) subdirectories in each
directory, and it then assumes that the rest are regular files. The
-noleaf switch disables this optimization.
The filesystem currently has the execute permission set for
any non-directory file that does not have a period in its name. This
is a crude assumption for now, but it kind of works. There is not an
easy way of telling whether a file should be executable or not.
Theoretically it is possible to read the file itself and check for a
magic number, but this would considerably degrade performance.
The filesystem does not support block or character devices,
fifos, or symbolic links. Also, the setuid bit is never set for any
program. The main reason for this is that there is no information in
the directory entry itself which could be used to indicate these
special types of files.
Filenames under ISO9660 are normally all upper case on the
disc but the filesystem maps these to all lower case. The filenames
on the disc also have a version number (like VMS) which appears at the
end of the filename, and is separated from the rest of the filename by
a ';' character. The filesystem strips the version numbers from the
filename if the version number is 1, and replaces the ';' by a '.' if
the version number is >1. The mount option map=off will disable all
of the name mapping, and when this is in effect, all filenames will be
in upper case, and the semicolons and version numbers will always appear.
eric@tantalus.nrl.navy.mil
ericy@gnu.ai.mit.edu

256
bin-src/README.CDROM-06a Normal file
View File

@@ -0,0 +1,256 @@
ANNOUNCING - CDROM support for linux (beta 0.6a).
CDROM support for linux is now ready for beta testing. You
must have a CDROM drive, a SCSI adapter and a ISO9660 format disc
before this will be of any use to you. You will also need to have the
source tree for linux 0.98pl3 kernel sources available. This
filesystem will not work with a pre pl3 kernel, because one of the arguments
to the iget function changed in pl3, and a new include file is now required.
With the patch level 0.98 kernel, the scsi cdrom support is
now in the distribution, so there are no longer any special scsi
patches for the cdrom. The filesystem is not yet a part of the kernel
because it is eventually envisioned (by Linus) that this will be
installable at run time once the installable driver/filesystem code is
working in the kernel. The door lock/unlock functions are now part of
the stock scsi drivers, so these functions have been removed from the
filesystem.
To install, unpack the archive in your linux kernel directory
(usually /usr/src. This will add a number of new files to the linux
source tree). You will then need to apply the patches found in cdrom.diff
with the following command:
patch -p0 < cdrom.diff
and then build the kernel. Once you have booted the system, you will need
to add a device with major=11, minor=0 for the first cdrom drive, minor=1 for
the second and so forth. You can use a command something like:
mknod -m 500 /dev/cdrom b 11 0
To mount a disc, use a command something like:
mount -t iso9660 /dev/cdrom /mnt
I would be interested in hearing about any successes or failures with this
code.
CHANGES SINCE 0.5:
Door locking functions removed from filesystem, since those
operations are now handled automatically by the scsi code.
In inode.c, set a value for s->s_blocksize, so that execve can
execute binaries off of a CDROM.
CHANGES SINCE 0.4:
No functional changes to filesystem, scsi code is now part of
distribution kernel as of pl5.
CHANGES SINCE 0.3:
The main difference is that the filesystem has been updated to
work with 0.97pl4.
Also, one new mount option has been added, "norock", which will
inhibit the rock ridge protocol.
CHANGES SINCE 0.2:
Support has been added for the older (and now obsolete) variant
of the iso9660 filesystem, which is known as High Sierra. There are apparently
a number of discs still out there that are in this format, and High Sierra
is actually nearly identical to iso9660, so I added support.
Mount options have been added which can disable filename mapping,
and control the conversion of text files. The options are
map=off
map=normal
conv=binary
conv=text
conv=mtext
The effect that these options have is described later on in this document.
One small scsi error was fixed which would result in the driver
hanging if there were an unusual error of any kind.
CHANGES SINCE 0.1:
Error detection/correction have been improved. You should not
get any more multiply queued commands, and I increased the timeout
period such that the drive no longer times out. My drive is fairly
fast, so other drives may have timeout problems. I need to know this
so that I can increase the timeout period to a workable value for all
drives. The error detection/correction should be pretty solid now.
Support for Rock Ridge extensions has been added to the filesystem.
This means:
* Longer filenames (My implementation limits it to 256 chars).
* Mixed case filenames, Normal unix syntax availible.
* Files have correct modes, number of links, and uid/gid
* Separate times for atime, mtime, and ctime.
* Symbolic links.
* Block and Character devices (Untested).
* Deep directories (Untested).
I was able to implement this because Adam Richter was kind
enough to lend me the Andrew Toolkit disc, which has the Rock Ridge
extensions. I should point out that the block and character devices
and the deep directories have not been tested, since they do not
appear on the disc that I have. If anyone has some pre-mastering software,
and could throw together a *very* small volume (i.e. one floppy disc)
that has some of these things, I could use the floppy to test and debug
these features.
A single element cache was added that sits between the readdir
function and the lookup function. Many programs that traverse the
directory tree (i.e. ls) also need to know the inode number and find
information about the file from the inode table. For the CDROM this
is kind of silly, since all of the information is in one place, but we
have to make it look kind of like unix. Thus the readdir function
returns a name, and then we do a stat, given that name and have to
search the same directory again for the file that we just extracted in
readdir. On the Andrew toolkit disc, there is one directory that
contains about 700 files and is nearly 80kb long - doing an ls -l in
that directory takes several minutes, because each lookup has to
search the directory. Since it turns out that we often call lookup
just after we read the directory, I added a one element cache to save
enough information so as to eliminate the need to search the directory
again.
Scatter-gather for the cdrom is now enabled. This should lead
to slightly faster I/O.
KNOWN PROBLEMS:
None.
********************************************
Some general comments are in order:
On some drives, there is a feature where the drive can be
locked under software control to essentially deactivate the eject
button. The iso9660 filesystem activates this feature on drives so
equipt, so you may be unable to remove the disc while it is mounted.
The eject button will be re-enabled once the disc is dismounted.
Since it is impossible to corrupt a CDROM, it is unlikely that
a bug in the iso9660 filesystem will lead to data corruption on your
hard disk, with the possible exception of files copied from the CDROM
to the hard disk. Nonetheless, it is a good idea to have a backup or
your hard disk, just in case. Then again, I really did not need to
say that, did I :-)
There were several bugs in error handling in the scsi code.
Previously when a command failed, the higher level drivers would not
receive the correct sense data from the failed command, or would misinterpret
the data that they did get. These has been fixed.
Up until now, SCSI devices were either discs or tapes (and the
tapes have not been fully implemented). CDROM drives are now a third
category. There are several reasons why we do not want to treat then
the same as a regular hard disk, and it was cleaner to make a third
type of device. One reason was that.....
The CDROM has a sector size of 2048 bytes, but the buffer
cache has buffer sizes of 1024 bytes. The SCSI high level driver for
the cdrom must perform buffering of all of the I/O in order to satisfy
the request. At some point in the near future support will be present
in the kernel for buffers in the buffer cache which are != 1024 bytes,
at which time this code will be remove.
Both the ISO 9660 filesystem and the High Sierra are
supported. The High Sierra format is just an earlier version of
ISO9660, but there are minor differences between the two. Sometimes
people use the two names interchangably, but nearly all newer discs
are the ISO9660 format.
The inode numbers for files are essentially just the byte
offset of the beginning of the directory record from the start of the
disc. A disc can only hold about 660 MB, so the inode numbers will
be somewhere between about 60K and 660M. Any tool that performs
a stat() on the CDROM obviously needs to be recompiled if it was
compiled before 32 bit inode support was in the kernel.
A number of ioctl functions have been provided, some of which
are only of use when trying to play an audio disc. An attempt has
been made to make the ioctls compatible with the ioctls on a Sun, but
we have been unable to get any of the audio functions to work. My
NEC drive and David's Sony reject all of these commands, and we currently
believe that both of these drives implement the audio functions using
vendor-specific command codes rather than the universal ones specified
in the SCSI-II specifications.
The filesystem has been tested under a number of conditions,
and has proved to be quite reliable so far. This filesystem is
considerably simpler than a read/write filesystem (Files are
contiguous, so no file allocation tables need to be maintained, there
is no free space map, and we do not need to know how to rename, create
or delete files).
Text files on a CDROM can have several types of line
terminators. Lines can be terminated by LF, CRLF, or a CR. The
filesystem scans the first 1024 bytes of the file, searching for out
of band characters (i.e. > 0x80 or some control characters), and if it
finds these it assumes the the file is a binary format. If there are
no out of band characters the filesystem will assume that the file is
a text file (keeping track of whether the lines are terminated by a
CR, CRLF, or LF), and automatically converts the line terminators to a
LF, which is the unix standard. In the case of CRLF termination, the
CR is converted to a ' '. The heuristic can be explicitly overridden
with the conv= mount option, which tells the filesystem that *all* files
on the volume are the specified type.
Rock Ridge extensions can be inhibited with the "norock" mount
option. This could be of use if you have scripts that work with the
non-Rock Ridge filenames, or if you encounter a bug in the filesystem
which really screws you up.
***************************************
***************************************
The remaining comments *only* apply to discs *without* the Rock Ridge
extensions:
The find command does not work without the -noleaf switch.
The reason for this is that the number of links for each directory file
is not easily obtainable, so it is set to 2. The default behavior for
the find program is to look for (i_links-2) subdirectories in each
directory, and it then assumes that the rest are regular files. The
-noleaf switch disables this optimization.
The filesystem currently has the execute permission set for
any non-directory file that does not have a period in its name. This
is a crude assumption for now, but it kind of works. There is not an
easy way of telling whether a file should be executable or not.
Theoretically it is possible to read the file itself and check for a
magic number, but this would considerably degrade performance.
The filesystem does not support block or character devices,
fifos, or symbolic links. Also, the setuid bit is never set for any
program. The main reason for this is that there is no information in
the directory entry itself which could be used to indicate these
special types of files.
Filenames under ISO9660 are normally all upper case on the
disc but the filesystem maps these to all lower case. The filenames
on the disc also have a version number (like VMS) which appears at the
end of the filename, and is separated from the rest of the filename by
a ';' character. The filesystem strips the version numbers from the
filename if the version number is 1, and replaces the ';' by a '.' if
the version number is >1. The mount option map=off will disable all
of the name mapping, and when this is in effect, all filenames will be
in upper case, and the semicolons and version numbers will always appear.
eric@tantalus.nrl.navy.mil
ericy@gnu.ai.mit.edu

260
bin-src/README.CDROM-98pl4 Normal file
View File

@@ -0,0 +1,260 @@
ANNOUNCING - CDROM support for linux (beta 0.7).
CDROM support for linux is now ready for beta testing. You
must have a CDROM drive, a SCSI adapter and a ISO9660 format disc
before this will be of any use to you. You will also need to have the
source tree for linux 0.98pl4 kernel sources available. This
filesystem will not work with a pre pl4 kernel, because one of the arguments
to the iget function changed in pl4, and a new include file is now required.
With the patch level 0.98 kernel, the scsi cdrom support is
now in the distribution, so there are no longer any special scsi
patches for the cdrom. The filesystem is not yet a part of the kernel
because it is eventually envisioned (by Linus) that this will be
installable at run time once the installable driver/filesystem code is
working in the kernel. The door lock/unlock functions are now part of
the stock scsi drivers, so these functions have been removed from the
filesystem.
To install, unpack the archive in your linux kernel directory
(usually /usr/src. This will add a number of new files to the linux
source tree). You will then need to apply the patches found in cdrom.diff
with the following command:
patch -p0 < cdrom.diff
and then build the kernel. Once you have booted the system, you will need
to add a device with major=11, minor=0 for the first cdrom drive, minor=1 for
the second and so forth. You can use a command something like:
mknod -m 500 /dev/cdrom b 11 0
To mount a disc, use a command something like:
mount -t iso9660 /dev/cdrom /mnt
I would be interested in hearing about any successes or failures with this
code.
CHANGES SINCE 0.6:
Various minor changes to mirror changes in the kernel as a whole.
CHANGES SINCE 0.5:
Door locking functions removed from filesystem, since those
operations are now handled automatically by the scsi code.
In inode.c, set a value for s->s_blocksize, so that execve can
execute binaries off of a CDROM.
CHANGES SINCE 0.4:
No functional changes to filesystem, scsi code is now part of
distribution kernel as of pl5.
CHANGES SINCE 0.3:
The main difference is that the filesystem has been updated to
work with 0.97pl4.
Also, one new mount option has been added, "norock", which will
inhibit the rock ridge protocol.
CHANGES SINCE 0.2:
Support has been added for the older (and now obsolete) variant
of the iso9660 filesystem, which is known as High Sierra. There are apparently
a number of discs still out there that are in this format, and High Sierra
is actually nearly identical to iso9660, so I added support.
Mount options have been added which can disable filename mapping,
and control the conversion of text files. The options are
map=off
map=normal
conv=binary
conv=text
conv=mtext
The effect that these options have is described later on in this document.
One small scsi error was fixed which would result in the driver
hanging if there were an unusual error of any kind.
CHANGES SINCE 0.1:
Error detection/correction have been improved. You should not
get any more multiply queued commands, and I increased the timeout
period such that the drive no longer times out. My drive is fairly
fast, so other drives may have timeout problems. I need to know this
so that I can increase the timeout period to a workable value for all
drives. The error detection/correction should be pretty solid now.
Support for Rock Ridge extensions has been added to the filesystem.
This means:
* Longer filenames (My implementation limits it to 256 chars).
* Mixed case filenames, Normal unix syntax availible.
* Files have correct modes, number of links, and uid/gid
* Separate times for atime, mtime, and ctime.
* Symbolic links.
* Block and Character devices (Untested).
* Deep directories (Untested).
I was able to implement this because Adam Richter was kind
enough to lend me the Andrew Toolkit disc, which has the Rock Ridge
extensions. I should point out that the block and character devices
and the deep directories have not been tested, since they do not
appear on the disc that I have. If anyone has some pre-mastering software,
and could throw together a *very* small volume (i.e. one floppy disc)
that has some of these things, I could use the floppy to test and debug
these features.
A single element cache was added that sits between the readdir
function and the lookup function. Many programs that traverse the
directory tree (i.e. ls) also need to know the inode number and find
information about the file from the inode table. For the CDROM this
is kind of silly, since all of the information is in one place, but we
have to make it look kind of like unix. Thus the readdir function
returns a name, and then we do a stat, given that name and have to
search the same directory again for the file that we just extracted in
readdir. On the Andrew toolkit disc, there is one directory that
contains about 700 files and is nearly 80kb long - doing an ls -l in
that directory takes several minutes, because each lookup has to
search the directory. Since it turns out that we often call lookup
just after we read the directory, I added a one element cache to save
enough information so as to eliminate the need to search the directory
again.
Scatter-gather for the cdrom is now enabled. This should lead
to slightly faster I/O.
KNOWN PROBLEMS:
None.
********************************************
Some general comments are in order:
On some drives, there is a feature where the drive can be
locked under software control to essentially deactivate the eject
button. The iso9660 filesystem activates this feature on drives so
equipt, so you may be unable to remove the disc while it is mounted.
The eject button will be re-enabled once the disc is dismounted.
Since it is impossible to corrupt a CDROM, it is unlikely that
a bug in the iso9660 filesystem will lead to data corruption on your
hard disk, with the possible exception of files copied from the CDROM
to the hard disk. Nonetheless, it is a good idea to have a backup or
your hard disk, just in case. Then again, I really did not need to
say that, did I :-)
There were several bugs in error handling in the scsi code.
Previously when a command failed, the higher level drivers would not
receive the correct sense data from the failed command, or would misinterpret
the data that they did get. These has been fixed.
Up until now, SCSI devices were either discs or tapes (and the
tapes have not been fully implemented). CDROM drives are now a third
category. There are several reasons why we do not want to treat then
the same as a regular hard disk, and it was cleaner to make a third
type of device. One reason was that.....
The CDROM has a sector size of 2048 bytes, but the buffer
cache has buffer sizes of 1024 bytes. The SCSI high level driver for
the cdrom must perform buffering of all of the I/O in order to satisfy
the request. At some point in the near future support will be present
in the kernel for buffers in the buffer cache which are != 1024 bytes,
at which time this code will be remove.
Both the ISO 9660 filesystem and the High Sierra are
supported. The High Sierra format is just an earlier version of
ISO9660, but there are minor differences between the two. Sometimes
people use the two names interchangably, but nearly all newer discs
are the ISO9660 format.
The inode numbers for files are essentially just the byte
offset of the beginning of the directory record from the start of the
disc. A disc can only hold about 660 MB, so the inode numbers will
be somewhere between about 60K and 660M. Any tool that performs
a stat() on the CDROM obviously needs to be recompiled if it was
compiled before 32 bit inode support was in the kernel.
A number of ioctl functions have been provided, some of which
are only of use when trying to play an audio disc. An attempt has
been made to make the ioctls compatible with the ioctls on a Sun, but
we have been unable to get any of the audio functions to work. My
NEC drive and David's Sony reject all of these commands, and we currently
believe that both of these drives implement the audio functions using
vendor-specific command codes rather than the universal ones specified
in the SCSI-II specifications.
The filesystem has been tested under a number of conditions,
and has proved to be quite reliable so far. This filesystem is
considerably simpler than a read/write filesystem (Files are
contiguous, so no file allocation tables need to be maintained, there
is no free space map, and we do not need to know how to rename, create
or delete files).
Text files on a CDROM can have several types of line
terminators. Lines can be terminated by LF, CRLF, or a CR. The
filesystem scans the first 1024 bytes of the file, searching for out
of band characters (i.e. > 0x80 or some control characters), and if it
finds these it assumes the the file is a binary format. If there are
no out of band characters the filesystem will assume that the file is
a text file (keeping track of whether the lines are terminated by a
CR, CRLF, or LF), and automatically converts the line terminators to a
LF, which is the unix standard. In the case of CRLF termination, the
CR is converted to a ' '. The heuristic can be explicitly overridden
with the conv= mount option, which tells the filesystem that *all* files
on the volume are the specified type.
Rock Ridge extensions can be inhibited with the "norock" mount
option. This could be of use if you have scripts that work with the
non-Rock Ridge filenames, or if you encounter a bug in the filesystem
which really screws you up.
***************************************
***************************************
The remaining comments *only* apply to discs *without* the Rock Ridge
extensions:
The find command does not work without the -noleaf switch.
The reason for this is that the number of links for each directory file
is not easily obtainable, so it is set to 2. The default behavior for
the find program is to look for (i_links-2) subdirectories in each
directory, and it then assumes that the rest are regular files. The
-noleaf switch disables this optimization.
The filesystem currently has the execute permission set for
any non-directory file that does not have a period in its name. This
is a crude assumption for now, but it kind of works. There is not an
easy way of telling whether a file should be executable or not.
Theoretically it is possible to read the file itself and check for a
magic number, but this would considerably degrade performance.
The filesystem does not support block or character devices,
fifos, or symbolic links. Also, the setuid bit is never set for any
program. The main reason for this is that there is no information in
the directory entry itself which could be used to indicate these
special types of files.
Filenames under ISO9660 are normally all upper case on the
disc but the filesystem maps these to all lower case. The filenames
on the disc also have a version number (like VMS) which appears at the
end of the filename, and is separated from the rest of the filename by
a ';' character. The filesystem strips the version numbers from the
filename if the version number is 1, and replaces the ';' by a '.' if
the version number is >1. The mount option map=off will disable all
of the name mapping, and when this is in effect, all filenames will be
in upper case, and the semicolons and version numbers will always appear.
eric@tantalus.nrl.navy.mil
ericy@gnu.ai.mit.edu

89
bin-src/README.FIRST Normal file
View File

@@ -0,0 +1,89 @@
Before I forget! This code, binaries, etc. all fall under the GNU
software license. I have included a copy of it in this directory, for
your reading pleasure. The sources are also covered by additional
copyrights.
This is a preliminary port of libc-4.6.27 for the Alpha. The code has
been taken from several sources, including the original Linux libc,
the version of 4.x that was released for the 32-bit port of Linux to
the Alpha, and glibc-1.0.9. In particular, the math routines are the
generic version found in glibc, and much of the system-specific code
was taken from the 32-bit Alpha libc. Much credit goes to Jim Paradis
for making gcc available & putting up the source to the 1.0 libc!
The library has been tested fairly extensively; all of the tests
included with the library have passed, and it has been used to
successfully build many small and large apps, including emacs and gcc;
perl needs to be tested, not because it's useful but because it's
evil.
You'll need to be using at least kernel version 1.3.1 for this to work
properly, and preferably the latest 1.3.x kernel release.
Several system calls are still non-functional because they are missing
from the kernel. These calls currently invoke the appropriate syscall
in the kernel, but if it's not currently implemented you will see a
message on the console containing a string like
sc<num,x,x>
where num is the number of the syscall.
A few others have been emulated a la the OSF/1 way: time, stime,
alarm, times, nice and creat. pause() has been faked with a while
loop and a long sleep(). utimes and utime do the correct things.
I/O calls (outb, outw, inb, inw, ioperm) have been implemented by
David Mosberger-Tang (davidm@cs.arizona.edu). They currently only work
on the Noname systems, and any programs compiled with this library
will also only work on a Noname system. We hope to eventually have
this issue resolved, however, with runtime detection of the machine &
doing the appropriate thing depending on what platform the program is
running on.
Probably the biggest lack is that the IEEE FPU code doesn't work,
because I haven't been able to come up with a fpu_control.h header
with the appropriate defines. I haven't noticed any problems, but...
Most of the necessary changes to the library made were because stabs
aren't working, so a lot of the aliasing had to be redone (and
unfortunately, there is some overhead because many of the calls are
being done with an additional level of indirection). Many of the
makefiles had to be altered to accomodate the new configuration
issues. And not a few bugs got fixed in the process.
INSTALLATION
You'll need to install a copy of gcc-2.7.0 from grocne.enc.org in
/pub/alpha. Grab the gcc-2.7.0-bins.tar.gz file, su to root, and
extract it from /. If you installed Jim Paradis' gcc-2.6.0, you'll
need to remove it first, along with gas and ld.
Once gcc is installed, su to root and untar this file from /. It'll
put includes in /usr/include & libraries in /usr/lib.
In theory, you now have a working "linux" development environment.
99% of the headers are unchanged from the standard libc-4.6.27
installation, and the libraries work almost the same, so configuring
software for linux will *usually* allow it to build without any
problems.
The biggest difficulty I've run into is software that tries to work
with both OSF/1 and Linux. Many programs also assume that if __alpha__
or __alpha is defined it's on a box running OSF/1, but they also see
that linux is defined. So the programs try to configure themselves
for both OSes, with varying degrees of success.
Emacs requires a little bit of mangling to work correctly, as well as
tcsh; I can make diffs available if desired. Most of the linux-specific
programs (such as util-linux) require no changes. And GNU textutils,
shellutils, and fileutils built right out of the box for me--no
changes were needed at all.
The networking code is very similar to the Linux one currently. This
will probably be changing in the near future to be as fully BSD
compatible as possible--gratuitous changes for the sake of Linux seem
foolish to me.
Good luck! If you find problems, or fix things, please let me know.
Bob
manson@magnus.acs.ohio-state.edu

58
bin-src/README.beav Normal file
View File

@@ -0,0 +1,58 @@
This is the latest release of BEAV. I am posting it to alt.sources
because I my posting to comp.sources.unix has not been released by the
moderator. It has sat in the mill for over 3 months. I would like
to find an archive for the source. If someone would like to archive it
and tell me where I would be most appreciative. If this is not propper
protocol please excuse me, I am reletively new to news.
This release 1.20 of BEAV (Binary Editor And Viewer),
a full featured binary file editor. Just about any operation that
you could want to do to a binary file is possible with BEAV. You
can insert or delete in the middle of a file thereby changing it's size.
You can display and edit data in hex, octal, decimal, binary, ascii,
or ebcdic formats. You can display data in byte, word, or long word
formats in either Intel or Motorola byte ordering. You can send the
formatted display mode to a file or printer.
Version 1.20 (3/10/91) of beav contains the following
fixes and enhancements;
* Under unix files are created with read/write
permissions.
* Fixed the bug in the terminal I/O routine that
caused beav to spin rather than give up control when
waiting for a character.
* Added the ANSI #define that was missing for MSDOS.
* Changed the D16 #define to a unsigned short.
* Called ttclose on error exit.
* Check and limit ncol and nrow to the actual screen
array size.
* Add the ability to load key bindings from a file
automatically under MSDOS and unix.
* Add delete current window command.
* Support VT100 type function keys.
BEAV is based on the source for emacs for display and keyboard handling
functions. The binary file handling and display formats are special
to BEAV. There is a full manual included in this release. There
are makefiles for unix, xenix 286, and MSC 5.1 under DOS. The old Wang PC
is supported. This has been tested on 286 and 386 PC's under SCO UNIX and
XENIX as well as under UNIX on a MIPS system.
I am willing to maintain BEAV and will entertain suggestions for
modifications and/or bug fixes. I can be reached at;
pvr@wang.com
or at;
Peter Reilley
19 Heritage Cir.
Hudson, N.H. 03051

10
bin-src/README.curses Normal file
View 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>

View File

@@ -0,0 +1,18 @@
Title: SVGA textmode manipulation/enhancement
Version: 0.1
Entered-date: 10JAN95
Description: Uses extra features found in all SVGA video cards to enhance
Linux text modes. It is configured with an XF86Config-like
file, and allows setting of pixel clock, H/V timings, font
size, etc. Now you can use your video card AND your monitor to
the MAX! In textmode, as you used to do in XWindows. Current
support includes S3, ET4000, Cirrus Logic and Trident cards.
Keywords: SVGA console text screen monitor
Author: kmg@barco.be (Koen Gadeyne)
Maintained-by: kmg@barco.be (Koen Gadeyne)
Primary-site: sunsite.unc.edu pub/Linux/system/Misc (?)
40k SVGATextMode-0.1.tar.gz
Alternate-site: nic.funet.fi pub/linux/ALPHA (?)
Original-site:
Platform: A linux PC with one of the supported VGA cards
Copying-policy: Freely Redistributable

Binary file not shown.

6
bin-src/Zoo.Fiz.note Normal file
View File

@@ -0,0 +1,6 @@
This is zoo and fiz from Rahul Dhesi compiled for Linux. It is a very
popular PD archiver in the Ms-Dog world.
Roger
cs89rdb@brunel.ac.uk

BIN
bin-src/acct-1.0.tar.gz Normal file

Binary file not shown.

26
bin-src/acct-1.1.lsm Normal file
View File

@@ -0,0 +1,26 @@
Begin2
Title = Accounting system for Linux
Version = 1.0
Desc1 = All utils to make use of the accounting system support that is in LINUX.
Desc2 = Mostly ports of BSD commands and some new programs.
Desc3 = Diffs for 0.99pl14 are now included in this package.
Author = Marco van Wieringen
AuthorEmail = mvw@hacktic.nl
Maintainer = Marco van Wieringen
MaintEmail = mvw@hacktic.nl || v892273@si.hhs.nl
Site1 = sunsite.unc.edu
Path1 = /pub/Linux/Incoming
File1 = acct-1.1.tar.gz
FileSize1 = ~9 Kb
Site2 = nic.funet.fi
Path2 = /pub/Linux/Incoming
File2 = acct-1.1.tar.gz
FileSize2 = ~9 Kb
Required1 = Clean 0.99pl14 kernel.
CopyPolicy1 = GNU Copyleft and BSD copyright for the ported BSD commands
Keywords = processaccounting
RelFiles1 = accton, lastcomm
Entered = 08DEC93
EnteredBy = Marco van Wieringen
CheckedEmail = mvw@hacktic.nl
End

BIN
bin-src/acct-1.1.tar.gz Normal file

Binary file not shown.

View File

BIN
bin-src/acct-1.3.tar.gz Normal file

Binary file not shown.

View File

@@ -0,0 +1,24 @@
Begin2
Title = Accounting system for Linux
Version = 1.3
Desc1 = All utils to make use of the accounting system.
Desc2 = Mostly ports of BSD commands and some new programs.
Author = Marco van Wieringen
AuthorEmail = v892273@si.hhs.nl || mvw@mcs.nl.mugnet.org
Maintainer = Marco van Wieringen
MaintEmail = v892273@si.hhs.nl || mvw@mcs.nl.mugnet.org
Site1 = sunsite.unc.edu
Path1 = /pub/Linux/Incoming
File1 = acct-1.3.tgz
FileSize1 = ~10 Kb
Site2 = nic.funet.fi
Path2 = /pub/Linux/Incoming
File2 = acct-1.3.tgz
FileSize2 = ~10 Kb
CopyPolicy1 = GNU Copyleft and BSD copyright for the ported BSD commands
Keywords = processaccounting
RelFiles1 = accton, lastcomm
Entered = 05FEB94
EnteredBy = Marco van Wieringen
CheckedEmail = mvw@mcs.nl.mugnet.org
End

26
bin-src/acct.lsm Normal file
View File

@@ -0,0 +1,26 @@
Begin2
Title = Accounting system for Linux
Version = 1.0
Desc1 = All utils to make use of the accounting system support.
Desc2 = You must fetch the quota-1.1.tgz package for the diffs for the
Desc3 = kernel. Mostly ports of BSD commands and some new programs.
Author = Marco van Wieringen
AuthorEmail = mvw@hacktic.nl
Maintainer = Marco van Wieringen
MaintEmail = mvw@hacktic.nl || v892273@si.hhs.nl
Site1 = sunsite.unc.edu
Path1 = /pub/Linux/Incoming
File1 = acct-1.0.tgz
FileSize1 = ~7 Kb
Site2 = nic.funet.fi
Path2 = /pub/Linux/Incoming
File2 = acct-1.0.tgz
FileSize2 = ~7 Kb
CopyPolicy1 = GNU Copyleft and BSD copyright for the ported BSD commands
Keywords = processaccounting
Comment1 = Diffs are included in the quota-1.1.tgz package.
RelFiles1 = accton, lastcomm
Entered = 02OCT93
EnteredBy = Marco van Wieringen
CheckedEmail = mvw@hacktic.nl
End

Binary file not shown.

View File

@@ -0,0 +1,26 @@
Begin
35:PkgName =acctkit-0.99.12.tar.gz
35:Title =accounting
25:Version =0.99.12
65:Desc1 =This package contains source for lastcomm and
65:Desc2 =accton commands plus patches against
65:Desc3 =linux 0.99.12 kernel
65:Author =bsd4.3 net-2 distribution
65:MaintBy =Juha Virtanen <juha.virtanen@hut.fi>
65:MaintAt1 =nic.funet.fi
65:PathFile1 =/pub/OS/Linux/BETA/acctkit
65:MaintAt2 =sunsite.unc.edu
65:PathFile2 =/pub/Linux/system/Admin
65:Required1 =linux-0.99.12, gcc-2.4.5 or newer,
65:Required2 =libc-4.4.1 or newer
65:Required3 =
65:CopyPolicy =Copurighted; See copyright notes on sources.
65:Keywords =linux, accounting
15:ApproxSize =13105
65:Last3Rel =acctkit-0.99.11.tar.gz
65:Comment1 =
65:Comment2 =
65:Comment3 =
30:CheckedBy =Juha Virtanen
8:Date =18JUL93
End

BIN
bin-src/acu.tar.Z Normal file

Binary file not shown.

BIN
bin-src/adduser-0.96.tar.Z Normal file

Binary file not shown.

BIN
bin-src/adduser.tar.Z Normal file

Binary file not shown.

BIN
bin-src/admutil-1.11.tar.gz Normal file

Binary file not shown.

BIN
bin-src/admutil-1.4.tar.Z Normal file

Binary file not shown.

BIN
bin-src/admutil-1.7b.tar.gz Normal file

Binary file not shown.

BIN
bin-src/admutil-1.9.tar.gz Normal file

Binary file not shown.

BIN
bin-src/agrep-2.04.tar.gz Normal file

Binary file not shown.

1
bin-src/agrep.README Normal file
View File

@@ -0,0 +1 @@
I believe this is about the easiest port I've never done. It compiles with GCC 1.4 (haven't gotten around to fiddling with 2.1 just yet) without a hitch.No configuration, no defines, no nuthin'. Just un-tar it, type "make", and away we go! Not so much as a peep from the compiler. I haven't tested it exhaustively, but I fooled around with it for a while, and it seems to work fine. One last note. For the time being, my only access to the internet is through a VAX running VMS. Since VMS uses 512-byte, fixed-length records forbinary files, the size will be rounded up to the next multiple of 512. Thecorrect sizes are: agrep-2.04.tar.Z - 62351 agrep.Z - 37706 agrep.ps.1.Z - 74055 agrep.ps.2.Z - 41544 I don't think it should cause any problems, but tar will probably bitch aboutthe trailing garbage. If that bothers you, use touch to fix the size beforeyou uncompress them.Ciao! Hutch. (hutchinson@wrair-emh1.army.mil)The rest of this file is the original readme from cs.arizona.edu.------------------------------------------------------------------------------This is version 2.04 of agrep - a new tool for fast text searching allowing errors.agrep is similar to egrep (or grep or fgrep), but it is much more general(and usually faster).The main changes from version 1.1 are 1) incorporating Boyer-Mooretype filtering to speed up search considerably, 2) allowing multi patterns via the -f option; this is similar to fgrep, but from our experience agrep is much faster, 3) searching for "best match" without having tospecify the number of errors allowed, and 4) ascii is no longer required.Several more options were added.To compile, simply run make in the agrep directory after untar'ingthe tar file (tar -xf agrep-2.04.tar will do it).The three most significant features of agrep that are not supported bythe grep family are 1) the ability to search for approximate patterns; for example, "agrep -2 homogenos foo" will find homogeneous as well as any other word that can be obtained from homogenos with at most 2 substitutions, insertions, or deletions. "agrep -B homogenos foo" will generate a message of the form best match has 2 errors, there are 5 matches, output them? (y/n)2) agrep is record oriented rather than just line oriented; a record is by default a line, but it can be user defined; for example, "agrep -d '^From ' 'pizza' mbox" outputs all mail messages that contain the keyword "pizza". Another example: "agrep -d '$$' pattern foo" will output all paragraphs (separated by an empty line) that contain pattern.3) multiple patterns with AND (or OR) logic queries. For example, "agrep -d '^From ' 'burger,pizza' mbox" outputs all mail messages containing at least one of the two keywords (, stands for OR). "agrep -d '^From ' 'good;pizza' mbox" outputs all mail messages containing both keywords.Putting these options together one can ask queries likeagrep -d '$$' -2 '<CACM>;TheAuthor;Curriculum;<198[5-9]>' bibwhich outputs all paragraphs referencing articles in CACM between 1985 and 1989 by TheAuthor dealing with curriculum. Two errors are allowed, but they cannot be in either CACM or the year (the <> brackets forbid errors in the pattern between them). Other features include searching for regular expressions (with orwithout errors), unlimited wild cards, limiting the errors to only insertions or only substitutions or any combination, allowing each deletion, for example, to be counted as, say, 2 substitutions or 3 insertions, restricting parts of the query to be exact and parts to be approximate, and many more.agrep is available by anonymous ftp from cs.arizona.edu (IP 192.12.69.5)as agrep/agrep-2.04.tar.Z (or in uncompressed form as agrep/agrep-2.04.tar).The tar file contains the source code (in C), man pages (agrep.1),and two additional files, agrep.algorithms and agrep.chronicle,giving more information.The agrep directory also includes two postscript files: agrep.ps.1 is a technical report from June 1991 describing the design and implementation of agrep;agrep.ps.2 is a copy of the paper as appeared in the 1992Winter USENIX conference.Please mail bug reports (or any other comments) to sw@cs.arizona.edu or to udi@cs.arizona.edu.We would appreciate if users notify us (at the address above)of any extensions, improvements, or interesting uses of this software.January 17, 1992BUGS_fixed/option_update1. remove multiple definitions of some global variables.2. fix a bug in -G option.3. fix a bug in -w option.January 23, 19924. fix a bug in pipeline input.5. make the definition of word-delimiter consistant.March 16, 19926. add option '-y' which, if specified with -B option, will alwaysoutput the best-matches without a prompt.April 10, 19927. fix a bug regarding exit status.April 15, 1992

BIN
bin-src/agrep.gz Normal file

Binary file not shown.

BIN
bin-src/agrep.ps.1.gz Normal file

Binary file not shown.

BIN
bin-src/agrep.ps.2.gz Normal file

Binary file not shown.

BIN
bin-src/ahadrive.tar.Z Normal file

Binary file not shown.

BIN
bin-src/as86.tar.Z Normal file

Binary file not shown.

Binary file not shown.

BIN
bin-src/at-1.1.tar.Z Normal file

Binary file not shown.

BIN
bin-src/bash-1.12.tar.Z Normal file

Binary file not shown.

Binary file not shown.

BIN
bin-src/beav-1.20.tar.Z Normal file

Binary file not shown.

BIN
bin-src/benchmark.tar.Z Normal file

Binary file not shown.

BIN
bin-src/bin16.tar.Z Normal file

Binary file not shown.

BIN
bin-src/binsrc.Tar.Z Normal file

Binary file not shown.

BIN
bin-src/binutils.tar.Z Normal file

Binary file not shown.

BIN
bin-src/bison.Z Normal file

Binary file not shown.

BIN
bin-src/bison.tar.Z Normal file

Binary file not shown.

BIN
bin-src/bison.tar.gz Normal file

Binary file not shown.

BIN
bin-src/blank.tar.Z Normal file

Binary file not shown.

BIN
bin-src/blex.bin.tar.Z Normal file

Binary file not shown.

BIN
bin-src/block.tar.Z Normal file

Binary file not shown.

BIN
bin-src/boot142.zip Normal file

Binary file not shown.

BIN
bin-src/boot92.05.18.Z Normal file

Binary file not shown.

BIN
bin-src/bootlin.zip Normal file

Binary file not shown.

BIN
bin-src/bootmenu.tar.Z Normal file

Binary file not shown.

53
bin-src/bootset.c Normal file
View File

@@ -0,0 +1,53 @@
/********************************************************/
/* Rootset.c - modify Linux bootdisk root device entry */
/* - quick Turbo C hack by Iain_Reid@ed.ac.uk */
/********************************************************/
#include <stdio.h
#include <conio.h>
#include <process.h>
#include <dos.h>
void main(int ac, char **av)
{
char buf[512];
if (ac != 3) {
fprintf (stderr, "%s: update Linux bootimage root device details.\n",
av[0]);
fprintf (stderr, "Usage: %s <Major> <Minor>\n", av[0]);
exit (-1);
}
/**************************************************************/
/* Don't remove this keypress bit 'cos it gives you a chance */
/* to run this program from your dos boot floppy, remove that */
/* disk, put your linux boot disk into the same drive, patch */
/* in the new root device details and save them. No HD or */
/* rawrite required! (v. handy if DOS is dead) */
/**************************************************************/
printf ("Insert Linux boot disk into drive A and press any key\n");
getch();
if (absread (0, 1, 0, &buf) != 0) {
perror ("Disk reading problem");
exit (-1);
}
printf ("Current rootdevice: Major %d Minor: %d\n", buf[509], buf[508]);
buf[508] = atoi (av[2]);
buf[509] = atoi (av[1]);
if (abswrite (0, 1, 0, &buf) != 0)
{
perror ("Disk writing problem");
exit (-1);
}
printf ("New rootdevice: Major %d Minor: %d\n", buf[509], buf[508]);
exit(0);
}

BIN
bin-src/bootsy4a.tgz Normal file

Binary file not shown.

BIN
bin-src/bootsys.taz Normal file

Binary file not shown.

BIN
bin-src/bootsys3.taz Normal file

Binary file not shown.

69
bin-src/bootsys4.README Normal file
View File

@@ -0,0 +1,69 @@
$Id: README,v 4.1 1993/03/23 16:16:49 mike Exp $
This directory contains a more or less complete System V-a-like
init system. It includes configuration scripts, an init program
(complete with source) and some extra executables from other
places which you really do need.
The extra directory contains executables of other programs you may
need (or may need to update) to make some scripts work. They will
be installed if necessary by the INSTALL script. Other programs may
be required but aren't distributed here. Specifically awk and ps.
To install this YOU FIRST NEED A BOOTABLE FLOPPY!
I can't stress that enough. If something goes wrong at any stage
you could end up with an unbootable system. I take great pains to
leave sensitive changes to the last moment and create .old files
of everything that already exists but I can't think of everything
so MAKE SURE YOU CAN BOOT FROM FLOPPY AND CAN MOUNT YOUR HARD DISK!
When you're sure you can recover your system from a gettyless state
you can run the INSTALL script. Read the messages! If in doubt type
shell at one of the prompts, check your system and then continue.
If you do need to recover your system you'll find all the old scripts,
init etc. have been renamed from xxx to xxx.old. At least you will unless
you've made the mistake of running INSTALL more than once :-).
When you're happy it's all working you can do a 'find / -name \*.old'
to find the old stuff and delete what you're sure you don't need...
Unless you have already made major changes to your rc, rc.local or
rc.net files this should work more or less out of the box subject to
you getting the getty lines in the supplied inittab right for your
system and setting the right Internet address in /etc/default/tcp if
you have tcp installed and running.
If you have tcp but don't have an ethernet card then you can just
comment out the NET line in /etc/default/tcp. This will prevent any
attempt to configure the ethernet card (due to lack of information)
but will configure the loopback interface correctly. One day this
should be made to support multiple external interfaces too... :-)
If you are short of memory and need swap at all times but are using a
swap file for some reason rather than a swap partition you may be in
trouble. Swap files are only attached after non-root file systems have
been mounted whereas swap partitions are attached as soon as the system
is booted, before we even consider checking the root file system.
The solution is simple. Create the swap file in the /dev directory.
The scripts assume that anything in /dev is a partition and anything
not in /dev is a file. Of course, this assumes that /dev is on your root
file system - but if it isn't the system is doomed anyway :-).
There are some man pages in the man subdirectory. These aren't installed
by default. You probably want to install these since, although this init
is close to standard SYSV, there are some non-standard extensions - most
noticeably the ability to name run levels.
For details of how to start and stop various services and configure your
own run levels see the file HOW in this directory.
Have fun...
Mike
Internet: jaggy@purplet.demon.co.uk
FidoNet: Mike Jagdis, 2:252/305

BIN
bin-src/bootsys4.tgz Normal file

Binary file not shown.

BIN
bin-src/bpe.tar.Z Normal file

Binary file not shown.

341
bin-src/buffer.c Normal file
View File

@@ -0,0 +1,341 @@
/*
* linux/fs/buffer.c
*
* (C) 1991 Linus Torvalds
*/
/*
* 'buffer.c' implements the buffer-cache functions. Race-conditions have
* been avoided by NEVER letting a interrupt change a buffer (except for the
* data, of course), but instead letting the caller do it. NOTE! As interrupts
* can wake up a caller, some cli-sti sequences are needed to check for
* sleep-on-calls. These should be extremely quick, though (I hope).
*/
/*
* NOTE! There is one discordant note here: checking floppies for
* disk change. This is where it fits best, I think, as it should
* invalidate changed floppy-disk-caches.
*/
#include <stdarg.h>
#include <linux/config.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <asm/system.h>
#include <asm/io.h>
extern int end;
struct buffer_head * start_buffer = (struct buffer_head *) &end;
struct buffer_head * hash_table[NR_HASH];
static struct buffer_head * free_list;
static struct task_struct * buffer_wait = NULL;
int NR_BUFFERS = 0;
static inline void wait_on_buffer(struct buffer_head * bh)
{
cli();
while (bh->b_lock)
sleep_on(&bh->b_wait);
sti();
}
int sys_sync(void)
{
int i;
struct buffer_head * bh;
sync_inodes(); /* write out inodes into buffers */
bh = start_buffer;
for (i=0 ; i<NR_BUFFERS ; i++,bh++) {
wait_on_buffer(bh);
if (bh->b_dirt)
ll_rw_block(WRITE,bh);
}
return 0;
}
int sync_dev(int dev)
{
int i;
struct buffer_head * bh;
bh = start_buffer;
for (i=0 ; i<NR_BUFFERS ; i++,bh++) {
if (bh->b_dev != dev)
continue;
wait_on_buffer(bh);
if (bh->b_dev == dev && bh->b_dirt)
ll_rw_block(WRITE,bh);
}
sync_inodes();
bh = start_buffer;
for (i=0 ; i<NR_BUFFERS ; i++,bh++) {
if (bh->b_dev != dev)
continue;
wait_on_buffer(bh);
if (bh->b_dev == dev && bh->b_dirt)
ll_rw_block(WRITE,bh);
}
return 0;
}
/*
* This routine checks whether a floppy has been changed, and
* invalidates all buffer-cache-entries in that case. This
* is a relatively slow routine, so we have to try to minimize using
* it. Thus it is called only upon a 'mount' or 'open'. This
* is the best way of combining speed and utility, I think.
* People changing diskettes in the middle of an operation deserve
* to loose :-)
*
* NOTE! Although currently this is only for floppies, the idea is
* that any additional removable block-device will use this routine,
* and that mount/open needn't know that floppies/whatever are
* special.
*/
void check_disk_change(int dev)
{
int i;
struct buffer_head * bh;
if (MAJOR(dev) != 2)
return;
dev=MINOR(dev) & 0x03; /* which floppy is it? */
if (!floppy_change(dev))
return;
dev |= 0x200;
for (i=0 ; i<NR_SUPER ; i++)
if ((super_block[i].s_dev & 0xff03)==dev)
put_super(super_block[i].s_dev);
bh = start_buffer;
for (i=0 ; i<NR_BUFFERS ; i++,bh++) {
if ((bh->b_dev & 0xff03) != dev)
continue;
wait_on_buffer(bh);
if ((bh->b_dev & 0xff03) == dev)
bh->b_uptodate = bh->b_dirt = 0;
}
}
#define _hashfn(dev,block) (((unsigned)(dev^block))%NR_HASH)
#define hash(dev,block) hash_table[_hashfn(dev,block)]
static inline void remove_from_queues(struct buffer_head * bh)
{
/* remove from hash-queue */
if (bh->b_next)
bh->b_next->b_prev = bh->b_prev;
if (bh->b_prev)
bh->b_prev->b_next = bh->b_next;
if (hash(bh->b_dev,bh->b_blocknr) == bh)
hash(bh->b_dev,bh->b_blocknr) = bh->b_next;
/* remove from free list */
if (!(bh->b_prev_free) || !(bh->b_next_free))
panic("Free block list corrupted");
bh->b_prev_free->b_next_free = bh->b_next_free;
bh->b_next_free->b_prev_free = bh->b_prev_free;
if (free_list == bh)
free_list = bh->b_next_free;
}
static inline void insert_into_queues(struct buffer_head * bh)
{
/* put at end of free list */
bh->b_next_free = free_list;
bh->b_prev_free = free_list->b_prev_free;
free_list->b_prev_free->b_next_free = bh;
free_list->b_prev_free = bh;
/* put the buffer in new hash-queue if it has a device */
bh->b_prev = NULL;
bh->b_next = NULL;
if (!bh->b_dev)
return;
bh->b_next = hash(bh->b_dev,bh->b_blocknr);
hash(bh->b_dev,bh->b_blocknr) = bh;
bh->b_next->b_prev = bh;
}
static struct buffer_head * find_buffer(int dev, int block)
{
struct buffer_head * tmp;
for (tmp = hash(dev,block) ; tmp != NULL ; tmp = tmp->b_next)
if (tmp->b_dev==dev && tmp->b_blocknr==block)
return tmp;
return NULL;
}
/*
* Why like this, I hear you say... The reason is race-conditions.
* As we don't lock buffers (unless we are readint them, that is),
* something might happen to it while we sleep (ie a read-error
* will force it bad). This shouldn't really happen currently, but
* the code is ready.
*/
struct buffer_head * get_hash_table(int dev, int block)
{
struct buffer_head * bh;
for (;;) {
if (!(bh=find_buffer(dev,block)))
return NULL;
bh->b_count++;
wait_on_buffer(bh);
if (bh->b_dev == dev && bh->b_blocknr == block)
return bh;
bh->b_count--;
}
}
/*
* Ok, this is getblk, and it isn't very clear, again to hinder
* race-conditions. Most of the code is seldom used, (ie repeating),
* so it should be much more efficient than it looks.
*
* The algoritm is changed: better, and an elusive bug removed.
* LBT 11.11.91
*/
#define BADNESS(bh) (((bh)->b_dirt<<1)+(bh)->b_lock)
struct buffer_head * getblk(int dev,int block)
{
struct buffer_head * tmp, * bh;
repeat:
if (bh = get_hash_table(dev,block))
return bh;
tmp = free_list;
do {
if (tmp->b_count)
continue;
if (!bh || BADNESS(tmp)<BADNESS(bh)) {
bh = tmp;
if (!BADNESS(tmp))
break;
}
} while ((tmp = tmp->b_next_free) != free_list);
if (!bh) {
sleep_on(&buffer_wait);
goto repeat;
}
wait_on_buffer(bh);
if (bh->b_count)
goto repeat;
while (bh->b_dirt) {
sync_dev(bh->b_dev);
wait_on_buffer(bh);
if (bh->b_count)
goto repeat;
}
/* NOTE!! While we slept waiting for this block, somebody else might */
/* already have added "this" block to the cache. check it */
if (find_buffer(dev,block))
goto repeat;
/* OK, FINALLY we know that this buffer is the only one of it's kind, */
/* and that it's unused (b_count=0), unlocked (b_lock=0), and clean */
bh->b_count=1;
bh->b_dirt=0;
bh->b_uptodate=0;
remove_from_queues(bh);
bh->b_dev=dev;
bh->b_blocknr=block;
insert_into_queues(bh);
return bh;
}
void brelse(struct buffer_head * buf)
{
if (!buf)
return;
wait_on_buffer(buf);
if (!(buf->b_count--))
panic("Trying to free free buffer");
wake_up(&buffer_wait);
}
/*
* bread() reads a specified block and returns the buffer that contains
* it. It returns NULL if the block was unreadable.
*/
struct buffer_head * bread(int dev,int block)
{
struct buffer_head * bh;
if (!(bh=getblk(dev,block)))
panic("bread: getblk returned NULL\n");
if (bh->b_uptodate)
return bh;
ll_rw_block(READ,bh);
wait_on_buffer(bh);
if (bh->b_uptodate)
return bh;
brelse(bh);
return NULL;
}
/*
* Ok, breada can be used as bread, but additionally to mark other
* blocks for reading as well. End the argument list with a negative
* number.
*/
struct buffer_head * breada(int dev,int first, ...)
{
va_list args;
struct buffer_head * bh, *tmp;
va_start(args,first);
if (!(bh=getblk(dev,first)))
panic("bread: getblk returned NULL\n");
if (!bh->b_uptodate)
ll_rw_block(READ,bh);
while ((first=va_arg(args,int))>=0) {
tmp=getblk(dev,first);
if (tmp) {
if (!tmp->b_uptodate)
ll_rw_block(READA,bh);
tmp->b_count--;
}
}
va_end(args);
wait_on_buffer(bh);
if (bh->b_uptodate)
return bh;
brelse(bh);
return (NULL);
}
void buffer_init(long buffer_end)
{
struct buffer_head * h = start_buffer;
void * b;
int i;
if (buffer_end == 1<<20)
b = (void *) (640*1024);
else
b = (void *) buffer_end;
while ( (b -= BLOCK_SIZE) >= ((void *) (h+1)) ) {
h->b_dev = 0;
h->b_dirt = 0;
h->b_count = 0;
h->b_lock = 0;
h->b_uptodate = 0;
h->b_wait = NULL;
h->b_next = NULL;
h->b_prev = NULL;
h->b_data = (char *) b;
h->b_prev_free = h-1;
h->b_next_free = h+1;
h++;
NR_BUFFERS++;
if (b == (void *) 0x100000)
b = (void *) 0xA0000;
}
h--;
free_list = start_buffer;
free_list->b_prev_free = h;
h->b_next_free = free_list;
for (i=0;i<NR_HASH;i++)
hash_table[i]=NULL;
}

BIN
bin-src/buffer.c.Z Normal file

Binary file not shown.

89
bin-src/build.c.patch Normal file
View 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");

BIN
bin-src/busmouse2a.tar.Z Normal file

Binary file not shown.

BIN
bin-src/bzip2-0.1pl2.tar.gz Normal file

Binary file not shown.

BIN
bin-src/calendar.tar.Z Normal file

Binary file not shown.

BIN
bin-src/calls.tar.gz Normal file

Binary file not shown.

BIN
bin-src/cawf.tar.Z Normal file

Binary file not shown.

125
bin-src/cawf2.cdiff Normal file
View File

@@ -0,0 +1,125 @@
*** orig/makefile Thu Feb 21 17:15:06 1991
--- makefile Wed Feb 5 10:38:20 1992
***************
*** 4,12 ****
#
# define STDLIB for systems that have <stdlib.h>
DEFS = -DUNIX -DSTDLIB
! CFLAGS = -g ${DEFS}
HDR = cawf.h regexp.h regmagic.h
--- 4,14 ----
#
# define STDLIB for systems that have <stdlib.h>
+ CC = gcc
+
DEFS = -DUNIX -DSTDLIB
! CFLAGS = ${DEFS}
HDR = cawf.h regexp.h regmagic.h
*** orig/bsfilt.c Thu Feb 21 17:14:54 1991
--- bsfilt.c Sat Jan 18 20:15:50 1992
***************
*** 45,51 ****
int Ulx = 0; /* underline buffer index */
void Putchar();
! #ifndef STDDEF
char *strrchr();
#endif
--- 45,51 ----
int Ulx = 0; /* underline buffer index */
void Putchar();
! #ifndef STDLIB
char *strrchr();
#endif
*** orig/cawf.c Thu Feb 21 17:14:54 1991
--- cawf.c Sat Jan 18 20:15:50 1992
*** orig/cawf.h Thu Feb 21 17:14:54 1991
--- cawf.h Wed Feb 5 10:43:06 1992
***************
*** 40,46 ****
#include "regexp.h"
#ifdef UNIX
! #define CAWFLIB "/Homes/abe/src/cawf" /* UNIX library location */
#else
#define CAWFLIB "c:/sys/lib/cawf" /* PC-DOS library location */
#endif
--- 40,46 ----
#include "regexp.h"
#ifdef UNIX
! #define CAWFLIB "/usr/local/lib" /* UNIX library location */
#else
#define CAWFLIB "c:/sys/lib/cawf" /* PC-DOS library location */
#endif
*** orig/error.c Thu Feb 21 17:14:56 1991
--- error.c Sat Jan 18 20:15:50 1992
*** orig/expand.c Thu Feb 21 17:14:56 1991
--- expand.c Sat Jan 18 20:15:50 1992
*** orig/expr.c Thu Feb 21 17:14:56 1991
--- expr.c Sat Jan 18 20:15:50 1992
*** orig/macsup.c Thu Feb 21 17:14:56 1991
--- macsup.c Sat Jan 18 20:15:50 1992
*** orig/output.c Thu Feb 21 17:14:56 1991
--- output.c Sat Jan 18 20:15:50 1992
*** orig/pass2.c Thu Feb 21 17:14:58 1991
--- pass2.c Sat Jan 18 20:15:50 1992
*** orig/pass3.c Thu Feb 21 17:14:58 1991
--- pass3.c Sat Jan 18 20:15:50 1992
*** orig/regerror.c Thu Feb 21 17:14:58 1991
--- regerror.c Sat Jan 18 20:15:50 1992
*** orig/regexp.c Thu Feb 21 17:15:00 1991
--- regexp.c Sat Jan 18 20:25:37 1992
***************
*** 708,714 ****
register char *string;
{
register char *s;
! extern char *strchr();
/* Be paranoid... */
if (prog == NULL || string == NULL) {
--- 708,714 ----
register char *string;
{
register char *s;
! /* extern char *strchr(); */
/* Be paranoid... */
if (prog == NULL || string == NULL) {
***************
*** 807,813 ****
{
register char *scan; /* Current node. */
char *next; /* Next node. */
! extern char *strchr();
scan = prog;
#ifdef DEBUG
--- 807,813 ----
{
register char *scan; /* Current node. */
char *next; /* Next node. */
! /* extern char *strchr(); */
scan = prog;
#ifdef DEBUG
*** orig/regexp.h Thu Feb 21 17:15:00 1991
--- regexp.h Sat Jan 18 19:55:38 1992
*** orig/regmagic.h Thu Feb 21 17:15:00 1991
--- regmagic.h Sat Jan 18 20:10:06 1992
*** orig/store.c Thu Feb 21 17:15:00 1991
--- store.c Sat Jan 18 20:26:26 1992
*** orig/string.c Thu Feb 21 17:15:02 1991
--- string.c Sat Jan 18 20:27:18 1992

BIN
bin-src/cawf2.zip Normal file

Binary file not shown.

856
bin-src/cdiffs for 0.95a Normal file
View File

@@ -0,0 +1,856 @@
From: hedrick@dartagnan.rutgers.edu (Charles Hedrick)
Newsgroups: alt.os.linux
Subject: cdiffs for 0.95a from Linus for alpha testing
Message-ID: <Mar.21.19.15.22.1992.4251@dartagnan.rutgers.edu>
Date: 22 Mar 92 00:15:22 GMT
Organization: Rutgers Univ., New Brunswick, N.J.
Lines: 845
The following cdiffs come from Linus. He's had trouble getting
postings out. They are alpha -- only for people who like to test
things. They appear to fix some of the problems with multiple disks,
and some problems with serial lines. I can't be sure about that.
They do fix my problem with gdb getting "bad things happen".
If the posting from Linus shows up, the diffs in that posting
should be identical to these.
*** OLD/linux/kernel/chr_drv/console.c Fri Mar 13 00:37:07 1992
--- linux/kernel/chr_drv/console.c Thu Mar 19 21:15:03 1992
***************
*** 456,462 ****
p++;
}
sti();
! copy_to_cooked(tty);
}
static void insert_char(int currcons)
--- 456,462 ----
p++;
}
sti();
! TTY_READ_FLUSH(tty);
}
static void insert_char(int currcons)
***************
*** 823,829 ****
void do_keyboard_interrupt(void)
{
! copy_to_cooked(TTY_TABLE(0));
timer_active &= ~(1<<BLANK_TIMER);
if (console_blanked) {
timer_table[BLANK_TIMER].expires = 0;
--- 823,829 ----
void do_keyboard_interrupt(void)
{
! TTY_READ_FLUSH(TTY_TABLE(0));
timer_active &= ~(1<<BLANK_TIMER);
if (console_blanked) {
timer_table[BLANK_TIMER].expires = 0;
*** OLD/linux/kernel/chr_drv/tty_ioctl.c Thu Mar 12 23:51:41 1992
--- linux/kernel/chr_drv/tty_ioctl.c Thu Mar 19 21:27:07 1992
***************
*** 260,270 ****
switch (arg) {
case TCOOFF:
tty->stopped = 1;
! TTY_WRITE(tty);
return 0;
case TCOON:
tty->stopped = 0;
! TTY_WRITE(tty);
return 0;
case TCIOFF:
if (STOP_CHAR(tty))
--- 260,270 ----
switch (arg) {
case TCOOFF:
tty->stopped = 1;
! TTY_WRITE_FLUSH(tty);
return 0;
case TCOON:
tty->stopped = 0;
! TTY_WRITE_FLUSH(tty);
return 0;
case TCIOFF:
if (STOP_CHAR(tty))
*** OLD/linux/kernel/chr_drv/tty_io.c Tue Mar 17 22:46:46 1992
--- linux/kernel/chr_drv/tty_io.c Thu Mar 19 21:27:07 1992
***************
*** 129,141 ****
printk("copy_to_cooked: missing queues\n\r");
return;
}
- cli();
- if (tty->busy) {
- sti();
- return;
- }
- tty->busy = 1;
- sti();
while (1) {
if (EMPTY(tty->read_q))
break;
--- 129,134 ----
***************
*** 232,242 ****
PUTCH(c,tty->write_q);
}
PUTCH(c,tty->secondary);
}
- tty->write(tty);
- tty->busy = 0;
if (!EMPTY(tty->secondary))
wake_up(&tty->secondary->proc_list);
}
/*
--- 225,236 ----
PUTCH(c,tty->write_q);
}
PUTCH(c,tty->secondary);
+ TTY_WRITE_FLUSH(tty);
}
if (!EMPTY(tty->secondary))
wake_up(&tty->secondary->proc_list);
+ if (LEFT(tty->write_q) > TTY_BUF_SIZE/2)
+ wake_up(&tty->write_q->proc_list);
}
/*
***************
*** 305,314 ****
time = current->timeout = 0;
if (minimum>nr)
minimum = nr;
! copy_to_cooked(tty);
while (nr>0) {
if (other_tty && other_tty->write)
! TTY_WRITE(other_tty);
cli();
if (EMPTY(tty->secondary) || (L_CANON(tty) &&
!FULL(tty->read_q) && !tty->secondary->data)) {
--- 299,308 ----
time = current->timeout = 0;
if (minimum>nr)
minimum = nr;
! TTY_READ_FLUSH(tty);
while (nr>0) {
if (other_tty && other_tty->write)
! TTY_WRITE_FLUSH(other_tty);
cli();
if (EMPTY(tty->secondary) || (L_CANON(tty) &&
!FULL(tty->read_q) && !tty->secondary->data)) {
***************
*** 320,326 ****
break;
interruptible_sleep_on(&tty->secondary->proc_list);
sti();
! copy_to_cooked(tty);
continue;
}
sti();
--- 314,320 ----
break;
interruptible_sleep_on(&tty->secondary->proc_list);
sti();
! TTY_READ_FLUSH(tty);
continue;
}
sti();
***************
*** 398,404 ****
cr_flag = 0;
PUTCH(c,tty->write_q);
}
! TTY_WRITE(tty);
if (nr>0)
schedule();
}
--- 392,398 ----
cr_flag = 0;
PUTCH(c,tty->write_q);
}
! TTY_WRITE_FLUSH(tty);
if (nr>0)
schedule();
}
*** OLD/linux/kernel/chr_drv/serial.c Sat Mar 14 20:16:21 1992
--- linux/kernel/chr_drv/serial.c Thu Mar 19 21:15:03 1992
***************
*** 26,47 ****
static void com1_timer(void)
{
! copy_to_cooked(tty_table+64);
}
static void com2_timer(void)
{
! copy_to_cooked(tty_table+65);
}
static void com3_timer(void)
{
! copy_to_cooked(tty_table+66);
}
static void com4_timer(void)
{
! copy_to_cooked(tty_table+67);
}
static inline void do_rs_write(unsigned int port)
--- 26,47 ----
static void com1_timer(void)
{
! TTY_READ_FLUSH(tty_table+64);
}
static void com2_timer(void)
{
! TTY_READ_FLUSH(tty_table+65);
}
static void com3_timer(void)
{
! TTY_READ_FLUSH(tty_table+66);
}
static void com4_timer(void)
{
! TTY_READ_FLUSH(tty_table+67);
}
static inline void do_rs_write(unsigned int port)
*** OLD/linux/kernel/chr_drv/pty.c Sat Jan 11 01:56:45 1992
--- linux/kernel/chr_drv/pty.c Thu Mar 19 21:15:03 1992
***************
*** 25,31 ****
if (FULL(to->read_q)) {
if (FULL(to->secondary))
break;
! copy_to_cooked(to);
continue;
}
GETCH(from->write_q,c);
--- 25,31 ----
if (FULL(to->read_q)) {
if (FULL(to->secondary))
break;
! TTY_READ_FLUSH(to);
continue;
}
GETCH(from->write_q,c);
***************
*** 33,39 ****
if (current->signal & ~current->blocked)
break;
}
! copy_to_cooked(to);
wake_up(&from->write_q->proc_list);
}
--- 33,39 ----
if (current->signal & ~current->blocked)
break;
}
! TTY_READ_FLUSH(to);
wake_up(&from->write_q->proc_list);
}
*** OLD/linux/kernel/blk_drv/hd.c Sun Mar 15 20:46:53 1992
--- linux/kernel/blk_drv/hd.c Fri Mar 20 00:20:49 1992
***************
*** 82,88 ****
--- 82,90 ----
int minor, i;
struct buffer_head *bh;
struct partition *p;
+ unsigned long first_sector;
+ first_sector = hd[MINOR(dev)].start_sect;
if (!(bh = bread(dev,0))) {
printk("Unable to read partition table of device %04x\n",dev);
return;
***************
*** 93,99 ****
for (i=0 ; i<4 ; i++,p++) {
if (!(hd[i+minor].nr_sects = p->nr_sects))
continue;
! hd[i+minor].start_sect = p->start_sect;
if ((current_minor & 0x3f) >= 60)
continue;
if (p->sys_ind == EXTENDED_PARTITION) {
--- 95,101 ----
for (i=0 ; i<4 ; i++,p++) {
if (!(hd[i+minor].nr_sects = p->nr_sects))
continue;
! hd[i+minor].start_sect = first_sector + p->start_sect;
if ((current_minor & 0x3f) >= 60)
continue;
if (p->sys_ind == EXTENDED_PARTITION) {
***************
*** 141,156 ****
hd_info[drive].sect = *(unsigned char *) (14+BIOS);
BIOS += 16;
}
- if (hd_info[1].cyl)
- NR_HD=2;
- else
- NR_HD=1;
- #endif
- for (i=0 ; i<NR_HD ; i++) {
- hd[i<<6].start_sect = 0;
- hd[i<<6].nr_sects = hd_info[i].head*
- hd_info[i].sect*hd_info[i].cyl;
- }
/*
We querry CMOS about hard disks : it could be that
--- 143,148 ----
***************
*** 181,190 ****
NR_HD = 1;
else
NR_HD = 0;
! for (i = NR_HD ; i < 2 ; i++) {
! hd[i<<6].start_sect = 0;
! hd[i<<6].nr_sects = 0;
}
for (drive=0 ; drive<NR_HD ; drive++) {
current_minor = 1+(drive<<6);
check_partition(0x0300+(drive<<6));
--- 173,186 ----
NR_HD = 1;
else
NR_HD = 0;
! #endif
! for (i = 0 ; i < (MAX_HD<<6) ; i++) {
! hd[i].start_sect = 0;
! hd[i].nr_sects = 0;
}
+ for (i = 0 ; i < NR_HD ; i++)
+ hd[i<<6].nr_sects = hd_info[i].head*
+ hd_info[i].sect*hd_info[i].cyl;
for (drive=0 ; drive<NR_HD ; drive++) {
current_minor = 1+(drive<<6);
check_partition(0x0300+(drive<<6));
*** OLD/linux/kernel/ptrace.c Tue Mar 17 23:38:37 1992
--- linux/kernel/ptrace.c Thu Mar 19 23:49:42 1992
***************
*** 22,30 ****
/* set's the trap flag. */
#define TRAP_FLAG 0x100
- /* check's for granularity. */
- #define GRANULARITY 0x00800000
-
/*
* this is the number to subtract from the top of the stack. To find
* the local frame.
--- 22,27 ----
***************
*** 51,58 ****
* the offset is how far from the base addr as stored in the TSS.
* this routine assumes that all the priviledged stacks are in our
* data space.
! */
!
static inline int get_stack_long(struct task_struct *task, int offset)
{
unsigned char *stack;
--- 48,54 ----
* the offset is how far from the base addr as stored in the TSS.
* this routine assumes that all the priviledged stacks are in our
* data space.
! */
static inline int get_stack_long(struct task_struct *task, int offset)
{
unsigned char *stack;
***************
*** 69,213 ****
* data space.
*/
static inline int put_stack_long(struct task_struct *task, int offset,
! unsigned short data)
{
unsigned char * stack;
stack = (unsigned char *) task->tss.esp0;
stack += offset;
! *(int *) stack = data;
return 0;
}
/*
! * this routine will get a word out of an arbitrary
! * tasks data space. It likes to have the task number
! * rather than the task pointer. Perhaps the number
! * should be included in the pointer.
*/
! /* seg = 0 if I space */
! static inline int get_long(int tsk, long addr, unsigned seg, int *data)
{
- int i;
- int limit;
- int cur;
- unsigned long address;
unsigned long page;
- unsigned oldfs;
! /* find the task number of the current task. */
! for (i = 0; i < NR_TASKS ; i ++) {
! if (task[i] == current) break;
}
- if (i == NR_TASKS) {
- printk("PTRACE: Can't find current task\n");
- do_exit(SIGSEGV);
- }
- cur = i;
-
- /* we will need to check the readability of the segment
- and then the byte in order to avoid segment violations. */
- seg++;
- limit = (task[tsk]->ldt[seg].a) & 0xffff;
- /* this should be constant amound all of our segments, but we
- had better check anyway. */
- if (task[tsk]->ldt[seg].b & GRANULARITY)
- limit = limit << 12;
-
- if (limit <= addr+4)
- return -EIO;
-
- /* Now compute the address, and make sure that it is present. */
- address = task[tsk]->start_code + addr;
-
- page = *((unsigned long*) ((address >> 20) & 0xffc));
- /* see if it is present. */
if (!(page & PAGE_PRESENT)) {
! do_no_page(0, address, task[tsk]);
}
!
! oldfs = get_fs();
! /* now convert seg to the right format. */
! seg = (seg << 3) | 0x4;
!
! cli(); /* we are about to change our ldt, we better do it
! with interrupts off. Perhaps we should call schedule
! first so that we won't be taking too much extra time. */
! lldt(tsk);
! set_fs(seg);
! *data = get_fs_long((void *)addr); /* we are assuming kernel space
! is in the gdt here. */
! lldt(cur);
! set_fs(oldfs);
! sti();
! return 0;
}
/*
! * this routine will get a word out of an arbitrary
! * tasks data space. It likes to have the task number
! * rather than the task pointer. Perhaps the number
! * should be included in the pointer.
*/
! /* seg = 0 if I space */
! static inline int put_long(int tsk, long addr, int data, unsigned seg)
{
- int i;
- int limit;
- unsigned oldfs;
- unsigned long address;
unsigned long page;
- int cur;
! /* find the task number of the current task. */
! for (i = 0; i < NR_TASKS ; i++) {
! if (task[i] == current) break;
}
! if (i == NR_TASKS) {
! printk("PTRACE: Can't find current task\n");
! do_exit(SIGSEGV);
}
! cur = i;
! /* we will need to check the readability of the segment
! and then the byte in order to avoid segment violations. */
! seg++;
! limit = (task[tsk]->ldt[seg].a) & 0xffff;
! /* this should be constant amound all of our segments, but we
! had better check anyway. */
! if (task[tsk]->ldt[seg].b & GRANULARITY)
! limit = limit << 12;
! if (limit <= addr+4)
return -EIO;
! /* Now compute the address, and make sure that it is present. */
! address = task[tsk]->start_code + addr;
! page = *((unsigned long*) ((address >> 20) & 0xffc));
! /* see if it is present. */
! if (!(page & PAGE_PRESENT)) {
! do_no_page(0, address, task[tsk]);
! }
! write_verify(address);
!
! oldfs=get_fs();
! /* now convert seg to the right format. */
! seg = (seg << 3) | 0x4;
!
! cli(); /* we are about to change our ldt, we better do it
! with interrupts off. Perhaps we should call schedule
! first so that we won't be taking too much extra time. */
! lldt(tsk);
! set_fs(seg);
! put_fs_long(data,(void *)addr);
! lldt(cur);
! set_fs(oldfs);
! sti();
return 0;
}
-
/* Perform ptrace(request, pid, addr, data) syscall */
int sys_ptrace(unsigned long *buffer)
{
--- 65,223 ----
* data space.
*/
static inline int put_stack_long(struct task_struct *task, int offset,
! unsigned long data)
{
unsigned char * stack;
stack = (unsigned char *) task->tss.esp0;
stack += offset;
! *(unsigned long *) stack = data;
return 0;
}
/*
! * This routine gets a long from any process space by following the page
! * tables. NOTE! You should check that the long isn't on a page boundary,
! * and that it is in the task area before calling this: this routine does
! * no checking.
! *
! * NOTE2! This uses "tsk->tss.cr3" even though we know it's currently always
! * zero. This routine shouldn't have to change when we make a better mm.
*/
! static unsigned long get_long(struct task_struct * tsk,
! unsigned long addr)
{
unsigned long page;
! addr += tsk->start_code;
! repeat:
! page = tsk->tss.cr3 + ((addr >> 20) & 0xffc);
! page = *(unsigned long *) page;
! if (page & PAGE_PRESENT) {
! page &= 0xfffff000;
! page += (addr >> 10) & 0xffc;
! page = *((unsigned long *) page);
}
if (!(page & PAGE_PRESENT)) {
! do_no_page(0,addr,tsk);
! goto repeat;
}
! page &= 0xfffff000;
! page += addr & 0xfff;
! return *(unsigned long *) page;
}
/*
! * This routine puts a long into any process space by following the page
! * tables. NOTE! You should check that the long isn't on a page boundary,
! * and that it is in the task area before calling this: this routine does
! * no checking.
*/
! static void put_long(struct task_struct * tsk, unsigned long addr,
! unsigned long data)
{
unsigned long page;
! addr += tsk->start_code;
! repeat:
! page = tsk->tss.cr3 + ((addr >> 20) & 0xffc);
! page = *(unsigned long *) page;
! if (page & PAGE_PRESENT) {
! page &= 0xfffff000;
! page += (addr >> 10) & 0xffc;
! page = *((unsigned long *) page);
}
! if (!(page & PAGE_PRESENT)) {
! do_no_page(0,addr,tsk);
! goto repeat;
}
! if (!(page & PAGE_RW)) {
! write_verify(addr);
! goto repeat;
! }
! page &= 0xfffff000;
! page += addr & 0xfff;
! *(unsigned long *) page = data;
! }
! /*
! * This routine checks the page boundaries, and that the offset is
! * within the task area. It then calls get_long() to read a long.
! */
! static int read_long(struct task_struct * tsk, unsigned long addr,
! unsigned long * result)
! {
! unsigned long low,high;
! if (addr > TASK_SIZE-4)
return -EIO;
+ if ((addr & 0xfff) > PAGE_SIZE-4) {
+ low = get_long(tsk,addr & 0xfffffffc);
+ high = get_long(tsk,(addr+4) & 0xfffffffc);
+ switch (addr & 3) {
+ case 1:
+ low >>= 8;
+ low |= high << 24;
+ break;
+ case 2:
+ low >>= 16;
+ low |= high << 16;
+ break;
+ case 3:
+ low >>= 16;
+ low |= high << 16;
+ break;
+ }
+ *result = low;
+ } else
+ *result = get_long(tsk,addr);
+ return 0;
+ }
! /*
! * This routine checks the page boundaries, and that the offset is
! * within the task area. It then calls put_long() to write a long.
! */
! static int write_long(struct task_struct * tsk, unsigned long addr,
! unsigned long data)
! {
! unsigned long low,high;
! if (addr > TASK_SIZE-4)
! return -EIO;
! if ((addr & 0xfff) > PAGE_SIZE-4) {
! low = get_long(tsk,addr & 0xfffffffc);
! high = get_long(tsk,(addr+4) & 0xfffffffc);
! switch (addr & 3) {
! case 0: /* shouldn't happen, but safety first */
! low = data;
! break;
! case 1:
! low &= 0x000000ff;
! low |= data << 8;
! high &= 0xff000000;
! high |= data >> 8;
! break;
! case 2:
! low &= 0x0000ffff;
! low |= data << 16;
! high &= 0xffff0000;
! high |= data >> 16;
! break;
! case 3:
! low &= 0x00ffffff;
! low |= data << 24;
! high &= 0xffffff00;
! high |= data >> 24;
! break;
! }
! put_long(tsk,addr & 0xfffffffc,low);
! put_long(tsk,(addr+4) & 0xfffffffc,high);
! } else
! put_long(tsk,addr,data);
return 0;
}
/* Perform ptrace(request, pid, addr, data) syscall */
int sys_ptrace(unsigned long *buffer)
{
***************
*** 244,250 ****
case 2: {
int tmp,res;
! res = get_long(childno, addr, 1, &tmp);
if (res < 0)
return res;
verify_area((void *) data, 4);
--- 254,260 ----
case 2: {
int tmp,res;
! res = read_long(task[childno], addr, &tmp);
if (res < 0)
return res;
verify_area((void *) data, 4);
***************
*** 267,280 ****
/* when I and D space are seperate, this will have to be fixed. */
case 4: /* write the word at location addr. */
case 5:
! if (put_long(childno, addr, data, 1))
! return -EIO;
! return 0;
case 6: /* write the word at location addr in the USER area */
addr = addr >> 2; /* temproary hack. */
if (addr < 0 || addr >= 17)
! return -EIO;
if (addr == ORIG_EAX)
return -EIO;
if (addr == EFL) { /* flags. */
--- 277,288 ----
/* when I and D space are seperate, this will have to be fixed. */
case 4: /* write the word at location addr. */
case 5:
! return write_long(task[childno],addr,data);
case 6: /* write the word at location addr in the USER area */
addr = addr >> 2; /* temproary hack. */
if (addr < 0 || addr >= 17)
! return -EIO;
if (addr == ORIG_EAX)
return -EIO;
if (addr == EFL) { /* flags. */
***************
*** 281,287 ****
data &= FLAG_MASK;
data |= get_stack_long(child, EFL*4-MAGICNUMBER) & ~FLAG_MASK;
}
-
if (put_stack_long(child, 4*addr-MAGICNUMBER, data))
return -EIO;
return 0;
--- 289,294 ----
*** OLD/linux/mm/memory.c Tue Mar 17 22:35:13 1992
--- linux/mm/memory.c Thu Mar 19 23:19:03 1992
***************
*** 429,436 ****
return 0;
}
! void do_no_page(unsigned long error_code,
! unsigned long address, struct task_struct *tsk)
{
static unsigned int last_checked = 0;
int nr[4];
--- 429,436 ----
return 0;
}
! void do_no_page(unsigned long error_code, unsigned long address,
! struct task_struct *tsk)
{
static unsigned int last_checked = 0;
int nr[4];
***************
*** 439,445 ****
int block,i;
struct inode * inode;
! /* Trashing ? Make it interruptible, but don't penalize otherwise */
for (i = 0; i < CHECK_LAST_NR; i++)
if ((address & 0xfffff000) == last_pages[i]) {
current->counter = 0;
--- 439,445 ----
int block,i;
struct inode * inode;
! /* Thrashing ? Make it interruptible, but don't penalize otherwise */
for (i = 0; i < CHECK_LAST_NR; i++)
if ((address & 0xfffff000) == last_pages[i]) {
current->counter = 0;
***************
*** 492,499 ****
return;
}
if (tsk == current)
! if (share_page(inode,tmp))
! return;
if (!(page = get_free_page()))
oom();
/* remember that 1 block is used for header */
--- 492,499 ----
return;
}
if (tsk == current)
! if (share_page(inode,tmp))
! return;
if (!(page = get_free_page()))
oom();
/* remember that 1 block is used for header */
*** OLD/linux/include/linux/tty.h Sun Mar 15 02:43:54 1992
--- linux/include/linux/tty.h Thu Mar 19 21:16:26 1992
***************
*** 68,83 ****
struct tty_queue *secondary;
};
! #define TTY_WRITE(tty) \
do { \
cli(); \
! if (!(tty)->busy) { \
! (tty)->busy = 1; \
sti(); \
(tty)->write((tty)); \
! (tty)->busy = 0; \
! } else \
sti(); \
} while (0)
extern struct tty_struct tty_table[];
--- 68,105 ----
struct tty_queue *secondary;
};
! /*
! * so that interrupts won't be able to mess up the
! * queues, copy_to_cooked must be atomic with repect
! * to itself, as must tty->write.
! */
! #define TTY_WRITE_BUSY 1
! #define TTY_READ_BUSY 2
!
! #define TTY_WRITE_FLUSH(tty) \
do { \
cli(); \
! if (!EMPTY((tty)->write_q) && !(TTY_WRITE_BUSY & (tty)->busy)) { \
! (tty)->busy |= TTY_WRITE_BUSY; \
sti(); \
(tty)->write((tty)); \
! cli(); \
! (tty)->busy &= ~TTY_WRITE_BUSY; \
! } \
! sti(); \
! } while (0)
!
! #define TTY_READ_FLUSH(tty) \
! do { \
! cli(); \
! if (!EMPTY((tty)->read_q) && !(TTY_READ_BUSY & (tty)->busy)) { \
! (tty)->busy |= TTY_READ_BUSY; \
sti(); \
+ copy_to_cooked((tty)); \
+ cli(); \
+ (tty)->busy &= ~TTY_READ_BUSY; \
+ } \
+ sti(); \
} while (0)
extern struct tty_struct tty_table[];

BIN
bin-src/cdrom-0.1.tar.Z Normal file

Binary file not shown.

BIN
bin-src/cdrom-0.2.tar.Z Normal file

Binary file not shown.

BIN
bin-src/cdrom-0.4.tar.Z Normal file

Binary file not shown.

BIN
bin-src/cdrom-0.5.tar.Z Normal file

Binary file not shown.

BIN
bin-src/cdrom-0.6a.tar.Z Normal file

Binary file not shown.

BIN
bin-src/chklogs-1.5.tar.gz Normal file

Binary file not shown.

25
bin-src/chklogs.lsm Normal file
View File

@@ -0,0 +1,25 @@
Begin3
Title: chklogs: Check Logs
Version: 1.5
Entered-date: 1 May 1995
Description: A Perl script (can be cronned) for maintenance of system
logs. It checks your list of system logs against maximum
allowed sizes specified by you. It gives a report on
stdout, or mails the system admin. Can also archive them.
Keywords: System logs, monitor, archive, maintain
Author: grimaldo@iaehv.iaehv.nl (Didimo Emilio Grimaldo Tunon)
Maintained-by: grimaldo@iaehv.iaehv.nl (Didimo Emilio Grimaldo Tunon)
Primary-site: ftp.iaehv.nl:/pub/users/grimaldo/
6306 chklogs-1.5.tar.gz
Alternate-site: sunsite.unc.edu: ???
6306 chklogs-1.5.tar.gz
767 chklogs.lsm
nic.funet.fi
6306 chklogs-1.5.tar.gz
767 chklogs.lsm
Original-site:
Platform:
Copying-policy: GPL
End

195
bin-src/cons.cdif Normal file
View 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;

BIN
bin-src/cpp-manual-2.dvi.gz Normal file

Binary file not shown.

BIN
bin-src/cproto33-src.tar.Z Normal file

Binary file not shown.

1
bin-src/crt0.s.Z Normal file
View File

@@ -0,0 +1 @@
<1F><>.<2E><><EFBFBD>CG<43><11>ė2n중<6E>ƍ<EFBFBD>/<0F>Б<EFBFBD>G<EFBFBD><47>m<><6D>i<EFBFBD>E<>2s<32><73>`q2 <0C><>!G<>h<EFBFBD><68>EF<45>-&<13>M<EFBFBD>/m¤<6D> <09><>4

BIN
bin-src/csh-src.tar.Z Normal file

Binary file not shown.

BIN
bin-src/curses.tar.Z Normal file

Binary file not shown.

BIN
bin-src/cvw.src.tar.Z Normal file

Binary file not shown.

View File

@@ -0,0 +1,43 @@
From: zuazaga@ucunix.san.uc.edu (Humberto Ortiz-Zuazaga)
Newsgroups: alt.os.linux
Subject: Re: linux-dos-linux file access
Summary: Mtools pl5 changes
Keywords: Mtools, changes
Date: 23 Jan 92 16:21:23 GMT
Organization: Univ. of Cincinnati
In article <1992Jan22.135130.26695@athena.mit.edu> mont@netcom.netcom.com (Mont Pierce) writes:
>I've tried compiling mtools, but it wants a device[s] to be defined in
>devices.c. Can anyone send me a sample of drives defined in this module?
>
I grabbed a copy of Mtools patchlevel 5 off of comp.sources.xxx
recently, and the only change I had to make was to define the
appropriate devices for Linux. Note that the patches I found on tsx-11
were not quite correct, the B: drive didn't work. The devices I'm using
now are:
#ifdef __linux__
struct device devices[] = {
{'A', "/dev/dosA" , 0L, 12, 0, (int (*) ()) 0, 80, 2, 9},
{'A', "/dev/at0" , 0L, 12, 0, (int (*) ()) 0, 80, 2, 15},
{'B', "/dev/dosB" , 0L, 12, 0, (int (*) ()) 0, 80, 2, 9},
{'B', "/dev/PS1" , 0L, 12, 0, (int (*) ()) 0, 80, 2, 18},
{'C', "/dev/dosC" , 0L, 16, 0, (int (*) ()) 0, 0, 0, 0},
{'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}
};
#endif /* __LINUX__ */
But for this to work, the named devices have to be already made in /dev.
Example, in my case /dev/dosA is a low density drive, (9 sectors, 80
tracks), so it must be made with the appropriate major and minor device
numbers for a low density drive. The devices Linux comes with are
probably not the same you have, so double check them. (Linux has a 1.44
in A:, a 1.2 in B:, and C is the 6th HD partition.)
Good luck!
--
Humberto Ortiz-Zuazaga INTERNET: zuazaga@ucunix.san.uc.edu
Dept. of Physiology & Biophysics BITNET: picone@ucbeh
University of Cincinnati CIS: 72301,2303

104
bin-src/df.c Normal file
View File

@@ -0,0 +1,104 @@
/* 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);
}

BIN
bin-src/diff-1.15.tar.Z Normal file

Binary file not shown.

BIN
bin-src/diff.Z Normal file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More