void menu_events( struct IntuiMessage *IntuiMsg) { ULONG menucode = IntuiMsg->Code; if (menucode != MENUNULL) { while (menucode != MENUNULL) { struct MenuItem *item = ItemAddress(menu,menucode); select_menu[ MENUNUM(menucode) ] ( menucode ); /* Handle multiple selection */ menucode = item->NextSelect; } } }
int get_key (UWORD * qualifier_addr, int c, int wait) { struct IntuiMessage *imsg; ULONG class; UWORD code, qualifier; int old_height; os_flush (); while (1) { while (imsg = (struct IntuiMessage *) GetMsg (Window->UserPort)) { class = imsg->Class; code = imsg->Code; qualifier = imsg->Qualifier; ReplyMsg ((struct Message *) imsg); if (qualifier_addr) *qualifier_addr = qualifier; switch (class) { case IDCMP_RAWKEY: switch (code) { case 0x4C: return 129; case 0x4D: return 130; case 0x4F: return 131; case 0x4E: return 132; case 0x5F: help (); break; } break; case IDCMP_VANILLAKEY: switch (code) { case 8: return 127; case 13: return 13; case 127: return 260; default: if (code >= 32 && code <= 126) return code; break; } break; case IDCMP_CLOSEWINDOW: exit (0); break; case IDCMP_CHANGEWINDOW: old_height = DisplayHeight; DisplayHeight = ((Window->Height - Window->BorderTop - Window->BorderBottom) / RastPort->TxHeight) - 1; if (PreviousHeight > DisplayHeight) { rect (Window->BorderLeft, Window->BorderTop + (DisplayHeight * RastPort->TxHeight), Window->Width - Window->BorderRight - 1, Window->Height - Window->BorderBottom - 1, 0); if (RastPort->cp_y + RastPort->TxHeight > Window->Height - Window->BorderBottom) { Move (RastPort, RastPort->cp_x, Window->BorderTop + (DisplayHeight * RastPort->TxHeight)); rect (Window->BorderLeft, RastPort->cp_y, Window->Width - Window->BorderRight - 1, RastPort->cp_y + RastPort->TxHeight - 1, 0); PreviousHeight = DisplayHeight; return 264; } } PreviousHeight = DisplayHeight; break; case IDCMP_MENUPICK: if (code != MENUNULL) { if (MENUNUM (code) == 0) { switch (ITEMNUM (code)) { case 0: if (c != -1) { cursor (c); SetAPen (RastPort, 1); int r = newgame (0); SetAPen (RastPort, 2); cursor (c); if (r != 0) return r; } break; case 2: if (c != -1) return -2; break; case 3: if (c != -1) return -3; break; case 5: help (); break; case 6: about (); break; case 8: exit (0); break; } } } break; } } if (wait) WaitPort (Window->UserPort); else return 0; } }
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; }
AMI_ILBM_Action AMI_ILBM_handleScreenActions(char **filename) { AMI_ILBM_Action action = ACTION_ERROR; int showTitleStatus = TRUE; while(action == ACTION_ERROR) { struct IntuiMessage *msg; /* Wait for a message from the window's user port */ Wait(1 << viewerDisplay.window->UserPort->mp_SigBit); /* Handle all the messages stored in the message queue */ while((msg = (struct IntuiMessage*)GetMsg(viewerDisplay.window->UserPort)) != NULL) { UWORD menuSelection; switch(msg->Class) { case IDCMP_MENUPICK: /* Handle menu events */ menuSelection = msg->Code; if(menuSelection != MENUNULL) { UWORD menuNum = MENUNUM(menuSelection); /* Retrieve the number of the menu of the selected menu item */ UWORD itemNum = ITEMNUM(menuSelection); /* Retrieve the number of the menuitem in the selected menu */ /* Determine which action to execute */ if(menuNum == 0) { switch(itemNum) { case 0: *filename = AMI_ILBM_openILBMFile(viewerDisplay.window, ""); if(*filename != NULL) action = ACTION_OPEN; break; case 1: action = ACTION_PREVIOUS; break; case 2: action = ACTION_NEXT; break; case 3: showTitleStatus = !showTitleStatus; ShowTitle(viewerDisplay.image.intuitionScreen, showTitleStatus); break; case 4: viewerDisplay.cycleModeEnabled = !viewerDisplay.cycleModeEnabled; break; case 5: action = ACTION_QUIT; break; } } } break; } /* Reply the message, so that it's removed from the message queue */ ReplyMsg((struct Message*)msg); } } /* Return the resulting action from the user */ return action; }