如何获取可以检测到国家/地区的某些特定于语言环境的信息?例如。 Turbo C中 DOS 环境中的当前国家/地区代码,键盘布局或代码页?
如果使用Turbo C库函数无法实现,某些BIOS调用可以这样做(INT 21)?。
KEYB程序能够显示例如键盘布局。这对我的目的来说已经足够了: https://www.dosbox.com/wiki/KEYB
答案 0 :(得分:3)
使用INT 21h, AX=6501h。这是Turbo C的代码:
#include <dos.h>
#include <stdio.h>
struct country_info_buffer
{
unsigned char info_id;
unsigned short buffer_size;
unsigned short country_id;
unsigned short code_page;
struct COUNTRY country_info;
};
int main()
{
/* Registers for INT21 call */
union REGS regs;
struct SREGS sregs;
/* Output buffer */
struct country_info_buffer info;
/* Get current value of segment registers */
segread(&sregs);
/* Get extended country information / general internationalization info */
regs.x.ax = 0x6501;
/* Global code page */
regs.x.bx = 0xFFFF;
/* Current country */
regs.x.dx = 0xFFFF;
/* Size of output buffer */
regs.x.cx = sizeof(info);
/* Pointer to output buffer goes to ES:DI */
sregs.es = FP_SEG(&info);
regs.x.di = FP_OFF(&info);
/* Call int21 */
intdosx(®s, ®s, &sregs);
if (regs.x.cflag)
{
printf("Call failed, ax=%d\n", regs.x.ax);
return 1;
}
printf("Country code: %d, Code page: %d\n", info.country_id, info.code_page);
return 0;
}
顺便说一下。 Ralf Brown的中断列表是DOS系统调用的绝佳资源。太糟糕了,即使在DOS用完之前它就不再被维护了,所以那里没有描述一些“最新”的东西。