add directory Linux-0.98
This commit is contained in:
BIN
Linux-0.98/INSTALL/autocn/ACONVERT.EXE
Normal file
BIN
Linux-0.98/INSTALL/autocn/ACONVERT.EXE
Normal file
Binary file not shown.
1234
Linux-0.98/INSTALL/autocn/AUTOCON.DOC
Normal file
1234
Linux-0.98/INSTALL/autocn/AUTOCON.DOC
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Linux-0.98/INSTALL/autocn/AUTOCON.EXE
Normal file
BIN
Linux-0.98/INSTALL/autocn/AUTOCON.EXE
Normal file
Binary file not shown.
BIN
Linux-0.98/INSTALL/autocn/AUTOCON.HLP
Normal file
BIN
Linux-0.98/INSTALL/autocn/AUTOCON.HLP
Normal file
Binary file not shown.
34
Linux-0.98/INSTALL/autocn/CACHE
Normal file
34
Linux-0.98/INSTALL/autocn/CACHE
Normal file
@@ -0,0 +1,34 @@
|
||||
|
||||
If you are running a Cache program, and do not have it set to write
|
||||
through, then (if you have Autocon set for a Warm or Cold boot -- and
|
||||
probably External) you must configure Autocon to "Flush" your cache.
|
||||
Hit the <F4> key, and put in the command string that causes your cache
|
||||
to flush. The command should be listed in the documentation for your
|
||||
Cache program. Autocon will then save the information, and perform a
|
||||
"Flush" before each reboot.
|
||||
|
||||
If you are not sure if your Cache is set to "write through", please
|
||||
configure Autocon to do the "Flush", just to be on the safe side.
|
||||
|
||||
The symptoms of a cache problem is that the Autoexec and Config files do
|
||||
not get updated, and/or any edited Autocon configurations do not get
|
||||
saved. In the worst case, the Autocon.Dat file will get corrupted, and
|
||||
your screen colors will disappear (screen will be blank when you start
|
||||
AutoCon).
|
||||
|
||||
Setting Autocon up to do the "Flush" will remove the problems.
|
||||
|
||||
Some Flush commands that I know are:
|
||||
|
||||
PC-KWIK - SUPERPCK /F
|
||||
PC-CACHE - PC-CACHE /FLUSH
|
||||
FLASH - FLASH /F?
|
||||
HYPERDISK - HYPERDK W
|
||||
SMARTDRV - SMARTDRV /C (new ver with WINDOWS 3.1)
|
||||
|
||||
|
||||
|
||||
Sorry for any inconvenience,
|
||||
|
||||
|
||||
-Larry Weaver
|
||||
61
Linux-0.98/INSTALL/autocn/CHANGES
Normal file
61
Linux-0.98/INSTALL/autocn/CHANGES
Normal file
@@ -0,0 +1,61 @@
|
||||
|
||||
CHANGES
|
||||
|
||||
I don't know if you read the changes file in the previous version,
|
||||
so I will summarize it. I sold my home in Santa Barbara, and moved
|
||||
to a small town in Northern California to concentrate on writing
|
||||
shareware full time. Well (you may ask), how's it going.
|
||||
|
||||
Since my program was reviewed on page 50 in the Nov. 13, 1990 issue
|
||||
of PC Magazine, registrations have increased significantly.
|
||||
Appearantly a lot of people read (and pay attention to) PC
|
||||
Magazine. Site registrations have really increased, and I now have
|
||||
some Fortune 50 customers. Banks, however, make up the bulk of
|
||||
the Site Licensees.
|
||||
|
||||
I ran into a few tax problems (it was either pay Uncle a lot of
|
||||
money, or put a lot of money into my house), so I've been
|
||||
consulting pretty heavily the last year and doing major
|
||||
reconstruction to my house. I think I am finally through with any
|
||||
big consulting jobs (and with rebuilding my house), so now AutoCon
|
||||
will be getting a lot more attention.
|
||||
|
||||
This is still not the release I had planned (it will probably show
|
||||
up some time around July), but one of my competitors was on
|
||||
Compuserve saying how much better he was than I because his program
|
||||
could handle DOS 5.0's HIGH and UMB flags. I decided I needed to
|
||||
add this capability to AutoCon and get out a new release before he
|
||||
could cause any more problems. So with this release, AutoCon will
|
||||
handle both MSDOS 5.0's HIGH and UMB flags, and it is compatible
|
||||
with DRDOS which is one up on my competitor.
|
||||
|
||||
The 2.1 release of AutoCon will have a lot more editor
|
||||
enhancements. I'm planning pull down menus (similar to the front
|
||||
screen), and a split screen capability. I also intend to allow
|
||||
Search/Replace operations to go automatically through all
|
||||
configurations. I will also be able to use the screen size in
|
||||
effect when AutoCon is started, instead of switching everything to
|
||||
the 80X25 mode.
|
||||
|
||||
I have a support BBS online and functional. The number is (916)
|
||||
623 4455, and it is in operation 24 hours a day. It has a 9600+
|
||||
BAUD modem that is CompuCom CSP, V32, and V42 compatible (of course
|
||||
it connects just fine at 2400 <or less> BAUD). The main function
|
||||
of the BBS is (of course ) AutoCon support. If it gets busy
|
||||
enough, it will grow into a full multi-line BBS. As a consequence
|
||||
there are several megabytes of downloadable files on it, always
|
||||
including the latest shareware release of AutoCon. I will also set
|
||||
up a section for a group of Beta testers, so let me know if you are
|
||||
interested in becomming one. I see several enhancements in
|
||||
AutoCons future, as well as a few other programs that I have in
|
||||
mind.
|
||||
|
||||
This is my first BBS and I'm sure there will be will be some
|
||||
growing pains, so please bear with me.
|
||||
|
||||
I love the place I've moved to and I thank you very much for the
|
||||
support you have given to AUTOCON, and for giving me the incentive
|
||||
to change careers.
|
||||
|
||||
|
||||
-Larry Weaver
|
||||
8
Linux-0.98/INSTALL/autocn/FILE_ID.DIZ
Normal file
8
Linux-0.98/INSTALL/autocn/FILE_ID.DIZ
Normal file
@@ -0,0 +1,8 @@
|
||||
AutoCon V2.0g is a database manager for
|
||||
Autoexec and Config Files. Allows up to
|
||||
50 configurations, and makes switching
|
||||
between them easy. Run full interactive
|
||||
(editor, mouse, menus, context sensitive
|
||||
help, etc.) or command line. MENU.CTL
|
||||
device driver can setup menu of
|
||||
configurations during boot. (ASP)
|
||||
175
Linux-0.98/INSTALL/autocn/KEY.TXT
Normal file
175
Linux-0.98/INSTALL/autocn/KEY.TXT
Normal file
@@ -0,0 +1,175 @@
|
||||
The following is a list of the all of the editor functions, and the
|
||||
default key assignments.
|
||||
|
||||
CURSOR MOVEMENT:
|
||||
<Left>, <CtrlS>
|
||||
Cursor left one character.
|
||||
|
||||
<Right>, <CtrlD>
|
||||
Cursor right one character.
|
||||
|
||||
<CtrlLeft>, <CtrlA>
|
||||
Cursor left one word. A 'word' is a series of non-separator
|
||||
characters followed by one or more of the following :
|
||||
' ', ';', '/', '='
|
||||
|
||||
<CtrlRight>, <CtrlF>
|
||||
Cursor right one word.
|
||||
|
||||
<Home>, <CtrlQ><S>
|
||||
Cursor to beginning of line.
|
||||
|
||||
<End>, <CtrlQ><D>
|
||||
Cursor to end of line.
|
||||
|
||||
<Up>, <CtrlE>
|
||||
Cursor up one line.
|
||||
|
||||
<Down>, <CtrlX>
|
||||
Cursor down one line.
|
||||
|
||||
<CtrlW>
|
||||
Scroll display up one line.
|
||||
|
||||
<CtrlZ>
|
||||
Scroll display down one line.
|
||||
|
||||
<PgUp>, <CtrlR>
|
||||
Scroll display up one page.
|
||||
|
||||
<PgDn>, <CtrlC>
|
||||
Scroll display down one page.
|
||||
|
||||
<CtrlHome>, <CtrlQ><E>
|
||||
Move cursor to top of edit window.
|
||||
|
||||
<CtrlEnd>, <CtrlQ><X>
|
||||
Move cursor to bottom of edit window.
|
||||
|
||||
<CtrlPgUp>, <CtrlQ><R>
|
||||
Move cursor to beginning of field.
|
||||
|
||||
<CtrlPgDn>, <CtrlQ><C>
|
||||
Move cursor to end of field.
|
||||
|
||||
<Tab>, <CtrlI>
|
||||
Move the cursor to the next tab stop.
|
||||
|
||||
<ClickLeft>
|
||||
Move the cursor to the position indicated by the mouse.
|
||||
|
||||
DELETE FUNCTIONS:
|
||||
<Del>, <CtrlG>
|
||||
Delete character at cursor.
|
||||
|
||||
<Bksp>, <CtrlH>, <CtrlBksp>
|
||||
Delete character to left of cursor.
|
||||
|
||||
<CtrlY>
|
||||
Delete current line.
|
||||
|
||||
<CtrlQ><Y>
|
||||
Delete from cursor to end of line.
|
||||
|
||||
<CtrlT>
|
||||
Delete word to right of cursor.
|
||||
|
||||
NEW LINE:
|
||||
<Enter>, <CtrlM>
|
||||
Start a new line.
|
||||
|
||||
<CtrlN>
|
||||
Split the current line at the cursor.
|
||||
|
||||
DEFAULT CONTROLS:
|
||||
<CtrlP>
|
||||
Insert control character. For example, to insert a ^G, you
|
||||
would enter <CtrlP><CtrlG>.
|
||||
|
||||
<Ins>
|
||||
Toggle insert mode on and off. Fat cursor indicates insert
|
||||
mode; thin cursor indicates overtype mode.
|
||||
|
||||
<CtrlO><I>
|
||||
|
||||
Toggle auto-indent mode. In auto-indent mode, pressing
|
||||
<Enter> in insert mode causes the new line to have the same
|
||||
indentation as the previous line. Auto-indent also affects
|
||||
the way that text is formatted when word wrap occurs.
|
||||
|
||||
<CtrlB>
|
||||
Reformat the current paragraph. Use with caution.
|
||||
|
||||
<AltR>
|
||||
Reformat the entire field. Use this command with caution.
|
||||
|
||||
<CtrlQ><L>
|
||||
Restore original contents of the line and continue editing.
|
||||
|
||||
SAVE COMMANDS:
|
||||
<Esc>, <CtrlBreak>, <ClickRight>, <CtrlK><Q>,
|
||||
<AltF2>
|
||||
Quit editing and abandon changes (With Question).
|
||||
|
||||
<F2>, <CtrlK><S>
|
||||
Save the data, but continue editing.
|
||||
|
||||
<CtrlF2>, <CtrlK><X>, <CtrlK><D>, <AltX>
|
||||
Save the data (if modified), and quit editing.
|
||||
|
||||
BLOCK COMMANDS:
|
||||
<CtrlK><B>, <F7> <CtrlK><K>, <F8>
|
||||
Begin a block mark. End a block mark.
|
||||
|
||||
<CtrlK><C> <CtrlK><V>
|
||||
Copy a marked block. Move a marked block.
|
||||
|
||||
<CtrlK><Y> <F5>
|
||||
Delete a marked block. Delete Contents of Entire field.
|
||||
|
||||
<CtrlK><U> <CtrlK><P>
|
||||
Put marked block in buffer. Copy cUt buffer to Fieeld.
|
||||
Allows moving data between records.
|
||||
|
||||
<CtrlK><W>
|
||||
Write the Marked Block to the selected file name.
|
||||
|
||||
<CtrlK><R>
|
||||
Read the selected file name into the edit field. You can
|
||||
popup a file list and use a point and shoot select
|
||||
|
||||
|
||||
SEARCH COMMANDS:
|
||||
<CtrlQ><CtrlF>
|
||||
Pops up a window for you to enter a string of text to search for.
|
||||
The string remains valid across all records until it is changed with
|
||||
another search function.
|
||||
|
||||
<CtrlQ><CtrlA>
|
||||
Pops up a window for you to enter a string of text to search for,
|
||||
then pops up a window for you to enter a string of text to replace
|
||||
the search string with. You will be asked to confirm the
|
||||
replacement. The strings remain valid across all records until it
|
||||
is changed with another search function.
|
||||
|
||||
<CtrlL>
|
||||
Repeats the last Search(/Replace) function without going through the
|
||||
exercise of entering new strings.
|
||||
|
||||
MISCELLANEOUS COMMANDS:
|
||||
|
||||
<F1>, <ClickBoth>
|
||||
Help. This command invokes the help routine for this topic
|
||||
if it exists. Otherwise it does nothing.
|
||||
|
||||
<F6>
|
||||
Pops up a key edit window to allow chaging all of the editor key
|
||||
assignments.
|
||||
|
||||
<AltE>
|
||||
Creates a "SET AUTOCON=<configuration name>" command for the
|
||||
Autoexec field. If each Autoexec has the correct one, the name of
|
||||
the boot configuration will be in the environment.
|
||||
|
||||
<AltF6>, <AltF7>, <AltF8>
|
||||
Changes the keys assigned to change the colors used in the editor.
|
||||
BIN
Linux-0.98/INSTALL/autocn/MENU.CTL
Normal file
BIN
Linux-0.98/INSTALL/autocn/MENU.CTL
Normal file
Binary file not shown.
BIN
Linux-0.98/INSTALL/autocn/MENUNUM.COM
Normal file
BIN
Linux-0.98/INSTALL/autocn/MENUNUM.COM
Normal file
Binary file not shown.
94
Linux-0.98/INSTALL/autocn/REGISTER.PRN
Normal file
94
Linux-0.98/INSTALL/autocn/REGISTER.PRN
Normal file
@@ -0,0 +1,94 @@
|
||||
------------------- REGISTRATION ----------------------
|
||||
|
||||
Please support AutoCon!
|
||||
Thank you for your support.
|
||||
|
||||
Remit To: Larry Weaver
|
||||
P.O. Box 2639
|
||||
Weaverville CA 96093-2639
|
||||
|
||||
---------------------------
|
||||
|
||||
You must check one registration option, and one disk option!
|
||||
|
||||
---------------------------
|
||||
_
|
||||
|_| AutoCon Standard registration ($15.00 -- no disk sent) $______
|
||||
_
|
||||
|_| AutoCon Site License and Registration (no disk sent)
|
||||
$120.00 for the first 100 (or fewer) users or machines
|
||||
100.00 for each additional 100 (or fewer) users or machines $______
|
||||
|
||||
---------------------------
|
||||
_
|
||||
|_| AutoCon Upgrade to the newest version ($8.00; $10.00 foreign) $______
|
||||
Registered users only
|
||||
_
|
||||
|_| Subscription plan for REGISTERED users ($21.00; $26.00 foreign) $______
|
||||
(Receive the next three updates of AutoCon, as they
|
||||
become available. This fee is in addition to the
|
||||
$15.00 or $120.00 registration.)
|
||||
|
||||
---------------------------
|
||||
_
|
||||
|_| Printed Manual ($8.00) $______
|
||||
If you desire, I will print out the AUTOCON.DOC file and
|
||||
send it to you. You can achieve the same results by printing
|
||||
it out yourself, but several people seem to want this.
|
||||
|
||||
---------------------------
|
||||
|
||||
"Foreign" means outside the USA and Canada; the extra charge covers postage.
|
||||
_ _
|
||||
Payment by: |_| Check or |_| Money Order enclosed.
|
||||
|
||||
TOTAL in USA Funds. $______
|
||||
Foreign checks are acceptable if they have the US Federal Reserve
|
||||
Routing Number on them, use the current exchange rate.
|
||||
_ _
|
||||
Disk Type: |_| 5 1/4" (normally sent); |_| 3 1/2" required
|
||||
|
||||
Name ___________________________________________________________________
|
||||
|
||||
Address ___________________________________________________________________
|
||||
|
||||
___________________________________________________________________
|
||||
|
||||
___________________________________________________________________
|
||||
|
||||
|
||||
Day Phone: _________________________ Eve: ______________________
|
||||
|
||||
Compuserve ID: _____________________
|
||||
|
||||
_
|
||||
Invoice Required |_| P. O. Number: ______________________
|
||||
|
||||
------------------------ User comments -------------------------
|
||||
I acquired AutoCon V2.0g from
|
||||
[ ] - Friend [ ] - Software product
|
||||
[ ] - Computer Club [ ] - Computer Store
|
||||
[ ] - Data Base Service [ ] - Support BBS
|
||||
[ ] - Electronic BBS - Please give phone no. _____________
|
||||
[ ] - Other (please specify) ___________________________
|
||||
|
||||
I would also appreciate any input you would care to provide
|
||||
concerning AutoCon. If you have any ideas or comments which would
|
||||
make AutoCon a better program, please let me know.
|
||||
|
||||
I value your comments!
|
||||
|
||||
Comments and/or suggestions:
|
||||
________________________________________________________________
|
||||
|
||||
________________________________________________________________
|
||||
|
||||
________________________________________________________________
|
||||
|
||||
________________________________________________________________
|
||||
|
||||
________________________________________________________________
|
||||
|
||||
________________________________________________________________
|
||||
|
||||
________________________________________________________________
|
||||
441
Linux-0.98/INSTALL/autocn/WHATSNEW
Normal file
441
Linux-0.98/INSTALL/autocn/WHATSNEW
Normal file
@@ -0,0 +1,441 @@
|
||||
Version 2.0g
|
||||
I still had complaints about people seeing Echo Off in the Autoexec
|
||||
Bat file, so now if you have a DOS higher than 3.2, it will start
|
||||
with @Echo off.
|
||||
|
||||
If you are using DOS 5.0, A DOS=HIGH,NOUMB line will be appended to
|
||||
the bottom of the Autoexec.bat file, and you will have to put a
|
||||
DOS=LOW (and/ or a DOS=UMB) in the configurations you need them in.
|
||||
Menu.Ctl will control the flags.
|
||||
|
||||
If you are using DRDOS, Menu.Ctl will now work with it as well as
|
||||
MSDOS.
|
||||
|
||||
I've changed the way I load configurations, so you will be able to
|
||||
run AutoCon with less memory, and there is no longer a 6K or 2K
|
||||
limit on the Autoexec and Config fields.
|
||||
|
||||
Each configuration now has the names of the files that the field is
|
||||
written to. (I've had several requests for this one.)
|
||||
|
||||
The help screen colors are now installable.
|
||||
|
||||
The MENU.CTL interface has been rewritten to show up more distinctly
|
||||
when booting. I had several complaints that it was easy to miss.
|
||||
It will now put up some distinctive boxex, and show up in color if
|
||||
you have a color monitor. The colors are installable from AutoCon.
|
||||
|
||||
Each configuration now has the names of the files that the field is written
|
||||
to. (I've had several requests for this one.)
|
||||
|
||||
You can tell AutoCon not to restore the screen on exit (eliminates the
|
||||
need for AutoConx.exe.
|
||||
|
||||
|
||||
Version 2.0e (mainly bug fix)
|
||||
In Single mode if the Enviornment name wasn't set (AltE in the
|
||||
editor) AutoCon could get the wrong cache 'Flush' information. This
|
||||
is fixed, but I highly reccommend setting the Autocon Environment
|
||||
variable if you are using Single mode.
|
||||
|
||||
If an external editor were being used, and the Autocon or Config
|
||||
field size got too large, the AutoCon.Dat file could get messed up -
|
||||
fixed.
|
||||
|
||||
Several people have complained that 4K and 2K is not large enough
|
||||
for the Autoexec and Config fields, so I'm pushing the size up to 6K
|
||||
and 4K. Please note that this adds 4K/configuration to AutoCon's
|
||||
memory requirements.
|
||||
|
||||
There are two extra EXE files on the BBS. AutoCons.exe will still
|
||||
use 4K and 2K for those needing the smaller memory requirements.
|
||||
|
||||
AutoConx.exe will not restore the screen when it exits. Try this if
|
||||
you lose the cursor or the screen blanks out when you exit (I've had
|
||||
two complaints about this).
|
||||
|
||||
Version 2.0d (bug fix)
|
||||
If AutoCon followed an "ECHO OFF" and a "CLS" statement in a batch
|
||||
file, the screen could get slightly messed up - fixed.
|
||||
|
||||
Version 2.0c (bug fix)
|
||||
The user modified colors were getting lost if a reboot was performed
|
||||
from the command line - fixed.
|
||||
|
||||
Version 2.0b (bug fix)
|
||||
|
||||
MENU.CTL had a problem with the name of the eighth configuration,
|
||||
which is now fixed. It also had a tendency to leave menu choice 2
|
||||
in the hi-lite mode, also fixed.
|
||||
|
||||
Several people complained about seeing the Errorlevel statements in
|
||||
the AUTOEXEC.BAT during the boot process. AUTOEXEC.BAT files will
|
||||
now start with ECHO OFF as the first statement if you choose the
|
||||
MENU.CTL option.
|
||||
|
||||
Version 2.0 would allow you to choose more than the eight default
|
||||
configurations. This is no longer allowed.
|
||||
|
||||
Version 2.0 had a problem writing the AUTOEXEC.BAT file for the Menu
|
||||
mode if the Autoexec fields didn't end in a Carriage Return. This
|
||||
is now fixed.
|
||||
|
||||
|
||||
Version 2.0
|
||||
|
||||
|
||||
I'm jumping the version number from 1.4 to 2.0 for this release.
|
||||
The reason is that AutoCon's capability has changed so much in this
|
||||
release that I think it warrants a Major revision number change.
|
||||
|
||||
The major change is the inclusion of two new files. These are
|
||||
MENU.CTL and MENUNUM.COM. Menu.Ctl is a device driver that can
|
||||
disable commands in the CONFIG.SYS file. MenuNum.Com is a file that
|
||||
will ask the portion of Menu.Ctl that stays resident which
|
||||
configuration was chosen, and set the DOS ERRORLEVEL to that number.
|
||||
This allows setting up menu choices in the AUTOEXEC.BAT file to
|
||||
match the choice made from the CONFIG.SYS file. Together these two
|
||||
files allow you to choose a system configuration from a menu of
|
||||
configurations during the boot process itself.
|
||||
|
||||
AutoCon will handle all of the interface details to these two
|
||||
commands for you, and allow you to return to a "Normal" system
|
||||
configuration in just a couple of keystrokes. This will allow you
|
||||
to run programs like "Optimize" from Quarterdeck.
|
||||
|
||||
|
||||
There is a pull-down menu system available on the main screen. Each
|
||||
item on the menu has a context sensitive help entry. This should
|
||||
make it very easy to get AutoCon up and running the first time, and
|
||||
allow you to look up those commands you can't remember the
|
||||
keystrokes for.
|
||||
|
||||
|
||||
There are two new command line options. If you enter
|
||||
|
||||
AutoCon /<return>
|
||||
|
||||
on the command line, a window of your configurations will pop up
|
||||
asking you to choose which configuration you wish to use to reboot
|
||||
the system. This is equivalent to the "AutoCon <configuraion name>,
|
||||
except that AutoCon lets you choose the name from a pick list.
|
||||
|
||||
The second new command is
|
||||
|
||||
AutoCon /@<configuration name>
|
||||
|
||||
where <configuration name> is the name shown on the main screen for
|
||||
each configuration. If the name matches the configuration that was
|
||||
used for the boot process, the DOS errorlevel will be set to 1. It
|
||||
will be set to 0 otherwise. For this function to work correctly,
|
||||
you need to boot up with Menu.Ctl, or assure that each Autoexec
|
||||
field has the correct name assigned with a SET command. See the new
|
||||
"Put Name in Environment" editor function defined below.
|
||||
|
||||
|
||||
The internal editor has a few new capabilities. In order to access
|
||||
most them you will have to edit your keystrokes (using the F6 key).
|
||||
The block operations are no longer constrained to full lines. The
|
||||
default keys for reformating were removed. You may reassign them.
|
||||
|
||||
"Search Function" (default assigned to ^Q^F) allows you to search
|
||||
the text for a specified string of text. The string is active for
|
||||
the entire AutoCon session, and will be the same across records.
|
||||
|
||||
"Search/Replace Function" (default assigned to ^Q^A) allows you to
|
||||
search the text for a specified string of text, and relpace it
|
||||
with another string of text. You will be asked to confirm the
|
||||
replacement.
|
||||
|
||||
"Repeat Search Function" (default assigned to ^L) This will
|
||||
repeat the last Search, or Search/Replace that was performed. The
|
||||
informations is retained during the AutoCon session, and will be
|
||||
the same across records.
|
||||
|
||||
"Install Editor Keys" (default assigned to F6) allows you to
|
||||
change the editor keys during an edit session.
|
||||
|
||||
"Put Name in Environment" (default assigned to AltE) will put a
|
||||
SET command in your edit field. This will guarantee that the
|
||||
configuration you are editing has its name placed correctly in the
|
||||
environment. AutoCon will use this name for various command line
|
||||
functions.
|
||||
|
||||
"Change (Text - AltF6, Block - AltF7, Control Char - AltF8)
|
||||
Attribute" will allow you to change the keys that call up the
|
||||
editor color installation windows.
|
||||
|
||||
"View Last Dos Screen" (default assigned to AltV) allows you to
|
||||
see the DOS screen as it was when AutoCOn was started. Could be
|
||||
useful if the reason your changing a configuration is shown there.
|
||||
|
||||
|
||||
By March 1, 1991 I will have a support BBS in place operating 24
|
||||
hours a day. The number will be (916) 623 4455.
|
||||
|
||||
|
||||
Version 1.4
|
||||
|
||||
One of the WhatsNews has to do with me, I am now a member of the ASP
|
||||
(Association of ShareWare Professionals). The rest of the WhatsNews
|
||||
all concern changes (and additions) to the program.
|
||||
|
||||
You now have the option to use the built in editor to edit the
|
||||
Autoexec and Config fields, or to install an external editor to do
|
||||
the job. <CtrlF6> will pop up a window for you to enter an external
|
||||
editor's file name. The Path will be checked for the entered file
|
||||
name, and if found, it will be used to edit the Autoexec and Config
|
||||
fields in the future. For more info, see the "Installing External
|
||||
Editor" section of AUTOCON.DOC.
|
||||
|
||||
From the command line, typing <AUTOCON /=> will check the Autoexec
|
||||
and Config fields of the current configuration record against the
|
||||
file contents of the current Configuration files (usually
|
||||
C:\AUTOEXEC.BAT and C:\CONFIG.SYS). The results of the comparison
|
||||
will be shown on the screen. SPECIAL NOTE! - the configuration will
|
||||
need to have been saved with the 1.4 version of AUTOCON.
|
||||
|
||||
From the command line, typing <AUTOCON /*> will update the Autoexec
|
||||
and Config fields of the current configuration record from the file
|
||||
contents of the current Configuration files (usually C:\AUTOEXEC.BAT
|
||||
and C:\CONFIG.SYS). You might want to be a little careful with this
|
||||
one.
|
||||
|
||||
The internal editor has a few new capabilities. In order to access
|
||||
them, you will probably have to edit your keystrokes (using the <F6>
|
||||
key). The new commands are "Split Line", "Cut the marked block",
|
||||
and "Paste the last Cut block". These commands will be a little
|
||||
more convenient than the current "Write marked block" and "Read
|
||||
marked block" file commands.
|
||||
|
||||
"Split Line" (default assigned to <CtrlN> key) splits the current
|
||||
line at the cursor, leaving the cursor where it is, and moving the
|
||||
rest of the line down to the next line.
|
||||
|
||||
"Cut the marked block" (default assigned to <CtrlK> <U> key
|
||||
combination) will put the current marked block into a text buffer.
|
||||
"Paste the last Cut block" (default assigned to <CtrlK> <P> key
|
||||
combination) will paste the contents of the cut buffer to the
|
||||
current cursor location. This command can be used to move the
|
||||
data in the same record, or across records. After a cUt, the data
|
||||
will stay in the buffer until a new cUt is performed, or AUTOCON
|
||||
is exited.
|
||||
|
||||
Formerly the editor only recognized a ' ' (space) as a word mark
|
||||
(for <CtrlF>, <CtrlA>, <CtrlRarw>, etc.). This has been enhanced
|
||||
to also recognize the following characters as word marks :
|
||||
'/', ';', and '='.
|
||||
|
||||
Line length was increased to 254 for those long path names (and
|
||||
any other long lines needed). This necessitated removing the
|
||||
word-wrap capability while editing the Autoexec and Config
|
||||
fields (I don't think this will be a hardship, you probably don't
|
||||
want to word-wrap the lines in your Autoexec and Config files
|
||||
anyway). Word-wrap is still used in the Notes field, but please
|
||||
don't enter a line longer than 127 characters in there.
|
||||
|
||||
|
||||
A couple of functions were also added to the Interactive Mode.
|
||||
|
||||
<AltC> will pop-up a pick list of the current configuration
|
||||
records, and allow you to select one. The contents of the
|
||||
Autoexec and Config fields of the selected configuration record
|
||||
will be copied to the current configuration record. Be careful
|
||||
with this one, there is NO "Undo" command. You can always
|
||||
use ESC to get out of the pick list without doing a copy.
|
||||
|
||||
<AltV> will now show the Dos screen as it was when Autocon was
|
||||
started.
|
||||
|
||||
<Alt=> will check the Autoexec and Config fields of the current
|
||||
configuration record against the contents of the current
|
||||
configuration files (C:\AUTOEXEC.BAT and C:\CONFIG.SYS, unless you
|
||||
have changed them with <F8> or <F9> keys). SPECIAL NOTE! - the
|
||||
configuration will need to have been saved with the 1.4 version of
|
||||
AUTOCON.
|
||||
|
||||
All of the color changes now show up instantly (you previously had
|
||||
to wait till the next time Autocon was executed to see some of the
|
||||
color changes).
|
||||
|
||||
ESC is no longer accepted as a "Yes" answer (there were a lot of
|
||||
complaints on this one). A "Yes" answer now requires a <Y> or
|
||||
<Enter> key (accept default).
|
||||
|
||||
There are a few cosmetic changes on the screens (all in response to
|
||||
comments by users). I won't take the space to list each one.
|
||||
|
||||
There are a couple more entrys on the help screen, and (I hope) the
|
||||
entries are arranged in a little more logical fashion.
|
||||
|
||||
UltraVision : Autocon is now UltraVision "Aware". Autocon will
|
||||
detect if UltraVision is installed and active. If it is, Autocon
|
||||
will use UltraVision to switch modes, and restore screens (in other
|
||||
words, Autocon won't mess up your screen).
|
||||
|
||||
Windows Problems : After spending a very unproductive day on the
|
||||
phone with Microsoft, I decided to add another boot type option to
|
||||
Autocon. Several people use Autocon to reconfigure in and out of
|
||||
Windows. When Windows is running in 386 enhanced mode, a software
|
||||
boot (usually) doesn't work. Microsoft's recommendation : "Never
|
||||
reboot while running Windows". They say that this may trash hard
|
||||
disks and worse (I'm not sure what could be "worse" than trashing a
|
||||
hard disk). I don't know about you, but I've had to reboot out of
|
||||
Windows several times. I know it's probably not a good idea, but
|
||||
there are times it should be quite safe (and times when it is forced
|
||||
upon us). Anyway, they say that is no way they are aware of to
|
||||
ensure that a software reboot will work.
|
||||
Therefore :
|
||||
|
||||
You may now select (N)one as an alternate boot type (using the
|
||||
<F5> key). If you select (N)one, Autocon will now reconfigure the
|
||||
files, but will not attempt a reboot. Now you may run Autocon
|
||||
under Windows, and after the system files are reconfigured, you
|
||||
can hit the dreaded CtrlAltDel key combination.
|
||||
|
||||
By the way, I'm not much of an artist, so if someone (out of the
|
||||
goodness of their hearts) designs a nice Icon for Autocon, I would
|
||||
appreciate them sending me a copy.
|
||||
|
||||
|
||||
A potentially nasty bug was squashed. Since I never received a
|
||||
complaint on this one, I assume that I was the only one "bit". If
|
||||
your current configuration record was the last one, and you deleted
|
||||
it, Autocon tried to find it again the next time it was started.
|
||||
This could lead to bizarre behavior (a messed up pointer for those
|
||||
technical people). If the current record number is larger than the
|
||||
max record number, it will now be adjusted (with appropriate warning
|
||||
message). It will still be pointing to the wrong record, but it
|
||||
will behave in a known fashion.
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
Version 1.3a
|
||||
|
||||
There are a few bug fixes, and a couple of enhancements in this
|
||||
version. If you used F2 to save changes in the previous versions,
|
||||
when you hit ESC to exit it would issue a warning that the changes
|
||||
were about to be lost, this has been corrected.
|
||||
|
||||
AUTOCON will now attempt to detect and restore the EGA/VGA (45/50)
|
||||
small character mode upon exit.
|
||||
|
||||
After updating the configuration with 1.3a, when AUTOCON is started
|
||||
in the interactive mode, it will default to the configuration used
|
||||
in the last update.
|
||||
|
||||
On the command line if you type <AUTOCON /?> the name of the current
|
||||
configuration will be displayed (Note: you must have saved a
|
||||
configuration with V1.3a first).
|
||||
|
||||
If you are in the full screen entry mode, hitting <F7> will update
|
||||
the Autoexec and Config fields in the current record from the
|
||||
current AUTOEXEC.BAT and CONFIG.SYS files. This saves going into
|
||||
each of the two fields and doing a <F5> <^KR> <AltX>.
|
||||
|
||||
From the command line, typing AUTOCON followed by a / and the name
|
||||
of a configuration (e.g. <AUTOCON /NoTSRs>) will cause that
|
||||
configuration to have it's Autoexec and Config fields updated from
|
||||
the current AUTOEXEC.BAT and CONFIG.SYS files.
|
||||
|
||||
There was a bug in V1.3 that caused AUTOCON to have a problem with
|
||||
reading files that were not terminated with ^Z. If you got an
|
||||
"Edit Buffer Full" message when you tried to edit a field that you
|
||||
know wasn't too big, then you were bitten by this bug. This is
|
||||
fixed in 1.3a.
|
||||
|
||||
If you were in one of the fields and issued an <^KW> (block save)
|
||||
and didn't have a marked block, you were not given an error message
|
||||
in previous versions. This is fixed in 1.3a.
|
||||
|
||||
The help screen displayed in a color change window was the one for
|
||||
changing the editor keystrokes. This is fixed in 1.3a.
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
Version 1.3
|
||||
|
||||
There are several changes in this version. If you have added
|
||||
several extra configurations that you no longer need, the <CtrlF3>
|
||||
key will delete the current configuration (you can't delete record
|
||||
one, nor can you go below five records).
|
||||
|
||||
You can change the keystrokes used by the built in editor. Hitting
|
||||
the <F6> key in the main menu will pop up a key editor which will
|
||||
allow changing the actions of all of the control keys used in the
|
||||
editor.
|
||||
|
||||
You can change the colors used by AUTOCON. Hitting the <Alt> key in
|
||||
combination with the function keys will allow customization of most
|
||||
of the colors. The use of each key is detailed in the pop-up help.
|
||||
|
||||
The DAT file format for 1.3 is quite different than the one for 1.2.
|
||||
The white space has been eliminated, and as a consequence it is
|
||||
significantly smaller (mine are about 1/4 the previous size). The
|
||||
first time you run 1.3 it will change the format, and the DAT file
|
||||
will no longer be compatible with 1.2. You may want to make a copy
|
||||
of AUTOCON.DAT (just to be on the safe side) before running 1.3.
|
||||
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
Version 1.2d keeps current file attributes
|
||||
|
||||
A request was made to update the Autoexec and Config files, but to
|
||||
not change their current attributes (system, read only, hidden,
|
||||
etc.). Therefore AUTOCON now reads the current file attributes of
|
||||
Autoexec.Bat and Config.Sys before updating them, and restores the
|
||||
attributes after the update.
|
||||
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
Version 1.2c adds a boot type select.
|
||||
|
||||
Some computers have trouble with the warm boot that AUTOCON was
|
||||
originally configured with. These seem to mainly be machines with
|
||||
large hard disks, and a large hard disk manager. The <F5> key now
|
||||
allows you to change the boot type from warm to cold to get around
|
||||
this problem.
|
||||
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
Version 1.2a is a bug fix.
|
||||
|
||||
AUTOCON didn't recognize more than three configurations from the
|
||||
command line.
|
||||
|
||||
|
||||
Version 1.2 is a bug fix.
|
||||
|
||||
When you attempted to read in your old configuration files to the
|
||||
AUTOEXEC and CONFIG fields, it always defaulted to C:\AUTOEXEC.BAT
|
||||
an C:\CONFIG.SYS no matter what files you had selected. The read
|
||||
file option now works correctly.
|
||||
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
Version 1.1 charges are as follows.
|
||||
|
||||
1. AUTOCON now does a Reboot when a reconfiguration is done from the
|
||||
command line.
|
||||
|
||||
2. AUTOCON now handles up to 50 configurations (originally only 5).
|
||||
|
||||
3. You can now read any file into an AUTOEXEC or CONFIG edit field
|
||||
(allows you to use your old configurations).
|
||||
|
||||
4. The On-line Help has been updated/enhanced.
|
||||
|
||||
5. The Doc file has been enhanced (left out a few things the first
|
||||
time).
|
||||
|
||||
6. Allows you the choice of a Reboot when reconfiguring in the data
|
||||
entry mode.
|
||||
|
||||
7. Hopefully a better choice of colors on an LCD screen. If you have
|
||||
an LCD, you need to have your mode set to BW80 (2).
|
||||
|
||||
|
||||
BIN
Linux-0.98/INSTALL/autocn2g.zip
Normal file
BIN
Linux-0.98/INSTALL/autocn2g.zip
Normal file
Binary file not shown.
BIN
Linux-0.98/INSTALL/bootlin4.zip
Normal file
BIN
Linux-0.98/INSTALL/bootlin4.zip
Normal file
Binary file not shown.
BIN
Linux-0.98/INSTALL/pboot.zip
Normal file
BIN
Linux-0.98/INSTALL/pboot.zip
Normal file
Binary file not shown.
3
Linux-0.98/INSTALL/pfdisk/MAKE_TCC.BAT
Normal file
3
Linux-0.98/INSTALL/pfdisk/MAKE_TCC.BAT
Normal file
@@ -0,0 +1,3 @@
|
||||
@echo This batch file uses Turbo C to build pfdisk.exe
|
||||
@echo Note that only SMALL model has been tested...
|
||||
tcc -v- -epfdisk.exe pfdiskaz.c syscodes.c s_msdos.c
|
||||
264
Linux-0.98/INSTALL/pfdisk/PFDISK.DOC
Normal file
264
Linux-0.98/INSTALL/pfdisk/PFDISK.DOC
Normal file
@@ -0,0 +1,264 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PFDISK(8) MAINTENANCE COMMANDS PFDISK(8)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
NAME
|
||||
pfdisk - partition fixed disk
|
||||
|
||||
SYNOPSIS
|
||||
pfdisk device
|
||||
|
||||
DESCRIPTION
|
||||
pfdisk partitions the fixed disk identified as device into (at
|
||||
most) four parts, each of which may be independently loaded with
|
||||
an operating system. The actual name of device depends on the
|
||||
operating system in use. For ESIX (System V/386) the device
|
||||
name is either "/dev/rdsk/0s0" or "/dev/rdsk/1s0". For Minix,
|
||||
it is "/dev/hd0" or "/dev/hd5". For MS-DOS it is a single digit
|
||||
(zero or one).
|
||||
|
||||
pfdisk reads the hard disk partition table from block zero of
|
||||
device into memory and allows the user to examine, modify, or
|
||||
save the partition table. A regular file may be used instead of
|
||||
a real device for testing purposes, though the device geometry
|
||||
must be specified manually, and some systems will requrire a
|
||||
file-name argument with the "R" and "W" commands (DOS, ESIX).
|
||||
|
||||
The partition table on device is NOT modified unless the write
|
||||
command (W) is used with no argument.
|
||||
|
||||
USAGE
|
||||
Commands
|
||||
All pfdisk commands consist of a command word followed by
|
||||
optional blank-separated command arguments. Note that only the
|
||||
first letter of a command word is significant (except for "wq"
|
||||
and "q!"). All command letters are accepted in either upper or
|
||||
lower case. Numeric arguments are specified using C syntax.
|
||||
Extra arguments are silently ignored.
|
||||
|
||||
The commands are:
|
||||
|
||||
? Prints a command summary (help).
|
||||
|
||||
1 sys_id first last sys_name
|
||||
Set the partition table entry for part one, using:
|
||||
sys_id as its system ID code, first as the lowest num-
|
||||
bered cylinder it uses, last as the highest numbered
|
||||
cylinder it uses, and sys_name (optional) as the system
|
||||
name (in the menu name table).
|
||||
|
||||
2|3|4 sys-id first last sys-name
|
||||
Similar to 1 but sets partition two, three, or four,
|
||||
respectively.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Release 1.3 Last change: Oct 1990 1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PFDISK(8) MAINTENANCE COMMANDS PFDISK(8)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
A number
|
||||
Mark partition number as active (so it will be used for
|
||||
booting). If number is zero, no partition will be
|
||||
active.
|
||||
|
||||
G cylinders heads sectors
|
||||
Inform pfdisk what the geometry of the device is.
|
||||
|
||||
I Print a summary of the known ID codes.
|
||||
|
||||
L List the partition table. See Output Format below.
|
||||
|
||||
Q Quit without saving. If the memory copy of the parti-
|
||||
tion table was modified, a warning will be issued and
|
||||
the command ignored.
|
||||
|
||||
Q! Quit, even if the memory copy of the partition table was
|
||||
not saved.
|
||||
|
||||
R file-name
|
||||
Read boot sector from file-name (if given) otherwise
|
||||
read from device.
|
||||
|
||||
W file-name
|
||||
Write boot sector to file-name. (if given) otherwise
|
||||
write to device.
|
||||
|
||||
WQ Same as "write" followed by "quit".
|
||||
|
||||
# This line is a comment (to be ignored).
|
||||
|
||||
Output Format
|
||||
Here is a sample of the output from the L command:
|
||||
|
||||
# Partition table on device: /dev/rdsk/0s0
|
||||
geometry 1222 15 34 (cyls heads sectors)
|
||||
# ID First(cyl) Last(cyl) Name # start, length (sectors)
|
||||
1 4 0 127 MS-LOSS # 34, 65246
|
||||
2 129 128 255 Minix # 65280, 65280
|
||||
3 0 0 0 # 0, 0
|
||||
4 99 256 1220 ESIX # 130560, 492150
|
||||
# note: last(4): phys=(1023,14,34) logical=(1220,14,34)
|
||||
active: 4
|
||||
|
||||
This output format is carefully constructed so that it may be
|
||||
saved in a file (by redirecting standard output) and later used
|
||||
as input (by redirecting standard input). On a UNIX system, one
|
||||
can save this output using the command:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Release 1.3 Last change: Oct 1990 2
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PFDISK(8) MAINTENANCE COMMANDS PFDISK(8)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
(echo L) | pfdisk device-name > save-file
|
||||
|
||||
save-file is a complete record of the partition table. On a
|
||||
UNIX system, one could use save-file to re-initialize the parti-
|
||||
tion table using the command:
|
||||
|
||||
(cat save-file ; echo wq) | pfdisk device-name
|
||||
|
||||
Consistency of each partition table entry is checked while the
|
||||
table is listed. Any inconsistencies discovered are reported in
|
||||
a commentary note as shown above.
|
||||
|
||||
Physical vs. Logical
|
||||
Each partition table entry has both "physical" and a "logical"
|
||||
fields. The physical fields specify the lowest and highest
|
||||
cylinder,head,sector combinations to be used in that partition.
|
||||
The logical start field has the total number of sectors which
|
||||
precede this partition, and the logical length field has the
|
||||
total number of sectors contained in this partition. These
|
||||
fields should be self consistent unless the disk has more than
|
||||
1024 cylinders.
|
||||
|
||||
The physical cylinder fields are only ten-bits wide so the con-
|
||||
tents are limited to 1023. The logical sector fields are 32 bits
|
||||
wide and always show the true logical beginning and length of
|
||||
the partition. Generally, the physical start field is used only
|
||||
to locate the secondary boot sector, and the logical start and
|
||||
length fields are used to actually delimit the partition used by
|
||||
a particular system.
|
||||
|
||||
Partition Names
|
||||
The Name field in the partition table is treated specially if
|
||||
the bootmenu program is installed in the primary boot sector.
|
||||
(See the file bootmenu.doc for more information.) pfdisk can
|
||||
recognize the name table used by bootmenu and will show the
|
||||
actual names present in that name table. If any other boot pro-
|
||||
gram is used then the Name field reflects the result of a
|
||||
table-lookup of the system ID.
|
||||
|
||||
If you provide a name when setting any partition entry, the
|
||||
boot-sector is marked as using a name table, so that on subse-
|
||||
quent uses of pfdisk you will see the partition names you have
|
||||
specified.
|
||||
|
||||
Boot program replacement
|
||||
You can replace the boot program in your boot sector without
|
||||
affecting the partition table by using pfdisk as follows.
|
||||
First, (as always) save a copy of the current boot sector (on a
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Release 1.3 Last change: Oct 1990 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PFDISK(8) MAINTENANCE COMMANDS PFDISK(8)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
floppy) using the "W file" command. Then, use the "R file" com-
|
||||
mand to read the new boot program. If the boot program read in
|
||||
is less than 446 bytes long, the partition table will be
|
||||
unchanged.
|
||||
|
||||
Unlike the DOS or UNIX fdisk programs, pfdisk has NO boot pro-
|
||||
gram compiled into its executable image. If you wish to use
|
||||
pfdisk to partition a newly formatted hard disk, you must have a
|
||||
boot program image available to read in using the "r file" com-
|
||||
mand. Two boot programs, "bootmenu.bin" and "bootauto.bin" are
|
||||
distributed with pfdisk and should be found with its source
|
||||
files. See the file bootmenu.doc for further information about
|
||||
these boot programs.
|
||||
|
||||
AUTHOR
|
||||
Gordon W. Ross
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Release 1.3 Last change: Oct 1990 4
|
||||
|
||||
BIN
Linux-0.98/INSTALL/pfdisk/PFDISK.EXE
Normal file
BIN
Linux-0.98/INSTALL/pfdisk/PFDISK.EXE
Normal file
Binary file not shown.
605
Linux-0.98/INSTALL/pfdisk/PFDISKAZ.C
Normal file
605
Linux-0.98/INSTALL/pfdisk/PFDISKAZ.C
Normal file
@@ -0,0 +1,605 @@
|
||||
/*
|
||||
* pfdisk - Partition a Fixed DISK
|
||||
* by Gordon W. Ross, Jan. 1990
|
||||
*
|
||||
* See the file "pfdisk.doc" for user instructions.
|
||||
*
|
||||
* This program uses a simple, line-oriented interpreter,
|
||||
* designed for both interactive and non-interactive use.
|
||||
* To facilitate non-interactive use, the output from the
|
||||
* 'L' (list partitions) command is carefully arranged so it
|
||||
* can be used directly as command input. Neat trick, eh?
|
||||
*/
|
||||
|
||||
char *versionString =
|
||||
"# pfdisk version 1.2.1 by Gordon W. Ross Aug. 1990\nModified by S. Lubkin Oct. 1991\n";
|
||||
|
||||
/* These don't really matter. The user is asked to set them. */
|
||||
#define DEFAULT_CYLS 306
|
||||
#define DEFAULT_HEADS 4
|
||||
#define DEFAULT_SECTORS 17
|
||||
#define PROMPT_STRING "pfdisk> "
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include "sysdep.h"
|
||||
#include "syscodes.h"
|
||||
|
||||
typedef unsigned char uchar;
|
||||
typedef unsigned int uint;
|
||||
typedef unsigned long ulong;
|
||||
|
||||
struct part { /* An entry in the partition table */
|
||||
uchar active; /* active flag (0x80 or 0) */
|
||||
uchar b_head; /* begin head */
|
||||
uchar b_sec; /* sector */
|
||||
uchar b_cyl; /* cylinder */
|
||||
uchar sysid; /* system id (see sysid.c) */
|
||||
uchar e_head; /* end head */
|
||||
uchar e_sec; /* end sector */
|
||||
uchar e_cyl; /* end cylinder */
|
||||
/* These two are just longs, but this way is machine independent. */
|
||||
/* uchar lsBeg[4]; /* logical sectors, beginning Saul */
|
||||
ulong lsBeg; /* logical sectors, beginning Saul */
|
||||
/* uchar lsLen[4]; /* logical sectors, length Saul */
|
||||
ulong lsLen; /* logical sectors, length Saul */
|
||||
};
|
||||
|
||||
#define LOC_PT 0x1BE
|
||||
#define LOC_NT 0x1AA /* Saul */
|
||||
/* #define LOC_NT 0x180 Saul */
|
||||
/* #define LOC_GWR 0x1A0 Saul */
|
||||
#define LOC_GWR 0x1A9 /* Saul */
|
||||
#define MAGIC_LOC 0x1FE
|
||||
#define MAGIC_0 0x55
|
||||
#define MAGIC_1 0xAA
|
||||
#define MAX_LINE 80
|
||||
#define NT_ENTRY_SIZE 5 /* Saul */
|
||||
/* Note: Entry in "printf" command, should be manually changed, to
|
||||
"%-NT_ENTRY_SIZE.NT_ENTRY_SIZEs" Saul */
|
||||
/* And header printf line should have blanks adjusted Saul */
|
||||
|
||||
char s[22]; /* For holding error string */
|
||||
char buffer[SECSIZE]; /* The boot block buffer */
|
||||
int bufmod=0; /* buffer modified... */
|
||||
/* (zero means buffer is unmodified) */
|
||||
int useNTable; /* boot sector uses name table */
|
||||
|
||||
/* device parameters (force someone to set them!) */
|
||||
unsigned cyls = DEFAULT_CYLS;
|
||||
unsigned heads = DEFAULT_HEADS;
|
||||
unsigned sectors = DEFAULT_SECTORS;
|
||||
|
||||
char *devname; /* device name */
|
||||
char cmdline[MAX_LINE];
|
||||
char filename[80]; /* used by r/w commands */
|
||||
char *prompt; /* null if no tty input */
|
||||
|
||||
/* Some of these strings are used in more than one place.
|
||||
* For consistency, I put a newline on all of them.
|
||||
*/
|
||||
char h_h[] = "? <enter> : Help summary\n";
|
||||
char h_l[] = "L : List partition table\n";
|
||||
char h_1[] = "1 id first last [name]: set partition 1\n";
|
||||
char h_2[] = "2,3,4 ... (like 1) : set respective partition\n";
|
||||
char h_a[] = "A n [m, ...] : Activate partition(s) n [m, ...]\n";
|
||||
char h_g[] = "G cyls heads sectors : set disk Geometry\n";
|
||||
char h_i[] = "I : list known ID numbers\n";
|
||||
char h_r[] = "R [optional-file] : Read device (or specified file)\n";
|
||||
char h_w[] = "W [optional-file] : Write device (or specified file)\n";
|
||||
char h_q[] = "Q[!] : Quit (! means force)\n";
|
||||
|
||||
char * helpTable[] = {
|
||||
h_h, h_l, h_1, h_2, h_a, h_g, h_i, h_r, h_w, h_q,
|
||||
"# (All command letters have lower-case equivalents.)\n",
|
||||
(char *) 0 }; /* This MUST have a zero as the last element */
|
||||
|
||||
char *BadArg="Error: bad argument: %s\n";
|
||||
char *WarnNotSaved =
|
||||
"Warning, modified partition table not saved.\n";
|
||||
|
||||
help()
|
||||
{
|
||||
char ** p;
|
||||
for (p = helpTable; *p; p++)
|
||||
printf(*p);
|
||||
}
|
||||
|
||||
/* forward declarations */
|
||||
void checkValidity();
|
||||
char * setPartition();
|
||||
char * makeActive();
|
||||
char * setGeometry();
|
||||
ulong chs2long();
|
||||
char * nameID();
|
||||
int printIDs();
|
||||
|
||||
main(argc,argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
char *cmdp; /* points to command word */
|
||||
char *argp; /* points to command args */
|
||||
|
||||
/* check command line args (device name) */
|
||||
if (argc != 2) {
|
||||
usage(argv[0]); /* See s-sysname.c */
|
||||
exit(1);
|
||||
}
|
||||
devname = argv[1];
|
||||
|
||||
/* Should we prompt? */
|
||||
prompt = (isatty(fileno(stdin))) ? PROMPT_STRING : (char *) 0;
|
||||
|
||||
/* Print version name. */
|
||||
fputs(versionString, stderr);
|
||||
|
||||
/* get disk parameters */
|
||||
getGeometry(devname,&cyls,&heads,§ors);
|
||||
|
||||
/* Get the boot block. */
|
||||
if (getBBlk(devname, buffer) < 0)
|
||||
fprintf(stderr,"%s: read failed\n", devname);
|
||||
checkValidity();
|
||||
|
||||
if (prompt) fprintf(stderr,"For help, enter: '?'\n");
|
||||
|
||||
|
||||
/* Read and process commands a line at a time. */
|
||||
while (1) {
|
||||
if (prompt) fputs(prompt,stdout);
|
||||
if (! fgets(cmdline, MAX_LINE, stdin)) break;
|
||||
|
||||
/* Find beginning of command word */
|
||||
cmdp = cmdline;
|
||||
while (isspace(*cmdp)) cmdp++;
|
||||
|
||||
/* find beginning of args */
|
||||
argp = cmdp;
|
||||
while (*argp && !isspace(*argp)) argp++;
|
||||
while (isspace(*argp) || *argp=='=') argp++;
|
||||
|
||||
switch (*cmdp) {
|
||||
|
||||
case '\0': /* blank line */
|
||||
case '#': /* line comment */
|
||||
break;
|
||||
|
||||
case '?': case 'h': case 'H':
|
||||
help();
|
||||
break;
|
||||
|
||||
case '1': /* set partition entry */
|
||||
case '2': case '3': case '4':
|
||||
argp = setPartition(cmdp, argp);
|
||||
if (argp) { /* arg list error */
|
||||
fprintf(stderr,BadArg,argp);
|
||||
fprintf(stderr,h_1);
|
||||
fprintf(stderr,h_2);
|
||||
break;
|
||||
}
|
||||
bufmod = 1;
|
||||
break;
|
||||
|
||||
case 'a': case 'A': /* activate partition */
|
||||
argp = makeActive(argp);
|
||||
if (argp) {
|
||||
fprintf(stderr,BadArg,argp);
|
||||
fprintf(stderr,h_a);
|
||||
break;
|
||||
}
|
||||
bufmod = 1;
|
||||
break;
|
||||
|
||||
case 'g': case 'G': /* set disk parameters (Geometry) */
|
||||
argp = setGeometry(argp);
|
||||
if (argp) { /* arg list error */
|
||||
fprintf(stderr,BadArg,argp);
|
||||
fprintf(stderr,h_g);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'i': case 'I': /* List known ID numbers */
|
||||
printIDs();
|
||||
break;
|
||||
|
||||
case 'l': case 'L': /* List the partition table */
|
||||
listPTable();
|
||||
break;
|
||||
|
||||
case 'q': case 'Q': /* Quit */
|
||||
if (bufmod && (cmdp[1] != '!')) {
|
||||
fprintf(stderr,"\007%s%s\n", WarnNotSaved,
|
||||
"Use 'wq' or 'q!' (enter ? for help).");
|
||||
break;
|
||||
}
|
||||
exit(0);
|
||||
/*NOTREACHED*/
|
||||
|
||||
case 'r': case 'R': /* read from device or file */
|
||||
if (sscanf(argp,"%80s",filename) == 1) {
|
||||
/* Arg specified, read from filename */
|
||||
if (getFile(filename, buffer, SECSIZE) < 0)
|
||||
fprintf(stderr,"%s: read failed\n", filename);
|
||||
bufmod = 1;
|
||||
} else {
|
||||
/* No arg, use device. */
|
||||
if (getBBlk(devname, buffer) < 0)
|
||||
fprintf(stderr,"%s: read failed\n", devname);
|
||||
bufmod = 0;
|
||||
}
|
||||
checkValidity();
|
||||
break;
|
||||
|
||||
case 'w': case 'W': /* Write to file or device */
|
||||
if (sscanf(argp,"%80s",filename) == 1) {
|
||||
/* Arg specified, write to filename */
|
||||
if (putFile(filename, buffer, SECSIZE) < 0)
|
||||
fprintf(stderr, "%s: write failed\n", filename);
|
||||
} else { /* No arg, use device. */
|
||||
if (putBBlk(devname, buffer) < 0)
|
||||
fprintf(stderr, "%s: write failed\n", devname);
|
||||
bufmod = 0;
|
||||
}
|
||||
if (cmdp[1] == 'q' || cmdp[1] == 'Q') exit(0);
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr,"'%c': unrecognized. Enter '?' for help.\n", *cmdp);
|
||||
break;
|
||||
|
||||
} /* switch */
|
||||
} /* while */
|
||||
if (bufmod) fprintf(stderr, WarnNotSaved);
|
||||
exit(0);
|
||||
} /* main */
|
||||
|
||||
|
||||
/* Check for valid boot block (magic number in last two bytes).
|
||||
* Also, check for presence of partition name table.
|
||||
*/
|
||||
void checkValidity()
|
||||
{
|
||||
/* Check the magic number. */
|
||||
if ((buffer[MAGIC_LOC] & 0xFF) != MAGIC_0 ||
|
||||
(buffer[MAGIC_LOC+1] & 0xFF) != MAGIC_1 ) {
|
||||
/* The boot sector is not valid -- Fix it. */
|
||||
buffer[MAGIC_LOC] = MAGIC_0;
|
||||
buffer[MAGIC_LOC+1] = MAGIC_1;
|
||||
bufmod = 1;
|
||||
fprintf(stderr,
|
||||
"\n\tWarning: The boot sector has an invalid magic number.\n\
|
||||
\tThe magic number has been fixed, but the other contents\n\
|
||||
\tare probably garbage. Initialize using the command:\n\
|
||||
\t\tR boot-program-file (i.e. bootmenu.bin)\n\
|
||||
\tthen set each partition entry if necessary.\n");
|
||||
}
|
||||
|
||||
/* Does it use a name table (for a boot menu)?
|
||||
* My boot program does, and can be identified by
|
||||
* finding my name in a particular (unused) area.
|
||||
*/
|
||||
useNTable = ( buffer[LOC_GWR] == (char)0x3A ); /* Saul */
|
||||
/* useNTable = !strcmp(&buffer[LOC_GWR], "Gordon W. Ross"); Saul */
|
||||
|
||||
}
|
||||
|
||||
char * setPartition(cmdp,argp) /* return string on error */
|
||||
char *cmdp,*argp;
|
||||
{
|
||||
struct part *pp; /* partition entry */
|
||||
char * np; /* name table pointer */
|
||||
char tmpname[20];
|
||||
char * newname = tmpname; /* name field */
|
||||
int index; /* partition index (0..3) */
|
||||
uint id; /* ID code (see syscodes.c) */
|
||||
uint first,last; /* user supplied cylinders */
|
||||
uint c,h,s; /* working cyl,head,sect, */
|
||||
int i; /* returned by sscanf */
|
||||
ulong lsbeg, lslen; /* logical begin, length */
|
||||
|
||||
/* Value check the index */
|
||||
index = *cmdp - '1';
|
||||
if (index < 0 || index > 3)
|
||||
return("index");
|
||||
pp = (struct part *) &buffer[LOC_PT + index * 16];
|
||||
np = &buffer[LOC_NT + index * NT_ENTRY_SIZE]; /* Saul */
|
||||
/* np = &buffer[LOC_NT + index * 8]; Saul */
|
||||
|
||||
/* Read System ID */
|
||||
if ((i=sscanf(argp,"%d%d%d%s", &id, &first, &last, newname)) < 1)
|
||||
return("id");
|
||||
|
||||
/* If ID==0, just clear out the entry and return. */
|
||||
if (id == 0) {
|
||||
strncpy( (char *) pp, "", 16);
|
||||
if (useNTable) strncpy( np, "", NT_ENTRY_SIZE); /* Saul */
|
||||
/* if (useNTable) strncpy( np, "", 8); Saul */
|
||||
return((char *)0);
|
||||
}
|
||||
|
||||
/* Read first and last cylinder */
|
||||
if (i < 3)
|
||||
return("first last (missing)");
|
||||
|
||||
/* Reasonable start,end cylinder numbers? */
|
||||
if (first > last) return("first > last");
|
||||
if (first > 1023) return("first > 1023");
|
||||
if (last >= cyls) return("last >= cyls");
|
||||
|
||||
/* Get (optional) system name. */
|
||||
if (i == 3) { /* no name given, use default */
|
||||
newname = nameID(id);
|
||||
}
|
||||
else useNTable = 1;
|
||||
|
||||
/* Set the ID and name. */
|
||||
pp->sysid = id;
|
||||
if (useNTable) {
|
||||
strncpy(np, newname, NT_ENTRY_SIZE); /* Saul */
|
||||
/* strncpy(np, newname, 8); Saul */
|
||||
/* strcpy(&buffer[LOC_GWR], "Gordon W. Ross"); Saul */
|
||||
buffer[LOC_GWR] = (char)0x3A; /* Saul */
|
||||
}
|
||||
|
||||
/* set beginning c,h,s */
|
||||
c = first;
|
||||
/* if c == 0, head == 1 (reserve track 0) */
|
||||
h = (first) ? 0 : 1;
|
||||
s = 1;
|
||||
pp->b_cyl = c & 0xFF;
|
||||
pp->b_head = h;
|
||||
pp->b_sec = s | ((c >> 2) & 0xC0);
|
||||
/* Set the logical sector begin field */
|
||||
lsbeg = lslen = chs2long(c,h,s); /* using lslen as temp. */
|
||||
/* pp->lsBeg[0] = lslen & 0xff; lslen >>= 8;
|
||||
pp->lsBeg[1] = lslen & 0xff; lslen >>= 8;
|
||||
pp->lsBeg[2] = lslen & 0xff; lslen >>= 8;
|
||||
pp->lsBeg[3] = lslen & 0xff; lslen >>= 8; Saul */
|
||||
pp->lsBeg = lslen; /* Saul */
|
||||
|
||||
/* set ending c,h,s (last may be larger than 1023) */
|
||||
c = (last>1023) ? 1023 : last; /* limit c to 1023 */
|
||||
h = heads - 1; s = sectors;
|
||||
pp->e_cyl = c & 0xFF;
|
||||
pp->e_head = h;
|
||||
pp->e_sec = s | ((c >> 2) & 0xC0);
|
||||
/* Set the logical sector length field (using REAL end cylinder) */
|
||||
lslen = chs2long(last,h,s) + 1 - lsbeg;
|
||||
/* pp->lsLen[0] = lslen & 0xff; lslen >>= 8;
|
||||
pp->lsLen[1] = lslen & 0xff; lslen >>= 8;
|
||||
pp->lsLen[2] = lslen & 0xff; lslen >>= 8;
|
||||
pp->lsLen[3] = lslen & 0xff; lslen >>= 8; Saul */
|
||||
pp->lsLen = lslen; /* Saul */
|
||||
|
||||
return((char *)0); /* success */
|
||||
} /* setPartition() */
|
||||
|
||||
char * makeActive(argp) /* return error string or zero */
|
||||
char *argp;
|
||||
{
|
||||
struct part *pp; /* partition entry */
|
||||
int i,act1,act2,act3,act4,act5; /* which one becomes active */
|
||||
|
||||
act1=0;
|
||||
act2=0;
|
||||
act3=0;
|
||||
act4=0;
|
||||
if ((i=sscanf(argp,"%d%d%d%d%d", &act1, &act2, &act3, &act4, &act5)) < 1)
|
||||
return("missing partition number");
|
||||
if ( i > 4)
|
||||
return("at most four partition numbers");
|
||||
act1--; /* make it zero-origin */
|
||||
act2--; /* make it zero-origin */
|
||||
act3--; /* make it zero-origin */
|
||||
act4--; /* make it zero-origin */
|
||||
|
||||
i=0; pp = (struct part *) &buffer[LOC_PT];
|
||||
while (i<4) {
|
||||
if (pp->sysid == 0 && (i == act1|| i == act2 || i == act3 || i == act4)) {
|
||||
sprintf(s, "partition %d empty", i+1);
|
||||
return(s);
|
||||
}
|
||||
i++; pp++;
|
||||
}
|
||||
i=0; pp -= 4;
|
||||
while (i<4) {
|
||||
if (i == act1|| i == act2 || i == act3 || i == act4)
|
||||
pp->active = 0x80;
|
||||
else
|
||||
pp->active = 0;
|
||||
i++; pp++;
|
||||
}
|
||||
return((char *)0);
|
||||
}
|
||||
|
||||
char * setGeometry(argp) /* return string on error */
|
||||
char *argp;
|
||||
{
|
||||
int c,h,s;
|
||||
|
||||
if (sscanf(argp,"%d%d%d", &c, &h, &s) < 3)
|
||||
return("(missing)");
|
||||
if (c<1) return("cyls");
|
||||
if (h<1) return("heads");
|
||||
if (s<1) return("sectors");
|
||||
cyls=c; heads=h; sectors=s;
|
||||
return((char *)0);
|
||||
}
|
||||
|
||||
listPTable() /* print out partition table */
|
||||
{
|
||||
struct part * pp; /* partition table entry */
|
||||
char *name;
|
||||
int i; /* partition number */
|
||||
/* int numActive=0; /* active partition [1-4], 0==none */
|
||||
char Active[20]; /* active partitions [1-4], 0==none */
|
||||
uint pbc,pbh,pbs; /* physical beginning c,h,s */
|
||||
uint pec,peh,pes; /* physical ending c,h,s */
|
||||
uint lbc,lbh,lbs; /* logical beginning c,h,s */
|
||||
uint lec,leh,les; /* logical ending c,h,s */
|
||||
ulong lsbeg,lslen; /* logical sectors: begin, length */
|
||||
|
||||
strcpy(Active, "active:");
|
||||
printf("# Partition table on device: %s\n", devname);
|
||||
printf("geometry %d %d %d (cyls heads sectors)\n",
|
||||
cyls, heads, sectors);
|
||||
/* printf("# ID First(cyl) Last(cyl) Name "); Saul */
|
||||
printf("# ID First(cyl) Last(cyl) Name "); /* Saul */
|
||||
printf("# start, length (sectors)\n");
|
||||
|
||||
for (i=0; i<4; i++) {
|
||||
pp = (struct part *) &buffer[LOC_PT + i * 16];
|
||||
|
||||
if (pp->active) {
|
||||
char s[3];
|
||||
sprintf(s, " %d", i+1);
|
||||
strcat(Active,s);
|
||||
if (pp->active != 0x80)
|
||||
fprintf(stderr, "Warning: Partition %d is active, with the illegal activity byte %d.\nCorrect with the \"A\" command.\n", i+1, pp->active);
|
||||
/* if(numActive)
|
||||
fprintf(stderr,"Error: multiple active partitions.\n");
|
||||
else numActive = i+1; */
|
||||
}
|
||||
|
||||
/* physical beginning c,h,s */
|
||||
pbc = pp->b_cyl & 0xff | (pp->b_sec << 2) & 0x300;
|
||||
pbh = pp->b_head;
|
||||
pbs = pp->b_sec & 0x3F;
|
||||
|
||||
/* physical ending c,h,s */
|
||||
pec = pp->e_cyl & 0xff | (pp->e_sec << 2) & 0x300;
|
||||
peh = pp->e_head;
|
||||
pes = pp->e_sec & 0x3F;
|
||||
|
||||
/* compute logical beginning (c,h,s) */
|
||||
/* lsbeg = ((((((pp->lsBeg[3] ) << 8 )
|
||||
| pp->lsBeg[2] ) << 8 )
|
||||
| pp->lsBeg[1] ) << 8 )
|
||||
| pp->lsBeg[0] ; Saul */
|
||||
lsbeg = pp->lsBeg; /* Saul */
|
||||
long2chs(lsbeg, &lbc, &lbh, &lbs);
|
||||
/* compute logical ending (c,h,s) */
|
||||
/* lslen = ((((((pp->lsLen[3]) << 8 )
|
||||
| pp->lsLen[2]) << 8 )
|
||||
| pp->lsLen[1]) << 8 )
|
||||
| pp->lsLen[0] ; Saul */
|
||||
lslen = pp->lsLen; /* Saul*/
|
||||
/* keep beginning <= end ... */
|
||||
if (lslen > 0) long2chs(lsbeg+lslen-1, &lec, &leh, &les);
|
||||
else long2chs(lsbeg, &lec, &leh, &les);
|
||||
|
||||
if (useNTable)
|
||||
name = &buffer[LOC_NT + i * NT_ENTRY_SIZE ]; /* Saul */
|
||||
/* name = &buffer[LOC_NT + i * 8]; Saul */
|
||||
else
|
||||
name = nameID((uint) pp->sysid);
|
||||
|
||||
/* show physical begin, logical end (works for cyl>1023) */
|
||||
/* # ID First(cyl) Last(cyl) Name... # ... */
|
||||
/* printf("%d %3d %4d %4d %-8.8s # %ld, %ld\n", Saul */
|
||||
printf("%d %3d %4d %4d %-5.5s # %ld, %ld\n", /* Saul */
|
||||
i+1, pp->sysid, pbc, lec, name, lsbeg, lslen );
|
||||
|
||||
/* That's all, for an empty partition. */
|
||||
if (pp->sysid == 0) continue;
|
||||
|
||||
/*
|
||||
* Now do some consistency checks...
|
||||
*/
|
||||
|
||||
/* Same physical / logical beginning? */
|
||||
if (pbc != lbc || pbh != lbh || pbs != lbs ) {
|
||||
printf("# note: first(%d): ", i+1);
|
||||
printf("phys=(%d,%d,%d) ", pbc, pbh, pbs);
|
||||
printf("logical=(%d,%d,%d)\n",lbc, lbh, lbs);
|
||||
}
|
||||
/* Same physical / logical ending? */
|
||||
if (pec != lec || peh != leh || pes != les ) {
|
||||
printf("# note: last(%d): ", i+1);
|
||||
printf("phys=(%d,%d,%d) ", pec, peh, pes);
|
||||
printf("logical=(%d,%d,%d)\n",lec, leh, les);
|
||||
}
|
||||
|
||||
/* Beginning on cylinder boundary? */
|
||||
if (pbc == 0) { /* exception: start on head 1 */
|
||||
if (pbh != 1 || pbs != 1) {
|
||||
printf("# note: first(%i): ", i+1);
|
||||
printf("phys=(%d,%d,%d) ", pbc, pbh, pbs);
|
||||
printf("should be (%d,1,1)\n", pbc);
|
||||
}
|
||||
} else { /* not on cyl 0 */
|
||||
if (pbh != 0 || pbs != 1) {
|
||||
printf("# note: first(%i): ", i+1);
|
||||
printf("phys=(%d,%d,%d) ", pbc, pbh, pbs);
|
||||
printf("should be (%d,0,1)\n", pbc);
|
||||
}
|
||||
}
|
||||
|
||||
/* Ending on cylinder boundary? */
|
||||
if (peh != (heads-1) || pes != sectors) {
|
||||
printf("# note: last(%i): ", i+1);
|
||||
printf("phys=(%d,%d,%d) ", pec, peh, pes);
|
||||
printf("should be (%d,%d,%d)\n",
|
||||
pec, heads-1, sectors);
|
||||
}
|
||||
|
||||
} /* for */
|
||||
if ( !Active[7] ) /* No active partitions */
|
||||
strcat(Active, " 0 (none)");
|
||||
strcat(Active, "\n");
|
||||
printf(Active);
|
||||
/* printf("active: %d %s\n", numActive,
|
||||
(numActive) ? "" : "(none)"); */
|
||||
} /* listPTable() */
|
||||
|
||||
ulong chs2long(c,h,s)
|
||||
uint c,h,s;
|
||||
{
|
||||
ulong l;
|
||||
if (s<1) s=1;
|
||||
l = c; l *= heads;
|
||||
l += h; l *= sectors;
|
||||
l += (s - 1);
|
||||
return(l);
|
||||
}
|
||||
|
||||
long2chs(ls, c, h, s) /* convert logical sec-num to c,h,s */
|
||||
ulong ls; /* Logical Sector number */
|
||||
uint *c,*h,*s; /* cyl, head, sector */
|
||||
{
|
||||
int spc = heads * sectors;
|
||||
*c = ls / spc;
|
||||
ls = ls % spc;
|
||||
*h = ls / sectors;
|
||||
*s = ls % sectors + 1; /* sectors count from 1 */
|
||||
}
|
||||
|
||||
char * nameID(n)
|
||||
unsigned int n;
|
||||
{
|
||||
struct intString *is;
|
||||
|
||||
is = sysCodes;
|
||||
while (is->i) {
|
||||
if (is->i == n) return(is->s);
|
||||
is++;
|
||||
}
|
||||
if (!n) return(is->s);
|
||||
return("unknown");
|
||||
}
|
||||
|
||||
int printIDs() /* print the known system IDs */
|
||||
{
|
||||
struct intString * is = sysCodes;
|
||||
|
||||
/* This might need to do more processing eventually, i.e.
|
||||
* if (prompt) { ... do more processing ... }
|
||||
*/
|
||||
printf("_ID_\t__Name__ ____Description____\n");
|
||||
while (is->i) {
|
||||
printf("%3d\t%s\n", is->i, is->s);
|
||||
is++;
|
||||
}
|
||||
}
|
||||
43
Linux-0.98/INSTALL/pfdisk/SYSCODES.C
Normal file
43
Linux-0.98/INSTALL/pfdisk/SYSCODES.C
Normal file
@@ -0,0 +1,43 @@
|
||||
/* This file holds all knowledge of partition ID codes.
|
||||
* Thanks to leendert@cs.vu.nl (Leendert van Doorn) for
|
||||
* collecting most of this information.
|
||||
*/
|
||||
|
||||
#define extern
|
||||
#include "syscodes.h"
|
||||
#undef extern
|
||||
|
||||
/* Note that my boot program menu can only use the first 8 characters
|
||||
* of these names. The colon in the nineth position shows where the
|
||||
* first truncated char is. (There's not much room in the bootblock!)
|
||||
* changed sysCodes[] below, adding SIZE tms */
|
||||
struct intString sysCodes[SIZE] = {
|
||||
{ 0x01, "DOS12 :12-bit FAT" },
|
||||
{ 0x02, "XENIX :root" },
|
||||
{ 0x03, "XENIX :usr" },
|
||||
{ 0x04, "DOS16 :16-bit FAT" },
|
||||
{ 0x05, "DOSex :DOS 3.3 extended volume" },
|
||||
{ 0x06, "DOSbi :DOS 4.0 large volume" },
|
||||
{ 0x07, "OS/2 :OS/2 (or QNX or Adv. UNIX...)" },
|
||||
{ 0x08, "AIX :file system" },
|
||||
{ 0x09, "AIXbt:boot partition" },
|
||||
|
||||
{ 0x10, "OPUS :?" },
|
||||
{ 0x40, "VENIX :Venix 80286" },
|
||||
{ 0x51, "NOVEL :?" },
|
||||
{ 0x52, "CPM :?" },
|
||||
{ 0x63, "UNIX :System V/386" },
|
||||
{ 0x64, "NOVEL :?" },
|
||||
{ 0x75, "PC/IX :?" },
|
||||
{ 0x80, "Minix :Minix (ver. 1.4a and earlier)" },
|
||||
{ 0x81, "Minix :Minix (ver. 1.4b and later)" },
|
||||
{ 0x93, "Ameba :Amoeba file system" },
|
||||
{ 0x94, "Ameba :Amoeba bad block table?" },
|
||||
{ 0xDB, "C.DOS :Concurrent DOS" },
|
||||
|
||||
/* { 0xF2, "DOS-2nd :DOS 3.3+ second partition" }, */
|
||||
/* { 0xFF, "BAD-TRK :Bad track table?" }, */
|
||||
|
||||
/* Make sure this is last! */
|
||||
{ 0, "empty" }
|
||||
};
|
||||
4
Linux-0.98/INSTALL/pfdisk/SYSCODES.H
Normal file
4
Linux-0.98/INSTALL/pfdisk/SYSCODES.H
Normal file
@@ -0,0 +1,4 @@
|
||||
#define SIZE 40 /* added tms */
|
||||
struct intString { unsigned int i; char * s; };
|
||||
extern struct intString sysCodes[SIZE]; /* was sysCodes[] modified tms */
|
||||
|
||||
22
Linux-0.98/INSTALL/pfdisk/SYSDEP.H
Normal file
22
Linux-0.98/INSTALL/pfdisk/SYSDEP.H
Normal file
@@ -0,0 +1,22 @@
|
||||
/* communicate declarations from the files: s_*.c */
|
||||
|
||||
#define SECSIZE 0x200
|
||||
|
||||
extern int usage(); /* print a usage message */
|
||||
/* (char *progname) */
|
||||
|
||||
extern void getGeometry(); /* determine disk parameters */
|
||||
/* (char *dev, uint *cyls, uint *heads, uint *sectors) */
|
||||
|
||||
extern int getFile(); /* open, read, close, return(num-read) */
|
||||
/* (char *name, char *buf, int len) */
|
||||
|
||||
extern int putFile(); /* open, write, close, return(num-writen) */
|
||||
/* (char *name, char *buf, int len) */
|
||||
|
||||
extern int getBBlk(); /* open, read, close, return(num-read) */
|
||||
/* (char *dev, char *buf) */
|
||||
|
||||
extern int putBBlk(); /* open, write, close, return(num-writen) */
|
||||
/* (char *dev, char *buf) */
|
||||
|
||||
163
Linux-0.98/INSTALL/pfdisk/S_MSDOS.C
Normal file
163
Linux-0.98/INSTALL/pfdisk/S_MSDOS.C
Normal file
@@ -0,0 +1,163 @@
|
||||
/* This file contains system-specific functions for MS-DOS.
|
||||
* The program pfdisk.c calls these routines.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <dos.h>
|
||||
|
||||
#define extern
|
||||
#include "sysdep.h"
|
||||
#undef extern
|
||||
|
||||
int usage(prog) /* print a usage message */
|
||||
char *prog; /* program name */
|
||||
{
|
||||
fprintf(stderr,"Usage: %s <disk>\n", prog);
|
||||
fprintf(stderr,"\twhere <disk> is a digit [0-9]\n");
|
||||
}
|
||||
|
||||
void getGeometry(name, c, h, s)
|
||||
char *name; /* device name */
|
||||
unsigned *c,*h,*s; /* cyls, heads, sectors */
|
||||
{
|
||||
int dev; /* hard disk number */
|
||||
union REGS regs;
|
||||
struct SREGS sregs;
|
||||
|
||||
if (name[0] < '0' ||
|
||||
name[0] > '9' ||
|
||||
name[1] != 0 )
|
||||
{
|
||||
fprintf(stderr,"%s: device name must be a digit\n", name);
|
||||
return;
|
||||
}
|
||||
dev = (name[0] - '0');
|
||||
|
||||
regs.h.ah = 8; /* get param. */
|
||||
regs.h.dl = dev | 0x80;
|
||||
|
||||
int86x(0x13,®s,®s,&sregs);
|
||||
|
||||
/* Are that many drives responding? */
|
||||
if (regs.h.dl <= dev ) {
|
||||
fprintf(stderr,"%s: drive not found\n", name);
|
||||
return;
|
||||
}
|
||||
if (regs.x.cflag) {
|
||||
fprintf(stderr,"%s: can't get disk parameters\n", name);
|
||||
return;
|
||||
}
|
||||
*c = ((((int) regs.h.cl << 2) & 0x300) | regs.h.ch) + 1;
|
||||
*h = regs.h.dh + 1;
|
||||
*s = regs.h.cl & 0x3F;
|
||||
}
|
||||
|
||||
int getFile(name, buf, len) /* read file into buffer */
|
||||
char *name, *buf;
|
||||
int len;
|
||||
{ /* (open, read, close) */
|
||||
int devfd, retval;
|
||||
|
||||
devfd = open(name, O_RDONLY|O_BINARY, 0);
|
||||
if (devfd < 0) {
|
||||
fprintf(stderr,"%s: can't open for reading\n", name);
|
||||
return(devfd);
|
||||
}
|
||||
retval = read(devfd, buf, len);
|
||||
if (retval < 0)
|
||||
fprintf(stderr,"%s: read failed\n", name);
|
||||
close(devfd);
|
||||
return(retval);
|
||||
}
|
||||
|
||||
int putFile(name, buf, len) /* write buffer to file */
|
||||
char *name, *buf;
|
||||
int len;
|
||||
{ /* (open, write, close) */
|
||||
int devfd, retval;
|
||||
|
||||
devfd = open(name,
|
||||
O_WRONLY|O_CREAT|O_BINARY,
|
||||
S_IREAD|S_IWRITE ); /* stupid DOS... */
|
||||
if (devfd < 0) {
|
||||
fprintf(stderr,"%s: can't open for writing\n", name);
|
||||
return(devfd);
|
||||
}
|
||||
retval = write(devfd, buf, len);
|
||||
if (retval < 0)
|
||||
fprintf(stderr,"%s: write failed\n", name);
|
||||
close(devfd);
|
||||
return(retval);
|
||||
}
|
||||
|
||||
int getBBlk(name, buf) /* read boot block into buffer */
|
||||
char *name, *buf;
|
||||
{ /* BIOS absolute disk read */
|
||||
int dev;
|
||||
union REGS regs;
|
||||
struct SREGS sregs;
|
||||
|
||||
if (name[0] < '0' ||
|
||||
name[0] > '9' ||
|
||||
name[1] != 0 )
|
||||
{
|
||||
fprintf(stderr,"%s: device name must be a digit\n",name);
|
||||
return(-1);
|
||||
}
|
||||
dev = (name[0] - '0');
|
||||
|
||||
segread(&sregs); /* get ds */
|
||||
sregs.es = sregs.ds; /* buffer address */
|
||||
regs.x.bx = (int) buf;
|
||||
|
||||
regs.h.ah = 2; /* read */
|
||||
regs.h.al = 1; /* sector count */
|
||||
regs.h.ch = 0; /* track */
|
||||
regs.h.cl = 1; /* start sector */
|
||||
regs.h.dh = 0; /* head */
|
||||
regs.h.dl = dev|0x80; /* drive */
|
||||
|
||||
int86x(0x13,®s,®s,&sregs);
|
||||
if (regs.x.cflag) {
|
||||
fprintf(stderr,"%s: read failed\n", name);
|
||||
return(-1);
|
||||
}
|
||||
return(SECSIZE);
|
||||
}
|
||||
|
||||
int putBBlk(name, buf) /* write buffer to boot block */
|
||||
char *name, *buf;
|
||||
{ /* BIOS absolute disk write */
|
||||
int dev;
|
||||
union REGS regs;
|
||||
struct SREGS sregs;
|
||||
|
||||
if (name[0] < '0' ||
|
||||
name[0] > '9' ||
|
||||
name[1] != 0 )
|
||||
{
|
||||
fprintf(stderr,"%s: device name must be a digit\n", name);
|
||||
return(-1);
|
||||
}
|
||||
dev = (name[0] - '0');
|
||||
|
||||
segread(&sregs); /* get ds */
|
||||
sregs.es = sregs.ds; /* buffer address */
|
||||
regs.x.bx = (int) buf;
|
||||
|
||||
regs.h.ah = 3; /* write */
|
||||
regs.h.al = 1; /* sector count */
|
||||
regs.h.ch = 0; /* track */
|
||||
regs.h.cl = 1; /* start sector */
|
||||
regs.h.dh = 0; /* head */
|
||||
regs.h.dl = dev|0x80; /* drive */
|
||||
|
||||
int86x(0x13,®s,®s,&sregs);
|
||||
if (regs.x.cflag) {
|
||||
fprintf(stderr,"%s: write failed\n",name);
|
||||
return(-1);
|
||||
}
|
||||
return(SECSIZE);
|
||||
}
|
||||
BIN
Linux-0.98/INSTALL/pfdisktc.zip
Normal file
BIN
Linux-0.98/INSTALL/pfdisktc.zip
Normal file
Binary file not shown.
182
Linux-0.98/INSTALL/rawrite.c
Normal file
182
Linux-0.98/INSTALL/rawrite.c
Normal file
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
rawrite.c Write a binary image to a 360K diskette.
|
||||
By Mark Becker
|
||||
|
||||
Usage:
|
||||
MS-DOS prompt> RAWRITE
|
||||
|
||||
And follow the prompts.
|
||||
|
||||
History
|
||||
-------
|
||||
|
||||
1.0 - Initial release
|
||||
1.1 - Beta test (fixing bugs) 4/5/91
|
||||
Some BIOS's don't like full-track writes.
|
||||
1.101 - Last beta release. 4/8/91
|
||||
Fixed BIOS full-track write by only
|
||||
writing 3 sectors at a time.
|
||||
1.2 - Final code and documentation clean-ups. 4/9/91
|
||||
*/
|
||||
#include <alloc.h>
|
||||
#include <bios.h>
|
||||
#include <ctype.h>
|
||||
#include <dir.h>
|
||||
#include <dos.h>
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define FALSE 0
|
||||
#define TRUE (!FALSE)
|
||||
|
||||
#define SECTORSIZE 512
|
||||
|
||||
#define RESET 0
|
||||
#define LAST 1
|
||||
#define READ 2
|
||||
#define WRITE 3
|
||||
#define VERIFY 4
|
||||
#define FORMAT 5
|
||||
|
||||
int done;
|
||||
|
||||
/*
|
||||
Catch ^C and ^Break.
|
||||
*/
|
||||
int handler(void)
|
||||
{
|
||||
done = TRUE;
|
||||
return(0);
|
||||
}
|
||||
void msg(char (*s))
|
||||
{
|
||||
fprintf(stderr, "%s\n", s);
|
||||
_exit(1);
|
||||
}
|
||||
/*
|
||||
Identify the error code with a real error message.
|
||||
*/
|
||||
void Error(int (status))
|
||||
{
|
||||
switch (status) {
|
||||
case 0x00: msg("Operation Successful"); break;
|
||||
case 0x01: msg("Bad command"); break;
|
||||
case 0x02: msg("Address mark not found"); break;
|
||||
case 0x03: msg("Attempt to write on write-protected disk"); break;
|
||||
case 0x04: msg("Sector not found"); break;
|
||||
case 0x05: msg("Reset failed (hard disk)"); break;
|
||||
case 0x06: msg("Disk changed since last operation"); break;
|
||||
case 0x07: msg("Drive parameter activity failed"); break;
|
||||
case 0x08: msg("DMA overrun"); break;
|
||||
case 0x09: msg("Attempt to DMA across 64K boundary"); break;
|
||||
case 0x0A: msg("Bad sector detected"); break;
|
||||
case 0x0B: msg("Bad track detected"); break;
|
||||
case 0x0C: msg("Unsupported track"); break;
|
||||
case 0x10: msg("Bad CRC/ECC on disk read"); break;
|
||||
case 0x11: msg("CRC/ECC corrected data error"); break;
|
||||
case 0x20: msg("Controller has failed"); break;
|
||||
case 0x40: msg("Seek operation failed"); break;
|
||||
case 0x80: msg("Attachment failed to respond"); break;
|
||||
case 0xAA: msg("Drive not ready (hard disk only"); break;
|
||||
case 0xBB: msg("Undefined error occurred (hard disk only)"); break;
|
||||
case 0xCC: msg("Write fault occurred"); break;
|
||||
case 0xE0: msg("Status error"); break;
|
||||
case 0xFF: msg("Sense operation failed"); break;
|
||||
}
|
||||
_exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
Identify what kind of diskette is installed in the specified drive.
|
||||
Return the number of sectors per track assumed as follows:
|
||||
9 - 360 K and 720 K 5.25".
|
||||
15 - 1.2 M HD 5.25".
|
||||
18 - 1.44 M 3.5".
|
||||
*/
|
||||
int nsects(int (drive))
|
||||
{
|
||||
static int nsect[] = {18, 15, 9};
|
||||
|
||||
char *buffer;
|
||||
int i, status;
|
||||
/*
|
||||
Read sector 1, head 0, track 0 to get the BIOS running.
|
||||
*/
|
||||
buffer = (char *)malloc(SECTORSIZE);
|
||||
biosdisk(RESET, drive, 0, 0, 0, 0, buffer);
|
||||
status = biosdisk(READ, drive, 0, 10, 1, 1, buffer);
|
||||
if (status == 0x06) /* Door signal change? */
|
||||
status = biosdisk(READ, drive, 0, 0, 1, 1, buffer);
|
||||
|
||||
for (i=0; i < sizeof(nsect)/sizeof(int); ++i) {
|
||||
biosdisk(RESET, drive, 0, 0, 0, 0, buffer);
|
||||
status = biosdisk(READ, drive, 0, 0, nsect[i], 1, buffer);
|
||||
if (status == 0x06)
|
||||
status = biosdisk(READ, drive, 0, 0, nsect[i], 1, buffer);
|
||||
if (status == 0x00) break;
|
||||
}
|
||||
if (i == sizeof(nsect)/sizeof(int)) {
|
||||
msg("Can't figure out how many sectors/track for this diskette.");
|
||||
}
|
||||
free(buffer);
|
||||
return(nsect[i]);
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
char fname[MAXPATH];
|
||||
char *buffer, *pbuf;
|
||||
int count, fdin, drive, head, track, status, spt, buflength, ns;
|
||||
|
||||
puts("RaWrite 1.2 - Write disk file to raw floppy diskette\n");
|
||||
ctrlbrk(handler);
|
||||
printf("Enter source file name: ");
|
||||
scanf("%s", fname);
|
||||
_fmode = O_BINARY;
|
||||
if ((fdin = open(fname, O_RDONLY)) <= 0) {
|
||||
perror(fname);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
printf("Enter destination drive: ");
|
||||
scanf("%s", fname);
|
||||
drive = fname[0];
|
||||
drive = (islower(drive) ? toupper(drive) : drive) - 'A';
|
||||
printf("Please insert a formatted diskette into ");
|
||||
printf("drive %c: and press -ENTER- :", drive + 'A');
|
||||
while (bioskey(1) == 0) ; /* Wait... */
|
||||
if ((bioskey(0) & 0x7F) == 3) exit(1); /* Check for ^C */
|
||||
putchar('\n');
|
||||
done = FALSE;
|
||||
/*
|
||||
* Determine number of sectors per track and allocate buffers.
|
||||
*/
|
||||
spt = nsects(drive);
|
||||
buflength = spt * SECTORSIZE;
|
||||
buffer = (char *)malloc(buflength);
|
||||
printf("Number of sectors per track for this disk is %d\n", spt);
|
||||
printf("Writing image to drive %c:. Press ^C to abort.\n", drive+'A');
|
||||
/*
|
||||
* Start writing data to diskette until there is no more data to write.
|
||||
*/
|
||||
head = track = 0;
|
||||
while ((count = read(fdin, buffer, buflength)) > 0 && !done) {
|
||||
pbuf = buffer;
|
||||
for (ns = 1; count > 0 && !done; ns+=3) {
|
||||
printf("Track: %02d Head: %2d Sector: %2d\r", track, head, ns);
|
||||
status = biosdisk(WRITE, drive, head, track, ns, 3, pbuf);
|
||||
|
||||
if (status != 0) Error(status);
|
||||
|
||||
count -= (3*SECTORSIZE);
|
||||
pbuf += (3*SECTORSIZE);
|
||||
}
|
||||
if ((head = (head + 1) & 1) == 0) ++track;
|
||||
}
|
||||
if (eof(fdin)) {
|
||||
printf("\nDone.\n");
|
||||
biosdisk(2, drive, 0, 0, 1, 1, buffer); /* Retract head */
|
||||
}
|
||||
} /* end main */
|
||||
86
Linux-0.98/INSTALL/rawrite.doc
Normal file
86
Linux-0.98/INSTALL/rawrite.doc
Normal file
@@ -0,0 +1,86 @@
|
||||
RaWrite 1.2
|
||||
-----------
|
||||
|
||||
Purpose
|
||||
-------
|
||||
|
||||
Write a disk image file to a 360K floppy disk.
|
||||
|
||||
|
||||
Equipment/Software Requirements
|
||||
-------------------------------
|
||||
|
||||
PC/XT/AT with a floppy disk drive capable of reading and writing a 360K
|
||||
diskette.
|
||||
|
||||
This program uses generic low-level BIOS diskette read/write functions. It
|
||||
should be portable to nearly every PC in existance. PS/2's should be able
|
||||
to run RawWrite but this has not been tested.
|
||||
|
||||
|
||||
CAVEAT
|
||||
------
|
||||
|
||||
This program will write ANY disk file to a floppy, overwriting any previous
|
||||
information that may have been present. If you wish to re-use a diskette
|
||||
under MS-DOS thats been written to by RawWrite then the disk will need to be
|
||||
reformatted; all MS-DOS specific information will have been erased.
|
||||
|
||||
|
||||
How to Compile
|
||||
--------------
|
||||
|
||||
TCC rawrite.c
|
||||
|
||||
The source code is specific to Borland International's Turbo C 2.01 and has
|
||||
been tested in all memory models.
|
||||
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
C> RAWRITE
|
||||
|
||||
And follow the prompts. All arguments are case-insensitive.
|
||||
|
||||
A sample run is shown below. The disk file being written, in this example,
|
||||
is named DEMODISK and the destination - where the image is being written -
|
||||
is the B: drive.
|
||||
|
||||
This program may be aborted at any time by typing ^C.
|
||||
|
||||
|
||||
Sample Run
|
||||
----------
|
||||
|
||||
C> RAWRITE
|
||||
RaWrite 1.2 - Write disk file to raw floppy diskette
|
||||
|
||||
Enter source file name: DEMODISK
|
||||
Enter destination drive: B
|
||||
Please insert a formatted 360K diskette into drive B: and press -ENTER- :
|
||||
Writing image to drive B:
|
||||
|
||||
|
||||
Errors
|
||||
------
|
||||
|
||||
RaWrite attempts to determine if the diskette is a 360K, 720K, 1.2M, or
|
||||
1.44M diskette by reading specific sectors. If the inserted diskette is not
|
||||
one of the mentioned types, then RaWrite will abort with a short error
|
||||
message.
|
||||
|
||||
Errors such as write protect, door open, bad disk, bad sector, etc. cause a
|
||||
program abort with a short error message.
|
||||
|
||||
|
||||
History
|
||||
-------
|
||||
|
||||
1.0 - Initial release
|
||||
1.1 - Beta test (fixing bugs) 4/5/91
|
||||
Some BIOS's don't like full-track writes.
|
||||
1.101 - Last beta release. 4/8/91
|
||||
Fixed BIOS full-track write by only only
|
||||
writing 3 sectors at a time.
|
||||
1.2 - Final code and documentation clean-ups. 4/9/91
|
||||
Reference in New Issue
Block a user