The MS-DOS Encyclopedia
Appendix A: MS-DOS Version 3.3
For the MS-DOS user, version 3.3 incorporates some long-awaited
capabilities, runs faster in places, and requires about 9 KB more
memory than version 3.2. Its most apparent changes, however, relate to
a new, more flexible method of supporting different national
languages. For the MS-DOS programmer, version 3.3 offers several
enhancements in the areas of file management and internationalization
support. This appendix offers an overview of these new features.
Version 3.3 User Considerations
MS-DOS version 3.3 has introduced several changes at the user level. A
new external command, FASTOPEN, speeds up the filing system by keeping
file locations in memory. A new batch command, CALL, lets a batch file
call another batch file and, when that file terminates, continue
execution with the next command in the original batch file rather than
return to MS-DOS as in previous versions. Two commands previously
present only in PC-DOS, COMP and SELECT, have been added to MS-DOS.
Five commands have additional capabilities: APPEND, ATTRIB, BACKUP,
FDISK, and MODE. In addition, the TIME and DATE commands automatically
set the CMOS clock-calendar on the IBM PC/AT and PS/2 machines, making
use of the separate SETUP program unnecessary for these functions.
Changes to the national language support involve four new commands,
three new options to the MODE command, two new or modified system
information files, and two new device drivers. Each of these new or
modified commands is discussed individually below.
The FASTOPEN command
When MS-DOS searches for a program file, it searches each directory
specified in the PATH search path. A lengthy path that has to search
many levels of a directory structure can make this a slow process. The
FASTOPEN command loads a terminate-and-stay-resident (TSR) program
that caches the locations of the most recently accessed directories
and files on one or more fixed disks in the system. The number of
files and directories to be cached is under the user's control; the
default is 10. When it needs a file, MS-DOS looks first in the
FASTOPEN list; if the file is found in the list, MS-DOS can bypass
inspection of the search path specified by PATH. When the FASTOPEN
list is filled and a new file is opened, the new file replaces the
least recently used file on the FASTOPEN list.
The improvement in file-system performance depends on the number of
open files and the frequency of file access. The FASTOPEN command can
be entered only once during a session and, if desired, can be placed
in the AUTOEXEC.BAT file.
The FASTOPEN command has two parameters:
FASTOPEN drive:[=entries][...]
The drive parameter is the drive letter, followed by a colon, of a
fixed disk for which FASTOPEN is to keep track of the most recently
accessed directories and files. More than one drive can be specified
by separating the drive identifiers with spaces; the maximum is four
drives. A drive associated with a JOIN, SUBST, or ASSIGN command
cannot be specified, nor can a drive assigned to a network.
The optional entries parameter is the number of directory entries
FASTOPEN is to keep in memory. The value of entries can be from 10
through 999; the default is 34. If more than one entries value is
specified, their sum cannot exceed 999. Each entry subtracts 40 bytes
from the RAM normally available to run application programs.
Examples: The following command tells MS-DOS to keep track of the last
50 directories and files on drive C:
C>FASTOPEN C:=50 <Enter>
The next command tells MS-DOS to keep track of the last 34 files on
drives C and D:
C>FASTOPEN C: D: <Enter>
Changes to batch-file processing
Batch-file processing also gains power in MS-DOS version 3.3. The user
can now suppress the echo of all batch commands and call one batch
file from another without terminating the first batch file.
@
With MS-DOS version 3.3, any line in a batch file preceded by @ is not
echoed to the screen when the batch file is executed.
CALL
A batch file no longer needs to load an additional copy of COMMAND.COM
in order to execute another batch file and return control to the
calling batch file. The CALL command executes a batch file and returns
to the next command in the calling batch file.
CALL commands can be nested. If an exit condition is provided, a batch
file can even call itself; however, the input or output of a called
batch file cannot be redirected or piped.
The CALL command has two parameters:
CALL batch-file [parameters]
The batch-file parameter is the name of the batch file to be executed.
The file must be in the current drive and directory or in a drive
and/or directory specified in the command path.
The optional parameters parameter represents any parameters that may
be required by batch-file.
Example: Suppose the batch file SORTFILE.BAT accepts one parameter.
The following command calls SORTFILE.BAT, specifying NAMES.TXT as the
parameter:
CALL SORTFILE NAMES.TXT
If NAMES.TXT was specified as a command-line parameter to the calling
batch file, the CALL command could be
CALL SORTFILE %1
Commands from PC-DOS
Two commands have been added to MS-DOS from earlier versions of
PC-DOS: COMP, present in PC-DOS version 1.0, and SELECT, present in
PC-DOS version 2.0.
COMP
The COMP command compares two files or sets of files and reports any
differences encountered. FC, a similar file-comparison command present
in MS-DOS versions 2.0 and later, is still included with MS-DOS 3.3.
See USER COMMANDS: COMP; FC.
Syntax for the COMP command is
COMP [drive:][filename1] [drive:][filename2]
The optional drive parameter is the drive letter, followed by a colon,
of the drive containing the file to be compared. The filename1
parameter is the name and location of the file to compare to
filename2; filename2 is the name and location of the file to be
compared against. Both filenames can be preceded by a path; wildcard
characters are permitted in either filename.
Example: The following command tells MS-DOS to compare the file
NEWFILE.TXT in the current drive and directory to the file OLDFILE.TXT
in the \ARCHIVE directory on drive D and report any differences
encountered:
C>COMP NEWFILE.TXT D:\ARCHIVE\OLDFILE.TXT <Enter>
SELECT
The SELECT command creates a system disk with the time format, date
format, and keyboard layout configured for a selected country. The
syntax for SELECT is
SELECT [[drive1:] [drive2:][path]] [country][keyboard]
The optional drive1 parameter is the drive containing a disk with the
MS-DOS operating-system files, the FORMAT program, and the country
configuration files. The drive2 parameter is the drive containing the
disk to be formatted with the country-specific information; this drive
specifier can be followed by a path. The country parameter is a code
that selects the date and time format; the information is taken from
the COUNTRY.SYS system file. The keyboard parameter is a code that
selects the desired keyboard layout. See KEYB below.
The SELECT command
■ Formats the target disk.
■ Creates CONFIG.SYS and AUTOEXEC.BAT files on the target disk.
■ Copies the contents of the source disk to the destination disk.
Example: The following command, which assumes drive A contains a valid
system disk and drive B contains the disk to be formatted, creates a
bootable system disk that includes country-specific information and
keyboard layout for Germany:
C>SELECT A: B: 049 GR <Enter>
Enhanced commands
Several existing MS-DOS user commands have been given expanded
capabilities in version 3.3. These are presented alphabetically in the
next few pages. See USER COMMANDS: APPEND; ATTRIB; BACKUP; FDISK;
MODE.
APPEND
The APPEND command specifies a search path for data files--files whose
extensions are neither .COM, .EXE, nor .BAT--similar to the command
path specified by the PATH command, which searches only for executable
files with those extensions. APPEND has three forms, depending on
whether it is being entered for the first time. When it is entered the
first time, the APPEND command now has two optional switches:
APPEND [/E] [/X]
The /E switch makes the data path part of the environment, like the
command path. The data path can then be displayed or changed with both
the SET and APPEND commands and is inherited by child processes.
(However, any changes made to the data path by the child process are
lost when the child returns to its parent process.)
The /X switch causes calls to the Find First File functions (Interrupt
21H Functions 11H and 4EH) and the EXEC function (Interrupt 21H
Function 4BH) to search the data path. If /X is not specified, only
Interrupt 21H Function 0FH (Open File with FCB), Interrupt 21H
Function 23H (Get File Size), and Interrupt 21H Function 3DH (Open
File with Handle) system calls search the data path.
If either /X or /E is specified the first time APPEND is entered, a
pathname cannot be included.
Subsequent uses of the command must take the form
APPEND [[drive:]path] [;[drive:]path ...]
or
APPEND;
The path parameter is the name of a directory that is to be made part
of the data path. The user can specify as many directory names as will
fit in the 128 characters of the command line. Entries must be
separated by semicolons. If APPEND is followed only by a semicolon,
any previous APPEND paths are deleted.
Example: The following two APPEND commands make the data path part of
the environment and put the directories C:\WORD\PROPOSAL,
C:\WORD\REPORTS, and C:\123\BUDGET in the data path:
C>APPEND /E <Enter>
C>APPEND C:\WORD\PROPOSAL;C:\WORD\REPORTS;C:\123\BUDGET <Enter>
Because the data path usually involves frequently used directories,
the APPEND command ordinarily is placed in the AUTOEXEC.BAT file.
Note: APPEND is a new command in PC-DOS version 3.3.
ATTRIB
The /S switch has been added to the ATTRIB command so that any
attribute changes can be applied to all files in subdirectories
contained in the specified directory.
Example: The following command sets the read-only attribute of all
files in the directory C:\DOS and in all its subdirectories:
C>ATTRIB +R C:/DOS /S <Enter>
BACKUP
A formatting parameter has been added to the BACKUP command in MS-DOS
version 3.3. The /F switch tells MS-DOS to format the backup diskette
if it hasn't been formatted. The /F switch formats the backup diskette
to the maximum capacity of the backup drive, so a disk of lower
capacity, such as a 360 KB diskette in a 1.2M drive, should not be
used. If this switch is used, FORMAT.COM must be available in the
current drive and directory or in one of the directories named in the
environment's PATH string.
Performance of the BACKUP command has also been improved. Instead of
storing each file separately on the backup disk, BACKUP stores only
two files: BACKUP.nnn, which contains all the backed-up files, and
CONTROL.nnn, which contains the pathnames of the backed-up files.
FDISK
FDISK can now create a new type of MS-DOS partition called an extended
partition on a fixed disk. An extended partition can contain multiple
logical drives and allows the use of very large fixed disks. Each
logical drive is still limited to 32 MB.
An extended partition is not bootable. In order for the fixed disk to
be bootable, it must also contain a primary MS-DOS partition that has
been formatted using the FORMAT command with the /S switch so that it
contains a system boot record and the operating-system files.
MODE
The MODE command now supports two additional serial ports (COM3 and
COM4) and increases the maximum serial transmission rate to 19,200
baud.
Some additional options have been added to MODE to support code-page
switching. See MODE Command Changes below.
New national language support
The new national language support in MS-DOS version 3.3 replaces the
methods used in previous versions to change the keyboard layout and
the display and printer character sets so that more than one language
could be used. These changes are extensive: four new or modified
system files, three new commands, four new options for the MODE
command, a new parameter for the GRAFTABL command, and a new parameter
for the COUNTRY and DEVICE configuration commands.
Code pages and code-page switching
The key element of the new national language support is the code page,
a table of 256 character correspondence codes. MS-DOS recognizes both
a hardware code page, which is the character correspondence table
built into a device, and a prepared code page, which is an alternate
character correspondence table available through MS-DOS. The current
code page is the code page most recently selected.
The hardware code page for a device is determined by the country for
which the device was manufactured. The user selects a prepared code
page, from a list of five included with MS-DOS version 3.3, by using
the new CP PREPARE option of the MODE command. See MODE Command
Changes below.
The new national language support is often referred to as code-page
switching because, after the devices and code pages required by the
system have been defined, the only commands the user must deal with
simply switch from one code page to another. In order to use the new
national language support, device drivers must support code-page
switching and the devices must be able to display the full character
sets.
Code pages are numbered. The identifying numbers have no relationship
to the country code introduced with previous versions of MS-DOS and
used by the COUNTRY configuration command. Five code pages are
included with version 3.3:
╓┌───────────────────────┌───────────────────────────────────────────────────╖
Page Number Configuration
──────────────────────────────────────────────────────────────────
437 United States
850 Multilingual
860 Portugal
863 Canadian French
865 Norway/Denmark
Code page 437 is the character correspondence table used in previous
versions of MS-DOS. Its character set supports United States English
and includes many accented characters used in other languages. It is
the hardware code page for most countries.
Code page 850 replaces two of the four box-drawing sets and some of
the mathematical symbols in code page 437 with additional accented
characters. It supports English and most Latin-based European
languages.
Code page 860 is for Portuguese, code page 863 is for Canadian French,
and code page 865 is for Norwegian/Danish. These pages are the
hardware code pages for the specified countries.
Setting up the system for code-page switching
Although several commands are required to manage national language
support, the process is fairly straightforward. Setting up the system
requires the following:
■ A DEVICE configuration command in CONFIG.SYS to load a driver for
each device that supports code-page switching.
■ An NLSFUNC command in AUTOEXEC.BAT to load the memory-resident
national language support functions.
■ A MODE CP PREPARE command in AUTOEXEC.BAT to prepare code pages for
each device that supports code-page switching.
■ A CHCP command in AUTOEXEC.BAT to select the initial code page.
■ Optionally, a KEYB command in AUTOEXEC.BAT to select the initial
keyboard layout.
After starting the system with these commands in CONFIG.SYS and
AUTOEXEC.BAT, only a MODE CP SELECT command is required to change to a
different language during an MS-DOS session.
The COUNTRY configuration command is still used to control country-
specific characteristics such as the time and date format and currency
symbol. An added parameter in the COUNTRY command lets the user also
specify a code page. See Modified National Language Support Commands
below.
The system files
MS-DOS version 3.3 includes four system files that support the
national language functions: two device drivers and two system
information files.
The device drivers are PRINTER.SYS and DISPLAY.SYS. These drivers
implement code-page switching for the IBM Proprinter Model 4201 and
Quietwriter III Model 5202 printers and for the EGA, PC Convertible
LCD, and PS/2 display adapters. They also support all display adapters
compatible with the EGA.
The information files are COUNTRY.SYS, which contains information such
as time and date formats and currency symbols, and KEYBOARD.SYS, which
contains the scan-code-to-ASCII translation tables for the various
keyboard layouts.
The new support commands
The new national language support in MS-DOS version 3.3 adds three
MS-DOS commands: Change Code Page (CHCP), Keyboard (KEYB), and
National Language Support Functions (NLSFUNC).
CHCP
The Change Code Page (CHCP) command tells MS-DOS which code page to
use for all devices that support code-page switching.
The NLSFUNC command must be executed before the CHCP command can be
used.
CHCP is a system-wide command: It specifies the code page used by MS-
DOS and each device attached to the system that supports code-page
switching. The CP SELECT option of the MODE command, on the other
hand, specifies the code page for a single device.
If the code page specified with CHCP is not compatible with a device,
CHCP responds
Code page nnn not prepared for all devices
If the code page specified with CHCP was not first identified with the
CP PREPARE option of the MODE command, CHCP responds
Code page nnn not prepared for system
The CHCP command has one optional parameter:
CHCP [code-page]
The code-page parameter is the three-digit number that specifies the
code page MS-DOS is to use. If code-page is omitted, CHCP displays the
current MS-DOS code page.
Examples: The following command changes the system code page to 850:
C>CHCP 850 <Enter>
If the current code page is 850 and CHCP is entered without
parameters, MS-DOS responds:
Active code page: 850
KEYB
The Keyboard (KEYB) command selects a keyboard layout by changing the
scan-code-to-ASCII translation table used by the keyboard driver. It
replaces the KEYBxx commands used in earlier versions of MS-DOS to
select keyboard layouts.
The first time KEYB is executed, it loads the memory-resident keyboard
driver and the translation table, thereby increasing the size of MS-
DOS by slightly more than 7 KB. Subsequent executions simply load a
different translation table, which replaces the previously loaded
translation table and accommodates a different country-specific
keyboard layout.
The KEYB command has three optional parameters:
KEYB [country[,[code-page],kbdfile]]
The country parameter is one of the following two-character country
codes:
╓┌───────────────────────┌───────────────────┌───────────────────┌───────────╖
Country Code Country Code
──────────────────────────────────────────────────────────────────
Australia US Netherlands NL
Belgium BE Norway NO
Canada Portugal PO
English US Spain SP
French CF Sweden SV
Denmark DK Switzerland
Finland SU French SF
France FR German SG
Germany GR United Kingdom UK
Italy IT United States US
Latin America LA
The code-page parameter is the three-digit number that specifies the
code page defining the character set that MS-DOS is to use.
If the specified country code and code page aren't compatible, KEYB
responds:
Code page requested nnn is not valid for given keyboard code
If KEYB is entered with no parameters, MS-DOS displays the currently
active keyboard country code, keyboard code page, and console device
code page.
Examples: The following command selects the French keyboard layout,
code page 850, and the keyboard definition file named
C:\DOS\KEYBOARD.SYS:
C>KEYB FR,850,C:\DOS\KEYBOARD.SYS <Enter>
If the code page is omitted but the keyboard definition file is
specified, the comma must be included to show the missing parameter:
C>KEYB FR,,C:\DOS\KEYBOARD.SYS <Enter>
NLSFUNC
The National Language Support Function (NLSFUNC) command loads a
memory-resident program that implements code-page switching. It also
allows the user to name the file that contains country-specific
information--such as date format, time format, and currency symbol--
if there is no COUNTRY configuration command in CONFIG.SYS. NLSFUNC
must be used before the Change Code Page (CHCP) command.
If national language support is needed for every session, NLSFUNC
should be placed in the AUTOEXEC.BAT file.
The NLSFUNC command has one optional parameter:
NLSFUNC [country-file]
The country-file parameter is the name of the country information file
(in most implementations of MS-DOS, COUNTRY.SYS). If country-file is
omitted, MS-DOS defaults to the name of the country information file
specified in the COUNTRY configuration command in CONFIG.SYS; if there
is no COUNTRY configuration command in CONFIG.SYS, MS-DOS looks for a
file named COUNTRY.SYS in the root directory of the current drive.
Example: The following command loads the NLSFUNC program and specifies
C:\DOS\COUNTRY.SYS as the country information file:
C>NLSFUNC C:\DOS\COUNTRY.SYS <Enter>
The modified support commands
The new national language support changes two configuration commands--
COUNTRY and DEVICE--and two general MS-DOS commands--GRAFTABL and
MODE.
COUNTRY
The COUNTRY configuration command now has three parameters:
COUNTRY=country-code,[code-page],[country-file]
The country-code parameter is one of the following three-digit country
codes (identical to the specified country's international telephone
prefix):
╓┌───────────────────────┌───────────────────┌───────────────────┌───────────╖
Country Code Country Code
──────────────────────────────────────────────────────────────────
Arabia 785 Latin America 003
Australia 061 Netherlands 031
Belgium 032 Norway 047
Canada Portugal 351
English 001 Spain 034
French 002 Sweden 046
Denmark 045 Switzerland
Finland 358 French 041
France 033 German 041
Germany 049 United Kingdom 044
Israel 972 United States 001
Italy 039
The code-page parameter is the three-digit number that specifies the
code page defining the character set that MS-DOS is to use.
The country-file parameter is the name of the file that contains the
country-specific information; the name of the file can be preceded by
a drive and/or path. If country-file is omitted, MS-DOS defaults to
the file COUNTRY.SYS, which it looks for in the root directory of the
current drive.
The COUNTRY command is not required; if it is not included in
CONFIG.SYS, MS-DOS defaults to country 001 (US), code page 437, and
country information file COUNTRY.SYS in the root directory of the
current drive.
Example: The following CONFIG.SYS command specifies the French country
code, code page 850, and C:\DOS\COUNTRY.SYS as the country information
file:
COUNTRY=033,850,C:\DOS\COUNTRY.SYS
DEVICE
Two options have been added to the DEVICE configuration command that
allow the user to specify the display and printer drivers that support
code-page switching.
The display driver that supports code-page switching is DISPLAY.SYS.
It supports the IBM Enhanced Graphics Adapter (EGA), the IBM Personal
System/2 display adapter, and all display adapters compatible with
either of these. The Monochrome Display Adapter (MDA) and the
Color/Graphics Adapter (CGA) do not support code-page switching.
If the ANSI.SYS display driver is also used, the DEVICE command that
defines it must precede the DEVICE command that defines DISPLAY.SYS.
When used to specify the display driver, the DEVICE command has five
parameters:
DEVICE=driver CON=(type[,[hwcp][,prepcp[,sub-fonts]]])
The driver parameter is the name of the file that contains the display
driver; the filename can be preceded by a drive and/or path. If driver
is omitted, MS-DOS defaults to the file DISPLAY.SYS, which it looks
for in the root directory of the current drive.
The type parameter defines the type of display adapter attached to the
system. It must be one of the following:
╓┌──────────────┌────────────────────────────────────────────────────────────╖
Code Adapter
──────────────────────────────────────────────────────────────────
MONO Monochrome display/printer adapter
CGA Color/graphics adapter
EGA Enhanced graphics adapter or IBM Personal System/2 display
adapter
LCD IBM PC Convertible liquid crystal display
The hwcp parameter is the three-digit number that specifies the
hardware code page supported by the display adapter:
╓┌──────────────┌────────────────────────────────────────────────────────────╖
Code Configuration
──────────────────────────────────────────────────────────────────
437 United States (default)
850 Multilingual
860 Portugal
863 Canadian French
865 Norway/Denmark
The prepcp parameter is the number of additional code pages the
display can support. These are referred to as prepared code pages and
must be defined by the CP PREPARE option of the MODE command. If type
is either MONO or CGA, prepcp must be 0; the default is 0. If type is
either EGA or LCD, prepcp can be any value from 1 through 12; the
default is 1. If hwcp is 437, prepcp should be allowed to default to
1; if hwcp is not 437, prepcp should be set to 2.
The sub-fonts parameter is the number of subfonts supported for each
code page. If type is either MONO or CGA, sub-fonts must be 0; the
default is 0. If type is EGA, sub-fonts can be 1 or 2; the default is
2. If type is LCD, sub-fonts can be 1 or 2; the default is 1.
Example: The following CONFIG.SYS command specifies C:\DOS\DISPLAY.SYS
as the display driver for an EGA whose hardware code page is 437. The
parameter for prepared code pages is allowed to default to 1 and the
parameter for subfonts is allowed to default to 2.
DEVICE=C:\DOS\DISPLAY.SYS CON=(EGA,437)
The printer driver that supports code-page switching is PRINTER.SYS.
It supports the IBM Proprinter Model 4201, the IBM Quietwriter III
Printer Model 5202, and all printers compatible with either of these.
When used to specify the printer driver, the DEVICE configuration
command has five parameters:
DEVICE=driver port=(type[,[hwcp][,prepcp]])
The driver parameter is the name of the file that contains the printer
driver; the filename can be preceded by a drive and/or path. If driver
is omitted, MS-DOS defaults to the file PRINTER.SYS, which it looks
for in the root directory of the current drive.
The port parameter is the MS-DOS device name of the printer port being
defined: LPT1 (or PRN), LPT2, or LPT3. A different set of type, hwcp,
and prepcp parameters can be specified for each of the three printer
ports.
The type parameter defines the type of printer attached to the printer
port. It must be one of the following:
╓┌──────────────┌────────────────────────────────────────────────────────────╖
Code Printer
──────────────────────────────────────────────────────────────────
4201 IBM Proprinter Model 4201
5202 IBM Quietwriter III Printer Model 5202
The hwcp parameter is a three-digit number that specifies the hardware
code page supported by the hardware:
╓┌──────────────┌────────────────────────────────────────────────────────────╖
Code Configuration
──────────────────────────────────────────────────────────────────
437 United States (default)
850 Multilingual
860 Portugal
863 Canadian French
865 Norway/Denmark
If type is 5202, two hardware code-page numbers can be specified,
enclosed in parentheses and separated by a comma. If two hardware code
pages are specified, prepcp must be 0.
The prepcp parameter is the number of additional code pages (referred
to as prepared code pages) for which MS-DOS must reserve buffer space;
its value can be from 0 through 12. These additional code pages must
be defined by the CP PREPARE option of the MODE command. If hwcp is
437, prepcp should be set to 1; if hwcp is not 437 and only one hwcp
value is specified, prepcp should be set to 2.
Examples: The following CONFIG.SYS command defines C:\DOS\PRINTER.SYS
as the printer driver for the PRN device. The printer is an IBM
Proprinter Model 4201 whose hardware code page is 437, and MS-DOS is
instructed to allow for one prepared code page:
DEVICE=C:\DOS\PRINTER.SYS PRN=(4201,437,1)
The next CONFIG.SYS command defines C:\DOS\PRINTER.SYS as the printer
driver for ports LPT1 and LPT2. The printer attached to LPT1 is the
same as in the previous command; the printer attached to LPT2 is an
IBM Quietwriter III Printer Model 5202 with two hardware code pages
(437 and 850). For the second printer, MS-DOS is instructed to allow
for no prepared code pages.
DEVICE=C:\DOS\PRINTER.SYS LPT1=(4201,437,1) LPT2=(5202,(437,850),0)
GRAFTABL
The GRAFTABL command now has two forms:
GRAFTABL [code-page]
or
GRAFTABL /STATUS
The first form of the command loads a code page for the color/graphics
adapter (CGA) so that its character set matches that used by MS-DOS
and other devices when displaying the upper 128 characters. The code-
page parameter is the three-digit number that specifies the code page
defining the character set that GRAFTABL is to use.
The /STATUS switch causes GRAFTABL to display the name of the graphics
character set table currently in use.
MODE
National language support adds four options to the MODE command:
╓┌───────────────────────────┌───────────────────────────────────────────────╖
Option Action
──────────────────────────────────────────────────────────────────
CODEPAGE Displays the code pages available and active.
CODEPAGE PREPARE Defines the code pages selected for use.
CODEPAGE REFRESH Restores code-page contents damaged by hardware
error or other causes.
CODEPAGE SELECT Selects a code page for a particular device.
(CODEPAGE can be abbreviated to CP in the command line.)
When used to display the status of the code pages, the MODE command
has one parameter:
MODE device CP
The device parameter is the name of the device whose code-page status
is to be displayed. It can be CON, PRN, LPT1, LPT2, or LPT3.
Example: The following command displays the status of the console
device:
C>MODE CON CP <Enter>
When used to define the code page or pages to be used with a device,
the MODE command has three parameters:
MODE device CP PREPARE=(code-page font-file)
The device parameter is the name of the device for which the code page
or pages are to be prepared. It can be CON, PRN, LPT1, LPT2, or LPT3.
The code-page parameter is one or more of the three-digit numbers,
enclosed in parentheses, that specify the code page to be used with
device. If more than one code-page number is specified, the numbers
must be separated with spaces.
The font-file parameter is the name of the code-page file that
contains the font information for device. The files provided for IBM
devices include
╓┌─────────────────┌─────────────────────────────────────────────────────────╖
File Device
──────────────────────────────────────────────────────────────────
EGA.CPI IBM Enhanced Graphics Adapter (EGA) and EGA-compatible
display adapters
4201.CPI IBM Proprinter Model 4201
5202.CPI IBM Quietwriter III Printer Model 5202
LCD.CPI IBM Convertible liquid crystal display
Example: Assume the display is attached to an EGA. The following
command prepares code pages 437 and 850 for the console, specifying
C:\DOS\EGA.CPI as the code-page information file:
C>MODE CON CP PREPARE=((437 850) C:\DOS\EGA.CPI) <Enter>
When used to select a code page for a device, the MODE command has two
parameters:
MODE device CP SELECT=code-page
The device parameter is the name of the device for which the code page
is to be selected. Permissible values are CON, PRN, LPT1, LPT2, and
LPT3.
The code-page parameter is the three-digit number that specifies the
code page to be used with device.
Example: The following command selects code page 850 for the console:
C>MODE CON CP SELECT=850 <Enter>
Setting up code-page switching for an EGA-only system
Figure A-1 shows the commands required to implement the new national
language support for a system that includes only a display attached to
an EGA or EGA-compatible adapter. The hardware code page of the EGA is
437 (United States English) and the system is set up to handle code
pages 437 and 850. All MS-DOS files are assumed to be in the directory
\DOS on the disk in drive C. If the ANSI.SYS driver is not used, the
configuration command DEVICE=C:\DOS\ANSI.SYS should be omitted from
CONFIG.SYS; if ANSI.SYS is used, however, the DEVICE configuration
command that defines it must precede the DEVICE configuration command
that defines DISPLAY.SYS.
Commands in CONFIG.SYS:
COUNTRY=001,437,C:\DOS\COUNTRY.SYS
DEVICE=C:\DOS\ANSI.SYS
DEVICE=C:\DISPLAY.SYS CON=(EGA,437,1)
Commands in AUTOEXEC.BAT:
NLSFUNC C:\DOS\COUNTRY.SYS
MODE CON CP PREPARE=((437 850) C:\DOS\EGA.CPI)
MODE CON CP SELECT=437
KEYB US,437,C:\DOS\KEYBOARD.SYS
Figure A-1. Setup commands for a system with an EGA only.
When the system is started, code page 437 is selected for MS-DOS, the
display, and the keyboard. To change to code page 850 during the
session, simply type
C>CHCP 850 <Enter>
Setting up code-page switching for a PS/2 and printer
Figure A-2 shows the commands required to implement the new national
language support for an IBM Personal System/2 or compatible system
that includes both a PS/2, EGA, or EGA-compatible display adapter and
an IBM Proprinter Model 4201. The hardware code page of both devices
is 437 (United States English) and the system is set up to handle code
pages 437 and 850.
Commands in CONFIG.SYS:
COUNTRY=001,437,C:\DOS\COUNTRY.SYS
DEVICE=C:\DOS\ANSI.SYS
DEVICE=C:\DISPLAY.SYS CON=(EGA,437,1)
DEVICE=C:\DOS\PRINTER.SYS PRN=(4201,437,1)
Commands in AUTOEXEC.BAT:
NLSFUNC C:\DOS\COUNTRY.SYS
MODE CON CP PREPARE=((437 850) C:\DOS\EGA.CPI)
MODE PRN CP PREPARE=((437 850) C:\DOS\4202.CPI)
MODE CON CP SELECT=850
MODE PRN CP SELECT=850
KEYB US,850,C:\DOS\KEYBOARD.SYS
Figure A-2. Setup commands for a PS/2 with display and printer.
Again, all MS-DOS files are assumed to be in the directory \DOS on the
disk in drive C. If the ANSI.SYS driver is not used, the configuration
command DEVICE=C:\DOS\ANSI.SYS should be omitted from CONFIG.SYS; if
ANSI.SYS is used, however, the DEVICE configuration command that
defines it must precede the DEVICE configuration command that defines
DISPLAY.SYS.
Version 3.3 Programming Considerations
The changes introduced in MS-DOS version 3.3 that are of primary
interest to the programmer include
■ New Interrupt 21H function calls for file management and
internationalization support
■ An extension to the definition of the MS-DOS IOCTL function for
code-page switching, plus the addition of the underlying device-
driver support
■ Support for extended MS-DOS partitions on fixed disks
Each of these areas is discussed in detail below.
New file-management functions
MS-DOS version 3.3 includes two new Interrupt 21H file-management
functions: Set Handle Count (Function 67H) and Commit File (Function
68H).
Set Handle Count
The Set Handle Count function (Interrupt 21H Function 67H) allows a
single process to have more than 20 handles for files or devices open
simultaneously. Function 67H is invoked by issuing a software
Interrupt 21H with
AH = 67H
BX = number of desired handles
On return,
If function is successful:
Carry flag is clear.
If function is not successful:
Carry flag is set.
AX = error code
For each process, the operating system maintains a table that relates
handle numbers for the process to MS-DOS's internal global table for
all open files in the system. In MS-DOS versions 3.0 and later, the
per-process table is ordinarily stored within the reserved area of the
program segment prefix (PSP) and has only enough room for 20 handle
entries. If 20 or fewer handles are requested in register BX, Function
67H takes no action and returns a success signal. If more than 20
handles are requested, however, Function 67H allocates on behalf of
the calling program a new block of memory that is large enough to hold
the expanded table of handle numbers and then copies the process's old
handle table to the new table. Because the function will fail if the
system does not have sufficient free memory to allocate the new block,
most programs need to make a call to Interrupt 21H Function 4AH
(Resize Memory Block) to "shrink" their initial memory block
allocations before calling Function 67H.
Function 67H does not fail if the number requested is larger than the
available entries in the system's global table for file and device
handles. However, a subsequent attempt to open a file or device or to
create a new file will fail if all the entries in the system's global
file table are in use, even if the requesting process has not used up
all its own handles. (The size of the global table is controlled by
the FILES entry in the CONFIG.SYS file. See USER COMMANDS: CONFIG.SYS:
FILES; PROGRAMMING IN THE MS-DOS ENVIRONMENT: PROGRAMMING FOR MS-DOS:
File and Record Management.)
Example: Set the maximum handle count for the current process to 30,
so that the process can have as many as 25 files or devices open
simultaneously (5 of the handles are already expended by the MS-DOS
standard devices when the process starts up). Note that a FILES=30 (or
greater value) entry in the CONFIG.SYS file also is required for the
process to successfully open 30 files or devices.
.
.
.
mov ah,67h ; Function 67H = set handle count.
mov bx,30 ; Maximum number of handles.
int 21h ; Transfer to MS-DOS.
jc error ; Jump if function failed.
.
.
.
Commit File
The Commit File function (Interrupt 21H Function 68H) forces all data
in MS-DOS's internal buffers that is associated with a given handle to
be written to disk and forces the corresponding disk directory and
file allocation table (FAT) information to be updated. By calling this
function at appropriate points within its execution, a program can
ensure that newly entered data will not be lost if there is a power
failure, if the program crashes, or if the user fails to terminate the
program properly before turning off the machine. Function 68H is
called by issuing a software Interrupt 21H with
AH = 68H
BX = handle for previously opened file.
On return,
If function is successful:
Carry flag is clear.
If function is not successful:
Carry flag is set.
AX = error code
The effect of Function 68H is equivalent to closing and reopening the
file or to duplicating a file handle with Interrupt 21H Function 45H
(Duplicate File Handle) and then closing the duplicate. See
PROGRAMMING IN THE MS-DOS ENVIRONMENT: PROGRAMMING FOR MS-DOS: File
and Record Management. However, Function 68H has the advantages that
the application will not lose control of the file (as could happen
with the close-open sequence in a networking environment) and that it
will not fail because of a lack of handles (as the duplicate handle
method might).
Note: Function 68H operations requested on a handle associated with a
character device return a success flag but have no effect.
Example: Assume that the file MYFILE.DAT has been opened previously
and that the handle for the file is stored in the variable fhandle.
Call Function 68H to ensure that any data in MS-DOS's internal buffers
associated with the handle is written out to disk and that the
directory and FAT are up-to-date.
fname db 'MYFILE.DAT',0 ; ASCIIZ filename.
fhandle dw ? ; Handle from Open operation.
.
.
.
mov ah,68h ; Function 68H = commit file.
mov bx,fhandle ; Handle from previous open.
int 21h ; Transfer to MS-DOS.
jc error ; Jump if function failed.
.
.
.
New internationalization support functions
MS-DOS version 3.3 includes two new Interrupt 21H internationalization
support functions: Get Extended Country Information (Function 65H) and
Select Code Page (Function 66H).
Get Extended Country Information
The Get Extended Country Information function (Interrupt 21H Function
65H) returns a superset of the internationalization information
obtained with Interrupt 21H Function 38H (Get/Set Current Country).
Function 65H is called by issuing a software Interrupt 21H with
AH = 65H
AL = information ID code:
= 01H get general internationalization information
= 02H get pointer to uppercase table
= 04H get pointer to filename uppercase table
= 06H get pointer to collating sequence table
BX = code page of interest (active CON device = -1)
CX = length of buffer to receive information (error returned
if less than 5)
DX = country ID (default = -1)
ES:DI = address of buffer to receive information
On return,
If function is successful:
Carry flag is clear.
Requested data is in calling program's buffer.
If function is not successful:
Carry flag is set.
AX = error code
Function 65H may fail if either the country code or the code-page
number is invalid or if the code page does not match the country code.
If the buffer to receive the information is at least 5 bytes but is
too short for the requested information, the data is truncated and no
error is returned.
The format of the data returned by Subfunction 01H in the calling
program's buffer is
╓┌─────────────────────────────────────────────────┌─────────────────────────╖
Field Size
──────────────────────────────────────────────────────────────────
Information ID code (01H) Byte
Length of following buffer (38 or less) Word
Country ID Word
Code-page number Word
Date format Word
Currency symbol 5 bytes
Thousands separator Word
Decimal separator Word
Date separator Word
Time separator Word
Currency format flags Byte
Digits in currency Byte
Time format Byte
Monocase routine entry point Doubleword
Data list separator Word
Reserved 10 bytes
See SYSTEM CALLS: INTERRUPT 21H: Function 38H.
The format of the data returned by Subfunctions 02H, 04H, and 06H is
╓┌─────────────────────────────────────────────────┌─────────────────────────╖
Field Size
──────────────────────────────────────────────────────────────────
Information ID code (02H, 04H, or 06H) Byte
Pointer to table Doubleword
The uppercase and filename uppercase tables are 130 bytes. The first 2
bytes contain the size of the table; the subsequent 128 bytes contain
the uppercase equivalents, if any, for character codes 80H through
0FFH. The main use of these tables is to map accented or otherwise
modified vowels to their plain vowel equivalents. Text translated
using these tables can be sent to devices that do not support the IBM
graphics character set or can be used to create filenames that do not
require a special keyboard configuration for entry.
The collating table is 258 bytes. The first 2 bytes contain the table
length and the next 256 bytes contain the values to be used for the
corresponding character codes (0-0FFH) during a sort operation. Among
other things, this table maps uppercase and lowercase ASCII characters
to the same collating codes (so that sorts will be case insensitive)
and maps accented vowels to their plain vowel equivalents.
Note: In some cases, a truncated translation table might be presented
to the program by MS-DOS. Applications should always check the length
specified at the beginning of the table to be sure the table contains
a translation code for the character of interest.
Example: Obtain the extended country information associated with the
default country and code page 437.
buffer db 41 dup (0) ; Receives country information.
.
.
.
mov ax,6501h ; Function = get extended info.
mov bx,437 ; Code page.
mov cx,41 ; Length of buffer.
mov dx,-1 ; Default country.
mov di,seg buffer ; ES:DI = buffer address.
mov es,di
mov di,offset buffer
int 21h ; Transfer to MS-DOS.
jc error ; Jump if function failed.
.
.
.
In this case, MS-DOS fills the following extended country information
into the buffer:
buffer db 1 ; Information ID code
dw 38 ; Length of following buffer
dw 1 ; Country ID (USA)
dw 437 ; Code-page number
dw 0 ; Date format
db '$',0,0,0,0 ; Currency symbol
db ',',0 ; Thousands separator
db '.',0 ; Decimal separator
db '-',0 ; Date separator
db ':',0 ; Time separator
db 0 ; Currency format flags
db 2 ; Digits in currency
db 0 ; Time format
dd 026ah:176ch ; Monocase routine entry point
db ',',0 ; Data list separator
db 10 dup (0) ; Reserved
Example: Obtain the pointer to the uppercase table associated with the
default country and code page 437.
buffer db 5 dup (0) ; Receives pointer information.
.
.
.
mov ax,6502h ; Function = get pointer to
; uppercase table.
mov bx,437 ; Code page.
mov cx,5 ; Length of buffer.
mov dx,-1 ; Default country.
mov di,seg buffer ; ES:DI = buffer address.
mov es,di
mov di,offset buffer
int 21h ; Transfer to MS-DOS.
jc error ; Jump if function failed.
.
.
.
In this case, MS-DOS fills the following values into the buffer:
buffer db 2 ; Information ID code
dw 0204h ; Offset of uppercase table
dw 1140h ; Segment of uppercase table
The table at 1140:0204H contains the following data:
0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
1140:0200 80 00 80 9A 45 41 8E 41 8F 80 45 45 ....EA.A..EE
1140:0210 45 49 49 49 8E 8F 90 92 92 4F 99 4F 55 55 59 99 EIII.....O.OUUY.
1140:0220 9A 9B 9C 9D 9E 9F 41 49 4F 55 A5 A5 A6 A7 A8 A9 ......AIOU......
1140:0230 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 ................
1140:0240 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 ................
1140:0250 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 ................
1140:0260 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 ................
1140:0270 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 ................
1140:0280 FA FB FC FD FE FF ......
Select Code Page
The Select Code Page function (Interrupt 21H Function 66H) queries or
selects the current code page. Function 66H is called by issuing a
software Interrupt 21H with
AH = 66H
AL = subfunction:
= 01H get code page
= 02H select code page
BX = code page to select if AL = 02H
On return,
If function is successful:
Carry flag is clear.
If AL was 01H on call:
BX = active code page
DX = default code page
If function is not successful:
Carry flag is set.
AX = error code
When Subfunction 02H is used, MS-DOS gets the new code page from the
COUNTRY.SYS file. The device must be previously prepared for code-page
switching by including the appropriate DEVICE command in the
CONFIG.SYS file and by issuing the NLSFUNC and MODE CP PREPARE
commands (usually by placing them in the AUTOEXEC.BAT file).
Example: Force the active code page to be the same as the system's
default code page-that is, return to the code page that was active
when the system was first booted.
.
.
.
mov ax,6601h ; Function = get code page.
int 21h ; Transfer to MS-DOS.
jc error ; Jump if function failed.
mov bx,dx ; Force active page = default.
mov ax,6602h ; Function = set code page.
int 21h ; Transfer to MS-DOS.
jc error ; Jump if function failed.
.
.
.
Extension of IOCTL
The MS-DOS IOCTL service (Interrupt 21H Function 44H) and its device-
driver underpinnings have been extended to support code-page switching
by the interactive CHCP and MODE commands or by application programs.
The relevant IOCTL subfunction is 0CH (Generic IOCTL for Handles). An
MS-DOS utility or application program gains access to this subfunction
by executing a software Interrupt 21H with
AH = 44H
AL = 0CH
BX = handle for character device
CH = category code:
= 00H unknown
= 01H COM1, COM2, COM3, or COM4
= 03H CON (keyboard and video display)
= 05H LPT1, LPT2, or LPT3
CL = function (minor) code:
= 4AH select code page
= 4CH start code-page preparation
= 4DH end code-page preparation
= 6AH query selected code page
= 6BH query prepare list
DS:DX = pointer to Generic IOCTL parameter block
On return,
If function is successful:
Carry flag is clear.
If function is not successful:
Carry flag is set.
AX = error code:
= 01H invalid function number
= 19H bad data read from font file
= 22H unknown command
= 26H code page not prepared or selected
= 27H code page conflict or device or code page not
found in file
= 29H device error
= 31H file contents not a valid font or no previous
"start code-page preparation" call
Additional information about the cause of the error can be obtained
with a call to Interrupt 21H Function 59H (Get Extended Error
Information).
The parameter blocks for minor codes 4AH, 4DH, and 6AH have the
following format:
╓┌───────────────────────────────────────────────┌───────────────────────────╖
Field Size
──────────────────────────────────────────────────────────────────
Length of following data Word
Code page ID Word
The parameter block for minor code 4CH has the following format:
╓┌────────────────────────────────────────────────┌──────────────────────────╖
Field Size
──────────────────────────────────────────────────────────────────
Flags Word
Length of remainder of parameter Word
block (2[n+1])
Number of code pages in the
following list (n) Word
Code page 1 Word
Code page 2 Word
.
.
.
Code page n Word
The parameter block for minor code 6BH has the following format,
assuming n hardware code pages and m prepared code pages (n <= 12,
m <= 12):
╓┌─────────────────────────────────────────────────┌─────────────────────────╖
Field Size
──────────────────────────────────────────────────────────────────
Length of following data (2[n+m+2]) Word
Number of hardware code pages (n) Word
Hardware code page 1 Word
Hardware code page 2 Word
.
.
.
Hardware code page n Word
Number of prepared code pages (m) Word
Prepared code page 1 Word
Prepared code page 2 Word
.
.
.
Prepared code page m Word
After a Start Code-Page Preparation (minor code 4CH) call, the program
must write the data defining the code-page font to the driver using
one or more IOCTL Send Control Data to Character Device (Interrupt 21H
Function 44H Subfunction 03H) calls. The format of the data is both
device-specific and driver-specific. After the font data has been
written to the driver, the program must issue an End Code-Page
Preparation (minor code 4DH) call. If no data is written to the driver
between the start and end calls, the driver interprets the newly
prepared code pages as hardware code pages.
A special variation of Start Code-Page Preparation, called "refresh,"
is required to actually load the peripheral device with the prepared
code pages. The refresh operation is obtained by calling minor code
4CH with each code-page position in the parameter block set to -1 and
then immediately calling minor code 4DH.
The device-driver support that corresponds to IOCTL Subfunction 0CH is
invoked by the MS-DOS kernel via the Generic IOCTL function (driver
command code 19). The category (major) and function (minor) codes
described above, along with a pointer to the parameter block, are
passed to the driver in the request header. See PROGRAMMING IN THE
MS-DOS ENVIRONMENT: CUSTOMIZING MS-DOS: Installable Device Drivers.
Extended MS-DOS partitions
An extended MS-DOS partition is indicated by a system indicator byte
value of 05 in the partition table of the fixed disk's master boot
record. See PROGRAMMING IN THE MS-DOS ENVIRONMENT: STRUCTURE OF
MS-DOS: MS-DOS Storage Devices. An extended partition is not
bootable and can be created on a bootable fixed-disk drive only
if that drive already contains a primary MS-DOS partition (system
indicator type 01 or 04). Fixed disks that are not bootable can
contain an extended partition without a primary partition.
An extended partition is subdivided into extended logical disk
volumes, each consisting of an extended boot record and a logical
block device. The extended boot record is analogous in structure to
the partition table for the fixed disk as a whole; it contains a
logical drive table describing the volume and a pointer to the next
extended logical volume. The logical block device is an image of a
normal MS-DOS disk, including a master block (logical sector 0
containing the BPB describing the device), root directory, FAT, and
files area. Each extended volume must start and end on a cylinder
boundary.
Van Wolverton
Ray Duncan
Return to The MS-DOS Encyclopedia: Contents