add directory Linux-0.95
This commit is contained in:
BIN
Linux-0.95/INSTALL/autocn/ACONVERT.EXE
Normal file
BIN
Linux-0.95/INSTALL/autocn/ACONVERT.EXE
Normal file
Binary file not shown.
1234
Linux-0.95/INSTALL/autocn/AUTOCON.DOC
Normal file
1234
Linux-0.95/INSTALL/autocn/AUTOCON.DOC
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Linux-0.95/INSTALL/autocn/AUTOCON.EXE
Normal file
BIN
Linux-0.95/INSTALL/autocn/AUTOCON.EXE
Normal file
Binary file not shown.
BIN
Linux-0.95/INSTALL/autocn/AUTOCON.HLP
Normal file
BIN
Linux-0.95/INSTALL/autocn/AUTOCON.HLP
Normal file
Binary file not shown.
34
Linux-0.95/INSTALL/autocn/CACHE
Normal file
34
Linux-0.95/INSTALL/autocn/CACHE
Normal file
@@ -0,0 +1,34 @@
|
||||
|
||||
If you are running a Cache program, and do not have it set to write
|
||||
through, then (if you have Autocon set for a Warm or Cold boot -- and
|
||||
probably External) you must configure Autocon to "Flush" your cache.
|
||||
Hit the <F4> key, and put in the command string that causes your cache
|
||||
to flush. The command should be listed in the documentation for your
|
||||
Cache program. Autocon will then save the information, and perform a
|
||||
"Flush" before each reboot.
|
||||
|
||||
If you are not sure if your Cache is set to "write through", please
|
||||
configure Autocon to do the "Flush", just to be on the safe side.
|
||||
|
||||
The symptoms of a cache problem is that the Autoexec and Config files do
|
||||
not get updated, and/or any edited Autocon configurations do not get
|
||||
saved. In the worst case, the Autocon.Dat file will get corrupted, and
|
||||
your screen colors will disappear (screen will be blank when you start
|
||||
AutoCon).
|
||||
|
||||
Setting Autocon up to do the "Flush" will remove the problems.
|
||||
|
||||
Some Flush commands that I know are:
|
||||
|
||||
PC-KWIK - SUPERPCK /F
|
||||
PC-CACHE - PC-CACHE /FLUSH
|
||||
FLASH - FLASH /F?
|
||||
HYPERDISK - HYPERDK W
|
||||
SMARTDRV - SMARTDRV /C (new ver with WINDOWS 3.1)
|
||||
|
||||
|
||||
|
||||
Sorry for any inconvenience,
|
||||
|
||||
|
||||
-Larry Weaver
|
||||
61
Linux-0.95/INSTALL/autocn/CHANGES
Normal file
61
Linux-0.95/INSTALL/autocn/CHANGES
Normal file
@@ -0,0 +1,61 @@
|
||||
|
||||
CHANGES
|
||||
|
||||
I don't know if you read the changes file in the previous version,
|
||||
so I will summarize it. I sold my home in Santa Barbara, and moved
|
||||
to a small town in Northern California to concentrate on writing
|
||||
shareware full time. Well (you may ask), how's it going.
|
||||
|
||||
Since my program was reviewed on page 50 in the Nov. 13, 1990 issue
|
||||
of PC Magazine, registrations have increased significantly.
|
||||
Appearantly a lot of people read (and pay attention to) PC
|
||||
Magazine. Site registrations have really increased, and I now have
|
||||
some Fortune 50 customers. Banks, however, make up the bulk of
|
||||
the Site Licensees.
|
||||
|
||||
I ran into a few tax problems (it was either pay Uncle a lot of
|
||||
money, or put a lot of money into my house), so I've been
|
||||
consulting pretty heavily the last year and doing major
|
||||
reconstruction to my house. I think I am finally through with any
|
||||
big consulting jobs (and with rebuilding my house), so now AutoCon
|
||||
will be getting a lot more attention.
|
||||
|
||||
This is still not the release I had planned (it will probably show
|
||||
up some time around July), but one of my competitors was on
|
||||
Compuserve saying how much better he was than I because his program
|
||||
could handle DOS 5.0's HIGH and UMB flags. I decided I needed to
|
||||
add this capability to AutoCon and get out a new release before he
|
||||
could cause any more problems. So with this release, AutoCon will
|
||||
handle both MSDOS 5.0's HIGH and UMB flags, and it is compatible
|
||||
with DRDOS which is one up on my competitor.
|
||||
|
||||
The 2.1 release of AutoCon will have a lot more editor
|
||||
enhancements. I'm planning pull down menus (similar to the front
|
||||
screen), and a split screen capability. I also intend to allow
|
||||
Search/Replace operations to go automatically through all
|
||||
configurations. I will also be able to use the screen size in
|
||||
effect when AutoCon is started, instead of switching everything to
|
||||
the 80X25 mode.
|
||||
|
||||
I have a support BBS online and functional. The number is (916)
|
||||
623 4455, and it is in operation 24 hours a day. It has a 9600+
|
||||
BAUD modem that is CompuCom CSP, V32, and V42 compatible (of course
|
||||
it connects just fine at 2400 <or less> BAUD). The main function
|
||||
of the BBS is (of course ) AutoCon support. If it gets busy
|
||||
enough, it will grow into a full multi-line BBS. As a consequence
|
||||
there are several megabytes of downloadable files on it, always
|
||||
including the latest shareware release of AutoCon. I will also set
|
||||
up a section for a group of Beta testers, so let me know if you are
|
||||
interested in becomming one. I see several enhancements in
|
||||
AutoCons future, as well as a few other programs that I have in
|
||||
mind.
|
||||
|
||||
This is my first BBS and I'm sure there will be will be some
|
||||
growing pains, so please bear with me.
|
||||
|
||||
I love the place I've moved to and I thank you very much for the
|
||||
support you have given to AUTOCON, and for giving me the incentive
|
||||
to change careers.
|
||||
|
||||
|
||||
-Larry Weaver
|
||||
8
Linux-0.95/INSTALL/autocn/FILE_ID.DIZ
Normal file
8
Linux-0.95/INSTALL/autocn/FILE_ID.DIZ
Normal file
@@ -0,0 +1,8 @@
|
||||
AutoCon V2.0g is a database manager for
|
||||
Autoexec and Config Files. Allows up to
|
||||
50 configurations, and makes switching
|
||||
between them easy. Run full interactive
|
||||
(editor, mouse, menus, context sensitive
|
||||
help, etc.) or command line. MENU.CTL
|
||||
device driver can setup menu of
|
||||
configurations during boot. (ASP)
|
||||
175
Linux-0.95/INSTALL/autocn/KEY.TXT
Normal file
175
Linux-0.95/INSTALL/autocn/KEY.TXT
Normal file
@@ -0,0 +1,175 @@
|
||||
The following is a list of the all of the editor functions, and the
|
||||
default key assignments.
|
||||
|
||||
CURSOR MOVEMENT:
|
||||
<Left>, <CtrlS>
|
||||
Cursor left one character.
|
||||
|
||||
<Right>, <CtrlD>
|
||||
Cursor right one character.
|
||||
|
||||
<CtrlLeft>, <CtrlA>
|
||||
Cursor left one word. A 'word' is a series of non-separator
|
||||
characters followed by one or more of the following :
|
||||
' ', ';', '/', '='
|
||||
|
||||
<CtrlRight>, <CtrlF>
|
||||
Cursor right one word.
|
||||
|
||||
<Home>, <CtrlQ><S>
|
||||
Cursor to beginning of line.
|
||||
|
||||
<End>, <CtrlQ><D>
|
||||
Cursor to end of line.
|
||||
|
||||
<Up>, <CtrlE>
|
||||
Cursor up one line.
|
||||
|
||||
<Down>, <CtrlX>
|
||||
Cursor down one line.
|
||||
|
||||
<CtrlW>
|
||||
Scroll display up one line.
|
||||
|
||||
<CtrlZ>
|
||||
Scroll display down one line.
|
||||
|
||||
<PgUp>, <CtrlR>
|
||||
Scroll display up one page.
|
||||
|
||||
<PgDn>, <CtrlC>
|
||||
Scroll display down one page.
|
||||
|
||||
<CtrlHome>, <CtrlQ><E>
|
||||
Move cursor to top of edit window.
|
||||
|
||||
<CtrlEnd>, <CtrlQ><X>
|
||||
Move cursor to bottom of edit window.
|
||||
|
||||
<CtrlPgUp>, <CtrlQ><R>
|
||||
Move cursor to beginning of field.
|
||||
|
||||
<CtrlPgDn>, <CtrlQ><C>
|
||||
Move cursor to end of field.
|
||||
|
||||
<Tab>, <CtrlI>
|
||||
Move the cursor to the next tab stop.
|
||||
|
||||
<ClickLeft>
|
||||
Move the cursor to the position indicated by the mouse.
|
||||
|
||||
DELETE FUNCTIONS:
|
||||
<Del>, <CtrlG>
|
||||
Delete character at cursor.
|
||||
|
||||
<Bksp>, <CtrlH>, <CtrlBksp>
|
||||
Delete character to left of cursor.
|
||||
|
||||
<CtrlY>
|
||||
Delete current line.
|
||||
|
||||
<CtrlQ><Y>
|
||||
Delete from cursor to end of line.
|
||||
|
||||
<CtrlT>
|
||||
Delete word to right of cursor.
|
||||
|
||||
NEW LINE:
|
||||
<Enter>, <CtrlM>
|
||||
Start a new line.
|
||||
|
||||
<CtrlN>
|
||||
Split the current line at the cursor.
|
||||
|
||||
DEFAULT CONTROLS:
|
||||
<CtrlP>
|
||||
Insert control character. For example, to insert a ^G, you
|
||||
would enter <CtrlP><CtrlG>.
|
||||
|
||||
<Ins>
|
||||
Toggle insert mode on and off. Fat cursor indicates insert
|
||||
mode; thin cursor indicates overtype mode.
|
||||
|
||||
<CtrlO><I>
|
||||
|
||||
Toggle auto-indent mode. In auto-indent mode, pressing
|
||||
<Enter> in insert mode causes the new line to have the same
|
||||
indentation as the previous line. Auto-indent also affects
|
||||
the way that text is formatted when word wrap occurs.
|
||||
|
||||
<CtrlB>
|
||||
Reformat the current paragraph. Use with caution.
|
||||
|
||||
<AltR>
|
||||
Reformat the entire field. Use this command with caution.
|
||||
|
||||
<CtrlQ><L>
|
||||
Restore original contents of the line and continue editing.
|
||||
|
||||
SAVE COMMANDS:
|
||||
<Esc>, <CtrlBreak>, <ClickRight>, <CtrlK><Q>,
|
||||
<AltF2>
|
||||
Quit editing and abandon changes (With Question).
|
||||
|
||||
<F2>, <CtrlK><S>
|
||||
Save the data, but continue editing.
|
||||
|
||||
<CtrlF2>, <CtrlK><X>, <CtrlK><D>, <AltX>
|
||||
Save the data (if modified), and quit editing.
|
||||
|
||||
BLOCK COMMANDS:
|
||||
<CtrlK><B>, <F7> <CtrlK><K>, <F8>
|
||||
Begin a block mark. End a block mark.
|
||||
|
||||
<CtrlK><C> <CtrlK><V>
|
||||
Copy a marked block. Move a marked block.
|
||||
|
||||
<CtrlK><Y> <F5>
|
||||
Delete a marked block. Delete Contents of Entire field.
|
||||
|
||||
<CtrlK><U> <CtrlK><P>
|
||||
Put marked block in buffer. Copy cUt buffer to Fieeld.
|
||||
Allows moving data between records.
|
||||
|
||||
<CtrlK><W>
|
||||
Write the Marked Block to the selected file name.
|
||||
|
||||
<CtrlK><R>
|
||||
Read the selected file name into the edit field. You can
|
||||
popup a file list and use a point and shoot select
|
||||
|
||||
|
||||
SEARCH COMMANDS:
|
||||
<CtrlQ><CtrlF>
|
||||
Pops up a window for you to enter a string of text to search for.
|
||||
The string remains valid across all records until it is changed with
|
||||
another search function.
|
||||
|
||||
<CtrlQ><CtrlA>
|
||||
Pops up a window for you to enter a string of text to search for,
|
||||
then pops up a window for you to enter a string of text to replace
|
||||
the search string with. You will be asked to confirm the
|
||||
replacement. The strings remain valid across all records until it
|
||||
is changed with another search function.
|
||||
|
||||
<CtrlL>
|
||||
Repeats the last Search(/Replace) function without going through the
|
||||
exercise of entering new strings.
|
||||
|
||||
MISCELLANEOUS COMMANDS:
|
||||
|
||||
<F1>, <ClickBoth>
|
||||
Help. This command invokes the help routine for this topic
|
||||
if it exists. Otherwise it does nothing.
|
||||
|
||||
<F6>
|
||||
Pops up a key edit window to allow chaging all of the editor key
|
||||
assignments.
|
||||
|
||||
<AltE>
|
||||
Creates a "SET AUTOCON=<configuration name>" command for the
|
||||
Autoexec field. If each Autoexec has the correct one, the name of
|
||||
the boot configuration will be in the environment.
|
||||
|
||||
<AltF6>, <AltF7>, <AltF8>
|
||||
Changes the keys assigned to change the colors used in the editor.
|
||||
BIN
Linux-0.95/INSTALL/autocn/MENU.CTL
Normal file
BIN
Linux-0.95/INSTALL/autocn/MENU.CTL
Normal file
Binary file not shown.
BIN
Linux-0.95/INSTALL/autocn/MENUNUM.COM
Normal file
BIN
Linux-0.95/INSTALL/autocn/MENUNUM.COM
Normal file
Binary file not shown.
94
Linux-0.95/INSTALL/autocn/REGISTER.PRN
Normal file
94
Linux-0.95/INSTALL/autocn/REGISTER.PRN
Normal file
@@ -0,0 +1,94 @@
|
||||
------------------- REGISTRATION ----------------------
|
||||
|
||||
Please support AutoCon!
|
||||
Thank you for your support.
|
||||
|
||||
Remit To: Larry Weaver
|
||||
P.O. Box 2639
|
||||
Weaverville CA 96093-2639
|
||||
|
||||
---------------------------
|
||||
|
||||
You must check one registration option, and one disk option!
|
||||
|
||||
---------------------------
|
||||
_
|
||||
|_| AutoCon Standard registration ($15.00 -- no disk sent) $______
|
||||
_
|
||||
|_| AutoCon Site License and Registration (no disk sent)
|
||||
$120.00 for the first 100 (or fewer) users or machines
|
||||
100.00 for each additional 100 (or fewer) users or machines $______
|
||||
|
||||
---------------------------
|
||||
_
|
||||
|_| AutoCon Upgrade to the newest version ($8.00; $10.00 foreign) $______
|
||||
Registered users only
|
||||
_
|
||||
|_| Subscription plan for REGISTERED users ($21.00; $26.00 foreign) $______
|
||||
(Receive the next three updates of AutoCon, as they
|
||||
become available. This fee is in addition to the
|
||||
$15.00 or $120.00 registration.)
|
||||
|
||||
---------------------------
|
||||
_
|
||||
|_| Printed Manual ($8.00) $______
|
||||
If you desire, I will print out the AUTOCON.DOC file and
|
||||
send it to you. You can achieve the same results by printing
|
||||
it out yourself, but several people seem to want this.
|
||||
|
||||
---------------------------
|
||||
|
||||
"Foreign" means outside the USA and Canada; the extra charge covers postage.
|
||||
_ _
|
||||
Payment by: |_| Check or |_| Money Order enclosed.
|
||||
|
||||
TOTAL in USA Funds. $______
|
||||
Foreign checks are acceptable if they have the US Federal Reserve
|
||||
Routing Number on them, use the current exchange rate.
|
||||
_ _
|
||||
Disk Type: |_| 5 1/4" (normally sent); |_| 3 1/2" required
|
||||
|
||||
Name ___________________________________________________________________
|
||||
|
||||
Address ___________________________________________________________________
|
||||
|
||||
___________________________________________________________________
|
||||
|
||||
___________________________________________________________________
|
||||
|
||||
|
||||
Day Phone: _________________________ Eve: ______________________
|
||||
|
||||
Compuserve ID: _____________________
|
||||
|
||||
_
|
||||
Invoice Required |_| P. O. Number: ______________________
|
||||
|
||||
------------------------ User comments -------------------------
|
||||
I acquired AutoCon V2.0g from
|
||||
[ ] - Friend [ ] - Software product
|
||||
[ ] - Computer Club [ ] - Computer Store
|
||||
[ ] - Data Base Service [ ] - Support BBS
|
||||
[ ] - Electronic BBS - Please give phone no. _____________
|
||||
[ ] - Other (please specify) ___________________________
|
||||
|
||||
I would also appreciate any input you would care to provide
|
||||
concerning AutoCon. If you have any ideas or comments which would
|
||||
make AutoCon a better program, please let me know.
|
||||
|
||||
I value your comments!
|
||||
|
||||
Comments and/or suggestions:
|
||||
________________________________________________________________
|
||||
|
||||
________________________________________________________________
|
||||
|
||||
________________________________________________________________
|
||||
|
||||
________________________________________________________________
|
||||
|
||||
________________________________________________________________
|
||||
|
||||
________________________________________________________________
|
||||
|
||||
________________________________________________________________
|
||||
441
Linux-0.95/INSTALL/autocn/WHATSNEW
Normal file
441
Linux-0.95/INSTALL/autocn/WHATSNEW
Normal file
@@ -0,0 +1,441 @@
|
||||
Version 2.0g
|
||||
I still had complaints about people seeing Echo Off in the Autoexec
|
||||
Bat file, so now if you have a DOS higher than 3.2, it will start
|
||||
with @Echo off.
|
||||
|
||||
If you are using DOS 5.0, A DOS=HIGH,NOUMB line will be appended to
|
||||
the bottom of the Autoexec.bat file, and you will have to put a
|
||||
DOS=LOW (and/ or a DOS=UMB) in the configurations you need them in.
|
||||
Menu.Ctl will control the flags.
|
||||
|
||||
If you are using DRDOS, Menu.Ctl will now work with it as well as
|
||||
MSDOS.
|
||||
|
||||
I've changed the way I load configurations, so you will be able to
|
||||
run AutoCon with less memory, and there is no longer a 6K or 2K
|
||||
limit on the Autoexec and Config fields.
|
||||
|
||||
Each configuration now has the names of the files that the field is
|
||||
written to. (I've had several requests for this one.)
|
||||
|
||||
The help screen colors are now installable.
|
||||
|
||||
The MENU.CTL interface has been rewritten to show up more distinctly
|
||||
when booting. I had several complaints that it was easy to miss.
|
||||
It will now put up some distinctive boxex, and show up in color if
|
||||
you have a color monitor. The colors are installable from AutoCon.
|
||||
|
||||
Each configuration now has the names of the files that the field is written
|
||||
to. (I've had several requests for this one.)
|
||||
|
||||
You can tell AutoCon not to restore the screen on exit (eliminates the
|
||||
need for AutoConx.exe.
|
||||
|
||||
|
||||
Version 2.0e (mainly bug fix)
|
||||
In Single mode if the Enviornment name wasn't set (AltE in the
|
||||
editor) AutoCon could get the wrong cache 'Flush' information. This
|
||||
is fixed, but I highly reccommend setting the Autocon Environment
|
||||
variable if you are using Single mode.
|
||||
|
||||
If an external editor were being used, and the Autocon or Config
|
||||
field size got too large, the AutoCon.Dat file could get messed up -
|
||||
fixed.
|
||||
|
||||
Several people have complained that 4K and 2K is not large enough
|
||||
for the Autoexec and Config fields, so I'm pushing the size up to 6K
|
||||
and 4K. Please note that this adds 4K/configuration to AutoCon's
|
||||
memory requirements.
|
||||
|
||||
There are two extra EXE files on the BBS. AutoCons.exe will still
|
||||
use 4K and 2K for those needing the smaller memory requirements.
|
||||
|
||||
AutoConx.exe will not restore the screen when it exits. Try this if
|
||||
you lose the cursor or the screen blanks out when you exit (I've had
|
||||
two complaints about this).
|
||||
|
||||
Version 2.0d (bug fix)
|
||||
If AutoCon followed an "ECHO OFF" and a "CLS" statement in a batch
|
||||
file, the screen could get slightly messed up - fixed.
|
||||
|
||||
Version 2.0c (bug fix)
|
||||
The user modified colors were getting lost if a reboot was performed
|
||||
from the command line - fixed.
|
||||
|
||||
Version 2.0b (bug fix)
|
||||
|
||||
MENU.CTL had a problem with the name of the eighth configuration,
|
||||
which is now fixed. It also had a tendency to leave menu choice 2
|
||||
in the hi-lite mode, also fixed.
|
||||
|
||||
Several people complained about seeing the Errorlevel statements in
|
||||
the AUTOEXEC.BAT during the boot process. AUTOEXEC.BAT files will
|
||||
now start with ECHO OFF as the first statement if you choose the
|
||||
MENU.CTL option.
|
||||
|
||||
Version 2.0 would allow you to choose more than the eight default
|
||||
configurations. This is no longer allowed.
|
||||
|
||||
Version 2.0 had a problem writing the AUTOEXEC.BAT file for the Menu
|
||||
mode if the Autoexec fields didn't end in a Carriage Return. This
|
||||
is now fixed.
|
||||
|
||||
|
||||
Version 2.0
|
||||
|
||||
|
||||
I'm jumping the version number from 1.4 to 2.0 for this release.
|
||||
The reason is that AutoCon's capability has changed so much in this
|
||||
release that I think it warrants a Major revision number change.
|
||||
|
||||
The major change is the inclusion of two new files. These are
|
||||
MENU.CTL and MENUNUM.COM. Menu.Ctl is a device driver that can
|
||||
disable commands in the CONFIG.SYS file. MenuNum.Com is a file that
|
||||
will ask the portion of Menu.Ctl that stays resident which
|
||||
configuration was chosen, and set the DOS ERRORLEVEL to that number.
|
||||
This allows setting up menu choices in the AUTOEXEC.BAT file to
|
||||
match the choice made from the CONFIG.SYS file. Together these two
|
||||
files allow you to choose a system configuration from a menu of
|
||||
configurations during the boot process itself.
|
||||
|
||||
AutoCon will handle all of the interface details to these two
|
||||
commands for you, and allow you to return to a "Normal" system
|
||||
configuration in just a couple of keystrokes. This will allow you
|
||||
to run programs like "Optimize" from Quarterdeck.
|
||||
|
||||
|
||||
There is a pull-down menu system available on the main screen. Each
|
||||
item on the menu has a context sensitive help entry. This should
|
||||
make it very easy to get AutoCon up and running the first time, and
|
||||
allow you to look up those commands you can't remember the
|
||||
keystrokes for.
|
||||
|
||||
|
||||
There are two new command line options. If you enter
|
||||
|
||||
AutoCon /<return>
|
||||
|
||||
on the command line, a window of your configurations will pop up
|
||||
asking you to choose which configuration you wish to use to reboot
|
||||
the system. This is equivalent to the "AutoCon <configuraion name>,
|
||||
except that AutoCon lets you choose the name from a pick list.
|
||||
|
||||
The second new command is
|
||||
|
||||
AutoCon /@<configuration name>
|
||||
|
||||
where <configuration name> is the name shown on the main screen for
|
||||
each configuration. If the name matches the configuration that was
|
||||
used for the boot process, the DOS errorlevel will be set to 1. It
|
||||
will be set to 0 otherwise. For this function to work correctly,
|
||||
you need to boot up with Menu.Ctl, or assure that each Autoexec
|
||||
field has the correct name assigned with a SET command. See the new
|
||||
"Put Name in Environment" editor function defined below.
|
||||
|
||||
|
||||
The internal editor has a few new capabilities. In order to access
|
||||
most them you will have to edit your keystrokes (using the F6 key).
|
||||
The block operations are no longer constrained to full lines. The
|
||||
default keys for reformating were removed. You may reassign them.
|
||||
|
||||
"Search Function" (default assigned to ^Q^F) allows you to search
|
||||
the text for a specified string of text. The string is active for
|
||||
the entire AutoCon session, and will be the same across records.
|
||||
|
||||
"Search/Replace Function" (default assigned to ^Q^A) allows you to
|
||||
search the text for a specified string of text, and relpace it
|
||||
with another string of text. You will be asked to confirm the
|
||||
replacement.
|
||||
|
||||
"Repeat Search Function" (default assigned to ^L) This will
|
||||
repeat the last Search, or Search/Replace that was performed. The
|
||||
informations is retained during the AutoCon session, and will be
|
||||
the same across records.
|
||||
|
||||
"Install Editor Keys" (default assigned to F6) allows you to
|
||||
change the editor keys during an edit session.
|
||||
|
||||
"Put Name in Environment" (default assigned to AltE) will put a
|
||||
SET command in your edit field. This will guarantee that the
|
||||
configuration you are editing has its name placed correctly in the
|
||||
environment. AutoCon will use this name for various command line
|
||||
functions.
|
||||
|
||||
"Change (Text - AltF6, Block - AltF7, Control Char - AltF8)
|
||||
Attribute" will allow you to change the keys that call up the
|
||||
editor color installation windows.
|
||||
|
||||
"View Last Dos Screen" (default assigned to AltV) allows you to
|
||||
see the DOS screen as it was when AutoCOn was started. Could be
|
||||
useful if the reason your changing a configuration is shown there.
|
||||
|
||||
|
||||
By March 1, 1991 I will have a support BBS in place operating 24
|
||||
hours a day. The number will be (916) 623 4455.
|
||||
|
||||
|
||||
Version 1.4
|
||||
|
||||
One of the WhatsNews has to do with me, I am now a member of the ASP
|
||||
(Association of ShareWare Professionals). The rest of the WhatsNews
|
||||
all concern changes (and additions) to the program.
|
||||
|
||||
You now have the option to use the built in editor to edit the
|
||||
Autoexec and Config fields, or to install an external editor to do
|
||||
the job. <CtrlF6> will pop up a window for you to enter an external
|
||||
editor's file name. The Path will be checked for the entered file
|
||||
name, and if found, it will be used to edit the Autoexec and Config
|
||||
fields in the future. For more info, see the "Installing External
|
||||
Editor" section of AUTOCON.DOC.
|
||||
|
||||
From the command line, typing <AUTOCON /=> will check the Autoexec
|
||||
and Config fields of the current configuration record against the
|
||||
file contents of the current Configuration files (usually
|
||||
C:\AUTOEXEC.BAT and C:\CONFIG.SYS). The results of the comparison
|
||||
will be shown on the screen. SPECIAL NOTE! - the configuration will
|
||||
need to have been saved with the 1.4 version of AUTOCON.
|
||||
|
||||
From the command line, typing <AUTOCON /*> will update the Autoexec
|
||||
and Config fields of the current configuration record from the file
|
||||
contents of the current Configuration files (usually C:\AUTOEXEC.BAT
|
||||
and C:\CONFIG.SYS). You might want to be a little careful with this
|
||||
one.
|
||||
|
||||
The internal editor has a few new capabilities. In order to access
|
||||
them, you will probably have to edit your keystrokes (using the <F6>
|
||||
key). The new commands are "Split Line", "Cut the marked block",
|
||||
and "Paste the last Cut block". These commands will be a little
|
||||
more convenient than the current "Write marked block" and "Read
|
||||
marked block" file commands.
|
||||
|
||||
"Split Line" (default assigned to <CtrlN> key) splits the current
|
||||
line at the cursor, leaving the cursor where it is, and moving the
|
||||
rest of the line down to the next line.
|
||||
|
||||
"Cut the marked block" (default assigned to <CtrlK> <U> key
|
||||
combination) will put the current marked block into a text buffer.
|
||||
"Paste the last Cut block" (default assigned to <CtrlK> <P> key
|
||||
combination) will paste the contents of the cut buffer to the
|
||||
current cursor location. This command can be used to move the
|
||||
data in the same record, or across records. After a cUt, the data
|
||||
will stay in the buffer until a new cUt is performed, or AUTOCON
|
||||
is exited.
|
||||
|
||||
Formerly the editor only recognized a ' ' (space) as a word mark
|
||||
(for <CtrlF>, <CtrlA>, <CtrlRarw>, etc.). This has been enhanced
|
||||
to also recognize the following characters as word marks :
|
||||
'/', ';', and '='.
|
||||
|
||||
Line length was increased to 254 for those long path names (and
|
||||
any other long lines needed). This necessitated removing the
|
||||
word-wrap capability while editing the Autoexec and Config
|
||||
fields (I don't think this will be a hardship, you probably don't
|
||||
want to word-wrap the lines in your Autoexec and Config files
|
||||
anyway). Word-wrap is still used in the Notes field, but please
|
||||
don't enter a line longer than 127 characters in there.
|
||||
|
||||
|
||||
A couple of functions were also added to the Interactive Mode.
|
||||
|
||||
<AltC> will pop-up a pick list of the current configuration
|
||||
records, and allow you to select one. The contents of the
|
||||
Autoexec and Config fields of the selected configuration record
|
||||
will be copied to the current configuration record. Be careful
|
||||
with this one, there is NO "Undo" command. You can always
|
||||
use ESC to get out of the pick list without doing a copy.
|
||||
|
||||
<AltV> will now show the Dos screen as it was when Autocon was
|
||||
started.
|
||||
|
||||
<Alt=> will check the Autoexec and Config fields of the current
|
||||
configuration record against the contents of the current
|
||||
configuration files (C:\AUTOEXEC.BAT and C:\CONFIG.SYS, unless you
|
||||
have changed them with <F8> or <F9> keys). SPECIAL NOTE! - the
|
||||
configuration will need to have been saved with the 1.4 version of
|
||||
AUTOCON.
|
||||
|
||||
All of the color changes now show up instantly (you previously had
|
||||
to wait till the next time Autocon was executed to see some of the
|
||||
color changes).
|
||||
|
||||
ESC is no longer accepted as a "Yes" answer (there were a lot of
|
||||
complaints on this one). A "Yes" answer now requires a <Y> or
|
||||
<Enter> key (accept default).
|
||||
|
||||
There are a few cosmetic changes on the screens (all in response to
|
||||
comments by users). I won't take the space to list each one.
|
||||
|
||||
There are a couple more entrys on the help screen, and (I hope) the
|
||||
entries are arranged in a little more logical fashion.
|
||||
|
||||
UltraVision : Autocon is now UltraVision "Aware". Autocon will
|
||||
detect if UltraVision is installed and active. If it is, Autocon
|
||||
will use UltraVision to switch modes, and restore screens (in other
|
||||
words, Autocon won't mess up your screen).
|
||||
|
||||
Windows Problems : After spending a very unproductive day on the
|
||||
phone with Microsoft, I decided to add another boot type option to
|
||||
Autocon. Several people use Autocon to reconfigure in and out of
|
||||
Windows. When Windows is running in 386 enhanced mode, a software
|
||||
boot (usually) doesn't work. Microsoft's recommendation : "Never
|
||||
reboot while running Windows". They say that this may trash hard
|
||||
disks and worse (I'm not sure what could be "worse" than trashing a
|
||||
hard disk). I don't know about you, but I've had to reboot out of
|
||||
Windows several times. I know it's probably not a good idea, but
|
||||
there are times it should be quite safe (and times when it is forced
|
||||
upon us). Anyway, they say that is no way they are aware of to
|
||||
ensure that a software reboot will work.
|
||||
Therefore :
|
||||
|
||||
You may now select (N)one as an alternate boot type (using the
|
||||
<F5> key). If you select (N)one, Autocon will now reconfigure the
|
||||
files, but will not attempt a reboot. Now you may run Autocon
|
||||
under Windows, and after the system files are reconfigured, you
|
||||
can hit the dreaded CtrlAltDel key combination.
|
||||
|
||||
By the way, I'm not much of an artist, so if someone (out of the
|
||||
goodness of their hearts) designs a nice Icon for Autocon, I would
|
||||
appreciate them sending me a copy.
|
||||
|
||||
|
||||
A potentially nasty bug was squashed. Since I never received a
|
||||
complaint on this one, I assume that I was the only one "bit". If
|
||||
your current configuration record was the last one, and you deleted
|
||||
it, Autocon tried to find it again the next time it was started.
|
||||
This could lead to bizarre behavior (a messed up pointer for those
|
||||
technical people). If the current record number is larger than the
|
||||
max record number, it will now be adjusted (with appropriate warning
|
||||
message). It will still be pointing to the wrong record, but it
|
||||
will behave in a known fashion.
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
Version 1.3a
|
||||
|
||||
There are a few bug fixes, and a couple of enhancements in this
|
||||
version. If you used F2 to save changes in the previous versions,
|
||||
when you hit ESC to exit it would issue a warning that the changes
|
||||
were about to be lost, this has been corrected.
|
||||
|
||||
AUTOCON will now attempt to detect and restore the EGA/VGA (45/50)
|
||||
small character mode upon exit.
|
||||
|
||||
After updating the configuration with 1.3a, when AUTOCON is started
|
||||
in the interactive mode, it will default to the configuration used
|
||||
in the last update.
|
||||
|
||||
On the command line if you type <AUTOCON /?> the name of the current
|
||||
configuration will be displayed (Note: you must have saved a
|
||||
configuration with V1.3a first).
|
||||
|
||||
If you are in the full screen entry mode, hitting <F7> will update
|
||||
the Autoexec and Config fields in the current record from the
|
||||
current AUTOEXEC.BAT and CONFIG.SYS files. This saves going into
|
||||
each of the two fields and doing a <F5> <^KR> <AltX>.
|
||||
|
||||
From the command line, typing AUTOCON followed by a / and the name
|
||||
of a configuration (e.g. <AUTOCON /NoTSRs>) will cause that
|
||||
configuration to have it's Autoexec and Config fields updated from
|
||||
the current AUTOEXEC.BAT and CONFIG.SYS files.
|
||||
|
||||
There was a bug in V1.3 that caused AUTOCON to have a problem with
|
||||
reading files that were not terminated with ^Z. If you got an
|
||||
"Edit Buffer Full" message when you tried to edit a field that you
|
||||
know wasn't too big, then you were bitten by this bug. This is
|
||||
fixed in 1.3a.
|
||||
|
||||
If you were in one of the fields and issued an <^KW> (block save)
|
||||
and didn't have a marked block, you were not given an error message
|
||||
in previous versions. This is fixed in 1.3a.
|
||||
|
||||
The help screen displayed in a color change window was the one for
|
||||
changing the editor keystrokes. This is fixed in 1.3a.
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
Version 1.3
|
||||
|
||||
There are several changes in this version. If you have added
|
||||
several extra configurations that you no longer need, the <CtrlF3>
|
||||
key will delete the current configuration (you can't delete record
|
||||
one, nor can you go below five records).
|
||||
|
||||
You can change the keystrokes used by the built in editor. Hitting
|
||||
the <F6> key in the main menu will pop up a key editor which will
|
||||
allow changing the actions of all of the control keys used in the
|
||||
editor.
|
||||
|
||||
You can change the colors used by AUTOCON. Hitting the <Alt> key in
|
||||
combination with the function keys will allow customization of most
|
||||
of the colors. The use of each key is detailed in the pop-up help.
|
||||
|
||||
The DAT file format for 1.3 is quite different than the one for 1.2.
|
||||
The white space has been eliminated, and as a consequence it is
|
||||
significantly smaller (mine are about 1/4 the previous size). The
|
||||
first time you run 1.3 it will change the format, and the DAT file
|
||||
will no longer be compatible with 1.2. You may want to make a copy
|
||||
of AUTOCON.DAT (just to be on the safe side) before running 1.3.
|
||||
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
Version 1.2d keeps current file attributes
|
||||
|
||||
A request was made to update the Autoexec and Config files, but to
|
||||
not change their current attributes (system, read only, hidden,
|
||||
etc.). Therefore AUTOCON now reads the current file attributes of
|
||||
Autoexec.Bat and Config.Sys before updating them, and restores the
|
||||
attributes after the update.
|
||||
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
Version 1.2c adds a boot type select.
|
||||
|
||||
Some computers have trouble with the warm boot that AUTOCON was
|
||||
originally configured with. These seem to mainly be machines with
|
||||
large hard disks, and a large hard disk manager. The <F5> key now
|
||||
allows you to change the boot type from warm to cold to get around
|
||||
this problem.
|
||||
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
Version 1.2a is a bug fix.
|
||||
|
||||
AUTOCON didn't recognize more than three configurations from the
|
||||
command line.
|
||||
|
||||
|
||||
Version 1.2 is a bug fix.
|
||||
|
||||
When you attempted to read in your old configuration files to the
|
||||
AUTOEXEC and CONFIG fields, it always defaulted to C:\AUTOEXEC.BAT
|
||||
an C:\CONFIG.SYS no matter what files you had selected. The read
|
||||
file option now works correctly.
|
||||
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
Version 1.1 charges are as follows.
|
||||
|
||||
1. AUTOCON now does a Reboot when a reconfiguration is done from the
|
||||
command line.
|
||||
|
||||
2. AUTOCON now handles up to 50 configurations (originally only 5).
|
||||
|
||||
3. You can now read any file into an AUTOEXEC or CONFIG edit field
|
||||
(allows you to use your old configurations).
|
||||
|
||||
4. The On-line Help has been updated/enhanced.
|
||||
|
||||
5. The Doc file has been enhanced (left out a few things the first
|
||||
time).
|
||||
|
||||
6. Allows you the choice of a Reboot when reconfiguring in the data
|
||||
entry mode.
|
||||
|
||||
7. Hopefully a better choice of colors on an LCD screen. If you have
|
||||
an LCD, you need to have your mode set to BW80 (2).
|
||||
|
||||
|
||||
BIN
Linux-0.95/INSTALL/autocn2g.zip
Normal file
BIN
Linux-0.95/INSTALL/autocn2g.zip
Normal file
Binary file not shown.
BIN
Linux-0.95/INSTALL/bootlin4.zip
Normal file
BIN
Linux-0.95/INSTALL/bootlin4.zip
Normal file
Binary file not shown.
BIN
Linux-0.95/INSTALL/clock.tar.Z
Normal file
BIN
Linux-0.95/INSTALL/clock.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/INSTALL/pboot.exe
Normal file
BIN
Linux-0.95/INSTALL/pboot.exe
Normal file
Binary file not shown.
BIN
Linux-0.95/INSTALL/pboot.zip
Normal file
BIN
Linux-0.95/INSTALL/pboot.zip
Normal file
Binary file not shown.
3
Linux-0.95/INSTALL/pfdisk/MAKE_TCC.BAT
Normal file
3
Linux-0.95/INSTALL/pfdisk/MAKE_TCC.BAT
Normal file
@@ -0,0 +1,3 @@
|
||||
@echo This batch file uses Turbo C to build pfdisk.exe
|
||||
@echo Note that only SMALL model has been tested...
|
||||
tcc -v- -epfdisk.exe pfdiskaz.c syscodes.c s_msdos.c
|
||||
264
Linux-0.95/INSTALL/pfdisk/PFDISK.DOC
Normal file
264
Linux-0.95/INSTALL/pfdisk/PFDISK.DOC
Normal file
@@ -0,0 +1,264 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PFDISK(8) MAINTENANCE COMMANDS PFDISK(8)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
NAME
|
||||
pfdisk - partition fixed disk
|
||||
|
||||
SYNOPSIS
|
||||
pfdisk device
|
||||
|
||||
DESCRIPTION
|
||||
pfdisk partitions the fixed disk identified as device into (at
|
||||
most) four parts, each of which may be independently loaded with
|
||||
an operating system. The actual name of device depends on the
|
||||
operating system in use. For ESIX (System V/386) the device
|
||||
name is either "/dev/rdsk/0s0" or "/dev/rdsk/1s0". For Minix,
|
||||
it is "/dev/hd0" or "/dev/hd5". For MS-DOS it is a single digit
|
||||
(zero or one).
|
||||
|
||||
pfdisk reads the hard disk partition table from block zero of
|
||||
device into memory and allows the user to examine, modify, or
|
||||
save the partition table. A regular file may be used instead of
|
||||
a real device for testing purposes, though the device geometry
|
||||
must be specified manually, and some systems will requrire a
|
||||
file-name argument with the "R" and "W" commands (DOS, ESIX).
|
||||
|
||||
The partition table on device is NOT modified unless the write
|
||||
command (W) is used with no argument.
|
||||
|
||||
USAGE
|
||||
Commands
|
||||
All pfdisk commands consist of a command word followed by
|
||||
optional blank-separated command arguments. Note that only the
|
||||
first letter of a command word is significant (except for "wq"
|
||||
and "q!"). All command letters are accepted in either upper or
|
||||
lower case. Numeric arguments are specified using C syntax.
|
||||
Extra arguments are silently ignored.
|
||||
|
||||
The commands are:
|
||||
|
||||
? Prints a command summary (help).
|
||||
|
||||
1 sys_id first last sys_name
|
||||
Set the partition table entry for part one, using:
|
||||
sys_id as its system ID code, first as the lowest num-
|
||||
bered cylinder it uses, last as the highest numbered
|
||||
cylinder it uses, and sys_name (optional) as the system
|
||||
name (in the menu name table).
|
||||
|
||||
2|3|4 sys-id first last sys-name
|
||||
Similar to 1 but sets partition two, three, or four,
|
||||
respectively.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Release 1.3 Last change: Oct 1990 1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PFDISK(8) MAINTENANCE COMMANDS PFDISK(8)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
A number
|
||||
Mark partition number as active (so it will be used for
|
||||
booting). If number is zero, no partition will be
|
||||
active.
|
||||
|
||||
G cylinders heads sectors
|
||||
Inform pfdisk what the geometry of the device is.
|
||||
|
||||
I Print a summary of the known ID codes.
|
||||
|
||||
L List the partition table. See Output Format below.
|
||||
|
||||
Q Quit without saving. If the memory copy of the parti-
|
||||
tion table was modified, a warning will be issued and
|
||||
the command ignored.
|
||||
|
||||
Q! Quit, even if the memory copy of the partition table was
|
||||
not saved.
|
||||
|
||||
R file-name
|
||||
Read boot sector from file-name (if given) otherwise
|
||||
read from device.
|
||||
|
||||
W file-name
|
||||
Write boot sector to file-name. (if given) otherwise
|
||||
write to device.
|
||||
|
||||
WQ Same as "write" followed by "quit".
|
||||
|
||||
# This line is a comment (to be ignored).
|
||||
|
||||
Output Format
|
||||
Here is a sample of the output from the L command:
|
||||
|
||||
# Partition table on device: /dev/rdsk/0s0
|
||||
geometry 1222 15 34 (cyls heads sectors)
|
||||
# ID First(cyl) Last(cyl) Name # start, length (sectors)
|
||||
1 4 0 127 MS-LOSS # 34, 65246
|
||||
2 129 128 255 Minix # 65280, 65280
|
||||
3 0 0 0 # 0, 0
|
||||
4 99 256 1220 ESIX # 130560, 492150
|
||||
# note: last(4): phys=(1023,14,34) logical=(1220,14,34)
|
||||
active: 4
|
||||
|
||||
This output format is carefully constructed so that it may be
|
||||
saved in a file (by redirecting standard output) and later used
|
||||
as input (by redirecting standard input). On a UNIX system, one
|
||||
can save this output using the command:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Release 1.3 Last change: Oct 1990 2
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PFDISK(8) MAINTENANCE COMMANDS PFDISK(8)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
(echo L) | pfdisk device-name > save-file
|
||||
|
||||
save-file is a complete record of the partition table. On a
|
||||
UNIX system, one could use save-file to re-initialize the parti-
|
||||
tion table using the command:
|
||||
|
||||
(cat save-file ; echo wq) | pfdisk device-name
|
||||
|
||||
Consistency of each partition table entry is checked while the
|
||||
table is listed. Any inconsistencies discovered are reported in
|
||||
a commentary note as shown above.
|
||||
|
||||
Physical vs. Logical
|
||||
Each partition table entry has both "physical" and a "logical"
|
||||
fields. The physical fields specify the lowest and highest
|
||||
cylinder,head,sector combinations to be used in that partition.
|
||||
The logical start field has the total number of sectors which
|
||||
precede this partition, and the logical length field has the
|
||||
total number of sectors contained in this partition. These
|
||||
fields should be self consistent unless the disk has more than
|
||||
1024 cylinders.
|
||||
|
||||
The physical cylinder fields are only ten-bits wide so the con-
|
||||
tents are limited to 1023. The logical sector fields are 32 bits
|
||||
wide and always show the true logical beginning and length of
|
||||
the partition. Generally, the physical start field is used only
|
||||
to locate the secondary boot sector, and the logical start and
|
||||
length fields are used to actually delimit the partition used by
|
||||
a particular system.
|
||||
|
||||
Partition Names
|
||||
The Name field in the partition table is treated specially if
|
||||
the bootmenu program is installed in the primary boot sector.
|
||||
(See the file bootmenu.doc for more information.) pfdisk can
|
||||
recognize the name table used by bootmenu and will show the
|
||||
actual names present in that name table. If any other boot pro-
|
||||
gram is used then the Name field reflects the result of a
|
||||
table-lookup of the system ID.
|
||||
|
||||
If you provide a name when setting any partition entry, the
|
||||
boot-sector is marked as using a name table, so that on subse-
|
||||
quent uses of pfdisk you will see the partition names you have
|
||||
specified.
|
||||
|
||||
Boot program replacement
|
||||
You can replace the boot program in your boot sector without
|
||||
affecting the partition table by using pfdisk as follows.
|
||||
First, (as always) save a copy of the current boot sector (on a
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Release 1.3 Last change: Oct 1990 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PFDISK(8) MAINTENANCE COMMANDS PFDISK(8)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
floppy) using the "W file" command. Then, use the "R file" com-
|
||||
mand to read the new boot program. If the boot program read in
|
||||
is less than 446 bytes long, the partition table will be
|
||||
unchanged.
|
||||
|
||||
Unlike the DOS or UNIX fdisk programs, pfdisk has NO boot pro-
|
||||
gram compiled into its executable image. If you wish to use
|
||||
pfdisk to partition a newly formatted hard disk, you must have a
|
||||
boot program image available to read in using the "r file" com-
|
||||
mand. Two boot programs, "bootmenu.bin" and "bootauto.bin" are
|
||||
distributed with pfdisk and should be found with its source
|
||||
files. See the file bootmenu.doc for further information about
|
||||
these boot programs.
|
||||
|
||||
AUTHOR
|
||||
Gordon W. Ross
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Release 1.3 Last change: Oct 1990 4
|
||||
|
||||
BIN
Linux-0.95/INSTALL/pfdisk/PFDISK.EXE
Normal file
BIN
Linux-0.95/INSTALL/pfdisk/PFDISK.EXE
Normal file
Binary file not shown.
605
Linux-0.95/INSTALL/pfdisk/PFDISKAZ.C
Normal file
605
Linux-0.95/INSTALL/pfdisk/PFDISKAZ.C
Normal file
@@ -0,0 +1,605 @@
|
||||
/*
|
||||
* pfdisk - Partition a Fixed DISK
|
||||
* by Gordon W. Ross, Jan. 1990
|
||||
*
|
||||
* See the file "pfdisk.doc" for user instructions.
|
||||
*
|
||||
* This program uses a simple, line-oriented interpreter,
|
||||
* designed for both interactive and non-interactive use.
|
||||
* To facilitate non-interactive use, the output from the
|
||||
* 'L' (list partitions) command is carefully arranged so it
|
||||
* can be used directly as command input. Neat trick, eh?
|
||||
*/
|
||||
|
||||
char *versionString =
|
||||
"# pfdisk version 1.2.1 by Gordon W. Ross Aug. 1990\nModified by S. Lubkin Oct. 1991\n";
|
||||
|
||||
/* These don't really matter. The user is asked to set them. */
|
||||
#define DEFAULT_CYLS 306
|
||||
#define DEFAULT_HEADS 4
|
||||
#define DEFAULT_SECTORS 17
|
||||
#define PROMPT_STRING "pfdisk> "
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include "sysdep.h"
|
||||
#include "syscodes.h"
|
||||
|
||||
typedef unsigned char uchar;
|
||||
typedef unsigned int uint;
|
||||
typedef unsigned long ulong;
|
||||
|
||||
struct part { /* An entry in the partition table */
|
||||
uchar active; /* active flag (0x80 or 0) */
|
||||
uchar b_head; /* begin head */
|
||||
uchar b_sec; /* sector */
|
||||
uchar b_cyl; /* cylinder */
|
||||
uchar sysid; /* system id (see sysid.c) */
|
||||
uchar e_head; /* end head */
|
||||
uchar e_sec; /* end sector */
|
||||
uchar e_cyl; /* end cylinder */
|
||||
/* These two are just longs, but this way is machine independent. */
|
||||
/* uchar lsBeg[4]; /* logical sectors, beginning Saul */
|
||||
ulong lsBeg; /* logical sectors, beginning Saul */
|
||||
/* uchar lsLen[4]; /* logical sectors, length Saul */
|
||||
ulong lsLen; /* logical sectors, length Saul */
|
||||
};
|
||||
|
||||
#define LOC_PT 0x1BE
|
||||
#define LOC_NT 0x1AA /* Saul */
|
||||
/* #define LOC_NT 0x180 Saul */
|
||||
/* #define LOC_GWR 0x1A0 Saul */
|
||||
#define LOC_GWR 0x1A9 /* Saul */
|
||||
#define MAGIC_LOC 0x1FE
|
||||
#define MAGIC_0 0x55
|
||||
#define MAGIC_1 0xAA
|
||||
#define MAX_LINE 80
|
||||
#define NT_ENTRY_SIZE 5 /* Saul */
|
||||
/* Note: Entry in "printf" command, should be manually changed, to
|
||||
"%-NT_ENTRY_SIZE.NT_ENTRY_SIZEs" Saul */
|
||||
/* And header printf line should have blanks adjusted Saul */
|
||||
|
||||
char s[22]; /* For holding error string */
|
||||
char buffer[SECSIZE]; /* The boot block buffer */
|
||||
int bufmod=0; /* buffer modified... */
|
||||
/* (zero means buffer is unmodified) */
|
||||
int useNTable; /* boot sector uses name table */
|
||||
|
||||
/* device parameters (force someone to set them!) */
|
||||
unsigned cyls = DEFAULT_CYLS;
|
||||
unsigned heads = DEFAULT_HEADS;
|
||||
unsigned sectors = DEFAULT_SECTORS;
|
||||
|
||||
char *devname; /* device name */
|
||||
char cmdline[MAX_LINE];
|
||||
char filename[80]; /* used by r/w commands */
|
||||
char *prompt; /* null if no tty input */
|
||||
|
||||
/* Some of these strings are used in more than one place.
|
||||
* For consistency, I put a newline on all of them.
|
||||
*/
|
||||
char h_h[] = "? <enter> : Help summary\n";
|
||||
char h_l[] = "L : List partition table\n";
|
||||
char h_1[] = "1 id first last [name]: set partition 1\n";
|
||||
char h_2[] = "2,3,4 ... (like 1) : set respective partition\n";
|
||||
char h_a[] = "A n [m, ...] : Activate partition(s) n [m, ...]\n";
|
||||
char h_g[] = "G cyls heads sectors : set disk Geometry\n";
|
||||
char h_i[] = "I : list known ID numbers\n";
|
||||
char h_r[] = "R [optional-file] : Read device (or specified file)\n";
|
||||
char h_w[] = "W [optional-file] : Write device (or specified file)\n";
|
||||
char h_q[] = "Q[!] : Quit (! means force)\n";
|
||||
|
||||
char * helpTable[] = {
|
||||
h_h, h_l, h_1, h_2, h_a, h_g, h_i, h_r, h_w, h_q,
|
||||
"# (All command letters have lower-case equivalents.)\n",
|
||||
(char *) 0 }; /* This MUST have a zero as the last element */
|
||||
|
||||
char *BadArg="Error: bad argument: %s\n";
|
||||
char *WarnNotSaved =
|
||||
"Warning, modified partition table not saved.\n";
|
||||
|
||||
help()
|
||||
{
|
||||
char ** p;
|
||||
for (p = helpTable; *p; p++)
|
||||
printf(*p);
|
||||
}
|
||||
|
||||
/* forward declarations */
|
||||
void checkValidity();
|
||||
char * setPartition();
|
||||
char * makeActive();
|
||||
char * setGeometry();
|
||||
ulong chs2long();
|
||||
char * nameID();
|
||||
int printIDs();
|
||||
|
||||
main(argc,argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
char *cmdp; /* points to command word */
|
||||
char *argp; /* points to command args */
|
||||
|
||||
/* check command line args (device name) */
|
||||
if (argc != 2) {
|
||||
usage(argv[0]); /* See s-sysname.c */
|
||||
exit(1);
|
||||
}
|
||||
devname = argv[1];
|
||||
|
||||
/* Should we prompt? */
|
||||
prompt = (isatty(fileno(stdin))) ? PROMPT_STRING : (char *) 0;
|
||||
|
||||
/* Print version name. */
|
||||
fputs(versionString, stderr);
|
||||
|
||||
/* get disk parameters */
|
||||
getGeometry(devname,&cyls,&heads,§ors);
|
||||
|
||||
/* Get the boot block. */
|
||||
if (getBBlk(devname, buffer) < 0)
|
||||
fprintf(stderr,"%s: read failed\n", devname);
|
||||
checkValidity();
|
||||
|
||||
if (prompt) fprintf(stderr,"For help, enter: '?'\n");
|
||||
|
||||
|
||||
/* Read and process commands a line at a time. */
|
||||
while (1) {
|
||||
if (prompt) fputs(prompt,stdout);
|
||||
if (! fgets(cmdline, MAX_LINE, stdin)) break;
|
||||
|
||||
/* Find beginning of command word */
|
||||
cmdp = cmdline;
|
||||
while (isspace(*cmdp)) cmdp++;
|
||||
|
||||
/* find beginning of args */
|
||||
argp = cmdp;
|
||||
while (*argp && !isspace(*argp)) argp++;
|
||||
while (isspace(*argp) || *argp=='=') argp++;
|
||||
|
||||
switch (*cmdp) {
|
||||
|
||||
case '\0': /* blank line */
|
||||
case '#': /* line comment */
|
||||
break;
|
||||
|
||||
case '?': case 'h': case 'H':
|
||||
help();
|
||||
break;
|
||||
|
||||
case '1': /* set partition entry */
|
||||
case '2': case '3': case '4':
|
||||
argp = setPartition(cmdp, argp);
|
||||
if (argp) { /* arg list error */
|
||||
fprintf(stderr,BadArg,argp);
|
||||
fprintf(stderr,h_1);
|
||||
fprintf(stderr,h_2);
|
||||
break;
|
||||
}
|
||||
bufmod = 1;
|
||||
break;
|
||||
|
||||
case 'a': case 'A': /* activate partition */
|
||||
argp = makeActive(argp);
|
||||
if (argp) {
|
||||
fprintf(stderr,BadArg,argp);
|
||||
fprintf(stderr,h_a);
|
||||
break;
|
||||
}
|
||||
bufmod = 1;
|
||||
break;
|
||||
|
||||
case 'g': case 'G': /* set disk parameters (Geometry) */
|
||||
argp = setGeometry(argp);
|
||||
if (argp) { /* arg list error */
|
||||
fprintf(stderr,BadArg,argp);
|
||||
fprintf(stderr,h_g);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'i': case 'I': /* List known ID numbers */
|
||||
printIDs();
|
||||
break;
|
||||
|
||||
case 'l': case 'L': /* List the partition table */
|
||||
listPTable();
|
||||
break;
|
||||
|
||||
case 'q': case 'Q': /* Quit */
|
||||
if (bufmod && (cmdp[1] != '!')) {
|
||||
fprintf(stderr,"\007%s%s\n", WarnNotSaved,
|
||||
"Use 'wq' or 'q!' (enter ? for help).");
|
||||
break;
|
||||
}
|
||||
exit(0);
|
||||
/*NOTREACHED*/
|
||||
|
||||
case 'r': case 'R': /* read from device or file */
|
||||
if (sscanf(argp,"%80s",filename) == 1) {
|
||||
/* Arg specified, read from filename */
|
||||
if (getFile(filename, buffer, SECSIZE) < 0)
|
||||
fprintf(stderr,"%s: read failed\n", filename);
|
||||
bufmod = 1;
|
||||
} else {
|
||||
/* No arg, use device. */
|
||||
if (getBBlk(devname, buffer) < 0)
|
||||
fprintf(stderr,"%s: read failed\n", devname);
|
||||
bufmod = 0;
|
||||
}
|
||||
checkValidity();
|
||||
break;
|
||||
|
||||
case 'w': case 'W': /* Write to file or device */
|
||||
if (sscanf(argp,"%80s",filename) == 1) {
|
||||
/* Arg specified, write to filename */
|
||||
if (putFile(filename, buffer, SECSIZE) < 0)
|
||||
fprintf(stderr, "%s: write failed\n", filename);
|
||||
} else { /* No arg, use device. */
|
||||
if (putBBlk(devname, buffer) < 0)
|
||||
fprintf(stderr, "%s: write failed\n", devname);
|
||||
bufmod = 0;
|
||||
}
|
||||
if (cmdp[1] == 'q' || cmdp[1] == 'Q') exit(0);
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr,"'%c': unrecognized. Enter '?' for help.\n", *cmdp);
|
||||
break;
|
||||
|
||||
} /* switch */
|
||||
} /* while */
|
||||
if (bufmod) fprintf(stderr, WarnNotSaved);
|
||||
exit(0);
|
||||
} /* main */
|
||||
|
||||
|
||||
/* Check for valid boot block (magic number in last two bytes).
|
||||
* Also, check for presence of partition name table.
|
||||
*/
|
||||
void checkValidity()
|
||||
{
|
||||
/* Check the magic number. */
|
||||
if ((buffer[MAGIC_LOC] & 0xFF) != MAGIC_0 ||
|
||||
(buffer[MAGIC_LOC+1] & 0xFF) != MAGIC_1 ) {
|
||||
/* The boot sector is not valid -- Fix it. */
|
||||
buffer[MAGIC_LOC] = MAGIC_0;
|
||||
buffer[MAGIC_LOC+1] = MAGIC_1;
|
||||
bufmod = 1;
|
||||
fprintf(stderr,
|
||||
"\n\tWarning: The boot sector has an invalid magic number.\n\
|
||||
\tThe magic number has been fixed, but the other contents\n\
|
||||
\tare probably garbage. Initialize using the command:\n\
|
||||
\t\tR boot-program-file (i.e. bootmenu.bin)\n\
|
||||
\tthen set each partition entry if necessary.\n");
|
||||
}
|
||||
|
||||
/* Does it use a name table (for a boot menu)?
|
||||
* My boot program does, and can be identified by
|
||||
* finding my name in a particular (unused) area.
|
||||
*/
|
||||
useNTable = ( buffer[LOC_GWR] == (char)0x3A ); /* Saul */
|
||||
/* useNTable = !strcmp(&buffer[LOC_GWR], "Gordon W. Ross"); Saul */
|
||||
|
||||
}
|
||||
|
||||
char * setPartition(cmdp,argp) /* return string on error */
|
||||
char *cmdp,*argp;
|
||||
{
|
||||
struct part *pp; /* partition entry */
|
||||
char * np; /* name table pointer */
|
||||
char tmpname[20];
|
||||
char * newname = tmpname; /* name field */
|
||||
int index; /* partition index (0..3) */
|
||||
uint id; /* ID code (see syscodes.c) */
|
||||
uint first,last; /* user supplied cylinders */
|
||||
uint c,h,s; /* working cyl,head,sect, */
|
||||
int i; /* returned by sscanf */
|
||||
ulong lsbeg, lslen; /* logical begin, length */
|
||||
|
||||
/* Value check the index */
|
||||
index = *cmdp - '1';
|
||||
if (index < 0 || index > 3)
|
||||
return("index");
|
||||
pp = (struct part *) &buffer[LOC_PT + index * 16];
|
||||
np = &buffer[LOC_NT + index * NT_ENTRY_SIZE]; /* Saul */
|
||||
/* np = &buffer[LOC_NT + index * 8]; Saul */
|
||||
|
||||
/* Read System ID */
|
||||
if ((i=sscanf(argp,"%d%d%d%s", &id, &first, &last, newname)) < 1)
|
||||
return("id");
|
||||
|
||||
/* If ID==0, just clear out the entry and return. */
|
||||
if (id == 0) {
|
||||
strncpy( (char *) pp, "", 16);
|
||||
if (useNTable) strncpy( np, "", NT_ENTRY_SIZE); /* Saul */
|
||||
/* if (useNTable) strncpy( np, "", 8); Saul */
|
||||
return((char *)0);
|
||||
}
|
||||
|
||||
/* Read first and last cylinder */
|
||||
if (i < 3)
|
||||
return("first last (missing)");
|
||||
|
||||
/* Reasonable start,end cylinder numbers? */
|
||||
if (first > last) return("first > last");
|
||||
if (first > 1023) return("first > 1023");
|
||||
if (last >= cyls) return("last >= cyls");
|
||||
|
||||
/* Get (optional) system name. */
|
||||
if (i == 3) { /* no name given, use default */
|
||||
newname = nameID(id);
|
||||
}
|
||||
else useNTable = 1;
|
||||
|
||||
/* Set the ID and name. */
|
||||
pp->sysid = id;
|
||||
if (useNTable) {
|
||||
strncpy(np, newname, NT_ENTRY_SIZE); /* Saul */
|
||||
/* strncpy(np, newname, 8); Saul */
|
||||
/* strcpy(&buffer[LOC_GWR], "Gordon W. Ross"); Saul */
|
||||
buffer[LOC_GWR] = (char)0x3A; /* Saul */
|
||||
}
|
||||
|
||||
/* set beginning c,h,s */
|
||||
c = first;
|
||||
/* if c == 0, head == 1 (reserve track 0) */
|
||||
h = (first) ? 0 : 1;
|
||||
s = 1;
|
||||
pp->b_cyl = c & 0xFF;
|
||||
pp->b_head = h;
|
||||
pp->b_sec = s | ((c >> 2) & 0xC0);
|
||||
/* Set the logical sector begin field */
|
||||
lsbeg = lslen = chs2long(c,h,s); /* using lslen as temp. */
|
||||
/* pp->lsBeg[0] = lslen & 0xff; lslen >>= 8;
|
||||
pp->lsBeg[1] = lslen & 0xff; lslen >>= 8;
|
||||
pp->lsBeg[2] = lslen & 0xff; lslen >>= 8;
|
||||
pp->lsBeg[3] = lslen & 0xff; lslen >>= 8; Saul */
|
||||
pp->lsBeg = lslen; /* Saul */
|
||||
|
||||
/* set ending c,h,s (last may be larger than 1023) */
|
||||
c = (last>1023) ? 1023 : last; /* limit c to 1023 */
|
||||
h = heads - 1; s = sectors;
|
||||
pp->e_cyl = c & 0xFF;
|
||||
pp->e_head = h;
|
||||
pp->e_sec = s | ((c >> 2) & 0xC0);
|
||||
/* Set the logical sector length field (using REAL end cylinder) */
|
||||
lslen = chs2long(last,h,s) + 1 - lsbeg;
|
||||
/* pp->lsLen[0] = lslen & 0xff; lslen >>= 8;
|
||||
pp->lsLen[1] = lslen & 0xff; lslen >>= 8;
|
||||
pp->lsLen[2] = lslen & 0xff; lslen >>= 8;
|
||||
pp->lsLen[3] = lslen & 0xff; lslen >>= 8; Saul */
|
||||
pp->lsLen = lslen; /* Saul */
|
||||
|
||||
return((char *)0); /* success */
|
||||
} /* setPartition() */
|
||||
|
||||
char * makeActive(argp) /* return error string or zero */
|
||||
char *argp;
|
||||
{
|
||||
struct part *pp; /* partition entry */
|
||||
int i,act1,act2,act3,act4,act5; /* which one becomes active */
|
||||
|
||||
act1=0;
|
||||
act2=0;
|
||||
act3=0;
|
||||
act4=0;
|
||||
if ((i=sscanf(argp,"%d%d%d%d%d", &act1, &act2, &act3, &act4, &act5)) < 1)
|
||||
return("missing partition number");
|
||||
if ( i > 4)
|
||||
return("at most four partition numbers");
|
||||
act1--; /* make it zero-origin */
|
||||
act2--; /* make it zero-origin */
|
||||
act3--; /* make it zero-origin */
|
||||
act4--; /* make it zero-origin */
|
||||
|
||||
i=0; pp = (struct part *) &buffer[LOC_PT];
|
||||
while (i<4) {
|
||||
if (pp->sysid == 0 && (i == act1|| i == act2 || i == act3 || i == act4)) {
|
||||
sprintf(s, "partition %d empty", i+1);
|
||||
return(s);
|
||||
}
|
||||
i++; pp++;
|
||||
}
|
||||
i=0; pp -= 4;
|
||||
while (i<4) {
|
||||
if (i == act1|| i == act2 || i == act3 || i == act4)
|
||||
pp->active = 0x80;
|
||||
else
|
||||
pp->active = 0;
|
||||
i++; pp++;
|
||||
}
|
||||
return((char *)0);
|
||||
}
|
||||
|
||||
char * setGeometry(argp) /* return string on error */
|
||||
char *argp;
|
||||
{
|
||||
int c,h,s;
|
||||
|
||||
if (sscanf(argp,"%d%d%d", &c, &h, &s) < 3)
|
||||
return("(missing)");
|
||||
if (c<1) return("cyls");
|
||||
if (h<1) return("heads");
|
||||
if (s<1) return("sectors");
|
||||
cyls=c; heads=h; sectors=s;
|
||||
return((char *)0);
|
||||
}
|
||||
|
||||
listPTable() /* print out partition table */
|
||||
{
|
||||
struct part * pp; /* partition table entry */
|
||||
char *name;
|
||||
int i; /* partition number */
|
||||
/* int numActive=0; /* active partition [1-4], 0==none */
|
||||
char Active[20]; /* active partitions [1-4], 0==none */
|
||||
uint pbc,pbh,pbs; /* physical beginning c,h,s */
|
||||
uint pec,peh,pes; /* physical ending c,h,s */
|
||||
uint lbc,lbh,lbs; /* logical beginning c,h,s */
|
||||
uint lec,leh,les; /* logical ending c,h,s */
|
||||
ulong lsbeg,lslen; /* logical sectors: begin, length */
|
||||
|
||||
strcpy(Active, "active:");
|
||||
printf("# Partition table on device: %s\n", devname);
|
||||
printf("geometry %d %d %d (cyls heads sectors)\n",
|
||||
cyls, heads, sectors);
|
||||
/* printf("# ID First(cyl) Last(cyl) Name "); Saul */
|
||||
printf("# ID First(cyl) Last(cyl) Name "); /* Saul */
|
||||
printf("# start, length (sectors)\n");
|
||||
|
||||
for (i=0; i<4; i++) {
|
||||
pp = (struct part *) &buffer[LOC_PT + i * 16];
|
||||
|
||||
if (pp->active) {
|
||||
char s[3];
|
||||
sprintf(s, " %d", i+1);
|
||||
strcat(Active,s);
|
||||
if (pp->active != 0x80)
|
||||
fprintf(stderr, "Warning: Partition %d is active, with the illegal activity byte %d.\nCorrect with the \"A\" command.\n", i+1, pp->active);
|
||||
/* if(numActive)
|
||||
fprintf(stderr,"Error: multiple active partitions.\n");
|
||||
else numActive = i+1; */
|
||||
}
|
||||
|
||||
/* physical beginning c,h,s */
|
||||
pbc = pp->b_cyl & 0xff | (pp->b_sec << 2) & 0x300;
|
||||
pbh = pp->b_head;
|
||||
pbs = pp->b_sec & 0x3F;
|
||||
|
||||
/* physical ending c,h,s */
|
||||
pec = pp->e_cyl & 0xff | (pp->e_sec << 2) & 0x300;
|
||||
peh = pp->e_head;
|
||||
pes = pp->e_sec & 0x3F;
|
||||
|
||||
/* compute logical beginning (c,h,s) */
|
||||
/* lsbeg = ((((((pp->lsBeg[3] ) << 8 )
|
||||
| pp->lsBeg[2] ) << 8 )
|
||||
| pp->lsBeg[1] ) << 8 )
|
||||
| pp->lsBeg[0] ; Saul */
|
||||
lsbeg = pp->lsBeg; /* Saul */
|
||||
long2chs(lsbeg, &lbc, &lbh, &lbs);
|
||||
/* compute logical ending (c,h,s) */
|
||||
/* lslen = ((((((pp->lsLen[3]) << 8 )
|
||||
| pp->lsLen[2]) << 8 )
|
||||
| pp->lsLen[1]) << 8 )
|
||||
| pp->lsLen[0] ; Saul */
|
||||
lslen = pp->lsLen; /* Saul*/
|
||||
/* keep beginning <= end ... */
|
||||
if (lslen > 0) long2chs(lsbeg+lslen-1, &lec, &leh, &les);
|
||||
else long2chs(lsbeg, &lec, &leh, &les);
|
||||
|
||||
if (useNTable)
|
||||
name = &buffer[LOC_NT + i * NT_ENTRY_SIZE ]; /* Saul */
|
||||
/* name = &buffer[LOC_NT + i * 8]; Saul */
|
||||
else
|
||||
name = nameID((uint) pp->sysid);
|
||||
|
||||
/* show physical begin, logical end (works for cyl>1023) */
|
||||
/* # ID First(cyl) Last(cyl) Name... # ... */
|
||||
/* printf("%d %3d %4d %4d %-8.8s # %ld, %ld\n", Saul */
|
||||
printf("%d %3d %4d %4d %-5.5s # %ld, %ld\n", /* Saul */
|
||||
i+1, pp->sysid, pbc, lec, name, lsbeg, lslen );
|
||||
|
||||
/* That's all, for an empty partition. */
|
||||
if (pp->sysid == 0) continue;
|
||||
|
||||
/*
|
||||
* Now do some consistency checks...
|
||||
*/
|
||||
|
||||
/* Same physical / logical beginning? */
|
||||
if (pbc != lbc || pbh != lbh || pbs != lbs ) {
|
||||
printf("# note: first(%d): ", i+1);
|
||||
printf("phys=(%d,%d,%d) ", pbc, pbh, pbs);
|
||||
printf("logical=(%d,%d,%d)\n",lbc, lbh, lbs);
|
||||
}
|
||||
/* Same physical / logical ending? */
|
||||
if (pec != lec || peh != leh || pes != les ) {
|
||||
printf("# note: last(%d): ", i+1);
|
||||
printf("phys=(%d,%d,%d) ", pec, peh, pes);
|
||||
printf("logical=(%d,%d,%d)\n",lec, leh, les);
|
||||
}
|
||||
|
||||
/* Beginning on cylinder boundary? */
|
||||
if (pbc == 0) { /* exception: start on head 1 */
|
||||
if (pbh != 1 || pbs != 1) {
|
||||
printf("# note: first(%i): ", i+1);
|
||||
printf("phys=(%d,%d,%d) ", pbc, pbh, pbs);
|
||||
printf("should be (%d,1,1)\n", pbc);
|
||||
}
|
||||
} else { /* not on cyl 0 */
|
||||
if (pbh != 0 || pbs != 1) {
|
||||
printf("# note: first(%i): ", i+1);
|
||||
printf("phys=(%d,%d,%d) ", pbc, pbh, pbs);
|
||||
printf("should be (%d,0,1)\n", pbc);
|
||||
}
|
||||
}
|
||||
|
||||
/* Ending on cylinder boundary? */
|
||||
if (peh != (heads-1) || pes != sectors) {
|
||||
printf("# note: last(%i): ", i+1);
|
||||
printf("phys=(%d,%d,%d) ", pec, peh, pes);
|
||||
printf("should be (%d,%d,%d)\n",
|
||||
pec, heads-1, sectors);
|
||||
}
|
||||
|
||||
} /* for */
|
||||
if ( !Active[7] ) /* No active partitions */
|
||||
strcat(Active, " 0 (none)");
|
||||
strcat(Active, "\n");
|
||||
printf(Active);
|
||||
/* printf("active: %d %s\n", numActive,
|
||||
(numActive) ? "" : "(none)"); */
|
||||
} /* listPTable() */
|
||||
|
||||
ulong chs2long(c,h,s)
|
||||
uint c,h,s;
|
||||
{
|
||||
ulong l;
|
||||
if (s<1) s=1;
|
||||
l = c; l *= heads;
|
||||
l += h; l *= sectors;
|
||||
l += (s - 1);
|
||||
return(l);
|
||||
}
|
||||
|
||||
long2chs(ls, c, h, s) /* convert logical sec-num to c,h,s */
|
||||
ulong ls; /* Logical Sector number */
|
||||
uint *c,*h,*s; /* cyl, head, sector */
|
||||
{
|
||||
int spc = heads * sectors;
|
||||
*c = ls / spc;
|
||||
ls = ls % spc;
|
||||
*h = ls / sectors;
|
||||
*s = ls % sectors + 1; /* sectors count from 1 */
|
||||
}
|
||||
|
||||
char * nameID(n)
|
||||
unsigned int n;
|
||||
{
|
||||
struct intString *is;
|
||||
|
||||
is = sysCodes;
|
||||
while (is->i) {
|
||||
if (is->i == n) return(is->s);
|
||||
is++;
|
||||
}
|
||||
if (!n) return(is->s);
|
||||
return("unknown");
|
||||
}
|
||||
|
||||
int printIDs() /* print the known system IDs */
|
||||
{
|
||||
struct intString * is = sysCodes;
|
||||
|
||||
/* This might need to do more processing eventually, i.e.
|
||||
* if (prompt) { ... do more processing ... }
|
||||
*/
|
||||
printf("_ID_\t__Name__ ____Description____\n");
|
||||
while (is->i) {
|
||||
printf("%3d\t%s\n", is->i, is->s);
|
||||
is++;
|
||||
}
|
||||
}
|
||||
43
Linux-0.95/INSTALL/pfdisk/SYSCODES.C
Normal file
43
Linux-0.95/INSTALL/pfdisk/SYSCODES.C
Normal file
@@ -0,0 +1,43 @@
|
||||
/* This file holds all knowledge of partition ID codes.
|
||||
* Thanks to leendert@cs.vu.nl (Leendert van Doorn) for
|
||||
* collecting most of this information.
|
||||
*/
|
||||
|
||||
#define extern
|
||||
#include "syscodes.h"
|
||||
#undef extern
|
||||
|
||||
/* Note that my boot program menu can only use the first 8 characters
|
||||
* of these names. The colon in the nineth position shows where the
|
||||
* first truncated char is. (There's not much room in the bootblock!)
|
||||
* changed sysCodes[] below, adding SIZE tms */
|
||||
struct intString sysCodes[SIZE] = {
|
||||
{ 0x01, "DOS12 :12-bit FAT" },
|
||||
{ 0x02, "XENIX :root" },
|
||||
{ 0x03, "XENIX :usr" },
|
||||
{ 0x04, "DOS16 :16-bit FAT" },
|
||||
{ 0x05, "DOSex :DOS 3.3 extended volume" },
|
||||
{ 0x06, "DOSbi :DOS 4.0 large volume" },
|
||||
{ 0x07, "OS/2 :OS/2 (or QNX or Adv. UNIX...)" },
|
||||
{ 0x08, "AIX :file system" },
|
||||
{ 0x09, "AIXbt:boot partition" },
|
||||
|
||||
{ 0x10, "OPUS :?" },
|
||||
{ 0x40, "VENIX :Venix 80286" },
|
||||
{ 0x51, "NOVEL :?" },
|
||||
{ 0x52, "CPM :?" },
|
||||
{ 0x63, "UNIX :System V/386" },
|
||||
{ 0x64, "NOVEL :?" },
|
||||
{ 0x75, "PC/IX :?" },
|
||||
{ 0x80, "Minix :Minix (ver. 1.4a and earlier)" },
|
||||
{ 0x81, "Minix :Minix (ver. 1.4b and later)" },
|
||||
{ 0x93, "Ameba :Amoeba file system" },
|
||||
{ 0x94, "Ameba :Amoeba bad block table?" },
|
||||
{ 0xDB, "C.DOS :Concurrent DOS" },
|
||||
|
||||
/* { 0xF2, "DOS-2nd :DOS 3.3+ second partition" }, */
|
||||
/* { 0xFF, "BAD-TRK :Bad track table?" }, */
|
||||
|
||||
/* Make sure this is last! */
|
||||
{ 0, "empty" }
|
||||
};
|
||||
4
Linux-0.95/INSTALL/pfdisk/SYSCODES.H
Normal file
4
Linux-0.95/INSTALL/pfdisk/SYSCODES.H
Normal file
@@ -0,0 +1,4 @@
|
||||
#define SIZE 40 /* added tms */
|
||||
struct intString { unsigned int i; char * s; };
|
||||
extern struct intString sysCodes[SIZE]; /* was sysCodes[] modified tms */
|
||||
|
||||
22
Linux-0.95/INSTALL/pfdisk/SYSDEP.H
Normal file
22
Linux-0.95/INSTALL/pfdisk/SYSDEP.H
Normal file
@@ -0,0 +1,22 @@
|
||||
/* communicate declarations from the files: s_*.c */
|
||||
|
||||
#define SECSIZE 0x200
|
||||
|
||||
extern int usage(); /* print a usage message */
|
||||
/* (char *progname) */
|
||||
|
||||
extern void getGeometry(); /* determine disk parameters */
|
||||
/* (char *dev, uint *cyls, uint *heads, uint *sectors) */
|
||||
|
||||
extern int getFile(); /* open, read, close, return(num-read) */
|
||||
/* (char *name, char *buf, int len) */
|
||||
|
||||
extern int putFile(); /* open, write, close, return(num-writen) */
|
||||
/* (char *name, char *buf, int len) */
|
||||
|
||||
extern int getBBlk(); /* open, read, close, return(num-read) */
|
||||
/* (char *dev, char *buf) */
|
||||
|
||||
extern int putBBlk(); /* open, write, close, return(num-writen) */
|
||||
/* (char *dev, char *buf) */
|
||||
|
||||
163
Linux-0.95/INSTALL/pfdisk/S_MSDOS.C
Normal file
163
Linux-0.95/INSTALL/pfdisk/S_MSDOS.C
Normal file
@@ -0,0 +1,163 @@
|
||||
/* This file contains system-specific functions for MS-DOS.
|
||||
* The program pfdisk.c calls these routines.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <dos.h>
|
||||
|
||||
#define extern
|
||||
#include "sysdep.h"
|
||||
#undef extern
|
||||
|
||||
int usage(prog) /* print a usage message */
|
||||
char *prog; /* program name */
|
||||
{
|
||||
fprintf(stderr,"Usage: %s <disk>\n", prog);
|
||||
fprintf(stderr,"\twhere <disk> is a digit [0-9]\n");
|
||||
}
|
||||
|
||||
void getGeometry(name, c, h, s)
|
||||
char *name; /* device name */
|
||||
unsigned *c,*h,*s; /* cyls, heads, sectors */
|
||||
{
|
||||
int dev; /* hard disk number */
|
||||
union REGS regs;
|
||||
struct SREGS sregs;
|
||||
|
||||
if (name[0] < '0' ||
|
||||
name[0] > '9' ||
|
||||
name[1] != 0 )
|
||||
{
|
||||
fprintf(stderr,"%s: device name must be a digit\n", name);
|
||||
return;
|
||||
}
|
||||
dev = (name[0] - '0');
|
||||
|
||||
regs.h.ah = 8; /* get param. */
|
||||
regs.h.dl = dev | 0x80;
|
||||
|
||||
int86x(0x13,®s,®s,&sregs);
|
||||
|
||||
/* Are that many drives responding? */
|
||||
if (regs.h.dl <= dev ) {
|
||||
fprintf(stderr,"%s: drive not found\n", name);
|
||||
return;
|
||||
}
|
||||
if (regs.x.cflag) {
|
||||
fprintf(stderr,"%s: can't get disk parameters\n", name);
|
||||
return;
|
||||
}
|
||||
*c = ((((int) regs.h.cl << 2) & 0x300) | regs.h.ch) + 1;
|
||||
*h = regs.h.dh + 1;
|
||||
*s = regs.h.cl & 0x3F;
|
||||
}
|
||||
|
||||
int getFile(name, buf, len) /* read file into buffer */
|
||||
char *name, *buf;
|
||||
int len;
|
||||
{ /* (open, read, close) */
|
||||
int devfd, retval;
|
||||
|
||||
devfd = open(name, O_RDONLY|O_BINARY, 0);
|
||||
if (devfd < 0) {
|
||||
fprintf(stderr,"%s: can't open for reading\n", name);
|
||||
return(devfd);
|
||||
}
|
||||
retval = read(devfd, buf, len);
|
||||
if (retval < 0)
|
||||
fprintf(stderr,"%s: read failed\n", name);
|
||||
close(devfd);
|
||||
return(retval);
|
||||
}
|
||||
|
||||
int putFile(name, buf, len) /* write buffer to file */
|
||||
char *name, *buf;
|
||||
int len;
|
||||
{ /* (open, write, close) */
|
||||
int devfd, retval;
|
||||
|
||||
devfd = open(name,
|
||||
O_WRONLY|O_CREAT|O_BINARY,
|
||||
S_IREAD|S_IWRITE ); /* stupid DOS... */
|
||||
if (devfd < 0) {
|
||||
fprintf(stderr,"%s: can't open for writing\n", name);
|
||||
return(devfd);
|
||||
}
|
||||
retval = write(devfd, buf, len);
|
||||
if (retval < 0)
|
||||
fprintf(stderr,"%s: write failed\n", name);
|
||||
close(devfd);
|
||||
return(retval);
|
||||
}
|
||||
|
||||
int getBBlk(name, buf) /* read boot block into buffer */
|
||||
char *name, *buf;
|
||||
{ /* BIOS absolute disk read */
|
||||
int dev;
|
||||
union REGS regs;
|
||||
struct SREGS sregs;
|
||||
|
||||
if (name[0] < '0' ||
|
||||
name[0] > '9' ||
|
||||
name[1] != 0 )
|
||||
{
|
||||
fprintf(stderr,"%s: device name must be a digit\n",name);
|
||||
return(-1);
|
||||
}
|
||||
dev = (name[0] - '0');
|
||||
|
||||
segread(&sregs); /* get ds */
|
||||
sregs.es = sregs.ds; /* buffer address */
|
||||
regs.x.bx = (int) buf;
|
||||
|
||||
regs.h.ah = 2; /* read */
|
||||
regs.h.al = 1; /* sector count */
|
||||
regs.h.ch = 0; /* track */
|
||||
regs.h.cl = 1; /* start sector */
|
||||
regs.h.dh = 0; /* head */
|
||||
regs.h.dl = dev|0x80; /* drive */
|
||||
|
||||
int86x(0x13,®s,®s,&sregs);
|
||||
if (regs.x.cflag) {
|
||||
fprintf(stderr,"%s: read failed\n", name);
|
||||
return(-1);
|
||||
}
|
||||
return(SECSIZE);
|
||||
}
|
||||
|
||||
int putBBlk(name, buf) /* write buffer to boot block */
|
||||
char *name, *buf;
|
||||
{ /* BIOS absolute disk write */
|
||||
int dev;
|
||||
union REGS regs;
|
||||
struct SREGS sregs;
|
||||
|
||||
if (name[0] < '0' ||
|
||||
name[0] > '9' ||
|
||||
name[1] != 0 )
|
||||
{
|
||||
fprintf(stderr,"%s: device name must be a digit\n", name);
|
||||
return(-1);
|
||||
}
|
||||
dev = (name[0] - '0');
|
||||
|
||||
segread(&sregs); /* get ds */
|
||||
sregs.es = sregs.ds; /* buffer address */
|
||||
regs.x.bx = (int) buf;
|
||||
|
||||
regs.h.ah = 3; /* write */
|
||||
regs.h.al = 1; /* sector count */
|
||||
regs.h.ch = 0; /* track */
|
||||
regs.h.cl = 1; /* start sector */
|
||||
regs.h.dh = 0; /* head */
|
||||
regs.h.dl = dev|0x80; /* drive */
|
||||
|
||||
int86x(0x13,®s,®s,&sregs);
|
||||
if (regs.x.cflag) {
|
||||
fprintf(stderr,"%s: write failed\n",name);
|
||||
return(-1);
|
||||
}
|
||||
return(SECSIZE);
|
||||
}
|
||||
BIN
Linux-0.95/INSTALL/pfdisktc.zip
Normal file
BIN
Linux-0.95/INSTALL/pfdisktc.zip
Normal file
Binary file not shown.
182
Linux-0.95/INSTALL/rawrite.c
Normal file
182
Linux-0.95/INSTALL/rawrite.c
Normal file
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
rawrite.c Write a binary image to a 360K diskette.
|
||||
By Mark Becker
|
||||
|
||||
Usage:
|
||||
MS-DOS prompt> RAWRITE
|
||||
|
||||
And follow the prompts.
|
||||
|
||||
History
|
||||
-------
|
||||
|
||||
1.0 - Initial release
|
||||
1.1 - Beta test (fixing bugs) 4/5/91
|
||||
Some BIOS's don't like full-track writes.
|
||||
1.101 - Last beta release. 4/8/91
|
||||
Fixed BIOS full-track write by only
|
||||
writing 3 sectors at a time.
|
||||
1.2 - Final code and documentation clean-ups. 4/9/91
|
||||
*/
|
||||
#include <alloc.h>
|
||||
#include <bios.h>
|
||||
#include <ctype.h>
|
||||
#include <dir.h>
|
||||
#include <dos.h>
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define FALSE 0
|
||||
#define TRUE (!FALSE)
|
||||
|
||||
#define SECTORSIZE 512
|
||||
|
||||
#define RESET 0
|
||||
#define LAST 1
|
||||
#define READ 2
|
||||
#define WRITE 3
|
||||
#define VERIFY 4
|
||||
#define FORMAT 5
|
||||
|
||||
int done;
|
||||
|
||||
/*
|
||||
Catch ^C and ^Break.
|
||||
*/
|
||||
int handler(void)
|
||||
{
|
||||
done = TRUE;
|
||||
return(0);
|
||||
}
|
||||
void msg(char (*s))
|
||||
{
|
||||
fprintf(stderr, "%s\n", s);
|
||||
_exit(1);
|
||||
}
|
||||
/*
|
||||
Identify the error code with a real error message.
|
||||
*/
|
||||
void Error(int (status))
|
||||
{
|
||||
switch (status) {
|
||||
case 0x00: msg("Operation Successful"); break;
|
||||
case 0x01: msg("Bad command"); break;
|
||||
case 0x02: msg("Address mark not found"); break;
|
||||
case 0x03: msg("Attempt to write on write-protected disk"); break;
|
||||
case 0x04: msg("Sector not found"); break;
|
||||
case 0x05: msg("Reset failed (hard disk)"); break;
|
||||
case 0x06: msg("Disk changed since last operation"); break;
|
||||
case 0x07: msg("Drive parameter activity failed"); break;
|
||||
case 0x08: msg("DMA overrun"); break;
|
||||
case 0x09: msg("Attempt to DMA across 64K boundary"); break;
|
||||
case 0x0A: msg("Bad sector detected"); break;
|
||||
case 0x0B: msg("Bad track detected"); break;
|
||||
case 0x0C: msg("Unsupported track"); break;
|
||||
case 0x10: msg("Bad CRC/ECC on disk read"); break;
|
||||
case 0x11: msg("CRC/ECC corrected data error"); break;
|
||||
case 0x20: msg("Controller has failed"); break;
|
||||
case 0x40: msg("Seek operation failed"); break;
|
||||
case 0x80: msg("Attachment failed to respond"); break;
|
||||
case 0xAA: msg("Drive not ready (hard disk only"); break;
|
||||
case 0xBB: msg("Undefined error occurred (hard disk only)"); break;
|
||||
case 0xCC: msg("Write fault occurred"); break;
|
||||
case 0xE0: msg("Status error"); break;
|
||||
case 0xFF: msg("Sense operation failed"); break;
|
||||
}
|
||||
_exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
Identify what kind of diskette is installed in the specified drive.
|
||||
Return the number of sectors per track assumed as follows:
|
||||
9 - 360 K and 720 K 5.25".
|
||||
15 - 1.2 M HD 5.25".
|
||||
18 - 1.44 M 3.5".
|
||||
*/
|
||||
int nsects(int (drive))
|
||||
{
|
||||
static int nsect[] = {18, 15, 9};
|
||||
|
||||
char *buffer;
|
||||
int i, status;
|
||||
/*
|
||||
Read sector 1, head 0, track 0 to get the BIOS running.
|
||||
*/
|
||||
buffer = (char *)malloc(SECTORSIZE);
|
||||
biosdisk(RESET, drive, 0, 0, 0, 0, buffer);
|
||||
status = biosdisk(READ, drive, 0, 10, 1, 1, buffer);
|
||||
if (status == 0x06) /* Door signal change? */
|
||||
status = biosdisk(READ, drive, 0, 0, 1, 1, buffer);
|
||||
|
||||
for (i=0; i < sizeof(nsect)/sizeof(int); ++i) {
|
||||
biosdisk(RESET, drive, 0, 0, 0, 0, buffer);
|
||||
status = biosdisk(READ, drive, 0, 0, nsect[i], 1, buffer);
|
||||
if (status == 0x06)
|
||||
status = biosdisk(READ, drive, 0, 0, nsect[i], 1, buffer);
|
||||
if (status == 0x00) break;
|
||||
}
|
||||
if (i == sizeof(nsect)/sizeof(int)) {
|
||||
msg("Can't figure out how many sectors/track for this diskette.");
|
||||
}
|
||||
free(buffer);
|
||||
return(nsect[i]);
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
char fname[MAXPATH];
|
||||
char *buffer, *pbuf;
|
||||
int count, fdin, drive, head, track, status, spt, buflength, ns;
|
||||
|
||||
puts("RaWrite 1.2 - Write disk file to raw floppy diskette\n");
|
||||
ctrlbrk(handler);
|
||||
printf("Enter source file name: ");
|
||||
scanf("%s", fname);
|
||||
_fmode = O_BINARY;
|
||||
if ((fdin = open(fname, O_RDONLY)) <= 0) {
|
||||
perror(fname);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
printf("Enter destination drive: ");
|
||||
scanf("%s", fname);
|
||||
drive = fname[0];
|
||||
drive = (islower(drive) ? toupper(drive) : drive) - 'A';
|
||||
printf("Please insert a formatted diskette into ");
|
||||
printf("drive %c: and press -ENTER- :", drive + 'A');
|
||||
while (bioskey(1) == 0) ; /* Wait... */
|
||||
if ((bioskey(0) & 0x7F) == 3) exit(1); /* Check for ^C */
|
||||
putchar('\n');
|
||||
done = FALSE;
|
||||
/*
|
||||
* Determine number of sectors per track and allocate buffers.
|
||||
*/
|
||||
spt = nsects(drive);
|
||||
buflength = spt * SECTORSIZE;
|
||||
buffer = (char *)malloc(buflength);
|
||||
printf("Number of sectors per track for this disk is %d\n", spt);
|
||||
printf("Writing image to drive %c:. Press ^C to abort.\n", drive+'A');
|
||||
/*
|
||||
* Start writing data to diskette until there is no more data to write.
|
||||
*/
|
||||
head = track = 0;
|
||||
while ((count = read(fdin, buffer, buflength)) > 0 && !done) {
|
||||
pbuf = buffer;
|
||||
for (ns = 1; count > 0 && !done; ns+=3) {
|
||||
printf("Track: %02d Head: %2d Sector: %2d\r", track, head, ns);
|
||||
status = biosdisk(WRITE, drive, head, track, ns, 3, pbuf);
|
||||
|
||||
if (status != 0) Error(status);
|
||||
|
||||
count -= (3*SECTORSIZE);
|
||||
pbuf += (3*SECTORSIZE);
|
||||
}
|
||||
if ((head = (head + 1) & 1) == 0) ++track;
|
||||
}
|
||||
if (eof(fdin)) {
|
||||
printf("\nDone.\n");
|
||||
biosdisk(2, drive, 0, 0, 1, 1, buffer); /* Retract head */
|
||||
}
|
||||
} /* end main */
|
||||
86
Linux-0.95/INSTALL/rawrite.doc
Normal file
86
Linux-0.95/INSTALL/rawrite.doc
Normal file
@@ -0,0 +1,86 @@
|
||||
RaWrite 1.2
|
||||
-----------
|
||||
|
||||
Purpose
|
||||
-------
|
||||
|
||||
Write a disk image file to a 360K floppy disk.
|
||||
|
||||
|
||||
Equipment/Software Requirements
|
||||
-------------------------------
|
||||
|
||||
PC/XT/AT with a floppy disk drive capable of reading and writing a 360K
|
||||
diskette.
|
||||
|
||||
This program uses generic low-level BIOS diskette read/write functions. It
|
||||
should be portable to nearly every PC in existance. PS/2's should be able
|
||||
to run RawWrite but this has not been tested.
|
||||
|
||||
|
||||
CAVEAT
|
||||
------
|
||||
|
||||
This program will write ANY disk file to a floppy, overwriting any previous
|
||||
information that may have been present. If you wish to re-use a diskette
|
||||
under MS-DOS thats been written to by RawWrite then the disk will need to be
|
||||
reformatted; all MS-DOS specific information will have been erased.
|
||||
|
||||
|
||||
How to Compile
|
||||
--------------
|
||||
|
||||
TCC rawrite.c
|
||||
|
||||
The source code is specific to Borland International's Turbo C 2.01 and has
|
||||
been tested in all memory models.
|
||||
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
C> RAWRITE
|
||||
|
||||
And follow the prompts. All arguments are case-insensitive.
|
||||
|
||||
A sample run is shown below. The disk file being written, in this example,
|
||||
is named DEMODISK and the destination - where the image is being written -
|
||||
is the B: drive.
|
||||
|
||||
This program may be aborted at any time by typing ^C.
|
||||
|
||||
|
||||
Sample Run
|
||||
----------
|
||||
|
||||
C> RAWRITE
|
||||
RaWrite 1.2 - Write disk file to raw floppy diskette
|
||||
|
||||
Enter source file name: DEMODISK
|
||||
Enter destination drive: B
|
||||
Please insert a formatted 360K diskette into drive B: and press -ENTER- :
|
||||
Writing image to drive B:
|
||||
|
||||
|
||||
Errors
|
||||
------
|
||||
|
||||
RaWrite attempts to determine if the diskette is a 360K, 720K, 1.2M, or
|
||||
1.44M diskette by reading specific sectors. If the inserted diskette is not
|
||||
one of the mentioned types, then RaWrite will abort with a short error
|
||||
message.
|
||||
|
||||
Errors such as write protect, door open, bad disk, bad sector, etc. cause a
|
||||
program abort with a short error message.
|
||||
|
||||
|
||||
History
|
||||
-------
|
||||
|
||||
1.0 - Initial release
|
||||
1.1 - Beta test (fixing bugs) 4/5/91
|
||||
Some BIOS's don't like full-track writes.
|
||||
1.101 - Last beta release. 4/8/91
|
||||
Fixed BIOS full-track write by only only
|
||||
writing 3 sectors at a time.
|
||||
1.2 - Final code and documentation clean-ups. 4/9/91
|
||||
BIN
Linux-0.95/INSTALL/rawrite.exe
Normal file
BIN
Linux-0.95/INSTALL/rawrite.exe
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/sbin/kermit5A.tar.Z
Normal file
BIN
Linux-0.95/binaries/sbin/kermit5A.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/system/boot92.05.18.Z
Normal file
BIN
Linux-0.95/binaries/system/boot92.05.18.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.bin/flex2.3.7.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.bin/flex2.3.7.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.bin/fm.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.bin/fm.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.bin/gmake-3.62.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.bin/gmake-3.62.tar.Z
Normal file
Binary file not shown.
312
Linux-0.95/binaries/usr.bin/gmake-3_62_patch.txt
Normal file
312
Linux-0.95/binaries/usr.bin/gmake-3_62_patch.txt
Normal file
@@ -0,0 +1,312 @@
|
||||
From: simonm@dcs.glasgow.ac.uk (Simon Marlow)
|
||||
Newsgroups: alt.os.linux
|
||||
Subject: Re: Various Problems..
|
||||
Message-ID: <1992Mar24.120332.14976@dcs.glasgow.ac.uk>
|
||||
Date: 24 Mar 92 12:03:32 GMT
|
||||
References: <gdmXwmq00VB5I6v0QZ@andrew.cmu.edu> <IJW11.92Mar23191240@manea.cl.cam.ac.uk>
|
||||
Organization: Glasgow University Computing Science Dept.
|
||||
Lines: 301
|
||||
|
||||
|
||||
ijw11@phx.cam.ac.uk (Ian Wells) writes:
|
||||
|
||||
>I have problems with make too. Mine reports
|
||||
>(null): situid: not owner
|
||||
>or something similar, if I'm not root. I've tried u+s on the binary to no
|
||||
>effect, so what's the problem?
|
||||
>Ian.
|
||||
|
||||
Here are the diffs I made when I compiled gmake-3.62 (as far as I know
|
||||
there are none of the common bugs ascociated with these diffs - eg
|
||||
setuid problems, Ctrl-C not working etc.)
|
||||
|
||||
Unfortunately I compiled with gcc2 & shared libs so I can't really
|
||||
upload the binary, although I could upload the .o file ready for
|
||||
linking. Mail me if this would be useful.
|
||||
|
||||
Simon.
|
||||
|
||||
diff -cr gmake-3.62//Makefile gmake-linux//Makefile
|
||||
*** gmake-3.62//Makefile Thu Nov 21 15:58:00 1991
|
||||
--- gmake-linux//Makefile Mon Mar 23 20:27:39 1992
|
||||
***************
|
||||
*** 22,30 ****
|
||||
#CC line is new (WDP)
|
||||
CC=gcc
|
||||
# CFLAGS = $(defines) -g
|
||||
! CFLAGS = $(defines) -O
|
||||
# LDFLAGS = -g
|
||||
! LDFLAGS =
|
||||
|
||||
# Define these for your system as follows:
|
||||
# -DUSG System V
|
||||
--- 22,30 ----
|
||||
#CC line is new (WDP)
|
||||
CC=gcc
|
||||
# CFLAGS = $(defines) -g
|
||||
! CFLAGS = $(defines) -O2
|
||||
# LDFLAGS = -g
|
||||
! LDFLAGS = -s
|
||||
|
||||
# Define these for your system as follows:
|
||||
# -DUSG System V
|
||||
***************
|
||||
*** 42,48 ****
|
||||
# without complaint but produce losing code,
|
||||
# so beware.
|
||||
# NeXT 1.0a uses an old version of GCC, which required -D__inline=inline.
|
||||
! defines =
|
||||
|
||||
# Define these for your system as follows:
|
||||
# -DUMAX Encore UMAX
|
||||
--- 42,48 ----
|
||||
# without complaint but produce losing code,
|
||||
# so beware.
|
||||
# NeXT 1.0a uses an old version of GCC, which required -D__inline=inline.
|
||||
! defines = -DPOSIX -DLINUX -DHAVE_DUP2
|
||||
|
||||
# Define these for your system as follows:
|
||||
# -DUMAX Encore UMAX
|
||||
***************
|
||||
*** 56,62 ****
|
||||
# Define:
|
||||
# -DNLIST_NAME_UNION If `struct nlist' has a n_un member.
|
||||
# -DNLIST_NAME_ARRAY If `n_name' is an array.
|
||||
! LOAD_AVG =
|
||||
|
||||
# If you don't want archive support, comment these out.
|
||||
ARCHIVES = arscan.o ar.o
|
||||
--- 56,62 ----
|
||||
# Define:
|
||||
# -DNLIST_NAME_UNION If `struct nlist' has a n_un member.
|
||||
# -DNLIST_NAME_ARRAY If `n_name' is an array.
|
||||
! LOAD_AVG = -DNO_LDAV
|
||||
|
||||
# If you don't want archive support, comment these out.
|
||||
ARCHIVES = arscan.o ar.o
|
||||
***************
|
||||
*** 84,102 ****
|
||||
# Comment this out if POSIX.2 glob is installed on your system
|
||||
# (it's in the GNU C Library, so if you're using that, this is
|
||||
# not needed at all.)
|
||||
! globdep = glob/libglob.a
|
||||
|
||||
# Library containing POSIX.2 `glob' function.
|
||||
# Comment this line out if it's in the C library (which is the case if you
|
||||
# are using the GNU C Library), or change it to the appropriate file name
|
||||
# or -l switch.
|
||||
! globlib = $(globdep)
|
||||
|
||||
# Name under which to install GNU make.
|
||||
instname = make
|
||||
# WDP:
|
||||
! prefix = /usr/local/gnu
|
||||
! ARCH:sh = /bin/arch
|
||||
|
||||
# Directory to install `make' in.
|
||||
bindir = $(prefix)/bin/$(ARCH)
|
||||
--- 84,102 ----
|
||||
# Comment this out if POSIX.2 glob is installed on your system
|
||||
# (it's in the GNU C Library, so if you're using that, this is
|
||||
# not needed at all.)
|
||||
! #globdep = glob/libglob.a
|
||||
|
||||
# Library containing POSIX.2 `glob' function.
|
||||
# Comment this line out if it's in the C library (which is the case if you
|
||||
# are using the GNU C Library), or change it to the appropriate file name
|
||||
# or -l switch.
|
||||
! #globlib = $(globdep)
|
||||
|
||||
# Name under which to install GNU make.
|
||||
instname = make
|
||||
# WDP:
|
||||
! prefix = /usr/local
|
||||
! #ARCH:sh = /bin/arch
|
||||
|
||||
# Directory to install `make' in.
|
||||
bindir = $(prefix)/bin/$(ARCH)
|
||||
diff -cr gmake-3.62//commands.c gmake-linux//commands.c
|
||||
*** gmake-3.62//commands.c Tue Oct 8 20:20:30 1991
|
||||
--- gmake-linux//commands.c Mon Mar 23 20:22:12 1992
|
||||
***************
|
||||
*** 342,348 ****
|
||||
int sig;
|
||||
{
|
||||
signal (sig, SIG_DFL);
|
||||
! #ifndef USG
|
||||
(void) sigsetmask (0);
|
||||
#endif
|
||||
|
||||
--- 342,348 ----
|
||||
int sig;
|
||||
{
|
||||
signal (sig, SIG_DFL);
|
||||
! #if !defined(USG) && !defined(LINUX)
|
||||
(void) sigsetmask (0);
|
||||
#endif
|
||||
|
||||
diff -cr gmake-3.62//job.c gmake-linux//job.c
|
||||
*** gmake-3.62//job.c Thu Oct 24 21:58:34 1991
|
||||
--- gmake-linux//job.c Mon Mar 23 20:10:34 1992
|
||||
***************
|
||||
*** 117,122 ****
|
||||
--- 117,123 ----
|
||||
extern int setgid (), getgid ();
|
||||
#endif /* GNU C library. */
|
||||
|
||||
+ #ifndef LINUX
|
||||
#ifndef USG
|
||||
extern int getdtablesize ();
|
||||
#else
|
||||
***************
|
||||
*** 123,128 ****
|
||||
--- 124,130 ----
|
||||
#include <sys/param.h>
|
||||
#define getdtablesize() NOFILE
|
||||
#endif
|
||||
+ #endif
|
||||
|
||||
extern void wait_to_start_job ();
|
||||
extern int start_remote_job_p ();
|
||||
***************
|
||||
*** 180,186 ****
|
||||
|
||||
extern int fatal_signal_mask;
|
||||
|
||||
! #ifdef USG
|
||||
/* Set nonzero in the interval when it's possible that we may see a dead
|
||||
child that's not in the `children' chain. */
|
||||
static int unknown_children_possible = 0;
|
||||
--- 182,188 ----
|
||||
|
||||
extern int fatal_signal_mask;
|
||||
|
||||
! #if defined(USG) || defined(LINUX)
|
||||
/* Set nonzero in the interval when it's possible that we may see a dead
|
||||
child that's not in the `children' chain. */
|
||||
static int unknown_children_possible = 0;
|
||||
***************
|
||||
*** 192,198 ****
|
||||
static void
|
||||
block_signals ()
|
||||
{
|
||||
! #ifdef USG
|
||||
|
||||
/* Tell child_handler that it might see children that aren't yet
|
||||
in the `children' chain. */
|
||||
--- 194,200 ----
|
||||
static void
|
||||
block_signals ()
|
||||
{
|
||||
! #if defined(USG) || defined(LINUX)
|
||||
|
||||
/* Tell child_handler that it might see children that aren't yet
|
||||
in the `children' chain. */
|
||||
***************
|
||||
*** 216,222 ****
|
||||
static void
|
||||
unblock_signals ()
|
||||
{
|
||||
! #ifdef USG
|
||||
|
||||
(void) SIGNAL (SIGCLD, child_handler);
|
||||
|
||||
--- 218,224 ----
|
||||
static void
|
||||
unblock_signals ()
|
||||
{
|
||||
! #if defined(USG) || defined(LINUX)
|
||||
|
||||
(void) SIGNAL (SIGCLD, child_handler);
|
||||
|
||||
***************
|
||||
*** 396,402 ****
|
||||
if (c == 0)
|
||||
{
|
||||
/* An unknown child died. */
|
||||
! #ifdef USG
|
||||
if (!unknown_children_possible)
|
||||
{
|
||||
#endif
|
||||
--- 398,404 ----
|
||||
if (c == 0)
|
||||
{
|
||||
/* An unknown child died. */
|
||||
! #if defined(USG) || defined(LINUX)
|
||||
if (!unknown_children_possible)
|
||||
{
|
||||
#endif
|
||||
***************
|
||||
*** 407,413 ****
|
||||
ignore_errors_flag);
|
||||
else
|
||||
error ("%s finished.", buf);
|
||||
! #ifdef USG
|
||||
}
|
||||
#endif
|
||||
}
|
||||
--- 409,415 ----
|
||||
ignore_errors_flag);
|
||||
else
|
||||
error ("%s finished.", buf);
|
||||
! #if defined(USG) || defined(LINUX)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
diff -cr gmake-3.62//main.c gmake-linux//main.c
|
||||
*** gmake-3.62//main.c Mon Sep 9 23:36:15 1991
|
||||
--- gmake-linux//main.c Mon Mar 23 19:50:35 1992
|
||||
***************
|
||||
*** 321,329 ****
|
||||
--- 321,333 ----
|
||||
FATAL_SIG (SIGDANGER);
|
||||
#endif
|
||||
FATAL_SIG (SIGFPE);
|
||||
+ #ifdef SIGBUS
|
||||
FATAL_SIG (SIGBUS);
|
||||
+ #endif
|
||||
FATAL_SIG (SIGSEGV);
|
||||
+ #ifdef SIGSYS
|
||||
FATAL_SIG (SIGSYS);
|
||||
+ #endif
|
||||
FATAL_SIG (SIGTERM);
|
||||
#ifdef SIGXCPU
|
||||
FATAL_SIG (SIGXCPU);
|
||||
diff -cr gmake-3.62//make.h gmake-linux//make.h
|
||||
*** gmake-3.62//make.h Sat Oct 26 21:19:59 1991
|
||||
--- gmake-linux//make.h Mon Mar 23 20:18:30 1992
|
||||
***************
|
||||
*** 205,211 ****
|
||||
extern void user_access (), make_access (), child_access ();
|
||||
|
||||
|
||||
! #if defined(USG) && !defined(HAVE_VFORK)
|
||||
#define vfork fork
|
||||
#define VFORK_NAME "fork"
|
||||
#else /* Have vfork or not USG. */
|
||||
--- 205,211 ----
|
||||
extern void user_access (), make_access (), child_access ();
|
||||
|
||||
|
||||
! #if (defined(USG) || defined(LINUX)) && !defined(HAVE_VFORK)
|
||||
#define vfork fork
|
||||
#define VFORK_NAME "fork"
|
||||
#else /* Have vfork or not USG. */
|
||||
***************
|
||||
*** 232,238 ****
|
||||
extern char *ctime ();
|
||||
#endif /* GNU C library or POSIX. */
|
||||
|
||||
! #if defined(USG) || defined(POSIX) && !defined(__GNU_LIBRARY__)
|
||||
extern char *getcwd ();
|
||||
#ifdef PATH_MAX
|
||||
#define getwd(buf) getcwd (buf, PATH_MAX - 2)
|
||||
--- 232,238 ----
|
||||
extern char *ctime ();
|
||||
#endif /* GNU C library or POSIX. */
|
||||
|
||||
! #if defined(USG) || defined(LINUX) || defined(POSIX) && !defined(__GNU_LIBRARY__)
|
||||
extern char *getcwd ();
|
||||
#ifdef PATH_MAX
|
||||
#define getwd(buf) getcwd (buf, PATH_MAX - 2)
|
||||
|
||||
BIN
Linux-0.95/binaries/usr.bin/joe.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.bin/joe.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.bin/tar
Normal file
BIN
Linux-0.95/binaries/usr.bin/tar
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.bin/tex.tar
Normal file
BIN
Linux-0.95/binaries/usr.bin/tex.tar
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.bin/textutils-1.2.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.bin/textutils-1.2.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.bin/uucp-1.03-bin.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.bin/uucp-1.03-bin.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.bin/xcomm.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.bin/xcomm.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.bin/zip-bin.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.bin/zip-bin.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.games/banner.Z
Normal file
BIN
Linux-0.95/binaries/usr.games/banner.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.games/dkbtrace.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.games/dkbtrace.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.games/dungeon.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.games/dungeon.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.games/gnuchess-3.1.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.games/gnuchess-3.1.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.games/mille.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.games/mille.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/binaries/usr.games/nh3p10bin.tar.Z
Normal file
BIN
Linux-0.95/binaries/usr.games/nh3p10bin.tar.Z
Normal file
Binary file not shown.
140
Linux-0.95/docs/CHANGES-0.95a
Normal file
140
Linux-0.95/docs/CHANGES-0.95a
Normal file
@@ -0,0 +1,140 @@
|
||||
CHANGES IN THE LINUX v0.95a ROOT DISKETTE
|
||||
Jim Winstead Jr. - March 17, 1992
|
||||
|
||||
This file mostly contains info about the changes in the root diskette
|
||||
from Linux v0.95/0.12 to Linux v0.95a.
|
||||
|
||||
CHANGES
|
||||
|
||||
With the release of Linux v0.95a, the maintenance of the root diskette
|
||||
has been assumed by Jim Winstead Jr. (jwinstea@jarthur.Claremont.EDU).
|
||||
This means there are a few large changes between the Linux 0.95 and
|
||||
0.12 root floppies and the Linux 0.95a root floppy. These are
|
||||
detailed (as much as I remember them) below:
|
||||
|
||||
- 'bash' has been replaced with 'ash', the BSD 4.3 /bin/sh. This
|
||||
freed up nearly 200k on the root floppy. However, there are
|
||||
some problems with 'ash' that haven't been resolved:
|
||||
|
||||
- sometimes the backspace key will not work on a virtual
|
||||
console. I've found that it usually works on all _but_ one
|
||||
console, so this is only a minor hinderance.
|
||||
|
||||
- 'ash 'supports BSD-style job control, and this has not yet been
|
||||
adapted to Linux's more POSIXish job control. This means
|
||||
that 'ash' does not yet support job control, but it's being
|
||||
worked upon.
|
||||
|
||||
- 'tar' and 'compress' are back on the root floppy. 'tar' is
|
||||
compressed, and both utilities are in /bin.
|
||||
|
||||
- 'pfdisk', a disk partitioner, was added to the root floppy.
|
||||
This makes it (almost) possible to install Linux on a machine
|
||||
without looking at another OS.
|
||||
|
||||
- the file pager 'more' has been added to the floppy. This was
|
||||
added because of the addition of some documentation files on
|
||||
the root floppy.
|
||||
|
||||
- 'cat' has been added to /bin.
|
||||
|
||||
- many utilities have been moved from /usr/bin to /bin, to
|
||||
conform to the Linux Directory Structure Standard (v1.0).
|
||||
These utilities are ones that are 'vital to the restoration of
|
||||
other file systems in the case of a corrupting crash.'
|
||||
|
||||
- 'init' and 'update' have been moved to /etc from /bin. This
|
||||
was done because neither program should be executed from the
|
||||
command line by any user, including root. (That means don't
|
||||
put /etc in your PATH!) This has been a matter of some
|
||||
controversy, but this is how it will stand until the Linux
|
||||
Standards mailing list/committee decides otherwise.
|
||||
|
||||
- tty64, tty65, etc, have been renamed to ttys1, ttys2, etc.
|
||||
|
||||
- the directory /INSTALL was added, which contains some
|
||||
documentation, and three simple shell scripts to make
|
||||
installing Linux on a hard drive partition easier. These are:
|
||||
|
||||
- 'mktree', which makes a directory tree on the specified
|
||||
mounted device.
|
||||
- 'mkdev' which creates the standard devices in the dev
|
||||
directory of the specified mounted device
|
||||
- 'install' which installs the programs on the root diskette
|
||||
to the specified mounted device
|
||||
|
||||
These programs will normally be called with '<name> /mnt'.
|
||||
|
||||
- rootdev is different than the one on v0.95. A couple of days
|
||||
after the release of 0.95, a program called 'rdev' was posted
|
||||
to alt.os.linux that duplicated and extended the functionality
|
||||
of rootdev. This was renamed to rootdev and replaces the old
|
||||
rootdev.
|
||||
|
||||
- agetty was renamed to getty, to be consistent with common Unix
|
||||
practice.
|
||||
|
||||
- an improved fdisk was added that correctly reports extended
|
||||
partitions, (Thanks to Linus!)
|
||||
|
||||
- /dev is complete, or at least more complete than the last few
|
||||
releases of the root diskette, which always seemed to be a
|
||||
major complaint. :)
|
||||
|
||||
- /etc/issue and /etc/motd have been expanded to be a little
|
||||
more informative. (Yeah, I know, big deal! :)
|
||||
|
||||
- chgrp was removed. You can use chown to get the same effect,
|
||||
but you just have to specify an owner, too.
|
||||
|
||||
Many of these changes were discussed on alt.os.linux, or the Linux
|
||||
Standards group, so they may look familiar.
|
||||
|
||||
If you have questions, problems, or complaints about the root
|
||||
diskette, either post to alt.os.linux, or send mail to me at
|
||||
jwinstea@jarthur.Claremont.EDU.
|
||||
|
||||
If you have questions, problems, or complaints about the boot diskette
|
||||
or the kernel itself, post to alt.os.linux or send mail to Linus
|
||||
Torvalds at torvalds@cc.helsinki.fi.
|
||||
|
||||
Remember, the only stupid questions are the ones you don't ask.
|
||||
|
||||
FUTURE CHANGES
|
||||
|
||||
I'm already anticipating some changes for the next release, so here's
|
||||
a sneak preview:
|
||||
|
||||
- shared libraries. These are currently in alpha testing, and
|
||||
will hopefully free up some more room on the root floppy for
|
||||
more goodies.
|
||||
|
||||
- a generic mtools might be added to the root floppy.
|
||||
|
||||
- a better fdisk to replace the current fdisk/pfdisk pair. You
|
||||
won't need to know your drive's geometry for this, and it will
|
||||
know about Linux extended partitions.
|
||||
|
||||
- an improved sh. I'm working on the backspace problem, and
|
||||
adding job control. I'm also going to look at using the GNU
|
||||
readline library for input, as long as it doesn't add
|
||||
substantially to the size of sh.
|
||||
|
||||
- init/getty/login may be removed from the root floppy. The
|
||||
main reason they'll still on there is the backspace problem
|
||||
with ash.
|
||||
|
||||
- improved installation documentation. People have started work
|
||||
on this already - read alt.os.linux for previews.
|
||||
|
||||
- more robust installation scripts. The current ones are quick
|
||||
and dirty, and work well, but I'd like to add better ones.
|
||||
|
||||
- miscellaneous utilities added. I'd really like to add an
|
||||
editor to the root disk, but I haven't found one small enough.
|
||||
Any suggestions?
|
||||
|
||||
- various other things that I can't remember right now.
|
||||
|
||||
Again, mail your questions, comments and suggestions about the root
|
||||
diskette to me at jwinstea@jarthur.Claremont.EDU.
|
||||
1302
Linux-0.95/docs/FAQ-0.95a
Normal file
1302
Linux-0.95/docs/FAQ-0.95a
Normal file
File diff suppressed because it is too large
Load Diff
123
Linux-0.95/docs/INFO-SHEET-04.04.92
Normal file
123
Linux-0.95/docs/INFO-SHEET-04.04.92
Normal file
@@ -0,0 +1,123 @@
|
||||
LINUX INFORMATION SHEET
|
||||
(last updated 13 Jan 1992 (with changes by Linus 4.4.92))
|
||||
|
||||
1. WHAT IS LINUX 0.95a
|
||||
LINUX 0.95a is a freely distributable UNIX clone. It implements a
|
||||
subset of System V and POSIX functionality. LINUX has been written
|
||||
from scratch, and therefore does not contain any AT&T or MINIX
|
||||
code--not in the kernel, the compiler, the utilities, or the libraries.
|
||||
For this reason it can be made available with complete source code by
|
||||
anonymous FTP. LINUX runs only on 386/486 AT-bus machines; porting to
|
||||
non-Intel architectures is likely to be difficult, as the kernel makes
|
||||
extensive use of 386 memory management and task primitives.
|
||||
|
||||
Version 0.95a is still a beta release, but it already provides much
|
||||
of the functionality of a System V.3 kernel. For example, various
|
||||
users have been able to port programs such as bison/flex without having
|
||||
to modify code at all. Another indication of its maturity is that
|
||||
it is now possible to do LINUX kernel development using LINUX itself
|
||||
and freely-available programming tools.
|
||||
|
||||
2. LINUX features
|
||||
- System call compatible with a subset of System V and POSIX
|
||||
- Full multiprogramming (multiple programs can run at once)
|
||||
- Memory paging with copy-on-write
|
||||
- Demand loading of executables
|
||||
- Page sharing of executables
|
||||
- Virtual memory: swapping to disk when out of RAM
|
||||
- POSIX job control
|
||||
- virtual consoles
|
||||
- pty's
|
||||
- some 387-emulation
|
||||
- ANSI compliant C compiler (gcc)
|
||||
- A complete set of compiler writing tools
|
||||
(bison as yacc-replacement, flex as lex replacement)
|
||||
- The GNU 'Bourne again' shell (bash) (as well as 'ash', 'rc' etc)
|
||||
- Micro emacs
|
||||
- most utilities you need for development
|
||||
(cat, cp, kermit, ls, make, etc.)
|
||||
- Over 200 library procedures (atoi, fork, malloc, read, stdio, etc.)
|
||||
- Currently 6 national keyboards: Finnish/US/German/French/British/Danish
|
||||
- Full source code (in C) for the OS is freely distributable
|
||||
- Full source code of the tools can be gotten from many anonymous ftp sites
|
||||
(Almost the entire suite of GNU programs has been ported to Linux.)
|
||||
- Runs in protected mode on 386 and above
|
||||
- Support for extended memory up to 16M on 386 and above
|
||||
- RS-232 serial line support with terminal emulation, kermit, zmodem, etc.
|
||||
- Supports the real time clock
|
||||
|
||||
|
||||
3. HARDWARE REQUIRED
|
||||
- A 386 or 486 machine with an AT-bus. (EISA will probably work, also,
|
||||
but you will need an AT-bus hard disk controller.) Both DX and SX
|
||||
processors will work.
|
||||
- A hard disk implementing the standard AT hard disk interface -- for
|
||||
example, an IDE drive. In addition, some SCSI drives are supported
|
||||
with additional kernel patches.
|
||||
- A high-density disk drive--either 5.25" (1.2MB) or 3.5" (1.44MB).
|
||||
- At least 2 megabytes of RAM. (LINUX will boot in 2 Mb. To use gcc
|
||||
4 MB is a good idea.)
|
||||
- Any video card of the following: Hercules,CGA,EGA,VGA
|
||||
|
||||
In addition, LINUX supports
|
||||
- Up to four serial lines (2 active at a time)
|
||||
- A real time clock
|
||||
|
||||
4. PARTIAL LIST OF UTILITIES INCLUDED IN OR AVAILABLE FOR LINUX 0.95a
|
||||
- The MTOOLS package (reading/writing to DOS filesystems)
|
||||
- The complete GNU filetools (ls, cat, cp, mv, ...)
|
||||
- The GNU C and C++ compiler with GNU assembler, linker, ar, ...
|
||||
- bison
|
||||
- flex
|
||||
- rcs
|
||||
- pmake (BSD 4.3 Reno/BSD 4.4 make)
|
||||
- kermit
|
||||
- Micro emacs
|
||||
- less
|
||||
- mkfs
|
||||
- fsck
|
||||
- mount/umount
|
||||
- TeX, dvips
|
||||
- and lots more...
|
||||
|
||||
5. LINUX BINARIES
|
||||
The LINUX binaries and sources are available at several different
|
||||
anonymous FTP sites. The biggest are:
|
||||
|
||||
nic.funet.fi:/pub/OS/Linux
|
||||
tsx-11.mit.edu:/pub/linux
|
||||
|
||||
|
||||
6. LEGAL STATUS OF LINUX
|
||||
Although LINUX is supplied with the complete source code, it is
|
||||
copyrighted software. Unlike MINIX, however, it is available for free,
|
||||
provided you obey to the rules specified in the LINUX copyright.
|
||||
|
||||
Linux is (C) Linus Torvalds, but the copyright is the GNU copyleft:
|
||||
get a copy of the copyleft at your nearest ftp-archive..
|
||||
|
||||
7. NEWS ABOUT LINUX
|
||||
There are now two newsgroups devoted to linux articles: an older
|
||||
alt.os.linux and the new comp.os.linux group. The alt-group will be
|
||||
phased out as the comp-group gets a wider propagation. Additionally,
|
||||
there are a couple of mailing-lists: linux-activists@niksula.hut.fi is
|
||||
the original mailing-list, and it now supports sub-threads (notably the
|
||||
gcc-2 beta-testing list). There is also a linux-standards mailing list
|
||||
as well as a newsgroup-service for those that can get mail but are
|
||||
unable to read the newsgroups. For the current status of LINUX, do a
|
||||
"finger torvalds@kruuna.helsinki.fi".
|
||||
|
||||
|
||||
8. FUTURE PLANS
|
||||
Work is underway on LINUX version 1.0, which will close some of the
|
||||
gaps in the present implementation. Various people are currently working
|
||||
on:
|
||||
- A more complete virtual filesystem layer
|
||||
- STREAMS
|
||||
- Interprocess communication
|
||||
- IEEE POSIX P1003.1 / P1003.2 compatibility
|
||||
- more complete SCSI support
|
||||
If you want to help, mail the various activists or post to the newsgroups.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
157
Linux-0.95/docs/INSTALL-0.95a
Normal file
157
Linux-0.95/docs/INSTALL-0.95a
Normal file
@@ -0,0 +1,157 @@
|
||||
INSTALL NOTES FOR LINUX v0.95a
|
||||
Jim Winstead Jr. - March 17, 1992
|
||||
|
||||
This file contains basic instructions for installing Linux v0.95a.
|
||||
More detailed instructions are being written by others. Read
|
||||
alt.os.linux for details on this, and to see preliminary drafts.
|
||||
|
||||
COPYRIGHT
|
||||
|
||||
Linux 0.95a is NOT public domain software, but is copyrighted by Linus
|
||||
Torvalds (torvalds@cc.helsinki.fi). The copyright terms follow the
|
||||
GNU Copyleft. See the file COPYING from any GNU software package for
|
||||
the finer points. Note that the unistd library functions and all
|
||||
library functions written by Linus Torvalds are exempt from this
|
||||
copyright, and you may use them as you wish.
|
||||
|
||||
INSTALLATION
|
||||
|
||||
1) First, and absolutely the most important step, MAKE BACKUPS OF YOUR
|
||||
SYSTEM! This system won't do anything nearly as nasty as coredump all
|
||||
over your harddrive (see 386BSD v0.0), but it is quite easy to
|
||||
accidently screw something up while installing.
|
||||
|
||||
2) Test out the Linux v0.95a boot disk with the Linux v0.95a root
|
||||
disk. If you are unable to get the boot disk to work properly on
|
||||
your system, try posting to alt.os.linux, or contacting Linus.
|
||||
|
||||
Notice that Linux (as of v0.95) contains an init/getty/login suite,
|
||||
and this will start up 'login' on the first four virtual consoles,
|
||||
accessed by Left-Alt-F[1234]. If you experience problems on one
|
||||
virtual console, it should be possible to switch to another one.
|
||||
|
||||
(There is a good chance the backspace key will not work with
|
||||
/bin/sh on your first virtual console, as this how it often behaves
|
||||
on my machine. I've noticed that it usually works in the other
|
||||
virtual consoles, however.)
|
||||
|
||||
3) Run the 'fdisk' program on the root floppy. This will tell you how
|
||||
each of your harddrives is partitioned. Note that the names of the
|
||||
hard drive partitions has changed from v0.12, and 'fdisk' now
|
||||
properly reports the new device names (unlike the fdisk with v0.95).
|
||||
|
||||
If 'fdisk' tells you about any partitions at all, Linux can
|
||||
successfully read at least part of your harddisk, and you will most
|
||||
likely be able to install Linux on your harddrive.
|
||||
|
||||
If you have used previous versions of Linux, you will notice that
|
||||
'fdisk' now recognizes extended partitions. Support for this in
|
||||
the kernel, however, is largely untested. If you're feeling brave,
|
||||
go ahead and try, and report any problems to Linus.
|
||||
|
||||
4) Make sure you have a free (preferably primary) partition on your
|
||||
hard drive. If you want to repartition your harddrive, you can use
|
||||
the pfdisk program on the root floppy. See pfdisk.man in the
|
||||
/INSTALL directory for more details on using this program. (NOTE:
|
||||
you will need to know your hard drives disk geometry to use pfdisk.
|
||||
You can find this out by examining your CMOS setup on most computers.)
|
||||
|
||||
5) If you have used pfdisk to change your partition table, be sure to
|
||||
reboot Linux now, so the new partition table will be recognized by
|
||||
Linux.
|
||||
|
||||
6) Use 'fdisk' again to check the partitions on your hard drive, and
|
||||
use 'mkfs' to make a Linux (minix) filesystem on the partition you
|
||||
want to be using for Linux. The proper command is "mkfs
|
||||
/dev/hdX nnn" where X is the partition (i.e. a1, a2, b3, etc.) and
|
||||
nnn is the size in blocks (kilobytes) of the partition as reported
|
||||
by fdisk. You should be able to use the size of the partitions to
|
||||
tell them apart.
|
||||
|
||||
7) Mount the new filesystem. This can be done by using "mount
|
||||
/dev/hdX /mnt", which will mount the partition into the directory
|
||||
/mnt.
|
||||
|
||||
8) Run the script in /INSTALL called 'mktree'. This will create a
|
||||
bare directory tree built down from the specified directory. So,
|
||||
for a standard installation, you would use "mktree /mnt", which
|
||||
would build the bare directory tree starting from /mnt.
|
||||
|
||||
9) Run the script in /INSTALL called 'mkdev'. This will create the
|
||||
standard Linux devices in the directory 'dev' in the specified
|
||||
directory. For a standard installtion, this would mean typing
|
||||
'mkdev /mnt' to create the devices in /mnt/dev.
|
||||
|
||||
NOTE: This step is really optional, since the 'install' script
|
||||
(next step) will do this if it sees you haven't.
|
||||
|
||||
10) Run the script in /INSTALL called 'install'. This will copy over
|
||||
the binary programs from the root disk to the directory tree on
|
||||
the specified directory. This means typing 'install /mnt' for a
|
||||
standard installation.
|
||||
|
||||
NOTE: (for those upgrading from previous versions of Linux)
|
||||
|
||||
The 'install' script uses the +interactive switch for copying
|
||||
files from /etc, which means you can tell it whether or not to
|
||||
overwrite any of these files. 'install' will also go through
|
||||
your /usr/bin and /bin directories and ask you if it should
|
||||
remove any incorrectly placed files. (Such as /bin/update and
|
||||
/bin/init, which have both been moved to /etc.)
|
||||
|
||||
11) You should now have a complete (but very basic) root filesystem on
|
||||
your harddrive. To be able to boot from floppy with this as your
|
||||
root filesystem, you will have to edit the boot diskette. This is
|
||||
done by modifying the word at offset 508 (decimal) with a program
|
||||
such as Norton's Disk Editor, or use pboot.exe (available where
|
||||
you got this file, the boot disk and the root disk, hopefully.)
|
||||
|
||||
This word is in 386-order (that is, least-significant byte first),
|
||||
which means it should look like one of the following:
|
||||
|
||||
LSB MSB - device
|
||||
--------------------------
|
||||
01 03 - /dev/hda1 LSB = Least-Significant Byte
|
||||
02 03 - /dev/hda2 MSB = Most-Significant Byte
|
||||
03 03 - /dev/hda3
|
||||
04 03 - /dev/hda4
|
||||
|
||||
41 03 - /dev/hdb1
|
||||
42 03 - /dev/hdb2
|
||||
43 03 - /dev/hdb3
|
||||
44 03 - /dev/hdb4
|
||||
|
||||
The numbers are in hex, and if you're editing the boot diskette by
|
||||
hand, these two bytes should initially be 00 00 (and are followed
|
||||
by two non-zero bytes).
|
||||
|
||||
Note that pboot.exe predates Linux 0.95a, so some of the
|
||||
information it presents is inaccurate (it refers to the old hd*
|
||||
naming scheme). The codes to use are as above, but with the most-
|
||||
significant byte first. (So /dev/hda1 = 0301, /dev/hda2 = 0302,
|
||||
etc.)
|
||||
|
||||
12) You should now be able to boot from this diskette and it will use
|
||||
your new Linux partition as the root partition. You'll notice,
|
||||
however, that you can't do a whole lot with just the programs on
|
||||
the root diskette. You'll need to get further packages from
|
||||
whereever you got the root and boot diskettes, and read these from
|
||||
a floppy using tar and compress. (Simple instructions: Download
|
||||
the file to DOS, use rawrite to write the tar file to diskette.
|
||||
Use 'tar zxvf /dev/<floppy>' to read the file from floppy, where
|
||||
<floppy> is the appropriate floppy device. (PS0 is a 1.44 meg
|
||||
3.5" as A:, PS1 is a 1.44 meg as B:, at0 is a 1.2 meg as A:, at1
|
||||
is a 1.2 meg as B:.)
|
||||
|
||||
13) Before you ever reboot your machine when it's running Linux, you
|
||||
should run 'sync'. This flushes Linux's disk buffers, making sure
|
||||
everything has been written to disk. Failing to do this could
|
||||
result in badly corrupted filesystems.
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
These instructions are not the best, but should be enough to get you
|
||||
going. If you have more questions, either post on alt.os.linux, or
|
||||
send mail to me (jwinstea@jarthur.Claremont.EDU), or to Linus
|
||||
(torvalds@cc.helsinki.fi). Remember, the only stupid questions are
|
||||
the ones that you don't ask.
|
||||
59
Linux-0.95/docs/README-0.95c+
Normal file
59
Linux-0.95/docs/README-0.95c+
Normal file
@@ -0,0 +1,59 @@
|
||||
This is release 0.95c+ of the linux kernel - it contains some
|
||||
enhancements and bugfixes to the 0.95a kernel, as well as some minor
|
||||
fixes relative to the last alpha-patch (0.95c). The release is
|
||||
available as
|
||||
|
||||
- binary (bootimage-0.95c+.Z)
|
||||
- full source (linux-0.95c+.tar.Z)
|
||||
- patches rel. to 0.95c (diff-0.95c.c+.Z)
|
||||
- patches rel. to 0.95a (diff-0.95a.c+.Z)
|
||||
|
||||
NOTE TO PATCHERS!! Before patching, do this:
|
||||
- make an empty include-file linux/include/checkpoint.h
|
||||
- rename linux/kernel/math/math_emulate.c as just emulate.c
|
||||
That is, from the linux source directory do:
|
||||
|
||||
$ > include/checkpoint.h
|
||||
$ mv kernel/math/math_emulate.c kernel/math/emulate.c
|
||||
|
||||
Also note that patching from the 0.95a version is probably not worth it
|
||||
as it's easier to get the complete new sources.
|
||||
|
||||
Although I'm making binaries and the full source available, this isn't
|
||||
really a major release: there is no new rootdisk, and this is more "my
|
||||
current kernel" and not really tested (I put in the last changes 5
|
||||
minutes before packing all this up).
|
||||
|
||||
The reason I'm making this available is that with the advent of gcc-2.1
|
||||
and the VFS-library the old kernel doesn't really do everything the new
|
||||
libraries want: the readdir system call is needed to get things working.
|
||||
The default compiler after this release is considered to be gcc-2.0 or
|
||||
higher (although 1.40 still works - you don't /have/ to change). People
|
||||
who are unable or unwilling to patch a new kernel shouldn't be unable to
|
||||
run the new binaries.
|
||||
|
||||
This kernel should be totally backwards compatible, so no binaries
|
||||
should break. I resisted adding the changed mount() system call into
|
||||
this release: the next major release will have a third parameter for
|
||||
mount() - the filesystem type name (ie mount /dev/xxx /mnt minix).
|
||||
|
||||
Fixes relative to 0.95c:
|
||||
|
||||
- corrected two minor bugs in readdir() (thanks to R Card)
|
||||
|
||||
- lp-patches are in. I've edited them a bit, and will probably do some
|
||||
more editing in the future, but they seem to work fine.
|
||||
|
||||
- 8-bit ISO latin output to the console (ie part of Johan Myreens
|
||||
general latin-1 patches: the keyboard patches aren't there)
|
||||
|
||||
- other minor bug-fixes (thanks to HH Bergman for noticing the
|
||||
timer-table bug)
|
||||
|
||||
Things I haven't had time to look into yet:
|
||||
|
||||
- select still has some problems
|
||||
- reports that VC-output sometimes isdiscarded (never seen it myself)
|
||||
- probably other things I've simply forgot...
|
||||
|
||||
Linus
|
||||
265
Linux-0.95/docs/RELNOTES-0.95
Normal file
265
Linux-0.95/docs/RELNOTES-0.95
Normal file
@@ -0,0 +1,265 @@
|
||||
|
||||
|
||||
RELEASE NOTES FOR LINUX v0.95
|
||||
Linus Torvalds, March 7, 1992
|
||||
|
||||
|
||||
This is file mostly contains info on changed features of Linux, and
|
||||
using old versions as a help-reference might be a good idea.
|
||||
|
||||
|
||||
COPYRIGHT
|
||||
|
||||
Linux-0.95 is NOT public domain software, but is copyrighted by me. The
|
||||
copyright conditions are the same as those imposed by the GNU copyleft:
|
||||
get a copy of the GNU copyleft at any major ftp-site (if it carries
|
||||
linux, it probably carries a lot of GNU software anyway, and they all
|
||||
contain the copyright).
|
||||
|
||||
The copyleft is pretty detailed, but it mostly just means that you may
|
||||
freely copy linux for your own use, and redistribute all/parts of it, as
|
||||
long as you make source available (not necessarily in the same
|
||||
distribution, but you make it clear how people can get it for nothing
|
||||
more than copying costs). Any changes you make that you distribute will
|
||||
also automatically fall under the GNU copyleft.
|
||||
|
||||
NOTE! The linux unistd library-functions (the low-level interface to
|
||||
linux: system calls etc) are excempt from the copyright - you may use
|
||||
them as you wish, and using those in your binary files won't mean that
|
||||
your files are automatically under the GNU copyleft. This concerns
|
||||
/only/ the unistd-library and those (few) other library functions I have
|
||||
written: most of the rest of the library has it's own copyrights (or is
|
||||
public domain). See the library sources for details of those.
|
||||
|
||||
|
||||
INSTALLATION
|
||||
|
||||
This is a SHORT install-note. The installation is very similar to 0.11
|
||||
and 0.12, so you should read INSTALL-0.11 too. There are a couple of
|
||||
programs you will need to install linux: something that writes disk
|
||||
images (rawrite.exe or NU or...) and something that can create harddisk
|
||||
partitions (fdisk under xenix or older versions of dos, edpart.exe or
|
||||
something like that).
|
||||
|
||||
NOTE! Repartitioning your harddisk will destroy all data on it (well,
|
||||
not exactly, but if you know enough to get back the data you probably
|
||||
didn't need this warning). So be careful.
|
||||
|
||||
READ THIS THROUGH, THEN READ INSTALL-0.11, AND IF YOU ARE SURE YOU KNOW
|
||||
WHAT YOU ARE DOING, CONTINUE. OTHERWISE, PANIC. OR WRITE ME FOR
|
||||
EXPLANATIONS. OR DO ANYTHING BUT INSTALL LINUX - IT'S VERY SIMPLE, BUT
|
||||
IF YOU DON'T KNOW WHAT YOU ARE DOING YOU'LL PROBABLY BE SORRY. I'D
|
||||
RATHER ANSWER A FEW UNNECESSARY MAILS THAN GET MAIL SAYING "YOU KILLED
|
||||
MY HARDDISK, BASTARD. I'M GOING TO FIND YOU, AND YOU'LL BE SORRY WHEN I
|
||||
DO".
|
||||
|
||||
Minumum files needed:
|
||||
|
||||
RELNOTES-0.95 (this file)
|
||||
INSTALL-0.11 (+ any other docs you might find: the FAQ etc)
|
||||
bootimage-0.96.Z
|
||||
rootimage-0.95.Z
|
||||
rootimage-0.12.Z (for tar+compress)
|
||||
rawrite.exe
|
||||
some disk partitioner
|
||||
|
||||
1) back up everything you have on your harddisk - linux-0.95 is still in
|
||||
beta and might do weird things. The only thing I guarantee is that
|
||||
it has worked fine on /my/ machine - for all I know it might eat your
|
||||
harddisk and spit it out in small pieces on any other hardware.
|
||||
|
||||
2) Test out the linux boot-disk with the root file system. If it
|
||||
doesn't work, check the hardware requirements, and mail me if you
|
||||
still think it should work. I might not be able to help you, but
|
||||
your bug-report would still be appreciated.
|
||||
|
||||
Linux-0.95 now has an init/login: there should be 4 logins started on
|
||||
the first 4 virtual consoles. Log in as root (no password), and test
|
||||
it out. Change to the other logins by pressing left-alt + FN[1-4].
|
||||
Note that booting up with a floppy as root is S..L..O..W.. - the
|
||||
floppy driver has been optimized for sequential access (backups etc),
|
||||
and trashes somewhat with demand-loading.
|
||||
|
||||
Test that linux can read your harddisk at least partly: run the fdisk
|
||||
program on the root-disk, and see if it barfs. If it tells you about
|
||||
any partitions at all, linux can successfully read at least part of
|
||||
your harddisk.
|
||||
|
||||
NOTE! Harddisk device names and numbers have changed between versions
|
||||
0.12 and 0.95: the new numbering system was needed for the extended
|
||||
partitions, and a new naming scheme was in order so that people
|
||||
wouldn't cunfuse the old devices with the new ones.
|
||||
|
||||
The new harddisk device names are: /dev/hd followed by an 'a' for the
|
||||
first drive, or a 'b' for the second one. After that comes the
|
||||
partition number, 1-4 for the primary partitions, 5- for possible
|
||||
extended partitions. No number means the complete disk. Like this:
|
||||
|
||||
/dev/hda the whole first harddisk (old: /dev/hd0)
|
||||
/dev/hdb3 partition nr 3 on the second disk (old: /dev/hd8)
|
||||
|
||||
3) Make sure that you have a free /primary/ partition. There can be 4
|
||||
primary partitions per drive: newer DOS fdisks seem to be able to
|
||||
create only 2 (one primary and one extended). In that case use some
|
||||
other partitioning software: edpart.exe etc. Linux fdisk currently
|
||||
only tells you the partition info - it doesn't write to the disk.
|
||||
|
||||
Remember to check how big your partition was, as that can be used to
|
||||
tell which device Linux thinks it is.
|
||||
|
||||
NOTE! Linux-0.95 /might/ recognize extended partitions: but the code
|
||||
for this is utterly untested, as I don't have any of those. Do NOT
|
||||
use the extended partitions unless you can verify that they are
|
||||
indeed correctly set up - if my routines are wrong, writing to the
|
||||
extended partitions might just overwrite some other partition
|
||||
instead. Not nice.
|
||||
|
||||
4) Boot up linux again, fdisk to make sure you now have the new
|
||||
partition, and use mkfs to make a filesystem on one of the partitions
|
||||
fdisk reports. Write "mkfs -c /dev/hdX nnn" where X is the device
|
||||
number reported by linux fdisk, and nnn is the size - also reported
|
||||
by fdisk. nnn is the size in /blocks/, ie kilobytes. You should be
|
||||
able to use the size info to determine which partition is represented
|
||||
by which device name.
|
||||
|
||||
5) Mount the new disk partition: "mount /dev/hdX /mnt". Copy over the
|
||||
root filesystem to the harddisk, eg like this:
|
||||
|
||||
# for i in bin dev etc usr tmp
|
||||
# do
|
||||
# cp +recursive /$i /mnt
|
||||
# done
|
||||
|
||||
You caanot use just "cp +recursive / /mnt", as that will result in a
|
||||
loop.
|
||||
|
||||
6) Sync the filesystem after you have played around enough, and reboot.
|
||||
|
||||
# sync
|
||||
# lo
|
||||
|
||||
(none) login: sync
|
||||
<wait for it to sync>
|
||||
ctrl-alt-del
|
||||
|
||||
THIS IS IMPORTANT! NEVER EVER FORGET TO SYNC BEFORE KILLING THE MACHINE.
|
||||
|
||||
7) Change the bootdisk to understand which partition it should use as a
|
||||
root filesystem. See INSTALL-0.11: it's still the word at offset
|
||||
508 into the image. You should be up and running.
|
||||
|
||||
|
||||
8) When you've successfully started up with your harddisk as root, you
|
||||
can mount the older rootimage (rootimage-0.12) from a floppy, and
|
||||
copy over any files you find there that weren't on the newer
|
||||
root-image.
|
||||
|
||||
Mounting a floppy is easy: make the directory /floppy, and write:
|
||||
|
||||
# mount /dev/PS0 /floppy (if you have a 3.5" drive)
|
||||
|
||||
or
|
||||
|
||||
# mount /dev/at0 /floppy (for 5.25" floppies)
|
||||
|
||||
After that the files can be copied to your harddisk, eg:
|
||||
|
||||
# cp /floppy/usr/bin/compress /usr/bin
|
||||
# ln -s /usr/bin/compress /usr/bin/compress
|
||||
# cp /floppy/usr/bin/tar.Z /usr/bin
|
||||
# uncompress /usr/bin/tar.Z
|
||||
|
||||
That's it. Now go back and read the INSTALL-0.11, until you are sure you
|
||||
know what you are doing.
|
||||
|
||||
|
||||
New features of 0.95, in order of appearance
|
||||
(ie in the order you see them)
|
||||
|
||||
Init/login
|
||||
|
||||
Yeah, thanks to poe (Peter Orbaeck (sp?)), linux now boots up like a
|
||||
real unix with a login-prompt. Login as root (no passwd), and change
|
||||
your /etc/passwd to your hearts delight (and add other logins in
|
||||
/etc/inittab etc).
|
||||
|
||||
Bash is even bigger
|
||||
|
||||
It's really a bummer to boot up from floppies: bash takes a long time to
|
||||
load. Bash is also now so big that I couldn't fit compress and tar onto
|
||||
the root-floppy: You'll probably want the old rootimage-0.12 just in
|
||||
order to get tar+compress onto your harddisk. If anybody has pointers
|
||||
to a simple shell that is freely distributable, it might be a good idea
|
||||
to use that for the root-diskette.
|
||||
|
||||
Especially with a small buffer-cache, things aren't fun. Don't worry:
|
||||
linux runs much better on a harddisk.
|
||||
|
||||
Virtual consoles on any (?) hardware.
|
||||
|
||||
You can select one of several consoles by pressing the left alt-key and
|
||||
a function key at the same time. Linux should report the number of
|
||||
virtual consoles available upon bootup. /dev/tty0 is now "the current"
|
||||
screen, /dev/tty1 is the main console, and /dev/tty2-8 can exist
|
||||
depending on your text-mode or card.
|
||||
|
||||
The virtual consoles also have some new screen-handling commands: they
|
||||
confirm even better to vt200 control codes than 0.11. Special graphic
|
||||
characters etc: you can well use them as terminals to VMS (although
|
||||
that's a shameful waste of resources), and the PF1-4 keys work somewhat
|
||||
in the application-key mode.
|
||||
|
||||
Symbolic links.
|
||||
|
||||
0.95 now allows symlinks to point to other symlinks etc (the maximum
|
||||
depth is a rather arbitrary 5 links). 0.12 didn't like more than one
|
||||
level of indirection.
|
||||
|
||||
Virtual memory.
|
||||
|
||||
VM under 0.95 should be better than under 0.12: no more lockups (as far
|
||||
as I have seen), and you can now swap to the filesystem as well as to a
|
||||
special partition. There are two programs to handle this: mkswap to set
|
||||
up a swap-file/partition and swapon to start up swapping.
|
||||
|
||||
mkswap needs either a partition or a file that already exists to make a
|
||||
swap-area. To make a swap-file, do this:
|
||||
|
||||
# dd bs=1024 count=NN if=/dev/hda of=swapfile
|
||||
# mkswap swapfile NN
|
||||
|
||||
The first command just makes a file that is NN blocks long (initializing
|
||||
it from /dev/hda, but that could be anything). The second command then
|
||||
writes the necessary setup-info into the file. To start swapping, write
|
||||
|
||||
# swapon swapfile
|
||||
|
||||
NOTE! 'dd' isn't on the rootdisk: you have to install some things onto
|
||||
the harddisk before you can get up and running.
|
||||
|
||||
NOTE2! When linux runs totally out of virtual memory, things slow down
|
||||
dramatically. It tries to keep on running as long as it can, but at
|
||||
least it shouldn't lock up any more. ^C should work, although you might
|
||||
have to wait a while for it..
|
||||
|
||||
Faster floppies
|
||||
|
||||
Ok, you don't notice this much when booting up from a floppy: bash has
|
||||
grown, so it takes longer to load, and the optimizations work mostly
|
||||
with sequential accesses. When you start un-taring floppies to get the
|
||||
programs onto your harddisk, you'll notice that it's much faster now.
|
||||
That should be about the only use for floppies under a unix: nobody in
|
||||
their right mind uses floppies as filesystems.
|
||||
|
||||
Better FS-independence
|
||||
|
||||
Hopefully you'll never even notice this, but the filesystem has been
|
||||
partly rewritten to make it less minix-fs-specific. I haven't
|
||||
implemented all the VFS-patches I got, so it's still not ready, but it's
|
||||
getting there, slowly.
|
||||
|
||||
And that's it, I think.
|
||||
|
||||
Happy hacking.
|
||||
|
||||
Linus (torvalds@kruuna.helsinki.fi)
|
||||
163
Linux-0.95/docs/RELNOTES-0.95a
Normal file
163
Linux-0.95/docs/RELNOTES-0.95a
Normal file
@@ -0,0 +1,163 @@
|
||||
|
||||
RELEASE NOTES FOR LINUX v0.95a
|
||||
Linus Torvalds, March 17, 1992
|
||||
|
||||
|
||||
This is file mostly contains info on changed features of Linux, and
|
||||
using old versions as a help-reference might be a good idea.
|
||||
|
||||
COPYRIGHT
|
||||
|
||||
Linux-0.95a is NOT public domain software, but is copyrighted by me. The
|
||||
copyright conditions are the same as those imposed by the GNU copyleft:
|
||||
get a copy of the GNU copyleft at any major ftp-site (if it carries
|
||||
linux, it probably carries a lot of GNU software anyway, and they all
|
||||
contain the copyright).
|
||||
|
||||
The copyleft is pretty detailed, but it mostly just means that you may
|
||||
freely copy linux for your own use, and redistribute all/parts of it, as
|
||||
long as you make source available (not necessarily in the same
|
||||
distribution, but you make it clear how people can get it for nothing
|
||||
more than copying costs). Any changes you make that you distribute will
|
||||
also automatically fall under the GNU copyleft.
|
||||
|
||||
NOTE! The linux unistd library-functions (the low-level interface to
|
||||
linux: system calls etc) are excempt from the copyright - you may use
|
||||
them as you wish, and using those in your binary files won't mean that
|
||||
your files are automatically under the GNU copyleft. This concerns
|
||||
/only/ the unistd-library and those (few) other library functions I have
|
||||
written: most of the rest of the library has it's own copyrights (or is
|
||||
public domain). See the library sources for details of those.
|
||||
|
||||
|
||||
NEW FEATURES OF 0.95a
|
||||
|
||||
|
||||
0.95a is mainly a bug-fix release: it didn't even get it's own version
|
||||
number. Plain 0.95 fixed a lot of bugs in 0.12, but also introduced
|
||||
totally new bugs: 0.95a tries to correct these. The bugs corrected
|
||||
(knock wood) are:
|
||||
|
||||
- floppy and harddisk drivers should now once more work with most
|
||||
hardware: I'd be interested in reports of "unexpected HD interrupt"
|
||||
and "reset-floppy called" with the new kernel.
|
||||
|
||||
- A rather serious tty-bug corrected: this one messed up the screen
|
||||
under 0.95, and switched characters over the serial lines. Under
|
||||
extreme circumstances it could even crash the machine.
|
||||
|
||||
- ptrace had a bug: hopefully it works now.
|
||||
|
||||
- The extended partitions didn't work under 0.95, although most of the
|
||||
code was there. Please somebody tell me it works under 0.95a.
|
||||
|
||||
- the 0.95 fdisk was broken: a new one with the new root-floppy should
|
||||
clear up the confusion.
|
||||
|
||||
- select() and the sleep-wakeup code had fundamental (but relatively
|
||||
benign) problems under 0.95 (and all earlier versions). The sleeping
|
||||
code is totally redesigned, and select should work better even under
|
||||
load.
|
||||
|
||||
One actual new feature, not just a bug-fix:
|
||||
|
||||
- ser3-4 support is there, although I've been unable to test it (as I
|
||||
haven't got more than ser2). NOTE! Due to AT hardware limitations,
|
||||
ser1 cannot be active at the same time as ser3, and likewise ser2 and
|
||||
ser4 are mutually exclusive. The interrupt-handlers should have no
|
||||
problems with shared interrupts, but the actual hardware probably has,
|
||||
so the kernel disables interrupts from one serial line when the other
|
||||
one is opened.
|
||||
|
||||
- faster default keyrepeat rate: this is going to need some getting used
|
||||
to, but is extremely practical especially with bigger screen sizes.
|
||||
|
||||
- VGA cards that aren't recognized at bootup are put into the 80x50
|
||||
character mode if <enter> was pressed when asking about SVGA modes.
|
||||
|
||||
|
||||
NEW FEATURES OF 0.95
|
||||
|
||||
Init/login
|
||||
|
||||
Yeah, thanks to poe (Peter Orbaeck (sp?)), linux now boots up like a
|
||||
real unix with a login-prompt. Login as root (no passwd), and change
|
||||
your /etc/passwd to your hearts delight (and add other logins in
|
||||
/etc/inittab etc).
|
||||
|
||||
Virtual consoles on any (?) hardware.
|
||||
|
||||
You can select one of several consoles by pressing the left alt-key and
|
||||
a function key at the same time. Linux should report the number of
|
||||
virtual consoles available upon bootup. /dev/tty0 is now "the current"
|
||||
screen, /dev/tty1 is the main console, and /dev/tty2-8 can exist
|
||||
depending on your text-mode or card.
|
||||
|
||||
The virtual consoles also have some new screen-handling commands: they
|
||||
confirm even better to vt200 control codes than 0.11. Special graphic
|
||||
characters etc: you can well use them as terminals to VMS (although
|
||||
that's a shameful waste of resources), and the PF1-4 keys work somewhat
|
||||
in the application-key mode.
|
||||
|
||||
Extended vt200 emulation
|
||||
|
||||
0.95 contains code to handle a vt200 application keymap mode: the cursor
|
||||
keys send slightly different codes when in application mode, and the
|
||||
numeric keyboard tries to emulate the vt200 application keys. This
|
||||
probably isn't complete yet.
|
||||
|
||||
Symbolic links.
|
||||
|
||||
0.95 now allows symlinks to point to other symlinks etc (the maximum
|
||||
depth is a rather arbitrary 5 links). 0.12 didn't like more than one
|
||||
level of indirection.
|
||||
|
||||
Virtual memory.
|
||||
|
||||
VM under 0.95 should be better than under 0.12: no more lockups (as far
|
||||
as I have seen), and you can now swap to the filesystem as well as to a
|
||||
special partition. There are two programs to handle this: mkswap to set
|
||||
up a swap-file/partition and swapon to start up swapping.
|
||||
|
||||
mkswap needs either a partition or a file that already exists to make a
|
||||
swap-area. To make a swap-file, do this:
|
||||
|
||||
# dd bs=1024 count=NN if=/dev/hda of=swapfile
|
||||
# mkswap swapfile NN
|
||||
|
||||
The first command just makes a file that is NN blocks long (initializing
|
||||
it from /dev/hda, but that could be anything). The second command then
|
||||
writes the necessary setup-info into the file. To start swapping, write
|
||||
|
||||
# swapon swapfile
|
||||
|
||||
NOTE! 'dd' isn't on the rootdisk: you have to install some things onto
|
||||
the harddisk before you can get up and running.
|
||||
|
||||
NOTE2! When linux runs totally out of virtual memory, things slow down
|
||||
dramatically. It tries to keep on running as long as it can, but at
|
||||
least it shouldn't lock up any more. ^C should work, although you might
|
||||
have to wait a while for it..
|
||||
|
||||
Faster floppies
|
||||
|
||||
Ok, you don't notice this much when booting up from a floppy: bash has
|
||||
grown, so it takes longer to load, and the optimizations work mostly
|
||||
with sequential accesses. When you start un-taring floppies to get the
|
||||
programs onto your harddisk, you'll notice that it's much faster now.
|
||||
That should be about the only use for floppies under a unix: nobody in
|
||||
their right mind uses floppies as filesystems.
|
||||
|
||||
Better FS-independence
|
||||
|
||||
Hopefully you'll never even notice this, but the filesystem has been
|
||||
partly rewritten to make it less minix-fs-specific. I haven't
|
||||
implemented all the VFS-patches I got, so it's still not ready, but it's
|
||||
getting there, slowly.
|
||||
|
||||
|
||||
And that's it, I think.
|
||||
|
||||
Happy hacking.
|
||||
|
||||
Linus (torvalds@kruuna.helsinki.fi)
|
||||
59
Linux-0.95/docs/RELNOTES-0.95c+
Normal file
59
Linux-0.95/docs/RELNOTES-0.95c+
Normal file
@@ -0,0 +1,59 @@
|
||||
This is release 0.95c+ of the linux kernel - it contains some
|
||||
enhancements and bugfixes to the 0.95a kernel, as well as some minor
|
||||
fixes relative to the last alpha-patch (0.95c). The release is
|
||||
available as
|
||||
|
||||
- binary (bootimage-0.95c+.Z)
|
||||
- full source (linux-0.95c+.tar.Z)
|
||||
- patches rel. to 0.95c (diff-0.95c.c+.Z)
|
||||
- patches rel. to 0.95a (diff-0.95a.c+.Z)
|
||||
|
||||
NOTE TO PATCHERS!! Before patching, do this:
|
||||
- make an empty include-file linux/include/checkpoint.h
|
||||
- rename linux/kernel/math/math_emulate.c as just emulate.c
|
||||
That is, from the linux source directory do:
|
||||
|
||||
$ > include/checkpoint.h
|
||||
$ mv kernel/math/math_emulate.c kernel/math/emulate.c
|
||||
|
||||
Also note that patching from the 0.95a version is probably not worth it
|
||||
as it's easier to get the complete new sources.
|
||||
|
||||
Although I'm making binaries and the full source available, this isn't
|
||||
really a major release: there is no new rootdisk, and this is more "my
|
||||
current kernel" and not really tested (I put in the last changes 5
|
||||
minutes before packing all this up).
|
||||
|
||||
The reason I'm making this available is that with the advent of gcc-2.1
|
||||
and the VFS-library the old kernel doesn't really do everything the new
|
||||
libraries want: the readdir system call is needed to get things working.
|
||||
The default compiler after this release is considered to be gcc-2.0 or
|
||||
higher (although 1.40 still works - you don't /have/ to change). People
|
||||
who are unable or unwilling to patch a new kernel shouldn't be unable to
|
||||
run the new binaries.
|
||||
|
||||
This kernel should be totally backwards compatible, so no binaries
|
||||
should break. I resisted adding the changed mount() system call into
|
||||
this release: the next major release will have a third parameter for
|
||||
mount() - the filesystem type name (ie mount /dev/xxx /mnt minix).
|
||||
|
||||
Fixes relative to 0.95c:
|
||||
|
||||
- corrected two minor bugs in readdir() (thanks to R Card)
|
||||
|
||||
- lp-patches are in. I've edited them a bit, and will probably do some
|
||||
more editing in the future, but they seem to work fine.
|
||||
|
||||
- 8-bit ISO latin output to the console (ie part of Johan Myreens
|
||||
general latin-1 patches: the keyboard patches aren't there)
|
||||
|
||||
- other minor bug-fixes (thanks to HH Bergman for noticing the
|
||||
timer-table bug)
|
||||
|
||||
Things I haven't had time to look into yet:
|
||||
|
||||
- select still has some problems
|
||||
- reports that VC-output sometimes isdiscarded (never seen it myself)
|
||||
- probably other things I've simply forgot...
|
||||
|
||||
Linus
|
||||
BIN
Linux-0.95/docs/gcc+kernel.notes.Z
Normal file
BIN
Linux-0.95/docs/gcc+kernel.notes.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/docs/install.notes.Z
Normal file
BIN
Linux-0.95/docs/install.notes.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/docs/kernel.notes.Z
Normal file
BIN
Linux-0.95/docs/kernel.notes.Z
Normal file
Binary file not shown.
279
Linux-0.95/docs/linux-fs-standard
Normal file
279
Linux-0.95/docs/linux-fs-standard
Normal file
@@ -0,0 +1,279 @@
|
||||
From: abc@banjo.concert.net (Alan B Clegg)
|
||||
Subject: Linux File System Document Revision 1.0
|
||||
Date: 9 Mar 92 14:33:45 GMT
|
||||
|
||||
Before I get a flamefull response, let me tell everyone that this document has
|
||||
been through several revisions, and is currently at a point that has pleased
|
||||
most people. Please note that it is a *GUIDELINE* and is not *REQUIRED*, but
|
||||
if most people follow the guidelines, we all get along a lot better.
|
||||
|
||||
If you have comments/questions about this document, and you are not on the
|
||||
linux-standards mailing list, I would ask that you join the list. The request
|
||||
address is: linux-standards-request@banjo.concert.net. Please try to keep
|
||||
debate off the news group, and on the mailing list.
|
||||
|
||||
For those of you on the linux-standards list, the verticle bars in column one
|
||||
represent the only changes from draft 2.
|
||||
|
||||
==== SNIP HERE ====
|
||||
|
||||
The following is being submitted by Alan Clegg [abc@concert.net] on behalf
|
||||
of the Linux-Standards list as the standard for directory file structure
|
||||
under Linux.
|
||||
|
||||
Revision 1.0
|
||||
|
||||
Complete implementation of this file structure is completely voluntary,
|
||||
and will not be enforced, but will be recommended. This specification
|
||||
is released as guidelines for people porting and writing software for
|
||||
the Linux Operating System to allow easy software installation, upgrade, and
|
||||
tailoring on already installed systems.
|
||||
|
||||
Root Directory:
|
||||
|
||||
Files:
|
||||
{none defined by spec}
|
||||
|
||||
Directories:
|
||||
bin dev etc home lib mnt usr
|
||||
|
||||
Rationale:
|
||||
The root directory should not be cluttered with files or
|
||||
directories, and should contain no user programs.
|
||||
|
||||
/bin Directory:
|
||||
|
||||
Files:
|
||||
sh init mount umount dd cat ls fsck {and as needed}
|
||||
|
||||
Directories:
|
||||
{none defined by spec}
|
||||
|
||||
Rationale:
|
||||
The /bin directory should contain programs that are vital
|
||||
to the restoration of other file systems in the case of
|
||||
a corrupting crash. No executable in /bin should require
|
||||
any other file system to be mounted to execute correctly.
|
||||
|
||||
/dev Directory:
|
||||
|
||||
Files:
|
||||
{device files}
|
||||
|
||||
Directories:
|
||||
{none define by spec}
|
||||
|
||||
Rationale:
|
||||
Standard UNIX device files. This directory should contain
|
||||
device entries for all devices that are supported in the
|
||||
standard kernel, even if the hardware device does not exist
|
||||
on the system.
|
||||
|
||||
/etc Directory:
|
||||
|
||||
Files:
|
||||
mtab passwd rc ttytab {and as needed}
|
||||
|
||||
Directories:
|
||||
{none defined by spec}
|
||||
|
||||
Rationale:
|
||||
Standard location of files required during system boot. Files
|
||||
in this directory are usually system specific. Most will
|
||||
| require human intervention during system upgrade. /etc will
|
||||
| also contain administrative binaries that should not be in
|
||||
| the normal users PATH.
|
||||
|
||||
/home Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
Directories:
|
||||
{one per user excepting root}
|
||||
|
||||
Rationale:
|
||||
Standard location of users home directories. Will most likely
|
||||
be a mounted file system once the system is up. root's home
|
||||
directory should be /.
|
||||
|
||||
/lib Directory:
|
||||
|
||||
Files:
|
||||
{libraries required for system initialization}
|
||||
|
||||
Directories:
|
||||
{none defined by spec}
|
||||
|
||||
Rationale:
|
||||
To keep the size of the root partition small (if separate from
|
||||
/usr), the files in this directory should only be ones required
|
||||
by files in the root partition.
|
||||
|
||||
/mnt Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
Directories:
|
||||
NONE
|
||||
|
||||
Rationale:
|
||||
Standard mount point for external (transient) file systems.
|
||||
Must be available for sub-system installation. Should remain
|
||||
as an empty directory.
|
||||
|
||||
/tmp Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
Directories:
|
||||
NONE
|
||||
|
||||
Rationale:
|
||||
Temporary file space available for general program use. May
|
||||
become a mounted partition upon system boot.
|
||||
|
||||
/usr Directory:
|
||||
|
||||
Files:
|
||||
{none defined by spec}
|
||||
|
||||
Directories:
|
||||
adm bin spool local lib etc man include src tmp
|
||||
|
||||
Rationale:
|
||||
/usr is the mount point for the second major (after root)
|
||||
hierarchy of file structure and is discussed in the next
|
||||
section.
|
||||
|
||||
/usr/adm Directory:
|
||||
|
||||
Files:
|
||||
{none defined in spec}
|
||||
|
||||
Directories:
|
||||
{none defined in spec}
|
||||
|
||||
Rationale:
|
||||
Location of log files and accounting information.
|
||||
|
||||
/usr/bin Directory:
|
||||
|
||||
Files:
|
||||
{all executable files from standard distribution not contined
|
||||
in /bin}
|
||||
|
||||
Directories:
|
||||
{none defined in spec}
|
||||
|
||||
Rationale:
|
||||
contains 'drop-in' executables that are considered to be
|
||||
standard to the UNIX system. These files should NOT be
|
||||
Linux specific, but should have the same function as their
|
||||
UNIX equivalents.
|
||||
|
||||
/usr/etc Directory:
|
||||
|
||||
Files:
|
||||
{none defined in spec}
|
||||
|
||||
Directories:
|
||||
{none defined in spec}
|
||||
|
||||
Rationale:
|
||||
contains configuration files for any files in /usr/bin. helps
|
||||
to keep /etc clean and small.
|
||||
|
||||
/usr/spool Directory:
|
||||
|
||||
Files:
|
||||
{none defined in spec}
|
||||
|
||||
Directories:
|
||||
uucp mail
|
||||
|
||||
Rationale:
|
||||
containes spool files for mail, printing, uucp transfer, etc.
|
||||
May be a mount point for another volume.
|
||||
|
||||
/usr/local Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
Directories:
|
||||
bin lib etc man src
|
||||
|
||||
Rationale:
|
||||
contains files local to the specific system. will not be
|
||||
modified by upgrade process.
|
||||
|
||||
/usr/lib Directory:
|
||||
|
||||
Files:
|
||||
libc.a crt0.s {and as needed}
|
||||
|
||||
Directories:
|
||||
{none defined in spec}
|
||||
|
||||
Rationale:
|
||||
location for library files required for multi-user system
|
||||
operation. This is the directory where program libraries
|
||||
| should reside. /usr/lib will also contain binaries required
|
||||
| to support programs residing in /usr/bin.
|
||||
|
||||
/usr/man Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
Directories:
|
||||
man1 man2 man3 man4 man5 man6 man7 man8
|
||||
|
||||
Rationale:
|
||||
Contains manual pages for programs that are standard with
|
||||
Linux.
|
||||
|
||||
/usr/include Directory:
|
||||
|
||||
Files:
|
||||
{programmers include files}
|
||||
|
||||
Directories:
|
||||
{as needed}
|
||||
|
||||
Rationale:
|
||||
Standard place for system include files.
|
||||
|
||||
/usr/src Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
Directories:
|
||||
bin lib linux usr.bin usr.lib
|
||||
|
||||
Rationale:
|
||||
Contains source code for all applications in the release.
|
||||
/usr/src/linux contains directories required for kernel builds.
|
||||
|
||||
/usr/tmp Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
|
||||
Directories:
|
||||
NONE
|
||||
|
||||
Rationale:
|
||||
Used as additional scratch space for programs. If /tmp is
|
||||
a mounted file system, /usr/tmp may be a symbolic link to
|
||||
/tmp.
|
||||
|
||||
--
|
||||
abc@concert.net Alan Clegg - Network Programmer
|
||||
KD4JML (just my luck!) MCNC -- Center for Communications
|
||||
|
||||
21
Linux-0.95/docs/linux-standards/000-README
Normal file
21
Linux-0.95/docs/linux-standards/000-README
Normal file
@@ -0,0 +1,21 @@
|
||||
alt.os.linux #309 [1]
|
||||
From: abc@banjo.concert.net (Alan B Clegg)
|
||||
[1] Announcing: linux-standards mailing list.
|
||||
Organization: Concert Network -- Internet Operations Group
|
||||
Date: Tue Jan 28 10:42:51 EST 1992
|
||||
|
||||
I am happy to announce the creation of the Linux Standards (linux-standards)
|
||||
mailing list. The list is chartered as follows:
|
||||
|
||||
linux-standards: Discussion of distribution and directory standards for
|
||||
the Linux Operating System, including directory structure,
|
||||
file location, and release disk format.
|
||||
|
||||
Requests to be added to the mailing list should be sent to:
|
||||
linux-standards-request@banjo.concert.net
|
||||
|
||||
-abc
|
||||
--
|
||||
abc@concert.net Alan Clegg - Network Programmer
|
||||
KD4JML (just my luck!) MCNC -- Center for Communications
|
||||
|
||||
254
Linux-0.95/docs/linux-standards/File_System_Standard
Normal file
254
Linux-0.95/docs/linux-standards/File_System_Standard
Normal file
@@ -0,0 +1,254 @@
|
||||
The following is being submitted by Alan Clegg [abc@concert.net] on behalf of
|
||||
the linux-standards group as the recommended standard for directory file
|
||||
structure under Linux.
|
||||
|
||||
Complete implementation of this file structure is completely voluntary,
|
||||
and will not be enforced, but will be recommended. This specification
|
||||
is released as guidelines for people porting and writing software for
|
||||
the Linux Operating System to allow easy software installation, upgrade, and
|
||||
tailoring on already installed systems.
|
||||
|
||||
Root Directory:
|
||||
|
||||
Files:
|
||||
{none defined by spec}
|
||||
|
||||
Directories:
|
||||
bin dev etc home lib mnt usr
|
||||
|
||||
Rationale:
|
||||
The root directory should not be cluttered with files or
|
||||
directories, and should contain no user programs.
|
||||
|
||||
/bin Directory:
|
||||
|
||||
Files:
|
||||
sh init mount umount dd cat ls fsck mkfs {and as needed}
|
||||
|
||||
Directories:
|
||||
{none defined by spec}
|
||||
|
||||
Rationale:
|
||||
The /bin directory should contain programs that are vital
|
||||
to the restoration of other file systems in the case of
|
||||
a corrupting crash. No executable in /bin should require
|
||||
any other file system to be mounted to execute correctly.
|
||||
|
||||
/dev Directory:
|
||||
|
||||
Files:
|
||||
{device files}
|
||||
|
||||
Directories:
|
||||
{none define by spec}
|
||||
|
||||
Rationale:
|
||||
Standard UNIX device files. This directory should contain
|
||||
device entries for all devices that are supported in the
|
||||
standard kernel, even if the hardware device does not exist
|
||||
on the system. Note that the distribution will have all
|
||||
device files, but they may be removed by the user upon
|
||||
system installation.
|
||||
|
||||
|
||||
/etc Directory:
|
||||
|
||||
Files:
|
||||
mtab passwd rc ttytab {and as needed}
|
||||
|
||||
Directories:
|
||||
{none defined by spec}
|
||||
|
||||
Rationale:
|
||||
Standard location of files required during system boot. Files
|
||||
in this directory are usually system specific. Most will
|
||||
require human intervention during system upgrade.
|
||||
|
||||
/home Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
Directories:
|
||||
{one per user excepting root}
|
||||
|
||||
Rationale:
|
||||
Standard location of users home directories. Will most likely
|
||||
be a mounted file system once the system is up. root's home
|
||||
directory should be /.
|
||||
|
||||
/lib Directory:
|
||||
|
||||
Files:
|
||||
{libraries required for system initialization}
|
||||
|
||||
Directories:
|
||||
{none defined by spec}
|
||||
|
||||
Rationale:
|
||||
To keep the size of the root partition small (if separate from
|
||||
/usr), the files in this directory should only be ones required
|
||||
by files in the root partition.
|
||||
|
||||
/mnt Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
Directories:
|
||||
NONE
|
||||
|
||||
Rationale:
|
||||
Standard mount point for external (transient) file systems.
|
||||
Must be available for sub-system installation. Should remain
|
||||
as an empty directory.
|
||||
|
||||
/tmp Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
Directories:
|
||||
NONE
|
||||
|
||||
Rationale:
|
||||
Temporary file space available for general program use. May
|
||||
become a mounted partition upon system boot.
|
||||
|
||||
/usr Directory:
|
||||
|
||||
Files:
|
||||
{none defined by spec}
|
||||
|
||||
Directories:
|
||||
adm bin spool local lib etc man include src tmp
|
||||
|
||||
Rationale:
|
||||
/usr is the mount point for the second major (after root)
|
||||
hierarchy of file structure and is discussed in the next
|
||||
section.
|
||||
|
||||
/usr/adm Directory:
|
||||
|
||||
Files:
|
||||
{none defined in spec}
|
||||
|
||||
Directories:
|
||||
{none defined in spec}
|
||||
|
||||
Rationale:
|
||||
Location of log files and accounting information.
|
||||
|
||||
/usr/bin Directory:
|
||||
|
||||
Files:
|
||||
{all executable files from standard distribution not contined
|
||||
in /bin}
|
||||
|
||||
Directories:
|
||||
{none defined in spec}
|
||||
|
||||
Rationale:
|
||||
contains 'drop-in' executables that are considered to be
|
||||
standard to the UNIX system. These files should NOT be
|
||||
Linux specific, but should have the same function as their
|
||||
UNIX equivalents.
|
||||
|
||||
/usr/etc Directory:
|
||||
|
||||
Files:
|
||||
{none defined in spec}
|
||||
|
||||
Directories:
|
||||
{none defined in spec}
|
||||
|
||||
Rationale:
|
||||
contains configuration files for any files in /usr/bin. helps
|
||||
to keep /etc clean and small.
|
||||
|
||||
/usr/spool Directory:
|
||||
|
||||
Files:
|
||||
{none defined in spec}
|
||||
|
||||
Directories:
|
||||
uucp mail
|
||||
|
||||
Rationale:
|
||||
containes spool files for mail, printing, uucp transfer, etc.
|
||||
May be a mount point for another volume.
|
||||
|
||||
/usr/local Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
Directories:
|
||||
bin lib etc man src
|
||||
|
||||
Rationale:
|
||||
contains files local to the specific system. will not be
|
||||
modified by upgrade process.
|
||||
|
||||
/usr/lib Directory:
|
||||
|
||||
Files:
|
||||
libc.a crt0.s {and as needed}
|
||||
|
||||
Directories:
|
||||
{none defined in spec}
|
||||
|
||||
Rationale:
|
||||
location for library files required for multi-user system
|
||||
operation. This is the directory where program libraries
|
||||
should reside.
|
||||
|
||||
/usr/man Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
Directories:
|
||||
man1 man2 man3 man4 man5 man6 man7 man8
|
||||
cat1 cat2 cat3 cat4 cat5 cat6 cat7 cat8
|
||||
|
||||
Rationale:
|
||||
Contains manual pages for programs that are standard with
|
||||
Linux.
|
||||
|
||||
/usr/include Directory:
|
||||
|
||||
Files:
|
||||
{programmers include files}
|
||||
|
||||
Directories:
|
||||
{as needed}
|
||||
|
||||
Rationale:
|
||||
Standard place for system include files.
|
||||
|
||||
/usr/src Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
Directories:
|
||||
bin lib linux usr.bin usr.lib
|
||||
|
||||
Rationale:
|
||||
Contains source code for all applications in the release.
|
||||
/usr/src/linux contains directories required for kernel builds.
|
||||
|
||||
/usr/tmp Directory:
|
||||
|
||||
Files:
|
||||
NONE
|
||||
|
||||
|
||||
Directories:
|
||||
NONE
|
||||
|
||||
Rationale:
|
||||
Used as additional scratch space for programs. If /tmp is
|
||||
a mounted file system, /usr/tmp may be a symbolic link to
|
||||
/tmp.
|
||||
62
Linux-0.95/docs/linux-standards/Package_Draft
Normal file
62
Linux-0.95/docs/linux-standards/Package_Draft
Normal file
@@ -0,0 +1,62 @@
|
||||
Please comment on the following document.
|
||||
|
||||
[available as /pub/Linux/linux-standards/draft]
|
||||
|
||||
Tommy Thorn (tthorn@daimi.aau.dk) writes (with my comments in [* ... *]):
|
||||
|
||||
We need to make installation REAL SIMPLE AND FAST. I suggest the
|
||||
following standard for distributing ported programs.
|
||||
|
||||
Everything should be contained in a [compressed] tar file with a:
|
||||
|
||||
- README, a short explanations of how this version differs from
|
||||
the original, if it does, and how it was compiled.
|
||||
|
||||
- PREREQUIST, again which kernel, but also which version of the
|
||||
original.
|
||||
|
||||
[* Let's call this PREREQ so we can all spell it *]
|
||||
|
||||
- Makefile, not for compilation, but for installation!! After having
|
||||
checked that you agree with paths and so, you just type 'make install'
|
||||
perhaps as root.
|
||||
|
||||
- Patches, context diff against the original.
|
||||
|
||||
- Binaries
|
||||
|
||||
- Optionally, manual pages, also with full path.
|
||||
|
||||
Kernel patches should also be a [compressed] tar file containing:
|
||||
|
||||
- README, describing what the patch does/is.
|
||||
- PREREQUIST, a precise statement of which version of the
|
||||
kernel the patches applies, and which, if any, patches that
|
||||
was already applied.
|
||||
|
||||
[* Begin Soap Box:
|
||||
I don't think we should distribute kernel patches in the standard
|
||||
release trees, unless there is a DEFINITE (fatal) bug fixed by the
|
||||
patch. Most people are looking for an easy-to-build system with
|
||||
binaries and sources that they can get up-and-running without much
|
||||
trouble. Yes, we have to put together kernel patch kits, but we
|
||||
need to have them coordinated (all patches in one common patchfile).
|
||||
End Soap Box *]
|
||||
|
||||
Sources belong in /usr/src, linux sources in /usr/src/linux, etc.
|
||||
|
||||
Maybe we should split patches and binaries, but I don't like that, as you
|
||||
would properbly end up having only one of either.
|
||||
|
||||
[* It is my feeling that we should not distribute patches without the source
|
||||
that the patches apply to. Often, someone will grab the wrong
|
||||
"official" source, and the patches won't take. Then they make noises
|
||||
about the patch not working. I feel that we should provide FULL
|
||||
SOURCE to all programs, *WITH PATCHES APPLIED*. Leave the patches
|
||||
in a _common_ directory under each source tree, ie:
|
||||
|
||||
/usr/src/gcc/LINPAT/*
|
||||
^^^^^^ name subject to discussion
|
||||
|
||||
to allow someone to see exactly what was changed, but also allow them
|
||||
to compile without applying the patches themselves. *]
|
||||
10041
Linux-0.95/docs/linux-standards/mail-archives
Normal file
10041
Linux-0.95/docs/linux-standards/mail-archives
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Linux-0.95/docs/make.tex.Z
Normal file
BIN
Linux-0.95/docs/make.tex.Z
Normal file
Binary file not shown.
155
Linux-0.95/docs/mcc-interim
Normal file
155
Linux-0.95/docs/mcc-interim
Normal file
@@ -0,0 +1,155 @@
|
||||
To: Linux-Activists@BLOOM-PICAYUNE.MIT.EDU
|
||||
From: zlsiial@uts.mcc.ac.uk (A. V. Le Blanc)
|
||||
Subject: MCC 'interim' version of Linux (was Re: two questions)
|
||||
Date: 23 Apr 92 13:21:07 GMT
|
||||
|
||||
In article <1992Apr22.195030.8492@muddcs.claremont.edu> jwinstea@jarthur.claremont.edu (Jim Winstead Jr.) writes:
|
||||
>In article <EdxN7bq00awDMEveIn@andrew.cmu.edu> aw2t+@andrew.cmu.edu (Alex R.N. Wetmore) writes:
|
||||
>>2) What is the MCC release of Linux?
|
||||
>
|
||||
>It's the Manchester Computing Center (?) release, which serves as a
|
||||
>sort of extended-release, as I see it. It includes many more
|
||||
>utilities than the basic release from Linus and myself, and as a
|
||||
>result comes on three (four?) floppies.
|
||||
|
||||
It comes on two floppies, but there are a few others available.
|
||||
|
||||
The Manchester ComputING CentRE was once Manchester University Regional
|
||||
Computer Centre (pronounced 'murk') and later UMRCC. The change from
|
||||
'computer' to 'computing' was made (supposedly) to mark a shift in
|
||||
emphasis from supporting machines to supporting the people who use
|
||||
them. (Some of the people who use them complain that the shift in
|
||||
emphasis has not yet been implemented.) The University of Manchester
|
||||
has been known to claim that computers were invented here, which they
|
||||
were if you define 'computer' properly. We are a Centre, not a
|
||||
Center, because (as someone pointed out in a recent note) that is
|
||||
how it is spelled in 'proper' English (English + Irish + Australian +
|
||||
Indian + Canadian + ...) as opposed to the American dialects. I try
|
||||
to mention MCC from time to time, since they pay me and supply me
|
||||
with equipment. I am in fact supposed to be doing other things for
|
||||
MCC, and, also in fact, I do.
|
||||
|
||||
The MCC 'interim' releases of Linux are unofficial experiments.
|
||||
They vary depending on my whims and on the time I have to give them,
|
||||
usually not enough, I am afraid. The latest so far, 0.95c+,
|
||||
had (or has?) the following goals:
|
||||
|
||||
(a) To provide a simple installation procedure.
|
||||
(b) To provide a more complete installation procedure.
|
||||
(c) To provide a backup/recovery service.
|
||||
(d) To backup my (then) current system!
|
||||
|
||||
When I first put Linux on a PC, back at 0.11, I got the standard
|
||||
boot and root floppies, found there was no working fdisk, tried
|
||||
edpart, which made a mess of my partition table by sorting it,
|
||||
used the MINIX fdisk, and finally got a system going. Then I
|
||||
started trying to get other bits to it. I decided this was a
|
||||
bit awkward, and hoped someone would do something about it.
|
||||
I also hate having to search through 3 ftp sites for useful bits,
|
||||
the fragmented nature of a system which, I believe, was one of
|
||||
the serious problems with MINIX, and having to compile everything
|
||||
again and again because it was originally linked with some
|
||||
defective version of the library, as happens often enough even
|
||||
with 'mature' commercial Unixes.
|
||||
|
||||
Theodore Ts'o wrote the ramdisk code in the Linux kernel. As he
|
||||
remarked, it was originally designed to make it possible to store
|
||||
some files on the ramdisk, and so free the disk drive for other
|
||||
purposes, for example, for creating or modifying a boot floppy
|
||||
so that it boots using a hard disk partition as the root device.
|
||||
Both Ted and Linus warned me that the ramdisk code was inefficient,
|
||||
but I thought this was no problem for an installation/backup/
|
||||
recovery system. Both also pointed out that the ramdisk uses
|
||||
much more memory than it should, and this has in fact proven to
|
||||
be a problem on systems with only 2mb of RAM.
|
||||
|
||||
Nevertheless, the latest 'interim' release from MCC does manage to
|
||||
squeeze quite a lot onto TWO disks: one of which combines the boot
|
||||
and root disk, and one of which I called the 'utilities' disk.
|
||||
The boot disk boots, loads its root device from the same disk, and
|
||||
then starts executing /etc/rc. This runs a little script which
|
||||
asks for the drive size, and mounts the utilities disk (which you
|
||||
will of course have placed in the drive when you were instructed to).
|
||||
The commands available on the combined boot/util combination are
|
||||
approximately equivalent to those on Jim Winstead's root disk.
|
||||
Of course, I have a lot more space than he does -- about 500k more --
|
||||
so I use a lot of this space for tar.Z files which contain all the
|
||||
usual Unix commands I can find, excluding 'man' and the compilers,
|
||||
but including, for example, awk (gawk), all of the GNU shell/file/text
|
||||
utilities, grep and its cousins, sed, vi, more, less, tar, compress,
|
||||
uuencoding/decoding, the mtools package for reading/writing DOS
|
||||
files, and make. I also added the joe editor, for those who find
|
||||
vi too alien. The format was a bit to cramped to try to include
|
||||
emacs or tex or any other monster utilities, and almost everything
|
||||
I wanted fit except Kermit, shoelace (which is awful, I admit, but
|
||||
works if you know how to do it), and man pages.
|
||||
|
||||
All of this fit on two disks, the boot disk and the utilities disk,
|
||||
as I have said before. Now I tried this out on some of my unsuspecting
|
||||
friends, who made interesting suggestions and complaints. One in
|
||||
particular asked if I could add a disk containing the C compiler.
|
||||
So my first additional disk (comp) contains gcc 2.1 plus the include
|
||||
files and the libraries. I couldn't fit g++ on the same disk, so I
|
||||
added shoelace and a bit of g++. (I supplied a new README file for
|
||||
shoelace, explaining how to test it out from a floppy before you
|
||||
overwrite your primary boot sector). Later I added another disk
|
||||
(comp2) containing the rest of g++ (include files, binaries, libraries)
|
||||
and Kermit, which is too big to fit on the utilities disk. When
|
||||
I released this version (which did not include Kermit at first),
|
||||
I received some favourable comments, but most people felt that
|
||||
man pages should be included. I therefore project another disk,
|
||||
which should include groff, man, and man pages. Note that these
|
||||
additional disks (comp, comp2, and man) are not really part of the
|
||||
'interim' version proper, though it is convenient to lump them
|
||||
together. Not also that the man disk does not yet exist, though
|
||||
the binaries and patches for groff are in fact available; the
|
||||
binaries are not really usable, since they include only unlinked
|
||||
executables, not the groff library stuff. When the man disk comes
|
||||
out, it will probably include only preformatted man pages, with the
|
||||
unformatted pages available for ftp in another format. The pages
|
||||
are collected from the GNU sources and from elsewhere, including,
|
||||
of course, those from the excellent Linux-man contributors.
|
||||
The man-1.0 program does not do QUITE what I would like, and so I
|
||||
am messing with it -- I hate distributing things that don't do what
|
||||
they should.
|
||||
|
||||
Contrary to my expectations, I did in fact create a sixth image,
|
||||
which is called xdisk, and which -- in an awkward way -- allows
|
||||
people with less than 4mb of RAM to install the 'interim' version
|
||||
without using the ramdisk; they don't need my boot disk, but they
|
||||
do need a standard 0.95c+ boot disk and my xdisk.
|
||||
|
||||
I hope this clarifies what the MCC 'interim' version of Linux 0.95c+
|
||||
is, and why, when it consists of SIX disks, of which one does not
|
||||
exists, while two come in two versions (US and UK keyboards), etc.,
|
||||
I would still say that, properly speaking, it consists of TWO disks,
|
||||
together with a number of optional extra disks.
|
||||
|
||||
The latest 'interim' version, while put together by me, is deeply
|
||||
indebted to many other people, including Linus himself and Ted Ts'o,
|
||||
who put up with a lot of hassle while I was working it up, and
|
||||
Jim Winstead, some of whose bits are included. Also included are
|
||||
poe-igl-1.2, lots of GNU code, HLU's C, C++, and libraries, all GNU
|
||||
in origin, but with an awful lot of work involved in porting them,
|
||||
the UU-, XX- and AtoB encoding/decoding utilities by Konrad Bernloehr,
|
||||
and all the people who helped with testing and by reporting bugs
|
||||
and even those who just said 'Thanks'.
|
||||
|
||||
I would hope that the 'interim' version would influence other
|
||||
versions, from which I will of course get new ideas and code.
|
||||
But it would be very awkward to do the standard distribution this
|
||||
way. First of all, it is a pain producing a boot disk. If you want
|
||||
to change a letter in a text file, you have to mount, edit, unmount,
|
||||
copy the disk to a file, copy the file and the image to another disk,
|
||||
and then reboot. The present system, with Linus providing boot disks
|
||||
and Jim providing root disks, is more convenient in many respects --
|
||||
but much harder for the end user. Perhaps it will change eventually
|
||||
when Linux becomes stable -- but can you ever believe it will stop
|
||||
changing?
|
||||
|
||||
-- Owen
|
||||
LeBlanc@mcc.ac.uk
|
||||
|
||||
|
||||
[ The MCC "interim" release can be found in ~ftp/pub/linux/mirrors/mcc-interim
|
||||
on TSX-11.MIT.EDU. --- Ted]
|
||||
104
Linux-0.95/docs/time.doc
Normal file
104
Linux-0.95/docs/time.doc
Normal file
@@ -0,0 +1,104 @@
|
||||
Setting up time and time zones
|
||||
|
||||
There are several things involved in getting time right under Linux:
|
||||
|
||||
- /usr/lib/zoneinfo contains files that define what time zone you
|
||||
are in. If they are missing, no time zone calculations
|
||||
are done, i.e. your internal clock is assumed to be on
|
||||
local time rather than the Unix standard of GMT. The only
|
||||
file that you absolutely need is /usr/lib/zoneinfo/localtime, but I
|
||||
recommend also having /usr/lib/zoneinfo/posixrules. Posixrules
|
||||
is typically a copy of or link to localtime. Localtime defines
|
||||
your default zone. Posixrules is needed to interpret the TZ
|
||||
variable, which is used if you want to specify a zone other than
|
||||
the default.
|
||||
|
||||
- the "date" command can be used to set or display the date/time.
|
||||
Note however that it does not set the hardware clock, so
|
||||
next time you reboot, you'll be back to the old time.
|
||||
I recommend that after changing the time with "date", you
|
||||
use "clock -w" or "clock -u -w" to update the hardware clock
|
||||
as well. (See below.)
|
||||
|
||||
- the "clock" command can be used to set or display the date/time
|
||||
in the hardware (CMOS) clock. Typically your /etc/rc script
|
||||
will contain
|
||||
clock -s
|
||||
which will cause the Unix date/time to be initialized from the
|
||||
CMOS clock when you boot. If your CMOS clock is set to GMT
|
||||
(which is what I recommend) the correct command is
|
||||
clock -u -s
|
||||
|
||||
The binary time distribution should be untarred under /usr. It
|
||||
contains lib/zoneinfo, bin/date, bin/clock, and doc/time.doc (this
|
||||
file). Once you've installed these files, you'll want to do four
|
||||
things:
|
||||
|
||||
1) set /usr/lib/zoneinfo/localtime and /usr/lib/zoneinfo/posixrules.
|
||||
You should copy the file for your time zone. E.g. if you are in the
|
||||
U.S. Eastern time zone, do
|
||||
|
||||
cd /usr/lib/zoneinfo
|
||||
cp US/Eastern localtime
|
||||
ln localtime posixrules
|
||||
|
||||
Localtime defines the local time zone. Posixrules defines the zone to
|
||||
be used to interpret the TZ environment variable. Since it's far more
|
||||
convenient simply to use the right time zone file, nothing more will
|
||||
be said here about how the TZ variable is used. Unless you intend to
|
||||
use TZ, you can ignore the next paragraph.
|
||||
|
||||
If you want exact POSIX behavior, posixrules should be a copy of or
|
||||
link to one of the U.S. time zone files. (For non-U.S. daylight
|
||||
rules, the TZ variable defines the daylight transition rules.)
|
||||
However it may make more sense practically for it to be the same as
|
||||
localtime, as shown in the instructions above.
|
||||
|
||||
2) Once you've set up localtime and posixrules, you can remove the
|
||||
rest of the files in /usr/lib/zoneinfo, if you're sure you'll never
|
||||
want to operate in any other time zone. Or you can keep just the few
|
||||
time zones that you might need.
|
||||
|
||||
3) Put the correct "clock" command into /etc/rc. Which command to use
|
||||
depends upon whether you want your hardware clock to keep local time
|
||||
or GMT. I recommend using GMT, since that will allow daylight savings
|
||||
transitions to be completely automatic. However the same clock is
|
||||
used by DOS, and some people don't like the time in DOS being GMT. I
|
||||
use Unix-compatible software under DOS. It uses the TZ environment
|
||||
variable to do time zone conversion. Thus I prefer the clock being
|
||||
GMT even under DOS. But some people may not like that. Anyway, if
|
||||
your hardware clock is set to the local time, put the line
|
||||
|
||||
clock -s
|
||||
|
||||
in /etc/rc. This will set the Unix time from your hardware clock,
|
||||
doing the necessary time conversion. If your hardware clock is set
|
||||
to GMT, then you'll need the -u option:
|
||||
|
||||
clock -u -s
|
||||
|
||||
4) Now make sure that your hardware clock is set correctly. Try
|
||||
"clock" with no arguments. It will print the current setting of the
|
||||
hardware clock. Make sure it is right, and that it is either local or
|
||||
GMT, as you decided. (If the hardware clock is supposed to be GMT,
|
||||
you can use "clock -u". This will convert from GMT to local and
|
||||
display it.) To set the clock, first use the "date" command to get
|
||||
the date right in Unix. Then use "clock -w" to set the hardware
|
||||
clock. Note that "clock -w" will set the hardware clock to the local
|
||||
time, and "clock -u -w" will set it to GMT. Verify with "clock" that
|
||||
the hardware clock is as you want it.
|
||||
|
||||
From now on, the time should be right. If your hardware clock loses
|
||||
or gains time, you can update it at a future date by the same
|
||||
procedure just described: first get the Unix time right using "date"
|
||||
and then use "clock -w" or "clock -u -w" to set the hardware clock.
|
||||
|
||||
If your hardware clock is set using local time, make sure to reset it
|
||||
when daylight time changes. If you're running Unix when daylight time
|
||||
changes, the Unix time will adjust automatically. In that case, all
|
||||
you need is "clock -w" to update the hardware clock. If you aren't
|
||||
running Unix during the transition, then your time will be an hour off
|
||||
the next time you boot. In that case, set the correct Unix time using
|
||||
"date", and then use "clock -w" to update the hardware clock. If your
|
||||
hardware clock is set using GMT time, none of this is necessary --
|
||||
daylight time transitions will happen automatically.
|
||||
BIN
Linux-0.95/dos_utils/bootlin.zip
Normal file
BIN
Linux-0.95/dos_utils/bootlin.zip
Normal file
Binary file not shown.
BIN
Linux-0.95/dos_utils/pboot.zip
Normal file
BIN
Linux-0.95/dos_utils/pboot.zip
Normal file
Binary file not shown.
BIN
Linux-0.95/images/bootimage-0.95
Normal file
BIN
Linux-0.95/images/bootimage-0.95
Normal file
Binary file not shown.
BIN
Linux-0.95/images/bootimage-0.95a
Normal file
BIN
Linux-0.95/images/bootimage-0.95a
Normal file
Binary file not shown.
BIN
Linux-0.95/images/bootimage-0.95c+
Normal file
BIN
Linux-0.95/images/bootimage-0.95c+
Normal file
Binary file not shown.
569
Linux-0.95/patchs/0.95c.patch.2
Normal file
569
Linux-0.95/patchs/0.95c.patch.2
Normal file
@@ -0,0 +1,569 @@
|
||||
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
|
||||
Subject: Second 0.95a alpha-patch, part 2/2
|
||||
Date: 4 Apr 92 14:54:09 GMT
|
||||
|
||||
The second part of the patches: concatenate, uudecode, uncompress and
|
||||
patch.
|
||||
|
||||
Linus
|
||||
|
||||
====================
|
||||
M* ^3[DE^7?"*I$;"*:8 *=."7)XAI=*I2$F2.%)*=9Z42\HF)9<'4QFE/!ZZ
|
||||
M'BN0LL<%99;R;@< XE)Z*>64;4HS94&,3.FF]$^F*3,::TI199GR[O.F3##%
|
||||
M*4%8<\HF $:R3HFH?*!TO% L8$AP)[2"="G-$TB> "5@LH[)*&R-.F$.%2V
|
||||
M)[62#ZJ.5O-+%R'Y"@;BL'I,!Q^6"F?"X7"=2'/LHC90-DKII)U2*TD@)%&&
|
||||
MXB"2025V9)72'8FEK%4FF'R3Y3@$#\D((OGZ"C?Q$,F$'\DYUH%L6PFR\%9&
|
||||
M27A1,J]P98&R5YFC-%>&>-"50YXU9*A20CFJC$/"*P&4"!Z(Y+=I#T>+ ]K%
|
||||
M(:<(2T*#X7%R0(F=Y/L@)>65"HTU9<-RQ&:JK/*,6?B!_*BDEK=$_6/=(!-R
|
||||
MTQ*%[ 07H7[2+=F?1%,N)S^681WB8*R28>FN[.24+)T])\N,0,IRR[2,Q$8.
|
||||
M%\8%Q,4F9#]E HC#03]5(Y"0JL#K(=*2SW@RG(X](==SA<=BRA02N ,N4O^8
|
||||
M '6/QJ5ED' @!I P= OPU"20<S=UI>41^UC5:$,"?U8 -PT>)0$*IR8<D &4
|
||||
M+7-9:,LGE-K22IE]O(=%L%05<LMF%-V2+3 #N%N>+?,_B*.]);LR\_@X^5MZ
|
||||
M&XA+<\O5DW" !F"XC#ZFL[YNBDNV9;NR<7G!F@D%+M& 7[S.H_)Q,@*"DL3P
|
||||
ME>))?C$W$R32:VF?VTW=A :7;0"R)8#/<HDX4EA>($65?LO.)5P)<BFXE%RR
|
||||
M!>R6L\N\Y:<R]GB[Y%ER+KE8@$O>Y>[1=]D&*%P&+Q&77S?;Y3$'=WF\%&-U
|
||||
M 3^784O8)>7R>2E]G+M)+S&0N\G*8^>2H::\-"YI@T@&RR &I-MB-]840M)Q
|
||||
MDE27J$!*4#,R8=!D3(+T4QX0KP+V#_>))4!/<=_M';5CY,-L9/W2"1D28$$0
|
||||
M'A%=6LMQY'D,7#0:04>B*@.5WA\C3S_/!["L5-Q)=2"83 )IKBR5^F1S%>F
|
||||
M*ZF4:\LK9>;Q#1"*(]5Q>4A&M2:W)#;1*)F7=&>8!1N8/CA;! 93@TG!C-IT
|
||||
M)"V8,LQDY023/5F>%/C(K) 4WTO<)0ES1OBP/&%R>5*80<D5ID[R9NG"Y-GI
|
||||
M#.M?TYRQV8@-]F1L.2?Y ?A-9:$7I!-NW>.@I#Y2'M>5FLL1I@1*-%:C5&+B
|
||||
M*)N$\$F#Y2C+*))2C&$V#E\YUQHK)A9S+*/%//A@*Y-:#TI09?$R%<F@'&(V
|
||||
MI,B8Z4DS9EZR8"F?W#P6+4^(5(;N&*%,(Q#S\3.5!"YO1S'_9;$0@ E<2&2J
|
||||
M$+N1 )6C #"-*;"UW/D0TR216K%R8A[1N:+-T".J$_^(1;Q (A*/D.A1:>+Q
|
||||
MQ]H$B40 F4F%D;@Y6*D<R+PNG05+XC8(DRC&<\MM$MUX\<1E7B!QJ/).!&;>
|
||||
M$S5DHC*9XGE%GZA>T;5<\WZ*@ ,^7EW CU>B,#"85Y@&-X9,0C;OH5?0*U',
|
||||
M)?@+",5EIC[O5.;,).CI\;B9U,Q/ CO/G0>GH#)\ 18#C8&VD B!]B%"$)6
|
||||
M'N>9_Q:40<IHE"%"H*K8-^0H6AE19J,,G6C*%.:A,B4JP\Q?IG7EGBA/U)31
|
||||
M$Q=D"TUH'HAE0Q;.I..A$AT)N0;:P)GA-I ;N..]5"2*VKQIYA\/Q&+-')5Q
|
||||
M&[)VJ0%M9C13A)#._.#!%RJ:U#SU"IM!H_EFP V4!CR:G065IC8OFS?2C#*L
|
||||
M,\,$^2W7PCN3,?"#VJ'1,U$&]DPZ!#Y3A+#/#+B@#/B).TBHT=LQM\!:<&?"
|
||||
M,XN:@$>K)5$@GN+N(8UTGZ"6D(9$IE63J"G/M%_6[W*(FLS[!CVE*:# A,])
|
||||
M,%Q769E'E]D' G2:JQ!Z"FYR-X"Z@3#Q(O WX.0M";YD,[G>$?7@0!<1*"Q:
|
||||
MNLPY?QR+P'N@-? :B V4&6H#: :;IFZ $WC.P;QX@FX'<,T2E%C@07<#N!:.
|
||||
MW/Q4Q@DVP+HRM.FA#"NTP%H('DAG#VXJP?1C&D8<%S(:,[PV H 49&B;!$N
|
||||
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
|
||||
M<: \,F^A:= "RK]]$J0B))D*< %D5G#4Q#:3!B9K[Z?[,],J(A)R>7VM DZ
|
||||
MAN*>CHE\$MW3[KD[* ^@FEB3>\_2@$^'Q1:"0WJ*01^?3<\IPM33Z\FDU(<J
|
||||
M(*B>WSHS",J@1[9;((GM0A=$*;Q1$O. '(JDL(>2/?&A,08J:-=3X>,K:()"
|
||||
M"K^>OL<J*(OMO69&.&_U/P6=(( 2@)7 _"D2M4U@4$JB9BB1:'N*64 /Y67=
|
||||
M0R\A'0PRP!;@)5HMF(*"/2D*+-$5T$C,(?KWU'IBHORAS $]1$O4EL43Q3Z8
|
||||
M/&VB&=&N)\! )\K+*HJ6/'VB4L]_Z+^.)@H]Y-AMQ5Q629UFJ _B&1H-#6'\
|
||||
M(LB3U5"X1%]EPK&3T(8R)7R?@2)OJ/JS5E O21%Y1%F?/E#?4$]C" !Q<R(L
|
||||
M/=6B*;+YTU3.+?H\> MPVL %X(]NA_[37L+^5(NF7>2?28G'I_.S<7#_"!BA
|
||||
M2O*B,I3R25(GHP,.C8L&!L2A"J=R*)80"O88DGL>F]:AMPN\YSL4-R#9G(<R
|
||||
M16T0(R"9*%4T'_KTY(=&18.B2)VUDD!4\G$B*(CBFSY<P K^YU]EEN?JL8R^
|
||||
M"ABB32#5Z$/T$H(4W8).1*V?3% *QT4T;'@354!TC*Z@%(XLZ"HB.4KC6(YR
|
||||
M/9D#':.E6N*S#9'*H8IVC#YV(R/-'8MM-DH0U:_11LL UZ$E'+3*(Q<_.7;*
|
||||
M.V.@]<[3Y<NHIO9U>P$>GQ2C)$\4R=*SWXD#E=+E?0*>/-".CAW4X'FDTX7Z
|
||||
ME;2@25!YWLQJ.FH<G7^@!IZ@&BQ,3[&G.!KV='E1ZE)L"2HXZ.)+#DK=TAT=
|
||||
M)^R@S4^+)_)@5< ']8->J6A4'\]/D4KKO6:%2'^*1'. ;H"LU)6J[%E.>ER^
|
||||
M2H:CY ,6T_(-.0H4@#8U*/H$(@!F$/F@'-;)R85FE5:>G",1D"^4[03SQ"S-
|
||||
M/(FA-L]SQ3%4YXF( \:E ):D4H*?IX*-"!&RX@'T (2>0M*J:+DNQU3T['L>
|
||||
M/66B4%&@**6"2?@:G2MT,$V85T\T*43T.GH%0I J1_.$=%+9$D<4)%H2)8F.
|
||||
M1/LG(=&4A6.B)+H2C4Z!F+:B35$Y*7$T(MH<90[$1+< :=*G)TLTJ+035936
|
||||
M1!FE25%Z EH Z1DIG7J&XL*@.-*0 !D4[1EC.H-.[DR8V<JWYSFT,YH.10V
|
||||
M1N^>[E"]IV33-<@(B7TV0.&CA\\LA>+SE!,F#<5)/A$\MXP'W?L'6V@/NFSA
|
||||
M0N6C] (D:2_4Y2G!*BGUDA!*>(!5Q=!$#6<,C0$@0W>>5E(L:1A MH2QLM89
|
||||
MIB /C4!2W%FG!? D''OV1!6CHU(S:*Z#+?G#[/6<JIRB^M''YPJ !D A/2HP
|
||||
M">FD'<P;W)LC2 @O/8,L/>>EK-%]*)M43=JCJBM111^/0YY?:6])/$KS $M&
|
||||
M)AU"QM(B*;)T)+J38'DJ29FE>(QGJ<Q36AH$H)9*2:VE5%++Y0-)6\HME=89
|
||||
M*<1J=R >FY@D5(JFVL:-2\NE11ZJJ-F35(H:,)6NE3R8>*5353@P4PH4V/-4
|
||||
M=]JD %&V))QTK=0O/8IB2AND5Z"=*=*47RH</9<N2H&FKE&":9"0(ZKH9'0&
|
||||
M2E4_5]-\S]4T)5ILDY%>YLX6(S&JZ-<425$IG8F&2NNE"HA)Z5JI;+H:_8E*
|
||||
M2E<=;-.SZ=$4#<*[@)LF2LVF3M-+*=#45VK$W!.)1Q]T6#']A[42P1,2&P2^
|
||||
M ;8 ?XZMYW'42$I,JBVIE&@ C3AEA%W*ET<T?^I JG> )BDR%J#) '8 /D
|
||||
M WT0;!\B0,5J)X5!,DB&3K-:U ,X2.X.Z-DE#9WRV :2P5&:4_K1!H VI2=T
|
||||
MH\(Z6,_9:<#T'^H$[==E3H5."0=!A]B):.H[/9P"3RD**@#,J?%T<]HYW4E!
|
||||
MD49<7)[2'#TR.6 O& (T ? >E%#\CLWD\5% HZ#,-WH2^@MEX,+BF$6:R!9^
|
||||
M)24/[JL4H3EL^(,@H&JE%#!("![7Z:M3RU8IR@M^ 7:=*-.F0+@T7)4[Y0'0
|
||||
M3N>F]M)R%>Y4)FJ8\I_N3H.B^D$O5<#JSV%CVWC\(1*![%-%U)^C9<KN"94N
|
||||
MME8 Z VMQ^S4+O4>97\B/HLIGXX,*L=C@_K"C'9\#12,!Q_YJ??N?>HTBI]&
|
||||
M4%^=.0Q,Q X#8,5?^T/=V&P1KJ;[*1%@@_HZY=MA/6NG72"?T@_5;2HP-1@:
|
||||
MU]Q5-E1J72@G@MH(S #U3_^G4-,':?%4,Q4\I3J$/HFGSZ#?J>*4.9 \G:("
|
||||
M3SFG; #F#L.)@3K!^G- 4'6H$E2M!P6UOFE!A5QA4,VH_E,.*N'3@ZHK#:'"
|
||||
M4;T-V,'$8]0+2!G3,XK< %B6XSPN#P,2%W:^4'^\F3:/H,\"T1-@0$0;M0$A
|
||||
MO:@5RL!34J/D^5DK X$(!40$AT(9&?"G3#K$*TD)5"?,K("$6# &A( R;3Q
|
||||
M(2:$2@7W192D#0!^HQ#"+((%78\+@ICB<J*S>&P !61Y20#MY]H!J3B+>$FX
|
||||
M"$@9@M&KAL#!$%'[[!TM@RRI-TA,:FRD</I\Q!;0+K]I<M!+*G. 7H _U58^
|
||||
M(^Z1#1!#!0U2K@/%T0OH.%0.W8[>G4)AD!H;*:1R"@ZIW%35Z1.P!8I3@XU,
|
||||
M1I2=[8MG*G&*R18"D'71[N97;3HAYT^*@F1/]78!C)(3\(\84PZU-0 I$";0
|
||||
M=M1.YM0HP2.IB-5/M1?]4W\BV+>!*JT+O30%B%$J(YM?+;16A;4RF/(+]":@
|
||||
M4,>IRT=":AF 'JE01:0:0I]R[Z9^QD_"6""HJ!70/O1#> C@0?4(K-4<D.6U
|
||||
M"K ? ]%)ZI7A3E8@&A:T)^B:Y<]5*OAM+PK?&!7\/#82YD^/2JY$G' &J.45
|
||||
M4\4YQTY<F+YHJ[,QREN>2\BI4+AOTTQHFE-UXRR 4Z] [M-J5D,5GYHB!2?I
|
||||
MV?"GE$HZ $)-JL-/[78Y5)=. %4V%7@M"/!J(JA25 ^J=Z>$ZIO)YI92(*>>
|
||||
M1TBJZ-11UDUM]>17U:O*4]5>]M&39TI(%YJD X2ZO;P)QJB@X;CDJSKK='F-
|
||||
M51D%954NTUD5/)!6O4?:D6Z5^]05P&7UH6J?$*C253T#$U6#*I<'H3I2-:0N
|
||||
M5+M@(=5R:FOUG)JRU$T=.PNKLU6%JO"29F?%4*P^A+)*C555VZ<S9A+7'$O>
|
||||
M#NI"8;/Q7,[#$ $%*M3-+*I(B,]J1 K !(#'Z)[@ :2KS!WFZEJGN8KX# )4
|
||||
M@*BK> QP-]($N%=!3_&(/6/NTX:I"'*#/ JD*+>+2]#&0>YCK/M1G<+\[OI
|
||||
MPI!A":HYTR_LZ!,,TZQ5Z4@ZN+!<P2:/7:$" +#<?ZRDT8HSP):N3P1@R:>&
|
||||
M>PH^F1UR%1140AKPP259%LQT?ZDV%?O4P6K;@; "2< 9>@):#ZPDG16LT_7L
|
||||
M.DD#%L@H0'HT85>O(RHI3Q&G" -#E"R$0.2N*U]Y?0 LNAQ92/)M!309HSB]
|
||||
M6%$%6U0'Q;?.QJKGP;$6*-,@_SJN6"@D-9I%/9P"65LKG5,:ZUK)ZE,Q39(6
|
||||
M66D&,J?.*5$"Y"$(%=F%=:I,:-" EH?U#J@F.F1Z.84+U 2P(!6)B" 'PG,1
|
||||
M!5H"X+FL43T%S<F,_'*J6>U&;%:SYAGHG?*T1!K .3D@<LX8!,D-"YF./%]H
|
||||
M@5ZAI!)+I4&+HX2[L@/(G-B=>E5('*K@T?KWU*N&!\X7.RFRPD@JK-.J0NL
|
||||
M5GDF!1[PYFI3@8K%4D3I%:*>DY+= J,5,1!60+4V*!B58$FS4_XK#G!H?;1U
|
||||
M[[Z3IZI5ZZ153UAIS:T.HTI>N];.IZ45-8!II3OM6O6JH-84 !R0(+EI#6].
|
||||
MO1A.IM96*Y,RU<IJO2B=6J>MK]:06]N1RSG5K#.@6;4+*L3TW=6H.H9W-(J!
|
||||
M-9\+W]:$P26SS9G)%*CL$+5/_+C$8W=J;/8D&"(25@YYAQ6JXB+O@)? LR5>
|
||||
M")^(N41*WBXQ3-9+K"+^$OV: (]A(@>OF.A%#.&!$<6)R94[XJ)LE+E'3"<:
|
||||
M-(EYJ<Q(V2JSCX@?8^+MQPZ)L,S_F)Q BG<Y^.?5,@5Z"+(NGBX321#&,QEI
|
||||
M$I%Y\$2&IC#3G;C&4VA6RB2:+LU28@+@E&@J2R6N5U:)=BV F2OQWFI$#+A2
|
||||
MR6B)2T1''H:(LB+)&_5%\. <3P(J8D+"BO@NP2*FR82)6T11WIOLF A&'*LL
|
||||
M$ZN?K3Q/X,2S1"#+<PBH"PD%U\0A4;G -\!-S+G9$&\?EP&(ZPY/H/G+*V7.
|
||||
M$>8&?D2,*T*3Y@IS-68J\WXJS+Q-6=\UH@DJ0V;J7'FN^T0286EB<#K&F>DY
|
||||
M7>L=%Y/2065QA# SD+RN7"JOE$=V(\ZORXAH]#?^:>",A1>D8W61[$@O _'=
|
||||
M^=*.%A<HVM;1BT9"\SJ:T/"*(\=SBMW/Z'ASU"W2'!5\M%?(#(,/7,!F1<14
|
||||
M*DR*O]<GRYI3RECII/))'1%TZ[)I8W3Q^#J'P3IJ_IAGOK[<:]5QR,=I/-+@
|
||||
M%_-\6D?GGVAQ\W=]C3,6& ,SG<Z?*];D*B,V:UV&^@9F!#Q2'U@/\SIYC;QF
|
||||
M7L$T[%?-*U@QY[= 4[[&7W2-K1FJX_XLS.AH+#G>8:2ODD:KHUVOR-=]+39F
|
||||
M'+6O7,?6JXKQZ^AI[,',7DFON<4BXP7-SHAZ_;;4''FORX2RRYI3=%%U>,0,
|
||||
M7X6.[L9.#)!1_SI:5*!Y_SROBL:+8USORUC[^S8"8<:,>#, ;"K0].KJD\%B
|
||||
M7P^P>[[O*VTQWDBB.:'%7@LM?$6HYN:M09(5(+1>&1>.I<:&8^\URG!G74")
|
||||
M]>H"35@VZR,F"IN!E3(.';6,$%AH(^>U8H:C4<%"7T>O)%C6(B4M4>-ZQ?QU
|
||||
M%U>OOD:V'^@5Q=> !3<69Y:P+(.,@6-A#"&'[1A0;?P$<U@IXXN&^:J2&02.
|
||||
M9K*PFU<^+(9O 9N 69PQ%PN-8-@C[/25!GMUM,$&' &."1S6*]*F#,O @;W6
|
||||
M7V1F_DR)%%: )65Q/#OJ_1B.%]AXFE@O%T.%?<+6!$2;:]8,[!06%8MGK<*"
|
||||
M8'%\84?2(B46(1-MS/618&N-O,86;*)Q4*-OK,;@&\]]SE?M(HN1NYA]S<$&
|
||||
M8Z5[G$;OZS%V[0B')0O485\*=%@\K!WV$?.,/>M1TI2,#)D1K"*6N2<Z.\&>
|
||||
M'#^OR=C0J\,O' N@X[]&'7^Q_U= K,N1^GIZW<:N&7&P%[_MJP+VXFA%N\0*
|
||||
MT%!E44U'6)HSW4I<2#@0,$4"30'P7,MP_7-N'2+P8WNOMT#%&^<MAZ,22&:U
|
||||
M-4> -049A"8EOI*B$RE\JU1-G,A65?* I.!^'3<N2E %EG@UQ= E*.1K1-@
|
||||
MN*XX0H1.CF9 "8!>&LE* 0!*,P! GO'@Z&C(V;TCCJ!ED2/0$A6U;1],R^!
|
||||
M $0 -%G' B0!"N@)U,E6"BZRV<"7+#GUBE.1/<J*9,%=3P":) @@O?I^9,H6
|
||||
M9>,45@"DK I"E %F" ,"7"K@%6K;$X6*XN4)<GJ045 $]:2+'6!D.%M$,N2
|
||||
M#':R0 )BY5E6XBB1?=OA9-^R3EF,K.1'+<N19;]N=509(-F\K$N6+VMHR&$T
|
||||
M!*0Z*]F6K"@')BN3-?M4"1P+6+EA:O>H+M 2X&%^$^%:=]D6"ERV)TM4 <H^
|
||||
M9CL&0]FR0%,V*RN210^8NR0?3Y]>2&;6*$N:535!9:6R5-D49(- -'N5?<U.
|
||||
M"K0\75G+ EN$*#N6A<MN9;NR+034K$@U+,N;Q<NV9@>S9UD<:H24+\N6/=&-
|
||||
M9I&R?,JYK+!4\D", 2I4]D>B4V] %S6-CN^6,V"+28%IEE,#QZ I-#)@<N&
|
||||
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
|
||||
MC':^?UN4[?4',0"7&OHR>@>X7\*C+W6WCQ19.*=%<\\]J%_FJ.\Q[Q3VZ6)
|
||||
MU'@]BE[J+^76!_"6:JW( 88,M21:;T@ TLOC+1)8E+JY[R2B[S&I^]M>DB;5
|
||||
M<U--LZ90+SZ5;^?_32SEEGQ*TB0QD[^VG$2,J/\^Z:@]Z=]>E?Z7HA19: X2
|
||||
MM_R_GB< \#UW@B#JW><N'_NY#Z6; OSVW^M3FHV:?W\"]JP",&Y)E?%-XC)U
|
||||
M<\5)_EI)KRHC+S;689S&DTI,%.!<@6"7=OMN2MHZ\LZ^?J4=5!%Q[1M*:ONZ
|
||||
M(]Z^4(GGP?HSLA#9Y0[9?<E;>=^];UFT)R'EW?.6Y "_*"),$N'7TVOXS4HB
|
||||
M?B487]S%;PHJ>0N\91$@?RT"O%3O1^7W/B3J\0&?B&BWG=^)R><7;WO[R5ZN
|
||||
MGF9%T-^.3D70\*/^/>[>@*N[+Y#"[?6WZ-NR'01K=R<B_EIQ4OA7ZD/^K2J<
|
||||
M@%<FJR3\K_HW]?O^#2G)?RVLYEP_KOT7G"0)M@%'E+*^B0P=</^7GIL!KC4%
|
||||
M@#G ^!PE0KXU[180@"_@%L_"^#38*3WK/0 SG!U@DE,H.!.DG7R DP*!O6B
|
||||
M@AD%'N!2KS]78!$()@$K-$S :144L$JKTZOB+ 6KFJ0 5X!1;U@'UEM-- /,
|
||||
M>A6^U!YD,*9 &>SJY>9Z>LN/K. 6<"38TPL#_MG*@,T AB%/<*EIHA0*WG9Q
|
||||
M?0^T-ZC!KNVS]]M"D7=R4*1)76#I &-E(V$%KA74:W&_S[EB@<!6>6L&'D^,
|
||||
M(GBZ_H2>D;V.I. A+544DSBV5=YJIV0D#TS2V0-/?]NW?N!/\/, ?FO]Q>X6
|
||||
M#TNIH@) PA.*Z)N5.(D\-KR_&J %<#L0&\BHNS7MJ#JL;UXFVR7X'&P"XAAJ
|
||||
MGN!*P3H=D%?77H<1C@&O@+M)O20E$%Y# ??\O1)BA.6_N5Q-L&)I$SQGLT3Z
|
||||
MA#FZ6;8HYXG'7:<#(F2@!G "#L=$(!V*$SFK7$(/MUU2[8XY(_)W?.MJPK'
|
||||
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
|
||||
MHW QBBOU/MJ"K<&K'S9KYYUBZ^4D?E@W,A: NB6M/*1=[#V[3VP-=A>6FVP
|
||||
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
|
||||
MHR]T5@)! Y ;?"F<@+X=N@.30"3]!. RQWL:@J U[;<LXHR]V7.,"LFCCF$
|
||||
MN<?<:6XO][DB*#?C?N?D08NR6>XP]]2- U+Q<7.;I/?<U=DS-Z#[I@#]2 S[
|
||||
MN0?=BRTI:YU[G7/GSLGFN;\ >VYS;OXLS WICIS8M03=EFY"-V\@QD86T'-G
|
||||
MNL,#F 7HQX':SOU,I!=HN9$[WH%AE]F&THWJ=B"$!\+<K6[5=J&[7>?GCG6'
|
||||
M!ZXRHFX.K=D&T\82-!T@?T$$$PYX29W9#A$>$@+#$M<6P %@AF<7A[WJ_@+<
|
||||
MY%H"D"M+Q&*M.RLQL$[AN6T1\.UA5Y3V*IOMEF\_JHL\]6VX$XO;/ Q(J'-O
|
||||
MN]_;1^XD-YNRO@WN'G^4MDDKJ>H.B[)U Q3N[CNQN&/$]=\@K7<6'+U1\78_
|
||||
M2S= _F[[=I,5$UP>/BN5NU-TX&AM*GK "/ $\'<?GX)D1PFP].=86#6FI7?/
|
||||
MM\7=XNT&$/*)2XSV'-/R2@'>9Z:O-*8@WVTBIB2*F!B?&Z#1'<G[1PQ7.GAS
|
||||
MN[N&DX*==GS;W/+PUG*9O"W>CVJ,-YZ@ZH/S[B7IO%$&YN$4T,>[N(7?GA([
|
||||
MMS+;M%ETMS;5L(WDS@*4<AS>[V[-P\T[X/WS#@]XO'O> N\>M(5YI:%8LN6X
|
||||
MZ,9,1.]O@=1[NJK2D/+<ZO"HS]Y]-\P;%9DX@'JKO'&96.^J-VK@ZDWUMG<;
|
||||
M3L&K.N*EL-<;X/WVE@&;O;W"05H+MX!;AJKACA$8N!'<6Q4%=R9C =KA;KMT
|
||||
M;+/1'H$(][=JPJVE$'QCN G?CX$--^-[.7!U^FQT;"%-HY&Y;=*;9. $D'D/
|
||||
M 2;<")(=Z84;9L Q*'Q_"F)#@<ZJ%-&'\^WAGM5>9;4 IF_4]PWCB?.6OHT"
|
||||
M!23?IV_!)ES;0PN.=NKLM&?21F[CM]R@2IL^.EL(7E W6XK[;$)^(TEBGYC
|
||||
MG%PZIF\?1&YFSV/]7@WBOE/;K*M25E21)$WZSGU+3E+?!M'5-\6A]9WY%@XO
|
||||
M!J8$@ +9=X/;\_W@OGV;OTN$U&Z]@+7;T8WM;L4=<W;:SMF7M_+[",#\#C$]
|
||||
MO[O?T^_<-_>;O$:5E'YCOU/;VN^)PP+<],W\]GZ;OIW0 ^5U0RV[VM'_IH [
|
||||
MP$MW"O!E!0+\ 1X]CH!;'B;@J>T*^+'I^QT]=C"<NTD&(UD=*J1@+VNE%>+>
|
||||
M*<Q+MJZ.H2.D?\*60$#5MUW@@VCB]ZVK[LF)1'Z#HZD 1' :N$>S YX"M]+F
|
||||
MDUC@D^_C8 Q\USD#-P)L@+BTC34>N$:KI3W?-N]IP6U47/!'=7Y[U*W8YF\K
|
||||
M-L'11(#-0!$<\FWD3H/# Y7@_6\D^!O<"FZEK26-9^%.*XHQ.(>V#$[1/H/_
|
||||
MNF #:_#1=POE""Y ZA[ P:'?&P(U.!S<#B[PSJRYI<G@Z>T^N%X #5X(#X2K
|
||||
MO7<(@/!#."$\$TX'5S#;(N[@16T2]\M #[[#X(.OMPW1UU/)CQ$<%9Z1K8%3
|
||||
MPCGA%7!&.-Q)NXT9,U#OP2/AIW!QM"4<X?T.K()7P!'AM(14>"<\I 0*5T*Q
|
||||
M4DGA<9!/ GLG"$!OMFT_="DA, N%LC@A%M'JP0%!82D6/XLJ[V);""X'/^;L
|
||||
M$%;AW7 BP ZA L[BJ',KA&X'9I3\QDH2-3D"!X&GMJO?#' 5. G\6V4"CSF@
|
||||
MP*/'\G 0 !1\V*78;D2#HZG@K7 1$*Y.C_T%]X'/MX'@Z>C]]UT@RWT$3X(;
|
||||
M 0+@Z&XY>$#\+8,(]X#/E?;A( I^#]\AY"197Y[PO,]/7#!#[O;G0 2WX)W
|
||||
M='[@MO!2>"3<XW7M1H2[P3F1$''2=R)\#OX+;XC3Q.O@GW"!=QX\)9X,7XDK
|
||||
MQ%]&B'!S%R<\)CX(_X,;PH?A+G%%^#!<%A[5MM\^PF_A^VW]-Y:[_XT)/XH3
|
||||
MQ3T"K_"C>$W<*#X19XJC743A X:R@'Y[HLT2YW\#P[, PO"KN)$[=XE7
|
||||
MPA?A.?%9.%@<&9[_+HLOQ/O?NG#)CUH\X6WN:HLGO-'B7?&X>-_I?;$OXHFG
|
||||
M$Y;AS7!$Q*1DQ<LMD(;'0.@[UG!B!;E8&U[MGHH'Q>N>WG#X(S@<,RX.%\^2
|
||||
M%,KA^FVVT1HMLR#ZCCF D_>\F%Y-&R/B1G1*NLI6*7#@D^??Q<0!DQ3EAG?'
|
||||
M1UX?\DEZ@2>BIW&3E1A@N1U ]PH\Y6\<#0 '4'P*Q_'<#ZX\@./+O4TR>(W7
|
||||
M[CJ&-F%>A6&\$92=!8D5Q]DBQ-J<+%VR.OR[2 #D"( ,J5-(>#?U7*!2" SX
|
||||
M45:S/8$;^'.\.\X"J43PQ*M<G%!>!F^<@9BB @7-#ZLY9('3N#(P-9Y16(U3
|
||||
M#%KC8UGG> Y<-F[+FG74QF5DHKS<N)5@-_[XQLZ6NE76P?&.UW#\.A[AN>7\
|
||||
MQBF/R_$7> M%0!X;YU6T@YL\( VQN'@\+T >7SGP,F;2Z?$C &P<])3T4$R
|
||||
MQ@_4\''S^'R<^&A_8[QZ9SGDH"=G,.C),-X/O\I&QXDJWW$; '-\0ZX>'Y![
|
||||
MR'%UAB!_>-=015Z[@Q0$NX@ O_ KN"<<1ZX#OR=9,6W@3'(C^83LGN1@R!1)
|
||||
M'O"3Y&\B>9:\0TY4^9'SR"/A'MJCPY#<(_ C]X[G@83D&G*/ )6\.XXD5R/H
|
||||
MM]G@,7 <N9-<5A$ECX6#+<;D.?)6AEGI_#@G]Y +RAT,PM).W\DGOG(G-X@R
|
||||
MPQ7-9@I)2!JW,:Z%?HSS>:_AI(H9^?#;#RX$R%1DQE?AG?(I0&9\*^X&'Y7C
|
||||
MQ)G?LW"GN(B<0XOTWH;[P9T C"?/X%12-"! (@*8Y>@)@*+V!*YGJ'T[VI7'
|
||||
M'.Y(X*#W"$CR,98*.R(WRA'CD'*]0(W"PPL-IY2[DJ?A@XG(>.M"4^X@_XF;
|
||||
MNHO?GO+.^%Z\%9<M'X>[PF?BIG)/.*J\*9ZX?8K/4$$ #("HN%T<* Z.AI6O
|
||||
M!_P*1%KO@#RPNB#XR94#!7SEM\99AZ]\J)A1"I9S'&+9/D1I8:-KCO+H>F3[
|
||||
M) 0L20=E3G%[R1PC <%,GZ33#D<QE@\".X'?Y(; 5;A%O-PA;G<7^(JGX3#
|
||||
MFCKEJ_#19)B )F+NIIA[S%T(=4]P^#JT*& 8WY1[S$OEJ_!2N66A96XR3WYG
|
||||
M*D#EF8J>$\V\8V[D!D,V >((@G"L.".2/;CHC$!(S$?=+G,CMQ%@LADT5YJ;
|
||||
M!JH@&_/\]RE\';H*7YE[25;EYW*>^1'<Z5T$ (=SS4L"K8J=N1G<8XZ9% *L
|
||||
MPLOF8/,<P9G\\? V:E^MPWM9AUMP$+3Z2??4'@0[S 4:;4\QE)W\0&T0W7ZT
|
||||
MRV/E\'):N3QP1LX'7Y=?R_$#LHJ'.,8\<:XQQYISS"OC+7%PM,A\6RXRKW&(
|
||||
MS:7BD?-;USIT6XXR'Q+0 "[GAG.&.+A\6RXS%Y)'S<GBUG+1>:A\6QXJUYF?
|
||||
MSJOEEG%^=YQA%;XTY[RMS5'GL7.2-F:5#0Z.MIJ#SE/G<7"N.>?\:UY,,9T[
|
||||
MSM7EP'-@>/=Q6XXV+Z:HS:/F!)&29#H< S$HCC*$FE%098J,PUN#$8HV()PW
|
||||
MS1/>0 HK@/)CHE+E@@*XD*VUW0["QOL#9H$"+0AW;%OE8W,C=R5<6"G9/%PP
|
||||
MO"D%\?):^1AJ1_INNOI\0N?F9@6?:LQ"'GF@D*&TBPF=-.I6,\:7L !_LV4I
|
||||
M-E84<8(#^NV(HA"DUN**BW,3_0R]$(VC6\OM2/YHCX2B7MQ%+I+,KU(ZH$I$
|
||||
M=,D%BW$%A%QT? KU>ILD( VB*=7L>1R;),$])P)XS]7>A@KQ^3""?,[>,9\W
|
||||
MDM'G<VL:1[C9K&T:?I^CRY'GN?/Y.9S!?N[KFI7+RQ70_',@[^OG?\XIX*:%
|
||||
M&-HJM@DW06[BNTTWANLZC=TWO,\&NN7A@7ZBB*"KN%\%%/19!P>],)9!5Y]7
|
||||
M3"SH[@/_N<HA*!=S4*I&-4I$XH02^B(" 8H82*&[7$LPW+!I834B7HNBFFO5
|
||||
MA5+%,=^Z.7 UC<2P3@:M(!3F!E$C //CW']P$^T"<R(^P,Z\_(@?6"MJ U1
|
||||
M"\0 !^[*SCIE-BYOB(Q#JU<1'5*D9F+.L&$<8"5T;!G=Q.\I &FD0F"VF2P]
|
||||
MUC@BC_3\F2T=1K4<D2TOS%]&4P21 W4@P[;I;J%NM1FKC'1A.CTEG0H)1V_/
|
||||
MN/OF* -PM!*]?K[P;J*/+03G-O0&.6)YYV"SF;V"QR9A]I\@"/HI:\0U 49O
|
||||
M^[SIB+=0&!%B%/:.DRRST*(=?2IH,T)DC?;FN7<"3;5:!@\A"/R#6S @?2)]
|
||||
M/IOF)U9?UU96RLD!L41W= *L98 !J[T 8\3+BMRZ)@0=S+:1F$-=GQY1;ZB3
|
||||
MH@^W8-0MJ]M"OJK,J7/GLP.Q"&VTB7<N6,@&6D'0H>%W$0%#X\S02G!9YCZ]
|
||||
M$(<[R&A9-D!6).DSG*E+.ZS0[N<CZ>%6]L0",&#+!'5/(&@5<UK5=Z+(0!Z^
|
||||
MEF8P,D']A#L#J5XO#%E(??03F1VB+W_YX>U[QATN5D/0:H&I>E:=Y?Q[%GAV
|
||||
M="[/-%ZP>AO@\1QY'LE&GK%V<)_^QKUS=$?3=M]8J9N!(8S170R;_STLT &5
|
||||
MPPRWO%#UE@)#+A!5OZCS0M_-5:[QKG>;4T#7Y"1%%IC=U*5WRLP)!V#\>>!N
|
||||
M54(+%(>=-Y%4.A(HHF'1-\IMZ@FMEHU -[3]4$]\/5ZZ3-WV!%,BJ_3?X6Q*
|
||||
M'EQ2(&F65%BR4&LX@D^:"&P&75L30/V)[0*-5=F"PV[K72APF.Z%O7,P0@^%
|
||||
M<]0=L)/@^DUAN,XLT+6$>B2SG*,7 '"=N,Y<#ZZ7;0RB_.7?>G/=&&%<7\Z-
|
||||
M&(G5,0?!&BU(#2$A_ANE(6X W75;T*W'(=%=9Q:0UR7$XG5KGB9TNPY>EQ";
|
||||
MU[GKZ'5F 7N]O/Y=#Z\7U_^4XW7X^E+XO=Y>7PJ+U^?K[O7Z.GI=O%Y=GWA+
|
||||
MU^_K.U(JPX']N<[>R0_*,!( -HZZC:Z6+?!1>+"+ %[2[ILKU6X=I//6E:PK
|
||||
MUV\*-@+826("LX!;UXB5V&]BU'4 =RSGM[Z%ZD(1V!,+:.EM>DI=:4;W6R&"
|
||||
MTVL<SR*50*!IY5-';LO4V.UQ"ED,A"\:*193#YAS#; "0 ;)Y!""XOA1O5"/
|
||||
MKL17A8D00\K2R6[R37.<E!U&PK!=$#&LRGZ31E8;@:CL30F&CHZ.I[8- ^N!
|
||||
M@]JT87;O!RO("15FMRM\/18Z.KTW^V,HK"=G%[,'Y>PX'YPZ.U NS3XS&!?4
|
||||
MV8O9<V([SMJMSBZ8$Y;>B1;EU0X[#CY!.2 PD@DN=!;M/O4V^Y="B@'VP$34
|
||||
MV=4.7AD8P:7]3&9)6%"9_AY#B_818YT=+2%6UQ.,VE.I+H+(PJG]]S!,_>,0
|
||||
M*EBB,3Y0>]&BU4XE@$O8<= 2O6I.Q*;]='T@7&4_VADWJQ)%>Q3L,1=F]R<
|
||||
M7NKL* N>7)A]7N!AN+1?V5E@8?8N^^L#O0W@YH1NMHRZ"4)):A&Q*_%)U7N<
|
||||
M"?0)$HK_@W$%K@7^&>6,?,<)BJ>2N-5GH:-F;SJM6%X&[ )/SIF]K-#C+%'I
|
||||
M-Q+I;?94:LK:T2YK[X_QU"7M2P(7@5?FTOZER+1K"//M<H%.NR3JT_[T*"N(
|
||||
MVL/LI/:'^ZT=U<[WR!6LVHN4KG:X!,,=GX!QK[6OVG/MOO9^.\A]T[Z+";8_
|
||||
MVH?M@:++G!W'V/X30+8+.I3M=AQF>XC!V?YD" RXW(D*+O>&3DB VKXCM;:K
|
||||
MM8"_=%#.%HB0VY[W,('F-,+MC8=Q^YOZI7-N-Q.DV[7@Z_;'4+M]ZO1N3ZB;
|
||||
M >3M521Z^Y93JAEL\3/&''L"8LX"YO>0GL(L.JF#GV;LX%?@PS_6@%F!<%I:
|
||||
M(UEH$EG1-YD9-_PXH4<.-%S7&4JOQ)A'QDVKQ4W*E#B3NA;.5HS]&B6/PF6J
|
||||
MBS2/6B"&I'IV3$M>0+P_@1B2LT[U>N11O?Z'9&$V8C9*L$DP+:?5\=Z=G-:-
|
||||
M:</$'@%GIJ8UVJMK4=L]F-:EXA8M.V'L'C;]J5X&?XP_+M_.G68S,M9Z'S?:
|
||||
MW3\Z/$S$Y-X]'MS:76MYME#-E JEQKR7V@OQU/+)"_8)*P/B[>W]WY&Y%&&&
|
||||
MUH^Z]XD\P=] IFO^90Y$=E^ZA0GO>FV",=">Z%C*AK%)WME8Y47K/Q(G+T?H
|
||||
M,:>7X_>80*N\[[Z45#49+WV5@7>4P> =VAO2'=.")W65XLG*^Q*3[5:HY/9H
|
||||
M(-OOK3B4UCE)_]Z=O!CA,AOON,?$^PH#0"M^1VD9:".6?$#*N^,=,/:(U+S;
|
||||
M*@OOC'<"/.2]_.@':,"3LW"9:KLQ[>3=I6)ZET@>)@ ):W+S._%R>OE^IR0*
|
||||
MWG&9+&@+_/U]5ZE_7U9&W/[O%DCTNP!^6:&!%T@NWA4:/7A[ 0/^_%X>X&M)
|
||||
MWB/P=9MWY1<SA)E]K, _UR_PI/<,4!!^26M^#&(:X9/P(7@H'08>*H0D P"A
|
||||
MWFUZL[?:>\\W+N!Z;T)MW?6Q48?Z65/,[DC_,$;3D=]W9_>F'C$:?7PT6$'0
|
||||
M:<N=&P[)Y)THO*R5-@+$X#[:ETXICD0:(EW0 3,>8H8^[!T]J$ ZVE=\$Z*X
|
||||
M$ZP^' >-A5+FL[ZX*<J0-ENP3Q&R5'[G G&\D!*S"%Y(-E]\[:,3DNPLI(
|
||||
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
|
||||
M[YOWH7N\O4.@=(\5R'A"$AJFUVV'D _>]^<,> +,A#XV?O&/0/_UWH6(M_/
|
||||
MWB;J$WR*0P6_<4\[:N!K?^-)6J0-OC+'@R^_O]NWCT0 (_R0: E_GL8-@WI)
|
||||
M,64\0GS!:O,W@O].&>%#5WGX&/QTD :?@T\6(.*#\.?W2/R9A1+_= \#B-VO
|
||||
ML[;+;QXH/A=_$_B[5[WC\/6VW%4L?O(^@T_%#PE$\;OX\/LB_O/^V93$[]N3
|
||||
M\5/W_<3B*D#N)@<N@50B> 3W48/"_0:?1*>XC^'[U1OX/7P:?IKX57#'CVN5
|
||||
MY3WJ H$V=&. @)'0ED/7@WKLM[]7_4D@)4!VWRP+!/[0K0QP%*22T<W8/JN[
|
||||
M*3+:C&AHM"O_#]\D2-&A<LL#KB8!NV*I6)*(Q[8#;SO4&(,I@?^)!;J3OLH>
|
||||
M(Q%W.O-8_EBV/:AKCE6XHO\CEWP2[3$?-&6+N&?XG)3YS?%I/ET5(%OACN9?
|
||||
M91_;KLEGOJJK"B")SL[*M8_YP:XA[FN@/+#2QN:W4*;YZ %U]) VG)_+!^<;
|
||||
M:5U-LVYM8HH.GF\:L/30\]$#Q?RQK#:_*.W/O^?357/=.PQO?H <"<":E W$
|
||||
M\S=(I)$_ZC6_:<X>:.CG\B/Z,Z%:_C>_HA_SWN;/+K@FY'R%/LG -.O0-PUL
|
||||
MD*H1C[%+2JOBD@+6\<Z2]'/Y*'VOT\CMIM'-AW2FZ*H +_UM_H9YVC$3"A?5
|
||||
M $+Z-OVK;/> "$W-/^G7/&3Z*_V)OG=VJ"]K@ND?]57Z-'V-_E@V-% ::.KK
|
||||
M],-%//W.9D( J)_%OJ)&0-$ KXAD8 =]-#V3(.SL:]T?MZ.Z^O3B.*A3*$=D
|
||||
M :@ ["$6J%9ZF_UJBC4]\X/D=XLR5'Z&':2D3A#F"((&AH\3=X(5L3[7'U%S
|
||||
MHV4)N/QM/EG@:<#>47YV11%[A(H$84O@7MPFR(P6]E74NF;T0 (HEQ]SP %4
|
||||
MN9!#6Y7ZA;Q$ F&=M^PWHNGZKF@]);W(-*#JJG)I3=?HV(/ 0.[3(?#6N+V;
|
||||
M]J'1J/T<*GJ@+EGC6%54N6Y$98T,E;\Z9R<3X?K(]4_[AOU6-&=?;?+9+XP]
|
||||
M243[=Q&E"'&?''K9;["A YWDB(IG/FG$M1^CS@A00C;&N79U A&@*]= #@R(
|
||||
M*:C[R'W,?FD'M5V4GODP]L' ;_4"85]?7H(42PXQD!>BQWW<OF$?U40;X.RW
|
||||
M]AO[B8SN?"2^?N'FJ.7U]K\)T_W\?DD:M6\::]1%?N I'9!H4LGF*2&) :%4
|
||||
M)<P2:VWN._3])R!]SXP&]$G? H*H;'9_N6]YV.YCVKK[7V>X@)@BO&_9%D@K
|
||||
M(3 "U"WT_E76KD_BMSS@]:M<3X*U]NO6_A!?>@ND"D@%W)T)T5[_^?3A?^=#
|
||||
M$- &S_R1V$L@I^ YMN_0>)U/M_VQ['H_R3\2P\?A^._[@AZ[AF,?K@[9]Q#>
|
||||
M163\8UG&4_^QQF]Y4#=<^4O[H/W<!'0?J0'F)QGD4(65J_TJ_W_?'04HA>V?
|
||||
MCII-8@K:/DG"MM_F;Z'H]IT O/V1V)S?)(H'3=YV6%H $ \+"-6GSX\5Y[Y1
|
||||
M^7E9@_XG 7$?.N'<C\0S^C/ _7W%/B\+5W?EG_2_"@B_"(TGR:6_P1^ OR2-
|
||||
<Q+[C-8 K_UH;.B%7F?OHY1@1RL^2C8=_TSWJ!O2_
|
||||
|
||||
end
|
||||
856
Linux-0.95/patchs/cdiffs for 0.95a
Normal file
856
Linux-0.95/patchs/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
Linux-0.95/patchs/config95a.tar.Z
Normal file
BIN
Linux-0.95/patchs/config95a.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/patchs/configc+.tar.Z
Normal file
BIN
Linux-0.95/patchs/configc+.tar.Z
Normal file
Binary file not shown.
114
Linux-0.95/patchs/dvorak.patch
Normal file
114
Linux-0.95/patchs/dvorak.patch
Normal file
@@ -0,0 +1,114 @@
|
||||
From: mper@uipsuxb.ps.uiuc.edu (Michael Pereckas)
|
||||
|
||||
This patch for linux/kernel/chr_drv/keyboard.S does two things: it
|
||||
causes the ./del key on the keypad to produce a period, instead of a
|
||||
comma, and it adds a Dvorak keyboard.
|
||||
|
||||
The first change will probably appeal to US users. Others may prefer
|
||||
the comma. If there is a lot of difference of opinion on this, maybe
|
||||
num_table should be moved into the national keyboard definitions. The
|
||||
second change is great if you, like me, like the Dvorak keyboard
|
||||
layout. Unfortunatly, the only way to change keyboards is to reboot
|
||||
with a different kernel, so the Dvorak keyboard is a problem is more
|
||||
than one person use the machine and they don't all know Dvorak. (this
|
||||
only effects the console, serial port connections are uneffected.)
|
||||
|
||||
I post this on the off chance that someone is interested. If you
|
||||
choose to use this, remember that although it seems to work fine for
|
||||
me, this is an example of "programming by meta-w", that is, I copied
|
||||
the US keyboard definition (using the emacs command meta-w) and
|
||||
modified it, without really understanding it.
|
||||
|
||||
|
||||
This patch is for linux/kernel/chr_drv/keyboard.S
|
||||
It works for all the 0.95* versions, I think (!)
|
||||
********** CUT HERE **********
|
||||
*** keyboard.S.ori Wed Apr 8 16:57:58 1992
|
||||
--- keyboard.S Wed Apr 8 17:03:10 1992
|
||||
***************
|
||||
*** 18,23 ****
|
||||
--- 18,24 ----
|
||||
* KBD_FR for Frech keyboard
|
||||
* KBD_UK for British extended keyboard
|
||||
* KBD_DK for Danish keyboard
|
||||
+ * KBD_DVORAK for Dvorak (US) keyboard
|
||||
*/
|
||||
|
||||
.text
|
||||
***************
|
||||
*** 251,257 ****
|
||||
.ascii "789-456+1230."
|
||||
#else
|
||||
num_table:
|
||||
! .ascii "789-456+1230,"
|
||||
#endif
|
||||
cur_table:
|
||||
.ascii "HA5-DGC+YB623"
|
||||
--- 252,258 ----
|
||||
.ascii "789-456+1230."
|
||||
#else
|
||||
num_table:
|
||||
! .ascii "789-456+1230."
|
||||
#endif
|
||||
cur_table:
|
||||
.ascii "HA5-DGC+YB623"
|
||||
***************
|
||||
*** 611,616 ****
|
||||
--- 612,667 ----
|
||||
.byte 0,0,0,0,0 /* 4A-4E */
|
||||
.byte 0,0,0,0,0,0,0 /* 4F-55 */
|
||||
.ascii "\\"
|
||||
+ .fill 10,1,0
|
||||
+
|
||||
+ #elif defined(KBD_DVORAK)
|
||||
+
|
||||
+ key_map:
|
||||
+ .byte 0,27
|
||||
+ .ascii "1234567890\\="
|
||||
+ .byte 127,9
|
||||
+ .ascii "',.pyfgcrl/]"
|
||||
+ .byte 13,0
|
||||
+ .ascii "aoeuidhtns-"
|
||||
+ .byte '`,0
|
||||
+ .ascii "[;qjkxbmwvz"
|
||||
+ .byte 0,'*,0,32 /* 36-39 */
|
||||
+ .fill 16,1,0 /* 3A-49 */
|
||||
+ .byte '-,0,0,0,'+ /* 4A-4E */
|
||||
+ .byte 0,0,0,0,0,0,0 /* 4F-55 */
|
||||
+ .byte '<
|
||||
+ .fill 10,1,0
|
||||
+
|
||||
+ shift_map:
|
||||
+ .byte 0,27
|
||||
+ .ascii "!@#$%^&*()|+"
|
||||
+ .byte 127,9
|
||||
+ .ascii "\"<>PYFGCRL?}"
|
||||
+ .byte 13,0
|
||||
+ .ascii "AOEUIDHTNS_"
|
||||
+ .byte '~,0
|
||||
+ .ascii "{:QJKXBMWVZ"
|
||||
+ .byte 0,'*,0,32 /* 36-39 */
|
||||
+ .fill 16,1,0 /* 3A-49 */
|
||||
+ .byte '-,0,0,0,'+ /* 4A-4E */
|
||||
+ .byte 0,0,0,0,0,0,0 /* 4F-55 */
|
||||
+ .byte '>
|
||||
+ .fill 10,1,0
|
||||
+
|
||||
+ alt_map:
|
||||
+ .byte 0,0
|
||||
+ .ascii "\0@\0$\0\0{[]}\\\0"
|
||||
+ .byte 0,0
|
||||
+ .byte 0,0,0,0,0,0,0,0,0,0,0
|
||||
+ .byte '~,13,0
|
||||
+ .byte 0,0,0,0,0,0,0,0,0,0,0
|
||||
+ .byte 0,0
|
||||
+ .byte 0,0,0,0,0,0,0,0,0,0,0
|
||||
+ .byte 0,0,0,0 /* 36-39 */
|
||||
+ .fill 16,1,0 /* 3A-49 */
|
||||
+ .byte 0,0,0,0,0 /* 4A-4E */
|
||||
+ .byte 0,0,0,0,0,0,0 /* 4F-55 */
|
||||
+ .byte '|
|
||||
.fill 10,1,0
|
||||
|
||||
#else
|
||||
|
||||
34
Linux-0.95/patchs/keyboard_rate.patch
Normal file
34
Linux-0.95/patchs/keyboard_rate.patch
Normal file
@@ -0,0 +1,34 @@
|
||||
From: johnsonm@stolaf.edu (Michael K. Johnson)
|
||||
Subject: changing keyboard repeat rate.
|
||||
|
||||
OK, I have gotten several requests for info on how to change the
|
||||
keyboard repeat rate, so here goes. Note: I can't just give diffs,
|
||||
because there are lots of options, and for heaven's sake it's only
|
||||
three lines of code.
|
||||
|
||||
In boot/setup.S, there are the lines:
|
||||
|
||||
! set the keyboard repeat rate to the max
|
||||
|
||||
mov ax,#0x0305
|
||||
mov bx,0x0000
|
||||
int 0x16
|
||||
|
||||
If you don't want to change the repeat rate at all, just comment out
|
||||
these lines by prefacing them with !'s. If you want something in the
|
||||
middle, change the
|
||||
mov bx,0x0000
|
||||
to mov bx,0x????
|
||||
where ???? is determined by (from Ralf Brown's interrupt list)
|
||||
bh = delay value (0x00 = 250 ms to 0x03 = 1000 ms (one second))
|
||||
this is the delay before the repeat starts happening
|
||||
bl = repeat rate (0x00 = 30/sec to 0x0c = 10/sec [default] to 0x1f = 2/sec)
|
||||
|
||||
I use mov bx,0x0006
|
||||
to delay 1/4 sec, then repeat at what I think is a comfortable rate.
|
||||
I am too lazy to calculate the exact speed -- maybe 20/sec? ;-)
|
||||
|
||||
Hope this helps people.
|
||||
|
||||
michaelkjohnson
|
||||
johnsonm@stolaf.edu
|
||||
837
Linux-0.95/patchs/linus-95a-patch
Normal file
837
Linux-0.95/patchs/linus-95a-patch
Normal file
@@ -0,0 +1,837 @@
|
||||
*** 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
Linux-0.95/patchs/mouse.tar
Normal file
BIN
Linux-0.95/patchs/mouse.tar
Normal file
Binary file not shown.
BIN
Linux-0.95/sources/sbin/acu.tar.Z
Normal file
BIN
Linux-0.95/sources/sbin/acu.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/sources/sbin/diskbackup.tar.Z
Normal file
BIN
Linux-0.95/sources/sbin/diskbackup.tar.Z
Normal file
Binary file not shown.
100
Linux-0.95/sources/sbin/fdformat.c
Normal file
100
Linux-0.95/sources/sbin/fdformat.c
Normal file
@@ -0,0 +1,100 @@
|
||||
/* fdformat.c - Low-level formats a floppy disk. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <linux/fd.h>
|
||||
|
||||
|
||||
static int ctrl;
|
||||
struct floppy_struct param;
|
||||
|
||||
|
||||
#define SECTOR_SIZE 512
|
||||
#define PERROR(msg) { perror(msg); exit(1); }
|
||||
|
||||
|
||||
static void format_disk(char *name)
|
||||
{
|
||||
struct format_descr descr;
|
||||
int track;
|
||||
char dummy;
|
||||
|
||||
printf("Formatting ... ");
|
||||
fflush(stdout);
|
||||
if (ioctl(ctrl,FDFMTBEG,NULL) < 0) PERROR("\nioctl(FDFMTBEG)");
|
||||
for (track = 0; track < param.track; track++) {
|
||||
descr.track = track;
|
||||
descr.head = 0;
|
||||
if (ioctl(ctrl,FDFMTTRK,(int) &descr) < 0) PERROR("\nioctl(FDFMTTRK)");
|
||||
printf("%3d\b\b\b",track);
|
||||
fflush(stdout);
|
||||
if (param.head == 2) {
|
||||
descr.head = 1;
|
||||
if (ioctl(ctrl,FDFMTTRK,(int) &descr) < 0)
|
||||
PERROR("\nioctl(FDFMTTRK)");
|
||||
}
|
||||
}
|
||||
if (ioctl(ctrl,FDFMTEND,NULL) < 0) PERROR("\nioctl(FDFMTEND)");
|
||||
printf("done\n");
|
||||
}
|
||||
|
||||
|
||||
static void verify_disk(char *name)
|
||||
{
|
||||
unsigned char *data;
|
||||
int fd,cyl_size,cyl,count;
|
||||
|
||||
cyl_size = param.sect*param.head*512;
|
||||
if ((data = (unsigned char *) malloc(cyl_size)) == NULL) PERROR("malloc");
|
||||
printf("Verifying ... ");
|
||||
fflush(stdout);
|
||||
if ((fd = open(name,O_RDONLY)) < 0) PERROR(name);
|
||||
for (cyl = 0; cyl < param.track; cyl++) {
|
||||
printf("%3d\b\b\b",cyl);
|
||||
fflush(stdout);
|
||||
if (read(fd,data,cyl_size) != cyl_size) PERROR("read");
|
||||
for (count = 0; count < cyl_size; count++)
|
||||
if (data[count] != FD_FILL_BYTE) {
|
||||
printf("bad data in cyl %d\nContinuing ... ",cyl);
|
||||
fflush(stdout);
|
||||
break;
|
||||
}
|
||||
}
|
||||
printf("done\n");
|
||||
if (close(fd) < 0) PERROR("close");
|
||||
}
|
||||
|
||||
|
||||
static void usage(char *name)
|
||||
{
|
||||
char *this;
|
||||
|
||||
if (this = strrchr(name,'/')) name = this+1;
|
||||
fprintf(stderr,"usage: %s [ -n ] device\n",name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
main(int argc,char **argv)
|
||||
{
|
||||
int verify;
|
||||
char *name;
|
||||
|
||||
name = argv[0];
|
||||
verify = 1;
|
||||
if (argc > 1 && argv[1][0] == '-') {
|
||||
if (argv[1][1] != 'n') usage(name);
|
||||
verify = 0;
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
if (argc != 2) usage(name);
|
||||
if ((ctrl = open(argv[1],3)) < 0) PERROR(argv[1]);
|
||||
if (ioctl(ctrl,FDGETPRM,(int) ¶m) < 0) PERROR("ioctl(FDGETPRM)");
|
||||
printf("%sle-sided, %d tracks, %d sec/track. Total capacity %d kB.\n",
|
||||
param.head ? "Doub" : "Sing",param.track,param.sect,param.size >> 1);
|
||||
format_disk(argv[1]);
|
||||
if (verify) verify_disk(argv[1]);
|
||||
}
|
||||
BIN
Linux-0.95/sources/sbin/fdisk-0.91.tar.Z
Normal file
BIN
Linux-0.95/sources/sbin/fdisk-0.91.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/sources/sbin/fdisk-0.92.tar.Z
Normal file
BIN
Linux-0.95/sources/sbin/fdisk-0.92.tar.Z
Normal file
Binary file not shown.
110
Linux-0.95/sources/sbin/fdisk.c
Normal file
110
Linux-0.95/sources/sbin/fdisk.c
Normal file
@@ -0,0 +1,110 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <linux/hdreg.h>
|
||||
|
||||
#define DISK_STRING "/dev/hd"
|
||||
|
||||
static int current_minor;
|
||||
static int indent;
|
||||
|
||||
char * disk_type(unsigned char type)
|
||||
{
|
||||
switch (type) {
|
||||
case 1: return "12-bit DOS";
|
||||
case 4: return "16-bit DOS (<32M)";
|
||||
case 5: return "extended partition (don't use)";
|
||||
case 6: return "16-bit DOS (>=32M)";
|
||||
case 0x81: return "minix";
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char * dev_name(int minor)
|
||||
{
|
||||
char * ctl;
|
||||
static char name[100];
|
||||
|
||||
if (minor & 0x3f)
|
||||
ctl = "%s%c%d";
|
||||
else
|
||||
ctl = "%s%c";
|
||||
sprintf(name,ctl,DISK_STRING,'a'+(minor >> 6),minor & 0x3f);
|
||||
return name;
|
||||
}
|
||||
|
||||
void fdisk(int minor)
|
||||
{
|
||||
char * type, * name;
|
||||
char buffer[1024];
|
||||
struct partition * p;
|
||||
int fd;
|
||||
int i;
|
||||
int this_minor = current_minor;
|
||||
|
||||
if ((fd=open(name = dev_name(minor),O_RDONLY)) < 0) {
|
||||
fprintf(stderr,"Unable to open %s\n",name);
|
||||
exit(1);
|
||||
}
|
||||
if (1024 != read(fd,buffer,1024))
|
||||
return;
|
||||
if (!(minor & 0x3f)) {
|
||||
printf("Disk %d:\n", minor >> 6);
|
||||
indent = 4;
|
||||
}
|
||||
p = (struct partition *) (buffer + 0x1be);
|
||||
for (i=0 ; i<4 ; p++,i++) {
|
||||
if (!p->nr_sects)
|
||||
continue;
|
||||
printf("%*c",indent,' ');
|
||||
printf("%s: %6d blocks",dev_name(this_minor+i),p->nr_sects>>1);
|
||||
if (p->boot_ind == 0x80)
|
||||
printf(" active");
|
||||
else if (p->boot_ind)
|
||||
printf(" active? (%02x)",p->boot_ind);
|
||||
if (type = disk_type(p->sys_ind))
|
||||
printf(" %s\n",type);
|
||||
else
|
||||
printf(" unknown partition type 0x%02X\n",p->sys_ind);
|
||||
if (p->sys_ind == 5 && (0x3f & current_minor) < 60) {
|
||||
indent += 4;
|
||||
current_minor += 4;
|
||||
fdisk(this_minor+i);
|
||||
indent -= 4;
|
||||
}
|
||||
}
|
||||
/* check for disk-manager partitions */
|
||||
if (*(unsigned short *) (buffer + 0xfc) != 0x55AA)
|
||||
return;
|
||||
p = (struct partition *) (buffer + 0x1be);
|
||||
for (i=4; i<16; i++) {
|
||||
p--;
|
||||
if ((current_minor & 0x3f) >= 60)
|
||||
break;
|
||||
if (!p->nr_sects)
|
||||
continue;
|
||||
printf("%*c",indent,' ');
|
||||
printf("%s: %6d blocks disk-manager",dev_name(current_minor),p->nr_sects>>1);
|
||||
if (p->boot_ind == 0x80)
|
||||
printf(" active");
|
||||
else if (p->boot_ind)
|
||||
printf(" active? (%02x)",p->boot_ind);
|
||||
if (type = disk_type(p->sys_ind))
|
||||
printf(" %s\n",type);
|
||||
else
|
||||
printf(" unknown partition type 0x%02X\n",p->sys_ind);
|
||||
current_minor++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
current_minor = 1;
|
||||
fdisk(0);
|
||||
current_minor = 65;
|
||||
fdisk(64);
|
||||
return 0;
|
||||
}
|
||||
114
Linux-0.95/sources/sbin/lastlogin.c
Normal file
114
Linux-0.95/sources/sbin/lastlogin.c
Normal file
@@ -0,0 +1,114 @@
|
||||
|
||||
/***************************************************************************
|
||||
* Program: lastlogin (c)1987 ICUS Computer Group *
|
||||
* By: Lenny Tropiano ...{ihnp4,mtune}!icus!lenny *
|
||||
* *
|
||||
* Program intent: This will allow programs like 'finger' and 'last' to *
|
||||
* lookup in the file /usr/adm/lastlogin.log and see *
|
||||
* when a particular user has logged-in. This saves *
|
||||
* the necessity to keep /etc/wtmp around for a long *
|
||||
* period of time. *
|
||||
* *
|
||||
* This program can be used/modified and redistributed *
|
||||
* I declare it PUBLIC DOMAIN. Please give me credit *
|
||||
* when credit is due. *
|
||||
* *
|
||||
* AT&T 3B1 compiling instructions for shared-libaries: *
|
||||
* *
|
||||
* $ cc -c -O lastlogin.c *
|
||||
* $ ld -s -o lastlogin lastlogin.o /lib/shlib.ifile /lib/crt0s.o *
|
||||
* $ mv lastlogin /etc *
|
||||
* $ su *
|
||||
* Password: *
|
||||
* # chown adm /etc/lastlogin /usr/adm *
|
||||
* # chgrp adm /etc/lastlogin /usr/adm *
|
||||
* # chmod 4755 /etc/lastlogin *
|
||||
* *
|
||||
* Place a call to /etc/lastlogin in your /etc/localprofile *
|
||||
* to be run on all user logins. *
|
||||
***************************************************************************/
|
||||
/***************************************************************************
|
||||
* Linux compiling instructions: *
|
||||
* *
|
||||
* $ gcc -o lastlogin lastlogin.c utmp2.o *
|
||||
* utmp2.o is compiled from poe-IGL (1.2) *
|
||||
* $ mv lastlogin /etc *
|
||||
* $ su *
|
||||
* Password: *
|
||||
* # chown adm /etc/lastlogin /usr/adm *
|
||||
* # chgrp adm /etc/lastlogin /usr/adm *
|
||||
* # chmod 4755 /etc/lastlogin *
|
||||
* *
|
||||
* Place a call to /etc/lastlogin in your /etc/profile *
|
||||
* to be run on all user logins. *
|
||||
* *
|
||||
* B.Bergt@informatik.tu-chemnitz.de *
|
||||
***************************************************************************/
|
||||
|
||||
/* Print the last login time and record the new time */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <utmp.h>
|
||||
|
||||
#define LOGFILE "/usr/adm/lastlog"
|
||||
|
||||
main()
|
||||
{
|
||||
struct utmp *utent, *getutent();
|
||||
int fd;
|
||||
long hrs, min, sec;
|
||||
struct lastlog {
|
||||
char ll_line[8];
|
||||
time_t ll_time;
|
||||
} ll;
|
||||
|
||||
if (access(LOGFILE, 0) == -1) {
|
||||
if ((fd = creat(LOGFILE,0644)) == -1) {
|
||||
fprintf(stderr,"Cannot create file %s: ", LOGFILE);
|
||||
perror("creat()");
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
if ((fd = open(LOGFILE,O_RDWR)) == -1) {
|
||||
fprintf(stderr,"Cannot open file %s: ", LOGFILE);
|
||||
perror("open()");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (lseek(fd, (long)(getuid()*sizeof(struct lastlog)), 0) == -1) {
|
||||
fprintf(stderr,"Cannot position file %s: ", LOGFILE);
|
||||
perror("lseek()");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (read(fd, (char *) &ll, sizeof ll) == sizeof ll &&
|
||||
ll.ll_time != 0L) {
|
||||
printf("Last login: %.*s on %.*s\n" , 19
|
||||
, (char *) ctime(&ll.ll_time) , sizeof(ll.ll_line)
|
||||
, ll.ll_line);
|
||||
} else printf("Last login: [No Login information on record]\n");
|
||||
|
||||
sprintf(ll.ll_line, "%.8s", strrchr(ttyname(0), '/')+1);
|
||||
setutent();
|
||||
while ((utent = getutent()) != NULL)
|
||||
if (strcmp(utent->ut_line, ll.ll_line) == 0)
|
||||
break;
|
||||
|
||||
if (utent == NULL) {
|
||||
fprintf(stderr,"Cannot locate utmp entry for tty\n");
|
||||
exit(1);
|
||||
}
|
||||
ll.ll_time = utent->ut_time;
|
||||
endutent();
|
||||
|
||||
lseek(fd, (long)(getuid()*sizeof(struct lastlog)), 0);
|
||||
write(fd, (char *) &ll, sizeof ll);
|
||||
close(fd);
|
||||
|
||||
exit(0);
|
||||
}
|
||||
BIN
Linux-0.95/sources/sbin/lpd.tar.Z
Normal file
BIN
Linux-0.95/sources/sbin/lpd.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/sources/sbin/ps095.tar.Z
Normal file
BIN
Linux-0.95/sources/sbin/ps095.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/sources/sbin/su-1.0.c.Z
Normal file
BIN
Linux-0.95/sources/sbin/su-1.0.c.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/sources/sbin/user-adm.tar.Z
Normal file
BIN
Linux-0.95/sources/sbin/user-adm.tar.Z
Normal file
Binary file not shown.
386
Linux-0.95/sources/sbin/vt102.codes
Normal file
386
Linux-0.95/sources/sbin/vt102.codes
Normal file
@@ -0,0 +1,386 @@
|
||||
|
||||
Escape codes for vt102 terminal. <kivinen@hut.fi>
|
||||
|
||||
All numbers below are octal.<n> means numeric value,<c> means character string.
|
||||
If <n> is missing it is 0 or in cursor movements 1.
|
||||
|
||||
Reset and set modes
|
||||
Set Modes
|
||||
Esc [ <c> ; ... ; <c> h
|
||||
033 133 073 073 150
|
||||
Reset Modes
|
||||
Esc [ <c> ; ... ; <c> l
|
||||
033 133 073 073 154
|
||||
|
||||
Where <c> is
|
||||
'2'= Lock keyboard (set); Unlock keyboard (reset)
|
||||
'4'= Insert mode (set); Replace mode (reset)
|
||||
'12'= Echo on (set); Echo off (reset)
|
||||
'20'= Return = CR+LF (set); Return = CR (reset)
|
||||
'?1'= Cursorkeys application (set); Cursorkeys normal (reset)
|
||||
'?2'= Ansi (set); VT52 (reset)
|
||||
'?3'= 132 char/row (set); 80 char/row (reset)
|
||||
'?4'= Jump scroll (set); Smooth scroll (reset)
|
||||
'?5'= Reverse screen (set); Normal screen (reset)
|
||||
'?6'= Sets relative coordinates (set); Sets absolute coordinates (reset)
|
||||
'?7'= Auto wrap (set); Auto wrap off (reset)
|
||||
'?8'= Auto repeat on (set); Auto repeat off (reset)
|
||||
'?18'= Send FF to printer after print screen (set); No char after PS (reset)
|
||||
'?19'= Print screen prints full screen (set); PS prints scroll region (reset)
|
||||
'?25'= Cursor on (set); Cursor off (reset)
|
||||
|
||||
Set scrolling region (n1=upper,n2=lower)
|
||||
Esc [ <n1> ; <n2> r
|
||||
033 133 073 162
|
||||
|
||||
|
||||
Cursor movement (<n>=how many chars or lines), cursor stop at margin.
|
||||
Up
|
||||
Esc [ <n> A
|
||||
033 133 101
|
||||
Down
|
||||
Esc [ <n> B
|
||||
033 133 102
|
||||
Right
|
||||
Esc [ <n> C
|
||||
033 133 103
|
||||
Left
|
||||
Esc [ n D
|
||||
033 133 104
|
||||
Cursor position (<n1>=y,<n2>=x, from top of screen or scroll region)
|
||||
Esc [ <n1> ; <n2> H
|
||||
033 133 073 110
|
||||
Or Esc [ <n1> ; <n2> f
|
||||
033 133 073 146
|
||||
Index (cursor down with scroll up when at margin)
|
||||
Esc D
|
||||
033 104
|
||||
Reverse index (cursor up with scroll down when at margin)
|
||||
Esc M
|
||||
033 115
|
||||
Next line (CR+Index)
|
||||
Esc E
|
||||
033 105
|
||||
Save cursor and attribute
|
||||
Esc 7
|
||||
033 067
|
||||
Restore cursor and attribute
|
||||
Esc 8
|
||||
033 070
|
||||
|
||||
|
||||
Keybad character selection
|
||||
Application keypad mode
|
||||
Esc =
|
||||
033 075
|
||||
Numeric keypad mode
|
||||
Esc >
|
||||
033 076
|
||||
|
||||
Keypadkeys codes generated
|
||||
Numeric Application VT52 Application
|
||||
0 0 (060) Esc O p (033 117 160) Esc ? p (033 077 160)
|
||||
1 1 (061) Esc O q (033 117 161) Esc ? q (033 077 161)
|
||||
2 2 (062) Esc O r (033 117 162) Esc ? r (033 077 162)
|
||||
3 3 (063) Esc O s (033 117 163) Esc ? s (033 077 163)
|
||||
4 4 (064) Esc O t (033 117 164) Esc ? t (033 077 164)
|
||||
5 5 (065) Esc O u (033 117 165) Esc ? u (033 077 165)
|
||||
6 6 (066) Esc O v (033 117 166) Esc ? v (033 077 166)
|
||||
7 7 (067) Esc O w (033 117 167) Esc ? w (033 077 167)
|
||||
8 8 (070) Esc O x (033 117 170) Esc ? x (033 077 170)
|
||||
9 9 (071) Esc O y (033 117 171) Esc ? y (033 077 171)
|
||||
- (minus) - (055) Esc O m (033 117 155) Esc ? m (033 077 155)
|
||||
, (comma) , (054) Esc O l (033 117 154) Esc ? l (033 077 154)
|
||||
. (period) . (056) Esc O n (033 117 156) Esc ? n (033 077 156)
|
||||
Enter CR (015)* Esc O M (033 117 115) Esc ? M (033 077 115)
|
||||
PF1 Esc O P Esc O P (033 117 120) Esc P (033 120)
|
||||
PF2 Esc O Q Esc O Q (033 117 121) Esc Q (033 121)
|
||||
PF3 Esc O R Esc O R (033 117 122) Esc R (033 122)
|
||||
PF4 Esc O S Esc O S (033 117 123) Esc S (033 123)
|
||||
* Or CR+LF (015 012)
|
||||
|
||||
Cursorkeys codes generated (changed by set and reset modes '?1')
|
||||
normal application
|
||||
Up Esc [ A Esc O A
|
||||
033 133 101 033 117 101
|
||||
Down Esc [ B Esc O B
|
||||
033 133 102 033 117 102
|
||||
Right Esc [ C Esc O C
|
||||
033 133 103 033 117 103
|
||||
Left Esc [ D Esc O D
|
||||
033 133 104 033 117 104
|
||||
|
||||
|
||||
Select chaacter set
|
||||
UK as G0
|
||||
Esc ( A
|
||||
033 050 101
|
||||
US as G0
|
||||
Esc ( B
|
||||
033 050 102
|
||||
Special characters and line drawing character set as G0
|
||||
Esc ( 0
|
||||
033 050 060
|
||||
Alternate ROM as G0
|
||||
Esc ( 1
|
||||
033 050 061
|
||||
Alternate ROM special characters character set as G0
|
||||
Esc ( 2
|
||||
033 050 062
|
||||
|
||||
UK as G1
|
||||
Esc ) A
|
||||
033 051 101
|
||||
US as G1
|
||||
Esc ) B
|
||||
033 051 102
|
||||
Special characters and line drawing character set as G1
|
||||
Esc ) 0
|
||||
033 051 060
|
||||
Alternate ROM as G1
|
||||
Esc ) 1
|
||||
033 051 061
|
||||
Alternate ROM special characters character set as G1
|
||||
Esc ) 2
|
||||
033 051 062
|
||||
|
||||
Selects G2 for one character
|
||||
Esc N
|
||||
033 115
|
||||
Selects G3 for one character
|
||||
Esc O
|
||||
033 117
|
||||
|
||||
|
||||
Set graphic rendition
|
||||
Esc [ <n> ; <n> m
|
||||
033 133 073 156
|
||||
|
||||
Where <n> is
|
||||
0 = Turn off attributes
|
||||
1 = Bold (Full)
|
||||
2 = Half
|
||||
4 = Underline
|
||||
5 = Blink
|
||||
7 = Reverse
|
||||
21 = Normal intensity
|
||||
22 = Normal intensity
|
||||
24 = Cancel underlined
|
||||
25 = Cancel blinking
|
||||
27 = Cancel reverse
|
||||
|
||||
Tab stops
|
||||
Set horizontal tab
|
||||
Esc H
|
||||
033 110
|
||||
Clear horizontal tab
|
||||
Esc [ g
|
||||
033 133 147
|
||||
Or Esc [ 0 g
|
||||
033 133 060 147
|
||||
Clear all horizontal tabs
|
||||
Esc [ 3 g
|
||||
033 133 063 147
|
||||
|
||||
|
||||
Line attributes
|
||||
Double-height
|
||||
Top half
|
||||
Esc # 3
|
||||
033 043 063
|
||||
Bottom half
|
||||
Esc # 4
|
||||
033 043 064
|
||||
Single-width, single-height
|
||||
Esc # 5
|
||||
033 043 065
|
||||
Double-width
|
||||
Esc # 6
|
||||
033 043 066
|
||||
|
||||
|
||||
Erasing
|
||||
Erase in line
|
||||
End of line (including cursor position)
|
||||
Esc [ K
|
||||
033 133 113
|
||||
Or Esc [ 0 K
|
||||
033 133 060 113
|
||||
Beginning of line (including cursor position)
|
||||
Esc [ 1 K
|
||||
033 133 061 113
|
||||
Complete line
|
||||
Esc [ 2 K
|
||||
033 133 062 113
|
||||
Erase in display
|
||||
End of screen (including cursor position)
|
||||
Esc [ J
|
||||
033 133 112
|
||||
Or Esc [ 0 J
|
||||
033 133 060 112
|
||||
Beginning of screen (including cursor position)
|
||||
Esc [ 1 J
|
||||
033 133 061 112
|
||||
Complete display
|
||||
Esc [ 2 J
|
||||
033 133 062 112
|
||||
|
||||
|
||||
Computer editing
|
||||
Delete characters (<n> characters right from cursor
|
||||
Esc [ <n> P
|
||||
033 133 120
|
||||
Inser line (<n> lines)
|
||||
Esc [ <n> L
|
||||
033 133 114
|
||||
Delete line (<n> lines)
|
||||
Esc [ <n> M
|
||||
033 133 115
|
||||
|
||||
|
||||
Printing
|
||||
Esc [ <c> i
|
||||
033 133 151
|
||||
|
||||
Where <c> is
|
||||
''= Same as '0'
|
||||
'0'= Prints screen (full or scroll region)
|
||||
'4'= Printer controller off
|
||||
'5'= Printer controller on (Print all received chars to printer)
|
||||
'?1'= Print cursor line
|
||||
'?4'= Auto print off
|
||||
'?5'= Auto print on (Prints line to printer when you exit from it)
|
||||
|
||||
|
||||
Reports
|
||||
Device status
|
||||
Esc [ <c> n
|
||||
033 133 156
|
||||
|
||||
Where <c> is
|
||||
'0'=Response Ready, no malfunctions detected
|
||||
'3'=Malfunction, error in self-test.
|
||||
'5'=Status report request
|
||||
'6'=Request cursor position.
|
||||
'?10'=Response to printer status request, All ok.
|
||||
'?11'=Response to printer status request, Printer is not ready.
|
||||
'?13'=Response to printer status request, No printer.
|
||||
'?15'=Status report request from printer
|
||||
|
||||
Cursor position raport (Response to request cursor position)
|
||||
Esc [ <n1> ; <n2> R
|
||||
033 133 073 122
|
||||
Request terminal to identify itself (esc Z may not be supported in future)
|
||||
Esc [ c
|
||||
033 133 143
|
||||
Esc [ 0 c
|
||||
033 133 060 143
|
||||
Esc Z
|
||||
033 132
|
||||
Response to terminal identify (VT102)
|
||||
Esc [ ? 6 c
|
||||
033 133 077 066 143
|
||||
|
||||
|
||||
Reset to initial state
|
||||
Esc c
|
||||
033 143
|
||||
|
||||
|
||||
Tests
|
||||
Invoke confidence test
|
||||
Esc [ 2 ; <n> y
|
||||
033 133 062 073 171
|
||||
|
||||
Where <n> is
|
||||
'1'= Power-up test
|
||||
'2'= Data loopback test
|
||||
'4'= EIA loopback test
|
||||
'9'= Power-up tests (continuously)
|
||||
'10'= Data loopback tests (continuously)
|
||||
'12'= EIA loopback tests (continuously)
|
||||
'16'= Printer loopback test
|
||||
'24'= Printer loopback tests (continuously)
|
||||
|
||||
|
||||
Screen adjustments
|
||||
Esc # 8
|
||||
033 043 070
|
||||
|
||||
|
||||
Keyboard indicator
|
||||
Led L1 off
|
||||
Esc [ 0 q
|
||||
033 133 060 181
|
||||
Led L1 on
|
||||
Esc [ 1 q
|
||||
033 133 061 181
|
||||
|
||||
|
||||
|
||||
VT52 sequences
|
||||
Ansi mode
|
||||
Esc <
|
||||
033 074
|
||||
Cursor positioning
|
||||
Up Esc A
|
||||
033 101
|
||||
Down Esc B
|
||||
033 102
|
||||
Right Esc C
|
||||
033 103
|
||||
Left Esc D
|
||||
033 104
|
||||
Home Esc H
|
||||
033 110
|
||||
Direct cursor address
|
||||
Esc Y <line+040> <columns+040>
|
||||
033 131
|
||||
Reverse linefeed Esc I
|
||||
033 111
|
||||
Erase to end of line Esc K
|
||||
033 113
|
||||
Erase to end of screen Esc J
|
||||
033 112
|
||||
Auto print on Esc ^
|
||||
033 136
|
||||
Auto print off Esc
|
||||
033 137
|
||||
Printer controller on Esc W
|
||||
033 127
|
||||
Printer controller off Esc X
|
||||
033 130
|
||||
Print cursor line Esc V
|
||||
033 135
|
||||
Print screen Esc ]
|
||||
033 135
|
||||
Indentify request Esc Z
|
||||
033 132
|
||||
Response to indetify Esc / Z
|
||||
request (VT52) 033 057 132
|
||||
Special charset (same Esc F
|
||||
as line draw in VT102 033 106
|
||||
Normal char set Esc G
|
||||
033 107
|
||||
|
||||
|
||||
Control characters
|
||||
000 = Null (fill character)
|
||||
003 = ETX (Can be selected half-duplex turnaround char)
|
||||
004 = EOT (Can be turnaround or disconnect char, if turn, then DLE-EOT=disc.)
|
||||
005 = ENQ (Transmits answerback message)
|
||||
007 = BEL (Generates bell tone)
|
||||
010 = BS (Moves cursor left)
|
||||
011 = HT (Moves cursor to next tab)
|
||||
012 = LF (Linefeed or New line operation)
|
||||
013 = VT (Processed as LF)
|
||||
014 = FF (Processed as LF, can be selected turnaround char)
|
||||
015 = CR (Moves cursor to left margin, can be turnaround char)
|
||||
016 = SO (Selects G1 charset)
|
||||
017 = SI (Selects G0 charset)
|
||||
021 = DC1 (XON, causes terminal to continue transmit)
|
||||
023 = DC3 (XOFF, causes terminal to stop transmitting)
|
||||
030 = CAN (Cancels escape sequence)
|
||||
032 = SUB (Processed as CAN)
|
||||
033 = ESC (Processed as sequence indicator)
|
||||
|
||||
BIN
Linux-0.95/sources/sbin/vttest.tar.Z
Normal file
BIN
Linux-0.95/sources/sbin/vttest.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/sources/system/0.95b-gcc2.1-patch.tar.Z
Normal file
BIN
Linux-0.95/sources/system/0.95b-gcc2.1-patch.tar.Z
Normal file
Binary file not shown.
55
Linux-0.95/sources/system/README
Normal file
55
Linux-0.95/sources/system/README
Normal file
@@ -0,0 +1,55 @@
|
||||
To: Linux-Activists@BLOOM-PICAYUNE.MIT.EDU
|
||||
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
|
||||
Crossposted-To: alt.os.linux
|
||||
Subject: Second 0.95a alpha-patch, part 1/2
|
||||
Date: 4 Apr 92 14:42:10 GMT
|
||||
|
||||
This is the promised patch to 0.95a, which hopefully corrects some of
|
||||
the problems encountered. This is /not/ an offical new release: it's
|
||||
just a set of patches to get the same kernel I am currently running.
|
||||
|
||||
Bugfixes:
|
||||
|
||||
- extended partitions should finally work correctly (this release also
|
||||
contains code for the hd-ioctl call, needed for fdisk). Code mostly
|
||||
by hedrick.
|
||||
|
||||
- I corrected my original ptrace-fix (writing a long word to another
|
||||
process' data space could fail with my original patches)
|
||||
|
||||
- 387-emulation bug with the instructions "fcom[p] %st(x)" which
|
||||
resulted in bad results on non-387 machines with newer versions of
|
||||
gcc. The emulation is still ugly, but it seems to work.
|
||||
|
||||
- the cooked mode deletion/linekill bugs should be fixed.
|
||||
|
||||
- various error-returns were wrong: I correted some of them (thanks to
|
||||
bruce evans who pointed them out). The bad error-values resulted in
|
||||
incorrect or spurious error-messages from 'rm' etc.
|
||||
|
||||
- various minor fixes (including some in the hd-driver: this might help
|
||||
persons with unexpected-interrupt and/or timeout errors)
|
||||
|
||||
Additionally this version contains VFS-code from entropy, and a
|
||||
readdir() system call needed for the VFS. The latter was inspired by
|
||||
patches sent by Remy Card, who did it with a getdirents sys-call. My
|
||||
version is slightly simpler, but is probably slower. Things might yet
|
||||
change.
|
||||
|
||||
The installation has also changed slightly: the keyboard type and
|
||||
math-emulation are specified in the main Makefile. That one also
|
||||
contains the -fcombine-regs flag needed for 1.40. The other makefiles
|
||||
should no longer need editing.
|
||||
|
||||
I've also incorporated the ps095 kernel patches: to get the actual
|
||||
user-level stuff you still have to get the ps-distribution. Printer
|
||||
ports /still/ aren't in there, but this time I positively /promise/ to
|
||||
put it in next week. Really.
|
||||
|
||||
People who have been patching their kernel might have problems getting
|
||||
this patch to work: it was made against a clean 0.95a kernel. I'll
|
||||
consider a patched-up kernel version 0.95c - and I'd appreciate if
|
||||
future patches to me would be sent against this version. I'll still
|
||||
accept older patches, or course.
|
||||
|
||||
Linus
|
||||
5168
Linux-0.95/sources/system/diffs
Normal file
5168
Linux-0.95/sources/system/diffs
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Linux-0.95/sources/system/linux-0.95.tar
Normal file
BIN
Linux-0.95/sources/system/linux-0.95.tar
Normal file
Binary file not shown.
BIN
Linux-0.95/sources/system/linux-0.95.tar.Z
Normal file
BIN
Linux-0.95/sources/system/linux-0.95.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.95/sources/system/linux-0.95.tar.gz
Normal file
BIN
Linux-0.95/sources/system/linux-0.95.tar.gz
Normal file
Binary file not shown.
BIN
Linux-0.95/sources/system/linux-0.95a.tar.Z
Normal file
BIN
Linux-0.95/sources/system/linux-0.95a.tar.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