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)

(if DX 0FFFFh)

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)