/install/install.c |
---|
72,6 → 72,7 |
int keybfile; |
int keyboff; |
int keyblen; |
unsigned int keybid; |
}; |
211,6 → 212,21 |
video_movecursor(25,0); |
} |
/* fills a slocales struct accordingly to the value of its keyboff member */ |
static void kblay2slocal(struct slocales *locales) { |
char *m; |
for (m = kblayouts[locales->keyboff]; *m != 0; m++); /* skip layout name */ |
m++; |
/* skip keyb code and copy it to locales.keybcode */ |
locales->keybcode = m; |
for (; *m != 0; m++); |
/* */ |
locales->codepage = ((unsigned short)m[1] << 8) | m[2]; |
locales->egafile = m[3]; |
locales->keybfile = m[4]; |
locales->keybid = ((unsigned short)m[5] << 8) | m[6]; |
} |
static int selectlang(struct slocales *locales) { |
int choice, x; |
char *msg; |
254,51 → 270,25 |
locales->keyblen = OFFCOUNT; |
break; |
} |
/* populate the slocales struct */ |
for (msg = kblayouts[locales->keyboff]; *msg != 0; msg++); /* skip layout name */ |
msg++; |
/* skip keyb code and copy it to locales.keybcode */ |
locales->keybcode = msg; |
for (; *msg != 0; msg++); |
/* populate the slocales struct accordingly to the keyboff member */ |
kblay2slocal(locales); |
/* */ |
locales->codepage = ((unsigned short)msg[1] << 8) | msg[2]; |
locales->egafile = msg[3]; |
locales->keybfile = msg[4]; |
/* */ |
return(MENUNEXT); |
} |
#define LTODEC(x, y) ((unsigned short)(x << 8) | (y)) |
static int selectkeyb(struct slocales *locales) { |
int keyboff, keyblen, menuheight; |
unsigned short lang; |
lang = LTODEC(locales->lang[0], locales->lang[1]); |
switch (lang) { |
case LTODEC('F', 'R'): |
keyboff = OFFLOC_FR; |
keyblen = OFFLEN_FR; |
break; |
case LTODEC('P', 'L'): |
keyboff = OFFLOC_PL; |
keyblen = OFFLEN_PL; |
break; |
case LTODEC('T', 'R'): |
keyboff = OFFLOC_TR; |
keyblen = OFFLEN_TR; |
break; |
default: /* otherwise propose all possible keyoard layouts */ |
keyboff = 0; |
keyblen = OFFCOUNT; |
break; |
} |
if (keyblen == 1) return(MENUNEXT); /* do not ask for keyboard layout if only one is available for given language */ |
int menuheight, choice; |
if (locales->keyblen == 1) return(MENUNEXT); /* do not ask for keyboard layout if only one is available for given language */ |
newscreen(0); |
putstringnls(5, 1, COLOR_BODY[mono], 1, 5, "Svarog386 supports the keyboard layouts used in different countries. Choose the keyboard layout you want."); |
menuheight = keyblen + 2; |
menuheight = locales->keyblen + 2; |
if (menuheight > 13) menuheight = 13; |
if (menuselect(10, -1, menuheight, &(kblayouts[keyboff]), keyblen) < 0) return(MENUPREV); |
choice = menuselect(10, -1, menuheight, &(kblayouts[locales->keyboff]), locales->keyblen); |
if (choice < 0) return(MENUPREV); |
/* (re)load the keyboard layout & codepage setup */ |
locales->keyboff += choice; |
kblay2slocal(locales); |
return(MENUNEXT); |
} |
504,6 → 494,8 |
static void bootfilesgen(int targetdrv, struct slocales *locales, int cdromdrv) { |
char buff[128]; |
char buff2[16]; |
char buff3[16]; |
FILE *fd; |
/*** CONFIG.SYS ***/ |
snprintf(buff, sizeof(buff), "%c:\\CONFIG.SYS", targetdrv); |
550,10 → 542,16 |
} |
if (locales->keybfile > 0) { |
if (locales->keybfile == 1) { |
fprintf(fd, "KEYB %s,%d,%c:\\SYSTEM\\SVAROG.386\\BIN\\KEYBOARD.SYS\r\n", locales->keybcode, locales->codepage, targetdrv); |
snprintf(buff2, sizeof(buff2), "KEYBOARD.SYS"); |
} else { |
fprintf(fd, "KEYB %s,%d,%c:\\SYSTEM\\SVAROG.386\\BIN\\KEYBRD%d.SYS\r\n", locales->keybcode, locales->codepage, targetdrv, locales->keybfile); |
snprintf(buff2, sizeof(buff2), "KEYBRD%d.SYS", locales->keybfile); |
} |
if (locales->keybid > 0) { |
buff3[0] = 0; |
} else { |
snprintf(buff3, sizeof(buff3), " /ID:%d", locales->keybid); |
} |
fprintf(fd, "KEYB %s,%d,%c:\\SYSTEM\\SVAROG.386\\BIN\\%s%s\r\n", locales->keybcode, locales->codepage, targetdrv, buff2, buff3); |
fprintf(fd, "\r\n"); |
} |
fprintf(fd, "SHSUCDX /d:SVCD0001\r\n"); |
/install/keylay.h |
---|
1,19 → 1,19 |
char *kblayouts[] = { |
/****** EN ******/ |
"English (US)\0en\0\1\265\0\0", |
"English (UK)\0uk\0\1\265\0\1", |
"English (US)\0en\0\1\265\0\0\0\0", |
"English (UK)\0uk\0\1\265\0\1\0\0", |
/****** FR ******/ |
"French (France)\0fr\0\3\132\1\1", |
"French (Canada, standard)\0cf\0\3\137\11\1", |
"French (Canada, legacy)\0cf501\0\3\137\11\1", |
"French (France)\0fr\0\3\132\1\1\0\0", |
"French (Canada, standard)\0cf\0\3\137\11\1\0\0", |
"French (Canada, legacy)\0cf\0\3\137\11\1\1\365", |
/****** DE ******/ |
"German\0de\0\3\132\1\1", |
"German\0de\0\3\132\1\1\0\0", |
/****** HU ******/ |
"Hungarian\0hu208\0\3\124\1\1", |
"Hungarian\0hu\0\3\124\1\1\0\320", |
/****** PL ******/ |
"Polish\0pl\0\3\337\12\1", |
"Polish\0pl\0\3\337\12\1\0\0", |
/****** ES ******/ |
"Spanish\0es\0\3\132\1\1", |
"Spanish\0es\0\3\132\1\1\0\0", |
/****** TR ******/ |
"Turkish\0tr\0\3\131\1\2", |
"Turkish\0tr\0\3\131\1\2\0\0", |
NULL}; |
/install/locales.c |
---|
8,7 → 8,7 |
/* the kblayouts list is a NULL-terminated array that contains entries in the |
* following format: |
* human description string <0> layout code string <0> <codepage number as a 16bit value> <ega.sys file number as a single byte> <keyboard.sys file number as a single byte> |
* human description string <0> layout code string <0> <codepage number as a 16bit value> <ega.sys file number as a single byte> <keyboard.sys file number as a single byte> <sub keyb ID as a 16bit value, zero if none> |
char *kblayouts[] = { |
"English (US)\0xxxx", |
37,7 → 37,7 |
} |
static void addnew(char *countrycode, char *humanlang, char *keybcode, unsigned short cp, unsigned char egafile, unsigned char keybfile) { |
static void addnew(char *countrycode, char *humanlang, char *keybcode, unsigned short cp, unsigned char egafile, unsigned char keybfile, unsigned int subid) { |
static char lastcountry[4] = {0}; |
static int curoffset = 0, curcountryoffset = 0; |
/* if new country, declare an offset */ |
60,7 → 60,7 |
} |
/* */ |
if (countrycode[0] != 0) { |
fprintf(fdkeyb, " \"%s\\0%s\\0\\%d\\%d\\%d\\%d\",\r\n", humanlang, keybcode, dec2oct(cp >> 8), dec2oct(cp & 0xff), dec2oct(egafile), dec2oct(keybfile)); |
fprintf(fdkeyb, " \"%s\\0%s\\0\\%d\\%d\\%d\\%d\\%d\\%d\",\r\n", humanlang, keybcode, dec2oct(cp >> 8), dec2oct(cp & 0xff), dec2oct(egafile), dec2oct(keybfile), dec2oct(subid >> 8), dec2oct(subid & 0xff)); |
} else { |
fprintf(fdkeyb, " NULL};\r\n"); |
} |
77,33 → 77,33 |
/******************* LAYOUTS LIST START *******************/ |
/* English */ |
addnew("EN", "English (US)", "en", 437, 0, 0); |
addnew("EN", "English (UK)", "uk", 437, 0, 1); |
addnew("EN", "English (US)", "en", 437, 0, 0, 0); |
addnew("EN", "English (UK)", "uk", 437, 0, 1, 0); |
/* French */ |
addnew("FR", "French (France)", "fr", 858, 1, 1); |
addnew("FR", "French (Canada, standard)", "cf", 863, 9, 1); |
addnew("FR", "French (Canada, legacy)", "cf501", 863, 9, 1); |
addnew("FR", "French (France)", "fr", 858, 1, 1, 0); |
addnew("FR", "French (Canada, standard)", "cf", 863, 9, 1, 0); |
addnew("FR", "French (Canada, legacy)", "cf", 863, 9, 1, 501); |
/* German */ |
addnew("DE", "German", "de", 858, 1, 1); |
addnew("DE", "German", "de", 858, 1, 1, 0); |
/* Hungarian */ |
addnew("HU", "Hungarian", "hu208", 852, 1, 1); |
addnew("HU", "Hungarian", "hu", 852, 1, 1, 208); |
/* Polish */ |
addnew("PL", "Polish", "pl", 991, 10, 1); |
addnew("PL", "Polish", "pl", 991, 10, 1, 0); |
/* Spanish */ |
addnew("ES", "Spanish", "es", 858, 1, 1); |
addnew("ES", "Spanish", "es", 858, 1, 1, 0); |
/* Turkish */ |
addnew("TR", "Turkish", "tr", 857, 1, 2); |
addnew("TR", "Turkish", "tr", 857, 1, 2, 0); |
/******************* LAYOUTS LIST STOP *******************/ |
/* end of list - DO NOT REMOVE */ |
addnew("", "", "", 0, 0, 0); |
addnew("", "", "", 0, 0, 0, 0); |
/* close files */ |
fclose(fdoff); |