PCjs Machines

Home of the original IBM PC emulator for browsers.

Logo

PC-SIG Diskette Library (Disk #3964)

[PCjs Machine "ibm5170"]

Waiting for machine "ibm5170" to load....

DOSMAX.DOC


================================================================================
       DOSMAX.EXE :  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
================================================================================

  DOSMAX.EXE is a device driver which will maximize the use of low memory
  by moving MS-DOS 3.1 and above system data to upper memory blocks provided
  by your upper memory manager.  It is not necessary to use any other
  programs to create upper memory data types like FILES, BUFFERS, FCBS,
  or LASTDRIV from Quarterdeck's QEMM386.  These data types are referred
  to as "sub-segments" in the rest of this document.

  In addition, if you are a DOS 5.0 or above user and are loading DOS high,
  then DOSMAX can prevent DOS from loading into the HMA and move the DOS
  kernel to an upper memory block.  This improves performance and allows
  programs which use the HMA more efficiently to utilize the HMA instead.
  Such programs include Microsoft WINDOWS and Quarterdeck's DESQVIEW.

  Version 2.0 now requires the device driver STOPMAX.SYS to prevent DOS from
  loading into the HMA (see STOPMAX.DOC).  The DOSMAX driver then moves
  the kernel into upper memory at the proper time.

  DOSMAX can also move a portion of COMMAND.COM into an upper memory block
  instead of the HMA.  This feature recovers space in low memory which is
  available when DOS is in the HMA.  Version 2.0 now requires the /C+ switch
  to enable this feature rather than /A0 to disable it.

  Support is automatically provided for Microsoft WINDOWS 3.x so that all
  FILES in your CONFIG.SYS can be loaded high.  Normally this would prevent
  WINDOWS from running, but the problem is circumvented.  Version 2.0 has
  changed the support algorithum significantly, see /W+ option below.

  Support is provided for:

    * moving all DOS's sub-segments types into upper memory
    * moving DOS's SYSTEM block (kernel) into upper memory (STOPMAX installed)
    * supporting WINDOWS start-up even if all FILES= are in upper memory
    * moving a portion of COMMAND.COM into high memory instead of the HMA
    * DOS Versions 3.1 - 3.31, DOS 4.x, DOS 5.x, and DOS 6.x (or better?)

  DOSMAX automatically moves all the data that can be moved dependent only
  upon the availability of upper memory.  It will automatically stop moving
  data when it determines that memory would be fragmented if the move were
  completed.

  Finally, a command line mode is provided to control Windows support, and
  check and report on the status of the high memory area reserved for
  COMMAND.COM.  Version 2.0 moves the Master Environment moving feature
  into a separate program, see ENVIMAX.DOC.

================================================================================

(Requirements)::

        * Requires MS-DOS Version 3.10 or better
        * Now supports DR-DOS 6.0

================================================================================

(Installation)::

        (CONFIG.SYS)::

        Installation of DOSMAX.EXE requires modifying the contents of
        your CONFIG.SYS file.

(Generic Configuration)::

        This configuration should work and be the most efficient in 95%
        of all configurations.  For a few real world examples see
        EXAMPLES.DOC

        DOS=HIGH[,UMB]                    (DOS 5.x or 6.x only)
        REM DEVICE=STOPMAX.SYS [options]  (Stops kernel from loading in HMA)
        DEVICE=(xms/umb memory manager)
        DEVICE=DOSMAX.EXE [options]       (DOSMAX loads high automatically)
        SHELL=SHELLMAX.COM COMMAND.COM /P
        BUFFERS=20
        FILES=40
        LASTDRIVE=Z

        For DESQView users, it is recommended that the DEVICE=STOPMAX.SYS is
        installed.  This enables DOSMAX's kernel moving feature.

        DOS 5.x and 6.x users should configure DOS to load high into the
        HMA.  The UMB parameter is optional, since both DOS 5.x and 6.x
        upper memory management and XMS upper memory blocks are supported.

        DOS=HIGH[,[UMB][NOUMB]] (Both DOS UMB's and XMS UMB's supported)

        Insert a DEVICE= line for DOSMAX.EXE in your config.sys.  Ver. 1.5
        of DOSMAX recommended that DOSMAX be loaded before the XMS and UMB
        memory manager, but DOSMAX should now be loaded after the XMS manager
        (DOSMAX will automatically load itself high if UMB's are available
        or you may use your memory manager's device loader).  Version 1.7
        provided another way to ensure that the DOS 5.0 or above kernel
        is moved into a UMB by DOSMAX.  The driver STOPMAX.SYS is inserted
        "before" the XMS manager and DOSMAX is inserted "after" the XMS
        manager (see STOPMAX.DOC).

        Version 2.0 now requires that STOPMAX.SYS is used to stop DOS from
        loading into the HMA, support for /B+,/I+ and /V+ have been removed
        from DOSMAX.EXE because these options caused confusion.

        Version 2.0 now requires /C+ to enable the upper memory support
        option for COMMAND.COM.  This option was provided by default in
        earlier versions and was disabled with /A0.  Normally you will
        want to use SHELLMAX.COM to load all of COMMAND.COM into upper
        memory (see SHELLMAX.DOC).  The /A0 option also caused confusion.

        REM DEVICE=STOPMAX.SYS [options]
        DEVICE=(Memory Manager)
        DEVICE=DOSMAX.EXE [/C:+][other options]

        One advantage of using DOSMAX.EXE, is that the STACKS=, BUFFERS=,
        FCBS=, FILES=, and LASTDRIVE= parameters may be configured normally.

        STACKS=9,256            (or =0,0 or default 9,128...etc...)
        BUFFERS=XX[,YY]         (XX = # of buffers, YY = lookahead cache)
        FCBS=XX,YY              (XX = # of FCBS, YY = # of protected FCBS)
        FILES=NN                (NN = # of system files)
        LASTDRIVE=Z             ( Z = Last reserved drive)

        Version 2.0 of DOSMAX now allows INSTALL=, you no longer have to
        remove these statements from your CONFIG.SYS.

        By default, DOSMAX.EXE Version 2.0 will not generate report messages
        for each successful operation or event, unless you enable the report
        with /R+.  You must also use /P+ to pause after this report.  Use
        /R+ and /P+ until you are satisfied with the configuration then
        remove these switches.

        DEVICE=DOSMAX.EXE /R+ /P+
        or DEVICE=DOSMAX.EXE /REPORT:+ /PAUSE:+

        (AUTOEXEC.BAT)::

        It is not necessary to modify the contents of AUTOEXEC.BAT, but
        since DOS data creators like FILES and BUFFERS are no longer
        required, it is recommended that these lines be removed

        REM BUFFERS=XX          (Remove FILE and BUFFER creator TSR's)
        REM FILES=NN

        (From the Command Line)::

        By default, DOSMAX.EXE, invoked from the command line, will generate
        a message for each successful operation or event.  The display will
        not pause in the command line mode unless the /P+ switch is used.
        After you are satisfied with the configuration and you want to disable
        the REPORT feature, use:

        DOSMAX.EXE /R-

        All switch options and possible messages for DOSMAX are detailed
        below:

(Loading DOSMAX High)::

        You may load DOSMAX high with your high memory loader, but DOSMAX
        will load itself high if upper memory is available.  To prevent
        DOSMAX from loading itself high, use /X- or load it before the
        memory manager is installed.

(Moving the DOS kernel into a UMB)::

        DOSMAX to move the DOS 5.0 or above kernel to a UMB, then DOS
        must not be in the HMA when DOSMAX loads.  If you desire to stop
        the kernel from moving into the HMA, then STOPMAX must be loaded
        before the xms/umb memory manager, so that the DOS kernel is not
        high when DOSMAX initializes.  If DOS is already in the HMA (not
        using STOPMAX), then Verision 2.0 now detects this condition and
        low memory is optimized correctly.

================================================================================

(Syntax)::

        The only thing to remember about syntax for the command line is
        that just about anything works.  What this means is that you
        should be able to type in the options on the command line the
        way they make sense to you.

        To illustrate this point, the following command line example
        is mutated several different ways.

        DEVICE=DOSMAX.EXE /H+ /R- /P- /A0
        DEVICE=DOSMAX.EXE -H+ -R- -P- -A0
        DEVICE=DOSMAX.EXE H R- P- A0
        DEVICE=DOSMAX.EXE HR-P-A
        DEVICE=DOSMAX.EXE -H+-R-P-A

        ... and so on.

        DOSMAX 1.9 and above adds optional full word syntax.  The new
        syntax looks like this:

        DEVICE=DOSMAX.EXE /ALLOWHI:+ /REPORT:- /PAUSE:- /AVAIL4A=0
        DEVICE=DOSMAX.EXE -ALLOWHI:+ -REPORT:- -PAUSE:- -AVAIL4A=0
        DEVICE=DOSMAX.EXE ALLOWHI REPORT:- PAUSE:- AVAIL4A=0
        DEVICE=DOSMAX.EXE ALLOWHIREPORT-PAUSE-AVAIL4A
        DEVICE=DOSMAX.EXE -ALLOWHI+-REPORT-PAUSE-AVAIL4A

        Obviously when using full words, it is easier to keep the words
        separated so that is clear to read.  An optional [:] or [=] may be
        used for switches (i.e. ALLOWHI:+ or AVAIL=0).  These optional
        delimiters are used interchangeably and can also be used with the
        single letter switches.  Remember to check your spelling because the
        single letter interface is still intact.

================================================================================

(Switch Options)::

        The following list of switch options is organized by:

         - Control of DOSMAX Reports (/R:/P:/N:)
         - Control of DOSMAX Operation (/M=/H:/L:/A=/S:/U=)
           - Setting the Memory Strategy (/M=)
           - Control the Location of the DOS Kernel (/H:/L:)
           - Control COMMAND.COM Split (/C:/A=)
           - Control EMS Usage (/Q:)
           - Control Sub-Segment Relocation (/S:)
           - Control Stack Interrupts (/U=)
           - Control DOSMAX Automatic UMB installation (/X:)
           - Response file for DOSMAX

  (Control of DOSMAX Reports)::

        (REPORT)::      R[+ or -]        (toggle:  default -)

        Use /R+ or /REPORT:+ to enable the report of additional status
        messages.

        (PAUSE)::       P[+ or -]        (toggle:  default -)

        Use /P+ or /PAUSE:+ to enable a pause after the execution of
        DOSMAX.EXE.

        (NOPAUSE)::     N[+ or -]        (toggle:  default -)

        Use /N+ or /NOPAUSE:+ to never pause after the report, even if
        there are errors.  This switch can be used if your configuration
        generates a warning or error message which you choose to ignore.

  (Control of DOSMAX Operation)::

    (Setting the Memory Strategy)::

        (STRATEGY)::    Mn               (value=  n = 0)

        Use /Mn or /STRATEGY=n to control the memory allocation strategy
        which DOSMAX uses to allocate upper memory blocks.  The default
        strategy is is First Fit (/M0).  This means that DOSMAX will use the
        first upper memory block returned by the XMS manager.  The other
        available options are Best Fit (/M1) and Last Fit (/M2).  Best Fit
        uses the block which most closely matches the size needed, and
        Last Fit uses the last block big enough to handle the request.
        Values other than 0, 1, or 2 are ignored and the previous setting
        of this option is used.

        (SYSFSIZE)::    Fnn              (value=  nn = 59 )

        Use /Fnn or /SYSFSIZE=nn to set the System File Size:  The upper
        limit of nn is 61 in device mode, and 82 in command line mode.
        The lower limit is 40.  Values other than the MS-DOS 4.0 - 6.0
        System File Size of 59 are only allowed if the true MS-DOS version
        is greater than 5.0.  The /Fnn switch is only necessary if DOSMAX
        can't determine the System File Size automatically.

    (Control the Location of the DOS Kernel)::

        (ALLOWHI)::     H[+ or -]        (toggle:  default -)

        Use /H+ or /ALLOWHI:+ to allow DOS to load into the HMA anyway.
        This switch is now obsolete.  DOSMAX now detects the location of
        the kernel and automatically determines the proper setting of this
        switch.  It is for backward-compatability and debugging purposes only.

        (FORCELOW)::    L[+ or -]        (toggle:  default -)

        Use /L+ or /FORCELOW:+ to allocate DOS code block in low memory.
        This switch is now obsolete.  DOSMAX now detects the location of
        the kernel and automatically determines the proper setting of this
        switch.  It is for backward-compatability and debugging purposes only.

    (Control COMMAND.COM Split)::

        (CMDALLOC)::    C[+ or -]        (toggle:  default -)

        Use /C:+ or /CMDALLOC:+ to enable the /AVAIL4A=nnnnn parameter and
        the function which splits COMMAND.COM from DOS 5.0 in half.  This
        is for those users who chose not to load COMMAND.COM into a UMB.

        (AVAIL4A)::     Annnnn           (value=  nnnnn = 2080)

        Use /Annnnn or /AVAIL4A=nnnnn to set the number of bytes reserved
        in upper memory for COMMAND.COM and other DOS 5.0 and above programs
        which have the capability of moving a portion of themselves into the
        HMA.  These programs use INT 2Fh Function 4Ah to allocate a fixed
        number of bytes from the HMA.  DOSMAX has the capability of emulating
        this function in high memory.  By default, DOSMAX reserves 2080 bytes,
        which is the space needed to shrink COMMAND.COM.  To reserve more
        memory, increase this value.

        The command line mode of DOSMAX reports the size and allocation
        status of this area.  If the amount allocated or requested is not
        equal to the amount reserved, DOSMAX will report what the proper
        value should be.  Users of replacement shells like 4DOS.COM from
        J.P. Software, should disable this option with /A0.  Disabling the
        option or using the report feature of the command line mode to
        set the exact amount of memory required, is recommended since
        INT 21h 3306h (Get True Ver.), which is also hooked by DOSMAX,
        must return with a bit set which indicates that DOS is in the HMA
        until the amount of memory reserved is completely exhausted.

    (Control EMS Usage)::

        (LOADEMS)::      Q[+ or -]       (toggle:  default -)

        Use /Q:- or /LOADEMS:- to disable the default action of DOSMAX
        which allocates EMS to store the .EXE module until the DOS resources
        are built and ready to move.  DOSMAX will still be able to function,
        but disk compression schemes may cause confusion if DOSMAX.EXE is
        not on both the compressed and uncompressed drives.

    (Control Sub-Segment Relocation)::

        (SKIPSUB)::      S[+ or -]       (toggle:  default -)

        Use /S+ or /SKIPSUB:+ to tell DOSMAX to not move sub-segments
        data types.  The switch is provided mainly for diagnostic purposes,
        but may be useful when not enough high memory is available to
        move both the DOS code block and the sub-segments, or if
        you find this feature does not work in your configuration.

    (Control Stack Interrupts)::

        (UNHOOK)::       Unn             (value=  default none)

        Use /Unn or /UNHOOK=nn to tell DOSMAX that INT nn is to be
        "unhooked" from DOS STACKS when the STACKS are moved high.  This
        switch is useful for controlling which hardware interrupts are
        routed through the DOS STACKS mechanism.  Microsoft's EMM386 may
        cold-boot or lock-up if STACKS are present and moved to high memory,
        CTRL-ALT-DEL is pressed (warm-boot), and INT 09h is hooked by DOS
        STACKS.  The DOSMAX option /U09 maybe used to work-around this
        problem.  The interrupt number is in Hex-Notation and the valid
        values are the hardware interrupts 02, 08, 09, 0A, 0B, 0C, 0D, 0E,
        70, 72, 73, 74, 76, & 77.  Invalid interrupt numbers are ignored.
        Multiple invocations of this switch are permissable.

    (Control DOSMAX Automatic UMB installation)::

        (HILOAD)::       X[+ or -]       (toggle:  default +)

        Use /X- to stop DOSMAX.EXE from loading itself high if upper
        memory is available.  This switch is intended for diagnostic
        purposes only, since if you use your memory manager to load
        DOSMAX.EXE high this condition is detected and no second upper
        memory block will be allocated.

  (Response file for DOSMAX)::

        Parameters for DOSMAX may be read from a response file by using the
        @pathname syntax:

        DOSMAX.EXE @RESPONSE.FIL

        Response files may be commented by using a ";","#",or "*" character
        before the comment.

        There is also a feature implemented for DOS 6.0 config menus.  If a
        menu is configured for DOS 6.0, DOS puts the name of the effective
        section in an environment variable.  This environment variable is
        "CONFIG=."  You may optionally divide the response files into
        sections, identified with the familiar [SECTION] syntax, where
        "SECTION" is the name of the DOS 6.0 menu item selected.

(CONFIG.SYS Line)::

        DEVICE=DOSMAX.EXE [/-][R+P+N+L+H+FnnC+AnnnnMnUnnQ+X-]

        device default: /R-/P-/N-/X+/C-/M1

        *  disable Report status messages
        *  don't Pause after report
        *  Pause on errors or warnings
        *  use the Best Fit memory allocation strategy
        *  Load DOSMAX high if upper memory available

        *  everything in square brackets "[]" is optional

================================================================================

(Report Format)::

   DOSMAX.EXE :  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
        ERROR :  (Error Messages)
      WARNING :  (Warning Messages)
       ADVICE :  (Advisory Messages)
              :  (Report Messages)
              :  (Allocation Status)
        PAUSE :  Press any key to continue...

(Report Note)::

        DOSMAX.EXE may be replaced by DOSMAX.SYS or DOSMAX.OVL.  The
        exact name of the module is dependent upon the circumstances
        under which DOSMAX.EXE is executed.  This detail is important
        only as diagnostic information.

================================================================================

(Error Messages)::

        MS-DOS version 3.10 or above is required
        DOS version is not compatible
        An 80186 processor or better is required
        Device not found, or version mismatch
        Not enough memory to relocate
        Unable to execute, can't open overlay
        Unable to execute, not enough memory for overlay

================================================================================

(Warning Messages)::

        Unknown option on the command line
        Unknown option on line #0000
        Extra characters on command line
        Line length overflow at line #0000
        INT 00h is not pointing into STACKS
        DOS Sub-Segment list is unmoveable
        System File Size not determined or out of range
        Unable to validate System Data area
        Couldn't validate DR-DOS data area
        Couldn't size System File Table
        Couldn't size System FCB Table
        Couldn't trace Buffer Chain
        Couldn't find Lastdrive Array
        Unable to calculate DR-DOS kernel control constants
        Unable to calculate kernel control constants

================================================================================

(Advisory Messages)::

        Set STACKS=0,0 in CONFIG.SYS
        Possible INSTALL= in CONFIG.SYS
        Try using /Fnn switch
        For maximum efficiency use /A00000

================================================================================

(Report Messages)::

        Processing option file XXXXXXXX.XXX
	Effection section is [XXXXXXXX]
        DOS System forced low
        DOS System in HMA
        DOS System not in HMA
        DOS Sub-Segments skipped
        DOS Sub-Segments skipped
        DOS Sub-Segments too small, staying resident
        System File Size set to 00
        Unhooked DOS STACKS INT 00h
        Moved 00000 bytes of DOS data high
        Found 00000 bytes allocated of 00000 bytes
        Freed EMS handle 0

================================================================================

(Allocation Status)::

        SYSTEM   moved to 0000
        Not enough Hi Memory for SYSTEM
        INSTALL  moved to 0000
        Not enough Hi Memory for INSTALL
        STACKS   moved to 0000
        Not enough Hi Memory for STACKS
        DRDATA   moved to 0000
        Not enough Hi Memory for DRDATA
        LASTDRIV moved to 0000
        Not enough Hi Memory for LASTDRIV
        BUFFERS  moved to 0000
        Not enough Hi Memory for BUFFERS
        WKBUFFER moved to 0000
        Not enough Hi Memory for WKBUFFER
        FCBS     moved to 0000
        Not enough Hi Memory for FCBS
        FILES    moved to 0000
        Not enough Hi Memory for FILES
        COMMAND  memory reserved at 0000
        Not enough Hi Memory for COMMAND
        DOSMAX   located at 0000
        Not enough Hi Memory for DOSMAX

================================================================================

(Sub-Segment List)::

        The Sub-Segment List is searched from bottom to top for a block
        of moveable sub-segments, then moved in reverse order.

        The following chart attempts to show what can and cannot be moved
        with DOSMAX:

                        Sub-Segment Type                Not Moved  Moved
        ----------------------------------------------- ---------  -----
        "D"        DEVICE DRIVER                            x
        "E"        DEVICE DRIVER APPENDAGE                  x
        "I"        IFS (Installable File System) DRIVER     x
        "F"        FILES=                                            x
        "X"        FCBS=                                             x
        "C"        BUFFERS /X Option (EMS workspace area)            x
        "B"        BUFFERS=                                          x
        "L"        LASTDRIVE=                                        x
        "S"        STACKS=                                           x
        "T"        INSTALL=                                          x

================================================================================

(Changes)::

    (Version 1.1)::

    (1) Fixed problem not cleaning up properly, when DOS goes to HMA
        anyway, (only /V+ switch, and some XMS Managers).

    (2) Fixed problem that occurred if no XMS UMB's available, and DOS 5
        UMB's tried, and if no DOS UMB's available either (not just not
        enough), memory was allocated from low memory, even though
        allocation strategy was set to try UMB's only.  Made sure UMB
        Link state was set properly.

    (3) Added support for DOS Versions 3.10 - 3.31 and DOS Version 4.x

    (4) Improved File Size determination algorithum

    (Version 1.2)::

    (1) Improved detection of DOS=LOW, and reduced the possibility of
        an errant "Should be the first DEVICE= in CONFIG.SYS" message.

    (Version 1.3)::

    (1) Added support for INT 2Fh, Function 4Ah, so that COMMAND.COM
        (and others??) can move a portion of their code to high memory
        too.  For COMMAND.COM users with DOS 5.0, this saves 2.1k of
        low memory.  Added the /Annnn switch to support this feature,
        plus an allocation status check for the command line mode.
        4DOS users should disable this feature with option /A0.

    (Version 1.4)::

    (1) Added capability to find and move the master environment for
        COMMAND.COM users.  Also implemented a special test mode with
        the /T+ option, which verifies that the master environment
        has been found and that it is moveable.  This test mode should
        only be necessary for diagnostic purposes.

    (Version 1.5)::

    (1) Added base 10 number display for /A parameter and changed
        System File Size message to base 10.

    (Version 1.6)::

    (1) Added /Mn option, to allow general control of memory allocation
        strategy.  First Fit = 0, Best Fit = 1, and Last Fit = 2 were
        implemented for both DOS 5 UMB's, and XMS UMB's.

    (2) Added check for a 186 processor or better (allows V20/V30).

    (3) DOSMAX will now move STACKS, so setting STACKS=0,0 is not
        necessary.  In most cases though, STACKS=0,0 is still a good
        idea.  Windows 3.1 supposed requirement for STACKS=9,256 is
        not really necessary in most cases.

    (4) Removed the check for an XMS manager and a check for extended
        memory.  This allows machines without extended memory to use
        UMB providers, which do not require extended memory, with DOSMAX.
        These checks were redundant since if DOS is in the HMA when
        DOSMAX loads, the message "DOS is HIGH already" is reported.
        It is still possible to use DOSMAX, but the /H switch must be
        used if DOS is HIGH first.

    (5) Added /I option which inhibits HIMEM.SYS from loading DOS HIGH.
        This switch is not very useful if HIMEM.SYS is not loaded high,
        since HIMEM will be about 30k in size.  This switch is intended
        for users who load HIMEM high after their UMB provider is installed.

    (6) Changed default WINDOWS high file support method to a new method
        which uses 2 system file handles, but no low memory, so it works
        when DOSMAX is loaded high.  The new method may be disabled with
        /Y-, or /W+ (/W+ enables the old method since it was proven to work
        and the code was already written).  The new method cannot be
        enabled or disabled from the command line.

    (7) Now supporting separate program DOSM86.EXE.  This program is
        functionally identical to DOSMAX.EXE, but is compiled to work
        on 8086/8088 processors also.  I have learned that there are
        8086/8088 machines which can be configured with High Memory
        using some High Memory Managers, and this variation will make
        it possible for those users to put DOS in a UMB even though
        there is no HMA.  DOSM86.EXE requires 32 more bytes of memory.

    (8) Fixed high loading so it really works...Also added an automatic
        move to high memory of DOSMAX, if UMB's are available via DOS
        or the XMS manager.  If there is some reason you don't want
        DOSMAX loaded high when loaded after UMB's are available then
        use /X- to stop it.  If DOSMAX is high, then it takes 272 bytes,
        because extra code was needed to securely find and identify
        the DOSMAX stub in memory.

    (9) Fixed a problem which hung DOSMAX after loading high if DOS was
        not in the HMA yet and /V+ switch not used.

   (10) Changed order of first 5 handles in new windows support, and
        enhanced error checking to only warn when support will not
        work.  The new order maintains the AUX CON order and seems
        more compatible.

   (11) Added routine to stop "Incompatible DOS" message if loaded high
        with a "device loader."  DOSMAX will now load high with a
        device loader like LOADHI.SYS or HIGHDRVR.SYS

   (12) Try DOS high memory allocation even if NO XMS manager present.
        This was necessary for PC's which don't have extended memory,
        and don't even load an XMS manager (UMB_DRVR creates DOS high
        memory and disappears).

   (13) Fixed DOSMAX not running second time if loaded high with LOADHI.

   (14) Fixed DOSMAX not moving anything high (sometimes) if loaded
        high by any device loader.  I broke this in fix (13).

   (15) Added /B+ option which will stop DOS from going to the HMA by
        patching the DOS initilization code in memory.  This method
        works no matter which memory manager is in use or how it is
        configured.  It also requires no resident memory.

    (Version 1.7)::

    (1) Added /Unn option to tell DOSMAX to unhook hardware INT nn from
        DOS STACKS if the STACKS are present and moved.  At the time
        which DOSMAX moves the STACKS it is safe to restore the interrupt
        to the pre-STACKS value.  This switch was added as a work-around
        to a warm-reboot problem in EMM386.EXE when STACKS are high.  To
        fix the warm-reboot problem use /U09.  The value is in Hex-Notation.

    (2) Fixed DOSMAX not removing remnants of the sub-segments low when
        the size of the DOS data area should have been 0.  This occurred
        when using a memory manager with no code low, no drivers low, and
        DOS in a UMB.  Changed method of recording sub-segment movement.

    (3) Removed DOS Version 3.x use of new windows method, it worked, but
        wasn't completely compatible.  Use FW3.BAT instead if your version
        of DOS is higher then 3.31 (rare).

    (4) Move master environment function now sets the MCB owner of the new,
        high environment back the primary shell.  This corrects a minor
        incompatiblity.

    (Version 1.8)::

    (1) Added specific support for 386MAX.  The high sub-segments and other
        DOSMAX managed data are now labeled using a method which automatically
        detects and adjusts to 386MAX's method of UMB management.

    (Version 1.9)::

    (1)  Reorganized code to enable an overlay method of module selection
         to automate processor selection and split up .SYS and .EXE modules
         to reduce the initialization memory to minimum.

    (2)  DOSMAX now automatically detects the processor type and chooses
         separate code modules if appropriate.  The 186 processor require-
         ment of previous versions is no longer applicable.

    (3)  Added optional full word syntax to argument parser.  The old style
         single letter switch interface is still intact.  The switch lists
         now show the optional word with the switch.

    (4)  Corrected problem with DOS 3.1 - 3.3 files which failed for some file
         settings (i.e. FILES=20 failed).

    (5)  DOSMAX updated for DOS 6.0.  Corrected a coding error while moving
         buffers.

    (6)  Changed default setting of /E switch.  To move the master environment
         high from the command line or AUTOEXEC, now use /E+.

    (Version 2.0)::

    (1)  Added support for INSTALL=, it is no longer necessary to remove
         INSTALL= from the CONFIG.SYS.

    (2)  Removed /B+,/V+, and /I+ options.  You must now use STOPMAX.SYS to
         prevent DOS from moving into the HMA.  The parameters were causing
         confusion.

    (3)  /H and /L are no longer necessary and you can use DOS=HIGH or DOS=LOW
         as you deem necessary.

    (4)  Added /C+ switch to enable the COMMAND.COM split feature.  For most
         users, /A0 was forgotten and only caused unecessary "Packed file
         corrupt" messages and wasted space.  You may still use this feature,
         but you must first enable it with /C+, since the default is now off.

    (5)  Moved /E+,/MASTERENV:+ into ENVIMAX.COM.  The triple mode of DOSMAX
         confused people and many just didn't realize that DOSMAX could be
         put into AUTOEXEC.BAT to move the master environment.

    (6)  Changed the Windows support method once again.  The /Y is gone (the
         old high file support method) and /W+ now works from both the .SYS
         and .EXE command lines.  This new method uses 256 bytes at 60:0 and
         if this is a conflict, you must use FW4-6.BAT and FW3.BAT after
         disabling the support with /W-.

    (7)  Added support for DRDOS 6.0.  See EXAMPLES.DOC.

    (8)  Added feature which preloads the .EXE portion of the DOSMAX into
         EMS and improves ease of configuration for STACKER/SSTOR users.
         Most of the time it is not necessary to duplicate DOSMAX.EXE on
         both the compressed and uncompressed drives (unless EMS 4.0 is not
         present).

    (9)  Added support for loading self high when DOS=UMB is configured

   (10)  Added option response file input with @filename.opt syntax

    (Version 2.1)::

    (1)  Fixed problem with finding DOS 6.0 CONFIG variable for machines
         whose bios'es don't intialize memory properly.

================================================================================

ENVIMAX.DOC


================================================================================
      ENVIMAX.COM :  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
================================================================================

  ENVIMAX.COM is the "move master environment" function split from earlier
  versions of DOSMAX.  Its function is to move the Master Environment of
  COMMAND.COM into upper memory.

  ENVIMAX does not support other shells like 4DOS/NDOS which move their own
  environments to upper memory.

  Support is provided for:

    * moving COMMAND.COM's master environment into upper memory
    * DOS Versions 3.1 - 3.31, DOS 4.x, DOS 5.x, and DOS 6.x

================================================================================

(Requirements)::

        * Requires MS-DOS Version 3.10 or better

================================================================================

(Installation)::

        Install ENVIMAX.COM in your AUTOEXEC.BAT.  I recommend that ENVIMAX
        is the first program run in the AUTOEXEC.BAT

================================================================================

(Syntax)::

        The only thing to remember about syntax for the command line is
        that just about anything works.  What this means is that you
        should be able to type in the options on the command line the
        way they make sense to you.

        To illustrate this point, the following command line example
        is mutated several different ways.

        ENVIMAX.COM /E+
        ENVIMAX.COM E+
        ENVIMAX.COM E
        ENVIMAX.COM -E

        ENVIMAX 2.0 and above adds optional full word syntax.  The new
        syntax looks like this:

        ENVIMAX.COM /MASTERENV:+
        ENVIMAX.COM MASTERENV:+
        ENVIMAX.COM MASTERENV
        ENVIMAX.COM -MASTERENV:+

        Obviously when using full words, it is easier to keep the words
        separated so that is clear to read.  An optional [:] or [=] may be
        used for switches (i.e. REPORT:+ or REPORT=+).  These optional
        delimiters are used interchangeably and can also be used with the
        single letter switches.  Remember to check your spelling because
        the single letter interface is still intact.

(Switch Options)::

        The following list of switch options is organized by:

        - Control of ENVIMAX Reports (/R:/P:/N:)
        - Control of ENVIMAX Operation (/E:)
        - Response file for ENVIMAX (@)

  (Control of ENVIMAX Reports)::

        (REPORT)::      R[+ or -]        (toggle:  default +)

        Use /R- or /REPORT:- to disable the report after you are
        satisfied with the configuration of DOSMAX.EXE

        (PAUSE)::       P[+ or -]        (toggle:  default +)

        Use /P- or /PAUSE:- to disable the pause after the report as
        long as there are no errors or warnings.

        (NOPAUSE)::     N[+ or -]        (toggle:  default -)

        Use /N+ or /NOPAUSE:+ to never pause after the report, even if
        there are errors.  This switch can be used if your configuration
        generates a warning or error message which you choose to ignore.

  (Control of ENVIMAX Operation)::

        (MASTERENV)::    E[+ or -]       (toggle:  default +)

        Use /E- or /MASTERENV:- to disable locating and moving the master
        environment to upper memory.  This switch is for diagnostic purposes
        only.

  (Response file for ENVIMAX)::

        Parameters for ENVIMAX may be read from a response file by using the
        @pathname syntax:

        ENVIMAX.COM @RESPONSE.FIL

        Response files may be commented by using a ";","#",or "*" character
        before the comment.

        There is also a feature implemented for DOS 6.0 config menus.  If a
        menu is configured for DOS 6.0, DOS puts the name of the effective
        section in an environment variable.  This environment variable is
        "CONFIG=."  You may optionally divide the response files into
        sections, identified with the familiar [SECTION] syntax, where
        "SECTION" is the name of the DOS 6.0 menu item selected.

        *  everything in square brackets "[]" is optional

================================================================================

(Report Format)::

       ENVIMAX.COM :  Ver. 2.1, Copyright (1992) by Philip B. Gardner
             ERROR :  (Error Messages)
           WARNING :  (Warning Messages)
            ADVICE :  (Advisory Messages)
                   :  (Report Messages)
                   :  (Allocation Status)
             PAUSE :  Press any key to continue...

================================================================================

(Error Messages)::

        MS-DOS version 3.10 or above is required

================================================================================

(Warning Messages)::

        Unknown option in command line
        Unknown option on line #0000
        Extra characters on command line
        Missing or invalid option file XXXXXXXX.XXX
        Line length overflow at line #0000
        Master Environment is not moveable

================================================================================

(Advisory Messages)::

================================================================================

(Report Messages)::

        Processing option file XXXXXXXX.XXX
	Effection section is [XXXXXXXX]
        Master Environment located at 0000

================================================================================

(Allocation Status)::

        MASTRENV moved to 0000
        Not enough Hi Memory for MASTRENV

================================================================================

(Changes)::

    (Version 2.1)::

    (1)  Fixed problem with finding DOS 6.0 CONFIG variable for machines
         whose bios'es don't intialize memory properly.

================================================================================

EXAMPLES.DOC


================================================================================
         DOSMAX.EXE :  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
        STOPMAX.SYS :  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
       FREELOAD.SYS :  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
       SHELLMAX.COM :  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
        ENVIMAX.COM :  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
================================================================================

EXAMPLE CONFIGURATIONS:

If you have a configuration that is significantly different, perhaps a
different memory manager or special switches that are used, please send
me a copy and I will include it in this file.

If you have problems, check out GENERIC at the end of this file.

;------------ QEMM386 ----------------------------------------------------------

(CONFIG)::

dos=high,noumb
stacks=0,0
REM=default /B+ requires no resident memory
device=stopmax.sys
device=c:\qemm\qemm386.sys ram rom i=b000-b7ff i=cc00-f7ff fr=e800
REM=no report, no pause, (default is now /c:- or effectively /a0)
REM=or loaded high with loadhi
device=c:\boot\dosmax.exe /r-/p-
REM=s for shrink
device=c:\boot\freeload.sys /s
device=c:\qemm\loadhi.sys /r:1 c:\mouse\mouse.sys
shell=shellmax.com /r- c:\dos\command.com c:\dos /e:768 /p
REM=use /S+ option to create a 256 byte low stub (networks? enviroment editors?)
REM=shell=c:\boot\shellmax.com /r- c:\dos\command.com c:\dos /e:768 /p
buffers=20
files=40
lastdrive=Z

(AUTOEXEC)::

REM moves master environment
c:\boot\envimax.com

;------------ QEMM386 + 4DOS ---------------------------------------------------

(CONFIG)::

dos=high,noumb
stacks=0,0
REM=default /B+ requires no resident memory
device=stopmax.sys
device=d:\qemm\qemm386.sys r:2 ns nv ram rom i=0400-0fff st:m fr=c000
REM=a0 for 4DOS, no report, no pause
device=c:\boot\dosmax.exe /r-/p-
REM=m1 for best fit, f to change pathname of loader, s for shrink
device=c:\boot\freeload.sys /m1 /fd:\qemm\loadhi.sys /s
REM=disable windows support
device=d:\qemm\loadhi.sys /r:1 c:\mouse\mouse.sys
device=d:\qemm\loadhi.sys /r:2 c:\boot\hyper386.exe c:2048:1024 s ox
REM=path parameter to 4DOS may be required to initialize properly
shell=shellmax.com /s- c:\4dos\4dos.com c:\4dos /p
REM=if the /S+ option is required (networks? enviroment editors?)
REM=then using shellmax with 4dos is pointless
REM=shell=c:\4dos\4dos.com c:\4dos /p
buffers=5,4
files=40
lastdrive=Z

(AUTOEXEC)::

REM not necessary at all, but no harm, /E- switch avoids environment warning
c:\boot\envimax.com /E-

;------------ 386MAX ------------------------------------------------------

(CONFIG)::

dos=high,noumb
stacks=0,0
REM=default /B+ requires no resident memory
device=stopmax.sys
device=f:\386max\386max.sys pro=c:\386max\386max.pro
REM=default loader name is c:\386max\386load.sys
REM=use /F option if necessary
REM=device=c:\boot\freeload.sys /sd:\386max\386load.sys
device=c:\boot\freeload.sys /s
REM=a0 for SHELLMAX, m1 for best fit, no report, no pause
device=f:\386max\386load.sys prgreg=2 flexframe prog=c:\boot\dosmax.exe a0m1r-p-
device=f:\386max\386load.sys prgreg=2 flexframe prog=c:\mouse\mouse.sys
shell=c:\boot\shellmax.com /s c:\dos5\command.com c:\dos5 /e:768 /p
REM=use /S+ option to create a 256 byte low stub (networks? enviroment editors?)
REM=shell=c:\boot\shellmax.com /r-/s+ c:\dos\command.com c:\dos /e:768 /p
REM=only a few buffers required if a disk cache is loaded in autoexec
buffers=5
files=35
lastdrive=Z

(AUTOEXEC)::

REM moves master environment
c:\boot\envimax.com /e+

;------------ 386MAX + 4DOS -----------------------------------------------

(CONFIG)::

dos=high,noumb
stacks=0,0
REM=default /B+ requires no resident memory
device=stopmax.sys
device=f:\386max\386max.sys pro=c:\386max\386max.pro
REM=default loader name is c:\386max\386load.sys
REM=use /F option if necessary
REM=device=c:\boot\freeload.sys /sd:\386max\386load.sys
device=c:\boot\freeload.sys /s
REM=a0 for 4DOS, m1 for best fit, no report, no pause
device=f:\386max\386load.sys prgreg=2 flexframe prog=c:\boot\dosmax.exe a0m1r-p-
device=f:\386max\386load.sys prgreg=2 flexframe prog=c:\mouse\mouse.sys
REM=probably not enough high memory to use shellmax with 4DOS
shell=c:\4dos\4dos.com c:\4dos /e:768 /p
REM=only a few buffers required if a disk cache is loaded in autoexec
buffers=5
files=35
lastdrive=Z

(AUTOEXEC)::

REM not necessary at all, but no harm, /E- switch avoids environment warning
c:\boot\envimax.com /e-

;------------ LASTBYTE ---------------------------------------------------------

(CONFIG)::

dos=high,noumb
stacks=9,256
REM=alternative to dosmax /i+ switch, use stopmax.sys
REM=device=stopmax.sys
REM physical=(CHIPSET or fixed)
device=c:\tlbmm\lastbyte.sys ? physical=fixed
REM=i to force DOS to UMB even with HIMEM, m1 for best fit, no report, no pause
REM=a0 since shellmax is used
device=c:\tlbmm\highdrvr.sys c:\boot\dosmax.exe /a0/i+/m1/r-p-
REM=himem.sys cannot be loaded after highumm.sys
device=c:\tlbmm\highdrvr.sys c:\dos\himem.sys
REM=must load highumm.sys for DOSMAX (/replace is for himem.sys)
device=c:\tlbmm\highumm.sys /replace
device=c:\tlbmm\highdrvr.sys c:\mouse\mouse.sys
shell=c:\boot\shellmax.com /r- c:\dos\command.com c:\dos /e:512 /p
REM=use /S+ option to create a 256 byte low stub (networks? enviroment editors?)
REM=shell=c:\boot\shellmax.com /r-/s+ c:\dos\command.com c:\dos /e:768 /p
buffers=20
files=40
lastdrive=Z

(AUTOEXEC)::

REM moves master environment, reports on COMMAND space
c:\boot\envimax.com

;------------ UMB_DRVR ---------------------------------------------------------

(CONFIG)::

dos=high,umb
stacks=9,256
REM=alternative to dosmax /i+ switch, use stopmax.sys
REM=device=stopmax.sys
device=c:\umb_drvr\umb_drvr.sys
REM=i to force DOS to UMB even with HIMEM, m1 for best fit, no report, no pause
devicehigh=c:\boot\dosmax.exe /i+/m1/r-p-
devicehigh=c:\dos\himem.sys
devicehigh=c:\mouse\mouse.sys
shell=shellmax.com /r- c:\dos\command.com c:\dos /e:512 /p
buffers=20
files=40
lastdrive=Z

(AUTOEXEC)::

REM moves master environment, reports on COMMAND space
c:\boot\envimax.com

;------------ UMB_DRVR + 4DOS + NO HIMEM (no Extended Memory) ------------------

(CONFIG)::

dos=high,umb
stacks=9,256
device=c:\umb_drvr\umb_drvr.sys
REM=i to force DOS to UMB even with HIMEM, m1 for best fit, no report, no pause
devicehigh=c:\boot\dosmax.exe /a0/m1/r-p-
devicehigh=c:\mouse\mouse.sys
REM=probably not enough high memory to use shellmax with 4DOS
shell=c:\4dos\4dos.com c:\4dos /p
buffers=20
files=40
lastdrive=Z

(AUTOEXEC)::

REM not necessary at all, but no harm, /E- switch avoids environment warning
c:\boot\envimax.com /E-

;------------ DOS 5.0 ----------------------------------------------------------

(CONFIG)::

dos=high,umb
stacks=0,0
REM=stacks=9,256
REM=if you really want DOS in UMB, use stopmax
REM=but it will cost you 30k for HIMEM (try alternate XMS driver like QEXT.SYS)
REM=device=stopmax.sys
device=c:\dos\himem.sys
device=c:\dos\emm386.exe ram 4096 i=b000-b7ff i=cc00-f7ff frame=cc00 b=1000
REM=h because DOS goes to HMA, m1 for best fit, no report, no pause
REM=no a0 necessary since DOS (and part of command.com is in the HMA)
devicehigh=c:\boot\dosmax.exe /h/m1/r-/p-
REM=if stacks=0,0 is not used, you may need to add /U9 to dosmax.exe line
REM=this is a workaround for a emm386.exe warm-reboot problem
devicehigh=c:\boot\dosmax.exe /h/m1/r-/p-/u9
devicehigh=c:\dos\smartdrv.sys 1024 512
devicehigh=c:\mouse\mouse.sys
shell=shellmax.com /r- c:\dos\command.com c:\dos /e:768 /p
buffers=5
files=40
lastdrive=Z

(AUTOEXEC)::

REM moves master environment, reports on COMMAND space (if no /A0)
c:\boot\envimax.com

;------------ QEMM386 + DOS 4.01 -----------------------------------------------

(CONFIG)::

stacks=9,256
REM=stopmax.sys not necessary
device=c:\qemm\qemm386.sys ram rom i=b000-b7ff i=cc00-f7ff fr=e800
REM=m1 for best fit, no report, no pause
device=c:\qemm\loadhi.sys /r:1 c:\boot\dosmax.exe m1r-p-
REM=or let DOSMAX load itself high
REM=device=c:\boot\dosmax.exe m1r-p-
REM=s for shrink
device=c:\boot\freeload.sys s
device=c:\qemm\loadhi.sys /r:1 c:\mouse\mouse.sys
shell=shellmax.com c:\dos\command.com c:\dos /e:768 /p
REM=buffers low
buffers=20
REM=or use buffers in EMS
REM=buffers=20 /x
files=40
lastdrive=Z

(AUTOEXEC)::

REM moves master environment
c:\boot\envimax.com

;------------ QEMM386 + DOS 3.30 -----------------------------------------------

(CONFIG)::
(NOTE:  REM really not allowed, just shown for clarity)

stacks=9,256
REM=stopmax.sys not necessary
device=c:\qemm\qemm386.sys ram rom i=b000-b7ff i=cc00-f7ff fr=e800
REM=m1 for best fit, no report, no pause
device=c:\qemm\loadhi.sys /r:1 c:\boot\dosmax.exe m1r-p-
REM=or let DOSMAX load itself high
REM=device=c:\boot\dosmax.exe m1r-p-
REM=s for shrink
device=c:\boot\freeload.sys s
device=c:\qemm\loadhi.sys /r:1 c:\mouse\mouse.sys
shell=shellmax.com c:\dos\command.com c:\dos /e:768 /p
buffers=20
files=40
lastdrive=Z

(AUTOEXEC)::

REM moves master environment
c:\boot\envimax.com

;------------ EMM386 + DR-DOS 6.0 ---------------------------------------------

device=c:\drdos\emm386.sys /f=e800 /k=7168 /b=ffff /i=b000-b7ff,f000-f7ff /r=c000-cbff,f800-ffff
rem For kernel in HMA, use hidos.sys /bdos=ffff
rem For kernel in a UMB, don't use hidos.sys or hidos.sys /bdos=AUTO
rem device=c:\drdos\hidos.sys /bdos=ffff
rem your choice hidevice= or device=
rem hidevice=c:\uboot\dosmax.exe /r- /p-
device=c:\uboot\dosmax.exe /r- /p-
hidevice=c:\windows\mouse.sys /y
country=001,,c:\drdos\country.sys
rem your choice shell=c:\shellmax.com or shell=c:\drdos\command.com
rem shellmax.com saves 256 bytes or shellmax.com /s- saves 512 bytes
shell=c:\shellmax.com c:\drdos\command.com c:\drdos\ /p /e:512
rem your choice history=off or history=on,???,etc...
rem history=off
history=on, 256, off, off, off
break=off
rem your choice hibuffers= or buffers=
rem hibuffers=20
buffers=20
files=35
fcbs=8,4
rem your choice fastopen=0 or fastopen=???
rem fastopen=512
fastopen=0
lastdrive=z
rem your choice hidos=on or hidos=off
rem hidos=on
hidos=off
rem no install= or hiinstall=
rem install=????

;------------ QEMM386 + DR-DOS 6.0 ---------------------------------------------

device=c:\qemm\qemm386.sys r:2 ns nv ram rom ha=64 ma=16 dma=128 i=0400-0fff st:m fr=c000
rem For kernel in HMA, use hidos.sys /bdos=ffff
rem For kernel in a UMB, don't use hidos.sys or hidos.sys /bdos=AUTO
rem device=c:\drdos\hidos.sys /bdos=ffff
device=c:\uboot\dosmax.exe /r- /p-
hidevice=c:\windows\mouse.sys /y
country=001,,c:\drdos\country.sys
shell=c:\shellmax.com c:\drdos\command.com c:\drdos\ /p /e:512
rem your choice history=off or history=on,???,etc...
rem history=off
history=on, 256, off, off, off
break=off
rem your choice hibuffers= or buffers=
rem hibuffers=20
buffers=20
files=35
fcbs=8,4
rem your choice fastopen=0 or fastopen=???
rem fastopen=512
fastopen=0
lastdrive=z
rem your choice hidos=on or hidos=off
rem hidos=on
hidos=off
rem no install= or hiinstall=
rem install=????

(AUTOEXEC)::

REM moves master environment
c:\boot\envimax.com

;------------ GENERIC ----------------------------------------------------------

; fully configured
; 36K DOS 5.0 kernel in UMB, subs moved, shellmax loading primary shell high

device=stopmax.sys
device=memmgr.sys
device=freeload.sys /s
device=dosmax.exe /a0
shell=shellmax.com c:\command.com c:\ /e:256 /p

; problem 1:  not enough hi mem for drivers, subs, tsr's and DOS 5.0 kernel
; solution 1:  saves 36K+ in hi mem by allowing DOS the HMA, still moves subs

rem=no stopmax.sys
device=memmgr.sys
device=freeload.sys /s
rem=add /h+, remove /a0
device=dosmax.exe /h+
rem=no shellmax.com
shell=c:\command.com c:\ /e:256 /p

; problem 2:  Network hangs when loaded, or env editor can't find master env
; solution 2:  create fake stub in low memory

device=stopmax.sys
device=memmgr.sys
device=freeload.sys /s
device=dosmax.exe /a0
rem=add /s+
shell=shellmax.com /s+ c:\command.com c:\ /e:256 /p

; problem 3:  CTRL-ALT-DEL to reboot crashes
; solution 3:  use stacks=0,0 or unhook int 09h from stacks

rem=no stacks
stacks=0,0
device=stopmax.sys
device=memmgr.sys
device=freeload.sys /s
rem=or add /u9
device=dosmax.exe /u9
shell=shellmax.com c:\command.com c:\ /e:256 /p

; problem 4:  SHELLMAX reports "unable to load high, loading low"
; solution 4:  don't use shellmax (or see solution 1)

device=stopmax.sys
device=memmgr.sys
device=freeload.sys /s
rem=remove /a0
device=dosmax.exe
rem=no shellmax
shell=c:\command.com c:\ /e:256 /p

; problem 5:  freeload seems to have no effect
; solution 5:  set /f parameter of freeload and use full pathname to loader

device=stopmax.sys
device=memmgr.sys
rem=set /f parameter
device=freeload.sys /s /fc:\mem\hiloader.sys
rem=use full pathname to loader
device=c:\mem\hiloader.sys general.sys
device=dosmax.exe /a0
shell=shellmax.com c:\command.com c:\ /e:256 /p

; problem 6:  A specific driver fails with freeload
; solution 6:  load driver before freeload, or duplicate loader in another path

device=stopmax.sys
device=memmgr.sys
rem=load before freeload
device=c:\mem\hiloader.sys specific.sys
device=freeload.sys /s /fc:\mem\hiloader.sys
rem=or duplicate loader in another path
rem=device=d:\mem\hiloader.sys specific.sys
device=dosmax.exe /a0
shell=shellmax.com c:\command.com c:\ /e:256 /p

FREELOAD.DOC


================================================================================
      FREELOAD.SYS :  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
================================================================================

  FREELOAD.SYS is a device driver which will help maximize the use of low
  memory by releasing memory usually reserved in low memory by LOADHI.SYS
  from Quarterdeck Office Systems.

  FREELOAD.SYS tracks the high memory device loader operations and if it
  is safe to release the low memory after each device initiates, the low
  memory is released and the driver in upper memory is linked into the DOS
  device chain.

  FREELOAD.SYS can be used to save 1-2k in a typical configuration.  The
  actual amount of memory saved depends upon on the number and type of
  device drivers loaded high.

  Support is provided for:

    * fully automatic support of QEMM's LOADHI.SYS and 386MAX's 386LOAD.SYS
    * specifying the name and path of the device loader
    * both character and block devices
    * character drivers which contain an unlimited number of devices
    * DOS Versions 3.1 - 3.31, DOS 4.x, and DOS 5.x (or better?)

================================================================================

(Requirements)::

        * Requires MS-DOS Version 3.10 or better

================================================================================

(Installation)::

        (CONFIG.SYS)::

        Installation of FREELOAD.SYS requires modifying the contents of
        your CONFIG.SYS file.

(Generic Configuration)::

        This configuration should work and be the most efficient in 95%
        of all configurations.  For a few real world examples see
        EXAMPLES.DOC

        DOS=HIGH[,UMB]                    (DOS 5.0 only)
        REM DEVICE=STOPMAX.SYS [options]  (Stops kernel from loading in HMA)
        DEVICE=(xms/umb memory manager)
        DEVICE=DOSMAX.EXE [options]       (DOSMAX loads high automatically)
        DEVICE=FREELOAD.SYS [-S][other options]
        REM DEVICE=LOADHI.SYS DOSMAX.EXE  (or DOSMAX loaded high with loader)
        SHELL=SHELLMAX.COM COMMAND.COM /P
        BUFFERS=20
        FILES=40
        LASTDRIVE=Z

        Add a DEVICE= line for FREELOAD.SYS in your config.sys.  FREELOAD
        should be loaded immediately after the XMS and UMB memory manager

        DEVICE=(Memory Manager)
        DEVICE=FREELOAD.SYS [options]

        The default loader pathname is "C:\QEMM\LOADHI.SYS".  If FREELOAD
        cannot open this pathname, a message will displayed alerting you
        to "Use /Fpathname to override."  An example which uses this switch
        is shown below:

        DEVICE=FREELOAD.SYS /F D:\QEMM\LOADHI.SYS

        Version 1.8 adds full 386MAX support, so if 386MAX is detected, or
        the /A2 switch is used, then the default loader pathname is changed
        to "C:\386MAX\386LOAD.SYS."

(Tip)::

        If you prefer that a particular device driver is not affected by
        the operation of FREELOAD, place the DEVICE= for that device above
        the DEVICE=FREELOAD.SYS entry.  This may be necessary in the case
        that a particular driver is not compatible with FREELOAD.

================================================================================

(Syntax)::

        The only thing to remember about syntax for the command line is
        that just about anything works.  What this means is that you
        should be able to type in the options on the command line the
        way they make sense to you.

        To illustrate this point, the following command line example
        is mutated several different ways.

        DEVICE=FREELOAD.SYS /R+ /P+ /FC:\QEMM\LOADHI.SYS
        DEVICE=FREELOAD.SYS -R+ -P+ -F C:\QEMM\LOADHI.SYS
        DEVICE=FREELOAD.SYS R+ P+ F C:\QEMM\LOADHI.SYS
        DEVICE=FREELOAD.SYS R+P+FC:\QEMM\LOADHI.SYS
        DEVICE=FREELOAD.SYS -R+P+FC:\QEMM\LOADHI.SYS

        ... and so on.  There must be an EOL or space following the
        filename paramter the /Fpathname switch

        FREELOAD 1.9 and above adds optional full word syntax.  The new
        syntax looks like this:

        DEVICE=FREELOAD.SYS /REPORT:- /PAUSE:- /LOADER=C:\QEMM\LOADHI.SYS
        DEVICE=FREELOAD.SYS -REPORT:- -PAUSE:- -LOADER=C:\QEMM\LOADHI.SYS
        DEVICE=FREELOAD.SYS REPORT:- PAUSE:- LOADER=C:\QEMM\LOADHI.SYS
        DEVICE=FREELOAD.SYS REPORT-PAUSE-LOADER=C:\QEMM\LOADHI.SYS
        DEVICE=FREELOAD.SYS -REPORT-PAUSE--LOADER=C:\QEMM\LOADHI.SYS

        Obviously when using full words, it is easier to keep the words
        separated so that is clear to read.  An optional [:] or [=] may be
        used for switches (i.e. REPORT:+ or LOADER=C:\LOADHI.SYS).  These
        optional delimiters are used interchangeably and can also be used
        with the single letter switches.  Remember to check your spelling
        because the single letter interface is still intact.

(Switch Options)::

        The following list of switch options is organized by:

        - Control of FREELOAD Reports (/R:/P:/N:)
        - Override the Default Name and Path of the Loader (/F=)
        - Setting the Memory Strategy (/M=)
        - Overriding Directory Structure Size (/D=)
        - Control the Alternate Memory Manager Method (/A=)
        - Controlling the Shrink Feature (/S:)
        - Response file for FREELOAD (@)

    (Control of FREELOAD Reports)::

        (REPORT)::      R[+ or -]        (toggle:  default +)

        Use /R- or /REPORT:- to disable the report after you are
        satisfied with the configuration of DOSMAX.EXE

        (PAUSE)::       P[+ or -]        (toggle:  default +)

        Use /P- or /PAUSE:- to disable the pause after the report as
        long as there are no errors or warnings.

        (NOPAUSE)::     N[+ or -]        (toggle:  default -)

        Use /N+ or /NOPAUSE:+ to never pause after the report, even if
        there are errors.  This switch can be used if your configuration
        generates a warning or error message which you choose to ignore.

    (Override the Default Name and Path of the Loader)::

        (LOADER)::      F[pathname]      (string=  default=C:\QEMM\LOADHI.SYS)

        Use /Fpathname or /LOADER=pathname to specify the filename and path
        of the device loader provided with your upper memory manager.  For
        example, if this device driver is on drive D:

                DEVICE=FREELOAD.SYS /FD:\QEMM\LOADHI.SYS

        If FREELOAD cannot find this file, it will not load.

    (Setting the Memory Strategy)::

        (STRATEGY)::    Mn               (value:  n = 0)

        Use /Mn or /STRATEGY=n to control the memory allocation strategy
        which FREELOAD uses to allocate its upper memory block.  The default
        strategy is is First Fit (/M0).  This means that FREELOAD will use
        the first upper memory block returned by the XMS manager.  The other
        options are Best Fit (/M1) and Last Fit (/M2).  Best Fit uses the
        block which most closely matches the size needed, and Last Fit uses
        the highest block big enough to handle the request.  Values other
        than 0, 1, or 2 are ignored and the previous setting of this option
        is used.

    (Overriding Directory Structure Size)::

        (CDSSIZE)::     Dnn              (value:  nn = 88)

        Use /Dnn or /CDSSIZE=nn to set the Drive Table Size.  Values other
        than the MS-DOS 4.0 - 6.0 Drive Table Size of 88 are only allowed if
        the true MS-DOS version is greater than 5.0.  The Drive Table Size
        for DOS 3.x is 81. The /Dnn switch is only necessary if FREELOAD
        can't determine the Drive Table Size automatically.

    (Control the Alternate Memory Manager Method)::

        (ALTMETHOD)::   An               (value:  n = 0)

        Use /An to select the method FREELOAD uses to detect and track
        high device loaders.  There are 3 possible values.  (0), the
        default, means that FREELOAD will automatically select the proper
        method.  (1), method 1 is for device loaders compatible with
        LOADHI.SYS from Quarterdeck.  (2), method 2 is for device loaders
        compatible with 386LOAD.SYS from Qualitas.  This switch is included
        only for debugging purposes.

    (Controlling the Shrink Feature)

        (SHRINK)::      S[+ or -]        (toggle:  default -)

        FREELOAD normally takes approximately 1.4K of high memory. Use /S+
        or /SHRINK:+ to reduce this requirement to 16 bytes just before
        the shell is loaded from CONFIG.SYS.  Shrinking may cause problems
        with high memory optimizers, but the switch can be safely used
        after the system is optimized, to free another 1.4K of high memory.

  (Response file for FREELOAD)::

        Parameters for FREELOAD may be read from a response file by using the
        @pathname syntax:

        FREELOAD.SYS @RESPONSE.FIL

        Response files may be commented by using a ";","#",or "*" character
        before the comment.

        *  everything in square brackets "[]" is optional

(CONFIG.SYS Line)::

        DEVICE=FREELOAD.SYS [/ or -][R[+]P[+]N[+]S[+]Fpathname]

        device mode default: /R-/P-/N-/S-/Mn/FC:\QEMM\LOADHI.SYS

        *  No Report status messages
        *  No Pause after report
        *  Pause on errors or warnings
        *  Use the First Fit memory allocation strategy
        *  Default Loader Pathname = "C:\QEMM\LOADHI.SYS"

================================================================================

(Report Format)::

      FREELOAD.SYS :  Ver. 2.1, Copyright (1992) by Philip B. Gardner
             ERROR :  (Error Messages)
           WARNING :  (Warning Messages)
            ADVICE :  (Advisory Messages)
                   :  (Report Messages)
                   :  (Allocation Status)
             PAUSE :  Press any key to continue...

(Report Note)::

        FREELOAD.SYS may be replaced by FREELOAD.OVL.  The exact name of the
        module is dependent upon the circumstances under which FREELOAD.SYS
        reports.  This detail is important only as diagnostic information.

================================================================================

(Error Messages)::

        MS-DOS version 3.10 or above is required
        XMS manager not installed
        DOS version is not compatible
        Can't load in High Memory
        An 80186 processor or better is required
        Device Loader not found

================================================================================

(Warning Messages)::

        Unknown option in command line
        Unknown option on line #0000
        Extra characters on command line
        Missing or invalid option file XXXXXXXX.XXX
        Line length overflow at line #0000
        Drive Table Size not determined or out of range

================================================================================

(Advisory Messages)::

        Use /Fpathname to override
        Use /Dnn switch to set Drive Table size

================================================================================

(Report Messages)::

        Processing option file XXXXXXXX.XXX
	Effection section is [XXXXXXXX]
        Drive Table Size set to 00h
        [pathname]                      (/Fpathname parameter if error)

================================================================================

(Allocation Status)::

        FREELOAD moved to 0000
        Not enough Hi Memory for FREELOAD

================================================================================

(Changes)::

    (Version 1.1)::

    (1) Fixed problem where character devices were skipped if a
        block device was loaded first

    (2) Added support for block devices.  This grew the size of
        FREELOAD to 880 bytes so FREELOAD now shrinks to 16 bytes
        when finished.  This frees a .8k block of upper memory
        which is not needed after all devices are loaded.

    (Version 1.2)::

    (1) Added support for character drivers which contain multiple
        devices.  There is a requirement for 16 bytes of low
        memory for a multiple device driver, but this 16 bytes
        supports an unlimited number of devices within the driver.
        Without the 16 bytes, DOS believes the initialization of the
        driver has failed and only the first device is linked.

    (Version 1.3)::

    (1) Fixed problem with failing to build a Drive Parameter Block
        when a multiple device driver ended with a block device.

    (2) Changed automatic reduce to a command line option.  FREELOAD
        now takes 1K bytes high.  If the /S+ (shrink option is used)
        this size is reduced to 16 bytes just before the shell is loaded.

    (Version 1.4)::

    (1) Improved multiple device failure mode.  If a multiple device
        driver has begun the initiate phase and fails, the high device
        is left unlinked, and the loader is left in place with memory
        and the device chain set to the length of the last successful
        initialization.  This method more closely emultates DOS.

    (2) Added check that resets FREELOAD if the loader doesn't load the
        device in high memory successfully.

    (3) Optimized code to reduce memory requirement back to 1K

    (Version 1.5)::

    (1) Added base 10 display of Drive Table Size message

    (Version 1.6)::

    (1) Added support for DOS 5 UMB's when moving FREELOAD upto upper
        memory.  Some device loaders will work with DOS 5 UMB's, and
        now you can use the loader instead of DEVICEHIGH= if you want.

    (2) Added /Mn option, to allow general control of memory allocation
        strategy.  First Fit = 0, Best Fit = 1, and Last Fit = 2 were
        implemented for both DOS 5 UMB's, and XMS UMB's.

    (3) Added check for a 186 processor or better (allows V20/V30).

    (4) Now supporting separate program FREELO86.SYS.  This program is
        functionally identical to FREELO86.SYS, but is compiled to work
        on 8086/8088 processors also.  The stub left in high memory
        is 16 bytes greater using with this variation.

    (Version 1.7)::

    (1) Changed common parsing algorithum to add support for Hex-Notation
        input.  This input method is not used in FREELOAD at this time.

    (2) Fixed case where device fails but the loader tells DOS the device
        was ok.  The high memory block is released, but the loader still
        reserves low memory.  FREELOAD linked the released driver, but now
        detects the condition, does not complete the link, and releases
        the stub.

    (Version 1.8)::

    (1) Added automatic support for 386LOAD.SYS from Qualitas.  The proper
        method FREELOAD uses is determined automatically, but may be
        overridden with the /An switch.  The option adds as much as
        246 bytes to the pre-shrink size of FREELOAD.

    (2) DOS 3.x and 4.x with FREELOAD and 386LOAD was crashing because
        the 386LOAD stub hooked INT 21h, apparently to return a different
        DOS version to the device being loaded.  This "feature" is now
        disabled by FREELOAD so that the stub may be freed.  DOS 5 (and
        above?) used func 4B05h (set execution state), so the hook checking
        is bypassed.  The hook checking is implemented for /A2 only (or
        auto /A0).

    (3) If method 2 (/A2 or 386MAX detected with /A0), the default loader
        name is "C:\386MAX\386LOAD.SYS."  This makes compatability with
        386MAX completely transparent to the user in most cases.

    (Version 1.9)::

    (1)  Reorganized code to enable an overlay method of module selection
         to automate processor selection and split up .SYS and .EXE modules
         to reduce the initialization memory to minimum.

    (2)  FREELOAD now automatically detects the processor type and chooses
         separate code modules if appropriate.  The 186 processor require-
         ment of previous versions is no longer applicable.

    (3)  Added optional full word syntax to argument parser.  The old style
         single letter switch interface is still intact.  The switch lists
         now show the optional word with the switch.

    (Version 2.0)::

    (1)  Added support for DOS 6.0's changes in the way devices are
         initialized.  FREELOAD 1.7 was not compatible with DOS 6.0 or
         DBLSPACE.  FREELOAD 2.0 now supports the new version seamlessly.

    (2)  Added support for loaders which build sub-segments for devices
         in high memory.  This caused problems while preparing block
         devices.

    (3)  Added option response file input with @filename.opt syntax

    (Version 2.1)::

    (1)  Fixed problem with finding DOS 6.0 CONFIG variable for machines
         whose bios'es don't intialize memory properly.

    (2)  Fixed problem with some configurations of non-DOS 6.x systems
         and non-DBLSPACE systems which caused an Exception 13 after
         FREELOAD was loaded.

================================================================================

SHELLMAX.DOC


================================================================================
       SHELLMAX.COM :  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
================================================================================

  SHELLMAX.COM is a utility which loads the primary shell high from the
  SHELL= line in your CONFIG.SYS.

  Support is provided for:

        * Loading the primary SHELL into high memory
        * Creating a primary SHELL stub in low memory
          (improves compatability with some configurations)

================================================================================

(Requirements)::

        * Requires MS-DOS Version 3.10 or better

================================================================================

(Installation)::

        (CONFIG.SYS)::

        Installation of SHELLMAX.COM requires modifying the contents of
        your CONFIG.SYS file.

        SHELL=SHELLMAX.COM [options] COMMAND.COM /P

        Insert SHELLMAX.COM in your SHELL= line of your CONFIG.SYS.
        SHELLMAX.

(Safety)::

        When installing SHELLMAX, it is best if you copy SHELLMAX.COM and
        COMMAND.COM (the primary shell), to the root directory of your boot
        drive.  If SHELLMAX fails to function properly with the parameters
        in your SHELL= command line, it will issue a series of error messages,
        and then try and load COMMAND.COM from the root directory.  This will
        give you a chance to edit the CONFIG.SYS and correct the problem.
        You should exercise caution and have a boot floppy available.

        SHELLMAX is compatible with full SHELL= command line specifications.
        In the following example, neither SHELLMAX.COM or COMMAND.COM is
        required in the root directory after installation is successful, as
        indicated by no error or warning messages.

        SHELL=C:\BOOT\SHELLMAX.COM /R- C:\DOS\COMMAND.COM C:\DOS /E:512 /P

        All switch options and possible messages for SHELLMAX are detailed
        below:

================================================================================

(Compatibility)::

    (4DOS)::

        If you are using Version 4.x 4DOS from J.P. Software, you should
        add the path to 4DOS.COM to the 4DOS command line.

        SHELL=SHELLMAX.COM C:\4DOS\4DOS.COM C:\4DOS /p

        If this parameter is not added, 4DOS may not set the environment
        variable "COMSPEC=" properly.

    (DOS 3.x & 4.x)::

        Some versions of DOS incorrectly truncate the command line to 35
        characters for the SHELL= statement in the CONFIG.SYS or fail to
        pass a command line at all if the line is over 35 characters.
        This bug is circumvented by a special algorithum in SHELLMAX.  If
        SHELLMAX does not work for you, and you suspect that this is the
        problem, please contact me for assistance.

================================================================================

(Syntax)::

        The only thing to remember about syntax for the command line is
        that just about anything works.  What this means is that you
        should be able to type in the options on the command line the
        way they make sense to you.

        To illustrate this point, the following command line example
        is mutated several different ways.

        SHELL=SHELLMAX.COM /R- /P+ /S+ C:\COMMAND.COM C:\ /P
        SHELL=SHELLMAX.COM -R- -P+ -S+ C:\COMMAND.COM C:\ /P
        SHELL=SHELLMAX.COM /R-/P+/S+ C:\COMMAND.COM C:\ /P
        SHELL=SHELLMAX.COM -R--P+-S+ C:\COMMAND.COM C:\ /P

        ... and so on.

        SHELLMAX 2.0 and above adds optional full word syntax.  The new
        syntax looks like this:

        SHELL=SHELLMAX.COM /REPORT:- /PAUSE:+ /FAKESTUB:+ C:\COMMAND.COM C:\ /P
        SHELL=SHELLMAX.COM -REPORT:- -PAUSE:+ -FAKESTUB:+ C:\COMMAND.COM C:\ /P
        SHELL=SHELLMAX.COM /REPORT:-/PAUSE:+/FAKESTUB:+ C:\COMMAND.COM C:\ /P
        SHELL=SHELLMAX.COM -REPORT:--PAUSE:+-FAKESTUB:+ C:\COMMAND.COM C:\ /P

        Obviously when using full words, it is easier to keep the words
        separated so that is clear to read.  The optional [:] is used
        for toggle switches (i.e. REPORT:+).  These optional delimiters
        can also be used with the single letter switches.  Exact spelling
        is required because the single letter interface is still intact.

(Switch Options)::

        The following list of switch options is organized by:

          - Control of SHELLMAX Reports (/R:/P:/N:)
          - Control the Configuration of a Fake Low Memory Stub (/S:)
          - Response file for SHELLMAX (@)

    (Control of SHELLMAX Reports)::

        (REPORT)::      R[+ or -]        (toggle:  default +)

        Use /R- or /REPORT:- to disable the report after you are
        satisfied with the configuration of STOPMAX.SYS

        (PAUSE)::       P[+ or -]        (toggle:  default +)

        Use /P- or /PAUSE:- to disable the pause after the report as
        long as there are no errors or warnings.

        (NOPAUSE)::     N[+ or -]        (toggle:  default -)

        Use /N+ or /NOPAUSE:+ to never pause after the report, even if
        there are errors.  This switch can be used if your configuration
        generates a warning or error message which you choose to ignore.

    (Control the Configuration of a Fake Low Memory Stub)

        (FAKESTUB)::    S[+ or -]        (toggle:  default -)

        If you use SHELLMAX to load the shell high, then some programs
        (environment editors and some networks), are confused that no
        portion of the primary shell is is low memory.  Use /S+ or
        /FAKESTUB:+ to tell SHELLMAX to create a fake stub, which looks
        like the primary shell, in low memory.  This stub tracks changes
        to the Master Environment segment pointer by monitoring the real
        stub high (each "get exit code of sub-program"  INT 21h, 4Dh).
        The stub size is 256 bytes, so if you use 4DOS, and find that
        you need the low stub, it is better to just let 4DOS do it and
        not use SHELLMAX.

  (Response file for SHELLMAX)::

        Parameters for SHELLMAX may be read from a response file by using the
        @pathname syntax:

        SHELLMAX.COM @RESPONSE.FIL C:\COMMAND.COM C:\ /E:512 /P

        Notice that the path to the SHELL is cannot be in the response file.

        Response files may be commented by using a ";","#",or "*" character
        before the comment.

        *  everything in square brackets "[]" is optional

(CONFIG.SYS Line)::

        SHELL=SHELLMAX.COM [/R-/P+/N+/S+] COMMAND.COM /P

        default:  /R+/P-/N-/S-

        *  Report status messages
        *  Don't Pause after report
        *  Pause on errors or warnings
        *  Don't Fake stub low

================================================================================

(Report Format)::

    SHELLMAX.COM (8086):  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
                 ERROR :  (Error Messages)
               WARNING :  (Warning Messages)
                ADVICE :  (Advisory Messages)
                       :  (Report Messages)
                       :  (Allocation Status)
                 PAUSE :  Press any key to continue...

================================================================================

(Error Messages)::

        MS-DOS version 3.10 or above is required
        Bad or missing program specification
        Use SHELLMAX.COM only as CONFIG.SYS SHELL=
	Not enough memory to execute
        Fatal Error, program halted

================================================================================

(Warning Messages)::

        Unknown option in command line
        Unknown option on line #0000
        Extra characters on command line
        Missing or invalid option file XXXXXXXX.XXX
        Line length overflow at line #0000
        Unable to load high, loading low

================================================================================

(Advisory Messages)::

================================================================================

(Report Messages)::

        Processing option file XXXXXXXX.XXX
	Effection section is [XXXXXXXX]

================================================================================

(Allocation Status)::

        SHELL    loaded at 0000
        Not enough Hi Memory for SHELL
        STUB     faked at 0000

================================================================================

(Changes)::

    (Version 1.7)::

    (1)  Found a workaround to 4DOS 4.x initialization hang.  4DOS now will
         load properly.  One caveat, add path to 4DOS to the 4DOS command
         line or 4DOS will not find 4DOS.INI or set the COMSPEC variable
         correctly.

    (2)  Corrected problem with DOS 3.x and DOS 4.x when the standard handles
         were getting closed by mistake.

    (3)  When COMMAND.COM path argument was a different drive then the boot
         drive, COMMAND.COM was looking for the AUTOEXEC.BAT on the drive
         of the argument instead of the boot drive.  Fixed so COMMAND.COM
         processes the AUTOEXEC.BAT from the boot drive.

    (4)  Version bumped to match DOSMAX

    (Version 1.8)::

    (1)  Added /S+ option to create a fake primary shell stub in low memory.
         This works around environment editor and network compatability
         problems.

    (2)  Improved error recovery with the goal of trying every way of at
         least loading some shell in the event the algorithum of SHELLMAX
         encounters multiple errors.

    (Version 1.9)::

    (1)  Reorganized code to enable an overlay method of module selection
         to automate processor selection and split up .SYS and .EXE modules
         to reduce the initialization memory to minimum.

    (2)  SHELLMAX now automatically detects the processor type and chooses
         separate code modules if appropriate.  The 186 processor require-
         ment of previous versions is no longer applicable.

    (3)  Added optional full word syntax to argument parser.  The old style
         single letter switch interface is still intact.  The switch lists
         now show the optional word with the switch.

    (Version 2.0)::

    (1)  Completely rewritten.  Added feature to edit command line if
         the SHELL is bad or missing.

    (2)  Added option response file input with @filename.opt syntax

    (Version 2.1)::

    (1)  Fixed problem with finding DOS 6.0 CONFIG variable for machines
         whose bios'es don't intialize memory properly.

================================================================================

STOPMAX.DOC


================================================================================
       STOPMAX.SYS :  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
================================================================================

  STOPMAX.SYS is a derivative of DOSMAX.EXE.  The algorithums of DOSMAX which
  "stop" the DOS 5.0 and above kernel from loading into the HMA have been
  assembled separately into STOPMAX.SYS.  This allows DOSMAX.EXE to load high
  after the memory manager has installed and still put the DOS kernel into a
  UMB.  STOPMAX is specifically for DOS 5.0 and above users and will not work
  with DOS versions prior to DOS 5.0 and above.

  STOPMAX prevents DOS from loading into the HMA using one of the for methods
  which are also part of DOSMAX.  The default method "/B," patches the DOS
  5.0 and above initialization code.  This method and the "/V" (VDISK header
  method), do not require any resident memory, so STOPMAX simply executes and
  returns all memory to DOS.  DOSMAX should then be loaded as a DEVICE, after
  the memory manager and there is no restriction as to when DOSMAX should be
  installed.

  Support is provided for:

        * Stopping DOS from loading into the HMA

================================================================================

(Requirements)::

        * Requires MS-DOS Version 5.00 or above

================================================================================

(Installation)::

        (CONFIG.SYS)::

        Installation of STOPMAX.SYS requires modifying the contents of
        your CONFIG.SYS file.

(Generic Configuration)::

        This configuration should work and be the most efficient in 95%
        of all configurations.  For a few real world examples see
        EXAMPLES.DOC

        DOS=HIGH[,UMB]                    (DOS 5.0 and above only)
        DEVICE=STOPMAX.SYS [options]      (Stops kernel from loading in HMA)
        DEVICE=(xms/umb memory manager)
        DEVICE=DOSMAX.EXE [options]       (DOSMAX loads high automatically)
        SHELL=SHELLMAX.COM COMMAND.COM /P
        BUFFERS=20
        FILES=40
        LASTDRIVE=Z

        DOS 5.0 and above users should configure DOS to load high into
        the HMA.  The UMB parameter is optional, since both DOS 5.0 and
        above upper memory management and XMS upper memory blocks are
        supported by DOSMAX.

        DOS=HIGH[,[UMB][NOUMB]] (Both DOS UMB's and XMS UMB's supported)

        Add a DEVICE= line for STOPMAX.SYS in your config.sys.  STOPMAX
        must be loaded before the XMS and UMB memory manager, but some
        memory managers provide high memory but not an HMA.  If your
        memory manager does not support an HMA, then STOPMAX is not
        necessary.  DOSMAX is then loaded "after" the memory manager

        HIMEM.SYS from Microsoft always puts the DOS 5.0 and above kernel
        into the HMA before it is through initializing and then puts its
        own code into the HMA.  If you are able to load HIMEM.SYS high
        (using some upper memory providers, not EMM386.SYS), you can now
        use the /I+ switch to stop HIMEM from loading DOS into the HMA,
        and STOPMAX will put it into a UMB instead.  The /B+ option (default)
        also stops HIMEM.SYS from putting the DOS kernel into the HMA.  If
        you use only DOS 5.0 and above files, meaning HIMEM.SYS and EMM386.SYS
        you should not use STOPMAX.

        DEVICE=STOPMAX.SYS [options]
        DEVICE=(Memory Manager)
        ......
        DEVICE=DOSMAX.EXE [options]

        By default, STOPMAX.SYS will generate a message for each successful
        operation or event.  The display then pauses to allow you to
        read the report.  After you are satisfied with the configuration
        and you want to disable the REPORT and PAUSE feature, use:

        DEVICE=STOPMAX.SYS /R- /P-

        All switch options and possible messages for STOPMAX are detailed
        below:

================================================================================

(Syntax)::

        The only thing to remember about syntax for the command line is
        that just about anything works.  What this means is that you
        should be able to type in the options on the command line the
        way they make sense to you.

        To illustrate this point, the following command line example
        is mutated several different ways.

        DEVICE=STOPMAX.SYS /R- /P- /B+
        DEVICE=STOPMAX.SYS -R- -P- -B+
        DEVICE=STOPMAX.SYS R- P- B+
        DEVICE=STOPMAX.SYS R-P-B
        DEVICE=STOPMAX.SYS -R-P-B

        ... and so on.

        STOPMAX 1.9 and above adds optional full word syntax.  The new
        syntax looks like this:

        DEVICE=STOPMAX.SYS /REPORT:- /PAUSE:- /IOPATCH:+
        DEVICE=STOPMAX.SYS -REPORT:- -PAUSE:- -IOPATCH:+
        DEVICE=STOPMAX.SYS REPORT:- PAUSE:- IOPATCH:+
        DEVICE=STOPMAX.SYS REPORT-PAUSE-IOPATCH:+
        DEVICE=STOPMAX.SYS -REPORT-PAUSE-IOPATCH:+

        Obviously when using full words, it is easier to keep the words
        separated so that is clear to read.  The optional [:] is used
        for toggle switches (i.e. REPORT:+).  These optional delimiters
        can also be used with the single letter switches.  Exact spelling
        is required because the single letter interface is still intact.

(Switch Options)::

        The following list of switch options is organized by:

          - Control of STOPMAX Reports (/R:/P:/N:)
          - Control the Location of the DOS Kernel (/B:/V:/I:)

    (Control of STOPMAX Reports)::

        (REPORT)::      R[+ or -]        (toggle:  default +)

        Use /R- or /REPORT:- to disable the report after you are
        satisfied with the configuration of STOPMAX.SYS

        (PAUSE)::       P[+ or -]        (toggle:  default +)

        Use /P- or /PAUSE:- to disable the pause after the report as
        long as there are no errors or warnings.

        (NOPAUSE)::     N[+ or -]        (toggle:  default -)

        Use /N+ or /NOPAUSE:+ to never pause after the report, even if
        there are errors.  This switch can be used if your configuration
        generates a warning or error message which you choose to ignore.

    (Control the Location of the DOS Kernel)::

        (IOPATCH)::     B[+ or -]        (toggle:  default -)

        Use /B+ or /IOPATCH:+ to stop DOS from loading in the HMA using
        a method which patches the copy of DOS 5.0 initialization code in
        memory when STOPMAX initializes.  This method will search and
        "patch out" the DOS to HMA code.  This option was developed and
        tested under MSDOS 5.0 and 6.0 and is not guaranteed to work with
        DOS versions later than 6.0, but then many of the algorithums in
        STOPMAX depend upon "undocumented" features of DOS which are always
        subject to change anyway.  The advantage of this method is that it
        works no matter which memory manager is used or how it is configured.

        (VDISK)::       V[+ or -]        (toggle:  default -)

        Use /V+ or /VDISK:+ to enable an alternate method of stopping
        DOS from allocating the HMA.  This switch is only necessary
        if STOPMAX reports that the DOS version is incompatible, and
        it will only work with memory managers which can detect a
        VDISK Header in the HMA when the memory manager initializes
        and mark's it as allocated.

        (STOPHIMEM)::   I[+ or -]        (toggle:  default -)

        Use /I+ or /STOPHIMEM:+ to stop HIMEM.SYS from loading DOS HIGH.
        This switch is intended for users who load HIMEM.SYS from
        Microsoft high after their UMB provider.  This option is not
        very useful if HIMEM.SYS is not loaded high because HIMEM will
        grow to about 30k in size.  If you still want to inhibit HIMEM,
        then load it last, to minimize the "growth."  The reason HIMEM
        "grows" is because the code which normally goes to the HMA is
        fixed at offset 0A000, so if HIMEM is loaded below 0A00h, the
        size of HIMEM grows to 0A00h + the size of the HMA code + the
        size of the XMS handle table.  This option affects the size of
        STOPMAX and adds 32 bytes.

        *  everything in square brackets "[]" is optional

(CONFIG.SYS Line)::

        DEVICE=STOPMAX.SYS [/-][R-P+I+N+V+B-]

        device default:  /R+/P-/N-/B+/I-/V-

        *  Report status messages
        *  Don't Pause after report
        *  Pause on errors or warnings

================================================================================

(Report Format)::

        STOPMAX.SYS :  Ver. 2.1, Copyright (1992,93) by Philip B. Gardner
             ERROR :  (Error Messages)
           WARNING :  (Warning Messages)
            ADVICE :  (Advisory Messages)
                   :  (Report Messages)
                   :  (Allocation Status)
             PAUSE :  Press any key to continue...

(Report Note)::

        STOPMAX.SYS may be replaced by STOPMAX.OVL.  The exact name of the
        module is dependent upon the circumstances under which STOPMAX.SYS
        reports.  This detail is important only as diagnostic information.

================================================================================

(Error Messages)::

        MS-DOS version 5.00 or above is required
        An 80186 processor or better is required
        Can't load in High Memory
        DOS version is not compatible
        Not necessary for versions below DOS 5.0
        DOS is HIGH already
        Include DOS=HIGH in CONFIG.SYS
        Couldn't write VDISK Header
        Stop DOS to HMA patch not successful

================================================================================

(Warning Messages)::

        Unknown option in command line
        Unknown option on line #0000
        Extra characters on command line
        Missing or invalid option file XXXXXXXX.XXX
        Line length overflow at line #0000

================================================================================

(Advisory Messages)::

        Should be the first DEVICE= in CONFIG.SYS
        Try using /V+ switch
        Try using /B+ switch

================================================================================

(Report Messages)::

        Processing option file XXXXXXXX.XXX
	Effection section is [XXXXXXXX]

================================================================================

(Allocation Status)::

================================================================================

(Changes)::

    (Version 1.6)::

    (1) Added check for a 186 processor or better (allows V20/V30).

    (2) Removed the check for an XMS manager and a check for extended
        memory.  This allows machines without extended memory to use
        UMB providers, which do not require extended memory, with STOPMAX.
        These checks were redundant since if DOS is in the HMA when
        STOPMAX loads, the message "DOS is HIGH already" is reported.

    (3) Added /I option which inhibits HIMEM.SYS from loading DOS HIGH.
        This switch is not very useful if HIMEM.SYS is not loaded high,
        since HIMEM will be about 30k in size.  This switch is intended
        for users who load HIMEM high after their UMB provider is installed.

    (4) Now supporting separate program STOPM86.SYS.  This program is
        functionally identical to STOPMAX.SYS, but is compiled to work
        on 8086/8088 processors also.  I have learned that there are
        8086/8088 machines which can be configured with High Memory
        using some High Memory Managers, and this variation will make
        it possible for those users to put DOS in a UMB even though
        there is no HMA.  STOPM86.SYS requires 32 more bytes of memory.

   (5)  Added /B+ option which will stop DOS from going to the HMA by
        patching the DOS initilization code in memory.  This method
        works no matter which memory manager is in use or how it is
        configured.  It also requires no resident memory.  I made this
        the default method for STOPMAX.

   (Version 1.7)::

   (1)  Changed common parsing algorithum to support Hex-Notation input.
        This input method is not used in STOPMAX at this time.

   (Version 1.8)::

   (1)  Changes in STOPMAX common code for specific 386MAX support.

    (Version 1.9)::

    (1)  Reorganized code to enable an overlay method of module selection
         to automate processor selection and split up .SYS and .EXE modules
         to reduce the initialization memory to minimum.

    (2)  STOPMAX now automatically detects the processor type and chooses
         separate code modules if appropriate.  The 186 processor require-
         ment of previous versions is no longer applicable.

    (3)  Added optional full word syntax to argument parser.  The old style
         single letter switch interface is still intact.  The switch lists
         now show the optional word with the switch.

    (4)  STOPMAX updated for DOS 6.0.  Corrected a coding error while moving
         buffers.

    (Version 2.0)::

    (1)  Added response file input with @filename.opt syntax

    (Version 2.1)::

    (1)  Fixed problem with finding DOS 6.0 CONFIG variable for machines
         whose bios'es don't intialize memory properly.

================================================================================

Directory of PC-SIG Library Disk #3964

 Volume in drive A has no label
 Directory of A:\

FW3      BAT       408   6-06-93   9:21p
FW4-6    BAT       378   6-06-93   9:21p
ENVIMAX  COM      7918   6-06-93   9:21p
SHELLMAX COM      8182   6-06-93   9:21p
DOSMAX   DOC     33517   6-06-93   9:21p
ENVIMAX  DOC      6157   6-06-93   9:21p
EXAMPLES DOC     13835   6-06-93   9:21p
FREELOAD DOC     17573   6-06-93   9:21p
SHELLMAX DOC     10997   6-06-93   9:21p
STOPMAX  DOC     13802   6-06-93   9:21p
DOSMAX   EXE     57210   6-06-93   9:21p
README   MAX      4877   6-06-93   9:21p
FREELOAD SYS     21294   6-06-93   9:21p
STOPMAX  SYS     14776   6-06-93   9:21p
FILE_ID  DIZ       326   6-06-93   9:21p
GO       BAT        84   9-09-93   9:02a
SHOW     EXE      2040   9-12-88  10:48a
       17 file(s)     213374 bytes
                      101376 bytes free