2016-08-18 1 views
0

Comment obtenir des informations locales spécifiques où le pays peut être détecté? Par exemple. code pays actuel, disposition du clavier ou page de codes dans Turbo C dans DOS environnement?DOS: comment obtenir le code de pays ou la page de codes en cours dans Turbo C

Si cela n'est pas possible avec les fonctions de bibliothèque Turbo C, certains appels BIOS peuvent le faire (INT 21) ?.

Le programme KEYB est capable de montrer par ex. clavier. Ce serait plus que suffisant pour mes fins: https://www.dosbox.com/wiki/KEYB

Répondre

3

Utilisez INT 21h, AX=6501h. Voici le code pour 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; 
} 

Btw. La liste d'interruption de Ralf Brown est une excellente ressource pour les appels système DOS. Dommage que cela ait cessé d'être maintenu avant même que DOS n'ait manqué de faveurs, de sorte que certaines choses "les plus récentes" n'y sont pas décrites.

+0

Excellente réponse. Malheureusement, DOSBox ne semble pas fournir d'informations utiles sur les pays ou les pages de codes. L'information retournée était 1 + 437 (pays des États-Unis et page de codes). La disposition actuelle du clavier peut être la seule source utile pour détecter le pays. – digitalfootmark