Annotation of 43BSDReno/contrib/isode-beta/others/quipu/uips/pod/pod.c, revision 1.1.1.1

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:                           

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.