michael@uunet.UU.NET (Michael Wagnitz) (06/16/91)
Submitted-by: stratus!voder!nsc!berlioz.nsc.com!michael@uunet.UU.NET (Michael Wagnitz) Posting-number: Volume 13, Issue 49 Archive-name: xmail/part07 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 7 (of 11)." # Contents: windows.c # Wrapped by michael@harley on Fri May 3 13:35:52 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'windows.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'windows.c'\" else echo shar: Extracting \"'windows.c'\" \(23480 characters\) sed "s/^X//" >'windows.c' <<'END_OF_FILE' X/* X * xmail - X window system interface to the mail program X * X * Copyright 1989 The University of Texas at Austin X * X * Author: Po Cheung X * Date: March 10, 1989 X * X * Permission to use, copy, modify, and distribute this software and X * its documentation for any purpose and without fee is hereby granted, X * provided that the above copyright notice appear in all copies and that X * both that copyright notice and this permission notice appear in X * supporting documentation. The University of Texas at Austin makes no X * representations about the suitability of this software for any purpose. X * It is provided "as is" without express or implied warranty. X * X * Copyright 1990 by National Semiconductor Corporation X * X * Permission to use, copy, modify, and distribute this software and its X * documentation for any purpose is hereby granted without fee, provided that X * the above copyright notice appear in all copies and that both that X * copyright notice and this permission notice appear in supporting X * documentation, and that the name of National Semiconductor Corporation not X * be used in advertising or publicity pertaining to distribution of the X * software without specific, written prior permission. X * X * NATIONAL SEMICONDUCTOR CORPORATION MAKES NO REPRESENTATIONS ABOUT THE X * SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" X * WITHOUT EXPRESS OR IMPLIED WARRANTY. NATIONAL SEMICONDUCTOR CORPORATION X * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED X * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO X * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL, X * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM X * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE X * OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR X * PERFORMANCE OF THIS SOFTWARE. X * X * The following software modules were created and are Copyrighted by National X * Semiconductor Corporation: X * X * 1. AddHelpText: X * 2. AddInfoHandler: X * 3. AddMenuWindow: X * 4. AddSetMenu: X * 5. CreateFolderButton: and X * 6. CreateInputWindow. X * X * Author: Michael C. Wagnitz - National Semiconductor Corporation X * X */ X X X#include "global.h" X#include "MailwatchP.h" X#include "patchlevel.h" X#include "icon.mail" X#include "national.bm" X X X/* X** @(#)AddHelpText() - add help text to string resources for help widget X*/ Xvoid XAddHelpText(parent, help_text) XWidget parent; XString help_text; X{ X Arg args[3]; X String name; X X static String p_Trans = "#override \ X !Shift<Btn2Down>: ShowHelp()\n\ X <Btn2Up>: MenuPopdown(help)"; X X XtOverrideTranslations(parent, XtParseTranslationTable(p_Trans)); X X HelpList.name[HelpList.indx] = name = parent->core.name; X X XtSetArg(args[0], XtNstring, (XtArgVal) help_text); X XtSetArg(args[1], XtNlength, (XtArgVal) strlen(help_text)); X XtSetArg(args[2], XtNeditType, (XtArgVal) XawtextRead); X X HelpList.text[HelpList.indx] = XtCreateWidget(name, asciiSrcObjectClass, X XtNameToWidget(toplevel, "topBox.help.helpWindow"), X args, 3); X HelpList.indx += 1; X} /* AddHelpText */ X X Xvoid XAddInfoHandler(widget, message) XWidget widget; Xchar *message; X{ X if (XMail.Show_Info) X XtAddEventHandler(widget, X (EventMask) (EnterWindowMask|LeaveWindowMask), X False, X info_handler, X (caddr_t) message); X} X X X/* X** @(#)AddMenuWindow() - create menu popup for the specified widget X*/ Xvoid XAddMenuWindow(parent, action, list, info_text) XWidget parent; XString action; XmenuList_p *list; XString *info_text; X{ X Arg args[6]; X Cardinal j, k, n, indx; X Widget menu, layout, previous, next; X char tag[BUFSIZ], trans[BUFSIZ], *c; X X static String p_Trans = X "<Btn3Down>: SetPopup(%s) MenuPopup(%s)"; X X static String b_Trans = X "<EnterWindow>: highlight() set() \n\ X <LeaveWindow>: unset() unhighlight()\n\ X <Btn3Up>: notify() reset()"; X X static String m_Trans = X "<Btn3Up>: MenuPopdown(%s)"; X X static String L_Trans[] = { NULL, X "! Shift <Btn1Down>: %s(%s)", X "! Ctrl <Btn1Down>: %s(%s)", X "! Shift Ctrl <Btn1Down>: %s(%s)", X NULL }; X X static String Labels[] = { NULL, X " [Shift]", X " [Ctrl]", X " [Shift][Ctrl]", X NULL }; X X X if (list[0]) { X (void) sprintf(tag, "%s_menu", parent->core.name); X (void) sprintf(trans, p_Trans, tag, tag); X XtOverrideTranslations(parent, XtParseTranslationTable(trans)); X X (void) sprintf(trans, m_Trans, tag); X XtSetArg(args[0], XtNtranslations, XtParseTranslationTable(trans)); X menu = XtCreatePopupShell(tag, overrideShellWidgetClass, parent, args, ONE); X X XtSetArg(args[0], XtNdefaultDistance, (XtArgVal) 1); X layout = XtCreateManagedWidget("menu", formWidgetClass, menu, args, ONE); X/* X** Find widest label for this menu X*/ X for (j = k = n = indx = 0; list[indx] != NULL; indx++) X if ((k = strlen(list[indx]->label)) > j) { X j = k; X n = indx; X } X k = XTextWidth(XMail.buttonFont, list[n]->label, j) + 12; X X if (--indx > 0) /* add length for accelerator keys menu notes */ X k += XTextWidth(XMail.buttonFont, Labels[indx], strlen(Labels[indx])); X/* X** create the menu buttons X*/ X previous = NULL; X XtSetArg(args[0], XtNwidth, k); X XtSetArg(args[1], XtNfont, XMail.buttonFont); X XtSetArg(args[2], XtNjustify, XtJustifyLeft); X XtSetArg(args[3], XtNtranslations, XtParseTranslationTable(b_Trans)); X for (indx = 0; list[indx] != NULL; indx++) { X strcpy(tag, list[indx]->label); /* set window name by label */ X if ((c = strchr(tag, ' '))) *c = '\0'; /* first word only */ X sprintf(trans, "%-*.*s", j, j, list[indx]->label); X if (Labels[indx]) /* add accel. note if needed */ X strcat(trans, Labels[indx]); X X XtSetArg(args[4], XtNlabel, trans); X XtSetArg(args[5], XtNfromVert, previous); X next = XtCreateManagedWidget(tag, commandWidgetClass, layout, args, 6); X X if (info_text) X AddInfoHandler(next, info_text[indx]); X X XtAddCallback(next, XtNcallback, list[indx]->func, list[indx]->data); X previous = next; X X if (L_Trans[indx]) { X sprintf(trans, L_Trans[indx], action, list[indx]->data); X XtOverrideTranslations(parent, XtParseTranslationTable(trans)); X } X } X/* X** Dummy out any remaining combinations of accelerators to do nothing X*/ X for (; L_Trans[indx] != NULL; indx++) { X sprintf(trans, L_Trans[indx], "DoNothing", ""); X XtOverrideTranslations(parent, XtParseTranslationTable(trans)); X } X } X} /* AddMenuWindow */ X X X/* X** @(#)AddButton() - add a button to the command window X** include help and an auxilary commands popup menu X*/ Xvoid XAddButton(parent, name, action, command, list, info_text, help_text) XWidget parent; /* widget which holds this button */ XString name; /* Label for button (and children) */ XString action; /* name of the XtActionProc to call */ XString command; /* passed as param(s) to ActionProc */ XmenuList_p *list; /* aux. menu buttons list w/ cbacks */ XString *info_text; /* pointer to button specific info */ XString help_text; /* pointer to button specific help */ X{ X Arg args[5]; X Widget button; X char trans[BUFSIZ]; X/* X** Insert name of XtActionProc (and parameter(s)) in the translation list X*/ X (void) sprintf(trans, "#override <Btn1Down>: %s(%s)", action, command); X X XtSetArg(args[0], XtNwidth, XMail.buttonWidth); X XtSetArg(args[1], XtNheight, XMail.buttonHeight); X XtSetArg(args[2], XtNresize, False); X XtSetArg(args[3], XtNfont, XMail.buttonFont); X XtSetArg(args[4], XtNtranslations, XtParseTranslationTable(trans)); X button = XtCreateManagedWidget(name, commandWidgetClass, parent, args, 5); X X if (info_text) X AddInfoHandler(button, info_text[0]); X X if (help_text) X AddHelpText(button, help_text); X X if (list) X AddMenuWindow(button, action, list, info_text); X} /* AddButton */ X X X/* X** @(#)AddSetMenu() - add hook to create menu for toggling mail options X*/ Xvoid XAddSetMenu(w) XWidget w; X{ X Widget parent = XtNameToWidget(w, "preserve"); X static String p_Trans = "#override \ X <Btn3Down>: SetMenu() MenuPopup(set_menu)"; X X XtOverrideTranslations(parent, XtParseTranslationTable(p_Trans)); X} /* AddSetMenu */ X X Xvoid XCreateButtons(parent) XWidget parent; X{ X menuList_p *list; X menuList b1, b2, b3, b4; X X X list = (menuList **) XtMalloc(5 * sizeof(menuList *)); X X b1.label = "read"; b1.func = (XtCallbackProc) DoWith; b1.data = "p"; X b2.label = "next"; b2.func = (XtCallbackProc) DoIt; b2.data = "n"; X b3.label = "previous"; b3.func = (XtCallbackProc) DoIt; b3.data = "-"; X b4.label = "full header"; b4.func = (XtCallbackProc) DoWith; b4.data = "P"; X list[0] = &b1; list[1] = &b2; list[2] = &b3; list[3] = &b4; list[4] = NULL; X AddButton(parent, "read", "DoSelected", "p", list, Read_Info, Read_Help); X X b1.label = "save"; b1.func = (XtCallbackProc) Save; b1.data = "s"; X b2.label = "Save to author"; b2.func = (XtCallbackProc) Save; b2.data = "S"; X b3.label = "write"; b3.func = (XtCallbackProc) Save; b3.data = "w"; X list[0] = &b1; list[1] = &b2; list[2] = &b3; list[3] = NULL; X AddButton(parent, "save", "DoSave", "s", list, Save_Info, Save_Help); X X CreateFolderButton(parent); X X b1.label = "copy"; b1.func = (XtCallbackProc) Save; b1.data = "c"; X b2.label = "Copy to author"; b2.func = (XtCallbackProc) Save; b2.data = "C"; X list[0] = &b1; list[1] = &b2; list[2] = NULL; X AddButton(parent, "copy", "DoSave", "c", list, Copy_Info, Copy_Help); X X AddButton(parent, "preserve", "DoSelected", "preserve", NULL, Hold_Info, Hold_Help); X X b1.label = "delete"; b1.func = (XtCallbackProc) DoWith; b1.data = "d"; X b2.label = "undelete"; b2.func = (XtCallbackProc) DoWith; b2.data = "u"; X list[0] = &b1; list[1] = &b2; list[2] = NULL; X AddButton(parent, "delete", "DoSelected", "d", list, Delete_Info, Delete_Help); X X b1.label = "Newmail"; b1.func = (XtCallbackProc) DoIt; b1.data = "file %"; X b2.label = "inc (no commit)"; b2.func = (XtCallbackProc) DoIt; b2.data = "inc"; X b3.label = "Drop Folders"; b3.func = (XtCallbackProc) DropIt; b3.data = "drop"; X list[0] = &b1; list[1] = &b2; list[2] = &b3; list[3] = NULL; X AddButton(parent, "Newmail", "DoCmd", "file %", list, NewMail_Info, NewMail_Help); X X b1.label = "quit"; b1.func = (XtCallbackProc) DoQuit; b1.data = "q"; X b2.label = "exit"; b2.func = (XtCallbackProc) DoQuit; b2.data = "x"; X list[0] = &b1; list[1] = &b2; list[2] = NULL; X AddButton(parent, "quit", "Quit", "q", list, Quit_Info, Quit_Help); X X b1.label = "print"; b1.func = (XtCallbackProc) DoPrint; b1.data = ""; X list[0] = &b1; list[1] = NULL; X AddButton(parent, "Print", "PrintMsg", "", list, Print_Info, Print_Help); X X b1.label="send a message"; b1.func = (XtCallbackProc) Reply; b1.data = "s"; X b2.label="forward message"; b2.func = (XtCallbackProc) Reply; b2.data = "S"; X list[0] = &b1; list[1] = &b2; list[2] = NULL; X AddButton(parent, "Send", "DoReply", "s", list, Send_Info, Send_Help); X X b1.label="reply"; b1.func = (XtCallbackProc) Reply; b1.data = "r"; X b2.label="reply included"; b2.func = (XtCallbackProc) Reply; b2.data = "R"; X b3.label="replyall"; b3.func = (XtCallbackProc) Reply; b3.data = "a"; X b4.label="replyall included"; b4.func = (XtCallbackProc) Reply; b4.data = "A"; X list[0] = &b1; list[1] = &b2; list[2] = &b3; X list[3] = &b4; list[4] = NULL; X AddButton(parent, "reply", "DoReply", "r", list, Reply_Info, Reply_Help); X X XtFree((menuList *) list); X X CreateFileWindow(parent); X X AddSetMenu(parent); /* add a menu for toggling mail options */ X X} /* CreateButtons */ X X X/* X** @(#)CreateCommandPanel() - add buttons, and set up the file menu. X*/ Xvoid XCreateCommandPanel(parent) XWidget parent; X{ X Arg args[8]; X Widget cw; X X static String w_Trans = "\ X <Btn1Down>: DoNothing()\n\ X <Btn2Down>: DoNothing()\n\ X <Btn3Down>: DoNothing()"; X X XtSetArg(args[0], XtNhSpace, XMail.commandHSpace); X XtSetArg(args[1], XtNvSpace, XMail.commandVSpace); X XtSetArg(args[2], XtNallowResize, (XtArgVal) False); X XtSetArg(args[3], XtNmax, XMail.commandHeight); X XtSetArg(args[4], XtNmin, XMail.commandHeight); X XtSetArg(args[5], XtNfont, XMail.buttonFont); X XtSetArg(args[6], XtNtranslations, XtParseTranslationTable(w_Trans)); X XtSetArg(args[7], XtNshowGrip, (XtArgVal) False); X X cw = XtCreateManagedWidget("commandPanel", boxWidgetClass, parent, args, 8); X X CreateButtons(cw); X} /* CreateCommandPanel */ X X X/* X** @(#)CreateFileWindow() - for user entry of file and folder names X** Includes a special set of action routines for the keys to do X** Delete/Backspace, Ctrl-U, Ctrl-W, and insert-selection(). X*/ Xvoid XCreateFileWindow(parent) XWidget parent; X{ X Arg args[9]; X Widget w; X X static String trans = "#override \n\ X Ctrl <Key>a: beginning-of-file() \n\ X Ctrl <Key>b: backward-character() \n\ X Ctrl <Key>d: CheckInsert() delete-next-character() \n\ X Ctrl <Key>e: end-of-file() \n\ X Ctrl <Key>f: forward-character() \n\ X Ctrl <Key>h: DeleteChar() \n\ X Ctrl <Key>j: DoNothing() \n\ X Ctrl <Key>m: DoNothing() \n\ X Ctrl <Key>u: DeleteLine() \n\ X Ctrl <Key>w: DeleteWord() \n\ X Meta <Key>b: backward-word() \n\ X Meta <Key>d: CheckInsert() delete-next-word() \n\ X Meta <Key>f: forward-word() \n\ X <Key>Delete: DeleteChar() \n\ X <Key>BackSpace: DeleteChar() \n\ X <Key>Linefeed: DoNothing() \n\ X <Key>Return: DoNothing() \n\ X <Key>Right: forward-character() \n\ X <Key>Left: backward-character() \n\ X <Key>: CheckInsert() insert-char()\n\ X <Btn1Down>: select-start() \n\ X <Btn2Down>: CheckInsert() insert-selection(PRIMARY, CUT_BUFFER0)"; X X X XtSetArg(args[0], XtNwidth, XMail.fileBoxWidth); X XtSetArg(args[1], XtNheight, XMail.buttonHeight); X XtSetArg(args[2], XtNborderWidth, 1); X XtSetArg(args[3], XtNfont, XMail.buttonFont); X XtSetArg(args[4], XtNeditType, XawtextEdit); X XtSetArg(args[5], XtNstring, (XtArgVal) FileBuf); X XtSetArg(args[6], XtNlength, (XtArgVal) BUFSIZ); X XtSetArg(args[7], XtNuseStringInPlace, (XtArgVal) True); X XtSetArg(args[8], XtNtranslations, XtParseTranslationTable(trans)); X X w = XtCreateManagedWidget("fileWindow", asciiTextWidgetClass, parent, args, 9); X X writeText(w, "File: ", 0); /* insert label and position cursor */ X X AddInfoHandler(w, "Specify the name of a mail folder"); X X AddHelpText(w, File_Help); X} /* CreateFileWindow */ X X X/* X** @(#)CreateFolderButton() - attach special Btn3 hook to list folders X*/ Xvoid XCreateFolderButton(parent) XWidget parent; X{ X Arg args[5]; X Widget button; X X static String trans = "#override \n\ X <Btn1Down>: Folder() \n\ X <Btn3Down>: SetFolders() MenuPopup(popupList)"; X X XtSetArg(args[0], XtNwidth, XMail.buttonWidth); X XtSetArg(args[1], XtNheight, XMail.buttonHeight); X XtSetArg(args[2], XtNresize, False); X XtSetArg(args[3], XtNfont, XMail.buttonFont); X XtSetArg(args[4], XtNtranslations, XtParseTranslationTable(trans)); X button = XtCreateManagedWidget("Folder", commandWidgetClass, parent, args, 5); X X AddInfoHandler(button, Folder_Info[0]); X X AddHelpText(button, Folder_Help); X} /* CreateFolderButton */ X X X/* X** @(#)CreateHelpWindow() - create popup window for the help text X*/ Xvoid XCreateHelpWindow(parent) XWidget parent; X{ X Arg args[4]; X Widget w; X static String trans = "#override \n\ X <Key>Linefeed: MenuPopdown(help)"; X X XtSetArg(args[0], XtNborderWidth, 3); X w = XtCreatePopupShell("help", overrideShellWidgetClass, parent, args, 1); X X XtSetArg(args[0], XtNwidth, XMail.helpWidth); X XtSetArg(args[1], XtNheight, XMail.helpHeight); X XtSetArg(args[2], XtNfont, XMail.helpFont); X XtSetArg(args[3], XtNtranslations, XtParseTranslationTable(trans)); X X XtCreateManagedWidget("helpWindow", asciiTextWidgetClass, w, args, 4); X} /* CreateHelpWindow */ X X X/* X** Index window is a AsciiTextWidget, with special key assignments X*/ Xvoid XCreateIndexWindow(parent) XWidget parent; X{ X Arg args[6]; X Widget w; X X XtSetArg(args[0], XtNheight, XMail.indexHeight); X XtSetArg(args[1], XtNfont, XMail.textFont); X XtSetArg(args[2], XtNdisplayCaret, (XtArgVal) False); X XtSetArg(args[3], XtNeditType, XawtextEdit); X XtSetArg(args[4], XtNscrollVertical, XawtextScrollAlways); X XtSetArg(args[5], XtNstring, ""); X X w = XtCreateManagedWidget("indexWindow", asciiTextWidgetClass,parent,args,6); X X AddHelpText(w, Index_Help); X} /* CreateIndexWindow */ X X X/* X** @(#)CreateStatusWindow() - place for messages from mail X*/ Xvoid XCreateStatusWindow(parent) XWidget parent; X{ X Arg args[10]; X Widget w; X X static String w_Trans = "\ X <Btn1Down>: DoNothing()\n\ X <Btn3Down>: DoNothing()"; X X XtSetArg(args[0], XtNallowResize, False); X XtSetArg(args[1], XtNmin, XMail.buttonHeight); X XtSetArg(args[2], XtNmax, XMail.buttonHeight); X XtSetArg(args[3], XtNshowGrip, False); X X XtSetArg(args[4], XtNwidth, XMail.shellWidth); X XtSetArg(args[5], XtNfont, XMail.textFont); X XtSetArg(args[6], XtNjustify, XtJustifyCenter); X XtSetArg(args[7], XtNlabel, "Establishing connections"); X XtSetArg(args[8], XtNresize, False); X XtSetArg(args[9], XtNtranslations, XtParseTranslationTable(w_Trans)); X X w = XtCreateManagedWidget("statusWindow", labelWidgetClass, parent, args, 10); X X AddHelpText(w, Status_Help); X} /* CreateStatusWindow */ X X X/* X** @(#)CreateSubWindows() - create all the xmail subwindows. X*/ Xvoid XCreateSubWindows(parent) XWidget parent; X{ X Arg args[4]; X Widget icon, mb, topbox; X int n, x, y; X X X XtSetArg(args[0], XtNinput, True); X XtSetArg(args[1], XtNwidth, XMail.shellWidth); X XtSetArg(args[2], XtNgripIndent, 0); X XtSetArg(args[3], XtNskipAdjust, True); X X topbox = XtCreateManagedWidget("topBox", panedWidgetClass, parent, args, 4); X X CreateHelpWindow(topbox); X CreateTitleBar(topbox); X CreateIndexWindow(topbox); X CreateStatusWindow(topbox); X CreateCommandPanel(topbox); X CreateTextWindow(topbox); X/* X** Create an icon window for the mailwatchWidget X*/ X XtSetArg(args[0], XtNwidth, (XtArgVal) mail_width); X XtSetArg(args[1], XtNheight, (XtArgVal) mail_height); X n = 2; X if (XMail.iconGeometry) { X ParseIconGeometry(XMail.iconGeometry, &x, &y); X XtSetArg(args[n], XtNx, (XtArgVal) x); n++; X XtSetArg(args[n], XtNy, (XtArgVal) y); n++; X } X icon = XtCreateWidget("icon", applicationShellWidgetClass, toplevel, args, n); X mb = XtCreateManagedWidget("mailbox", mailwatchWidgetClass, icon, NULL, 0); X XtAddCallback(mb, XtNcallback, SetNewmail, NULL); X} /* CreateSubWindows */ X X X/* X** @(#)CreateTextWindow() - AsciiTextWidget window, without special keys X*/ Xvoid XCreateTextWindow(parent) XWidget parent; X{ X Arg args[11]; X Widget form, face, tw; X X X XtSetArg(args[0], XtNmin, XMail.textHeight / 3); X XtSetArg(args[1], XtNheight, XMail.textHeight); X XtSetArg(args[2], XtNwidth, XMail.shellWidth); X form = XtCreateManagedWidget("textWindow", formWidgetClass, parent, args, 3); X X XtSetArg(args[0], XtNleft, XtChainRight); X XtSetArg(args[1], XtNright, XtChainRight); X XtSetArg(args[2], XtNtop, XtChainTop); X XtSetArg(args[3], XtNbottom, XtChainTop); X XtSetArg(args[4], XtNvertDistance, 0); X XtSetArg(args[5], XtNhorizDistance, XMail.shellWidth - 48); X XtSetArg(args[6], XtNborderWidth, 0); X XtSetArg(args[7], XtNheight, 48); X XtSetArg(args[8], XtNwidth, 48); X XtSetArg(args[9], XtNinternalWidth, 0); X face = XtCreateWidget("face", labelWidgetClass, form, args, 10); X X XtSetArg(args[0], XtNleft, XtChainLeft); X XtSetArg(args[1], XtNright, XtChainRight); X XtSetArg(args[2], XtNtop, XtChainTop); X XtSetArg(args[3], XtNbottom, XtChainBottom); X /* see above... */ X XtSetArg(args[5], XtNhorizDistance, 0); X /* see above... */ X XtSetArg(args[7], XtNheight, XMail.textHeight); X XtSetArg(args[8], XtNfont, XMail.textFont); X XtSetArg(args[9], XtNstring, ""); X XtSetArg(args[10], XtNscrollVertical, XawtextScrollAlways); X tw = XtCreateManagedWidget("text", asciiTextWidgetClass, form, args, 11); X X AddHelpText(tw, Text_Help); X X HelpList.name[HelpList.indx] = XtNewString("text2"); X X XtSetArg(args[0], XtNstring, (XtArgVal) Text2_Help); X XtSetArg(args[1], XtNlength, (XtArgVal) strlen(Text2_Help)); X HelpList.text[HelpList.indx] = XtCreateWidget("text2", asciiSrcObjectClass, X XtNameToWidget(toplevel, "topBox.help.helpWindow"), X args, 2); X HelpList.indx += 1; X} /* CreateTextWindow */ X X X/* X** @(#)CreateTitleBar() - creates the title bar displayed at top of shell X** Include Nat. Semi. Corp. logo in top left corner. X*/ Xvoid XCreateTitleBar(parent) XWidget parent; X{ X Arg args[8]; X Pixmap logo; X Widget form, lg, tb; X char buf[20]; X X static String w_Trans = "\ X <Btn1Down>: DoNothing()\n\ X <Btn2Down>: DoNothing()\n\ X <Btn3Down>: DoNothing()"; X X static String l_Trans = "\ X <Btn1Down>: Iconify()\n\ X <Btn2Down>: Iconify()\n\ X <Btn3Down>: Iconify()"; X X XtSetArg(args[0], XtNdefaultDistance, 1); X XtSetArg(args[1], XtNallowResize, (XtArgVal) False); X XtSetArg(args[2], XtNmax, (XtArgVal) XMail.buttonHeight); X XtSetArg(args[3], XtNmin, (XtArgVal) XMail.buttonHeight); X XtSetArg(args[4], XtNshowGrip, (XtArgVal) False); X X form = XtCreateManagedWidget("titleBar", formWidgetClass, parent, args, 5); X X logo = XCreateBitmapFromData(XtDisplay(toplevel), XtScreen(toplevel)->root, X national_bits, national_width, national_height); X X XtSetArg(args[0], XtNborderWidth, 0); X XtSetArg(args[1], XtNheight, (XtArgVal) XMail.buttonHeight); X XtSetArg(args[2], XtNwidth, national_width); X XtSetArg(args[3], XtNinternalWidth, 0); X XtSetArg(args[4], XtNbitmap, (XtArgVal) logo); X XtSetArg(args[5], XtNtranslations, XtParseTranslationTable(l_Trans)); X lg = XtCreateManagedWidget("logo", commandWidgetClass, form, args, 6); X X sprintf(buf, "%s%d", TITLE, PATCHLEVEL); X X XtSetArg(args[2], XtNwidth, XMail.shellWidth - national_width - 2); X XtSetArg(args[3], XtNlabel, (XtArgVal) buf); X XtSetArg(args[4], XtNfont, XMail.textFont); X XtSetArg(args[5], XtNjustify, (XtArgVal) XtJustifyLeft); X XtSetArg(args[6], XtNfromHoriz, lg); X XtSetArg(args[7], XtNtranslations, XtParseTranslationTable(w_Trans)); X tb = XtCreateManagedWidget("title", labelWidgetClass, form, args, 8); X X AddHelpText(tb, Title_Help); X} /* CreateTitleBar */ X X X/* X** @(#)CreateInputWindow() - for specifying recipient, subject, and Cc list X** Has its own set of translations for editing. X** Special actions for Delete/Backspace, Ctrl-U, and Ctrl-W. X*/ XWidget XCreateInputWindow(parent, name, buf, len) XWidget parent; XString name; XString buf; XCardinal len; X{ X Arg args[9]; X int n; X Widget w; X X n = XMail.shellWidth - 26; /* - (20 + 2 * (internal_width+def_dist)) */ X n -= figureWidth(XMail.buttonFont)*9-10; /* less label width+fudge factor */ X X XtSetArg(args[0], XtNwidth, n); X XtSetArg(args[1], XtNinput, True); X XtSetArg(args[2], XtNheight, XMail.buttonHeight + XMail.borderWidth); X XtSetArg(args[3], XtNfont, XMail.buttonFont); X XtSetArg(args[4], XtNborderWidth, 1); X XtSetArg(args[5], XtNstring, buf); X XtSetArg(args[6], XtNlength, len); X XtSetArg(args[7], XtNuseStringInPlace, True); X XtSetArg(args[8], XtNeditType, XawtextEdit); X X w = XtCreateManagedWidget(name, asciiTextWidgetClass, parent, args, 9); X X return( w ); X} /* CreateInputWindow */ X X/* X** @(#)ParseIconGeometry() - Parse the icon geometry X*/ Xvoid XParseIconGeometry(str, x, y) Xchar *str; Xint *x, *y; X{ X int res; X unsigned int w, h; X X *x = 0; X *y = 0; X res = XParseGeometry(str, x, y, &w, &h); X if ((res & (XNegative|XValue)) == (XNegative|XValue)) X *x = RootWidth + *x - mail_width; X if ((res & (YNegative|YValue)) == (YNegative|YValue)) X *y = RootHeight + *y - mail_height; X} /* ParseIconGeometry */ END_OF_FILE if test 23480 -ne `wc -c <'windows.c'`; then echo shar: \"'windows.c'\" unpacked with wrong size! fi # end of 'windows.c' fi echo shar: End of archive 7 \(of 11\). cp /dev/null ark7isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 11 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Dan Heller O'Reilly && Associates Z-Code Software Comp-sources-x: Senior Writer President comp-sources-x@uunet.uu.net argv@ora.com argv@zipcode.com