1 /*
2 * Motif Tools Library, Version 3.1
3 * $Id: Warning.c,v 1.2 2001/09/19 02:57:18 grmcdorman Exp $
4 *
5 * Written by David Flanagan.
6 * Copyright (c) 1992-2001 by David Flanagan.
7 * All Rights Reserved. See the file COPYRIGHT for details.
8 * This is open source software. See the file LICENSE for details.
9 * There is no warranty for this software. See NO_WARRANTY for details.
10 *
11 * $Log: Warning.c,v $
12 * Revision 1.2 2001/09/19 02:57:18 grmcdorman
13 * This change makes the following modifications:
14 * A new program, printConfig, is provided. This is built by a
15 * simple rule in the Makefile and not installed. It prints
16 * significant defines from Xmt.tmpl.
17 *
18 * XmtP.h is now generated from XmtP.h.in using printConfig. As
19 * a result, code compiled outside of the Xmt Imakefiles will
20 * have all of the Xmt.tmpl defines.
21 *
22 * Source files are modified to use XmtP.h instead of Xmt.h.
23 *
24 * WorkingBox.c is modified to use the new Progress widget.
25 * It can be compiled in the old style if WORKINGBOX_USE_SCALE is
26 * defined at compile time.
27 *
28 * Because XmtP.h is generated dynamically, it is removed from CVS
29 * with this check-in.
30 *
31 * Revision 1.1.1.1 2001/02/10 13:51:22 motiftools
32 * Initial import of Xmt310 to CVS
33 *
34 *
35 */
36
37 #include <Xmt/XmtP.h>
38
39 #if NeedFunctionPrototypes
PrintMsg(String name,String type,String default_msg,Boolean error,va_list var)40 static void PrintMsg(String name, String type, String default_msg,
41 Boolean error, va_list var)
42 #else
43 static void PrintMsg(name, type, default_msg, error, var)
44 String name, type, default_msg;
45 Boolean error;
46 va_list var;
47 #endif
48 {
49 String *params;
50 Cardinal num_params;
51 register char *c;
52 register int i;
53 int len;
54 String msg;
55
56 /*
57 * The number of arguments should equal the number of '%'
58 * characters in the default string that are not followed
59 * by another % character.
60 */
61 for(num_params = 0, c = default_msg; *c != '\0'; c++)
62 if ((*c == '%') && (*(c+1) != '\0') && (*(c+1) != '%'))
63 num_params++;
64
65 /* add one for the procedure name */
66 num_params++;
67
68 /*
69 * allocate space for the params,
70 * and initialize the array from the name and arglist
71 */
72 params = (String *)XtMalloc(num_params * sizeof(String));
73 params[0] = name;
74 for(i=1; i < num_params; i++)
75 params[i] = va_arg(var, String);
76
77 /*
78 * prepend "%s: " to the default message.
79 */
80 len = strlen(default_msg) + 5;
81 msg = XtMalloc(len);
82 (void) strcpy(msg, "%s: ");
83 (void) strcpy(&msg[4], default_msg);
84
85 if (error)
86 XtErrorMsg(name, type, "XmtError", msg, params, &num_params);
87 else
88 XtWarningMsg(name, type, "XmtWarning", msg, params, &num_params);
89
90 XtFree((char *)params);
91 XtFree(msg);
92 }
93
94 #if NeedVarargsPrototypes
XmtErrorMsg(String name,String type,String default_msg,...)95 void XmtErrorMsg(String name, String type, String default_msg, ...)
96 #else
97 void XmtErrorMsg(name, type, default_msg, va_alist)
98 String name, type, default_msg;
99 va_dcl
100 #endif
101 {
102 va_list var;
103
104 Va_start(var, default_msg);
105 PrintMsg(name, type, default_msg, True, var);
106 va_end(var);
107 }
108
109 #if NeedVarargsPrototypes
XmtWarningMsg(String name,String type,String default_msg,...)110 void XmtWarningMsg(String name, String type, String default_msg, ...)
111 #else
112 void XmtWarningMsg(name, type, default_msg, va_alist)
113 String name, type, default_msg;
114 va_dcl
115 #endif
116 {
117 va_list var;
118
119 Va_start(var, default_msg);
120 PrintMsg(name, type, default_msg, False, var);
121 va_end(var);
122 }
123