Listing 1: Das Beispiel mit Blöcken /*** Block:"Alle Objekte generieren" */ BOOL CreateAll() { /* Gadget-Objekt erzeugen */ gb_SpaceGad = (struct Gadget *) IIntuition->NewObject( ISpace->SPACE_GetClass(),NULL, GA_ID, GAD_ID_Space, SPACE_Transparent, FALSE, SPACE_MinWidth, 10, SPACE_MinHeight, 10, TAG_DONE); /* Layout-Objekt erzeugen */ gb_MainLayout = (struct Gadget *) IIntuition->NewObject( ILayout->LAYOUT_GetClass(),NULL, LAYOUT_Orientation, LAYOUT_ORIENT_VERT, LAYOUT_SpaceOuter, TRUE, LAYOUT_SpaceInner, TRUE, LAYOUT_AddChild, gb_SpaceGad, TAG_DONE); if(gb_MainLayout) { /* das Fenster-Objekt erzeugen */ if((gb_WindowObj = (Object *) IIntuition->NewObject( IWindow->WINDOW_GetClass(),NULL, WA_IDCMP, IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_VANILLAKEY | IDCMP_RAWKEY | IDCMP_CLOSEWINDOW, WA_SizeGadget, TRUE, WA_DepthGadget, TRUE, WA_DragBar, TRUE, WA_Activate, FALSE, WA_Title, "Reaction Gadgets - Teil 1", WA_InnerWidth, 100, WA_InnerHeight, 100, WA_AutoAdjust, TRUE, WA_CloseGadget, TRUE, WA_RMBTrap, TRUE, WINDOW_ParentGroup, gb_MainLayout, TAG_DONE))) { /* das Fenster kann jetzt angezeigt werden */ gb_Win = RA_OpenWindow(gb_WindowObj); } } return ( gb_WindowObj ? TRUE : FALSE ); } /*** Block "Alle Objekte freigeben" */ void DestroyAll() { /* Fenster schließen und Objekte freigeben */ RA_CloseWindow(gb_WindowObj); IIntuition->DisposeObject(gb_WindowObj); } /*** Block "Die Nachrichtenverarbeitung" */ void MsgLoop() { ULONG winsig; ULONG result, code; BOOL laufen = TRUE; /* Signalbits des Fensters vermerken */ IIntuition->GetAttr(WINDOW_SigMask,gb_WindowObj,&winsig); while(laufen) { /* warten auf Benutzeraktionen */ const ULONG sigs = IExec->Wait(winsig | SIGBREAKF_CTRL_C); /* eingetroffene Nachrichten verarbeiten */ while((result = RA_HandleInput(gb_WindowObj,&code)) != WMHI_LASTMSG) { /* den Nachrichtenanteil ausmaskieren ! */ switch(result & WMHI_CLASSMASK) { /* Gadget-Nachrichten auswerten */ case WMHI_GADGETUP: switch(result & WMHI_GADGETMASK) { //case GAD_ID_Space: // break; } break; /* RawKey der gedrückten Taste */ case WMHI_RAWKEY: { //struct InputEvent *ie; //IIntuition->GetAttr(WINDOW_InputEvent,gb_WindowObj,(ULONG *)&ie); // code = result & WMHI_KEYMASK // qualifier = ie->ie_Qualifier } break; /* ASCII-Zeichencode der gedrückten Taste */ case WMHI_VANILLAKEY: { //struct InputEvent *ie; //IIntuition->GetAttr(WINDOW_InputEvent,gb_WindowObj,(ULONG *)&ie); // code = result & WMHI_KEYMASK // qualifier = ie->ie_Qualifier } break; /* Menüauswahl */ case WMHI_MENUPICK: switch(result & WMHI_MENUMASK) { //case MENU_ID_xxx: // break; } break; /* Fenster-Schließsymbol angeklickt */ case WMHI_CLOSEWINDOW: { /* Fenster Schließsymbol betätigt */ laufen = FALSE; } break; } } /* CTRL-C zur Shell /als Signal erhalten */ if(sigs & SIGBREAKF_CTRL_C) laufen = FALSE; } }