
              Patching COMMAND.COM default environment size
              =============================================
            
            
DOS provides a method to tell COMMAND.COM how  much  environment  space  you
want:    COMMAND.COM /E:nn     where nn is the number of bytes you want.

You may use this feature in your CONFIG.SYS file with the SHELL command:
         SHELL=C:\COMMAND.COM /P/E:nn

You can read more about this in your DOS manual.

The problem is when an application (any DOS shell like Norton Commander  or
PC-Tools for example) launches a new copy of COMMAND.COM.

The default environment size for a new COMMAND.COM being loaded is hardcoded
in the COMMAND.COM program and is in most of the case largely  insufficient.
Here is the way to change this value.

The presented sections of code are from MS-DOS 5.00 dis-assembled with DEBUG
so that those with  other  versions  of  DOS  find  the  offsets  for  their
COMMAND.COM. In other DOS versions, the section of code  to  be  patched  is
unchanged, it is simply shifted in position  so  it's  just  a  question  of
locating the correct offsets by searching for  strings  of  bytes  from  the
sections of code listed below. The main trick here is to avoid addresses  in
the code which are likely to be different (most absolute addresses  will  be
different while relative addresses may or may not  be  different).  Assuming
you're handy with DEBUG or a similar debugger and know some  8088  assembly,
you should be able to pull it off. If DEBUG's search command is too limited,
you might try unassembling the whole COMMAND.COM to a text file and using an
editor or lister utility to search.
                                         
                                         
ENVIRONMENT SIZE:       This example is for MS-DOS 5.0

-u 165b

1111:165B 58            POP   AX
1111:165C C706C01E5100  MOV   WORD PTR [1EC0],0051
1111:1662 C706BE1E1000  MOV   WORD PTR [1EBE],0010  <<default envir. size>>
1111:1668 BAD498        MOV   DX,98D4
1111:166B B104          MOV   CL,04
1111:166D D3EA          SHR   DX,CL
1111:166F 8916CE1E      MOV   [1ECE],DX
1111:1673 2BC2          SUB   AX,DX
1111:1675 A39802        MOV   [0298],AX
1111:1678 A12C00        MOV   AX,[002C]


The default value for the environment size is 10 paragraphs of 16 bytes.
So, to change your default environment size to 1280 (50 paragraphs), type:

        DEBUG COMMAND.COM
        -E 1666 50 00
        -W
        -Q


Here are the offsets for some MS-DOS versions:

6.22: 1777 (default size: 20h * 16 bytes = 512)
6.20: 1777 (default size: 20h * 16 bytes = 512)
6.00: 1767 (default size: 20h * 16 bytes = 512)
5.00: 1666 (default size: 10h * 16 bytes = 256)
3.30: 0Eb8 (default size: 0Ah * 16 bytes = 160)

Search for ''C7 06 xx xx 10 00' for other DOS versions
                         ^^
                         or 0A, 20, ...
