| version 1.3, 2004/08/12 11:45:58 | version 1.5, 2004/08/14 08:15:57 | 
| Line 24 | Line 24 | 
 | #include        "fdd_ini.h" | #include        "fdd_ini.h" | 
 | #include        "x1f.h" | #include        "x1f.h" | 
 | #include        "carbonevent.h" | #include        "carbonevent.h" | 
 |  | #if defined(SUPPORT_RESUME) || defined(SUPPORT_STATSAVE) | 
 |  | #include        "statsave.h" | 
 |  | #endif | 
 |  |  | 
 |  |  | 
 | // #define      USE_RESUME | // #define      USE_RESUME | 
 |  |  | 
 |  |  | 
| XMILOSCFG       xmiloscfg = {100, 100,  0, 0, 0, 0, 0, 0}; | XMILOSCFG       xmiloscfg = {   100, 100, | 
|  | 0, 0, 0, | 
|  | 0, 0, | 
|  | #if defined(SUPPORT_RESUME) | 
|  | 0, | 
|  | #endif | 
|  | #if defined(SUPPORT_STATSAVE) | 
|  | 1, | 
|  | #endif | 
|  | 0}; | 
 |  |  | 
 | WindowPtr       hWndMain; | WindowPtr       hWndMain; | 
 | BRESULT         xmilrunning; | BRESULT         xmilrunning; | 
| Line 42  static REG8  scrnmode; | Line 54  static REG8  scrnmode; | 
 |  |  | 
 | static  char    target[MAX_PATH] = DEFAULTPATH; | static  char    target[MAX_PATH] = DEFAULTPATH; | 
 |  |  | 
| static const char np2resume[] = "sav"; |  | 
|  | static const char xmilapp[] = "xmil"; | 
|  |  | 
|  |  | 
|  | // ---- stat save... | 
|  |  | 
|  | #if defined(SUPPORT_RESUME) | 
|  | static const char xmilresumeext[] = ".sav"; | 
|  | #endif | 
|  | #if defined(SUPPORT_STATSAVE) | 
|  | static const char xmilflagext[] = ".sv%u"; | 
|  | #endif | 
|  |  | 
|  | #if defined(SUPPORT_RESUME) || defined(SUPPORT_STATSAVE) | 
|  | static void getstatfilename(char *path, const char *ext, UINT size) { | 
|  |  | 
|  | file_cpyname(path, file_getcd(xmilapp), size); | 
|  | file_catname(path, ext, size); | 
|  | } | 
|  |  | 
|  | static void flagsave(const char *ext) { | 
|  |  | 
|  | char    path[MAX_PATH]; | 
|  |  | 
|  | getstatfilename(path, ext, NELEMENTS(path)); | 
|  | statsave_save(path); | 
|  | } | 
|  |  | 
|  | static void flagdelete(const char *ext) { | 
|  |  | 
|  | char    path[MAX_PATH]; | 
|  |  | 
|  | getstatfilename(path, ext, NELEMENTS(path)); | 
|  | file_delete(path); | 
|  | } | 
|  |  | 
|  | static int flagload(const char *ext, BRESULT force) { | 
|  |  | 
|  | int             ret; | 
|  | char    path[MAX_PATH]; | 
|  | char    buf[1024]; | 
|  | int             r; | 
|  |  | 
|  | ret = IDOK; | 
|  | getstatfilename(path, ext, NELEMENTS(path)); | 
|  | r = statsave_check(path, buf, NELEMENTS(buf)); | 
|  | if (r & (~STATFLAG_DISKCHG)) { | 
|  | ResumeErrorDialogProc(); | 
|  | ret = IDCANCEL; | 
|  | } | 
|  | else if ((!force) && (r & STATFLAG_DISKCHG)) { | 
|  | ret = ResumeWarningDialogProc(buf); | 
|  | } | 
|  | else { | 
|  | ret = IDOK; | 
|  | } | 
|  | if (ret == IDOK) { | 
|  | statsave_load(path); | 
|  | } | 
|  | return(ret); | 
|  | } | 
|  | #endif | 
 |  |  | 
 |  |  | 
 | // ---- おまじない | // ---- おまじない | 
| Line 79  static void MenuBarInit(void) { | Line 152  static void MenuBarInit(void) { | 
 | DeleteMenuItem(GetMenuRef(IDM_OTHER), 7); | DeleteMenuItem(GetMenuRef(IDM_OTHER), 7); | 
 | } | } | 
 |  |  | 
| DeleteMenu(IDM_FDD2); | DisableAllMenuItems(GetMenuHandle(IDM_EDIT)); | 
| DeleteMenu(IDM_FDD3); |  | 
|  | if (!(xmilcfg.fddequip & (1 << 3))) { | 
|  | DeleteMenu(IDM_FDD3); | 
|  | } else { | 
|  | ChangeMenuAttributes(GetMenuRef(IDM_FDD3), 0, kMenuAttrHidden); | 
|  | } | 
|  | if (!(xmilcfg.fddequip & (1 << 2))) { | 
|  | DeleteMenu(IDM_FDD2); | 
|  | } else { | 
|  | ChangeMenuAttributes(GetMenuRef(IDM_FDD2), 0, kMenuAttrHidden); | 
|  | } | 
|  | if (!(xmilcfg.fddequip & (1 << 1))) { | 
|  | DeleteMenu(IDM_FDD1); | 
|  | } | 
|  | if (!(xmilcfg.fddequip & (1 << 0))) { | 
|  | DeleteMenu(IDM_FDD0); | 
|  | } | 
|  |  | 
|  | #if defined(SUPPORT_STATSAVE) | 
|  | if (!xmiloscfg.statsave) { | 
|  | #endif | 
|  | DeleteMenu(IDM_STATSAVE); | 
|  | #if defined(SUPPORT_STATSAVE) | 
|  | } | 
|  | #endif | 
|  |  | 
 | } | } | 
 |  |  | 
 | static void HandleMenuChoice(long wParam) { | static void HandleMenuChoice(long wParam) { | 
 |  |  | 
 | UINT    update; | UINT    update; | 
| Str255  applname; | #if defined(SUPPORT_STATSAVE) | 
|  | UINT    num; | 
|  | char    ext[16]; | 
|  | #endif | 
 |  |  | 
 | update = 0; | update = 0; | 
 | switch(wParam) { | switch(wParam) { | 
| Line 120  static void HandleMenuChoice(long wParam | Line 221  static void HandleMenuChoice(long wParam | 
 |  |  | 
 | case IDM_FDD0EJECT: | case IDM_FDD0EJECT: | 
 | diskdrv_setfdd(0, NULL, 0); | diskdrv_setfdd(0, NULL, 0); | 
 |  | DisableMenuItem(GetMenuRef(IDM_FDD0), IDM_FDD0EJECT); | 
 | break; | break; | 
 |  |  | 
 | case IDM_FDD1OPEN: | case IDM_FDD1OPEN: | 
| Line 128  static void HandleMenuChoice(long wParam | Line 230  static void HandleMenuChoice(long wParam | 
 |  |  | 
 | case IDM_FDD1EJECT: | case IDM_FDD1EJECT: | 
 | diskdrv_setfdd(1, NULL, 0); | diskdrv_setfdd(1, NULL, 0); | 
 |  | DisableMenuItem(GetMenuRef(IDM_FDD1), IDM_FDD1EJECT); | 
 | break; | break; | 
 |  |  | 
 | case IDM_FDD2OPEN: | case IDM_FDD2OPEN: | 
| Line 136  static void HandleMenuChoice(long wParam | Line 239  static void HandleMenuChoice(long wParam | 
 |  |  | 
 | case IDM_FDD2EJECT: | case IDM_FDD2EJECT: | 
 | diskdrv_setfdd(2, NULL, 0); | diskdrv_setfdd(2, NULL, 0); | 
 |  | DisableMenuItem(GetMenuRef(IDM_FDD2), IDM_FDD2EJECT); | 
 | break; | break; | 
 |  |  | 
 | case IDM_FDD3OPEN: | case IDM_FDD3OPEN: | 
| Line 144  static void HandleMenuChoice(long wParam | Line 248  static void HandleMenuChoice(long wParam | 
 |  |  | 
 | case IDM_FDD3EJECT: | case IDM_FDD3EJECT: | 
 | diskdrv_setfdd(3, NULL, 0); | diskdrv_setfdd(3, NULL, 0); | 
 |  | DisableMenuItem(GetMenuRef(IDM_FDD3), IDM_FDD3EJECT); | 
 | break; | break; | 
 |  |  | 
 | case IDM_TURBOZ: | case IDM_TURBOZ: | 
| Line 182  static void HandleMenuChoice(long wParam | Line 287  static void HandleMenuChoice(long wParam | 
 | break; | break; | 
 |  |  | 
 | case IDM_WIDTH80: | case IDM_WIDTH80: | 
| crtc.s.TXT_XL = 80; | crtc_forcesetwidth(80); | 
| //                      crtc.s.GRP_XL = 640; |  | 
| vrambank_patch(); |  | 
| scrnallflash = 1; |  | 
 | break; | break; | 
 |  |  | 
 | case IDM_WIDTH40: | case IDM_WIDTH40: | 
| crtc.s.TXT_XL = 40; | crtc_forcesetwidth(40); | 
| //                      crtc.s.GRP_XL = 320; |  | 
| vrambank_patch(); |  | 
| scrnallflash = 1; |  | 
 | break; | break; | 
 |  |  | 
 | case IDM_DISPSYNC: | case IDM_DISPSYNC: | 
| Line 301  static void HandleMenuChoice(long wParam | Line 400  static void HandleMenuChoice(long wParam | 
 | break; | break; | 
 |  |  | 
 | default: | default: | 
 |  | #if defined(SUPPORT_STATSAVE) | 
 |  | if (HiWord(wParam) == IDM_STATSAVE) { | 
 |  | num = LoWord(wParam); | 
 |  | if ((num >= 1) && (num < (1 + 10))) { | 
 |  | OEMSPRINTF(ext, xmilflagext, num - 1); | 
 |  | flagsave(ext); | 
 |  | } | 
 |  | else if ((num >= 12) && (num < (12 + 10))) { | 
 |  | OEMSPRINTF(ext, xmilflagext, num - 12); | 
 |  | flagload(ext, TRUE); | 
 |  | } | 
 |  | } | 
 |  | #endif | 
 | break; | break; | 
 | } | } | 
 | sysmng_update(update); | sysmng_update(update); | 
 | HiliteMenu(0); | HiliteMenu(0); | 
 | } | } | 
 | #if 0 |  | 
 | static void HandleUpdateEvent(EventRecord *pevent) { |  | 
 |  |  | 
 | WindowPtr       hWnd; |  | 
 |  |  | 
 | hWnd = (WindowPtr)pevent->message; |  | 
 | BeginUpdate(hWnd); |  | 
 | if (xmilrunning) { |  | 
 | scrndraw_redraw(); |  | 
 | } |  | 
 | else { |  | 
 | //              np2open(); |  | 
 | } |  | 
 | EndUpdate(hWnd); |  | 
 | } |  | 
 | #endif |  | 
 | static void HandleMouseDown(EventRecord *pevent) { | static void HandleMouseDown(EventRecord *pevent) { | 
 |  |  | 
 | WindowPtr       hWnd; | WindowPtr       hWnd; | 
| Line 338  static void HandleMouseDown(EventRecord | Line 435  static void HandleMouseDown(EventRecord | 
 | break; | break; | 
 | } | } | 
 | } | } | 
 | #if 0 |  | 
 | static void eventproc(EventRecord *event) { |  | 
 |  |  | 
 | int             keycode; |  | 
 |  |  | 
 | keycode = (event->message & keyCodeMask) >> 8; |  | 
 | switch(event->what) { |  | 
 | case mouseDown: |  | 
 | HandleMouseDown(event); |  | 
 | break; |  | 
 |  |  | 
 | case updateEvt: |  | 
 | HandleUpdateEvent(event); |  | 
 | break; |  | 
 |  |  | 
 | case keyDown: |  | 
 | case autoKey: |  | 
 | if (!xmilrunning) { |  | 
 | break; |  | 
 | } |  | 
 | if ((keycode == 0x6f) && (xmiloscfg.F12KEY == 0)) { |  | 
 | HandleMenuChoice(IDM_MOUSE); |  | 
 | break; |  | 
 | } |  | 
 | if (event->modifiers & cmdKey) { |  | 
 | #if !TARGET_API_MAC_CARBON |  | 
 | if (mackbd_keydown(keycode, TRUE)) { |  | 
 | break; |  | 
 | } |  | 
 | #endif |  | 
 | soundmng_stop(); |  | 
 | mousemng_disable(MOUSEPROC_MACUI); |  | 
 | HandleMenuChoice(MenuEvent(event)); |  | 
 | mousemng_enable(MOUSEPROC_MACUI); |  | 
 | soundmng_play(); |  | 
 | } |  | 
 | else { |  | 
 | mackbd_keydown(keycode, FALSE); |  | 
 | } |  | 
 | break; |  | 
 |  |  | 
 | case keyUp: |  | 
 | mackbd_keyup(keycode); |  | 
 | break; |  | 
 |  |  | 
 | case mouseUp: |  | 
 | mousemng_buttonevent(MOUSEMNG_LEFTUP); |  | 
 | mousemng_buttonevent(MOUSEMNG_RIGHTUP); |  | 
 | break; |  | 
 |  |  | 
 | case activateEvt: |  | 
 | mackbd_activate((event->modifiers & activeFlag)?TRUE:FALSE); |  | 
 | break; |  | 
 | } |  | 
 | } |  | 
 | #endif |  | 
 |  |  | 
 | #if 0 |  | 
 | // ---- |  | 
 |  |  | 
 | static void getstatfilename(char *path, const char *ext, int size) { |  | 
 |  |  | 
 | file_cpyname(path, file_getcd(np2app), size); |  | 
 | file_catname(path, str_dot, size); |  | 
 | file_catname(path, ext, size); |  | 
 | } |  | 
 |  |  | 
 | static void flagsave(const char *ext) { |  | 
 |  |  | 
 | char    path[MAX_PATH]; |  | 
 |  |  | 
 | getstatfilename(path, ext, sizeof(path)); |  | 
 | statsave_save(path); |  | 
 | } |  | 
 |  |  | 
 | static void flagdelete(const char *ext) { |  | 
 |  |  | 
 | char    path[MAX_PATH]; |  | 
 |  |  | 
 | getstatfilename(path, ext, sizeof(path)); |  | 
 | file_delete(path); |  | 
 | } |  | 
 |  |  | 
 | static int flagload(const char *ext) { |  | 
 |  |  | 
 | int             ret; |  | 
 | char    path[MAX_PATH]; |  | 
 | char    buf[1024]; |  | 
 | int             r; |  | 
 |  |  | 
 | ret = IDOK; |  | 
 | getstatfilename(path, ext, sizeof(path)); |  | 
 | r = statsave_check(path, buf, sizeof(buf)); |  | 
 | if (r & (~STATFLAG_DISKCHG)) { |  | 
 | ResumeErrorDialogProc(); |  | 
 | ret = IDCANCEL; |  | 
 | } |  | 
 | else if (r & STATFLAG_DISKCHG) { |  | 
 | ret = ResumeWarningDialogProc(buf); |  | 
 | } |  | 
 | if (ret == IDOK) { |  | 
 | statsave_load(path); |  | 
 | } |  | 
 | return(ret); |  | 
 | } |  | 
 | #endif |  | 
 |  |  | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
 | static  UINT    framecnt = 0; | static  UINT    framecnt = 0; | 
| Line 566  int main(int argc, char *argv[]) { | Line 555  int main(int argc, char *argv[]) { | 
 | pccore_initialize(); | pccore_initialize(); | 
 | pccore_reset(); | pccore_reset(); | 
 |  |  | 
| #if 0 | #if defined(SUPPORT_RESUME) | 
| if (np2oscfg.resume) { | if (xmiloscfg.resume) { | 
| flagload(np2resume); | flagload(xmilresumeext, FALSE); | 
 | } | } | 
 | #endif | #endif | 
 |  |  | 
| Line 651  int main(int argc, char *argv[]) { | Line 640  int main(int argc, char *argv[]) { | 
 |  |  | 
 | xmilrunning = FALSE; | xmilrunning = FALSE; | 
 |  |  | 
| #if 0 | #if defined(SUPPORT_RESUME) | 
| if (np2oscfg.resume) { | if (xmiloscfg.resume) { | 
| flagsave(np2resume); | flagsave(xmilresumeext); | 
 | } | } | 
 | else { | else { | 
| flagdelete(np2resume); | flagdelete(xmilresumeext); | 
 | } | } | 
 | #endif | #endif | 
 |  |  | 
| Line 681  int main(int argc, char *argv[]) { | Line 670  int main(int argc, char *argv[]) { | 
 | return(0); | return(0); | 
 | } | } | 
 |  |  | 
 |  |  | 
 | void wrapperMouseDown(EventRef event) { | void wrapperMouseDown(EventRef event) { | 
 | EventRecord eve; | EventRecord eve; | 
 |  |  | 
 | ConvertEventRefToEventRecord( event,&eve ); | ConvertEventRefToEventRecord( event,&eve ); | 
 | HandleMouseDown(&eve); | HandleMouseDown(&eve); | 
 | } | } | 
 |  |  | 
 |  | void wrapperKeyDown(EventRef event) { | 
 |  | EventRecord eve; | 
 |  |  | 
 |  | ConvertEventRefToEventRecord( event,&eve ); | 
 |  | soundmng_stop(); | 
 |  | mousemng_disable(MOUSEPROC_MACUI); | 
 |  | HandleMenuChoice(MenuEvent(&eve)); | 
 |  | mousemng_enable(MOUSEPROC_MACUI); | 
 |  | soundmng_play(); | 
 |  | } | 
 |  |  |