2016-08-18 1 views
0

Как получить определенную локальную информацию, в которой страна может быть обнаружена? Например. текущий код страны, раскладка клавиатуры или кодовая страница в Turbo C в DOS окружающая среда?DOS: как получить текущий код страны или кодовую страницу в Turbo C

Если это невозможно с помощью функций библиотеки Turbo C, некоторые вызовы BIOS могут сделать это (INT 21) ?.

KEYB программа способна показать, например. раскладка клавиатуры. Этого было бы более чем достаточно для моих целей: https://www.dosbox.com/wiki/KEYB

ответ

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(&regs, &regs, &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 исчерпала себя, поэтому некоторые «новейшие» вещи там не описаны.

+0

Отличный ответ. К сожалению, DOSBox, похоже, не предоставляет полезную информацию о стране или кодовой странице. Возвращенная информация была 1 + 437 (страна США и кодовая страница). Текущая раскладка клавиатуры может быть единственным полезным источником для обнаружения страны. – digitalfootmark

Смежные вопросы