# First steps towards system programming under MS-DOS 7/Configuration commands

Chapter 4 Configuration commands
MS-DOS 7 loading configuration is prescribed by configuration options in three non-formatted textual files which must be present in root directory of the bootable disk : MSDOS.SYS (5.01-01), CONFIG.SYS (9.01-01) and AUTOEXEC.BAT (9.01-02).
Among these the CONFIG.SYS file has the most long history in previous versions of DOS. It defines a number of very important parameters and a set of software drivers to be loaded at boot time. Each line in CONFIG.SYS is a command to the IO.SYS loader (5.01-01). Interpretation of commands by the latter differs considerably from that by the most known command interpreter, the COMMAND.COM (6.04). There must be other commands and other syntax in CONFIG.SYS file.
Though several configuration commands (4.02, 4.24, 4.25) are synonymous to those executed by the COMMAND.COM interpreter, the IO.SYS loader deals with them in a different way. The loader doesn't allow to omit file's suffixes, doesn't execute redirections, doesn't substitute variable's values for their names. Command execution order in CONFIG.SYS depends not only on line's order, but also on command's priorities (see 4.15 and 4.25 for details). There is a group of commands (4.19, 4.20, 4.21, 4.29) that can be specified in menu and submenu blocks only, and other commands (except 4.23) in these blocks can't be used.
Several commands (4.01, 4.04, 4.11, 4.13, 4.18, 4.28) have no equivalents in previous versions of MS-DOS; some other commands (4.08, 4.30) have been changed in MS-DOS 7, new parameters have been added. Inherited configuration commands which invoke loading procedures, in MS-DOS 7 are treated otherwise — as loading beyond conventional memory by default : DEVICE is executed just as DEVICEHIGH, BUFFERS – as BUFFERSHIGH, and so on. If a certain driver must be loaded into conventional memory, implicit defaults should be discarded by specifying the NOAUTO parameter in DOS command (4.08). These and other peculiarities of configuration commands and of their interpretation by IO.SYS loader are described in detail in articles below.

## 4.01 ACCDATE – registration of last access date

The ACCDATE command (ACCess DATE) enables or disables writing the date of last access into a directory entry (A.09-1), related to the accessed file. By default the last access date is registered in hard disk drives, but is not written on floppies. In a command line after the name of ACCDATE command you may specify any number of disk’s letter-names with following plus sign (= permit registration) or minus sign (= prohibit registration), for example :
       ACCDATE C+ D- E- RWhen
access date registration is disabled, disk access operations are performed faster.

## 4.02 BREAK – disk access intercept control

The BREAK command affects the state of a binary flag which controls disk access intercepts. By default the BREAK flag is turned off, and then the BREAK and CTRL-C keystrokes (1.03) are checked only during the CON driver addressing operations. Hence the user can suspend or terminate execution of current procedure only when the latter addresses the CON driver: sends output to screen or waits for input from keyboard.
The BREAK flag can be turned on with command:
       BREAK ON
Since that moment the BREAK and CTRL-C keystrokes will be checked during disk access operations too. This gives an opportunity to suspend or to terminate execution of current procedure at the moments it addresses disk drives. Additional check makes disk operations a little slower. To disable the check the BREAK flag should be turned off with command :
       BREAK OFF
After successful termination of IO.SYS loader's mission the BREAK command remains supported by command interpreter COMMAND.COM (3.01).

## 4.03 BUFFERS – number of buffers

Command BUFFERS reserves memory for 512-bytes-long buffers that serve as a cache for sectors read from disks. By default MS-DOS 7 arranges 30 primary buffers and 0 secondary buffers. The BUFFERS command enables from 1 to 99 primary buffers and from 0 to 8 secondary buffers. Secondary buffers are needed when double buffering should be arranged by the DBLBUFF.SYS driver (5.06-02). For example, command BUFFERS=12,6 reserves 9 kb of memory for 12 primary and 6 secondary buffers. Disk reading and writing operations may become slow when number of buffers is less than 30. But when the SMARTDRV.EXE driver (5.06-01) is installed, then the number of buffers can be reduced to 10.

### Notes

* By default the buffers are created beyond the 640 kb boundary of conventional memory, but may be arranged below 640 kb, if in DOS command (4.08) the NOAUTO parameter is specified, and also if the address space in UMB region is insufficient or unavailable (availability conditions in 4.07). In any case no error message will be displayed.
* In some computers the DMA controller can't provide access to UMB region or to its part, though the whole UMB region is opened by UMBPCI.SYS driver (5.04-04). In such computers it's better to arrange buffers outside UMB region : in conventional memory or in a space beyond 1088 kb, opened by EMM386.EXE driver (5.04-02). Sometimes this problem can be solved by auxiliary LOWDMA.SYS driver, supplied together with UMBPCI.SYS.

## 4.04 BUFFERSHIGH – number of buffers in UMB address space

The BUFFERSHIGH command is almost equivalent to BUFFERS command (4.03), except that BUFFERSHIGH command attempts to arrange buffers beyond conventional memory despite presence of NOAUTO parameter in DOS command (4.08). All other information in article 4.03 is equally applicable to BUFFERSHIGH command.

## 4.05 COUNTRY – loading national adaptation data

The COUNTRY command initializes selective copying of national adaptation data from COUNTRY.SYS data file (5.02-01) into internal DOS's data tables (A.02-4, A.02-5). Thus DOS settings become adapted to localized rules of a particular country. Besides other features, national adaptation enables access to files and directories having specific national characters inside their names. Here is an example of a line with COUNTRY command :
       COUNTRY=007,866,C:\DOS\DRV\Country.sys
where :
| 007 | – | country code, in particular for Russia |
| 866 | – | number of codepage with Russian character set |
| C:\DOS\DRV\ – example of a path to Country.sys file |||

### Notes

* For other country codes and codepage numbers see appendix A.02-2

## 4.06 DEVICE – loading a device driver

The DEVICE command is used to load those drivers which have a header of special format (A.05-1) and should be loaded into memory when DOS's system structure arrangement is not finished yet. Most often (but not necessarily) these drivers are given the .SYS suffix. Drivers with .COM and .EXE suffixes may have no special header, and then such drivers should be loaded not by DEVICE command, but by INSTALL command (4.15).
Here is an example of a line with DEVICE command loading a driver with .SYS suffix :
       DEVICE=C:\DOS\DRV\Himem.sys /EISA /V
where :
* Himem.sys – an example of driver’s name
* C:\DOS\DRV\ – an example of a path to the driver
* /EISA /V – an example of a parameters group for the driver ; it must conform to parameter specifications for this particular driver.
Here is one more example of a DEVICE command loading another driver :
       DEVICE?=\DOS\DRV\Emm386.exe RAM /V
Besides the driver itself, the latter string presents two differences. First, the path (\DOS\DRV\) without preceding disk’s letter-name is suitable for loading from any disk, even when the disk’s letter-name is not known beforehand. The second difference is an optional question mark "?", appended to the DEVICE command. This mark forces the IO.SYS loader to suspend further execution and to display the line, followed by a query whether to load the specified driver or not :
       [Enter=Y, Esc=N]?
Thus the DEVICE command may be used to compose selective loading configurations.

### Notes

* By default the drivers are loaded beyond conventional memory (above 640 kb), but may be loaded below 640 kb, if in DOS command (4.08) the NOAUTO parameter is specified, and also if address space in UMB region is insufficient or unavailable (availability conditions in 4.07). In any case no error message will be displayed.
* DEVICE command can't be involved in address space optimization procedure in UMB memory region. If this feature is significant, the DEVICEHIGH command (4.07) should be used instead.

## 4.07 DEVICEHIGH – loading a driver via UMB address space

The main purpose of DEVICEHIGH is almost the same as that of the DEVICE command (4.06), but DEVICEHIGH attempts to load drivers beyond conventional memory despite the presence of NOAUTO parameter in DOS command (4.08). Of course, the UMB region address space must be made accessible beforehand. Therefore the following conditions must be met :
* computer must be equipped with 80386 or newer processor ;
* the UMB parameter must be specified in DOS command (4.08) ;
* HIMEM.SYS driver (5.04-01) must be loaded yet by DEVICE command ;
* either EMM386.EXE (5.04-02) or UMBPCI.SYS (5.04-04) driver must be loaded yet by DEVICE command in the following line of CONFIG.SYS file.
When DEVICEHIGH command is used in its simplest form, for example
       DEVICEHIGH=C:\DOS\DRV\Setver.exe
the specified driver (Setver.exe) will be loaded so that it could be addressed via that part of UMB region which has the largest free block of address space, provided this free block is sufficient for the specified driver.
Just as DEVICE command, the DEVICEHIGH command can be appended by a question mark : DEVICEHIGH?=.... It will cause this line to be displayed, then execution will be suspended with an offer for the user to decide whether the shown driver is to be loaded or not.
The DEVICEHIGH command gives an opportunity to specify a particular area of UMB address space for access to the loaded driver, for example :
       DEVICEHIGH /L:1,15792 =C:\DOS\DRV\Display.sys CON=(EGA,,1)
where :
| /L:1 | – | an example of UMB address space area number: it may be found from listing, shown by the MEM.EXE utility (6.17), being executed with /F parameter. |
| 15792 | – | optional size of address space to be devoted to the specified driver (generally it is not equal to driver's file size). |
If a particular driver is composed of several parts that can be addressed via different areas of UMB address space, then several address space areas may be allocated in one command, with or without size specification for each area, for example /L:2;3 or else /L:2,12192;3,3600
Note that size is preceded by a comma, and different area specifications are separated by a semicolon.
If size of the devoted area is specified, the DEVICEHIGH command can accept optional /S option switch :
       DEVICEHIGH /L:1,35008 /S =C:\DOS\DRV\MOUSE.SYS
The /S parameter means that allocated UMB block should be truncated to specified size. This leads to the most efficient address space usage, but doesn't guarantee from a crash, if size specification is not quite correct. Both block size and the /S parameter shouldn't be specified unless a memory allocation optimization procedure is performed by the MEMMAKER.EXE utility (5.04-03). As a result of this procedure both /S and /L parameters together with exact area specifications will be automatically written into each line with DEVICEHIGH command.

### Notes

* If address space in UMB region is insufficient or unavailable, then the DEVICEHIGH command will load driver(s) into conventional memory (below 640 kb), and no error message will be displayed.

## 4.08 DOS – introduction of DOS’s loading options

By default the core of MS-DOS 7 is loaded into conventional memory. If the HIMEM.SYS driver is already installed, the DOS's core may be loaded into high memory region 1024–1088 kb. For this purpose the CONFIG.SYS file must contain a line with command
       DOS=HIGH
Furthermore, if UMB address space is available, by either the EMM386.EXE driver (5.04-02) or by UMBPCI.SYS driver (5.04-04), MS-DOS 7 may be allowed to use UMB space for addressing DOS's system structures and drivers. This is achieved by command :
       DOS=UMB
In MS-DOS 7, one more optional parameter NOAUTO is introduced, which means that the IO.SYS loader must disable its defaults for implicit loading of several drivers (HIMEM.SYS, DBLBUFF.SYS, IFSHLP.SYS, DBLSPACE.SYS) as well as for loading beyond 640 kb with ordinary loading commands DEVICE, INSTALL and some others (4.03, 4.06, 4.10, 4.12, 4.15, 4.17, 4.27). In fact, NOAUTO enables to configure MS-DOS 7 as a separate operating system. All parameters of the DOS command may be specified in one line :
       DOS=HIGH,UMB,NOAUTO

### Notes

* The DOS command accepts one more parameter SINGLE, which enables to load MS-DOS 7 when otherwise the Windows 95/98 OS were loaded. But this way to load MS-DOS 7 comes with inappropriate questions to the user and entails increased risk to fall into reboot. Therefore other methods of loading MS-DOS 7 should be preferred, those listed in article 1.03.

## 4.09 DRIVPARM – replacement of drive’s parameters

The DRIVPARM command (DRIVe PARaMeters) is a means to provide access to storage media in those devices which can't be identified properly by PC's BIOS. In fact, those devices are implied, which were known yet to MS-DOS 7 at the moment of its release in 1996, but were not known to BIOS of obsolete computers, produced in early 1990s or even earlier. Here is an example of DRIVPARM command usage for providing access to a 3,5-inch floppy drive in an old PC with BIOS support only for 5,25-inch floppy drives :
       DRIVPARM /D:1 /c /f:7 /h:2 /i /s:18 /t:80
where :
| /D:1 | – | specifies physical drive number, "1" means drive B:, "0" should be used for drive A:, "2" - for drive C:, and so on. |
| /c | – | optional parameter, enabling removable media change detection. For non-removable media the "/n" parameter should be specified instead. |
| /f:7 | – | defines type number of the drive : 0– 160/180/320/360 kb 5,25 inch drive ; 1– 1.2 Mb 5,25-inch drive ; 2– 720 kb 3.5-inch drive ; 5– hard disk drive ; 6– magnetic tape device (streamer) ; 7– 1.44 Mb 3.5-inch drive ; 8– optical disk drive ; 9– 2.88 Mb 3.5-inch drive. |
| /h:2 | – | defines number of heads, default is 2 for double-sided diskettes. |
| /i | – | support for 3.5-inch drives if these are not supported by BIOS. |
| /s:18 | – | specifies number of sectors per track 8– for old 320 kb 5.25-inch diskettes ; 9– for 360 kb and 720 kb diskettes ; 15– for 1.2 Mb 5.25-inch diskettes ; 18– for 1.44 Mb 3.5-inch diskettes. |
| /t:80 | – | specifies number of tracks 40– for old 360 kb diskettes ; 80– for 720 kb and 1.44 Mb diskettes. |

### Notes

* Default settings for /f and /s parameters correspond to 5.25-inch diskettes with 9 sectors per track.

## 4.10 FCBS – number of file control blocks

The FCBS command (File Control BlockS) reserves memory for a specified number of file control blocks – from 1 to 255, each 80 bytes long. FCBS is an obsolete form, providing access to open files in current directory only. FCBS can't be applied to media having FAT32 file system. Modern DOS programs use "file handles" (4.12) instead of FCBS. Nevertheless MS-DOS 7 supports FCBS, because they are used by some old-fashioned programs and network services (INTERLNK.EXE, SHARE.EXE, etc.). In most cases the default value FCBS=4 is quite enough.

### Notes

* By default a place for FCBS is reserved beyond conventional memory (above 640 kb), but may be reserved below 640 kb, if in DOS command (4.08) the NOAUTO parameter is specified, and also if the address space in UMB region is insufficient or unavailable (availability conditions - in 4.07). In any case no error message is displayed.
* The FCBS specification doesn't limit available number of "unopened" file control blocks (A.09-5) that are used inside PSP (A.07-1), and also by some file search procedures.

## 4.11 FCBSHIGH – file control blocks in UMB address space

The FCBSHIGH command is almost equivalent to FCBS command (4.10), except that FCBSHIGH command attempts to arrange file control blocks beyond conventional memory despite presence of NOAUTO parameter in DOS command (4.08). All other information in article 4.10 is equally applicable to FCBSHIGH command.

## 4.12 FILES – reservation of System File Table entries

The FILES command reserves address space for a specified number of System File Table entries (SFT, A.01-4). Each entry defines state of an opened object — a file or a channel, and also defines association of this object with its numeric reference, the so-called "handle" used to address the object. By default there are 60 entries in SFT. This number of entries is often excessive. For ordinary work you may need
       FILES=30
SFT with 30 entries takes about 1800 bytes. For operating with large databases the number of SFT entries should be increased to 40.

### Notes

* By default a place for SFT entries is reserved beyond conventional memory (above 640 kb), but may be reserved below 640 kb, if in DOS command (4.08) the NOAUTO parameter is specified, and also if address space in UMB region is insufficient or unavailable (availability conditions in 4.07). In any case no error message is displayed.

## 4.13 FILESHIGH – number of SFT entries in UMB address space

The FILESHIGH command is almost equivalent to FILES command (4.12), except that FILESHIGH command attempts to arrange SFT entries beyond conventional memory despite presence of NOAUTO parameter in DOS command (4.08). All other information in article 4.12 is equally applicable to FILESHIGH command.

## 4.14 INCLUDE – reference to a block of commands

The INCLUDE command inserts a named block of commands into general succession of configuration commands to be executed. The inserted block of commands may be placed elsewhere inside the same CONFIG.SYS file, but it must be announced in its first line by a unique block name — a word or a number, enclosed in square brackets, for example, [L055] (example is taken from 9.09-01). End of the block must be marked with similar line, containing a name of the next block. If there is no need to specify other blocks, a line with reserved name [common] should be specified afterwards. All commands following a line with this name (if there are any) will be executed in each specified configuration.
In order to execute commands, in particular, of the block [L055], in the desired position in CONFIG.SYS file there must be a line
       INCLUDE=L055
Note that name of the block should be specified to the right of equality sign without enclosing square brackets.
If the same block of commands should be executed in several loading configurations, then each configuration specification must contain identical lines with INCLUDE command. Segregation of repeated command sequences into separate blocks makes the structure of CONFIG.SYS file simpler and more clear. Examples of such CONFIG.SYS file's structures are shown in articles 9.04-01, 9.09-01, and 9.11-03.

## 4.15 INSTALL – loading a TSR executable

The INSTALL command is used to load program's resident modules and those drivers, which have no special header (A.05-1) and therefore can't be loaded with DEVICE (4.06) or DEVICEHIGH (4.07) commands. Most often such drivers are marked with suffix .COM or .EXE. Drivers and utilities to be loaded with INSTALL command must meet the following conditions :
* they must not need environment space ;
* they must not send calls for handling critical errors ;
* they must not rely on services of COMMAND.COM interpreter, not yet loaded at that time.
The mentioned conditions are satisfied, in a large part, by those drivers and TSR utilities designed to be loaded from AUTOEXEC.BAT file or from command line. Loading from CONFIG.SYS file with INSTALL command is considered more reliable and takes a little less memory space.
Lines with INSTALL command are interpreted after all lines with DEVICE, DEVICEHIGH and SET commands, but before the line with SHELL command, even if succession of lines in CONFIG.SYS file is different. Contradiction between sequence of lines and sequence of execution can cause confusion and therefore should be avoided. Preferable line's order must correspond to sequence of execution.
Here is an example of a line with INSTALL command :
       INSTALL=\DOS\DRV\Mkecdex.com /B /L:0
In the shown line to the right of equality sign there are path to the driver, driver's name and a group of its parameters. Just like the DEVICE command (4.06), INSTALL may be appended with a question mark (INSTALL?=...), enabling the user to see this line on the screen and make a choice ([Enter=Y, Esc=N]) about whether to execute it or to skip.
The INSTALL command can be used for temporary loading of those modules which are to be uninstalled after termination of their mission. Peculiarity of such operations is that DOS automatically releases occupied memory space within conventional memory only, below 640 kb. When the NOAUTO parameter is specified in DOS command (4.08), INSTALL will load modules into conventional memory, therefore you can afford temporary loading of command interpreter module in order to suspend execution for a while and give an opportunity to read displayed messages :
       INSTALL=C:\Command.com /low /c pause
One more example of command interpreter's temporary loading with INSTALL command is shown in article 9.09-01.

### Notes

* Unlike the DEVICEHIGH command, INSTALL command is not involved in memory allocation optimization procedure, performed by MEMMAKER.EXE (5.04-03). Because of this reason the INSTALL command doesn't allow to affect memory allocation with auxiliary parameters /L and /S (4.07).
* By default the drivers and TSR modules are loaded beyond the conventional memory (above 640 kb), but may be loaded below 640 kb, if in DOS command (4.08) the NOAUTO parameter is specified, and also if address space in UMB region is insufficient or unavailable (availability conditions in 4.07). In any case no error message is displayed.

## 4.16 INSTALLHIGH – loading a TSR via UMB address space

INSTALLHIGH is almost equivalent to the INSTALL command (4.15), except that INSTALLHIGH command attempts to load drivers and TSR modules beyond conventional memory despite presence of NOAUTO parameter in DOS command (4.08). The INSTALLHIGH command shouldn't be used for loading those modules which are to be uninstalled after termination of their mission. All other information in article 4.15 is equally applicable to INSTALLHIGH command.

## 4.17 LASTDRIVE – reservation of CDS entries

The LASTDRIVE command defines number of entries in DOS's CDS table (A.03-03). Entries in CDS table store names of current directories for logical disks, both real and virtual. At boot time MS-DOS 7 creates one valid CDS entry record per each logical disk, identified by PC's BIOS system, and then appends CDS structure with dummy entries (reservations). The last entry corresponds to the last disk’s letter-name, specified by LASTDRIVE command. By default MS-DOS 7 assumes
       LASTDRIVE=Z
Such CDS table with 26 entries occupies 2288 bytes. If you consider this excessive, you may specify other disk’s letter-name by LASTDRIVE command, but in any case there must be enough CDS entries for all logical disks, including those which will be made accessible later, after installation of CD-ROM drivers, network services, etc.

### Notes

* By default CDS table is arranged beyond conventional memory (above 640 kb), but may be arranged below 640 kb, if in DOS command (4.08) the NOAUTO parameter is specified, and also if address space in UMB region is insufficient or unavailable (availability conditions in 4.07). In any case no error message is displayed.

## 4.18 LASTDRIVEHIGH – CDS entries in UMB address space

LASTDRIVEHIGH is almost equivalent to the LASTDRIVE command (4.17), except that LASTDRIVEHIGH command attempts to arrange CDS table beyond conventional memory despite presence of NOAUTO parameter in DOS command (4.08). All other information in article 4.17 is equally applicable to LASTDRIVEHIGH command.

## 4.19 MENUCOLOR – menu color choice

The MENUCOLOR command may be used optionally only in those blocks of configuration commands which are named [menu] or are announced as submenu in their parent menu or submenu. Color palette for each menu or submenu may be set by a separate MENUCOLOR command, specified in this menu or submenu. The default color settings are equivalent to command :
       MENUCOLOR=7,0
In the shown example the first digit means code of text color (7 – white), and the second digit (after comma) means code of background color (0 – black). You are allowed to choose other colors. All permissible color codes together with their meanings are enlisted in appendix A.10-5.

## 4.20 MENUDEFAULT – choice of default menu item

The MENUDEFAULT command may be used only in those blocks of configuration commands which are named [menu] or are announced as submenu in their parent menu or submenu. The MENUDEFAULT command is placed in the last line of menu block and defines that menu item which should be chosen automatically if the user has not made his choice during a prescribed time, for example :
       MENUDEFAULT=L007,20
In the shown example the first group of characters just after equality sign means a name of configuration block [L007], to be chosen by default, and a number after comma means 20 seconds waiting for the user's choice before automatic default choice will be made. Delays from 0 to 99 seconds are allowed. Examples of configuration menu with MENUDEFAULT command are shown in articles 9.04-01, 9.09-01, 9.11-03.

## 4.21 MENUITEM – specification of menu entry

The MENUITEM command may be used within the first menu block of commands (named [menu]) in CONFIG.SYS file and in those blocks that are announced as submenu in their parent menu or submenu. Each alternative, presented in menu or in submenu, must be linked with corresponding block of configuration commands and must be given an intelligible title. This is just what is done by MENUITEM command, for example :
       MENUITEM=L007, Relocate DOS to 5600 kb RAM-disk R:
In the example above the "L007" is a name of a block of commands (taken from 9.09-01), which must be present in CONFIG.SYS file and must be preceded by a header line with the same name [L007] in square brackets (2.03-05). The rest part of the shown command line (after comma) is a title text, representing this menu entry on the screen. Title text may include spaces between words, but square brackets [ ], semicolons ( ; ) and slashes ( / \ ) are not allowed.
During interpretation of menu block the IO.SYS loader creates an environmental variable CONFIG and assigns as its value the name of the chosen configuration block ( L007 in the shown example). This value may be used later in order to adapt execution of AUTOEXEC.BAT file (or any other batch file as well) according to the chosen configuration.

### Notes

* Total number of MENUITEM and SUBMENU (4.29) commands in each menu block must not exceed 9.

## 4.22 MULTITRACK – drive addressing mode

For access to a disk, DOS must specify starting sector and a number of sectors to be read (or written). In obsolete PCs produced in early 1980s disk drives and BIOS versions performed access operations within one track at a time, so that the sum of starting sector number and the number of sectors to be accessed could not exceed total number of sectors on a track (otherwise the process was "wrapped" to the beginning of the same track). Being forced to cope with obsolete hardware, MS-DOS 7 also couldn't afford multitrack addressing, and then the CONFIG.SYS file must contain a line
       MULTITRACK OFF
Since late 1980s all disk drives and BIOS versions are able to prevent the mentioned wrapping: access automatically is switched to the next track. This gives an opportunity to address several tracks in one operation and makes disk access much faster. MS-DOS 7 performs multitrack access and in fact takes MULTITRACK ON option as default. Therefore now the MULTITRACK command is almost always omitted.

## 4.23 NUMLOCK – numeric keypad state control

The NUMLOCK command (NUMeric keypad LOCK) defines status of numeric keypad (at the right edge of standard keyboard). Most often the NUMLOCK switch is kept OFF, and then the numeric keypad keys duplicate functions of keys in main part of keyboard (arrows, PgUp – PgDn, etc.). If other status should be avoided, the CONFIG.SYS file must contain command
       NUMLOCK OFF
In order to enable input of digits and arithmetic symbols the NUMLOCK status should be reversed with command
       NUMLOCK ON
Either state of NUMLOCK switch is suitable for choosing items in configuration menu. While NUMLOCK is OFF, you may scroll selection up-down as with arrow keys, but when NUMLOCK is set ON, you may select items in configuration menu by their number, entered via numeric keypad.

### Notes

* NUMLOCK switch state affects key codes, returned by INT 16\AX=10h (8.01-83). More about this in note 6 to appendix A.02-1.

## 4.24 REM – remark line

REM command (REMark) forces the IO.SYS loader to ignore all following words up to the end of line. Main purpose of REM command is to provide an opportunity to specify comments which should not be displayed on the screen. Insertion of the REM command at the start of any command line enables to skip this line during interpretation of CONFIG.SYS file.

### Notes

* During interpretation of lines in CONFIG.SYS file, the IO.SYS loader doesn't provide those extra opportunities provided by the COMMAND.COM interpreter for its synonymous REM command (3.24).

## 4.25 SET – value assignment to a variable

The SET command in CONFIG.SYS file is used to assign or to redefine a value of an environmental variable, for example:
       SET Var_Name=New_Var_Value
where :
* Var_name – a name example of environmental variable; it must begin with a letter and may contain digits.
* New_Var_Value – an example of a string value for the named environmental variable; it must not contain equation sign(s) inside. If there are spaces in the value, preceding the value or following the value (up to the end of line mark), all these spaces will be included in the assigned value.
The SET command, executed by IO.SYS within CONFIG.SYS file, causes a bit different effect than synonymous command (3.25), executed by COMMAND.COM interpreter from command lines or in batch files. The differences are :
* when used without following variable's parameters, the SET command in CONFIG.SYS file doesn't display the current environment.
* in CONFIG.SYS file the SET command, appended with a question mark (SET?=...) causes execution to stop with a query [Enter=Y, Esc=N], thus enabling the user to make a choice on whether to execute this line or not.
* SET commands in CONFIG.SYS file are performed after all DEVICE and DEVICEHIGH commands, but before execution of INSTALL, INSTALLHIGH and SHELL commands. This is a reason to prefer this order of lines in CONFIG.SYS file.
* aliases (2.03-03), redirections (2.04-02 – 2.04-05) and value substitutions in CONFIG.SYS file are not performed. Hence any symbol of redirection and substitution can be included in a value of a variable, assigned by the SET command in CONFIG.SYS file.

## 4.26 SHELL – interpreter shell specification

The SHELL command is used to launch an executable file which will not return control back to IO.SYS loader. This is why SHELL command is executed the last in CONFIG.SYS file, and preferably should be specified in its last line. Executables loaded with the SHELL command may be the loader of another operating system (as LOADLIN.EXE for LINUX OS), or a command interpreter which is to take control over PC after the IO.SYS loader finishes its job. Here is an example of control transfer to command interpreter NDOS.COM :
       SHELL=C:\DOS\NU\Ndos.com /f @C:\DOS\NU\Ndos.ini
where :
| C:\DOS\NU\ | – | is an example of a path to command interpreter file ; |
| /f @C:\DOS\NU\Ndos.ini – an example of parameters string for NDOS.COM command interpreter. |||
When the SHELL command isn't present in CONFIG.SYS file, the IO.SYS loader attempts to find the MS-DOS's proprietary command interpreter — COMMAND.COM — in the root directory of the current disk. In this case the COMMAND.COM interpreter will be launched with default parameters. It is better, though, to specify parameters explicitly, for example :
       SHELL=Command.com A:\ /e:1008 /p
In the latter example absence of a path before interpreter's name implies its presence in the current directory. Parameter's assignments for COMMAND.COM interpreter are described in detail in 6.04. Other examples of control transfer to the COMMAND.COM interpreter are shown in articles 9.01-01, 9.04-01 and 9.09-01.

## 4.27 STACKS – number of auxiliary stacks

The STACKS command in CONFIG.SYS file specifies number of auxiliary DOS's stacks used for treatment of nested interrupts. Parameters of STACKS command define a number of auxiliary stacks and amount of address space devoted for each stack. The default parameters are equivalent to command
       STACKS=9,256
where :
| 9 | – | number of auxiliary stacks (from 8 to 64 and 0 are allowed); |
| 256 | – | size of each auxiliary stack in bytes (from 32 to 512 and 0 are allowed). |
Since each stack overflow fault forces to reboot the PC and may cause data loss, the actual size of auxiliary stacks should not be less than the default value.

### Notes

* By default auxiliary stacks are arranged beyond the conventional memory (above 640 kb), but may be arranged below 640 kb, if in DOS command (4.08) the NOAUTO parameter is specified, and also if address space in UMB region is insufficient or unavailable (availability conditions in 4.07). In any case no error message is displayed.

## 4.28 STACKSHIGH – number of stacks in UMB address space

STACKSHIGH is almost equivalent to the STACKS command (4.27), except that STACKSHIGH attempts to arrange auxiliary stacks beyond conventional memory despite presence of NOAUTO parameter in DOS command (4.08). All other information in article 4.27 is equally applicable to STACKSHIGH command.

## 4.29 SUBMENU – introduction of a submenu

The SUBMENU command announces a menu entry, just as the MENUITEM command (4.21), but unlike the latter, the SUBMENU command forces to treat the corresponding block of commands as a submenu. Of course, the SUBMENU command itself may be used only in those blocks of configuration commands which are named [menu] or are announced as submenu in their parent menu or submenu, for example :
       SUBMENU=6000, Relocation to RAM-disk
In the shown example "6000" means a name of corresponding configuration block, and words after comma denote title text for the proposed menu entry. This text is subjected to the same restrictions as text in MENUITEM command (4.21). Submenu configuration block (named [6000] in the shown example) must have the same structure as the main menu block and may include up to 9 entries, each represented by a separate line with MENUITEM or SUBMENU command. The main specific feature of submenu block is its name: it must be unique and must differ from reserved names [menu] and [common].

## 4.30 SWITCHES – supplementary options

The SWITCHES command enables to specify up to four optional configuration items, for example :
       SWITCHES= /K /N /F /E:64
where :
| /K | – | enables old programs, consigned for 86-key keyboard, to cope with newer "enhanced" 101/108-key keyboard. |
| /N | – | disables opportunity to skip execution of configuration files (CONFIG.SYS and AUTOEXEC.BAT) with F5 and F6 keys. |
| /F | – | excludes two-second delay after displaying the message "Starting WINDOWS…". |
| /E:64 | – | allots 64 bytes of conventional memory (from 48 to 1024 bytes allowed) as a "handle" for EBIOS, a BIOS system extension, enabling LBA access to HDDs (see note 4 to A.13-6). If the number after /E switch is omitted, then the whole EBIOS code, if necessary, will be loaded into conventional memory. In modern PCs the /E parameter is not needed, because LBA access is supported by their main BIOS system. |