add directory bin-src
This commit is contained in:
BIN
bin-src/EM-diffs.Z
Normal file
BIN
bin-src/EM-diffs.Z
Normal file
Binary file not shown.
2409
bin-src/Linus.patch
Normal file
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
46
bin-src/MAKEDEV-1.2.lsm
Normal 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
BIN
bin-src/MAKEDEV-1.2.tar
Normal file
Binary file not shown.
BIN
bin-src/MAKEDEV-1.2.tar.gz
Normal file
BIN
bin-src/MAKEDEV-1.2.tar.gz
Normal file
Binary file not shown.
46
bin-src/MAKEDEV-1.4.lsm
Normal file
46
bin-src/MAKEDEV-1.4.lsm
Normal 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
BIN
bin-src/MAKEDEV-1.4.tar.gz
Normal file
Binary file not shown.
BIN
bin-src/MicrosoftBusmouse097.tar.Z
Normal file
BIN
bin-src/MicrosoftBusmouse097.tar.Z
Normal file
Binary file not shown.
1
bin-src/NEWEST_IS_0.98.3
Normal file
1
bin-src/NEWEST_IS_0.98.3
Normal file
@@ -0,0 +1 @@
|
||||
So, look dates.
|
||||
35
bin-src/PBMPlus.README
Normal file
35
bin-src/PBMPlus.README
Normal 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
358
bin-src/READ.ME
Normal 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
201
bin-src/README
Normal 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
239
bin-src/README.CDROM
Normal 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
243
bin-src/README.CDROM-05
Normal 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
256
bin-src/README.CDROM-06a
Normal 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
260
bin-src/README.CDROM-98pl4
Normal 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
89
bin-src/README.FIRST
Normal 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
58
bin-src/README.beav
Normal 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
10
bin-src/README.curses
Normal file
@@ -0,0 +1,10 @@
|
||||
curses.tar.Z contains the curses library from bsd-net-2, with
|
||||
pre-installed diffs & RCS files for linux changes.
|
||||
You'll need to use 'pmake' to build it, or reconstruct the Makefile.
|
||||
|
||||
I'm not completely certain that I got all of the raw(), crmode() etc
|
||||
stuff right. If you have applications that use curses, try them out and
|
||||
send back patches if you find bugs.
|
||||
|
||||
John Kohl <jtkohl@cs.berkeley.edu>
|
||||
|
||||
18
bin-src/SVGATextMode-0.1.lsm
Normal file
18
bin-src/SVGATextMode-0.1.lsm
Normal 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
|
||||
BIN
bin-src/SVGATextMode-0.1.tar.gz
Normal file
BIN
bin-src/SVGATextMode-0.1.tar.gz
Normal file
Binary file not shown.
6
bin-src/Zoo.Fiz.note
Normal file
6
bin-src/Zoo.Fiz.note
Normal 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
BIN
bin-src/acct-1.0.tar.gz
Normal file
Binary file not shown.
26
bin-src/acct-1.1.lsm
Normal file
26
bin-src/acct-1.1.lsm
Normal 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
BIN
bin-src/acct-1.1.tar.gz
Normal file
Binary file not shown.
0
bin-src/acct-1.3-REALLY.FOR.0.99.15
Normal file
0
bin-src/acct-1.3-REALLY.FOR.0.99.15
Normal file
BIN
bin-src/acct-1.3.tar.gz
Normal file
BIN
bin-src/acct-1.3.tar.gz
Normal file
Binary file not shown.
24
bin-src/acct-1.3.tar.gz.lsm
Normal file
24
bin-src/acct-1.3.tar.gz.lsm
Normal 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
26
bin-src/acct.lsm
Normal 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
|
||||
BIN
bin-src/acctkit-0.99.12.tar.gz
Normal file
BIN
bin-src/acctkit-0.99.12.tar.gz
Normal file
Binary file not shown.
26
bin-src/acctkit-0.99.12.tar.gz.lsm
Normal file
26
bin-src/acctkit-0.99.12.tar.gz.lsm
Normal 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
BIN
bin-src/acu.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/adduser-0.96.tar.Z
Normal file
BIN
bin-src/adduser-0.96.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/adduser.tar.Z
Normal file
BIN
bin-src/adduser.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/admutil-1.11.tar.gz
Normal file
BIN
bin-src/admutil-1.11.tar.gz
Normal file
Binary file not shown.
BIN
bin-src/admutil-1.4.tar.Z
Normal file
BIN
bin-src/admutil-1.4.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/admutil-1.7b.tar.gz
Normal file
BIN
bin-src/admutil-1.7b.tar.gz
Normal file
Binary file not shown.
BIN
bin-src/admutil-1.9.tar.gz
Normal file
BIN
bin-src/admutil-1.9.tar.gz
Normal file
Binary file not shown.
BIN
bin-src/agrep-2.04.tar.gz
Normal file
BIN
bin-src/agrep-2.04.tar.gz
Normal file
Binary file not shown.
1
bin-src/agrep.README
Normal file
1
bin-src/agrep.README
Normal 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
BIN
bin-src/agrep.gz
Normal file
Binary file not shown.
BIN
bin-src/agrep.ps.1.gz
Normal file
BIN
bin-src/agrep.ps.1.gz
Normal file
Binary file not shown.
BIN
bin-src/agrep.ps.2.gz
Normal file
BIN
bin-src/agrep.ps.2.gz
Normal file
Binary file not shown.
BIN
bin-src/ahadrive.tar.Z
Normal file
BIN
bin-src/ahadrive.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/as86.tar.Z
Normal file
BIN
bin-src/as86.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/ash-linux-0.2.tar.gz
Normal file
BIN
bin-src/ash-linux-0.2.tar.gz
Normal file
Binary file not shown.
BIN
bin-src/at-1.1.tar.Z
Normal file
BIN
bin-src/at-1.1.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/bash-1.12.tar.Z
Normal file
BIN
bin-src/bash-1.12.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/bash-1.14.2.linux.bin.tar.gz
Normal file
BIN
bin-src/bash-1.14.2.linux.bin.tar.gz
Normal file
Binary file not shown.
BIN
bin-src/beav-1.20.tar.Z
Normal file
BIN
bin-src/beav-1.20.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/benchmark.tar.Z
Normal file
BIN
bin-src/benchmark.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/bin16.tar.Z
Normal file
BIN
bin-src/bin16.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/binsrc.Tar.Z
Normal file
BIN
bin-src/binsrc.Tar.Z
Normal file
Binary file not shown.
BIN
bin-src/binutils.tar.Z
Normal file
BIN
bin-src/binutils.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/bison.Z
Normal file
BIN
bin-src/bison.Z
Normal file
Binary file not shown.
BIN
bin-src/bison.tar.Z
Normal file
BIN
bin-src/bison.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/bison.tar.gz
Normal file
BIN
bin-src/bison.tar.gz
Normal file
Binary file not shown.
BIN
bin-src/blank.tar.Z
Normal file
BIN
bin-src/blank.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/blex.bin.tar.Z
Normal file
BIN
bin-src/blex.bin.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/block.tar.Z
Normal file
BIN
bin-src/block.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/boot142.zip
Normal file
BIN
bin-src/boot142.zip
Normal file
Binary file not shown.
BIN
bin-src/boot92.05.18.Z
Normal file
BIN
bin-src/boot92.05.18.Z
Normal file
Binary file not shown.
BIN
bin-src/bootlin.zip
Normal file
BIN
bin-src/bootlin.zip
Normal file
Binary file not shown.
BIN
bin-src/bootmenu.tar.Z
Normal file
BIN
bin-src/bootmenu.tar.Z
Normal file
Binary file not shown.
53
bin-src/bootset.c
Normal file
53
bin-src/bootset.c
Normal 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
BIN
bin-src/bootsy4a.tgz
Normal file
Binary file not shown.
BIN
bin-src/bootsys.taz
Normal file
BIN
bin-src/bootsys.taz
Normal file
Binary file not shown.
BIN
bin-src/bootsys3.taz
Normal file
BIN
bin-src/bootsys3.taz
Normal file
Binary file not shown.
69
bin-src/bootsys4.README
Normal file
69
bin-src/bootsys4.README
Normal 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
BIN
bin-src/bootsys4.tgz
Normal file
Binary file not shown.
BIN
bin-src/bpe.tar.Z
Normal file
BIN
bin-src/bpe.tar.Z
Normal file
Binary file not shown.
341
bin-src/buffer.c
Normal file
341
bin-src/buffer.c
Normal 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
BIN
bin-src/buffer.c.Z
Normal file
Binary file not shown.
89
bin-src/build.c.patch
Normal file
89
bin-src/build.c.patch
Normal file
@@ -0,0 +1,89 @@
|
||||
*** build.c.orig Sat Nov 9 21:50:51 1991
|
||||
--- build.c Sat Nov 9 22:23:13 1991
|
||||
***************
|
||||
*** 17,24 ****
|
||||
--- 17,27 ----
|
||||
*/
|
||||
|
||||
#include <stdio.h> /* fprintf */
|
||||
+ #include <string.h>
|
||||
#include <stdlib.h> /* contains exit */
|
||||
#include <sys/types.h> /* unistd.h needs this */
|
||||
+ #include <sys/stat.h>
|
||||
+ #include <linux/fs.h>
|
||||
#include <unistd.h> /* contains read/write */
|
||||
#include <fcntl.h>
|
||||
|
||||
***************
|
||||
*** 25,30 ****
|
||||
--- 28,36 ----
|
||||
#define MINIX_HEADER 32
|
||||
#define GCC_HEADER 1024
|
||||
|
||||
+ #define DEFAULT_MAJOR_ROOT 3
|
||||
+ #define DEFAULT_MINOR_ROOT 6
|
||||
+
|
||||
/* max nr of sectors of setup: don't change unless you also change
|
||||
* bootsect etc */
|
||||
#define SETUP_SECTS 4
|
||||
***************
|
||||
*** 46,54 ****
|
||||
{
|
||||
int i,c,id;
|
||||
char buf[1024];
|
||||
|
||||
! if (argc != 4)
|
||||
usage();
|
||||
for (i=0;i<sizeof buf; i++) buf[i]=0;
|
||||
if ((id=open(argv[1],O_RDONLY,0))<0)
|
||||
die("Unable to open 'boot'");
|
||||
--- 52,85 ----
|
||||
{
|
||||
int i,c,id;
|
||||
char buf[1024];
|
||||
+ char major_root, minor_root;
|
||||
+ struct stat sb;
|
||||
|
||||
! if ((argc != 4) && (argc != 5))
|
||||
usage();
|
||||
+ if (argc == 5) {
|
||||
+ if (strcmp(argv[4], "FLOPPY")) {
|
||||
+ if (stat(argv[4], &sb)) {
|
||||
+ perror(argv[4]);
|
||||
+ die("Couldn't stat root device.");
|
||||
+ }
|
||||
+ major_root = MAJOR(sb.st_rdev);
|
||||
+ minor_root = MINOR(sb.st_rdev);
|
||||
+ } else {
|
||||
+ major_root = 0;
|
||||
+ minor_root = 0;
|
||||
+ }
|
||||
+ } else {
|
||||
+ major_root = DEFAULT_MAJOR_ROOT;
|
||||
+ minor_root = DEFAULT_MINOR_ROOT;
|
||||
+ }
|
||||
+ fprintf(stderr, "Root device is (%d, %d)\n", major_root, minor_root);
|
||||
+ if ((major_root != 2) && (major_root != 3) &&
|
||||
+ (major_root != 0)) {
|
||||
+ fprintf(stderr, "Illegal root device (major = %d)\n",
|
||||
+ major_root);
|
||||
+ die("Bad root device --- major #");
|
||||
+ }
|
||||
for (i=0;i<sizeof buf; i++) buf[i]=0;
|
||||
if ((id=open(argv[1],O_RDONLY,0))<0)
|
||||
die("Unable to open 'boot'");
|
||||
***************
|
||||
*** 72,77 ****
|
||||
--- 103,110 ----
|
||||
die("Boot block must be exactly 512 bytes");
|
||||
if ((*(unsigned short *)(buf+510)) != 0xAA55)
|
||||
die("Boot block hasn't got boot flag (0xAA55)");
|
||||
+ buf[508] = (char) minor_root;
|
||||
+ buf[509] = (char) major_root;
|
||||
i=write(1,buf,512);
|
||||
if (i!=512)
|
||||
die("Write call failed");
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
bin-src/busmouse2a.tar.Z
Normal file
BIN
bin-src/busmouse2a.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/bzip2-0.1pl2.tar.gz
Normal file
BIN
bin-src/bzip2-0.1pl2.tar.gz
Normal file
Binary file not shown.
BIN
bin-src/calendar.tar.Z
Normal file
BIN
bin-src/calendar.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/calls.tar.gz
Normal file
BIN
bin-src/calls.tar.gz
Normal file
Binary file not shown.
BIN
bin-src/cawf.tar.Z
Normal file
BIN
bin-src/cawf.tar.Z
Normal file
Binary file not shown.
125
bin-src/cawf2.cdiff
Normal file
125
bin-src/cawf2.cdiff
Normal 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
BIN
bin-src/cawf2.zip
Normal file
Binary file not shown.
856
bin-src/cdiffs for 0.95a
Normal file
856
bin-src/cdiffs for 0.95a
Normal 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
BIN
bin-src/cdrom-0.1.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/cdrom-0.2.tar.Z
Normal file
BIN
bin-src/cdrom-0.2.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/cdrom-0.4.tar.Z
Normal file
BIN
bin-src/cdrom-0.4.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/cdrom-0.5.tar.Z
Normal file
BIN
bin-src/cdrom-0.5.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/cdrom-0.6a.tar.Z
Normal file
BIN
bin-src/cdrom-0.6a.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/chklogs-1.5.tar.gz
Normal file
BIN
bin-src/chklogs-1.5.tar.gz
Normal file
Binary file not shown.
25
bin-src/chklogs.lsm
Normal file
25
bin-src/chklogs.lsm
Normal 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
195
bin-src/cons.cdif
Normal file
@@ -0,0 +1,195 @@
|
||||
*** cons.11 Tue Dec 24 09:16:31 1991
|
||||
--- console.c Tue Dec 24 08:20:11 1991
|
||||
***************
|
||||
*** 76,81 ****
|
||||
--- 76,82 ----
|
||||
unsigned char vc_def_attr;
|
||||
unsigned long vc_ques;
|
||||
unsigned long vc_state;
|
||||
+ unsigned long vc_restate;
|
||||
unsigned long vc_origin; /* Used for EGA/VGA fast scroll */
|
||||
unsigned long vc_scr_end; /* Used for EGA/VGA fast scroll */
|
||||
unsigned long vc_pos;
|
||||
***************
|
||||
*** 101,106 ****
|
||||
--- 102,108 ----
|
||||
#define x (vc_cons[currcons].vc_x)
|
||||
#define y (vc_cons[currcons].vc_y)
|
||||
#define state (vc_cons[currcons].vc_state)
|
||||
+ #define restate (vc_cons[currcons].vc_restate)
|
||||
#define npar (vc_cons[currcons].vc_npar)
|
||||
#define par (vc_cons[currcons].vc_par)
|
||||
#define ques (vc_cons[currcons].vc_ques)
|
||||
***************
|
||||
*** 370,375 ****
|
||||
--- 372,387 ----
|
||||
}
|
||||
}
|
||||
|
||||
+ static char csi_graph(int currcons, char ch )
|
||||
+ {
|
||||
+ char *val, *ac=
|
||||
+ "0\333a\261h\040I\017`\004f\370g\361j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263~\025";
|
||||
+ if (val = strchr(ac,ch))
|
||||
+ return(*(val+1));
|
||||
+ return(0);
|
||||
+
|
||||
+ }
|
||||
+
|
||||
static inline void set_cursor(int currcons)
|
||||
{
|
||||
if (currcons != fg_console)
|
||||
***************
|
||||
*** 505,511 ****
|
||||
void con_write(struct tty_struct * tty)
|
||||
{
|
||||
int nr;
|
||||
! char c;
|
||||
|
||||
int currcons;
|
||||
|
||||
--- 517,523 ----
|
||||
void con_write(struct tty_struct * tty)
|
||||
{
|
||||
int nr;
|
||||
! char c, ch = 0;
|
||||
|
||||
int currcons;
|
||||
|
||||
***************
|
||||
*** 564,570 ****
|
||||
sysbeep();
|
||||
break;
|
||||
case 1:
|
||||
! state=0;
|
||||
if (c=='[')
|
||||
state=2;
|
||||
else if (c=='E')
|
||||
--- 576,582 ----
|
||||
sysbeep();
|
||||
break;
|
||||
case 1:
|
||||
! state=restate;
|
||||
if (c=='[')
|
||||
state=2;
|
||||
else if (c=='E')
|
||||
***************
|
||||
*** 575,584 ****
|
||||
lf(currcons);
|
||||
else if (c=='Z')
|
||||
respond(currcons,tty);
|
||||
! else if (x=='7')
|
||||
save_cur(currcons);
|
||||
! else if (x=='8')
|
||||
restore_cur(currcons);
|
||||
break;
|
||||
case 2:
|
||||
for(npar=0;npar<NPAR;npar++)
|
||||
--- 587,598 ----
|
||||
lf(currcons);
|
||||
else if (c=='Z')
|
||||
respond(currcons,tty);
|
||||
! else if (c=='7')
|
||||
save_cur(currcons);
|
||||
! else if (c=='8')
|
||||
restore_cur(currcons);
|
||||
+ else if (c == '(' || c == ')')
|
||||
+ state = 6;
|
||||
break;
|
||||
case 2:
|
||||
for(npar=0;npar<NPAR;npar++)
|
||||
***************
|
||||
*** 600,606 ****
|
||||
break;
|
||||
} else state=4;
|
||||
case 4:
|
||||
! state=0;
|
||||
switch(c) {
|
||||
case 'G': case '`':
|
||||
if (par[0]) par[0]--;
|
||||
--- 614,620 ----
|
||||
break;
|
||||
} else state=4;
|
||||
case 4:
|
||||
! state=restate;
|
||||
switch(c) {
|
||||
case 'G': case '`':
|
||||
if (par[0]) par[0]--;
|
||||
***************
|
||||
*** 680,685 ****
|
||||
--- 694,751 ----
|
||||
case 5:
|
||||
/* Function Key */
|
||||
break;
|
||||
+ case 6:
|
||||
+ if (c == '0')
|
||||
+ { state =
|
||||
+ restate = 7;
|
||||
+ }
|
||||
+ else
|
||||
+ if (c == 'B')
|
||||
+ { state =
|
||||
+ restate = 0;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 7:
|
||||
+ if (c == 15)
|
||||
+ { state =
|
||||
+ restate = 9;
|
||||
+ break;
|
||||
+ }
|
||||
+ else
|
||||
+ ch = csi_graph(currcons,c);
|
||||
+ case 9:
|
||||
+ if (c == 14)
|
||||
+ { state =
|
||||
+ restate = 7;
|
||||
+ break;
|
||||
+ }
|
||||
+ else if (c == 27)
|
||||
+ { state = 1;
|
||||
+ break;
|
||||
+ }
|
||||
+ else
|
||||
+ if (state == 9)
|
||||
+ { if (c>31 && c<127)
|
||||
+ ch = c;
|
||||
+ else
|
||||
+ break;
|
||||
+ }
|
||||
+ case 10:
|
||||
+ if (ch)
|
||||
+ if (x>=video_num_columns) {
|
||||
+ x -= video_num_columns;
|
||||
+ pos -= video_size_row;
|
||||
+ lf(currcons);
|
||||
+ }
|
||||
+ __asm__("movb _myattr,%%ah\n\t"
|
||||
+ "movw %%ax,%1\n\t"
|
||||
+ ::"a" (ch),"m" (*(short *)pos)
|
||||
+ :"ax");
|
||||
+ pos += 2;
|
||||
+ x++;
|
||||
+ break;
|
||||
+
|
||||
+
|
||||
}
|
||||
}
|
||||
set_cursor(currcons);
|
||||
***************
|
||||
*** 765,771 ****
|
||||
bottom = video_num_lines;
|
||||
attr=0x07;
|
||||
def_attr=0x07;
|
||||
! state=0;
|
||||
ques = 0;
|
||||
iscolor = 0;
|
||||
|
||||
--- 831,837 ----
|
||||
bottom = video_num_lines;
|
||||
attr=0x07;
|
||||
def_attr=0x07;
|
||||
! restate = state=0;
|
||||
ques = 0;
|
||||
iscolor = 0;
|
||||
|
||||
BIN
bin-src/cpp-manual-2.dvi.gz
Normal file
BIN
bin-src/cpp-manual-2.dvi.gz
Normal file
Binary file not shown.
BIN
bin-src/cproto33-src.tar.Z
Normal file
BIN
bin-src/cproto33-src.tar.Z
Normal file
Binary file not shown.
1
bin-src/crt0.s.Z
Normal file
1
bin-src/crt0.s.Z
Normal file
@@ -0,0 +1 @@
|
||||
<1F><>.<2E><><EFBFBD>CG<43>gؼ<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
BIN
bin-src/csh-src.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/curses.tar.Z
Normal file
BIN
bin-src/curses.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/cvw.src.tar.Z
Normal file
BIN
bin-src/cvw.src.tar.Z
Normal file
Binary file not shown.
43
bin-src/devices-entry-for-linux
Normal file
43
bin-src/devices-entry-for-linux
Normal 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
104
bin-src/df.c
Normal 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
BIN
bin-src/diff-1.15.tar.Z
Normal file
Binary file not shown.
BIN
bin-src/diff.Z
Normal file
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
Reference in New Issue
Block a user