home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / XAP / XFM / XFM-1.3 / XFM-1 / xfm-1.3 / xfm / FmErrors.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-30  |  5.0 KB  |  188 lines

  1. /*-----------------------------------------------------------------------------
  2.   Module FmErrors
  3.   
  4.   (c) Simon Marlow 1990-1993
  5.   (c) Albert Graef 1994
  6.  
  7.   Error handling routines
  8. -----------------------------------------------------------------------------*/
  9.  
  10. #include <errno.h>
  11.  
  12. #include <X11/Intrinsic.h>
  13. #include <X11/StringDefs.h>
  14. #include <X11/Shell.h>
  15. #include <X11/Xaw/Form.h>
  16. #include <X11/Xaw/Label.h>
  17. #include <X11/Xaw/Box.h>
  18.  
  19. #include "Am.h"
  20. #include "Fm.h"
  21.  
  22. #define LABEL_WIDTH 300
  23.  
  24. /* Uggh ...... */
  25. #ifndef linux
  26. extern char *sys_errlist[];
  27. #endif
  28.  
  29. /*-----------------------------------------------------------------------------
  30.   STAIC DATA
  31. -----------------------------------------------------------------------------*/
  32.  
  33. typedef struct {
  34.   Widget shell, label1, label2;
  35. } ErrorPopupRec;
  36.  
  37. static ErrorPopupRec errors;
  38.  
  39. static Boolean error_flag = True;
  40.  
  41. /*-----------------------------------------------------------------------------
  42.   Widget Argument Lists
  43. -----------------------------------------------------------------------------*/
  44.  
  45. static Arg shell_args[] = {
  46.   { XtNtitle, (XtArgVal) "Error" },
  47. };
  48.  
  49. static Arg *form_args = NULL;
  50.  
  51. static Arg label_args[] = {
  52.   { XtNfromHoriz, (XtArgVal) NULL },
  53.   { XtNfromVert, (XtArgVal) NULL },
  54.   { XtNlabel, (XtArgVal) NULL },
  55.   { XtNwidth, (XtArgVal) LABEL_WIDTH },
  56.   { XtNfont, (XtArgVal) NULL },
  57.   { XtNresize, False },
  58.   { XtNtop, XtChainTop },
  59.   { XtNbottom, XtChainTop },
  60.   { XtNleft, XtChainLeft },
  61.   { XtNright, XtChainRight }
  62. };
  63.  
  64. static Arg bitmap_args[] = {
  65.   { XtNfromHoriz, (XtArgVal) NULL },
  66.   { XtNfromVert, (XtArgVal) NULL },
  67.   { XtNbitmap, (XtArgVal) NULL },
  68.   { XtNtop, XtChainTop },
  69.   { XtNbottom, XtChainTop },
  70.   { XtNleft, XtChainLeft },
  71.   { XtNright, XtChainLeft }
  72. };
  73.  
  74. static Arg button_box_args[] = {
  75.   { XtNfromHoriz, (XtArgVal) NULL },
  76.   { XtNfromVert, (XtArgVal) NULL },
  77.   { XtNtop, XtChainTop },
  78.   { XtNbottom, XtChainTop },
  79.   { XtNleft, XtChainLeft },
  80.   { XtNright, XtChainLeft }
  81. };
  82.  
  83. /*-----------------------------------------------------------------------------
  84.   PRIVATE FUNCTIONS
  85. -----------------------------------------------------------------------------*/
  86.  
  87. static void errorOkCb(Widget w, XtPointer client_data, XtPointer call_data)
  88. {
  89.   XtPopdown(errors.shell);
  90.   error_flag = True;
  91. }
  92.  
  93. /*-----------------------------------------------------------------------------
  94.   Button Data
  95. -----------------------------------------------------------------------------*/
  96.  
  97. static ButtonRec error_buttons[] = {
  98.   { "ok", "Ok", (FmCallbackProc *) errorOkCb }
  99. };
  100.  
  101. /*-----------------------------------------------------------------------------
  102.   PUBLIC FUNCTIONS
  103. -----------------------------------------------------------------------------*/
  104.  
  105. void createErrorPopup()
  106. {
  107.   Widget form, bitmap, button_box;
  108.  
  109.   /* create shell */
  110.   errors.shell = XtCreatePopupShell("error", transientShellWidgetClass,
  111.                    aw.shell, shell_args, XtNumber(shell_args));
  112.  
  113.   /* create outer form */
  114.   form = XtCreateManagedWidget("form", formWidgetClass, errors.shell,
  115.                       form_args, XtNumber(form_args) );
  116.  
  117.   /* create  bitmap */
  118.   bitmap_args[2].value = (XtArgVal) bm[EXCL_BM];
  119.   bitmap = XtCreateManagedWidget("bitmap", labelWidgetClass, form, bitmap_args,
  120.                     XtNumber(bitmap_args) );
  121.  
  122.   /* create label 1 */
  123.   label_args[0].value = (XtArgVal) bitmap;
  124.   label_args[4].value = (XtArgVal) resources.label_font;
  125.   errors.label1 = XtCreateManagedWidget("label1",labelWidgetClass, form,
  126.                        label_args, XtNumber(label_args) );
  127.  
  128.   /* create label 2 */
  129.   label_args[1].value = (XtArgVal) errors.label1;
  130.   errors.label2 = XtCreateManagedWidget("label2",labelWidgetClass, form,
  131.                        label_args, XtNumber(label_args) );
  132.  
  133.   /* create button box */
  134.   button_box_args[1].value = (XtArgVal) bitmap;
  135.   button_box = XtCreateManagedWidget("button box", boxWidgetClass, form,
  136.                  button_box_args, XtNumber(button_box_args) );
  137.   createButtons(error_buttons, XtNumber(error_buttons), button_box,
  138.         NULL);
  139.   XtRealizeWidget(errors.shell);
  140. }
  141.  
  142. /*---------------------------------------------------------------------------*/
  143.  
  144. void untilOk()
  145. {
  146.   XEvent e;
  147.  
  148.   error_flag = False;
  149.  
  150.   do {
  151.     XtAppNextEvent(app_context, &e);
  152.     XtDispatchEvent(&e);
  153.   } while (!error_flag);
  154. }
  155.  
  156. /*---------------------------------------------------------------------------*/
  157.  
  158. void sysError(String string1)
  159. {
  160.   if (!error_flag) /* recursive errors are possible - we just ignore them */
  161.     return;
  162.   XtVaSetValues(errors.label1, XtNlabel, string1, NULL);
  163.   XtVaSetValues(errors.label2, XtNlabel, sys_errlist[errno], NULL);
  164.   popupByCursor(errors.shell, XtGrabExclusive);
  165.   untilOk();
  166. }
  167.  
  168. /*---------------------------------------------------------------------------*/
  169.  
  170. void error(String string1, String string2)
  171. {
  172.   if (!error_flag)
  173.     return;
  174.   XtVaSetValues(errors.label1, XtNlabel, string1, NULL);
  175.   XtVaSetValues(errors.label2, XtNlabel, string2, NULL);
  176.   popupByCursor(errors.shell, XtGrabExclusive);
  177.   untilOk();
  178. }
  179.  
  180. /*---------------------------------------------------------------------------*/
  181.  
  182. void abortXfm(String message)
  183. {
  184.   fprintf(stderr,"%s: %s -- abort\n", progname, message);
  185.   exit(1);
  186. }
  187.  
  188.