add directory Linux-0.96

This commit is contained in:
gohigh
2024-02-19 00:21:04 -05:00
parent b6d98600bf
commit cf5dadaed5
140 changed files with 15080 additions and 0 deletions

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

View 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

View 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

View 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)

View 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.

Binary file not shown.

Binary file not shown.

View 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:
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________

View 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).

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View 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

View 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

Binary file not shown.

View 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,&sectors);
/* 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++;
}
}

View 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" }
};

View 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 */

View 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) */

View 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,&regs,&regs,&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,&regs,&regs,&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,&regs,&regs,&sregs);
if (regs.x.cflag) {
fprintf(stderr,"%s: write failed\n",name);
return(-1);
}
return(SECSIZE);
}

Binary file not shown.

View 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 */

View 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

Binary file not shown.

Binary file not shown.

View File

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,128 @@
CHANGES IN THE LINUX v0.96 ROOT DISKETTE
Jim Winstead Jr. - 4 July 1992
This file mostly contains info about the changes in the root diskette
from Linux v0.95a to Linux v0.96.
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 continues with the release of the Linux 0.96 release diskette.
The changes between the Linux 0.96 and Linux 0.95a root diskettes are
detailed below:
- bash is back! /bin/sh is now a symlink to /bin/bash. ash was
simple too buggy for general use as /bin/sh. (This was likely
a result of a sloppy port to Linux rather than any flaws with
ash, but it seems silly to worry about ash when bash fits.)
- GNU tar is not on the root disk. Instead, the POSIX-defined
utility 'pax' is included, which handles tar _and_ cpio
archives. There are symlinks from /bin/cpio and /bin/tar to
/bin/pax to allow using the tar and cpio interfaces to pax.
(The big change you'll notice is that pax does not support a
'z' option for compressed tar files. You will have to pipe
them through 'uncompress' first.)
This was done because pax is roughly 1/3 the size of GNU tar,
and GNU tar offered nothing significant beyond what pax does.
- the install script has been completely rewritten. Now, it is
much more intelligent, and tries to guide you along the path
of installing Linux on your system.
- split /etc/rc into /etc/rc and /etc/rc.local. /etc/rc.local
is the only one you should ever have need to change.
- mount has been improved to accept a -a option. This reads
/etc/fstab and mounts the filesystems specified within,
including swapping partitions. See /etc/fstab to see how it
works.
Similar changes have been made to swapon to allow the 'swapon'
of a single swap file/partition from /etc/fstab.
As a result of these two improvements, /bin/mount -a and
/bin/swapon -a have both been added to /etc/rc, and you
shouldn't need to add additional mount commands to rc.local -
use /etc/fstab instead.
Thanks to Doug Quale for writing the new mount and swapon.
- uncompress is really a link to compress this time, I screwed
up last time. oops!
- I recompiled everything with GCC 2.2.2, and they are linked
against shared libraries (located in /lib) - it is important
that /lib be part of your root partition!
- many of the small utilities are linked as 'impure'
executables. This saves a great deal of disk space, at the
expense that they can't be demand-loaded or shared. Most, if
not all, of the utilities linked this way are very small and
infrequently used, however, so the benefits far outweigh the
small disadvantage there.
- rootdev really is rdev this time.
- /dev/MAKEDEV is a fairly generic script for making devices.
It supercedes /INSTALL/mkdev from the 0.95a root disk, and
really should be kept even after installation, because such
things as the scsi tape devices are not made by default - this
script allows you to make them when needed.
- added the lp devices, scsi devices, and miscellaneous other
devices.
- included a new termcap file based upon the termcap file
released with the setterm-0.96b utility. Also included are
the termcap entires for X terminals and generic vt100 entries.
If you have questions, problems, or complaints about the root
diskette, either post to comp.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 comp.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:
- you probably won't notice, but I plan on cleaning up the
source of some of the utilities, most noticeably shutdown,
passwd and mkfs. Those are all pretty ugly.
- the install script will be improved. The current one was
written rather rapidly, so there are parts of it I'm not
entirely happy with.
- I'd like to write an update script that will allow people who
have already installed Linux to update their binaries from the
latest root disk. The install script could serve as a base
for this, but is a little destructive at present. (It would
simply copy over old binaries, etc.)
- the documentation on disk will be cleaned up, and possibly
added to.
- fill in the gaps in the MAKEDEV script. (SCSI tapes, more pty
devices.)
- the release after the extended filesystem is added to the
Linux kernel, the root disk will use it. That means v0.98, if
things go according to current plans. This is to allow time
for bugs in the extended filesystem to filter out, and for the
new mkfs and fsck to stabilize. (For those that don't know,
the extended filesystem supports 4 terabyte partitions and long
filenames, and is currently in alpha testing.)
Again, mail your questions, comments and suggestions about the root
diskette to me at jwinstea@jarthur.Claremont.EDU.

339
Linux-0.96/docs/COPYING-2 Normal file
View File

@@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

View File

@@ -0,0 +1,119 @@
INSTALL NOTES FOR LINUX v0.96
Jim Winstead Jr. - July 4, 1992
This file contains basic instructions for installing Linux v0.96.
More detailed instructions have been written by others. Read the
Linux FAQ for some suggestions, and for pointers to other installation
documents.
COPYRIGHT
Linux 0.96 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.
WARNING
The 0.96 root disk requires the 0.96b or later kernel. A bootable
image of this kernel should be available where you got the image
for the 0.96 root disk.
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.96b boot disk with the Linux v0.96 root
disk. If you are unable to get the boot disk to work properly on
your system, try posting to comp.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.
3) login as 'install', and the system will walk you through the
process of installing Linux on a hard drive partition. The
process is fairly automated, but the process requires that you go
through the steps of creating a partition for Linux usage. Some
tips follow:
Read the efdisk file from the intro login, which will explain
the basic concepts of hard disk partitions, and how to use
efdisk.
You may find it useful to login to one virtual console as
intro, so you can access the on-disk documentation, and
another as install, so you can do the installation and easy
access the documentation.
The maximum size of a Minix filesystem (the type created by
mkfs) is 64 megabytes. This is not a limitation of mkfs or
Linux, but a limitation of the Minix filesystem that is used.
With the release of Linux v0.97, a new 'extended' filesystem
will be released that will support 4 terabyte (!) partitions,
and extended filenames.
4) 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.)
5) 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:.)
6) To reboot your machine when running Linux, you should use the
'reboot' command. This makes sure to flush all caches to disk,
and notifies other users that the system is going down (well, the
last bit isn't real important).
FAILURE TO DO THIS COULD RESULT IN BADLY CORRUPT FILESYSTEMS.
----------------------------------------------------------------------------
These instructions are not the best, but should be enough to get you
going. If you have more questions, either post on comp.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.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,548 @@
To: Linux-Activists@BLOOM-PICAYUNE.MIT.EDU
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
Subject: Birthday (was Re: Uptime found. Thanks to all)
Date: 31 Jul 92 22:15:20 GMT
In article <1992Jul30.211132.20101@cc.umontreal.ca> duperval@ERE.UMontreal.CA (Duperval Laurent) writes:
>
>P.S. BTW, noone answered yet: when is Linux's birthday? Let's have a
>party!
I couldn't for the life of me remember when it all happened, and I don't
keep a diary, so I can't give you any exact dates for when linux "was
born". But I did start to wonder, so I started ftp'ing around for
archives of the comp.os.minix group (where I announced it), and this is
what I came up with (with some editing).
This is just a sentimental journey into some of the first posts
concerning linux, so you can happily press 'n' now if you actually
thought you'd get anything technical.
> From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
> Newsgroups: comp.os.minix
> Subject: Gcc-1.40 and a posix-question
> Message-ID: <1991Jul3.100050.9886@klaava.Helsinki.FI>
> Date: 3 Jul 91 10:00:50 GMT
>
> Hello netlanders,
>
> Due to a project I'm working on (in minix), I'm interested in the posix
> standard definition. Could somebody please point me to a (preferably)
> machine-readable format of the latest posix rules? Ftp-sites would be
> nice.
The project was obviously linux, so by July 3rd I had started to think
about actual user-level things: some of the device drivers were ready,
and the harddisk actually worked. Not too much else.
> As an aside for all using gcc on minix - [ deleted ]
Just a success-report on porting gcc-1.40 to minix using the 1.37
version made by Alan W Black & co.
> Linus Torvalds torvalds@kruuna.helsinki.fi
>
> PS. Could someone please try to finger me from overseas, as I've
> installed a "changing .plan" (made by your's truly), and I'm not certain
> it works from outside? It should report a new .plan every time.
So I was clueless - had just learned about named pipes. Sue me. This
part of the post got a lot more response than the actual POSIX query,
but the query did lure out arl from the woodwork, and we mailed around
for a bit, resulting in the Linux subdirectory on nic.funet.fi.
Then, almost two months later, I actually had something working: I made
sources for version 0.01 available on nic sometimes around this time.
0.01 sources weren't actually runnable: they were just a token gesture
to arl who had probably started to despair about ever getting anything.
This next post must have been from just a couple of weeks before that
release.
> From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
> Newsgroups: comp.os.minix
> Subject: What would you like to see most in minix?
> Summary: small poll for my new operating system
> Message-ID: <1991Aug25.205708.9541@klaava.Helsinki.FI>
> Date: 25 Aug 91 20:57:08 GMT
> Organization: University of Helsinki
>
>
> Hello everybody out there using minix -
>
> I'm doing a (free) operating system (just a hobby, won't be big and
> professional like gnu) for 386(486) AT clones. This has been brewing
> since april, and is starting to get ready. I'd like any feedback on
> things people like/dislike in minix, as my OS resembles it somewhat
> (same physical layout of the file-system (due to practical reasons)
> among other things).
>
> I've currently ported bash(1.08) and gcc(1.40), and things seem to work.
> This implies that I'll get something practical within a few months, and
> I'd like to know what features most people would want. Any suggestions
> are welcome, but I won't promise I'll implement them :-)
>
> Linus (torvalds@kruuna.helsinki.fi)
>
> PS. Yes - it's free of any minix code, and it has a multi-threaded fs.
> It is NOT protable (uses 386 task switching etc), and it probably never
> will support anything other than AT-harddisks, as that's all I have :-(.
Judging from the post, 0.01 wasn't actually out yet, but it's close. I'd
guess the first version went out in the middle of September -91. I got
some responses to this (most by mail, which I haven't saved), and I even
got a few mails asking to be beta-testers for linux.
After that just a few general answers to quesions on the net:
> From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
> Newsgroups: comp.os.minix
> Subject: Re: What would you like to see most in minix?
> Summary: yes - it's nonportable
> Message-ID: <1991Aug26.110602.19446@klaava.Helsinki.FI>
> Date: 26 Aug 91 11:06:02 GMT
> Organization: University of Helsinki
>
> In article <1991Aug25.234450.22562@nntp.hut.fi> jkp@cs.HUT.FI (Jyrki Kuoppala) writes:
> >> [re: my post about my new OS]
> >
> >Tell us more! Does it need a MMU?
>
> Yes, it needs a MMU (sorry everybody), and it specifically needs a
> 386/486 MMU (see later).
>
> >
> >>PS. Yes - it's free of any minix code, and it has a multi-threaded fs.
> >>It is NOT protable (uses 386 task switching etc)
> >
> >How much of it is in C? What difficulties will there be in porting?
> >Nobody will believe you about non-portability ;-), and I for one would
> >like to port it to my Amiga (Mach needs a MMU and Minix is not free).
>
> Simply, I'd say that porting is impossible. It's mostly in C, but most
> people wouldn't call what I write C. It uses every conceivable feature
> of the 386 I could find, as it was also a project to teach me about the
> 386. As already mentioned, it uses a MMU, for both paging (not to disk
> yet) and segmentation. It's the segmentation that makes it REALLY 386
> dependent (every task has a 64Mb segment for code & data - max 64 tasks
> in 4Gb. Anybody who needs more than 64Mb/task - tough cookies).
>
> It also uses every feature of gcc I could find, specifically the __asm__
> directive, so that I wouldn't need so much assembly language objects.
> Some of my "C"-files (specifically mm.c) are almost as much assembler as
> C. It would be "interesting" even to port it to another compiler (though
> why anybody would want to use anything other than gcc is a mystery).
[ editors note: linux has in fact gotten more portable with newer
versions: there was a lot more assembly in the early versions. Not that
anybody in their right mind would try to port it even now ]
> Unlike minix, I also happen to LIKE interrupts, so interrupts are
> handled without trying to hide the reason behind them (I especially like
> my hard-disk-driver. Anybody else make interrupts drive a state-
> machine?). All in all it's a porters nightmare.
>
> >As for the features; well, pseudo ttys, BSD sockets, user-mode
> >filesystems (so I can say cat /dev/tcp/kruuna.helsinki.fi/finger),
> >window size in the tty structure, system calls capable of supporting
> >POSIX.1. Oh, and bsd-style long file names.
>
> Most of these seem possible (the tty structure already has stubs for
> window size), except maybe for the user-mode filesystems. As to POSIX,
> I'd be delighted to have it, but posix wants money for their papers, so
> that's not currently an option. In any case these are things that won't
> be supported for some time yet (first I'll make it a simple minix-
> lookalike, keyword SIMPLE).
>
> Linus (torvalds@kruuna.helsinki.fi)
>
> PS. To make things really clear - yes I can run gcc on it, and bash, and
> most of the gnu [bin/file]utilities, but it's not very debugged, and the
> library is really minimal. It doesn't even support floppy-disks yet. It
> won't be ready for distribution for a couple of months. Even then it
> probably won't be able to do much more than minix, and much less in some
> respects. It will be free though (probably under gnu-license or similar).
Well, obviously something worked on my machine: I doubt I had yet gotten
gcc to compile itself under linux (or I would have been too proud of it
not to mention it). Still before any release-date.
Then, October 5th, I seem to have released 0.02. As I already
mentioned, 0.01 didn't actually come with any binaries: it was just
source code for people interested in what linux looked like. Note the
lack of announcement for 0.01: I wasn't too proud of it, so I think I
only sent a note to everybody who had shown interest.
> From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
> Newsgroups: comp.os.minix
> Subject: Free minix-like kernel sources for 386-AT
> Message-ID: <1991Oct5.054106.4647@klaava.Helsinki.FI>
> Date: 5 Oct 91 05:41:06 GMT
> Organization: University of Helsinki
>
> Do you pine for the nice days of minix-1.1, when men were men and wrote
> their own device drivers? Are you without a nice project and just dying
> to cut your teeth on a OS you can try to modify for your needs? Are you
> finding it frustrating when everything works on minix? No more all-
> nighters to get a nifty program working? Then this post might be just
> for you :-)
>
> As I mentioned a month(?) ago, I'm working on a free version of a
> minix-lookalike for AT-386 computers. It has finally reached the stage
> where it's even usable (though may not be depending on what you want),
> and I am willing to put out the sources for wider distribution. It is
> just version 0.02 (+1 (very small) patch already), but I've successfully
> run bash/gcc/gnu-make/gnu-sed/compress etc under it.
>
> Sources for this pet project of mine can be found at nic.funet.fi
> (128.214.6.100) in the directory /pub/OS/Linux. The directory also
> contains some README-file and a couple of binaries to work under linux
> (bash, update and gcc, what more can you ask for :-). Full kernel
> source is provided, as no minix code has been used. Library sources are
> only partially free, so that cannot be distributed currently. The
> system is able to compile "as-is" and has been known to work. Heh.
> Sources to the binaries (bash and gcc) can be found at the same place in
> /pub/gnu.
>
> ALERT! WARNING! NOTE! These sources still need minix-386 to be compiled
> (and gcc-1.40, possibly 1.37.1, haven't tested), and you need minix to
> set it up if you want to run it, so it is not yet a standalone system
> for those of you without minix. I'm working on it. You also need to be
> something of a hacker to set it up (?), so for those hoping for an
> alternative to minix-386, please ignore me. It is currently meant for
> hackers interested in operating systems and 386's with access to minix.
>
> The system needs an AT-compatible harddisk (IDE is fine) and EGA/VGA. If
> you are still interested, please ftp the README/RELNOTES, and/or mail me
> for additional info.
>
> I can (well, almost) hear you asking yourselves "why?". Hurd will be
> out in a year (or two, or next month, who knows), and I've already got
> minix. This is a program for hackers by a hacker. I've enjouyed doing
> it, and somebody might enjoy looking at it and even modifying it for
> their own needs. It is still small enough to understand, use and
> modify, and I'm looking forward to any comments you might have.
>
> I'm also interested in hearing from anybody who has written any of the
> utilities/library functions for minix. If your efforts are freely
> distributable (under copyright or even public domain), I'd like to hear
> from you, so I can add them to the system. I'm using Earl Chews estdio
> right now (thanks for a nice and working system Earl), and similar works
> will be very wellcome. Your (C)'s will of course be left intact. Drop me
> a line if you are willing to let me use your code.
>
> Linus
>
> PS. to PHIL NELSON! I'm unable to get through to you, and keep getting
> "forward error - strawberry unknown domain" or something.
Well, it doesn't sound like much of a system, does it? It did work, and
some people even tried it out. There were several bad bugs (and there
was no floppy-driver, no VM, no nothing), and 0.02 wasn't really very
useable.
0.03 got released shortly thereafter (max 2-3 weeks was the time between
releases even back then), and 0.03 was pretty useable. The next version
was numbered 0.10, as things actually started to work pretty well. The
next post gives some idea of what had happened in two months more...
> From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
> Newsgroups: comp.os.minix
> Subject: Re: Status of LINUX?
> Summary: Still in beta
> Message-ID: <1991Dec19.233545.8114@klaava.Helsinki.FI>
> Date: 19 Dec 91 23:35:45 GMT
> Organization: University of Helsinki
>
> In article <469@htsa.htsa.aha.nl> miquels@maestro.htsa.aha.nl (Miquel van Smoorenburg) writes:
> >Hello *,
> > I know some people are working on a FREE O/S for the 386/486,
> >under the name Linux. I checked nic.funet.fi now and then, to see what was
> >happening. However, for the time being I am without FTP access so I don't
> >know what is going on at the moment. Could someone please inform me about it?
> >It's maybe best to follow up to this article, as I think that there are
> >a lot of potential interested people reading this group. Note, that I don't
> >really *have* a >= 386, but I'm sure in time I will.
>
> Linux is still in beta (although available for brave souls by ftp), and
> has reached the version 0.11. It's still not as comprehensive as
> 386-minix, but better in some respects. The "Linux info-sheet" should
> be posted here some day by the person that keeps that up to date. In
> the meantime, I'll give some small pointers.
>
> First the bad news:
>
> - Still no SCSI: people are working on that, but no date yet.
> Thus you need a AT-interface disk (I have one report that it
> works on an EISA 486 with a SCSI disk that emulates the
> AT-interface, but that's more of a fluke than anything else:
> ISA+AT-disk is currently the hardware setup)
As you can see, 0.11 had already a small following. It wasn't much, but
it did work.
> - still no init/login: you get into bash as root upon bootup.
That was still standard in the next release.
> - although I have a somewhat working VM (paging to disk), it's not
> ready yet. Thus linux needs at least 4M to be able to run the
> GNU binaries (especially gcc). It boots up in 2M, but you
> cannot compile.
I actually released a 0.11+VM version just before Christmas -91: I
didn't need it myself, but people were trying to compile the kernel in
2MB and failing, so I had to implement it. The 0.11+VM version was
available only to a small number of people that wanted to test it out:
I'm still surprised it worked as well as it did.
> - minix still has a lot more users: better support.
>
> - it hasn't got years of testing by thousands of people, so there
> are probably quite a few bugs yet.
>
> Then for the good things..
>
> - It's free (copyright by me, but freely distributable under a
> very lenient copyright)
The early copyright was in fact much more restrictive than the GNU
copyleft: I didn't allow any money at all to change hands due to linux.
That changed with 0.12.
> - it's fun to hack on.
>
> - /real/ multithreading filesystem.
>
> - uses the 386-features. Thus locked into the 386/486 family, but
> it makes things clearer when you don't have to cater to other
> chips.
>
> - a lot more... read my .plan.
>
> /I/ think it's better than minix, but I'm a bit prejudiced. It will
> never be the kind of professional OS that Hurd will be (in the next
> century or so :), but it's a nice learning tool (even more so than
> minix, IMHO), and it was/is fun working on it.
>
> Linus (torvalds@kruuna.helsinki.fi)
>
> ---- my .plan --------------------------
> Free UNIX for the 386 - coming 4QR 91 or 1QR 92.
>
> The current version of linux is 0.11 - it has most things a unix kernel
> needs, and will probably be released as 1.0 as soon as it gets a little
> more testing, and we can get a init/login going. Currently you get
> dumped into a shell as root upon bootup.
>
> Linux can be gotten by anonymous ftp from 'nic.funet.fi' (128.214.6.100)
> in the directory '/pub/OS/Linux'. The same directory also contains some
> binary files to run under Linux. Currently gcc, bash, update, uemacs,
> tar, make and fileutils. Several people have gotten a running system,
> but it's still a hackers kernel.
>
> Linux still requires a AT-compatible disk to be useful: people are
> working on a SCSI-driver, but I don't know when it will be ready.
>
> There are now a couple of other sites containing linux, as people have
> had difficulties with connecting to nic. The sites are:
> Tupac-Amaru.Informatik.RWTH-Aachen.DE (137.226.112.31):
> directory /pub/msdos/replace
> tsx-11.mit.edu (18.172.1.2):
> directory /pub/linux
>
> There is also a mailing list set up 'Linux-activists@niksula.hut.fi'.
> To join, mail a request to 'Linux-activists-request@niksula.hut.fi'.
> It's no use mailing me: I have no actual contact with the mailing-list
> (other than being on it, naturally).
>
> Mail me for more info:
>
> Linus (torvalds@kruuna.Helsinki.FI)
>
> 0.11 has these new things:
>
> - demand loading
> - code/data sharing between unrelated processes
> - much better floppy drivers (they actually work mostly)
> - bug-corrections
> - support for Hercules/MDA/CGA/EGA/VGA
> - the console also beeps (WoW! Wonder-kernel :-)
> - mkfs/fsck/fdisk
> - US/German/French/Finnish keyboards
> - settable line-speeds for com1/2
As you can see: 0.11 was actually stand-alone: I wrote the first
mkfs/fsck/fdisk programs for it, so that you didn't need minix any more
to set it up. Also, serial lines had been hard-coded to 2400bps, as that
was all I had.
> Still lacking:
> - init/login
> - rename system call
> - named pipes
> - symbolic links
Well, they are all there now: init/login didn't quite make it to 0.12,
and rename() was implemented as a patch somewhere between 0.12 and 0.95.
Symlinks were in 0.95, but named pipes didn't make it until 0.96.
> 0.12 will probably be out in January (15th or so), and will have:
> - POSIX job control (by tytso)
> - VM (paging to disk)
> - Minor corrections
Actually, 0.12 was out January 5th, and contained major corrections. It
was in fact a very stable kernel: it worked on a lot of new hardware,
and there was no need for patches for a long time. 0.12 was also the
kernel that "made it": that's when linux started to spread a lot faster.
Earlier kernel releases were very much only for hackers: 0.12 actually
worked quite well.
That's all I found for 1991 - maybe it answered some questions.
Linus
-----------------------------------------------------------------------------
To: Linux-Activists@BLOOM-PICAYUNE.MIT.EDU
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
Subject: Re: Writing an OS - questions !!
Date: 5 May 92 07:58:17 GMT
In article <10685@inews.intel.com> nani@td2cad.intel.com (V. Narayanan) writes:
>
>Hi folks,
> For quite some time this "novice" has been wondering as to how one goes
>about the task of writing an OS from "scratch". So here are some questions,
>and I would appreciate if you could take time to answer 'em.
Well, I see someone else already answered, but I thought I'd take on the
linux-specific parts. Just my personal experiences, and I don't know
how normal those are.
>1) How would you typically debug the kernel during the development phase?
Depends on both the machine and how far you have gotten on the kernel:
on more simple systems it's generally easier to set up. Here's what I
had to do on a 386 in protected mode.
The worst part is starting off: after you have even a minimal system you
can use printf etc, but moving to protected mode on a 386 isn't fun,
especially if you at first don't know the architecture very well. It's
distressingly easy to reboot the system at this stage: if the 386
notices something is wrong, it shuts down and reboots - you don't even
get a chance to see what's wrong.
Printf() isn't very useful - a reboot also clears the screen, and
anyway, you have to have access to video-mem, which might fail if your
segments are incorrect etc. Don't even think about debuggers: no
debugger I know of can follow a 386 into protected mode. A 386 emulator
might do the job, or some heavy hardware, but that isn't usually
feasible.
What I used was a simple killing-loop: I put in statements like
die:
jmp die
at strategic places. If it locked up, you were ok, if it rebooted, you
knew at least it happened before the die-loop. Alternatively, you might
use the sound io ports for some sound-clues, but as I had no experience
with PC hardware, I didn't even use that. I'm not saying this is the
only way: I didn't start off to write a kernel, I just wanted to explore
the 386 task-switching primitives etc, and that's how I started off (in
about April-91).
After you have a minimal system up and can use the screen for output, it
gets a bit easier, but that's when you have to enable interrupts. Bang,
instant reboot, and back to the old way. All in all, it took about 2
months for me to get all the 386 things pretty well sorted out so that I
no longer had to count on avoiding rebooting at once, and having the
basic things set up (paging, timer-interrupt and a simple task-switcher
to test out the segments etc).
>2) Can you test the kernel functionality by running it as a process on a
> different OS? Wouldn't the OS(the development environment) generate
> exceptions in cases when the kernel (of the new OS) tries to modify
> 'priviledged' registers?
Yes, it's generally possible for some things, but eg device drivers
usually have to be tested out on the bare machine. I used minix to
develop linux, so I had no access to IO registers, interrupts etc.
Under DOS it would have been possible to get access to all these, but
then you don't have 32-bit mode. Intel isn't that great - it would
probably have been much easier on a 68040 or similar.
So after getting a simple task-switcher (it switched between two
processes that printed AAAA... and BBBB... respectively by using the
timer-interrupt - Gods I was proud over that), I still had to continue
debugging basically by using printf. The first thing written was the
keyboard driver: that's the reason it's still written completely in
assembler (I didn't dare move to C yet - I was still debugging at
about instruction-level).
After that I wrote the serial drivers, and voila, I had a simple
terminal program running (well, not that simple actually). It was still
the same two processes (AAA..), but now they read and wrote to the
console/serial lines instead. I had to reboot to get out of it all, but
it was a simple kernel.
After that is was plain sailing: hairy coding still, but I had some
devices, and debugging was easier. I started using C at this stage, and
it certainly speeds up developement. This is also when I start to get
serious about my megalomaniac ideas to make "a better minix that minix".
I was hoping I'd be able to recompile gcc under linux some day...
The harddisk driver was more of the same: this time the problems with
bad documentation started to crop up. The PC may be the most used
architecture in the world right now, but that doesn't mean the docs are
any better: in fact I haven't seen /any/ book even mentioning the weird
386-387 coupling in an AT etc (Thanks Bruce).
After that, a small filesystem, and voila, you have a minimal unix. Two
months for basic setups, but then only slightly longer until I had a
disk-driver (seriously buggy, but it happened to work on my machine) and
a small filesystem. That was about when I made 0.01 available (late
august-91? Something like that): it wasn't pretty, it had no floppy
driver, and it couldn't do much anything. I don't think anybody ever
compiled that version. But by then I was hooked, and didn't want to
stop until I could chuck out minix.
>3) Would new linkers and loaders have to be written before you get a basic
> kernel running?
All versions up to about 0.11 were crosscompiled under minix386 - as
were the user programs. I got bash and gcc eventually working under
0.02, and while a race-condition in the buffer-cache code prevented me
from recompiling gcc with itself, I was able to tackle smaller compiles.
0.03 (October?) was able to recompile gcc under itself, and I think
that's the first version that anybody else actually used. Still no
floppies, but most of the basic things worked.
Afetr 0.03 I decided that the next version was actually useable (it was,
kind of, but boy is X under 0.96 more impressive), and I called the next
version 0.10 (November?). It still had a rather serious bug in the
buffer-cache handling code, but after patching that, it was pretty ok.
0.11 (December) had the first floppy driver, and was the point where I
started doing linux developement under itself. Quite as well, as I
trashed my minix386 partition by mistake when trying to autodial
/dev/hd2.
By that time others were actually using linux, and running out of
memory. Especially sad was the fact that gcc wouldn't work on a 2MB
machine, and although c386 was ported, it didn't do everything gcc did,
and couldn't recompile the kernel. So I had to implement disk-paging:
0.12 came out in January (?) and had paging by me as well as job control
by tytso (and other patches: pmacdona had started on VC's etc). It was
the first release that started to have "non-essential" features, and
being partly written by others. It was also the first release that
actually did many things better than minix, and by now people started to
really get interested.
Then it was 0.95 in March, bugfixes in April, and soon 0.96. It's
certainly been fun (and I trust will continue to be so) - reactions have
been mostly very positive, and you do learn a lot doing this type of
thing (on the other hand, your studies suffer in other respects :)
Linus

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Linux-0.96/patchs/mouse.tar Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,80 @@
Return-Path: <owner-linux-activists@joker.cs.hut.fi>
Received: from funet.fi by lazy.qt.IPA.FhG.de with SMTP
(5.61+/IDA-1.2.8/gandalf.2) id AA08341; Wed, 10 Jun 92 07:53:54 +0200
Received: from santra.hut.fi by funet.fi with SMTP (PP) id <29569-0@funet.fi>;
Wed, 10 Jun 1992 08:44:29 +0300
Received: from joker.cs.hut.fi by santra.hut.fi (5.65c/8.0/TeKoLa) id AA10220;
Wed, 10 Jun 1992 08:42:21 +0300
Received: by joker.cs.hut.fi (5.65b/6.8/S-TeKoLa) id AA12590;
Wed, 10 Jun 92 08:41:52 +0259
Received: from relay2.UU.NET by joker.cs.hut.fi (5.65b/6.8/S-TeKoLa) id AA12557;
Wed, 10 Jun 92 08:38:49 +0259
Received: from world.std.com by relay2.UU.NET
with SMTP (5.61/UUNET-internet-primary) id AA26986;
Wed, 10 Jun 92 01:38:59 -0400
Received: by world.std.com (5.61+++/Spike-2.0) id AA13768;
Wed, 10 Jun 92 01:38:59 -0400
Date: Wed, 10 Jun 92 01:38:59 -0400
From: jrs@world.std.com (Rick Sladkey)
Message-Id: <9206100538.AA13768@world.std.com>
Sender: owner-linux-activists@niksula.hut.fi
To: linux-activists@niksula.hut.fi
X-Note1: Remember to put 'X-Mn-Key: normal' to your mail body or header
Cc: linux-activists@joker.cs.hut.fi
Subject: gnuplot_x11
In-Reply-To: <199206091859.AA04063@santra.hut.fi>
References: <199206091859.AA04063@santra.hut.fi>
X-Mn-Key: X11
>>>>> On Tue, 09 Jun 92 19:22:16 +0100, mfd1%ukc.ac.uk@FINHUTC.hut.fi said:
Mitch> has anyone gotten gnuplot to work with X with SPLOTS ??
Yes, but it took some work...
Mitch> Well I tried compiling it with the linux defs in as well (so it
Mitch> works without X11 also i.e. with vgalib) and it compiles ok,
Mitch> even the gnuplot_x11 but when it runs and I try to do a surface
Mitch> plot I get big patches of color all over the plot (usually
Mitch> black). This also happens with hidden line removal!
I had exactly this problem.
Mitch> So what am I doing wrong, and is this a gcc or X11 problem ??
Well, if I knew much about X, I might be able to figure out what the
source of the problem is. But since I don't, I'll just say what I
did to fix it. gnuplot talks to gnuplot_x11 through a pipe so I wrote
all the output to a debug file and then experimented with sending
variations of the file directly to gnuplot_x11. I discovered that
the line-type command was at fault. gnuplot uses line-types -2 and -1
to represent borders or axes or something and types 0 through 7 (?)
for different colors. Types -2 and -1 cause gnuplot_x11 to use
a X11 line-width of 2 instead of 0. I suppose this is meant to select
2 pixel-wide lines but they come out more like 2 inches wide...
Anyway, here is the relevant patch.
Rick Sladkey
jrs@world.std.com
-----
diff -rc ../gnuplot.orig/gnuplot_x11.c ./gnuplot_x11.c
*** ../gnuplot.orig/gnuplot_x11.c Mon Sep 9 20:13:19 1991
--- ./gnuplot_x11.c Tue May 26 21:51:59 1992
***************
*** 202,209 ****
--- 202,214 ----
/* X11_linetype(type) - set line type */
else if (*buf == 'L') {
sscanf(buf, "L%4d", &lt);
+ #if linux
+ lt = (lt+2)%10;
+ width = 0;
+ #else
lt = (lt%8)+2;
width = (lt == 0) ? 2 : 0;
+ #endif
if (Color) {
if (lt != 1)
type = LineSolid;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View 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) &param) < 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]);
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,292 @@
*** ORIG/process.c Tue Feb 25 17:07:16 1992
--- process.c Tue May 19 00:03:54 1992
***************
*** 2174,2179 ****
--- 2174,2197 ----
return Qnil;
}
#endif /* IRIS and HAVE_SETSID */
+ #if defined (USG) && defined (HAVE_TCATTR)
+ struct termios t;
+ switch (signo)
+ {
+ case SIGINT:
+ ioctl (XFASTINT (p->infd), TCGETS, &t);
+ send_process (proc, &t.c_cc[VINTR], 1);
+ return Qnil;
+ case SIGQUIT:
+ ioctl (XFASTINT (p->infd), TCGETS, &t);
+ send_process (proc, &t.c_cc[VQUIT], 1);
+ return Qnil;
+ case SIGTSTP:
+ ioctl (XFASTINT (p->infd), TCGETS, &t);
+ send_process (proc, &t.c_cc[VSUSP], 1);
+ return Qnil;
+ }
+ #endif /* USG and HAVE_TCATTR */
/* Get the pgrp using the tty itself, if we have that.
Otherwise, use the pty to get the pgrp. */
*** ORIG/sysdep.c Tue Feb 25 17:07:30 1992
--- sysdep.c Sun May 3 21:46:06 1992
***************
*** 1116,1121 ****
--- 1116,1122 ----
#ifdef VMS /* VMS sometimes has this symbol but lacks setvbuf. */
#undef _IOFBF
#endif
+ #ifndef LINUX
#ifdef _IOFBF
/* This symbol is defined on recent USG systems.
Someone says without this call USG won't really buffer the file
***************
*** 1124,1129 ****
--- 1125,1131 ----
#else
setbuf (stdout, _sobuf);
#endif
+ #endif /* LINUX */
set_terminal_modes ();
if (term_initted && no_redraw_on_reenter)
{
*** ORIG/unexec.c Tue Feb 25 17:07:00 1992
--- unexec.c Fri May 1 00:50:16 1992
***************
*** 236,242 ****
#else /* not HPUX */
! #if defined (USG) && !defined (IBMRTAIX) && !defined (IRIS)
static struct bhdr hdr, ohdr;
#define a_magic fmagic
#define a_text tsize
--- 236,242 ----
#else /* not HPUX */
! #if defined (USG) && !defined (IBMRTAIX) && !defined (IRIS) && !defined(LINUX)
static struct bhdr hdr, ohdr;
#define a_magic fmagic
#define a_text tsize
*** /dev/null Fri Apr 17 21:27:15 1992
--- config.h Sun May 17 16:02:18 1992
***************
*** 0 ****
--- 1,217 ----
+ /* GNU Emacs site configuration template file.
+ Copyright (C) 1988 Free Software Foundation, Inc.
+
+ This file is part of GNU Emacs.
+
+ GNU Emacs is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ GNU Emacs is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Emacs; see the file COPYING. If not, write to
+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+ /* this config.h tuned for linux 0.96 and gcc 2.11a
+ by Rick Sladkey <jrs@world.std.com>, your mileage may vary */
+
+ /* Include here a s- file that describes the system type you are using.
+ See the file ../etc/MACHINES for a list of systems and
+ the names of the s- files to use for them.
+ See s-template.h for documentation on writing s- files. */
+ #include "s-usg5-2.h" /* as close as anything */
+
+ /* overrides for linux versus s-usg5-2.h */
+
+ #undef TERMINFO /* not really SYSV */
+ #undef COFF /* not really SYSV */
+ #undef NOMULTIPLEJOBS /* not even used ... */
+ #undef NONSYSTEM_DIR_LIBRARY /* use our dirent library for VFS */
+ #undef static /* static is OK for with gcc */
+
+ /* just a few small changes for linux ... */
+
+ #define LINUX /* for differentiation */
+
+ /* let's see, what have we got here */
+
+ #define HAVE_TCATTR /* fixes ^z problems */
+ #define HAVE_SETSID /* fixes shell problems */
+ #define HAVE_DUP2 /* is builtin */
+ #define HAVE_TIMEVAL /* is builtin */
+ #define HAVE_GETTIMEOFDAY /* is builtin */
+ #define HAVE_RENAME /* is builtin */
+ #define HAVE_RANDOM /* is builtin */
+ #define HAVE_SELECT /* seems to work */
+ #define HAVE_PTYS /* mostly works */
+ #define HAVE_CLOSEDIR /* we have a closedir */
+ #define HAVE_GETPAGESIZE /* we now have getpagesize (0.96) */
+ #define HAVE_VFORK /* we now have vfork (0.96) */
+
+ #define BSTRING /* we now have bcopy, etc. (0.96) */
+ #define USE_UTIME /* don't have utimes */
+ #define NO_SIOCTL_H /* don't have sioctl.h */
+ #define SYSV_SYSTEM_DIR /* use dirent.h */
+ #define USG_SYS_TIME /* use sys/time.h, not time.h */
+ /* #define NBPC 4096 /* see getpagesize.h */
+
+ #define INTERRUPTABLE_CLOSE /* no harm if not true */
+ #define close sys_close
+
+ #define C_DEBUG_SWITCH -g -Dconst=
+ #define C_OPTIMIZE_SWITCH -O2 -g -Dconst= /* gcc groks -Ox */
+ #define OLDXMENU_OPTIONS CFLAGS=-O2 EXTRA=insque.o /* doesn't work anyway */
+
+ #if 0 /* choose for yourself */
+ #define SYSTEM_MALLOC /* produces smaller binary */
+ #else
+ #define ULIMIT_BREAK_VALUE (16*1024*1024) /* ulimit not implemented */
+ #endif
+
+ /* misc. kludges for linux */
+
+ #define const /* avoids type mismatch errors */
+
+ #define MAXNAMLEN NAME_MAX /* missing SYSV-ism */
+
+ #define SIGBUS SIGSEGV /* rename to harmless work-alike */
+ #define SIGSYS SIGSEGV /* rename to harmless work-alike */
+
+ #define _STDDEF_H /* defeat NULL problems */
+
+ #ifdef _ANSIDECL_H /* defeat DEFUN problems, arghh */
+ #undef DEFUN
+ #else
+ #define _ANSIDECL_H
+ #endif
+
+ #define VSWTCH VSWTC /* mis-spelling in termios.h? */
+ #define CDEL '\0' /* missing termio-ism */
+
+ /* we have non-standard standard I/O (iostream) ... */
+
+ #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_pptr - (FILE)->_pbase)
+
+ /* defines for linux in preparation for m-intel386.h */
+
+ #define DONT_DEFINE_SIGNAL /* live with the warnings */
+
+ /* Include here a m- file that describes the machine and system you use.
+ See the file ../etc/MACHINES for a list of machines and
+ the names of the m- files to use for them.
+ See m-template.h for info on what m- files should define.
+ */
+ #include "m-intel386.h"
+
+ /* overrides for linux versus m-intel386.h */
+
+ /* #undef NO_REMAP /* would require hacking crt0.c */
+
+ #define LINK_STATICALLY /* can't get shared libs to work with 0.96 */
+
+ #ifdef NO_REMAP
+ #ifndef emacs /* defeat some ymakefile problems */
+ #undef i386
+ #undef linux
+ #undef static
+ #endif
+ #define START_FILES pre-crt0.o /usr/lib/gcc-lib/i386-linux/2.1/crt0.o
+ #ifdef LINK_STATICALLY
+ #define LIBS_SYSTEM -L/usr/lib/static -lc
+ #else
+ #define LIBS_SYSTEM -L/usr/lib/shared -lc
+ #endif
+ #else
+ #undef CRT0_DUMMIES
+ #endif
+
+ /* also note other necessary changes in the source:
+ 1) setvbuf/setbuf is (still) broken and must be commented out of sysdep.c
+ 2) process.c has a hack to get shell-mode job control working
+ (problem is related to process groups)
+ 3) unexec.c needs treatment like IRIS for a.out header
+ */
+
+ /* and now we return you to your standard config.h ... */
+
+ /* Load in the conversion definitions if this system
+ needs them and the source file being compiled has not
+ said to inhibit this. There should be no need for you
+ to alter these lines. */
+
+ #ifdef SHORTNAMES
+ #ifndef NO_SHORTNAMES
+ #include "../shortnames/remap.h"
+ #endif /* not NO_SHORTNAMES */
+ #endif /* SHORTNAMES */
+
+ /* Define HAVE_X_WINDOWS if you want to use the X window system. */
+
+ #define HAVE_X_WINDOWS /* now available with 0.96 */
+
+ /* Define X11 if you want to use version 11 of X windows.
+ Otherwise, Emacs expects to use version 10. */
+
+ #ifdef HAVE_X_WINDOWS
+ #define X11
+ #endif
+
+ /* Define HAVE_X_MENU if you want to use the X window menu system.
+ This appears to work on some machines that support X
+ and not on others. */
+
+ /* #define HAVE_X_MENU */
+
+ /* Define `subprocesses' should be defined if you want to
+ have code for asynchronous subprocesses
+ (as used in M-x compile and M-x shell).
+ These do not work for some USG systems yet;
+ for the ones where they work, the s-*.h file defines this flag. */
+
+ #ifndef VMS
+ #ifndef USG
+ #define subprocesses
+ #endif
+ #endif
+
+ /* Define USER_FULL_NAME to return a string
+ that is the user's full name.
+ It can assume that the variable `pw'
+ points to the password file entry for this user.
+
+ At some sites, the pw_gecos field contains
+ the user's full name. If neither this nor any other
+ field contains the right thing, use pw_name,
+ giving the user's login name, since that is better than nothing. */
+
+ #define USER_FULL_NAME pw->pw_gecos
+
+ /* Define AMPERSAND_FULL_NAME if you use the convention
+ that & in the full name stands for the login id. */
+
+ /* #define AMPERSAND_FULL_NAME */
+
+ /* # bytes of pure Lisp code to leave space for.
+ Note that s-vms.h and m-sun2.h may override this default. */
+
+ #ifndef PURESIZE
+ #ifdef HAVE_X_WINDOWS
+ #define PURESIZE 122000
+ #else
+ #define PURESIZE 120000
+ #endif
+ #endif
+
+ /* Define HIGHPRI as a negative number
+ if you want Emacs to run at a higher than normal priority.
+ For this to take effect, you must install Emacs with setuid root.
+ Emacs will change back to the users's own uid after setting
+ its priority. */
+
+ /* #define HIGHPRI */
+

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