INT 21h, AX=6501h을 사용하십시오. 터보 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;
}
Btw Ralf Brown의 인터럽트 목록은 DOS 시스템 호출에 유용한 리소스입니다. DOS가 호의를 잃기도 전에 그것이 유지되는 것을 멈추게했다. 그래서 몇몇 "최신"물건은 거기에 기술되지 않았다.
우수 답변. Unfortunatelly DOSBox는 유용한 국가 또는 코드 페이지 정보를 제공하지 않는 것 같습니다. 반환 된 정보는 1 + 437 (미국 국가 및 코드 페이지)이었습니다. 현재 자판 배열이 국가를 탐지하는 유일한 유용한 소스 일 수 있습니다. – digitalfootmark