|
|
1.1 root 1:
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/others/quipu/uips/pod/RCS/pod.c,v 7.0 90/06/12 13:15:50 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/others/quipu/uips/pod/RCS/pod.c,v 7.0 90/06/12 13:15:50 mrose Exp $
9: */
10:
11: /*
12: * $Log: pod.c,v $
13: * Revision 7.0 90/06/12 13:15:50 mrose
14: * *** empty log message ***
15: *
16: * Revision 1.5 90/04/26 10:21:06 emsrdsm
17: * *** empty log message ***
18: *
19: * Revision 1.4 90/04/25 13:47:09 emsrdsm
20: * i) lint'ed
21: *
22: * Revision 1.3 90/04/20 10:28:00 emsrdsm
23: * (i) fixed form bug
24: *
25: * Revision 1.2 90/04/18 18:48:24 emsrdsm
26: * i) added logging
27: *
28: * Revision 1.1 90/04/10 16:44:42 emsrdsm
29: * Initial revision
30: *
31: *
32: */
33:
34: #include "bitmaps/Search"
35: #include "bitmaps/SearchPress"
36: #include "bitmaps/List"
37: #include "bitmaps/ListPress"
38: #include "bitmaps/History"
39: #include "bitmaps/HistoryPress"
40: #include "bitmaps/Close"
41: #include "bitmaps/ClosePress"
42: #include "bitmaps/Quit"
43: #include "bitmaps/QuitPress"
44: #include "bitmaps/Help"
45: #include "bitmaps/HelpPress"
46: #include "bitmaps/Cancel"
47: #include "bitmaps/Okay"
48: #include "bitmaps/OkayPress"
49: #include "bitmaps/About"
50: #include "bitmaps/AboutPress"
51:
52: #include <X11/bitmaps/gray>
53:
54: #include "pod.h"
55: #include "defs.h"
56:
57: char help_string[1000];
58:
59: extern dsEnqError srch_start(), rd_start(), list_start();
60:
61: extern char base_path[];
62: extern char friendly_base_path[];
63: extern char mvalue[];
64:
65: extern unsigned int filt_num, typeindx;
66: extern int *av_typeindx;
67:
68: extern char *filtvalue[];
69: extern char *filttype[];
70:
71: extern char dua_help_dir[];
72:
73: extern int NUMLINES;
74: extern int px, py, maxx;
75: extern Pixmap photo_pixmap;
76: Widget PhotoWindow;
77:
78: extern int sizelimit;
79:
80: char selection[1024];
81: char curr_help[1024];
82:
83: static Widget sel_widget = 0;
84: static Widget popup = 0, error_popup = 0;
85:
86: static Display *dpy;
87: static Screen *screen;
88: static int scr;
89:
90: mode listmode = many;
91:
92: extern D_seq showseq, dnseq, backseq;
93: extern int entry_number, back_buf_num, dn_number;
94:
95: int element_number = 0;
96: int rdn_number = 0;
97:
98: int help_up = 0;
99:
100: static void Quit(), QuitFromHelp(), InsertHelp();
101: static void List(), ListDestroy(), Close();
102: static void AddNewList(), ListSelect(), Move(), DMove(), HMove();
103: static void StartSearch(), Search(), SetType(), Read(), Help();
104: static void TSearch(), ClearSearchArea(), killSearch(), killError();
105: static void create_new_list(), create_genform();
106: static void create_text_display(), create_search_popup();
107: static void create_history_popup(), popupHistory(), popdownHistory();
108: static void ChangeHelp();
109: static void buttonPress();
110: void CreateBackgroundPixmap();
111:
112: static Widget create_type_menu();
113:
114: Widget toplevel, outer;
115:
116: static XtActionsRec actionsTable[] = {
117: {"TSearch", (XtActionProc) TSearch},
118: {"ClearSearchArea", (XtActionProc) ClearSearchArea},
119: };
120:
121: static char defaultTranslations[] =
122: "<Key>Return: TSearch() \n\
123: Ctrl<Key>M: TSearch() \n\
124: Ctrl<Key>O: TSearch() \n\
125: Ctrl<Key>J: TSearch() \n\
126: Ctrl<Key>U: ClearSearchArea()";
127:
128: static XtActionsRec buttonActionsTable[] = {
129: {"ChangeHelp", (XtActionProc) ChangeHelp},
130: {"buttonPress", (XtActionProc) buttonPress},
131: };
132:
133: init_widgets ()
134: {
135: int count;
136: Arg args[10];
137:
138: count = 0;
139: outer = XtCreateManagedWidget("outer", formWidgetClass, toplevel,
140: args, count);
141:
142: dpy = XtDisplay(toplevel);
143: scr = DefaultScreen(dpy);
144: screen = XtScreen(toplevel);
145:
146: XtAddActions(buttonActionsTable, XtNumber(buttonActionsTable));
147:
148: curr_help[0] = '\0';
149: create_genform(outer);
150: create_dnwindow(outer);
151: create_text_display(outer);
152: create_history_popup(backseq, "");
153: create_help_popup();
154: create_mess_popup();
155: create_error_popup();
156: }
157:
158: Loop()
159: {
160: Widget PosWindow;
161:
162: XtRealizeWidget(toplevel);
163:
164: PosWindow = XtNameToWidget(outer,
165: "PosForm.PosScrolledWindow.PosWindow");
166: print_search_area(PosWindow);
167:
168: if (DefaultDepthOfScreen(screen) == 1) {
169: CreateBackgroundPixmap(XtNameToWidget(outer, "ButtonForm"),
170: gray_bits, gray_width, gray_height);
171: CreateBackgroundPixmap(outer, gray_bits, gray_width, gray_height);
172: }
173:
174: CreateBackgroundPixmap(XtNameToWidget(outer, "ButtonForm.searchButton"),
175: Search_bits, Search_width, Search_height);
176:
177: CreateBackgroundPixmap(XtNameToWidget(outer, "ButtonForm.listButton"),
178: List_bits, List_width, List_height);
179:
180: CreateBackgroundPixmap(XtNameToWidget(outer, "ButtonForm.historyButton"),
181: History_bits, History_width, History_height);
182:
183: CreateBackgroundPixmap(XtNameToWidget(outer, "ButtonForm.quitButton"),
184: Quit_bits, Quit_width, Quit_height);
185:
186: CreateBackgroundPixmap(XtNameToWidget(outer, "ButtonForm.helpButton"),
187: Help_bits, Help_width, Help_height);
188:
189: (void) rd_start();
190: goto_addr();
191: SetType((Widget) 0, (XtPointer) typeindx, (XtPointer) 0);
192: XtMainLoop();
193: }
194:
195: static void
196: create_text_display(parent)
197: Widget parent;
198: {
199: Widget TextForm, TextScrolledWindow;
200: Arg args[15];
201: int count = 0;
202:
203: count = 0;
204: TextScrolledWindow = XtCreateManagedWidget("TextScrolledWindow",
205: viewportWidgetClass,
206: parent, args, count);
207:
208: count = 0;
209: XtSetArg(args[count], XtNborderWidth, 0); count++;
210: TextForm = XtCreateManagedWidget("TextForm",
211: formWidgetClass,
212: TextScrolledWindow, args, count);
213:
214: count = 0;
215: XtSetArg(args[count], XtNresizable, TRUE); count++;
216: (void) XtCreateManagedWidget("TextWindow",
217: asciiTextWidgetClass,
218: TextForm, args, count);
219: }
220:
221: make_photo_widget()
222: {
223: int count;
224: Arg args[10];
225: Widget TextForm, TextWindow;
226:
227: TextForm = XtNameToWidget(outer,
228: "TextScrolledWindow.TextForm");
229: TextWindow = XtNameToWidget(outer,
230: "TextScrolledWindow.TextForm.TextWindow");
231:
232: count = 0;
233: XtSetArg(args[count], XtNresizable, TRUE); count++;
234: XtSetArg(args[count], XtNwidth, (Dimension) maxx); count++;
235: XtSetArg(args[count], XtNheight, (Dimension) py); count++;
236: XtSetArg(args[count], XtNlabel, ""); count++;
237: XtSetArg(args[count], XtNfromVert, TextWindow); count++;
238: PhotoWindow = XtCreateManagedWidget("PhotoWindow",
239: labelWidgetClass,
240: TextForm, args, count);
241: }
242:
243: kill_photo()
244: {
245: if (PhotoWindow) {
246: XtDestroyWidget(PhotoWindow);
247: PhotoWindow = 0;
248: }
249: }
250:
251: print_photo()
252: {
253: int count;
254: Arg args[10];
255:
256: count = 0;
257: if (photo_pixmap)
258: XtSetArg(args[count], XtNbackgroundPixmap, photo_pixmap); count++;
259:
260: XtSetArg(args[count], XtNresizable, FALSE); count++;
261: XtSetValues(PhotoWindow, args, count);
262: }
263:
264: static void
265: create_new_list(list_seq, top_mess, lower_mess)
266: D_seq list_seq;
267: char *top_mess, *lower_mess;
268: {
269: int count = 0;
270: char name[1024];
271: Widget shell, swindow, ListForm, ListWindow, list_element, closeButton;
272: Arg args[15];
273:
274: if (listmode == one)
275: if ((shell = XtNameToWidget(toplevel, "ListOutput")) != NULL) {
276: ListWindow = XtNameToWidget(shell,
277: "ListForm.ListScrolledWindow.ListWindow");
278:
279: (void) strcpy(name, "X");
280:
281: while ((list_element = XtNameToWidget(ListWindow, name)) != NULL) {
282: XtDestroyWidget(list_element);
283: (void) strcat(name, "X");
284: }
285:
286: XtRemoveCallback(ListWindow, XtNdestroyCallback,
287: ListDestroy, (XtPointer) showseq);
288: free_seq(showseq);
289: XtAddCallback(ListWindow, XtNdestroyCallback,
290: ListDestroy, (XtPointer) list_seq);
291:
292: AddNewList(XtNameToWidget(shell,
293: "ListForm.ListScrolledWindow.ListWindow"),
294: list_seq);
295:
296: count = 0;
297: XtSetArg(args[count], XtNlabel, top_mess); count++;
298: XtSetValues(XtNameToWidget(shell, "ListForm.ListTitle"),
299: args, count);
300:
301: count = 0;
302: XtSetArg(args[count], XtNlabel, lower_mess); count++;
303: XtSetValues(XtNameToWidget(shell, "ListForm.ListMessage"),
304: args, count);
305:
306: return;
307: }
308:
309: count = 0;
310: shell = XtCreatePopupShell("ListOutput", topLevelShellWidgetClass,
311: toplevel, args, 0);
312: count = 0;
313: ListForm = XtCreateManagedWidget("ListForm", formWidgetClass,
314: shell, args, count);
315:
316: count = 0;
317: XtSetArg(args[count], XtNheight, Close_height); count++;
318: XtSetArg(args[count], XtNwidth, Close_width); count++;
319: closeButton = XtCreateManagedWidget("closeButton",
320: commandWidgetClass,
321: ListForm, args, count);
322:
323: XtAddCallback(closeButton, XtNcallback,
324: (XtCallbackProc) Close, (XtPointer) shell);
325:
326: count = 0;
327: XtSetValues(closeButton, args, count);
328:
329: count = 0;
330: XtSetArg(args[count], XtNlabel, top_mess); count++;
331: (void) XtCreateManagedWidget("ListTitle", labelWidgetClass,
332: ListForm, args, count);
333:
334: count = 0;
335: swindow = XtCreateManagedWidget("ListScrolledWindow", viewportWidgetClass,
336: ListForm, args, count);
337:
338: count = 0;
339: ListWindow = XtCreateManagedWidget("ListWindow", formWidgetClass,
340: swindow, args, count);
341:
342: count = 0;
343: XtSetArg(args[count], XtNlabel, lower_mess); count++;
344: (void) XtCreateManagedWidget("ListMessage", labelWidgetClass,
345: ListForm, args, count);
346:
347: XtAddCallback(ListWindow, XtNdestroyCallback,
348: ListDestroy, (XtPointer) list_seq);
349:
350: AddNewList(ListWindow, list_seq);
351:
352: XtRealizeWidget(shell);
353: XtPopup(shell, XtGrabNone);
354:
355: CreateBackgroundPixmap(closeButton, Close_bits, Close_width, Close_height);
356: if (DefaultDepthOfScreen(screen) == 1)
357: CreateBackgroundPixmap(ListForm, gray_bits, gray_width, gray_height);
358: }
359:
360: create_dnwindow(parent)
361: Widget parent;
362: {
363: int count;
364: Widget PosForm, swindow;
365: Arg args[20];
366:
367: count = 0;
368: PosForm = XtCreateManagedWidget("PosForm", formWidgetClass,
369: parent, args, count);
370: count = 0;
371: (void) XtCreateManagedWidget("PosTitle", labelWidgetClass, PosForm,
372: args, count);
373:
374: count = 0;
375: swindow = XtCreateManagedWidget("PosScrolledWindow", viewportWidgetClass,
376: PosForm, args, count);
377:
378: count = 0;
379: (void) XtCreateManagedWidget("PosWindow", formWidgetClass,
380: swindow, args, count);
381: }
382:
383: add_to_history(rdn, seqnum)
384: String rdn;
385: int seqnum;
386: {
387: int count, n;
388: char name[1024];
389: char *prev;
390: Widget history_popup, history_display, rdn_window, scrolwin;
391: Dimension width, rwidth;
392: Arg args[20];
393:
394: history_popup = XtNameToWidget(toplevel, "Session History");
395:
396: history_display = XtNameToWidget(history_popup,
397: "HistoryForm.ListScrolledWindow.ListWindow");
398:
399: scrolwin = (Widget) XtParent(history_display);
400:
401: count = 0;
402: XtSetArg(args[count], XtNwidth, &width); count++;
403: XtGetValues(scrolwin, args, count);
404:
405: width -= 14;
406:
407: for (n = 0; n < seqnum; n++) {
408: (void) strcpy((name+n), "X");
409: }
410:
411: count = 0;
412: XtSetArg(args[count], XtNlabel, (*rdn? rdn: "The World")); count++;
413: XtSetArg(args[count], XtNresizable, TRUE); count++;
414: XtSetArg(args[count], XtNborderWidth, 0); count++;
415: XtSetArg(args[count], XtNborderColor, WhitePixelOfScreen(screen)); count++;
416: XtSetArg(args[count], XtNhighlightThickness, 1); count++;
417: XtSetArg(args[count], XtNjustify, XtJustifyLeft); count++;
418: if (strlen(name) > 1) {
419: prev = (char *) (name + 1);
420: XtSetArg(args[count], XtNfromVert, XtNameToWidget(history_display,
421: prev));
422: count++;
423: }
424: rdn_window = XtCreateManagedWidget((String) name, commandWidgetClass,
425: history_display, args, count);
426:
427: XtAddCallback(rdn_window, XtNcallback, ListSelect,
428: (XtPointer) get_from_seq(seqnum, backseq));
429:
430: count = 0;
431: XtSetArg(args[count], XtNwidth, &rwidth); count++;
432: XtGetValues(rdn_window, args, count); count++;
433:
434: count = 0;
435: XtSetArg(args[count], XtNright, XtChainRight); count++;
436: XtSetArg(args[count], XtNleft, XtChainLeft); count++;
437: if (rwidth < width)
438: XtSetArg(args[count], XtNwidth, width); count++;
439: XtSetValues(rdn_window, args, count);
440: }
441:
442: print_search_area(PosWindow)
443: Widget PosWindow;
444: {
445: char *str, *end;
446: char save;
447: int count;
448: char array[1024];
449: Dimension width;
450: Arg args[20];
451: Widget rdn_window, last_rdn = 0;
452:
453: count = 0;
454: XtSetArg(args[count], XtNwidth, &width); count++;
455: XtGetValues(PosWindow, args, count);
456:
457: width -= 24;
458:
459: count = 0;
460: XtSetArg(args[count], XtNlabel, ("The World")); count++;
461: XtSetArg(args[count], XtNborderWidth, 0); count++;
462: XtSetArg(args[count], XtNborderColor, WhitePixelOfScreen(screen)); count++;
463: XtSetArg(args[count], XtNhighlightThickness, 1); count++;
464: XtSetArg(args[count], XtNjustify, XtJustifyLeft); count++;
465: XtSetArg(args[count], XtNwidth, width); count++;
466: rdn_window = XtCreateManagedWidget("x", commandWidgetClass,
467: PosWindow, args, count);
468: XtAddCallback(rdn_window, XtNcallback, DMove, (XtPointer) 0);
469: last_rdn = rdn_window;
470:
471: rdn_number = 1;
472:
473: (void) strcpy (array, "xx");
474:
475: make_friendly(friendly_base_path, base_path);
476: end = friendly_base_path;
477: while (*end != 0) {
478: str = end;
479:
480: do {
481: end++;
482: } while (*end != ',' && *end != '\0');
483:
484: save = *end;
485: *end = '\0';
486: count = 0;
487: XtSetArg(args[count], XtNlabel, (*str? str: "ahem")); count++;
488: XtSetArg(args[count], XtNborderWidth, 0); count++;
489: XtSetArg(args[count], XtNborderColor, WhitePixelOfScreen(screen)); count++;
490: XtSetArg(args[count], XtNhighlightThickness, 1); count++;
491: XtSetArg(args[count], XtNjustify, XtJustifyLeft); count++;
492: XtSetArg(args[count], XtNwidth, width); count++;
493: XtSetArg(args[count], XtNfromVert, last_rdn); count++;
494: rdn_window = XtCreateManagedWidget((String) array, commandWidgetClass,
495: PosWindow, args, count);
496: last_rdn = rdn_window;
497: XtAddCallback(rdn_window, XtNcallback, DMove, (XtPointer) rdn_number);
498:
499: (void) strcat(array, "x");
500: rdn_number++;
501:
502: *end = save;
503: if (*end == ',') end++;
504: }
505: }
506:
507: static void
508: create_search_popup(parent)
509: Widget parent;
510: {
511: Dimension height;
512: Widget form, SearchValueForm, okButton,
513: SearchValueDialog, shell, cancelButton;
514: XtTranslations trans_table;
515: Arg args[20];
516: XFontStruct *font;
517: char string[1024];
518: int count = 0;
519:
520: count = 0;
521: shell = XtCreatePopupShell("Search", transientShellWidgetClass,
522: parent, args, 0);
523:
524: count = 0;
525: form = XtCreateManagedWidget("SearchForm", formWidgetClass,
526: shell, args, count);
527:
528: count = 0;
529: XtSetArg(args[count], XtNheight, Okay_height); count++;
530: XtSetArg(args[count], XtNwidth, Okay_width); count++;
531: okButton = XtCreateManagedWidget("okButton", commandWidgetClass,
532: form, args, count);
533:
534: count = 0;
535: XtSetValues(okButton, args, count);
536:
537: XtAddCallback(okButton, XtNcallback,
538: (XtCallbackProc) StartSearch, (XtPointer) 0);
539:
540: count = 0;
541: XtSetArg(args[count], XtNheight, Cancel_height); count++;
542: XtSetArg(args[count], XtNwidth, Cancel_width); count++;
543: cancelButton = XtCreateManagedWidget("cancelButton", commandWidgetClass,
544: form, args, count);
545:
546: XtAddCallback(cancelButton, XtNcallback,
547: (XtCallbackProc) killSearch, (XtPointer) 0);
548:
549: SearchValueForm = XtCreateManagedWidget("SearchValueForm", formWidgetClass,
550: form, args, count);
551:
552: count = 0;
553: XtSetArg(args[count], XtNlabel, "Searching For "); count++;
554: (void) XtCreateManagedWidget("SearchLabel", labelWidgetClass,
555: SearchValueForm, args, count);
556:
557: count = 0;
558: XtSetArg(args[count], XtNeditType, XawtextEdit); count++;
559: SearchValueDialog = XtCreateManagedWidget("SearchValueDialog",
560: asciiTextWidgetClass,
561: SearchValueForm, args, count);
562: count = 0;
563: XtSetArg(args[count], XtNfont, &font); count++;
564: XtGetValues(SearchValueDialog, args, count);
565:
566: height = FONTHEIGHT(font);
567: height += 8;
568:
569: count = 0;
570: XtSetArg(args[count], XtNheight, height); count++;
571: XtSetValues(SearchValueDialog, args, count);
572:
573: XtAddActions(actionsTable, XtNumber(actionsTable));
574: trans_table = XtParseTranslationTable(defaultTranslations);
575: XtOverrideTranslations(SearchValueDialog, trans_table);
576:
577: count = 0;
578: XtSetArg(args[count], XtNlabel, "Change Type"); count++;
579: (void) XtCreateManagedWidget("TypeMenuButton", menuButtonWidgetClass,
580: form, args, count);
581:
582: count = 0;
583: (void) strcpy(string, "Current Type - ");
584: (void) strcat(string, filttype[typeindx]);
585: XtSetArg(args[count], XtNlabel, (String) string); count++;
586: (void) XtCreateManagedWidget("SearchTypeLabel", labelWidgetClass,
587: form, args, count);
588:
589: XtRealizeWidget(shell);
590:
591: CreateBackgroundPixmap(okButton, Okay_bits, Okay_width, Okay_height);
592: CreateBackgroundPixmap(cancelButton, Cancel_bits,
593: Cancel_width, Cancel_height);
594: if (DefaultDepthOfScreen(screen) == 1) {
595: CreateBackgroundPixmap(SearchValueForm, gray_bits,
596: gray_width, gray_height);
597: CreateBackgroundPixmap(form, gray_bits,
598: gray_width, gray_height);
599: }
600: }
601:
602: /*ARGSUSED*/
603: static void
604: StartSearch(w, clientdata, calldata)
605: Widget w;
606: XtPointer clientdata, calldata;
607: {
608: Arg args[15];
609: int count, indx;
610: Widget text;
611: char entry[1024], string[1024], mess[1024];
612: char *value;
613: dsEnqError status;
614:
615: message("Please Stand By........");
616:
617: text = XtNameToWidget(XtNameToWidget(outer, "ButtonForm.searchButton"),
618: "Search.SearchForm.SearchValueForm.SearchValueDialog");
619:
620: count = 0;
621: XtSetArg(args[count], XtNstring, &value); count++;
622: XtGetValues(text, args, count);
623: (void) strcpy(mvalue, value);
624:
625: if (mvalue[0] == '\0') {
626: kill_message();
627: dir_error("You have not specified a search value!\nClick on this window to continue");
628: return;
629: }
630:
631: killSearch();
632: refresh();
633: status = srch_start();
634:
635: switch(status) {
636: case timelimit:
637: entry_number = 0;
638: dir_error("Time limit exceeded.\nClick on this window to continue");
639: break;
640: case nothingfound:
641: dnseq = 0;
642: entry_number = 0;
643: dir_error("Nothing found!\nClick on this window to continue");
644: break;
645: case localdsaerror:
646: dnseq = 0;
647: entry_number = 0;
648: dir_error("Problem with local directory server.\nClick on this window to continue");
649: break;
650: case remotedsaerror:
651: dnseq = 0;
652: entry_number = 0;
653: dir_error("Requested data unavailable at present.\n Click on this window to continue");
654: break;
655: case duaerror:
656: dnseq = 0;
657: entry_number = 0;
658: dir_error("Internal error. Sorry!\nClick on this window to continue");
659: break;
660: case security:
661: dnseq = 0;
662: entry_number = 0;
663: dir_error("You do not have the access privileges required\nto make this request!\nClick on this window to continue");
664: break;
665: case namerror:
666: dnseq = 0;
667: entry_number = 0;
668: dir_error("Invalid directory position!\nClick on this window to continue");
669: break;
670: case attributerror:
671: dnseq = 0;
672: entry_number = 0;
673: dir_error("Faulty data found in database!\nClick on this window to continue");
674: break;
675: case Okay:
676: if (entry_number == 1) {
677: (void) strcpy(entry, (get_from_seq(1, dnseq)));
678: if (!isleaf(entry)) {
679: (void) strcpy(base_path, entry);
680: make_friendly(friendly_base_path, base_path);
681: set_search_area(XtNameToWidget
682: (outer, "PosForm.PosScrolledWindow.PosWindow"));
683: goto_addr();
684: SetType((Widget) 0, (XtPointer) typeindx, (XtPointer) 0);
685: kill_photo();
686: refresh();
687: (void) rd_start();
688: } else {
689: (void) strcpy(string, base_path);
690: (void) strcpy(base_path, entry);
691: make_friendly(friendly_base_path, base_path);
692: kill_photo();
693: refresh();
694: (void) rd_start();
695: (void) strcpy(base_path, string);
696: make_friendly(friendly_base_path, base_path);
697: }
698: clear_dnseq();
699: entry_number = 0;
700: } else if (entry_number > 0) {
701: (void) strcpy(mess, "Results of search under ");
702:
703: if (strlen(base_path) > 3) {
704: indx = strlen(friendly_base_path);
705: while (friendly_base_path[indx] != ',' && indx != 0) indx--;
706: (void) strcat(mess, (char *) (friendly_base_path+indx));
707: } else {
708: (void) strcat(mess, "The World");
709: indx = 0;
710: }
711:
712: create_new_list(dnseq, mess, "");
713: if (listmode == one) showseq = dnseq;
714: dnseq = 0;
715: break;
716: case listsizelimit:
717: (void) strcpy(mess, "Results of search under ");
718:
719: if (strlen(base_path) > 3) {
720: indx = strlen(friendly_base_path);
721: while (friendly_base_path[indx] != ',' && indx != 0) indx--;
722: (void) strcat(mess, (char *) (friendly_base_path+indx));
723: } else {
724: (void) strcat(mess, "The World");
725: indx = 0;
726: }
727:
728: (void) sprintf(string,
729: "List size limit exceeded. Only %d items displayed.",
730: sizelimit);
731:
732: create_new_list(dnseq,
733: mess,
734: string);
735: if (listmode == one) showseq = dnseq;
736: dnseq = 0;
737: }
738: }
739: kill_message();
740: }
741:
742: static Widget
743: create_type_menu(parent)
744: Widget parent;
745: {
746: Widget menu_mgr, button;
747: Arg args[15];
748: int count = 0, n;
749:
750: menu_mgr = XtCreatePopupShell("menu", simpleMenuWidgetClass,
751: parent, args, 0 );
752:
753: n = 0;
754: while (av_typeindx[n] != -1) {
755: count = 0;
756: XtSetArg(args[count], XtNlabel, (String) filttype[av_typeindx[n]]);count++;
757: button = XtCreateManagedWidget((String) filttype[av_typeindx[n]],
758: smeBSBObjectClass,
759: menu_mgr, args, count);
760: XtAddCallback(button, XtNcallback, SetType, (XtPointer) av_typeindx[n]);
761: n++;
762: }
763: return menu_mgr;
764: }
765:
766: /*ARGSUSED*/
767: static void
768: SetType(w, indx, calldata)
769: Widget w;
770: XtPointer indx, calldata;
771: {
772: Widget type_label, menu, searchButton, menuButton;
773: int count = 0;
774: Arg args[10];
775: char label[1024];
776:
777: searchButton = XtNameToWidget(outer,"ButtonForm.searchButton");
778: menuButton = XtNameToWidget(searchButton,
779: "Search.SearchForm.TypeMenuButton");
780:
781: if ((int) indx < 0 || (int) indx >= (int) filt_num) return;
782:
783: if ((menu = XtNameToWidget(searchButton,
784: "Search.SearchForm.TypeMenuButton.menu")))
785: XtDestroyWidget(menu);
786:
787: (void) create_type_menu(menuButton);
788:
789: type_label = XtNameToWidget(searchButton,
790: "Search.SearchForm.SearchTypeLabel");
791:
792: (void) strcpy(label, "Current Type - ");
793: (void) strcat(label, filttype[(int) indx]);
794:
795: count = 0;
796: XtSetArg(args[count], XtNlabel, label); count++;
797: XtSetValues(type_label, args, count);
798:
799: typeindx = (int) indx;
800: }
801:
802: static void
803: create_genform(parent)
804: Widget parent;
805: {
806: Widget form, quitButton, helpButton, searchButton, listButton, historyButton;
807: Arg args[10];
808: int count;
809:
810: count = 0;
811: form = XtCreateManagedWidget("ButtonForm", formWidgetClass, parent,
812: args, count);
813:
814: count = 0;
815: XtSetArg(args[count], XtNheight, Quit_height); count++;
816: XtSetArg(args[count], XtNwidth, Quit_width); count++;
817: quitButton = XtCreateManagedWidget("quitButton",
818: commandWidgetClass,
819: form, args, count);
820:
821: XtAddCallback(quitButton, XtNcallback,
822: (XtCallbackProc) Quit, (XtPointer) 0);
823:
824: count = 0;
825: XtSetArg(args[count], XtNheight, Help_height); count++;
826: XtSetArg(args[count], XtNwidth, Help_width); count++;
827: helpButton = XtCreateManagedWidget("helpButton",
828: commandWidgetClass,
829: form, args, count);
830:
831: XtAddCallback(helpButton, XtNcallback,
832: (XtCallbackProc) Help, (XtPointer) 0);
833:
834: count = 0;
835: XtSetArg(args[count], XtNheight, Search_height); count++;
836: XtSetArg(args[count], XtNwidth, Search_width); count++;
837: searchButton = XtCreateManagedWidget("searchButton",
838: commandWidgetClass,
839: form, args, count);
840:
841: XtAddCallback(searchButton, XtNcallback,
842: (XtCallbackProc) Search, (XtPointer) 0);
843:
844: create_search_popup(searchButton);
845:
846: count = 0;
847: XtSetArg(args[count], XtNheight, List_height); count++;
848: XtSetArg(args[count], XtNwidth, List_width); count++;
849: listButton = XtCreateManagedWidget("listButton",
850: commandWidgetClass,
851: form, args, count);
852:
853: XtAddCallback(listButton, XtNcallback,
854: (XtCallbackProc) List, (XtPointer) 0);
855:
856: count = 0;
857: XtSetArg(args[count], XtNheight, History_height); count++;
858: XtSetArg(args[count], XtNwidth, History_width); count++;
859: historyButton = XtCreateManagedWidget("historyButton",
860: commandWidgetClass,
861: form, args, count);
862:
863: XtAddCallback(historyButton, XtNcallback,
864: (XtCallbackProc) popupHistory, (XtPointer) 0);
865: }
866:
867: cleartext()
868: {
869: Arg args[15];
870: Widget text;
871: int count = 0;
872:
873: text = XtNameToWidget(outer,
874: "TextScrolledWindow.TextForm.TextWindow");
875: count = 0;
876: XtSetArg(args[count], XtNstring, "\0"); count++;
877: XtSetArg(args[count], XtNwidth, (Dimension) 5); count++;
878: XtSetArg(args[count], XtNheight, (Dimension) 5); count++;
879: XtSetValues(text, args, count);
880: }
881:
882: static void
883: AddNewList(list_widget, list_seq)
884: Widget list_widget;
885: D_seq list_seq;
886: {
887: Arg args[15];
888: Widget element, scrolwin;
889: int count = 0, n;
890: char name[1024], friendly_rdn[1024];
891: char *prev, *string;
892: Dimension width, rwidth;
893:
894: scrolwin = (Widget) XtParent(list_widget);
895:
896: count = 0;
897: XtSetArg(args[count], XtNwidth, &width); count++;
898: XtGetValues(scrolwin, args, count);
899:
900: width -= 15;
901:
902: element_number = entry_number;
903:
904: for (n = 0; n < element_number; n++) {
905: (void) strcpy((name+n), "X");
906:
907: string = get_from_seq(n+1, list_seq);
908: make_friendly_rdn(friendly_rdn, string, base_path);
909: count = 0;
910: XtSetArg(args[count], XtNlabel, (*friendly_rdn?
911: friendly_rdn: "The World"));count++;
912: XtSetArg(args[count], XtNborderWidth, 0);count++;
913: XtSetArg(args[count], XtNborderColor, WhitePixelOfScreen(screen)); count++;
914: XtSetArg(args[count], XtNhighlightThickness, 1); count++;
915: XtSetArg(args[count], XtNjustify, XtJustifyLeft); count++;
916: if (strlen(name) > 1) {
917: prev = (char *) name + 1;
918: XtSetArg(args[count], XtNfromVert, XtNameToWidget(list_widget,
919: prev));
920: count++;
921: }
922: element = XtCreateManagedWidget((String) name,
923: commandWidgetClass,
924: list_widget, args, count);
925:
926: XtAddCallback(element, XtNcallback, ListSelect, (XtPointer) string);
927:
928: count = 0;
929: XtSetArg(args[count], XtNwidth, &rwidth); count++;
930: XtGetValues(element, args, count);
931:
932: if (rwidth < width) {
933: count = 0;
934: XtSetArg(args[count], XtNwidth, width); count++;
935: XtSetValues(element, args, count);
936: }
937: }
938: }
939:
940: void
941: xprint(str)
942: String str;
943: {
944: Arg args[15];
945: Widget text;
946: char *string, *sptr;
947: char buffer[4024];
948: int count;
949: Dimension height, addheight, width, addwidth;
950: int lines, maxchars, chars, char_width;
951: XFontStruct *font;
952:
953: text = XtNameToWidget(outer,
954: "TextScrolledWindow.TextForm.TextWindow");
955:
956: lines = maxchars = chars = 0;
957: count = 0;
958: XtSetArg(args[count], XtNheight, &height); count++;
959: XtSetArg(args[count], XtNwidth, &width); count++;
960: XtSetArg(args[count], XtNfont, &font); count++;
961: XtSetArg(args[count], XtNstring, &string); count++;
962: XtGetValues(text, args, count);
963:
964: /* (void) strcpy(buffer, str);*/
965:
966: sptr = str;
967: while (*sptr != '\0') {
968: switch (*sptr) {
969: case '\n':
970: lines++;
971: if (chars > maxchars) maxchars = chars;
972: chars = 0;
973: break;
974: default:
975: chars++;
976: break;
977: }
978: sptr++;
979: }
980: char_width = FONTWIDTH(font);
981: addwidth = char_width * maxchars;
982: width = addwidth > width? addwidth: width;
983:
984: addheight = FONTHEIGHT(font);
985: addheight *= lines;
986: height += addheight;
987:
988: if (*string == '\0')
989: (void) strcpy(buffer, str);
990: else
991: (void) sprintf(buffer, "%s%s", string, str);
992:
993: count = 0;
994: XtSetArg(args[count], XtNwidth, width); count++;
995: XtSetArg(args[count], XtNheight, height); count++;
996: XtSetArg(args[count], XtNstring, buffer); count++;
997: XtSetValues(text, args, count);
998: }
999:
1000:
1001:
1002: hold_text()
1003: {
1004: Widget text, form;
1005:
1006: text = XtNameToWidget(outer,
1007: "TextScrolledWindow.TextForm.TextWindow");
1008: form = XtNameToWidget(outer,
1009: "TextScrolledWindow.TextForm");
1010:
1011: XawFormDoLayout(form, FALSE);
1012: XawTextDisableRedisplay(text);
1013: refresh();
1014: }
1015:
1016: restart_text()
1017: {
1018: Widget text, form;
1019:
1020: text = XtNameToWidget(outer,
1021: "TextScrolledWindow.TextForm.TextWindow");
1022: form = XtNameToWidget(outer,
1023: "TextScrolledWindow.TextForm");
1024:
1025: XawTextEnableRedisplay(text);
1026: if (PhotoWindow) {
1027: XtRealizeWidget(PhotoWindow);
1028: print_photo();
1029: }
1030: XawFormDoLayout(form, TRUE);
1031: refresh();
1032: }
1033:
1034: refresh()
1035: {
1036: XFlush(dpy);
1037: }
1038:
1039: /*ARGSUSED*/
1040: static void
1041: Quit(widget, closure, callData)
1042: Widget widget;
1043: XtPointer closure, callData;
1044: {
1045: XtDestroyWidget(toplevel);
1046: quit(0);
1047: }
1048:
1049: /*ARGSUSED*/
1050: static void
1051: Search(w, data, calldata)
1052: Widget w;
1053: XtPointer data, calldata;
1054: {
1055: Widget search_popup;
1056: int win_x, win_y, root_x, root_y;
1057: Window a, b;
1058: Cardinal buttons;
1059:
1060: search_popup = XtNameToWidget(XtNameToWidget(outer,
1061: "ButtonForm.searchButton"),
1062: "Search");
1063:
1064: XQueryPointer(dpy, XtWindow(outer), &a, &b,
1065: &root_x, &root_y, &win_x, &win_y, &buttons);
1066:
1067: XtMoveWidget(search_popup, root_x, root_y);
1068:
1069: XtPopup(search_popup, XtGrabNone);
1070: XFlush(dpy);
1071: }
1072:
1073: static void
1074: killSearch()
1075: {
1076: Widget search_popup;
1077:
1078: search_popup = XtNameToWidget(XtNameToWidget(outer,
1079: "ButtonForm.searchButton"),
1080: "Search");
1081:
1082: XtPopdown(search_popup);
1083: }
1084:
1085: /*ARGSUSED*/
1086: static void
1087: TSearch(w, event, params, num_params)
1088: Widget w;
1089: XEvent *event;
1090: String *params;
1091: Cardinal *num_params;
1092: {
1093: StartSearch((Widget) 0, (XtPointer) 0, (XtPointer) 0);
1094: }
1095:
1096: /*ARGSUSED*/
1097: static void
1098: ClearSearchArea(w, event, params, num_params)
1099: Widget w;
1100: XEvent *event;
1101: String *params;
1102: Cardinal *num_params;
1103: {
1104: Arg args[2];
1105: int count= 0;
1106: XtSetArg(args[count], XtNstring, "\0"); count++;
1107: XtSetValues(w, args, count);
1108: }
1109:
1110: /*ARGSUSED*/
1111: static void
1112: Read(w, data, calldata)
1113: Widget w;
1114: XtPointer data, calldata;
1115: {
1116: cleartext();
1117: kill_photo();
1118: refresh();
1119: (void) rd_start();
1120: }
1121:
1122: set_search_area(search_area)
1123: Widget search_area;
1124: {
1125: WidgetList wlist;
1126: char name[1024];
1127: int count = 0, n;
1128:
1129: wlist = (WidgetList) XtMalloc((rdn_number + 1) * sizeof(Widget));
1130:
1131: for (n = 0; n < rdn_number; n++) {
1132: (void) strcpy((name+n), "x");
1133: wlist[count] = XtNameToWidget(search_area, name);
1134: if (wlist[count]) count++;
1135: }
1136: XtUnmanageChildren(wlist, count);
1137:
1138: for (n = 0; n < count; n++)
1139: XtDestroyWidget(wlist[n]);
1140:
1141: XtFree(wlist);
1142: print_search_area(search_area);
1143: }
1144:
1145: /*ARGSUSED*/
1146: static void
1147: List(w, clientdata, calldata)
1148: Widget w;
1149: XtPointer clientdata, calldata;
1150: {
1151: int indx;
1152: char string[1024], mess[1024];
1153: dsEnqError status;
1154:
1155: message("Please Stand By......");
1156: refresh();
1157: status = list_start();
1158: kill_message();
1159:
1160: switch(status) {
1161: case timelimit:
1162: entry_number = 0;
1163: dir_error("Time limit exceeded.\nClick on this window to continue");
1164: break;
1165: case listsizelimit:
1166: (void) strcpy(mess, "Results of list under ");
1167:
1168: if (strlen(base_path) > 3) {
1169: indx = strlen(friendly_base_path);
1170: while (friendly_base_path[indx] != ',' && indx != 0) indx--;
1171: } else {
1172: (void) strcat(mess, "The World");
1173: indx = strlen(friendly_base_path) - 1;
1174: }
1175:
1176: (void) strcat(mess, (char *) (friendly_base_path+indx));
1177: (void) sprintf (string,
1178: "List size limit exceeded. Only %d items displayed.",
1179: sizelimit);
1180:
1181: create_new_list(dnseq,
1182: mess,
1183: string);
1184:
1185: if (listmode == one) showseq = dnseq;
1186: dnseq = 0;
1187: break;
1188: case nothingfound:
1189: dnseq = 0;
1190: entry_number = 0;
1191: dir_error("Nothing found!\nClick on this window to continue");
1192: break;
1193: case localdsaerror:
1194: dnseq = 0;
1195: entry_number = 0;
1196: dir_error("Problem with local directory server.\nClick on this window to continue");
1197: break;
1198: case remotedsaerror:
1199: dnseq = 0;
1200: entry_number = 0;
1201: dir_error("Requested data unavailable at present.\n Click on this window to continue");
1202: break;
1203: case duaerror:
1204: dnseq = 0;
1205: entry_number = 0;
1206: dir_error("Internal error. Sorry!\nClick on this window to continue");
1207: break;
1208: case security:
1209: dnseq = 0;
1210: entry_number = 0;
1211: dir_error("You do not have the access privileges required\nto make this request!\nClick on this window to continue");
1212: break;
1213: case namerror:
1214: dnseq = 0;
1215: entry_number = 0;
1216: dir_error("Invalid directory position!\nClick on this window to continue");
1217: break;
1218: case attributerror:
1219: dnseq = 0;
1220: entry_number = 0;
1221: dir_error("Faulty data found in database!\nClick on this window to continue");
1222: break;
1223: case Okay:
1224: (void) strcpy(mess, "Results of list under ");
1225:
1226: if (strlen(base_path) > 3) {
1227: indx = strlen(friendly_base_path);
1228: while (friendly_base_path[indx] != ',' && indx != 0) indx--;
1229: (void) strcat(mess, (char *) (friendly_base_path+indx));
1230: } else {
1231: (void) strcat(mess, "The World");
1232: indx = 0;
1233: }
1234:
1235: create_new_list(dnseq, mess, "");
1236: if (listmode == one) showseq = dnseq;
1237: dnseq = 0;
1238: break;
1239: }
1240: }
1241:
1242: /*ARGSUSED*/
1243: static void
1244: ListSelect(w, object, calldata)
1245: Widget w;
1246: XtPointer object, calldata;
1247: {
1248: char *string, parent[1024];
1249:
1250: string = (char *) object;
1251:
1252: (void) strcpy(parent, base_path);
1253: (void) strcpy(base_path, string);
1254: make_friendly(friendly_base_path, base_path);
1255: Read((Widget) 0, (XtPointer) 0, (XtPointer) 0);
1256: (void) strcpy(base_path, parent);
1257: make_friendly(friendly_base_path, base_path);
1258:
1259: if (!isleaf(string)) {
1260: (void) strcpy(selection, string);
1261:
1262: sel_widget = w;
1263:
1264: Move((Widget) 0, (XtPointer) string, (XtPointer) 0);
1265: }
1266: }
1267:
1268: /*ARGSUSED*/
1269: static void
1270: DMove(w, rdnlevel, calldata)
1271: Widget w;
1272: XtPointer rdnlevel, calldata;
1273: {
1274: Widget search_area;
1275: char *end;
1276:
1277: search_area = XtNameToWidget(outer,
1278: "PosForm.PosScrolledWindow.PosWindow");
1279:
1280: end = base_path;
1281: if (rdnlevel == 0) *base_path = '\0';
1282: else if (rdn_number > (int) (rdnlevel+1)) {
1283: while (rdnlevel) {
1284: while (*end != '@') end++;
1285: if (*end == '@') end++;
1286: rdnlevel--;
1287: }
1288: *--end = '\0';
1289: }
1290: goto_addr();
1291: set_search_area(search_area);
1292: SetType((Widget) 0, (XtPointer) typeindx, (XtPointer) 0);
1293: kill_photo();
1294: refresh();
1295: (void) rd_start();
1296: }
1297:
1298: /*ARGSUSED*/
1299: static void
1300: Move(w, clientdata, calldata)
1301: Widget w;
1302: XtPointer clientdata, calldata;
1303: {
1304: Widget search_area;
1305: char *string;
1306:
1307: if (!sel_widget) return;
1308:
1309: search_area = XtNameToWidget(outer,
1310: "PosForm.PosScrolledWindow.PosWindow");
1311:
1312: string = (char *) clientdata;
1313:
1314: (void) strcpy(base_path, string);
1315:
1316: make_friendly(friendly_base_path, base_path);
1317: set_search_area(search_area);
1318: goto_addr();
1319: SetType((Widget) 0, (XtPointer) typeindx, (XtPointer) 0);
1320: }
1321:
1322: create_mess_popup()
1323: {
1324: /* To please lint*/
1325: Arg args[1];
1326:
1327: popup = XtCreatePopupShell("OK. Chugging along.",
1328: transientShellWidgetClass,
1329: toplevel, args, 0);
1330:
1331: (void) XtCreateManagedWidget("standby", labelWidgetClass,
1332: popup, args, 0);
1333: }
1334:
1335: create_error_popup()
1336: {
1337: Widget text;
1338: /* To please lint*/
1339: Arg args[1];
1340:
1341: error_popup = XtCreatePopupShell("<Directory Error>",
1342: transientShellWidgetClass,
1343: toplevel, args, 0);
1344:
1345: text = XtCreateManagedWidget("text", commandWidgetClass,
1346: error_popup, args, 0);
1347: XtAddCallback(text, XtNcallback, killError, (XtPointer) 0);
1348: }
1349:
1350: dir_error(mess)
1351: String mess;
1352: {
1353: Arg args[10];
1354: int count;
1355: Widget text;
1356: int win_x, win_y, root_x, root_y;
1357: Window a, b;
1358: Cardinal buttons;
1359:
1360: XQueryPointer(dpy, XtWindow(outer), &a, &b,
1361: &root_x, &root_y, &win_x, &win_y, &buttons);
1362:
1363: text = XtNameToWidget(error_popup, "text");
1364: XtMoveWidget(error_popup, root_x, root_y);
1365:
1366: count = 0;
1367: XtSetArg(args[count], XtNborderWidth, 1); count++;
1368: XtSetArg(args[count], XtNlabel, mess); count++;
1369: XtSetValues(text, args, count);
1370:
1371: XtPopup(error_popup, XtGrabNone);
1372: }
1373:
1374: /*ARGSUSED*/
1375: static void
1376: killError(w, calldata, clientdata)
1377: Widget w;
1378: XtPointer calldata, clientdata;
1379: {
1380: kill_error();
1381: }
1382:
1383: kill_error()
1384: {
1385: XtPopdown(error_popup);
1386: }
1387:
1388: message(mess)
1389: String mess;
1390: {
1391: Arg args[10];
1392: int count;
1393: Widget text;
1394: int win_x, win_y, root_x, root_y;
1395: Window a, b;
1396: Cardinal buttons;
1397: XEvent event;
1398:
1399: XQueryPointer(dpy, XtWindow(outer), &a, &b,
1400: &root_x, &root_y, &win_x, &win_y, &buttons);
1401:
1402: text = XtNameToWidget(popup, "standby");
1403: XtMoveWidget(popup, root_x, root_y);
1404:
1405: count = 0;
1406: XtSetArg(args[count], XtNborderWidth, 1); count++;
1407: XtSetArg(args[count], XtNlabel, mess); count++;
1408: XtSetValues(text, args, count);
1409:
1410: XtPopup(popup, XtGrabExclusive);
1411: while (!XCheckTypedWindowEvent(dpy,
1412: XtWindow(text),
1413: Expose, &event));
1414: XtDispatchEvent(&event);
1415: XFlush(dpy);
1416: }
1417:
1418: kill_message()
1419: {
1420: XtPopdown(popup);
1421: }
1422:
1423: create_help_popup()
1424: {
1425: Widget popup_help, popup_help_button, popup_quit_button,
1426: popup_help_form, popup_help_scrolwin;
1427:
1428: Arg args[15];
1429: int count;
1430:
1431: count = 0;
1432: popup_help = XtCreatePopupShell("Pod Help Screen", topLevelShellWidgetClass,
1433: toplevel, args, count);
1434:
1435: count = 0;
1436: popup_help_form = XtCreateManagedWidget("popup_help_form", formWidgetClass,
1437: popup_help, args, count);
1438:
1439: count = 0;
1440: XtSetArg(args[count], XtNheight, Close_height); count++;
1441: XtSetArg(args[count], XtNwidth, Close_width); count++;
1442: popup_quit_button = XtCreateManagedWidget("popup_help_quit",
1443: commandWidgetClass,
1444: popup_help_form, args, count);
1445:
1446: XtAddCallback(popup_quit_button, XtNcallback, QuitFromHelp, (XtPointer) 0);
1447:
1448: count = 0;
1449: XtSetArg(args[count], XtNheight, About_height); count++;
1450: XtSetArg(args[count], XtNwidth, About_width); count++;
1451: popup_help_button = XtCreateManagedWidget("popup_help_general",
1452: commandWidgetClass,
1453: popup_help_form, args, count);
1454:
1455: XtAddCallback(popup_help_button, XtNcallback, InsertHelp,
1456: (XtPointer) "general");
1457:
1458: count = 0;
1459: popup_help_scrolwin = XtCreateManagedWidget("popup_help_scrolwin",
1460: viewportWidgetClass,
1461: popup_help_form, args, count);
1462:
1463: count = 0;
1464: XtSetArg(args[count], XtNsensitive, FALSE); count++;
1465: (void) XtCreateManagedWidget("popup_help_text",
1466: asciiTextWidgetClass,
1467: popup_help_scrolwin, args, count);
1468: XtRealizeWidget(popup_help);
1469:
1470: CreateBackgroundPixmap(popup_help_button, About_bits,
1471: About_width, About_height);
1472:
1473: CreateBackgroundPixmap(popup_quit_button, Close_bits,
1474: Close_width, Close_height);
1475:
1476: if (DefaultDepthOfScreen(screen) == 1) {
1477: CreateBackgroundPixmap(popup_help_form, gray_bits,
1478: gray_width, gray_height);
1479: }
1480: }
1481:
1482: /*ARGSUSED*/
1483: static void
1484: Help(w, calldata, clientdata)
1485: Widget w;
1486: XtPointer calldata, clientdata;
1487: {
1488: Widget help_popup;
1489:
1490: help_popup = XtNameToWidget(toplevel, "Pod Help Screen");
1491:
1492: XtPopup(help_popup, XtGrabNone);
1493: InsertHelp((Widget) 0, (XtPointer) "help", (XtPointer) 0);
1494: XFlush(dpy);
1495: help_up = TRUE;
1496: }
1497:
1498: /*ARGSUSED*/
1499: static void
1500: QuitFromHelp(w, calldata, clientdata)
1501: Widget w;
1502: XtPointer calldata, clientdata;
1503: {
1504: Widget help_popup;
1505:
1506: help_up = FALSE;
1507: help_popup = XtNameToWidget(toplevel, "Pod Help Screen");
1508: XtPopdown(help_popup);
1509: }
1510:
1511: /*ARGSUSED*/
1512: static void
1513: InsertHelp(w, calldata, clientdata)
1514: Widget w;
1515: XtPointer calldata, clientdata;
1516: {
1517: Widget text, scrolwin;
1518: FILE *file;
1519: char filename[1024];
1520: char help_buf[4024];
1521: int count;
1522: Arg args[10];
1523: Dimension width, height;
1524: XFontStruct *font;
1525:
1526: scrolwin = XtNameToWidget(toplevel,
1527: "Pod Help Screen.popup_help_form.popup_help_scrolwin");
1528:
1529: text = XtNameToWidget(scrolwin, "popup_help_text");
1530:
1531: count = 0;
1532: XtSetArg(args[count], XtNwidth, &width); count++;
1533: XtGetValues(scrolwin, args, count);
1534:
1535: (void) strcpy(filename, dua_help_dir);
1536: (void) strcat(filename, (String) calldata);
1537:
1538: count = 0;
1539: XtSetArg(args[count], XtNfont, &font); count++;
1540: XtGetValues(text, args, count);
1541:
1542: height = FONTHEIGHT(font);
1543: count = 0;
1544: XtSetArg(args[count], XtNheight, height); count++;
1545: XtSetValues(text, args, count);
1546:
1547: height = 0;
1548: if (!(file = fopen(filename, "r"))) {
1549: (void) strcpy(filename, "./Xd/podHelpdir/");
1550: (void) strcat(filename, (String) calldata);
1551: if (!(file = fopen(filename, "r"))) (void) printf("Helpfile not found");
1552: }
1553:
1554: if (file) {
1555: (void) strcpy(help_buf, "\0");
1556: while (fgets(help_string, 1000, file)) {
1557: height += (FONTHEIGHT(font));
1558: (void) strcat(help_buf, help_string);
1559: }
1560:
1561: (void) fclose(file);
1562: count = 0;
1563: XtSetArg(args[count], XtNstring, ""); count++;
1564: XtSetValues(text, args, count);
1565:
1566: count = 0;
1567: XtSetArg(args[count], XtNwidth, width - 18); count++;
1568: XtSetArg(args[count], XtNheight, height); count++;
1569: XtSetArg(args[count], XtNstring, help_buf); count++;
1570: XtSetValues(text, args, count);
1571: }
1572: }
1573:
1574:
1575: void CreateBackgroundPixmap(widget, bits,
1576: width, height)
1577: Widget widget;
1578: char bits[];
1579: Cardinal width, height;
1580: {
1581: Arg args[15];
1582: int count;
1583: Pixmap bitmap;
1584:
1585: bitmap = XCreatePixmapFromBitmapData(dpy,
1586: XtWindow(widget), bits,
1587: width, height,
1588: BlackPixelOfScreen(screen),
1589: WhitePixelOfScreen(screen),
1590: DefaultDepthOfScreen(screen));
1591:
1592: count = 0;
1593: XtSetArg(args[count], XtNbackgroundPixmap, bitmap); count++;
1594: XtSetArg(args[count], XtNresizable, FALSE); count++;
1595: XtSetValues(widget, args, count);
1596: }
1597:
1598: /*ARGSUSED*/
1599: static void
1600: ListDestroy(w, list_seq, calldata)
1601: Widget w;
1602: XtPointer calldata, list_seq;
1603: {
1604: free_seq((D_seq) list_seq);
1605: XtDestroyWidget(w);
1606: }
1607:
1608: /*ARGSUSED*/
1609: static void
1610: Close(w, shellwidget, calldata)
1611: Widget w;
1612: XtPointer calldata, shellwidget;
1613: {
1614: XtDestroyWidget((Widget) shellwidget);
1615: }
1616:
1617: static void
1618: create_history_popup(list_seq, mess)
1619: D_seq list_seq;
1620: char *mess;
1621: {
1622: int count = 0;
1623: Widget shell, swindow, HistoryForm, ListWindow, closeButton;
1624: Arg args[15];
1625:
1626: count = 0;
1627: shell = XtCreatePopupShell("Session History", topLevelShellWidgetClass,
1628: toplevel, args, 0);
1629: count = 0;
1630: HistoryForm = XtCreateManagedWidget("HistoryForm", formWidgetClass,
1631: shell, args, count);
1632:
1633: count = 0;
1634: XtSetArg(args[count], XtNheight, Close_height); count++;
1635: XtSetArg(args[count], XtNwidth, Close_width); count++;
1636: closeButton = XtCreateManagedWidget("closeButton",
1637: commandWidgetClass,
1638: HistoryForm, args, count);
1639:
1640: XtAddCallback(closeButton, XtNcallback,
1641: (XtCallbackProc) popdownHistory, (XtPointer) shell);
1642:
1643: count = 0;
1644: XtSetValues(closeButton, args, count);
1645:
1646: count = 0;
1647: XtSetArg(args[count], XtNlabel, "History Window"); count++;
1648: (void) XtCreateManagedWidget("ListTitle", labelWidgetClass,
1649: HistoryForm, args, count);
1650:
1651: count = 0;
1652: swindow = XtCreateManagedWidget("ListScrolledWindow", viewportWidgetClass,
1653: HistoryForm, args, count);
1654:
1655: count = 0;
1656: ListWindow = XtCreateManagedWidget("ListWindow", formWidgetClass,
1657: swindow, args, count);
1658:
1659: count = 0;
1660: XtSetArg(args[count], XtNlabel, mess); count++;
1661: (void) XtCreateManagedWidget("ListMessage", labelWidgetClass,
1662: HistoryForm, args, count);
1663:
1664: XtAddCallback(ListWindow, XtNdestroyCallback,
1665: ListDestroy, (XtPointer) list_seq);
1666:
1667: AddNewList(ListWindow, list_seq);
1668: XtRealizeWidget(shell);
1669:
1670: CreateBackgroundPixmap(closeButton, Close_bits, Close_width, Close_height);
1671: if (DefaultDepthOfScreen(screen) == 1)
1672: CreateBackgroundPixmap(HistoryForm, gray_bits, gray_width, gray_height);
1673: }
1674:
1675: /*ARGSUSED*/
1676: static void
1677: popupHistory(w, clientdata, calldata)
1678: Widget w;
1679: XtPointer clientdata, calldata;
1680: {
1681: Widget history_popup;
1682:
1683: history_popup = XtNameToWidget(toplevel, "Session History");
1684: XtPopup(history_popup, XtGrabNone);
1685: }
1686:
1687: /*ARGSUSED*/
1688: static void
1689: popdownHistory(w, clientdata, calldata)
1690: Widget w;
1691: XtPointer clientdata, calldata;
1692: {
1693: Widget history_popup;
1694:
1695: history_popup = XtNameToWidget(toplevel, "Session History");
1696: XtPopdown(history_popup);
1697: }
1698:
1699:
1700: /*ARGSUSED*/
1701: static void
1702: ChangeHelp(w, event, params, num_params)
1703: Widget w;
1704: XEvent *event;
1705: String *params;
1706: int num_params;
1707: {
1708: if ((help_up) && strcmp(params[0], curr_help)) {
1709: InsertHelp((Widget) 0, (XtPointer) params[0], (XtPointer) 0);
1710: (void) strcpy(curr_help, params[0]);
1711: }
1712: }
1713:
1714:
1715: /*ARGSUSED*/
1716: static void
1717: buttonPress(w, event, params, num_params)
1718: Widget w;
1719: XEvent *event;
1720: String *params;
1721: int num_params;
1722: {
1723: if (!strcmp(params[0], "search"))
1724: CreateBackgroundPixmap(w, SearchPress_bits,
1725: SearchPress_width, SearchPress_height);
1726: else if (!strcmp(params[0], "help"))
1727: CreateBackgroundPixmap(w, HelpPress_bits,
1728: HelpPress_width, HelpPress_height);
1729: else if (!strcmp(params[0], "quit"))
1730: CreateBackgroundPixmap(w, QuitPress_bits,
1731: QuitPress_width, QuitPress_height);
1732: else if (!strcmp(params[0], "list"))
1733: CreateBackgroundPixmap(w, ListPress_bits,
1734: ListPress_width, ListPress_height);
1735: else if (!strcmp(params[0], "history"))
1736: CreateBackgroundPixmap(w, HistoryPress_bits,
1737: HistoryPress_width, HistoryPress_height);
1738: else if (!strcmp(params[0], "close"))
1739: CreateBackgroundPixmap(w, ClosePress_bits,
1740: ClosePress_width, ClosePress_height);
1741: else if (!strcmp(params[0], "about"))
1742: CreateBackgroundPixmap(w, AboutPress_bits,
1743: AboutPress_width, AboutPress_height);
1744: else if (!strcmp(params[0], "okay"))
1745: CreateBackgroundPixmap(w, OkayPress_bits,
1746: OkayPress_width, OkayPress_height);
1747:
1748:
1749: XFlush(dpy);
1750: XtCallCallbacks(w, XtNcallback, NULL);
1751:
1752: if (!strcmp(params[0], "search"))
1753: CreateBackgroundPixmap(w, Search_bits,
1754: Search_width, Search_height);
1755: else if (!strcmp(params[0], "help"))
1756: CreateBackgroundPixmap(w, Help_bits,
1757: Help_width, Help_height);
1758: else if (!strcmp(params[0], "quit"))
1759: CreateBackgroundPixmap(w, Quit_bits,
1760: Quit_width, Quit_height);
1761: else if (!strcmp(params[0], "list"))
1762: CreateBackgroundPixmap(w, List_bits,
1763: List_width, List_height);
1764: else if (!strcmp(params[0], "history"))
1765: CreateBackgroundPixmap(w, History_bits,
1766: History_width, History_height);
1767: else if (!strcmp(params[0], "close"))
1768: CreateBackgroundPixmap(w, Close_bits,
1769: Close_width, Close_height);
1770: else if (!strcmp(params[0], "okay"))
1771: CreateBackgroundPixmap(w, Okay_bits,
1772: Okay_width, Okay_height);
1773: else if (!strcmp(params[0], "about"))
1774: CreateBackgroundPixmap(w, About_bits,
1775: About_width, About_height);
1776: XFlush(dpy);
1777: }
1778:
1779:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.