static long CALLBACK websWindProc( HWND hwnd, unsigned int msg, unsigned int wp, long lp ) { switch ( msg ) { case WM_DESTROY: PostQuitMessage( 0 ); finished++; return 0; case WM_SYSCOMMAND: if ( wp == IDM_ABOUTBOX ) { if ( !hwndAbout ) { createAboutBox( ( HINSTANCE ) emfInstGet(), hwnd ); } if ( hwndAbout ) { ShowWindow( hwndAbout, SW_SHOWNORMAL ); } } break; } return DefWindowProc( hwnd, msg, wp, lp ); }
int main (int argc, char *argv[]) { Widget topWidget; Widget mainForm; Widget userForm; /* Menu Stuff */ Widget menuBar, helpMenu; static String fallback_resources[] = { "*sgiMode: True", "*useSchemes: all", NULL }; topWidget = XtVaAppInitialize(&nebulaIrcAppContext, "Nebula IRC", NULL, 0, /* no command line options */ &argc, argv, fallback_resources, /* fallback resource list */ NULL); mainWindow = XtVaCreateManagedWidget("main_window", xmMainWindowWidgetClass, topWidget, XmNcommandWindowLocation, XmCOMMAND_BELOW_WORKSPACE, XmNwidth, 600, XmNheight, 500, NULL); /* create menu bar */ { XmString fileMenuStr, userMenuStr, helpMenuStr; fileMenuStr = XM_STRING_CREATE("File"); userMenuStr = XM_STRING_CREATE("User"); helpMenuStr = XM_STRING_CREATE("Help"); menuBar = XmVaCreateSimpleMenuBar(mainWindow, "menubar", XmVaCASCADEBUTTON, fileMenuStr, 'F', XmVaCASCADEBUTTON, userMenuStr, 'U', NULL); XmStringFree(fileMenuStr); XmStringFree(userMenuStr); XmStringFree(helpMenuStr); } /* File Menu */ { XmString prefStr; XmString saveConvStr; XmString quitStr; prefStr = XM_STRING_CREATE("Preferences..."); saveConvStr = XM_STRING_CREATE("Save Conversation..."); quitStr = XM_STRING_CREATE("Quit"); XmVaCreateSimplePulldownMenu(menuBar, "file_menu", 0, fileMenuCall, XmVaPUSHBUTTON, prefStr, 'P', NULL, NULL, XmVaPUSHBUTTON, saveConvStr, 'S', NULL, NULL, XmVaPUSHBUTTON, quitStr, 'Q', NULL, NULL, NULL); XmStringFree(prefStr); XmStringFree(saveConvStr); XmStringFree(quitStr); } /* User Menu */ { XmString whoisStr; XmString versionStr; XmString opStr; XmString deopStr; whoisStr = XM_STRING_CREATE("Whois"); versionStr = XM_STRING_CREATE("Client version"); opStr = XM_STRING_CREATE("Op"); deopStr = XM_STRING_CREATE("Deop"); XmVaCreateSimplePulldownMenu(menuBar, "user_menu", 1, userMenuCall, XmVaPUSHBUTTON, whoisStr, 'W', NULL, NULL, XmVaPUSHBUTTON, versionStr, '\0', NULL, NULL, XmVaPUSHBUTTON, opStr, 'O', NULL, NULL, XmVaPUSHBUTTON, deopStr, 'D', NULL, NULL, NULL); XmStringFree(whoisStr); XmStringFree(versionStr); XmStringFree(opStr); XmStringFree(deopStr); } /* Help Menu */ { XmString helpCommandStr; XmString aboutStr; helpCommandStr = XM_STRING_CREATE("Commands..."); aboutStr = XM_STRING_CREATE("About..."); helpMenu = XtVaCreateManagedWidget("Help", xmCascadeButtonWidgetClass, menuBar, XmNmnemonic, 'H', NULL); XmVaCreateSimplePulldownMenu(menuBar, "Help", 2, helpMenuCall, XmVaPUSHBUTTON, aboutStr, 'A', NULL, NULL, XmVaPUSHBUTTON, helpCommandStr, 'C', NULL, NULL, NULL); XmStringFree(helpCommandStr); XmStringFree(aboutStr); /* now set the help button */ XtVaSetValues(menuBar, XmNmenuHelpWidget, helpMenu, NULL); } /* now manage the menu bar */ XtManageChild(menuBar); /* create a form */ mainForm = XtVaCreateWidget("form", xmFormWidgetClass, mainWindow, XmNfractionBase, 3, NULL); /* vertical split user form */ userForm = XtVaCreateWidget("userform", xmFormWidgetClass, mainForm, XmNfractionBase, 5, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); /* output area */ { Arg args[12]; XtSetArg(args[0], XmNeditable, False); XtSetArg(args[1], XmNeditMode, XmMULTI_LINE_EDIT); XtSetArg(args[2], XmNscrollHorizontal, False); XtSetArg(args[3], XmNwordWrap, True); XtSetArg(args[4], XmNtopAttachment, XmATTACH_POSITION); XtSetArg(args[5], XmNtopPosition, 0); XtSetArg(args[6], XmNbottomAttachment, XmATTACH_POSITION); XtSetArg(args[7], XmNbottomPosition, 5); XtSetArg(args[8], XmNleftAttachment, XmATTACH_POSITION); XtSetArg(args[9], XmNleftPosition, 0); XtSetArg(args[10], XmNrightAttachment, XmATTACH_POSITION); XtSetArg(args[11], XmNrightPosition, 4); outputArea = XmCreateScrolledText(userForm, "output", args, 12); if (outputArea == NULL) perror("outputArea: "); XtManageChild(outputArea); } /* user list at left */ { Arg args[9]; XtSetArg(args[0], XmNtopAttachment, XmATTACH_POSITION); XtSetArg(args[1], XmNtopPosition, 0); XtSetArg(args[2], XmNbottomAttachment, XmATTACH_POSITION); XtSetArg(args[3], XmNbottomPosition, 5); XtSetArg(args[4], XmNleftAttachment, XmATTACH_POSITION); XtSetArg(args[5], XmNleftPosition, 4); XtSetArg(args[6], XmNrightAttachment, XmATTACH_POSITION); XtSetArg(args[7], XmNrightPosition, 5); XtSetArg(args[8], XmNselectionPolicy, XmSINGLE_SELECT); userList = XmCreateScrolledList(userForm, "list", args, 9); XtAddCallback(userList, XmNsingleSelectionCallback, userListSelectCbk, NULL); XtManageChild(userList); } XtManageChild(userForm); XtManageChild(mainForm); /* Command line area */ commandInput = XtVaCreateWidget("command", xmTextFieldWidgetClass, mainWindow, XmNmaxLength, MAX_INPUT_LEN, NULL); XtAddCallback(commandInput, XmNactivateCallback, commandInputCall, NULL); XtManageChild(commandInput); XtVaSetValues(mainWindow, XmNmenuBar, menuBar, XmNworkWindow, mainForm, XmNcommandWindow, commandInput, NULL); XtManageChild(mainWindow); XtRealizeWidget(topWidget); /* initialize System Status */ sysState.isConnected = NO; /* get some preferences */ getStartupPrefs(mainWindow); /* set focus to input area */ /* For Motif 1.0 we should use _XmGrabTheFocus(target) according to FAQ */ XmProcessTraversal(commandInput, XmTRAVERSE_CURRENT); /* initialize hostname and system info */ /* should switch back to ARCHOS if uname not available */ { struct utsname sysInfo; char tempName[2*SYSINFO_LEN]; gethostname(sysState.myHostName, MAXHOSTNAMELEN); uname(&sysInfo); sprintf(tempName, "%s %s running on %s", sysInfo.sysname, sysInfo.release, sysInfo.machine); tempName[SYSINFO_LEN] = '\0'; strcpy(sysState.systemInfo, tempName); } /* get the user login name from unix */ { char *tempName; tempName = getenv("USER"); if (tempName == NULL) tempName = getenv("LOGNAME"); if (strlen(tempName) > MAX_NAME_LEN || tempName == NULL) { strcpy(sysState.myUnixname, "joesmith"); printf("Failed to get a proper Unix login name. Using: %s\n", sysState.myUnixname); } strcpy(sysState.myUnixname, tempName); } /* create unmanaged dialogs */ createAboutBox(mainWindow); createCommandsHelpBox(mainWindow); while(1) { XEvent theEvent; XtAppNextEvent(nebulaIrcAppContext, &theEvent); XtDispatchEvent(&theEvent); } }