--- np2/win9x/sstpmsg.cpp 2003/10/16 17:58:50 1.1 +++ np2/win9x/sstpmsg.cpp 2005/03/20 13:12:49 1.10 @@ -1,24 +1,184 @@ #include "compiler.h" +#include "strres.h" #include "np2.h" +#include "oemtext.h" +#include "scrnmng.h" #include "sysmng.h" -#include "pccore.h" #include "sstp.h" #include "sstpres.h" +#include "pccore.h" +#include "iocore.h" +#include "sound.h" +#include "fmboard.h" #include "np2info.h" -static char cr[] = "\\n"; +static const OEMCHAR cr[] = OEMTEXT("\\n"); + + +// ---- np2info extend + +static const OEMCHAR str_jwinclr[] = + OEMTEXT("256色\0ハイカラー\0フルカラー\0トゥルーカラー"); +static const OEMCHAR str_jwinmode[] = + OEMTEXT(" (窓モード)\0 (フルスクリーン)"); + + +static void info_progtitle(OEMCHAR *str, int maxlen, const NP2INFOEX *ex) { + + milstr_ncpy(str, np2oscfg.titles, maxlen); +} + +static void info_jsound(OEMCHAR *str, int maxlen, const NP2INFOEX *ex) { + +const OEMCHAR *p; + + switch(usesound) { + case 0x01: + p = OEMTEXT("14ボード"); + break; + + case 0x02: + p = OEMTEXT("26音源"); + break; + + case 0x04: + p = OEMTEXT("86音源"); + break; + + case 0x06: + p = OEMTEXT("2枚刺し"); + break; + + case 0x08: + p = OEMTEXT("118音源"); + break; + + case 0x14: + p = OEMTEXT("86音源(ちびおと付)"); + break; + + case 0x20: + p = OEMTEXT("スピークボード"); + break; + + case 0x40: + p = OEMTEXT("スパークボード"); + break; + + case 0x80: + p = OEMTEXT("AMD-98"); + break; + + default: + p = OEMTEXT("なし"); + break; + } + milstr_ncpy(str, p, maxlen); +} + +static void info_jdisp(OEMCHAR *str, int maxlen, const NP2INFOEX *ex) { + + UINT bpp; + + bpp = scrnmng_getbpp(); + milstr_ncpy(str, milstr_list(str_jwinclr, ((bpp >> 3) - 1) & 3), maxlen); + milstr_ncat(str, milstr_list(str_jwinmode, (scrnmng_isfullscreen())?1:0), + maxlen); + (void)ex; +} + +static void info_jbios(OEMCHAR *str, int maxlen, const NP2INFOEX *ex) { + + str[0] = '\0'; + if (pccore.rom & PCROM_BIOS) { + milstr_ncat(str, str_biosrom, maxlen); + } + if (soundrom.name[0]) { + if (str[0]) { + milstr_ncat(str, OEMTEXT("と"), maxlen); + } + milstr_ncat(str, soundrom.name, maxlen); + } + if (str[0] == '\0') { + milstr_ncat(str, OEMTEXT("なし"), maxlen); + } +} + +static void info_jrhythm(OEMCHAR *str, int maxlen, const NP2INFOEX *ex) { + +const OEMCHAR *p; + OEMCHAR jrhythmstr[16]; + UINT exist; + UINT i; + + if (!(usesound & 0x6c)) { + p = OEMTEXT("不要やで"); + } + else { + exist = rhythm_getcaps(); + if (exist == 0) { + p = OEMTEXT("用意されてないんか…"); + } + else if (exist == 0x3f) { + p = OEMTEXT("全部あるで"); + } + else { + milstr_ncpy(jrhythmstr, OEMTEXT("BSCHTRや"), NELEMENTS(jrhythmstr)); + for (i=0; i<6; i++) { + if (!(exist & (1 << i))) { + jrhythmstr[i] = '_'; + } + } + p = jrhythmstr; + } + } + milstr_ncpy(str, p, maxlen); +} -static const BYTE prs2[] = {0xaa,0xac,0xae,0xb0,0xb2,0xbe,0xf0,0x9f, - 0xa1,0xa3,0xa5,0xa7,0xe1,0xe3,0xe5,0xc1, - 0xb8,0xa0,0xa2,0xa4,0xa6,0xa8,0xa9,0xab, - 0xad,0xaf,0xb1,0xb3,0xb5,0xb7,0xb9,0xbb, - 0xbd,0xbf,0xc2,0xc4,0xc6,0xc8,0xc9,0xca, - 0xcb,0xcc,0xcd,0xd0,0xd3,0xd6,0xd9,0xdc, - 0xdd,0xde,0xdf,0xe0,0xe2,0xe4,0xe6,0xe7, - 0xe8,0xe9,0xea,0xeb,0xed,0xf1,0xb4,0xb8}; +typedef struct { + OEMCHAR key[8]; + void (*proc)(OEMCHAR *str, int maxlen, const NP2INFOEX *ex); +} INFOPROC; +static const INFOPROC infoproc[] = { + {OEMTEXT("PROG"), info_progtitle}, + {OEMTEXT("JSND"), info_jsound}, + {OEMTEXT("JBIOS"), info_jbios}, + {OEMTEXT("JDISP"), info_jdisp}, + {OEMTEXT("JRHYTHM"), info_jrhythm}}; +static BOOL sstpext(OEMCHAR *dst, const OEMCHAR *key, int maxlen, + const NP2INFOEX *ex) { + +const INFOPROC *inf; +const INFOPROC *infterm; + + inf = infoproc; + infterm = infoproc + NELEMENTS(infoproc); + while(inf < infterm) { + if (!milstr_cmp(key, inf->key)) { + inf->proc(dst, maxlen, ex); + return(TRUE); + } + inf++; + } + return(FALSE); +} + +static const NP2INFOEX sstpex = {OEMTEXT("\\n"), sstpext}; + + +// ---- + +static const UINT8 prs2[] = {0xaa,0xac,0xae,0xb0,0xb2,0xbe,0xf0,0x9f, + 0xa1,0xa3,0xa5,0xa7,0xe1,0xe3,0xe5,0xc1, + 0xb8,0xa0,0xa2,0xa4,0xa6,0xa8,0xa9,0xab, + 0xad,0xaf,0xb1,0xb3,0xb5,0xb7,0xb9,0xbb, + 0xbd,0xbf,0xc2,0xc4,0xc6,0xc8,0xc9,0xca, + 0xcb,0xcc,0xcd,0xd0,0xd3,0xd6,0xd9,0xdc, + 0xdd,0xde,0xdf,0xe0,0xe2,0xe4,0xe6,0xe7, + 0xe8,0xe9,0xea,0xeb,0xed,0xf1,0xb4,0xb8}; #define GETSSTPDAT1(a) { \ (a) = last; \ @@ -27,10 +187,13 @@ static const BYTE prs2[] = {0xaa,0xac,0x (a) = ((a) << 2) | ((a) >> 6); \ } -static char *sstpsolve(char *buf, const unsigned char *dat) { +static OEMCHAR *sstpsolve(OEMCHAR *buf, const UINT8 *dat) { - BYTE c; - BYTE last; + UINT8 c; + UINT8 last; +#if defined(OSLANG_UTF8) || defined(OSLANG_UCS2) + char sjis[4]; +#endif last = 0x80; while(1) { @@ -58,26 +221,33 @@ static char *sstpsolve(char *buf, const *buf++ = c; } else if (c == 0x7f) { - BYTE ms; + UINT8 ms; GETSSTPDAT1(ms); if (!ms) { break; } while(ms > 10) { - CopyMemory(buf, "\\w9", 3); + CopyMemory(buf, OEMTEXT("\\w9"), 3 * sizeof(OEMCHAR)); buf += 3; ms -= 10; } if (ms) { - wsprintf(buf, "\\w%u", ms); + OEMSPRINTF(buf, OEMTEXT("\\w%1u"), ms); buf += 3; } } else if (c == 0x80) { - BYTE c2; + UINT8 c2; GETSSTPDAT1(c2); if (c2) { +#if defined(OSLANG_UTF8) || defined(OSLANG_UCS2) + sjis[0] = c2; + sjis[1] = '\0'; + oemtext_sjistooem(buf, 4, sjis, 1); + buf += OEMSTRLEN(buf); +#else *buf++ = c2; +#endif } else { break; @@ -85,10 +255,10 @@ static char *sstpsolve(char *buf, const } else if (c >= 0xf0) { int i; - const BYTE *p; + const UINT8 *p; i = c - 0xf0; if (c == 0xff) { - BYTE c2; + UINT8 c2; GETSSTPDAT1(c2); if (!c2) { break; @@ -102,15 +272,33 @@ static char *sstpsolve(char *buf, const buf = sstpsolve(buf, p); } else if ((c >= 0xa0) && (c < 0xe0)) { - *buf++ = (BYTE)0x82; - *buf++ = prs2[c-0xa0]; +#if defined(OSLANG_UTF8) || defined(OSLANG_UCS2) + sjis[0] = (UINT8)0x82; + sjis[1] = prs2[c-0xa0]; + sjis[2] = '\0'; + oemtext_sjistooem(buf, 4, sjis, 2); + buf += OEMSTRLEN(buf); +#else + buf[0] = (UINT8)0x82; + buf[1] = prs2[c-0xa0]; + buf += 2; +#endif } else { - BYTE c2; + UINT8 c2; GETSSTPDAT1(c2); if (c2) { - *buf++ = c; - *buf++ = c2; +#if defined(OSLANG_UTF8) || defined(OSLANG_UCS2) + sjis[0] = c; + sjis[1] = c2; + sjis[2] = '\0'; + oemtext_sjistooem(buf, 4, sjis, 2); + buf += OEMSTRLEN(buf); +#else + buf[0] = c; + buf[1] = c2; + buf += 2; +#endif } else { break; @@ -121,27 +309,27 @@ static char *sstpsolve(char *buf, const return(buf); } + // ------------------------------- +static const UINT8 *prcs[4] = {k_keropi, k_winx68k, k_t98next, k_anex86}; + static int check_keropi(void) { - char buf[64]; + UINT i; - sstpsolve(buf, k_keropi); - if (FindWindow(buf, NULL)) { - return(1); - } - sstpsolve(buf, k_winx68k); - if (FindWindow(buf, NULL)) { - return(2); - } - sstpsolve(buf, k_t98next); - if (FindWindow(NULL, buf)) { - return(3); - } - sstpsolve(buf, k_anex86); - if (FindWindow(NULL, buf)) { - return(4); + for (i=0; i