/* * $Id$ * * :ts=8 */ #include "/workbench.h" #include #include #include #include #include #include #include #include /****************************************************************************/ extern struct Library *SysBase; extern struct Library *DOSBase; /****************************************************************************/ struct Library * WorkbenchBase; /****************************************************************************/ int main(int argc,char ** argv) { struct MsgPort * mp = NULL; struct AppMenu * menu = NULL; struct AppMenuItem * item1 = NULL; struct AppMenuItem * item2 = NULL; struct AppMenuItem * item3 = NULL; struct AppMenuItem * sub = NULL; struct AppMessage * am; ULONG key; ULONG key2; BOOL done; WorkbenchBase = OpenLibrary("workbench.library",45); if(WorkbenchBase == NULL) { Printf("Couldn't open workbench.library V45.\n"); goto out; } mp = CreateMsgPort(); if(mp == NULL) { Printf("Couldn't create MsgPort.\n"); goto out; } key = 0; menu = (struct AppMenu *)AddAppMenuItem(0, (ULONG)"new top menu", "New menu title", mp, WBAPPMENUA_GetTitleKey,&key, TAG_DONE); if(menu == NULL) { Printf("Couldn't create menu.\n"); goto out; } if(key == 0) { Printf("Can't get a key for the menu\n"); goto out; } item1 = AddAppMenuItem(1, (ULONG)"menu item 1", "This is the first menu item", mp, WBAPPMENUA_UseKey,key, TAG_DONE); if(item1 == NULL) { Printf("Couldn't create first menu item.\n"); goto out; } item2 = AddAppMenuItem(2, (ULONG)"menu item 2", "This is the second menu item", mp, WBAPPMENUA_UseKey,key, TAG_DONE); if(item2 == NULL) { Printf("Couldn't create second menu item.\n"); goto out; } key2 = 0; item3 = AddAppMenuItem(3, (ULONG)"menu item 3", "This is the third menu item, and it has a subitem", mp, WBAPPMENUA_UseKey,key, WBAPPMENUA_GetKey,&key2, TAG_DONE); if(item2 == NULL) { Printf("Couldn't create third level menu item.\n"); goto out; } if(key2 == 0) { Printf("Can't get a key for the submenu\n"); goto out; } sub = AddAppMenuItem(4, (ULONG)"sub menu item", "This is the sub menu item", mp, WBAPPMENUA_UseKey,key2, TAG_DONE); if(sub == NULL) { Printf("Couldn't create sub menu item.\n"); goto out; } done = FALSE; do { WaitPort(mp); while((am = (struct AppMessage *)GetMsg(mp)) != NULL) { if(am->am_UserData != (ULONG)NULL) Printf("%s\n",am->am_UserData); if(am->am_ID == 1) done = TRUE; } } while(NOT done); Printf("removing the two; press ^C to continue... "); Flush(Output()); Wait(SIGBREAKF_CTRL_C); RemoveAppMenuItem(item1); item1 = NULL; RemoveAppMenuItem(item2); item2 = NULL; Printf("removing the submenu; press ^C to continue... "); Flush(Output()); Wait(SIGBREAKF_CTRL_C); RemoveAppMenuItem(item3); item3 = NULL; RemoveAppMenuItem(sub); sub = NULL; out: if(item1 != NULL) RemoveAppMenuItem(item1); if(item2 != NULL) RemoveAppMenuItem(item2); if(item3 != NULL) RemoveAppMenuItem(item3); if(sub != NULL) RemoveAppMenuItem(sub); if(menu != NULL) RemoveAppMenuItem((struct AppMenuItem *)menu); if(mp != NULL) { while((am = (struct AppMessage *)GetMsg(mp)) != NULL) ReplyMsg((struct Message *)am); DeleteMsgPort(mp); } if(WorkbenchBase != NULL) { CloseLibrary(WorkbenchBase); WorkbenchBase = NULL; } return(0); }