|
|
1.1 root 1: /* $Header: /f/osi/others/quipu/uips/xd/RCS/Xd.c,v 7.0 90/06/12 13:10:46 mrose Exp $ */
2: #ifndef lint
3: static char *rcsid = "$Id: Xd.c,v 7.0 90/06/12 13:10:46 mrose Exp $";
4: #endif
5: /*
6: $Log: Xd.c,v $
7: * Revision 7.0 90/06/12 13:10:46 mrose
8: * *** empty log message ***
9: *
10: * Revision 1.5 90/04/26 10:22:32 emsrssn
11: * Installation fixed
12: *
13: *
14: * Revision 1.4 90/04/25 17:28:02 emsrssn
15: * Lint tidy up
16: *
17: *
18: * Revision 1.3 90/04/19 13:54:00 emsrssn
19: * keyboard accelerator now activates button highlight.
20: *
21: * search types available is dependent on current position
22: * to prevent unreasonable searches.
23: *
24: * the help popup changes automatically depending on the
25: * position of the cursor
26: *
27: * buttons remain a fixed size when the application is
28: * resized
29: *
30: * command line options are now handled properly
31: *
32: * logging added
33: *
34: * "reads" are now sorted to show mail address at top etc.
35: *
36: *
37: * Revision 1.2 90/03/09 15:57:25 emsrssn
38: * First public distribution
39: *
40: *
41: * Revision 1.1 90/03/08 13:18:43 emsrssn
42: * Initial revision
43: *
44: *
45: */
46:
47: #include <stdio.h>
48: #include "sequence.h"
49: #include "dirtitle.h"
50:
51: #include <X11/Xatom.h>
52: #include <X11/Intrinsic.h>
53: #include <X11/StringDefs.h>
54:
55: #include <X11/Xaw/AsciiText.h>
56: #include <X11/Xaw/Box.h>
57: #include <X11/Xaw/Clock.h>
58: #include <X11/Xaw/Command.h>
59: #include <X11/Xaw/Dialog.h>
60: #include <X11/Xaw/Form.h>
61: #include <X11/Xaw/Label.h>
62: #include <X11/Xaw/List.h>
63: #include <X11/Xaw/Logo.h>
64: #include <X11/Xaw/MenuButton.h>
65: #include <X11/Xaw/Scrollbar.h>
66: #include <X11/Xaw/SimpleMenu.h>
67: #include <X11/Xaw/Sme.h>
68: #include <X11/Xaw/SmeBSB.h>
69: #include <X11/Xaw/SmeLine.h>
70: #include <X11/Xaw/StripChart.h>
71: #include <X11/Xaw/Paned.h>
72: #include <X11/Xaw/Text.h>
73: #include <X11/Xaw/Toggle.h>
74: #include <X11/Xaw/Viewport.h>
75:
76: #include <X11/Xaw/Cardinals.h>
77: #include <X11/cursorfont.h>
78:
79: #define ASIZELIMIT 50 /* used for result list size and directory limits */
80:
81: #define MAXLOOKBACKLENGTH 10
82: #define MAXLENGTH 255
83: #define MAXRESULTLISTLENGTH ASIZELIMIT
84: #define NOHISTORY "You've not been anywhere yet"
85:
86: extern char base_path[];
87: extern char friendly_base_path[];
88: extern char goto_path[];
89: extern char mvalue[];
90: extern int filt_num;
91: extern unsigned int typeindx;
92: extern char *filtvalue[];
93: extern char *filttype[];
94: extern char dua_help_dir[];
95: extern int *av_typeindx;
96: extern D_seq showseq, dnseq;
97: extern int entry_number;
98:
99: int element_number = 0;
100: int asizelimit = ASIZELIMIT;
101:
102: void add_to_lookback(), xprint(), CreatePopupHelp(), Change_Help();
103:
104: static void Call_Change_Help();
105: static void Quit(), create_genform(), create_inputform();
106: static void create_viewlist(), create_commandform(), create_outputform();
107: static void PopupList(), PopupTypelist(), Quit_Popup();
108: static void PopupHelp(), PopdownHelp(), Change_Type(), Change_Search_Area();
109: static void Search(), List(), widen_search();
110:
111: static Boolean lookback_open = False; /* is there a look back popup? */
112: static Boolean help_popped_up= False; /* is the help window up? */
113:
114: String result_list[MAXRESULTLISTLENGTH];
115: String lookback_list[MAXLOOKBACKLENGTH];
116: Widget toplevel;
117: XtAppContext app_con;
118:
119: static XtActionsRec buttonActionsTable[] = {
120: {"Call_Change_Help", (XtActionProc) Call_Change_Help},
121: };
122:
123:
124:
125:
126:
127: void
128: init_widgets ()
129: {
130: Arg args[1];
131: Widget outer;
132: int count;
133:
134: outer = XtCreateManagedWidget("outer", panedWidgetClass, toplevel,
135: args, 0);
136:
137: XtAppAddActions(app_con, buttonActionsTable, XtNumber(buttonActionsTable));
138:
139: create_genform(outer);
140: create_inputform(outer);
141: create_outputform(outer);
142: create_commandform(outer);
143: create_viewlist(outer);
144:
145: for(count=0; count < MAXRESULTLISTLENGTH; count++) {
146: result_list[count] = XtMalloc(MAXLENGTH);
147: }
148:
149: for(count=0; count < MAXLOOKBACKLENGTH; count++) {
150: lookback_list[count] = XtMalloc(MAXLENGTH);
151: }
152: /* add text to stop widget assuming daft size */
153: (void) strcpy(lookback_list[0], NOHISTORY );
154:
155: }
156:
157: free_memory()
158: {
159: int count;
160:
161: for(count=0; count < MAXRESULTLISTLENGTH; count++) {
162: XtFree(result_list[count]);
163: }
164:
165: for(count=0; count < MAXLOOKBACKLENGTH; count++) {
166: XtFree(lookback_list[count]);
167: }
168: }
169:
170:
171: void
172: Loop()
173: {
174: Arg args[5];
175: Pixmap title_pix;
176: String title_name = "outer.genform.title";
177: Widget title_widg = XtNameToWidget(toplevel,title_name);
178:
179: XtRealizeWidget(toplevel);
180: XFlush(XtDisplay(toplevel)); /* this ensures that all requests are sent */
181: /* without this line, linking with cc means */
182: /* that the requests are not all sent */
183:
184: title_pix = XCreateBitmapFromData(XtDisplay(title_widg),
185: XtWindow(title_widg), stef_bits, stef_width,
186: stef_height);
187: XtSetArg(args[0], XtNbitmap, title_pix);
188: XtSetValues(title_widg, args, 1);
189:
190: XtAppMainLoop(app_con);
191: }
192:
193:
194: /*ARGSUSED*/
195: static void
196: Call_Change_Help(w, event, params, num_params)
197: Widget w;
198: XEvent *event;
199: String *params;
200: int num_params;
201: {
202: Change_Help(params[0]);
203: }
204:
205:
206: static void
207: create_viewlist(parent)
208: Widget parent;
209: {
210: Widget view_list, list_area;
211: Arg args[10];
212:
213: view_list = XtCreateManagedWidget("view_list", viewportWidgetClass, parent,
214: args, 0);
215:
216: XtSetArg(args[0], XtNlist, result_list);
217: XtSetArg(args[1], XtNdefaultColumns, (int) 1);
218: XtSetArg(args[2], XtNverticalList, True );
219: list_area = XtCreateManagedWidget("list_area", listWidgetClass,
220: view_list, args, 3);
221: XtAddCallback(list_area, XtNcallback, Change_Search_Area, (XtPointer) 0 );
222:
223: }
224:
225:
226:
227: static void
228: create_outputform(parent)
229: Widget parent;
230: {
231: Arg args[10];
232: static XawTextSelectType sarray[] = {
233: XawselectLine,
234: XawselectPosition,
235: XawselectAll,
236: XawselectNull
237: };
238:
239: XtSetArg(args[0], XtNselectTypes, sarray);
240: (void) XtCreateManagedWidget("result_area", asciiTextWidgetClass,
241: parent, args, 1);
242:
243: }
244:
245:
246:
247: static void
248: create_commandform(parent)
249: Widget parent;
250: {
251: Arg args[1]; /* used to pass zero args...to be consistent for lint */
252: Widget form, widen_but;
253: Widget search_but, list_but, lookback_but;
254:
255:
256: form = XtCreateManagedWidget("commandform", formWidgetClass, parent,
257: args, 0 );
258:
259: search_but = XtCreateManagedWidget("search_but", commandWidgetClass,
260: form, args, 0 );
261: XtAddCallback(search_but, XtNcallback, Search, (XtPointer)0 );
262:
263:
264: list_but = XtCreateManagedWidget("list_but", commandWidgetClass,
265: form, args, 0 );
266: XtAddCallback(list_but, XtNcallback, List, (XtPointer)0 );
267:
268:
269: lookback_but = XtCreateManagedWidget("lookback_but", commandWidgetClass,
270: form, args, 0);
271: XtAddCallback(lookback_but, XtNcallback, PopupList, (XtPointer)0 );
272:
273:
274: widen_but = XtCreateManagedWidget("widen_but", commandWidgetClass, form,
275: args, 0 );
276: XtAddCallback(widen_but, XtNcallback, widen_search, (XtPointer)0 );
277: }
278:
279:
280:
281:
282: void
283: Searchpress()
284: {
285: XEvent search_event;
286: Widget search_but = XtNameToWidget(toplevel, "outer.commandform.search_but");
287:
288: search_event.type = ButtonPress;
289: search_event.xbutton.button = Button1;
290: search_event.xany.display = XtDisplay(search_but);
291: search_event.xany.window = XtWindow(search_but);
292:
293: XSendEvent(XtDisplay(search_but), XtWindow(search_but), True,
294: ButtonPressMask | ButtonReleaseMask, &search_event);
295:
296: search_event.type = ButtonRelease;
297: XSendEvent(XtDisplay(search_but), XtWindow(search_but), True,
298: ButtonPressMask | ButtonReleaseMask, &search_event);
299: }
300:
301:
302:
303: static Widget
304: create_type_menu(parent)
305: Widget parent;
306: {
307: Arg args[1]; /* used to pass zero args...to be consistent for lint */
308: Widget menu, button;
309: int n;
310:
311: menu = XtCreatePopupShell("menu", simpleMenuWidgetClass,
312: parent, args, 0 );
313:
314: n = 0;
315: while (av_typeindx[n] != -1) {
316: button = XtCreateManagedWidget((String) filttype[av_typeindx[n]],
317: smeBSBObjectClass,
318: menu, args, 0);
319: XtAddCallback(button, XtNcallback, Change_Type, (XtPointer) av_typeindx[n]);
320: n++;
321: }
322: return menu;
323: }
324:
325:
326:
327: static void
328: create_inputform(parent)
329: Widget parent;
330: {
331: Widget form, area_form, for_form, type_form;
332: Widget type_but;
333: Widget search_for;
334:
335: Arg args[10];
336:
337:
338: static XtActionsRec actionsTable[] = {
339: {"Searchpress", (XtActionProc) Searchpress},
340: };
341:
342: static char defaultTranslations[] =
343: "<Key>Return: Searchpress() \n\
344: Ctrl<Key>M: Searchpress() \n\
345: Ctrl<Key>O: Searchpress()";
346:
347: XtTranslations trans_table;
348:
349: form = XtCreateManagedWidget("inputform", formWidgetClass, parent,
350: args, 0 );
351:
352: area_form = XtCreateManagedWidget("area_form", formWidgetClass, form,
353: args, 0 );
354:
355: (void) XtCreateManagedWidget("search_area_label",
356: labelWidgetClass, area_form, args, 0);
357:
358:
359: XtSetArg(args[0], XtNstring, friendly_base_path);
360: XtSetArg(args[1], XtNwidth, (Dimension) 300);
361: (void) XtCreateManagedWidget("search_area", asciiTextWidgetClass,
362: area_form, args, 2);
363:
364: for_form = XtCreateManagedWidget("for_form", formWidgetClass, form,
365: args, 0);
366:
367: (void) XtCreateManagedWidget("search_for_label", labelWidgetClass,
368: for_form, args, 0);
369:
370: search_for = XtCreateManagedWidget("search_for", asciiTextWidgetClass,
371: for_form, args, 0);
372:
373: XtAppAddActions(app_con, actionsTable, XtNumber(actionsTable));
374: trans_table = XtParseTranslationTable(defaultTranslations);
375: XtOverrideTranslations(search_for, trans_table);
376:
377: type_form = XtCreateManagedWidget("type_form", formWidgetClass, form,
378: args, 0 );
379:
380: type_but = XtCreateManagedWidget("type_but", menuButtonWidgetClass,
381: type_form, args, 0);
382:
383: (void) XtCreateManagedWidget("search_type", asciiTextWidgetClass,
384: type_form, args, 0);
385:
386: (void) create_type_menu(type_but);
387: }
388:
389:
390:
391:
392:
393: static void
394: create_genform(parent)
395: Widget parent;
396: {
397: Widget form, quit_but, help_but;
398: Arg args[10];
399:
400: form = XtCreateManagedWidget("genform", formWidgetClass, parent,
401: args, 0 );
402:
403: XtSetArg(args[0], XtNheight, stef_height);
404: XtSetArg(args[1], XtNwidth, stef_width);
405: (void) XtCreateManagedWidget("title", labelWidgetClass,form,
406: args, 2);
407:
408: quit_but = XtCreateManagedWidget("quit_but", commandWidgetClass, form,
409: args, 0);
410: XtAddCallback(quit_but, XtNcallback, Quit, (XtPointer) toplevel);
411:
412:
413: help_but = XtCreateManagedWidget("help_but", commandWidgetClass, form,
414: args, 0);
415: CreatePopupHelp(help_but);
416: XtAddCallback(help_but, XtNcallback, PopupHelp, (XtPointer)0 );
417: }
418:
419:
420:
421: /*ARGSUSED*/
422: static void
423: Quit(widget, closure, callData)
424: Widget widget;
425: XtPointer closure, callData;
426: {
427: XtDestroyWidget((Widget) closure);
428: exit(0);
429: }
430:
431:
432: void
433: CreatePopupHelp(button)
434: Widget button;
435: {
436: Widget popup, form, quit_but;
437: Arg args[5];
438: FILE *file;
439: char fullname[MAXLENGTH];
440: char filename[MAXLENGTH];
441:
442: (void) strcpy(filename, "xd.help");
443:
444: popup = XtCreatePopupShell("popup", transientShellWidgetClass, button,
445: args, 0);
446:
447: form = XtCreateManagedWidget("form", formWidgetClass, popup,
448: args, 0);
449:
450: quit_but = XtCreateManagedWidget("quit_but", commandWidgetClass, form,
451: args, 0);
452: XtAddCallback(quit_but, XtNcallback, PopdownHelp, (XtPointer)0 );
453:
454: (void) strcpy(fullname, dua_help_dir);
455: (void) strcat(fullname, filename);
456: if (!(file = fopen(fullname, "r"))) {
457: (void) strcpy(fullname, "./xd/helpdir/");
458: (void) strcat(fullname, filename);
459: if (!(file = fopen(fullname, "r"))) (void) printf("Helpfile not found");
460: }
461:
462: if(file != NULL) {
463: (void) fclose(file);
464: XtSetArg(args[0], XtNstring, fullname );
465: }
466: (void) XtCreateManagedWidget("help_text", asciiTextWidgetClass, form,
467: args, 1);
468: }
469:
470:
471: /*ARGSUSED*/
472: static void
473: PopupHelp(button, client_data, call_data)
474: Widget button;
475: XtPointer client_data, call_data;
476: {
477: Widget pop_widg = XtNameToWidget(button, "popup");
478: Arg args[5];
479: Position x, y;
480: Cardinal n;
481:
482:
483: XtTranslateCoords(button, (Position) 0, (Position) 0,
484: &x, &y);
485:
486: n = 0;
487: XtSetArg(args[n], XtNx, x); n++;
488: XtSetArg(args[n], XtNy, y-245); n++;
489: XtSetValues(pop_widg, args, n);
490:
491: help_popped_up = TRUE;
492: XtPopup(pop_widg, XtGrabNone);
493:
494: }
495:
496: /*ARGSUSED*/
497: static void
498: PopdownHelp(button, client_data, call_data)
499: Widget button;
500: XtPointer client_data, call_data;
501: {
502: Widget pop_widg = XtParent( XtParent(button) );
503:
504: help_popped_up = FALSE;
505: XtPopdown(pop_widg);
506: }
507:
508: void
509: Change_Help(filename)
510: String filename;
511: {
512: Arg args[5];
513: FILE *file;
514: char *fullname;
515: static char * old_pointer = 0;
516:
517: /* this gets around a problem mine or athena widgets ? */
518: /* does usestringinplace=false work for type = file */
519: /* when using asciitext widgets? */
520:
521: if(help_popped_up){
522: fullname = XtMalloc(MAXLENGTH * sizeof(char));
523: if(old_pointer != 0) {
524: XtFree((char *) old_pointer);
525: old_pointer = fullname;
526: }
527:
528: (void) strcpy(fullname, dua_help_dir);
529: (void) strcat(fullname, filename);
530: if (!(file = fopen(fullname, "r"))) {
531: (void) strcpy(fullname, "./Xd/helpdir/");
532: (void) strcat(fullname, filename);
533: if (!(file = fopen(fullname, "r"))) (void) fprintf(stderr, "Helpfile not found\n");
534: }
535:
536: if(file != NULL) {
537: (void) fclose(file);
538: XtSetArg(args[0], XtNstring, fullname );
539: XtSetValues( XtNameToWidget(toplevel,
540: "outer.genform.help_but.popup.form.help_text"), args, 1);
541: }
542: XFlush(XtDisplay(toplevel));
543: }
544: }
545:
546:
547: /*ARGSUSED*/
548: static void
549: PopupList(button, client_data, call_data)
550: Widget button;
551: XtPointer client_data, call_data;
552: {
553: Arg args[5];
554: Widget popup, form, list_places, quit_but;
555: Position x, y;
556: Dimension width, height;
557: Cardinal n;
558: String widget_name = "outer.commandform.lookback_but.popup";
559:
560:
561: if(lookback_open == True) {
562: XtPopup(XtNameToWidget(toplevel, widget_name), XtGrabNone);
563: return;
564: }
565:
566:
567: n = 0;
568: XtSetArg(args[0], XtNwidth, &width); n++;
569: XtSetArg(args[1], XtNheight, &height); n++;
570: XtGetValues(button, args, n);
571: XtTranslateCoords(button, (Position) (width / 2), (Position) (height / 2),
572: &x, &y);
573:
574: n = 0;
575: XtSetArg(args[n], XtNx, x); n++;
576: XtSetArg(args[n], XtNy, y); n++;
577:
578: popup = XtCreatePopupShell("popup", transientShellWidgetClass, button,
579: args, n);
580:
581: form = XtCreateManagedWidget("form", formWidgetClass, popup,
582: args, 0);
583:
584: XtSetArg(args[0], XtNlabel, (String) "Quit");
585: quit_but = XtCreateManagedWidget("quit_but", commandWidgetClass, form,
586: args, 1);
587: XtAddCallback(quit_but, XtNcallback, Quit_Popup, (XtPointer) form);
588:
589: XtSetArg(args[0], XtNlist, lookback_list);
590: XtSetArg(args[1], XtNfromVert, quit_but);
591: XtSetArg(args[2], XtNverticalList, True );
592: XtSetArg(args[3], XtNnumberStrings, MAXLOOKBACKLENGTH );
593: list_places = XtCreateManagedWidget("list_places", listWidgetClass, form,
594: args, 4);
595: XtAddCallback(list_places, XtNcallback, Change_Search_Area, (XtPointer)0 );
596:
597: lookback_open = True;
598:
599: XtPopup(popup, XtGrabNone);
600: }
601:
602:
603:
604:
605: void
606: Add_To_Results(add_this)
607: String add_this;
608: {
609: Arg args[10];
610: String str;
611: char new_str[2000];
612: Widget result_widg = XtNameToWidget(toplevel, "outer.result_area");
613:
614: XtSetArg(args[0], XtNstring, &str);
615: XtGetValues(result_widg, args, ONE);
616:
617: if(*str == '\0')
618: (void) strcpy(new_str, add_this);
619: else
620: (void) sprintf((char *)new_str,"%s\n%s", str, add_this);
621:
622: XtSetArg(args[0], XtNstring, new_str);
623: XtSetValues(result_widg, args, 1);
624: }
625:
626:
627:
628: void Clear_Results()
629: {
630: Arg args[10];
631: Widget result_widg = XtNameToWidget(toplevel, "outer.result_area");
632:
633: XtSetArg(args[0], XtNstring, "\0");
634: XtSetValues(result_widg, args, 1);
635: }
636:
637:
638:
639: Switch_Off_Result_Update()
640: {
641: Widget result_widg = XtNameToWidget(toplevel, "outer.result_area");
642: XawTextDisableRedisplay(result_widg);
643: }
644:
645:
646: Switch_On_Result_Update()
647: {
648: Widget result_widg = XtNameToWidget(toplevel, "outer.result_area");
649: XawTextEnableRedisplay(result_widg);
650: }
651:
652:
653:
654: /*ARGSUSED*/
655: static void
656: Search(w, client_data, call_data)
657: Widget w;
658: XtPointer client_data, call_data;
659: {
660: Arg args[10];
661: int n, numb;
662: String str;
663: String string;
664: Widget list_widg = XtNameToWidget(toplevel, "outer.view_list.list_area");
665: Widget widg = XtNameToWidget(toplevel,
666: "outer.inputform.for_form.search_for");
667:
668: Clear_Results();
669: XtSetArg(args[0], XtNstring, &str);
670: XtGetValues(widg, args, ONE);
671: (void) strcpy(mvalue, str);
672: srch_start();
673: xprint("Search completed");
674: showseq = dnseq;
675: element_number = entry_number;
676:
677: numb = element_number;
678: if(numb >= MAXRESULTLISTLENGTH)
679: numb = MAXRESULTLISTLENGTH-1;
680:
681: for (n = 0; n < numb; n++) {
682: string = get_from_seq(n+1, showseq);
683: (void) strcpy(result_list[n], string);
684: }
685:
686: for(; n<MAXRESULTLISTLENGTH; n++) {
687: (void) strcpy(result_list[n], "");
688: }
689:
690: XawListChange(list_widg, result_list, MAXRESULTLISTLENGTH, 0, True);
691: }
692:
693:
694:
695: /*ARGSUSED*/
696: static void
697: List(w, client_data, call_data)
698: Widget w;
699: XtPointer client_data, call_data;
700: {
701: String string;
702: int n, numb;
703: Arg args[10];
704: Widget list_widg = XtNameToWidget(toplevel, "outer.view_list.list_area");
705: Widget top_widg= XtNameToWidget(toplevel, "outer");
706: Display *this_display = XtDisplay(top_widg);
707: Cursor time_cur = XCreateFontCursor(this_display, XC_watch);
708: Cursor normal_cur;
709:
710: Clear_Results();
711: (void) strcpy(mvalue, "");
712:
713: XtSetArg(args[0], XtNcursor, &normal_cur );
714: XtGetValues(top_widg, args, 1);
715:
716: XtSetArg(args[0], XtNcursor, time_cur );
717: XtSetValues(top_widg, args, 1);
718: XFlush(this_display);
719:
720:
721: srch_start();
722: set_default_type();
723: showseq = dnseq;
724: element_number = entry_number;
725:
726: numb = element_number;
727: if(numb >= MAXRESULTLISTLENGTH)
728: numb = MAXRESULTLISTLENGTH-1;
729:
730: for (n = 0; n < numb; n++) {
731: string = get_from_seq(n+1, showseq);
732: (void) strcpy(result_list[n], string);
733: }
734:
735: for(; n<MAXRESULTLISTLENGTH; n++) {
736: (void) strcpy(result_list[n], "");
737: }
738:
739: XtSetArg(args[0], XtNcursor, normal_cur);
740: XtSetValues(top_widg, args, 1);
741:
742: XawListChange(list_widg, result_list, MAXRESULTLISTLENGTH, 0, True);
743: }
744:
745:
746:
747: /*ARGSUSED*/
748: static void
749: Change_Type(w, client_data, call_data)
750: Widget w;
751: XtPointer client_data, call_data;
752: {
753: typeindx = (unsigned int) client_data;
754: Set_Search_Type(filttype[(int) client_data]);
755: }
756:
757:
758:
759: Set_Search_Type(string)
760: String string;
761: {
762: Arg args[5];
763: Widget search_w = XtNameToWidget(toplevel, "outer.inputform.type_form.search_type");
764: Widget typebut_w = XtNameToWidget(toplevel,
765: "outer.inputform.type_form.type_but");
766: Widget typemenu_w = XtNameToWidget(toplevel,
767: "outer.inputform.type_form.type_but.menu");
768:
769: XtDestroyWidget(typemenu_w);
770: (void) create_type_menu(typebut_w);
771:
772: XtSetArg(args[0], XtNstring, string);
773: XtSetValues( search_w, args, 1);
774: }
775:
776:
777: /*ARGSUSED*/
778: static void
779: Change_Search_Area(w, client_data, call_data)
780: Widget w;
781: XtPointer client_data, call_data;
782: {
783:
784: XawListReturnStruct *item = (XawListReturnStruct*)call_data;
785:
786: Clear_Results();
787:
788: if((strlen(item->string) != 0) && (strcmp(item->string, NOHISTORY))){
789: Set_Search_Area(item->string);
790: rd_start();
791: add_to_lookback(base_path);
792: }
793:
794: XawListUnhighlight(w);
795: }
796:
797:
798:
799: Set_Search_Area(string)
800: String string;
801: {
802: Arg args[10];
803: String widget_name = "outer.inputform.area_form.search_area";
804: Widget search_w = XtNameToWidget(toplevel, widget_name);
805:
806: XtSetArg(args[0], XtNstring, string);
807: XtSetValues(search_w, args, 1);
808:
809: (void) strcpy(base_path, string);
810: set_default_type();
811: }
812:
813: /*ARGSUSED*/
814: static void
815: Quit_Popup(widget, client_data, call_data)
816: Widget widget;
817: XtPointer client_data, call_data;
818: {
819: Widget popup = XtParent((Widget) client_data);
820:
821: if(lookback_open == True)
822: if(XtNameToWidget(toplevel,
823: "outer.commandform.lookback_but.popup.form.quit_but") == widget)
824: lookback_open = False;
825:
826: XtDestroyWidget(popup);
827: }
828:
829:
830: void
831: xprint(str)
832: String str;
833: {
834: Add_To_Results(str);
835: }
836:
837: /*ARGSUSED*/
838: static void
839: widen_search()
840: {
841: Arg args[10];
842: String widget_name = "outer.inputform.area_form.search_area";
843: Widget search_w = XtNameToWidget(toplevel, widget_name);
844:
845: widen();
846: XtSetArg(args[0], XtNstring, base_path);
847: XtSetValues(search_w, args, 1);
848: }
849:
850:
851: void
852: add_to_lookback(addthis)
853: String addthis;
854: {
855: int count;
856: String widget_name = "outer.commandform.lookback_but.popup.form.list_places";
857: Widget list_w;
858:
859: for(count=0; count<MAXLOOKBACKLENGTH; count++ )
860: if(!strcmp(lookback_list[count], addthis))
861: return; /* no duplicates thankyou! */
862:
863: for(count=0; count<MAXLOOKBACKLENGTH-1; ) {
864: (void) strcpy(lookback_list[count], lookback_list[count+1]);
865: count++;
866: }
867: (void) strcpy(lookback_list[count++], addthis);
868:
869: if(lookback_open == True) {
870: list_w = XtNameToWidget(toplevel,widget_name);
871: XawListChange(list_w, lookback_list, MAXLOOKBACKLENGTH, 0, True);
872: }
873:
874: XFlush(XtDisplay(toplevel));
875: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.