Table of Contents

Note: This API call is for DOS and Win16 personality only. Use Family API for portability.

2018/09/07 05:04 · prokushev · 0 Comments

Int 21H, AH=38H, AL=01H

Version

3 and higher

Brief

SET COUNTRY CODE/GET COUNTRY-SPECIFIC INFORMATION

Family API

Input

Get:

      AL = 01h thru 0FEh for specific country with code <255 (see #01400)
      AL = 0FFh for specific country with code >= 255
         BX = 16-bit country code (see #01400)
      DS:DX -> buffer for returned info (see #01399)
Set:
      AH = 38h
      DX = FFFFh
      AL = 01h thru FEh for specific country with code <255
      AL = FFh for specific country with code >= 255
         BX = 16-bit country code (see #01400)

Return

Get:

CF set on error
          AX = error code (02h)
      CF clear if successful
          AX = country code (Novell NWDOS v7.0)
          BX = country code
          DS:DX buffer filled

Set:

   CF set on error
          AX = error code (see #01680 at AH=59h/BX=0000h)
      CF clear if successful
          

Macro

Notes

this function is not supported by the Borland DPMI host, but no error is returned; as a workaround, one should allocate a buffer in conventional memory with INT 31/AX=0100h and simulate an INT 21 with INT 31/AX=0300h

Format of DOS 2.00-2.10 country info:

Offset Size Description
00h WORD date format 0 = USA mm dd yy 1 = Europe dd mm yy 2 = Japan yy mm dd
02h BYTE currency symbol
03h BYTE 00h
04h BYTE thousands separator char
05h BYTE 00h
06h BYTE decimal separator char
07h BYTE 00h
08h 24 BYTEs reserved

Format of DOS 2.11+ country info:

Offset Size Description
00h WORD date format (see #01398)
02h 5 BYTEs ASCIZ currency symbol string
07h 2 BYTEs ASCIZ thousands separator
09h 2 BYTEs ASCIZ decimal separator
0Bh 2 BYTEs ASCIZ date separator
0Dh 2 BYTEs ASCIZ time separator
0Fh BYTE currency format
bit 2 = set if currency symbol replaces decimal point
bit 1 = number of spaces between value and currency symbol
bit 0 = 0 if currency symbol precedes value
1 if currency symbol follows value
10h BYTE number of digits after decimal in currency
11h BYTE time format
bit 0 = 0 if 12-hour clock
1 if 24-hour clock
12h DWORD address of case map routine (FAR CALL, AL = character to map to upper case [>= 80h])
16h 2 BYTEs ASCIZ data-list separator
18h 10 BYTEs reserved

Values for country code:

001h (1) United States
002h (2) Canadian-French
003h (3) Latin America
004h (4) Canada (English)
007h (7) Russia
014h (20) Egypt
01Bh (27) South Africa
01Eh (30) Greece
01Fh (31) Netherlands
020h (32) Belgium
021h (33) France
022h (34) Spain
023h (35) Bulgaria???
024h (36) Hungary (not supported by DR DOS 5.0)
026h (38) Yugoslavia (not supported by DR DOS 5.0) – obsolete
027h (39) Italy / San Marino / Vatican City
028h (40) Romania
029h (41) Switzerland / Liechtenstein
02Ah (42) Czechoslovakia / Tjekia / Slovakia (not supported by DR DOS 5.0)
02Bh (43) Austria (DR DOS 5.0)
02Ch (44) United Kingdom
02Dh (45) Denmark
02Eh (46) Sweden
02Fh (47) Norway
030h (48) Poland (not supported by DR DOS 5.0)
031h (49) Germany
033h (51) Peru
034h (52) Mexico
035h (53) Cuba
036h (54) Argentina
037h (55) Brazil (not supported by DR DOS 5.0)
038h (56) Chile
039h (57) Columbia
03Ah (58) Venezuela
03Ch (60) Malaysia
03Dh (61) International English / Australia
03Eh (62) Indonesia / East Timor
03Fh (63) Philippines
040h (64) New Zealand
041h (65) Singapore
042h (66) Thailand (or Taiwan???)
051h (81) Japan (DR DOS 5.0, MS-DOS 5.0+)
052h (82) South Korea (DR DOS 5.0)
054h (84) Vietnam
056h (86) China (MS-DOS 5.0+)
058h (88) Taiwan (MS-DOS 5.0+)
05Ah (90) Turkey (MS-DOS 5.0+)
05Bh (91) India
05Ch (92) Pakistan
05Dh (93) Afghanistan
05Eh (94) Sri Lanka
062h (98) Iran
063h (99) Asia (English)
066h (102) ??? (Hebrew MS-DOS 5.0)
070h (112) Belarus
0C8h (200) Thailand (PC DOS 6.1+) (reported as 01h due to a bug in PC DOS COUNTRY.SYS)
0D4h (212) Morocco
0D5h (213) Algeria
0D8h (216) Tunisia
0DAh (218) Libya
0DCh (220) Gambia
0DDh (221) Senegal
0DEh (222) Maruitania
0DFh (223) Mali
0E0h (224) African Guinea
0E1h (225) Ivory Coast
0E2h (226) Burkina Faso
0E3h (227) Niger
0E4h (228) Togo
0E5h (229) Benin
0E6h (230) Mauritius
0E7h (231) Liberia
0E8h (232) Sierra Leone
0E9h (233) Ghana
0EAh (234) Nigeria
0EBh (235) Chad
0ECh (236) Centra African Republic
0EDh (237) Cameroon
0EEh (238) Cape Verde Islands
0EFh (239) Sao Tome and Principe
0F0h (240) Equatorial Guinea
0F1h (241) Gabon
0F2h (242) Congo
0F3h (243) Zaire
0F4h (244) Angola
0F5h (245) Guinea-Bissau
0F6h (246) Diego Garcia
0F7h (247) Ascension Isle
0F8h (248) Seychelles
0F9h (249) Sudan
0FAh (250) Rwhanda
0FBh (251) Ethiopia
0FCh (252) Somalia
0FDh (253) Djibouti
0FEh (254) Kenya
0FFh (255) Tanzania
100h (256) Uganda
101h (257) Burundi
103h (259) Mozambique
104h (260) Zambia
105h (261) Madagascar
106h (262) Reunion Island
107h (263) Zimbabwe
108h (264) Namibia
109h (265) Malawi
10Ah (266) Lesotho
10Bh (267) Botswana
10Ch (268) Swaziland
10Dh (269) Comoros
10Eh (270) Mayotte
122h (290) St. Helena
129h (297) Aruba
12Ah (298) Faroe Islands
12Bh (299) Greenland
15Eh (350) Gibraltar
15Fh (351) Portugal
160h (352) Luxembourg
161h (353) Ireland
162h (354) Iceland
163h (355) Albania
164h (356) Malta
165h (357) Cyprus
166h (358) Finland
167h (359) Bulgaria
172h (370) Lithuania (reported as 372 due to a bug in MS-DOS COUNTRY.SYS)
173h (371) Latvia (reported as 372 due to a bug in MS-DOS COUNTRY.SYS)
174h (372) Estonia
175h (373) Moldova
177h (375) ??? (MS-DOS 7.10 / Windows98)
17Ch (380) Ukraine
17Dh (381) Serbia / Montenegro
180h (384) Croatia
181h (385) Croatia (PC DOS 7+)
182h (386) Slovenia
183h (387) Bosnia-Herzegovina (Latin)
184h (388) Bosnia-Herzegovina (Cyrillic) (PC DOS 7+) (reported as 381 due to a bug in PC DOS COUNTRY.SYS)
185h (389) FYR Macedonia
1A5h (421) Czech Republic / Tjekia (PC DOS 7+)
1A6h (422) Slovakia (reported as 421 due to a bug in COUNTRY.SYS)
1F4h (500) Falkland Islands
1F5h (501) Belize
1F6h (502) Guatemala
1F7h (503) El Salvador
1F8h (504) Honduras
1F9h (505) Nicraragua
1FAh (506) Costa Rica
1FBh (507) Panama
1FCh (508) St. Pierre and Miquelon
1FDh (509) Haiti
24Eh (590) Guadeloupe
24Fh (591) Bolivia
250h (592) Guyana
251h (593) Ecuador
252h (594) French Guiana
253h (595) Paraguay
254h (596) Martinique / French Antilles
255h (597) Suriname
256h (598) Uruguay
257h (599) Netherland Antilles
29Ah (666) Russia??? (PTS-DOS 6.51 KEYB)
29Bh (667) Poland??? (PTS-DOS 6.51 KEYB)
29Ch (668) Poland??? (Slavic???) (PTS-DOS 6.51 KEYB)
29Eh (670) Saipan / N. Mariana Island
29Fh (671) Guam
2A0h (672) Norfolk Island (Australia) / Christmas Island/Cocos Islands / Antartica
2A1h (673) Brunei Darussalam
2A2h (674) Nauru
2A3h (675) Papua New Guinea
2A4h (676) Tonga Islands
2A5h (677) Solomon Islands
2A6h (678) Vanuatu
2A7h (679) Fiji
2A8h (680) Palau
2A9h (681) Wallis & Futuna
2AAh (682) Cook Islands
2ABh (683) Niue
2ACh (684) American Samoa
2ADh (685) Western Samoa
2AEh (686) Kiribati
2AFh (687) New Caledonia
2B0h (688) Tuvalu
2B1h (689) French Polynesia
2B2h (690) Tokealu
2B3h (691) Micronesia
2B4h (692) Marshall Islands
2C7h (711) ??? (currency = EA$, code pages 437,737,850,852,855,857)
311h (785) Arabic (Middle East/Saudi Arabia/etc.)
324h (804) Ukraine
329h (809) Antigua and Barbuda / Anguilla / Bahamas / Barbados / Bermuda / British Virgin Islands / Cayman Islands / Dominica / Dominican Republic / Grenada / Jamaica / Montserra / St. Kitts and Nevis / St. Lucia / St. Vincent and Grenadines / Trinidad and Tobago / Turks and Caicos
352h (850) North Korea
354h (852) Hong Kong
355h (853) Macao
357h (855) Cambodia
358h (856) Laos
370h (880) Bangladesh
376h (886) Taiwan (MS-DOS 6.22+)
3C0h (960) Maldives
3C1h (961) Lebanon
3C2h (962) Jordan
3C3h (963) Syria / Syrian Arab Republic
3C4h (964) Iraq
3C5h (965) Kuwait
3C6h (966) Saudi Arabia
3C7h (967) Yemen
3C8h (968) Oman
3C9h (969) Yemen??? (Arabic MS-DOS 5.0)
3CBh (971) United Arab Emirates
3CCh (972) Israel (Hebrew) (DR DOS 5.0,MS-DOS 5.0+)
3CDh (973) Bahrain
3CEh (974) Qatar
3CFh (975) Bhutan
3D0h (976) Mongolia
3D1h (977) Nepal
3E3h (995) Myanmar (Burma)
(10xxx) reserved for ISO 28601/ISO 8601 or derivative national stds
(11xxx) reserved for Euro currency support
(12xxx) reserved for ISO 28601 + Euro currency
(1xxxx) not yet defined
(20xxx) reserved for ISO 28601/ISO 8601 or derivative national stds
(21xxx) reserved for Euro currency support
(22xxx) reserved for ISO 28601 + Euro currency
(2xxxx) not yet defined
(30xxx) reserved for user-definable country codes
(31xxx) reserved for OEM-defined country codes
(32000+) reserved for future expansion

Note: not all country codes are supported by all versions of DOS

See also

AH=65h,INT 10/AX=5001h,INT 2F/AX=1404h, INT 2F/AX=1403h

Note

Text based on Ralf Brown Interrupt List Release 61

2018/09/04 17:23 · prokushev · 0 Comments