| version 1.13, 2004/06/28 12:31:32 | version 1.15, 2005/02/11 21:17:22 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
 | #include        "strres.h" | #include        "strres.h" | 
 | #include        "codecnv.h" |  | 
 | #include        "dosio.h" | #include        "dosio.h" | 
 | #include        "soundmng.h" | #include        "soundmng.h" | 
 | #include        "pccore.h" | #include        "pccore.h" | 
| Line 21  enum { | Line 20  enum { | 
 | }; | }; | 
 |  |  | 
 | #if !defined(RESOURCE_US) && (!defined(CHARSET_OEM) || defined(OSLANG_SJIS)) | #if !defined(RESOURCE_US) && (!defined(CHARSET_OEM) || defined(OSLANG_SJIS)) | 
| static const char str_dirname[] =                               // ファイルの場所 | static const OEMCHAR str_dirname[] =                    // ファイルの場所 | 
 | "\203\164\203\100\203\103\203\213\202\314\217\352\217\212"; | "\203\164\203\100\203\103\203\213\202\314\217\352\217\212"; | 
| static const char str_filename[] =                              // ファイル名 | static const OEMCHAR str_filename[] =                   // ファイル名 | 
 | "\203\164\203\100\203\103\203\213\226\274"; | "\203\164\203\100\203\103\203\213\226\274"; | 
| static const char str_filetype[] =                              // ファイルの種類 | static const OEMCHAR str_filetype[] =                   // ファイルの種類 | 
 | "\203\164\203\100\203\103\203\213\202\314\216\355\227\336"; | "\203\164\203\100\203\103\203\213\202\314\216\355\227\336"; | 
| static const char str_open[] =                                  // 開く | static const OEMCHAR str_open[] =                               // 開く | 
 | "\212\112\202\255"; | "\212\112\202\255"; | 
 | #elif defined(OSLANG_EUC) && !defined(RESOURCE_US) | #elif defined(OSLANG_EUC) && !defined(RESOURCE_US) | 
| static const char str_dirname[] =                               // ファイルの場所 | static const OEMCHAR str_dirname[] =                    // ファイルの場所 | 
 | "\245\325\245\241\245\244\245\353\244\316\276\354\275\352"; | "\245\325\245\241\245\244\245\353\244\316\276\354\275\352"; | 
| static const char str_filename[] =                              // ファイル名 | static const OEMCHAR str_filename[] =                   // ファイル名 | 
 | "\245\325\245\241\245\244\245\353\314\276"; | "\245\325\245\241\245\244\245\353\314\276"; | 
| static const char str_filetype[] =                              // ファイルの種類 | static const OEMCHAR str_filetype[] =                   // ファイルの種類 | 
 | "\245\325\245\241\245\244\245\353\244\316\274\357\316\340"; | "\245\325\245\241\245\244\245\353\244\316\274\357\316\340"; | 
| static const char str_open[] =                                  // 開く | static const OEMCHAR str_open[] =                               // 開く | 
 | "\263\253\244\257"; | "\263\253\244\257"; | 
 | #elif defined(OSLANG_UTF8) && !defined(RESOURCE_US) | #elif defined(OSLANG_UTF8) && !defined(RESOURCE_US) | 
| static const char str_dirname[] =                               // ファイルの場所 | static const OEMCHAR str_dirname[] =                    // ファイルの場所 | 
 | "\343\203\225\343\202\241\343\202\244\343\203\253\343\201\256" \ | "\343\203\225\343\202\241\343\202\244\343\203\253\343\201\256" \ | 
 | "\345\240\264\346\211\200"; | "\345\240\264\346\211\200"; | 
| static const char str_filename[] =                              // ファイル名 | static const OEMCHAR str_filename[] =                   // ファイル名 | 
 | "\343\203\225\343\202\241\343\202\244\343\203\253\345\220\215"; | "\343\203\225\343\202\241\343\202\244\343\203\253\345\220\215"; | 
| static const char str_filetype[] =                              // ファイルの種類 | static const OEMCHAR str_filetype[] =                   // ファイルの種類 | 
 | "\343\203\225\343\202\241\343\202\244\343\203\253\343\201\256" \ | "\343\203\225\343\202\241\343\202\244\343\203\253\343\201\256" \ | 
 | "\347\250\256\351\241\236"; | "\347\250\256\351\241\236"; | 
| static const char str_open[] =                                  // 開く | static const OEMCHAR str_open[] =                               // 開く | 
 | "\351\226\213\343\201\217"; | "\351\226\213\343\201\217"; | 
 | #else | #else | 
| static const char str_dirname[] = "Look in"; | static const OEMCHAR str_dirname[] = OEMTEXT("Look in"); | 
| static const char str_filename[] = "File name"; | static const OEMCHAR str_filename[] = OEMTEXT("File name"); | 
| static const char str_filetype[] = "Files of type"; | static const OEMCHAR str_filetype[] = OEMTEXT("Files of type"); | 
| static const char str_open[] = "Open"; | static const OEMCHAR str_open[] = OEMTEXT("Open"); | 
 | #endif | #endif | 
 |  |  | 
 | #if defined(SIZE_QVGA) | #if defined(SIZE_QVGA) | 
| Line 117  typedef struct _flist  *FLIST; | Line 116  typedef struct _flist  *FLIST; | 
 | struct _flist { | struct _flist { | 
 | FLIST   next; | FLIST   next; | 
 | UINT    isdir; | UINT    isdir; | 
| char    name[MAX_PATH]; | OEMCHAR name[MAX_PATH]; | 
 | }; | }; | 
 |  |  | 
 | typedef struct { | typedef struct { | 
| const char      *title; | const OEMCHAR   *title; | 
| const char      *filter; | const OEMCHAR   *filter; | 
| const char      *ext; | const OEMCHAR   *ext; | 
 | } FSELPRM; | } FSELPRM; | 
 |  |  | 
 | typedef struct { | typedef struct { | 
 | BOOL            result; | BOOL            result; | 
 | LISTARRAY       flist; | LISTARRAY       flist; | 
 | FLIST           fbase; | FLIST           fbase; | 
| const char              *filter; | const OEMCHAR   *filter; | 
| const char              *ext; | const OEMCHAR   *ext; | 
| char            path[MAX_PATH]; | OEMCHAR         path[MAX_PATH]; | 
 | } FILESEL; | } FILESEL; | 
 |  |  | 
 | static  FILESEL         filesel; | static  FILESEL         filesel; | 
| Line 155  static FLIST getflist(int pos) { | Line 154  static FLIST getflist(int pos) { | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| static BOOL fappend(LISTARRAY flist, FLINFO *fli) { | static BRESULT fappend(LISTARRAY flist, FLINFO *fli) { | 
 |  |  | 
 | FLIST   fl; | FLIST   fl; | 
 | FLIST   *st; | FLIST   *st; | 
| Line 166  static BOOL fappend(LISTARRAY flist, FLI | Line 165  static BOOL fappend(LISTARRAY flist, FLI | 
 | return(FAILURE); | return(FAILURE); | 
 | } | } | 
 | fl->isdir = (fli->attr & 0x10)?1:0; | fl->isdir = (fli->attr & 0x10)?1:0; | 
| file_cpyname(fl->name, fli->path, sizeof(fl->name)); | file_cpyname(fl->name, fli->path, NELEMENTS(fl->name)); | 
 | st = &filesel.fbase; | st = &filesel.fbase; | 
 | while(1) { | while(1) { | 
 | cur = *st; | cur = *st; | 
| Line 187  static BOOL fappend(LISTARRAY flist, FLI | Line 186  static BOOL fappend(LISTARRAY flist, FLI | 
 | return(SUCCESS); | return(SUCCESS); | 
 | } | } | 
 |  |  | 
| static BOOL checkext(char *path, const char *ext) { | static BOOL checkext(OEMCHAR *path, const OEMCHAR *ext) { | 
 |  |  | 
| const char      *p; | const OEMCHAR   *p; | 
 |  |  | 
 | if (ext == NULL) { | if (ext == NULL) { | 
 | return(TRUE); | return(TRUE); | 
| Line 199  const char *p; | Line 198  const char *p; | 
 | if (!file_cmpname(p, ext)) { | if (!file_cmpname(p, ext)) { | 
 | return(TRUE); | return(TRUE); | 
 | } | } | 
| ext += strlen(ext) + 1; | ext += OEMSTRLEN(ext) + 1; | 
 | } | } | 
 | return(FALSE); | return(FALSE); | 
 | } | } | 
| Line 212  static void dlgsetlist(void) { | Line 211  static void dlgsetlist(void) { | 
 | BOOL            append; | BOOL            append; | 
 | FLIST           fl; | FLIST           fl; | 
 | ITEMEXPRM       prm; | ITEMEXPRM       prm; | 
 | #if defined(OSLANG_EUC) || defined(OSLANG_UTF8) |  | 
 | char            sjis[MAX_PATH]; |  | 
 | #endif |  | 
 |  |  | 
 | menudlg_itemreset(DID_FLIST); | menudlg_itemreset(DID_FLIST); | 
 |  |  | 
 | #if defined(OSLANG_EUC) |  | 
 | codecnv_euc2sjis(sjis, sizeof(sjis), |  | 
 | file_getname(filesel.path), (UINT)-1); |  | 
 | menudlg_settext(DID_FOLDER, sjis); |  | 
 | #elif defined(OSLANG_UTF8) |  | 
 | oemtext_oem2sjis(sjis, sizeof(sjis), |  | 
 | file_getname(filesel.path), (UINT)-1); |  | 
 | menudlg_settext(DID_FOLDER, sjis); |  | 
 | #else |  | 
 | menudlg_settext(DID_FOLDER, file_getname(filesel.path)); | menudlg_settext(DID_FOLDER, file_getname(filesel.path)); | 
 | #endif |  | 
 | listarray_destroy(filesel.flist); | listarray_destroy(filesel.flist); | 
 | flist = listarray_new(sizeof(_FLIST), 64); | flist = listarray_new(sizeof(_FLIST), 64); | 
 | filesel.flist = flist; | filesel.flist = flist; | 
| Line 256  static void dlgsetlist(void) { | Line 241  static void dlgsetlist(void) { | 
 | while(fl) { | while(fl) { | 
 | menudlg_itemappend(DID_FLIST, NULL); | menudlg_itemappend(DID_FLIST, NULL); | 
 | prm.icon = (fl->isdir)?MICON_FOLDER:MICON_FILE; | prm.icon = (fl->isdir)?MICON_FOLDER:MICON_FILE; | 
 | #if defined(OSLANG_EUC) |  | 
 | codecnv_euc2sjis(sjis, sizeof(sjis), fl->name, (UINT)-1); |  | 
 | prm.str = sjis; |  | 
 | #elif defined(OSLANG_UTF8) |  | 
 | oemtext_oem2sjis(sjis, sizeof(sjis), fl->name, (UINT)-1); |  | 
 | prm.str = sjis; |  | 
 | #else |  | 
 | prm.str = fl->name; | prm.str = fl->name; | 
 | #endif |  | 
 | menudlg_itemsetex(DID_FLIST, &prm); | menudlg_itemsetex(DID_FLIST, &prm); | 
 | fl = fl->next; | fl = fl->next; | 
 | prm.pos++; | prm.pos++; | 
| Line 273  static void dlgsetlist(void) { | Line 250  static void dlgsetlist(void) { | 
 |  |  | 
 | static void dlginit(void) { | static void dlginit(void) { | 
 |  |  | 
| #if defined(OSLANG_EUC) || defined(OSLANG_UTF8) | menudlg_appends(res_fs, NELEMENTS(res_fs)); | 
| char    sjis[MAX_PATH]; |  | 
| #endif |  | 
|  |  | 
| menudlg_appends(res_fs, sizeof(res_fs)/sizeof(MENUPRM)); |  | 
 | menudlg_seticon(DID_PARENT, MICON_FOLDERPARENT); | menudlg_seticon(DID_PARENT, MICON_FOLDERPARENT); | 
 | #if defined(OSLANG_EUC) |  | 
 | codecnv_euc2sjis(sjis, sizeof(sjis), |  | 
 | file_getname(filesel.path), (UINT)-1); |  | 
 | menudlg_settext(DID_FILE, sjis); |  | 
 | #elif defined(OSLANG_UTF8) |  | 
 | oemtext_oem2sjis(sjis, sizeof(sjis), |  | 
 | file_getname(filesel.path), (UINT)-1); |  | 
 | menudlg_settext(DID_FILE, sjis); |  | 
 | #else |  | 
 | menudlg_settext(DID_FILE, file_getname(filesel.path)); | menudlg_settext(DID_FILE, file_getname(filesel.path)); | 
 | #endif |  | 
 | menudlg_settext(DID_FILTER, filesel.filter); | menudlg_settext(DID_FILTER, filesel.filter); | 
 | file_cutname(filesel.path); | file_cutname(filesel.path); | 
 | file_cutseparator(filesel.path); | file_cutseparator(filesel.path); | 
| Line 304  static BOOL dlgupdate(void) { | Line 267  static BOOL dlgupdate(void) { | 
 | if (fl == NULL) { | if (fl == NULL) { | 
 | return(FALSE); | return(FALSE); | 
 | } | } | 
| file_setseparator(filesel.path, sizeof(filesel.path)); | file_setseparator(filesel.path, NELEMENTS(filesel.path)); | 
| file_catname(filesel.path, fl->name, sizeof(filesel.path)); | file_catname(filesel.path, fl->name, NELEMENTS(filesel.path)); | 
 | if (fl->isdir) { | if (fl->isdir) { | 
 | dlgsetlist(); | dlgsetlist(); | 
 | menudlg_settext(DID_FILE, NULL); | menudlg_settext(DID_FILE, NULL); | 
| Line 320  static BOOL dlgupdate(void) { | Line 283  static BOOL dlgupdate(void) { | 
 | static void dlgflist(void) { | static void dlgflist(void) { | 
 |  |  | 
 | FLIST   fl; | FLIST   fl; | 
 | #if defined(OSLANG_EUC) || defined(OSLANG_UTF8) |  | 
 | char    sjis[MAX_PATH]; |  | 
 | #endif |  | 
 |  |  | 
 | fl = getflist(menudlg_getval(DID_FLIST)); | fl = getflist(menudlg_getval(DID_FLIST)); | 
 | if ((fl != NULL) && (!fl->isdir)) { | if ((fl != NULL) && (!fl->isdir)) { | 
 | #if defined(OSLANG_EUC) |  | 
 | codecnv_euc2sjis(sjis, sizeof(sjis), fl->name, (UINT)-1); |  | 
 | menudlg_settext(DID_FILE, sjis); |  | 
 | #elif defined(OSLANG_UTF8) |  | 
 | oemtext_oem2sjis(sjis, sizeof(sjis), fl->name, (UINT)-1); |  | 
 | menudlg_settext(DID_FILE, sjis); |  | 
 | #else |  | 
 | menudlg_settext(DID_FILE, fl->name); | menudlg_settext(DID_FILE, fl->name); | 
 | #endif |  | 
 | } | } | 
 | } | } | 
 |  |  | 
| Line 388  static int dlgcmd(int msg, MENUID id, lo | Line 340  static int dlgcmd(int msg, MENUID id, lo | 
 | return(0); | return(0); | 
 | } | } | 
 |  |  | 
| static BOOL selectfile(const FSELPRM *prm, char *path, int size, | static BOOL selectfile(const FSELPRM *prm, OEMCHAR *path, int size, | 
| const char *def) { | const OEMCHAR *def) { | 
 |  |  | 
| const char      *title; | const OEMCHAR   *title; | 
 |  |  | 
 | soundmng_stop(); | soundmng_stop(); | 
 | ZeroMemory(&filesel, sizeof(filesel)); | ZeroMemory(&filesel, sizeof(filesel)); | 
 | if ((def) && (def[0])) { | if ((def) && (def[0])) { | 
| file_cpyname(filesel.path, def, sizeof(filesel.path)); | file_cpyname(filesel.path, def, NELEMENTS(filesel.path)); | 
 | } | } | 
 | else { | else { | 
 | file_cpyname(filesel.path, file_getcd(str_null), | file_cpyname(filesel.path, file_getcd(str_null), | 
| sizeof(filesel.path)); | NELEMENTS(filesel.path)); | 
 | file_cutname(filesel.path); | file_cutname(filesel.path); | 
 | } | } | 
 | title = NULL; | title = NULL; | 
| Line 424  const char *title; | Line 376  const char *title; | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
| static const char diskfilter[] = "All supported files"; | static const OEMCHAR diskfilter[] = OEMTEXT("All supported files"); | 
| static const char fddtitle[] = "Select floppy image"; | static const OEMCHAR fddtitle[] = OEMTEXT("Select floppy image"); | 
| static const char fddext[] = "d88\088d\0d98\098d\0fdi\0" \ | static const OEMCHAR fddext[] = OEMTEXT("d88\00088d\0d98\00098d\0fdi\0xdf\0hdm\0dup\0002hd\0tfd\0"); | 
| "xdf\0hdm\0dup\02hd\0tfd\0"; | static const OEMCHAR hddtitle[] = OEMTEXT("Select HDD image"); | 
| static const char hddtitle[] = "Select HDD image"; | static const OEMCHAR sasiext[] = OEMTEXT("thd\0nhd\0hdi\0"); | 
| static const char sasiext[] = "thd\0nhd\0hdi\0"; |  | 
 |  |  | 
 | static const FSELPRM fddprm = {fddtitle, diskfilter, fddext}; | static const FSELPRM fddprm = {fddtitle, diskfilter, fddext}; | 
 | static const FSELPRM sasiprm = {hddtitle, diskfilter, sasiext}; | static const FSELPRM sasiprm = {hddtitle, diskfilter, sasiext}; | 
 |  |  | 
 | #if defined(SUPPORT_SCSI) | #if defined(SUPPORT_SCSI) | 
| static const char scsiext[] = "hdd\0"; | static const OEMCHAR scsiext[] = OEMTEXT("hdd\0"); | 
 | static const FSELPRM scsiprm = {hddtitle, diskfilter, scsiext}; | static const FSELPRM scsiprm = {hddtitle, diskfilter, scsiext}; | 
 | #endif | #endif | 
 |  |  | 
 |  |  | 
 | void filesel_fdd(REG8 drv) { | void filesel_fdd(REG8 drv) { | 
 |  |  | 
| char    path[MAX_PATH]; | OEMCHAR path[MAX_PATH]; | 
 |  |  | 
 | if (drv < 4) { | if (drv < 4) { | 
| if (selectfile(&fddprm, path, sizeof(path), fdd_diskname(drv))) { | if (selectfile(&fddprm, path, NELEMENTS(path), fdd_diskname(drv))) { | 
 | diskdrv_setfdd(drv, path, 0); | diskdrv_setfdd(drv, path, 0); | 
 | } | } | 
 | } | } | 
| Line 454  void filesel_fdd(REG8 drv) { | Line 405  void filesel_fdd(REG8 drv) { | 
 | void filesel_hdd(REG8 drv) { | void filesel_hdd(REG8 drv) { | 
 |  |  | 
 | UINT            num; | UINT            num; | 
| char            *p; | OEMCHAR         *p; | 
 | const FSELPRM   *prm; | const FSELPRM   *prm; | 
| char            path[MAX_PATH]; | OEMCHAR         path[MAX_PATH]; | 
 |  |  | 
 | num = drv & 0x0f; | num = drv & 0x0f; | 
 | p = NULL; | p = NULL; | 
| Line 475  const FSELPRM *prm; | Line 426  const FSELPRM *prm; | 
 | } | } | 
 | } | } | 
 | #endif | #endif | 
| if ((prm) && (selectfile(prm, path, sizeof(path), p))) { | if ((prm) && (selectfile(prm, path, NELEMENTS(path), p))) { | 
 | diskdrv_sethdd(drv, path); | diskdrv_sethdd(drv, path); | 
 | } | } | 
 | } | } |