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