--- np2/generic/hostdrvs.c 2005/02/12 12:13:57 1.13 +++ np2/generic/hostdrvs.c 2005/05/20 14:32:01 1.16 @@ -2,7 +2,7 @@ #if defined(SUPPORT_HOSTDRV) -#if defined(OSLANG_EUC) || defined(OSLANG_UTF8) +#if defined(OSLANG_EUC) || defined(OSLANG_UTF8) || defined(OSLANG_UCS2) #include "oemtext.h" #endif #include "dosio.h" @@ -21,19 +21,19 @@ static const UINT8 dospathchr[] = { 0x01, 0x00, // gfedcba` onmlkjih 0x00, 0x40}; // wvutsrqp ~}|{zyx -static void rcnvfcb(char *dst, UINT dlen, char *src, UINT slen) { + +static void rcnvfcb(char *dst, UINT dlen, const char *src) { REG8 c; - while((slen) && (dlen)) { - slen--; + while(dlen) { c = (UINT8)*src++; if (c == 0) { break; } -#if defined(OSLANG_SJIS) || defined(OSLANG_EUC) || defined(OSLANG_UTF8) +#if defined(OSLANG_SJIS) || defined(OSLANG_EUC) || defined(OSLANG_UTF8) || defined(OSLANG_UCS2) if ((((c ^ 0x20) - 0xa1) & 0xff) < 0x3c) { - if ((!slen) || (src[0] == '\0')) { + if (src[0] == '\0') { break; } if (dlen < 2) { @@ -75,25 +75,32 @@ static void rcnvfcb(char *dst, UINT dlen } } -static BOOL realname2fcb(char *fcbname, FLINFO *fli) { +static BRESULT realname2fcb(char *fcbname, const FLINFO *fli) { -#if defined(OSLANG_EUC) || defined(OSLANG_UTF8) + OEMCHAR *ext; +#if defined(OSLANG_EUC) || defined(OSLANG_UTF8) || defined(OSLANG_UCS2) char sjis[MAX_PATH]; #endif - char *realname; - char *ext; + OEMCHAR filename[MAX_PATH]; + + FillMemory(fcbname, 11, ' '); -#if defined(OSLANG_EUC) || defined(OSLANG_UTF8) - oemtext_oemtosjis(sjis, sizeof(sjis), fli->path, NELEMENTS(fli->path)); - realname = sjis; + ext = file_getext(fli->path); +#if defined(OSLANG_EUC) || defined(OSLANG_UTF8) || defined(OSLANG_UCS2) + oemtext_oemtosjis(sjis, sizeof(sjis), ext, (UINT)-1); + rcnvfcb(fcbname+8, 3, sjis); #else - realname = fli->path; + rcnvfcb(fcbname+8, 3, ext); +#endif + + file_cpyname(filename, fli->path, NELEMENTS(filename)); + file_cutext(filename); +#if defined(OSLANG_EUC) || defined(OSLANG_UTF8) || defined(OSLANG_UCS2) + oemtext_oemtosjis(sjis, sizeof(sjis), filename, (UINT)-1); + rcnvfcb(fcbname+0, 8, sjis); +#else + rcnvfcb(fcbname+0, 8, filename); #endif - FillMemory(fcbname, 11, ' '); - // ToDo: SJISに変換済みなのに OEM依存してる - ext = file_getext(realname); - rcnvfcb(fcbname+0, 8, realname, ext - realname); - rcnvfcb(fcbname+8, 3, ext, (UINT)-1); return(SUCCESS); } @@ -300,7 +307,7 @@ BOOL hostdrvs_newrealpath(HDRVPATH *hdp, char dosname[16]; UINT i; char *p; -#if defined(OSLANG_EUC) || defined(OSLANG_UTF8) +#if defined(OSLANG_EUC) || defined(OSLANG_UTF8) || defined(OSLANG_UCS2) OEMCHAR oemname[64]; #endif @@ -331,7 +338,7 @@ BOOL hostdrvs_newrealpath(HDRVPATH *hdp, } *p = '\0'; // ここで SJIS->OEMコードに未変換! -#if defined(OSLANG_EUC) || defined(OSLANG_UTF8) +#if defined(OSLANG_EUC) || defined(OSLANG_UTF8) || defined(OSLANG_UCS2) oemtext_sjistooem(oemname, NELEMENTS(oemname), dosname, (UINT)-1); file_catname(path, oemname, NELEMENTS(path)); #else