Contents of the DOSENVN.TXT file
For a Greener Environment
(PC Magazine Vol 5 No 4 Feb 25, 1986 PC Tutor)
You may encounter the "Out of Environment Space" error message
when using the SET command to set up the environment. The DOS manual
mentions a limit of 127 bytes if a resident program has been loaded,
but even without using any resident programs, you may have the problem.
If you have not loaded any resident programs, the DOS manual is
correct: you can sit at your keyboard all day and enter multitudes of
SET commands, gradually filling up your environment to its 32K-byte
maximum limit. Of course, normal people don't do that. Normal people
put a PATH command, a PROMPT command, and a bunch of SET commands in
an AUTOEXEC.BAT file. The whole purpose of batch files is to avoid
having to type a lot of commands manually. But, as soon as you run an
AUTOEXEC.BAT file, the environment becomes limited to 160 bytes.
When COMMAND.COM runs a batch file, it allocates a small area of
memory to store the batch file name and other information. This is
needed to return to execution of the batch file after running commands
and programs within the batch file. For AUTOEXEC.BAT, this area of
memory is placed 160 bytes after the beginning of the environment that
COMMAND.COM maintains. Thus, it acts like a brick wall, effectively
preventing the expansion of the environment beyond 160 bytes.
DOS 3.1 does have a way to enlarge the environment. What you
must do is use a CONFIG.SYS file to specify COMMAND.COM as a SHELL.
This is done with a line in the CONFIG.SYS file that reads:
SHELL=COMMAND.COM /P /E:62. Without the /P parameter, COMMAND.COM
would not execute the AUTOEXEC.BAT file. (This is something that goes
back to DOS 2.0.) The /E parameter is new with DOS 3.1. The value
following the colon is the number of 16-byte paragraphs reserved for
the environment. The default is 10 paragraphs (160 bytes) and the
maximum is 62 (992 bytes). (If you set the value below 10 or above 62,
COMMAND.COM will use the default of 10.)
Where can you find this documented? If you load DOS 3.1
COMMAND.COM under DEBUG and unassemble the code beginning at offset
address 0E16, it is obvious.
The DOS environment has yet to be fully exploited. Some compilers
and assemblers search the environment for directories where library and
include files may be found, but the environment can also serve as an
all-purpose configuration file for application programs, as well. An
undocumented feature of DOS 2.0 and above allows environment strings
to be used as replaceable parameters in batch files -- most usefully
in conjunction with the IF statement. For example, if you have a
batch file that must do one of two different things depending upon
whether ANSI.SYS has been loaded or not, you could use SET to create
an environment string with this information: SET ANSI=ON or
SET ANSI=OFF. You could then check for his in a batch file, with the
statement: IF %ANSI%==ON GOTO label. If COMMAND.COM finds ANSI in
the environment, it replaces it with the set string when the batch
file is processed. If ANSI had been set ON, the GOTO is executed; if
set to OFF, the next statement is processed.
This undocumented feature works with DOS versions 2.0, 2.1 and
3.1, but a bug in 3.0 makes COMMAND.COM stop reading the batch file
line after it replaces the parameter.
(PC World April 1986 Star-Dot-Star)
DOS generally provides an insufficient amount of environment
string space. Environment string space is a block of memory that DOS
reserves to hold names and parameters, such as COMSPEC = parameter,
PATH = parameter(s), and PROMPT = parameter(s). This arrangement
enables all DOS commands and applications to be "aware" of the current
status of the environment (see the SET command in the DOS manual).
COMMAND.COM can be patched to expand that space, but DOS 3.1 includes
an undocumented parameter that does the job more efficiently.
That parameter is /E:nn, where nn is a decimal value indicating
the number of 16-byte paragraphs to be allocated as environment space.
The minimum value permitted is 10 (160 bytes), the maximum is 62 (992
bytes). To use this feature, put the statement:
SHELL = [d:][path] COMMAND.COM /P/E:nn
into the CONFIG.SYS file on your DOS disk. [d:] and [path] represent
the disk drive and path you want DOS to use when loading COMMAND.COM,
and nn represents the desired number of 16-byte paragraphs to be
allocated to environment space.
When you start the computer, the SHELL command will load
COMMAND.COM using the /E parameter to allocate the specified amount
of environment space and the /P parameter to make COMMAND.COM the
primary command processor.
Note that if you specify an invalid number of paragraphs, you
will not receive an error message; the allocation simply will not take
place. This is an undocumented feature -- use it with caution.
RAM Disks Take Command
(PC World The Help Screen June 1986)
A user put COMMAND.COM in a RAM disk so that DOS could reload
COMMAND.COM quickly rather than issue the prompt "Insert COMMAND.COM
disk in drive A: and strike any key when ready" or "Invalid COMMAND.COM
in drive A:". The solution for a way to tell DOS that COMMAND.COM was
on drive C: was to issue the command COMMAND C:\ after copying
COMMAND.COM to drive C:. The explanation:
COMMAND.COM is the DOS command processor. It loads automatically
from the default drive - usually drive A: - when you start a computer.
The command COMMAND C:\ causes DOS to load a new copy of COMMAND.COM
from the root directory of drive C:. This secondary command processor
runs under the first. DOS maintains an environment table that stores
the drive, directory, and name of each command processor it loads.
When it needs to reload a particular command processor, it checks the
related environment table to locate the appropriate command processor
While this technique reloads COMMAND.COM from drive C:, it wastes
memory. You don't need to load a secondary command processor. You
only need DOS to use the copy of COMMAND.COM that resides on drive C:.
If you're using DOS 3.0 or later, load it as you before you tried your
solution. Next, copy COMMAND.COM to drive C:. Follow that by typing
SET COMPEC=C:\COMMAND.COM to change the environment table.
(You can view the contents of the environment table by typing SET
.) DOS will now use the copy of COMMAND.COM in drive C:
whenever it needs to reload the command processor.
In earlier versions of DOS the SET command does not work right.
You can use CMDFIX.COM (PC World July 1985 Star-Dot-Star) instead of
the SET command to change the COMSPEC entry in the environment table.