#include #include #include #include #include #include #include #include #include #include #include enum { GID_MAIN=0, GID_STRING_WORLD, GID_BUTTON_BYE, GID_LAST }; // Login GUI int main(void) { struct MsgPort *AppPort = NULL; struct Window *window = NULL; struct Gadget *gadgets[GID_LAST]; Object *object = NULL; ULONG wait, signal; ULONG result; UWORD code; int done = FALSE; if ((AppPort = (struct MsgPort *)IExec->CreateMsgPort()) == NULL) return 0; object = (Object *)WindowObject, WA_Title, "Hello world!", WA_Activate, TRUE, WA_DepthGadget, TRUE, WA_DragBar, TRUE, WA_CloseGadget, TRUE, WA_SizeGadget, FALSE, WINDOW_IconifyGadget, TRUE, WINDOW_IconTitle, "Hello world", WINDOW_AppPort, AppPort, WINDOW_Position, WPOS_CENTERMOUSE, WINDOW_ParentGroup, gadgets[GID_MAIN] = (struct Gadget *)VGroupObject, LAYOUT_AddChild, gadgets[GID_STRING_WORLD] = (struct Gadget *)StringObject, GA_ID, GID_STRING_WORLD, STRINGA_TextVal, "world!", GA_TabCycle, TRUE, GA_ReadOnly, TRUE, EndObject, CHILD_Label, LabelObject, LABEL_Text, "Hello", LabelEnd, LAYOUT_AddChild, HGroupObject, LAYOUT_AddChild, gadgets[GID_BUTTON_BYE] = ButtonObject, GA_ID, GID_BUTTON_BYE, GA_Text, "Bye!", GA_RelVerify, TRUE, GA_TabCycle, TRUE, EndObject, EndGroup, EndGroup, EndWindow; if (object == NULL) { IExec->DeletePort(AppPort); return 0; } if ((window = (struct Window *) RA_OpenWindow(object)) == NULL) { IIntuition->DisposeObject(object); IExec->DeletePort(AppPort); return 0; } IIntuition->GetAttr(WINDOW_SigMask, object, &signal); while (!done) { wait = IExec->Wait( signal | SIGBREAKF_CTRL_C ); if ( wait & SIGBREAKF_CTRL_C ) done = TRUE; else { while ( (result = RA_HandleInput(object, &code) ) != WMHI_LASTMSG ) { switch (result & WMHI_CLASSMASK) { case WMHI_CLOSEWINDOW: done = TRUE; break; case WMHI_ICONIFY: RA_Iconify(object); window = NULL; break; case WMHI_UNICONIFY: window = (struct Window *) RA_OpenWindow(object); if (window) IIntuition->GetAttr(WINDOW_SigMask, object, &signal); else done = TRUE; // error re-opening window! break; case WMHI_GADGETUP: switch (result & WMHI_GADGETMASK) { case GID_BUTTON_BYE: done = TRUE; break; default:; } break; default:; } } } } IIntuition->DisposeObject(object); IExec->DeletePort(AppPort); return 0; }