Function 38h Return Country Dependent Information
(PCDOS 2.0, 2.1, MSDOS 2.00 only)
entry AH 38h
AL function code (must be 0 in DOS 2.x)
DS:DX pointer to 32 byte memory buffer for returned information
return CF set on error
AX error code (02h)
BX country code
DS:DX pointer to buffer filled with country information:
bytes 0,1 date/time format
0 USA standard H:M:S M/D/Y
1 European standard H:M:S D/M/Y
2 Japanese standard H:M:S D:M:Y
byte2 ASCIIZ string currency symbol
byte3 zeroes
byte4 ASCIIZ string thousands separator
byte5 zeroes
byte6 ASCIIZ string decimal separator
byte7 zeroes
bytes 8,1Fh 24 bytes reserved
Function 38h Get Country Dependent Information
(PCDOS 3.x+, MSDOS 2.01+)
entry AH 38h
AL function code
00h to get current country information
01h-0FEh country code to get information for, for countries
with codes less than 255
0FFh to get country information for countries with a code
greater than 255
BX 16 bit country code if AL=0FFh
DS:DX pointer to the memory buffer where the data will be returned
DX 0FFFFh if setting country code rather than getting info
return CF 0 (clear) function completed
1 (set) error
AX error code
02h invalid country code (no table for it)
BX country code (usually international telephone code)
DS:DX pointer to country data buffer
bytes 0,1 date/time format
0 USA standard H:M:S M/D/Y
1 European standard H:M:S D/M/Y
2 Japanese standard H:M:S D:M:Y
bytes 2-6 currency symbol null terminated
byte 07h thousands separator null terminated
byte 08h zeroes
byte 09h decimal separator null terminated
byte 0Ah zeroes
byte 0Bh date separator null terminated
byte 0Ch zeroes
byte 0Dh time separator null terminated
byte 0Eh zeroes
byte 0Fh bit field currency format
bit 0 = 0 if currency symbol precedes the value
1 if currency symbol is after the value
bit 1 = 0 no spaces between value and currency symbol
1 one space between value and currency symbol
bit 2 = 1 set if currency symbol replaces decimal pt
bits 3-7 not defined by Microsoft
byte 10h number of significant decimal digits in currency
(number of places to right of decimal point)
byte 11h time format
bit 0 = 0 12 hour clock
1 24 hour clock
bits 1-7 unknown, probably not used
bytes 12h-15h address of case map routine (FAR CALL, AL = char)
entry AL ASCII code of character to be converted to
uppercase
return AL ASCII code of the uppercase input character
byte 16h data-list separator character
byte 17h zeroes
bytes 18h-21h 5 words reserved
note 1) When an alternate keyboard handler is invoked, the keyboard routine is
loaded into user memory starting at the lowest portion of availible
user memory. The BIOS interrupt vector that services the keyboard is
redirected to the memory area where the new routine resides. Each new
routine takes up about 1.6K of memory and has lookup tables that return
values unique to each language. (KEYBxx in the DOS book)
Once the keyboard interrupt vector is changed by the DOS keyboard
routine, the new routine services all calls unless the system is
returned to the US format by the ctrl-alt-F1 keystroke combination. This
does not change the interrupt vector back to the BIOS location; it
merely passes the table lookup to the ROM locations.
2) Ctrl-Alt-F1 will only change systems with US ROMS to the US layout.
Some systems are delivered with non-US keyboard handler routines in ROM
3) Case mapping call: the segment/offset of a FAR procedure that performs
country-specific lower-to-upper case mapping on ASCII characters 80h to
0FFh. It is called with the character to be mapped in AL. If there is
an uppercase code for the letter, it is returned in AL, if there is no
code or the function was called with a value of less than 80h AL is
returned unchanged.
4) This call is fully implemented in MS-DOS version 2.01 and higher. It
is in version 2.00 but not fully implemented (according to Microsoft)
Function 38h Set Country Dependent Information
entry AH 38h
AL code country code to set information for, for countries
with codes less than 255
0FFh to set country information for countries with a code
greater than 255
BX 16 bit country code if AL=0FFh
DX 0FFFFh
return CF clear successful
set if error
AX error code (02h)