void main_event_handler() { ULONG result; UWORD Code; static char *strinfo, *args; static char *path; int line=0; int *iptr; struct Node *node; uint32 addr; struct Process *pr; while ((result = RA_HandleInput(MainWinObj, &Code)) != WMHI_LASTMSG && done != TRUE) { switch (result & WMHI_CLASSMASK) { case WMHI_CLOSEWINDOW: done = TRUE; break; case WMHI_ICONIFY: if( RA_Iconify(MainWinObj) ) mainwin = NULL; break; case WMHI_UNICONIFY: mainwin = RA_Uniconify(MainWinObj); if( !mainwin ) done = TRUE; break; case WMHI_MENUPICK: if (Code != MENUNULL) switch (MENUNUM(Code)) { case MENU_FILE: switch(ITEMNUM(Code)) { case MENU_PREFS: preferences_open_window(); break; case MENU_MODULES: modules_open_window(); break; case MENU_ABOUT: show_about(); break; case MENU_QUIT: done = TRUE; break; } } break; case WMHI_GADGETUP: switch(result & WMHI_GADGETMASK) { case GAD_SELECT_BUTTON: strinfo = request_file(mainwin, &path); if (!strinfo) break; strcpy (filename, strinfo); if (strlen(path) > 0) { strcpy (childpath, path); } if(!request_arguments(&args)) { console_printf(OUTPUT_WARNING, "User aborted!"); break; } main_load (strinfo, path, args); break; case GAD_RELOAD_BUTTON: main_load(strinfo, path, args); break; case GAD_ATTACH_BUTTON: if(!isattached) { pr = attach_select_process(); if(main_attach (pr)) button_set_detach(); } else { console_printf(OUTPUT_SYSTEM, "Detaching from external process..."); detach(); stabs_free_stabs(); button_set_attach(); enable(TRUE, GAD_SELECT_BUTTON, TAG_END); enable(FALSE, GAD_START_BUTTON, GAD_PAUSE_BUTTON, GAD_KILL_BUTTON, GAD_STEPOVER_BUTTON, GAD_STEPINTO_BUTTON, GAD_STEPOUT_BUTTON, GAD_SETBREAK_BUTTON, GAD_HEX_BUTTON, TAG_END); console_printf(OUTPUT_SYSTEM, "Done!"); } break; case GAD_START_BUTTON: main_play(); break; case GAD_PAUSE_BUTTON: main_pause(); break; case GAD_STEPOVER_BUTTON: main_step(); break; case GAD_STEPINTO_BUTTON: main_into(); break; case GAD_STEPOUT_BUTTON: main_out(); break; case GAD_KILL_BUTTON: main_kill(); break; #if 0 case GAD_CRASH_BUTTON: crash(); break; #endif case GAD_SETBREAK_BUTTON: breakpoints_open_window(); break; case GAD_VARIABLES_LISTBROWSER: variables_handle_input(); break; case GAD_SIGNAL_BUTTON: sigwin_open_window(); break; case GAD_IMPORT_BUTTON: import_open_window(); break; case GAD_X_BUTTON: console_clear(); break; case GAD_HEX_BUTTON: hex_open_window(); break; case GAD_DISASSEMBLER_LISTBROWSER: disassembler_show_selected(); break; case GAD_DISASSEMBLER_STEP_BUTTON: asmstep(); should_continue = FALSE; asm_trace = TRUE; break; case GAD_DISASSEMBLER_SKIP_BUTTON: asmskip(); disassembler_makelist(); break; case GAD_SOURCE_LISTBROWSER: source_handle_input(); source_show_currentline(); break; case GAD_SOURCELIST_LISTBROWSER: sourcelist_handle_input(); break; case GAD_AREXX_BUTTON: case GAD_AREXX_STRING: { char *str; IIntuition->GetAttrs( MainObj[GAD_AREXX_STRING], STRINGA_TextVal, &str, TAG_DONE ); strcpy (arexxcommandstring, str); arexxexecute.MethodID = AM_EXECUTE; arexxexecute.ape_CommandString = arexxcommandstring; arexxexecute.ape_PortName = "AREXXDB101"; arexxexecute.ape_IO = (BPTR)NULL; IIntuition->SetAttrs( MainObj[GAD_AREXX_STRING], STRINGA_TextVal, "", TAG_DONE ); IIntuition->RefreshGadgets ((struct Gadget *)MainObj[GAD_AREXX_STRING], mainwin, NULL); console_printf(OUTPUT_AREXX, arexxcommandstring); IIntuition->IDoMethodA(arexx_obj, (Msg)&arexxexecute); //IIntuition->ActivateGadget((struct Gadget *)MainObj[GAD_AREXX_STRING], mainwin, NULL); ILayout->ActivateLayoutGadget((struct Gadget *)MainObj[GAD_TOPLAYOUT], mainwin, NULL, (uint32)MainObj[GAD_AREXX_STRING]); break; } } break; } } return; }
/// HandleInput_Main_Win BOOL HandleInput_Main_Win(void) { uint32 result = 0; uint16 code = 0; BOOL done = FALSE; while ((result = RA_HandleInput(win, &code))) { switch(result & WMHI_CLASSMASK) { case WMHI_CLOSEWINDOW: done = TRUE; break; case WMHI_GADGETUP: switch (result & WMHI_GADGETMASK) { case OBJ_LBROWSER_BROW: { uint32 retval = iget(OBJ(OBJ_LBROWSER_BROW), LISTBROWSER_RelEvent); switch(retval) { case LBRE_CHECKED: case LBRE_UNCHECKED: { struct URL_BrowserNode *bn; bn = (struct URL_BrowserNode *)iget(OBJ(OBJ_LBROWSER_BROW), LISTBROWSER_SelectedNode); if (retval == LBRE_UNCHECKED) SET_FLAG(bn->ubn_Flags,UNF_DISABLED); else CLEAR_FLAG(bn->ubn_Flags,UNF_DISABLED); } } if (retval != LBRE_DOUBLECLICK)break; // we deliberately go on executing following case OBJ_EDIT_BROW // because a double click mean the same as clicking edit button } case OBJ_EDIT_BROW: { struct URL_BrowserNode *bn; bn = (struct URL_BrowserNode *)iget(OBJ(OBJ_LBROWSER_BROW), LISTBROWSER_SelectedNode); updateBrowserWindow(bn); edit_brow_window = RA_OpenWindow(edit_brow_win); break; } case OBJ_LBROWSER_MAIL: { uint32 retval = iget(OBJ(OBJ_LBROWSER_MAIL), LISTBROWSER_RelEvent); switch(retval) { case LBRE_CHECKED: case LBRE_UNCHECKED: { struct URL_MailerNode *mn; mn = (struct URL_MailerNode *)iget(OBJ(OBJ_LBROWSER_MAIL), LISTBROWSER_SelectedNode); if (retval == LBRE_UNCHECKED) SET_FLAG(mn->umn_Flags,UNF_DISABLED); else CLEAR_FLAG(mn->umn_Flags,UNF_DISABLED); } } if (retval != LBRE_DOUBLECLICK) break; // we deliberately go on executing following case OBJ_EDIT_MAIL // because a double click mean the same as clicking edit button } case OBJ_EDIT_MAIL: { struct URL_MailerNode *mn; mn = (struct URL_MailerNode *)iget(OBJ(OBJ_LBROWSER_MAIL), LISTBROWSER_SelectedNode); updateMailerWindow(mn); edit_mail_window = RA_OpenWindow(edit_mail_win); break; } case OBJ_LBROWSER_FTP: { uint32 retval = iget(OBJ(OBJ_LBROWSER_FTP), LISTBROWSER_RelEvent); switch(retval) { case LBRE_CHECKED: case LBRE_UNCHECKED: { struct URL_FTPNode *fn; fn = (struct URL_FTPNode *)iget(OBJ(OBJ_LBROWSER_FTP), LISTBROWSER_SelectedNode); if (retval == LBRE_UNCHECKED) SET_FLAG(fn->ufn_Flags,UNF_DISABLED); else CLEAR_FLAG(fn->ufn_Flags,UNF_DISABLED); } } if (retval != LBRE_DOUBLECLICK) break; // we deliberately go on executing following case OBJ_EDIT_FTP // because a double click mean the same as clicking edit button } case OBJ_EDIT_FTP: { struct URL_FTPNode *fn; fn = (struct URL_FTPNode *)iget(OBJ(OBJ_LBROWSER_FTP), LISTBROWSER_SelectedNode); updateFTPWindow(fn); edit_ftp_window = RA_OpenWindow(edit_ftp_win); break; } case OBJ_USE: case OBJ_SAVE: case OBJ_APPLY: storePrefs((result & WMHI_GADGETMASK)==OBJ_SAVE); if((result & WMHI_GADGETMASK)!=OBJ_APPLY) done=TRUE; break; case OBJ_CANCEL: done=TRUE; break; } break; case WMHI_ICONIFY: if (RA_Iconify(win)) { window = NULL; if (edit_brow_window) { RA_CloseWindow(edit_brow_win); edit_brow_window = NULL; } if (edit_mail_window) { RA_CloseWindow(edit_mail_win); edit_mail_window = NULL; } if (edit_ftp_window) { RA_CloseWindow(edit_ftp_win); edit_ftp_window = NULL; } } break; case WMHI_UNICONIFY: window = RA_OpenWindow(win); break; } } return (done); }