c version of xtext visi
[dyninst.git] / visi / test / server / src / xtext.c
1 /*
2  * xtext.c
3  *
4  * This an example of how to use the Text and Paned widgets.
5  *
6  * November 14, 1989 - Chris D. Peterson 
7  *
8  * Updated to also demonstrate XtAppAddInput() -- Bruce Irvin 3/8/94
9  */
10
11 /*
12  * $XConsortium: xtext.c,v 1.16 91/05/16 14:56:23 swick Exp $
13  *
14  * Copyright 1989 Massachusetts Institute of Technology
15  *
16  * Permission to use, copy, modify, distribute, and sell this software and its
17  * documentation for any purpose is hereby granted without fee, provided that
18  * the above copyright notice appear in all copies and that both that
19  * copyright notice and this permission notice appear in supporting
20  * documentation, and that the name of M.I.T. not be used in advertising or
21  * publicity pertaining to distribution of the software without specific,
22  * written prior permission.  M.I.T. makes no representations about the
23  * suitability of this software for any purpose.  It is provided "as is"
24  * without express or implied warranty.
25  *
26  * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
27  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T.
28  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
29  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
30  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 
31  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
32  */
33
34 #include <stdio.h>
35 #include <X11/Intrinsic.h>
36 #include <X11/StringDefs.h>
37
38 #include <X11/Xaw/AsciiText.h>
39 #include <X11/Xaw/Command.h>
40 #include <X11/Xaw/Paned.h>
41
42 #include <X11/Xaw/Cardinals.h>
43
44 /***************************/
45 #include "visualization.h"
46 /***************************/
47
48 static void ClearText();
49 static void PrintText();
50 static void QuitProgram();
51 static void Syntax();
52
53
54 /***************************/
55 XtAppContext app_con;
56 Widget toplevel, paned, clear, print, quit, text;
57 Widget getMR;
58 /***************************/
59
60 String fallback_resources[] = { 
61     "*input:                            True",
62     "*showGrip:                         off",
63     "?.?.text.preferredPaneSize:        200", 
64     "?.?.text.width:                    200", 
65     "?.?.text.textSource.editType:      edit",
66     "?.?.text.scrollVertical:           whenNeeded",
67     "?.?.text.scrollHorizontal:         whenNeeded",
68     "?.?.text.autoFill:                 on",
69     "*clear*label:            Clear",
70     "*print*label:            Print",
71     "*quit*label:              Quit",
72     NULL,
73 };
74  
75 /* callback routine for FOLD and DATAVALUES */
76 int fd_input(dummy)
77 int dummy;
78 {
79
80   Arg args[1];
81   XawTextPosition pos;
82   XawTextBlock tb;
83   char buf[100];
84   int i,j,k;
85   int noMetrics,noResources,noBins;
86   int size;
87   double value;
88
89   XtSetArg(args[0], XtNinsertPosition, &pos);
90   XtGetValues(text, args, ONE);
91
92
93   noMetrics = visi_NumMetrics();
94   noResources = visi_NumResources();
95   noBins = visi_NumBuckets();
96   for(i=0;i < noMetrics; i++)
97    for(j=0;j<noResources;j++){
98       k = dummy;
99       value = visi_DataValue(i,j,k);
100       if(!(isnan(value))){
101       sprintf(&buf[0],"%s%d%s%d%s%d%s%f\n","dataGrid[",i,"][",j,"][",k,
102               "] = ",value); 
103       }
104       else{
105         sprintf(&buf[0],"%s%d%s%d%s%d%s\n","dataGrid[",i,"][",j,"][",k ,
106                 "] = NaN"); 
107       }
108       size = strlen(buf);  
109       tb.firstPos = 0;
110       tb.length = size;
111       tb.ptr = buf;
112       tb.format = FMT8BIT;
113       if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
114           fprintf(stderr,"XawTextReplace returned error\n");
115       }
116       pos += size;
117       XtSetArg(args[0], XtNinsertPosition, pos);
118       XtSetValues(text, args, ONE);
119     
120     sprintf(&buf[0],"\n");
121     size = strlen(buf);  
122     tb.firstPos = 0;
123     tb.length = size;
124     tb.ptr = buf;
125     tb.format = FMT8BIT;
126     if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
127       fprintf(stderr,"XawTextReplace returned error\n");
128     }
129     pos += size;
130     XtSetArg(args[0], XtNinsertPosition, pos);
131     XtSetValues(text, args, ONE);
132   }
133   return 1;
134 }
135
136 /* callback routine for ADDMETRICSRESOURCES */
137 int fd_input2(dummy)
138 int dummy;
139 {
140   Arg args[1];
141   XawTextPosition pos;
142   XawTextBlock tb;
143   char buf[100];
144   int size;
145   int noMetrics,noResources,noBins;
146   int aggr;
147   double value;
148
149   XtSetArg(args[0], XtNinsertPosition, &pos);
150   XtGetValues(text, args, ONE);
151   noMetrics = visi_NumMetrics();
152   noResources = visi_NumResources();
153   noBins = visi_NumBuckets();
154   value  = visi_BucketWidth();
155   sprintf(&buf[0],"\n%s%d%s%d%s%d%s%f\n","noMetrics = ",noMetrics,
156          ", no resources = ",noResources,", num Bins = ",noBins,
157          "\nbinWidth = ",value);
158
159   size = strlen(buf);  
160   tb.firstPos = 0;
161   tb.length = size;
162   tb.ptr = buf;
163   tb.format = FMT8BIT;
164   if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
165     fprintf(stderr,"XawTextReplace returned error\n");
166   }
167   pos += size;
168   XtSetArg(args[0], XtNinsertPosition, pos);
169   XtSetValues(text, args, ONE);
170
171   return(0);
172 }
173
174 static void GetMetsResCallback(w,app_con,call_data)
175 Widget w;
176 XtAppContext app_con;
177 XtPointer call_data;
178 {
179   visi_GetMetsRes(0,0);  
180 }
181
182
183
184
185 int main(argc,argv)
186 int argc;
187 char **argv;
188 {
189  Arg args[1];
190
191     int ok, fd;
192     toplevel = XtAppInitialize(&app_con, "Xtext", NULL, ZERO,
193                                &argc, argv, fallback_resources,
194                                NULL, ZERO);
195
196     /*
197      * Check to see that all arguments were processed, and if not then
198      * report an error and exit.
199      */
200
201     if (argc != 1)              
202         Syntax(app_con, argv[0]);
203
204    if((fd = visi_Init()) < 0){
205          exit(-1);
206     }
207
208    ok = visi_RegistrationCallback(ADDMETRICSRESOURCES,fd_input2); 
209    ok = visi_RegistrationCallback(DATAVALUES,fd_input); 
210    ok = visi_RegistrationCallback(FOLD,fd_input); 
211
212     paned = XtCreateManagedWidget("paned", panedWidgetClass, toplevel, 
213                                   NULL, ZERO);
214     clear = XtCreateManagedWidget("clear", commandWidgetClass, paned, 
215                                   NULL, ZERO);
216     print = XtCreateManagedWidget("print", commandWidgetClass, paned, 
217                                   NULL, ZERO);
218     quit = XtCreateManagedWidget("quit", commandWidgetClass, paned, 
219                                   NULL, ZERO);
220
221     getMR = XtCreateManagedWidget("Get Metric Resource",commandWidgetClass,
222                                   paned,NULL,ZERO);
223
224     XtSetArg(args[0], XtNstring, "This is a test.\n");
225
226     text = XtCreateManagedWidget("text", asciiTextWidgetClass, paned, 
227                                  args, ONE);
228
229     XtAddCallback(clear, XtNcallback, ClearText, (XtPointer) text);
230     XtAddCallback(print, XtNcallback, PrintText, (XtPointer) text);
231     XtAddCallback(quit, XtNcallback, QuitProgram, (XtPointer) app_con);
232     XtAddCallback(getMR, XtNcallback, GetMetsResCallback, (XtPointer) app_con);
233     XtAppAddInput(app_con,fd,(XtPointer) XtInputReadMask,
234                  (XtInputCallbackProc) visi_callback, text); 
235     XtRealizeWidget(toplevel);
236     XtAppMainLoop(app_con);
237 }
238
239 /*      Function Name: ClearText
240  *      Description: This function clears all text out of the text widget.
241  *      Arguments: w - *** UNUSED ***
242  *                 text_ptr - a pointer to the text widget.
243  *                 call_data - *** UNUSED ***.
244  *      Returns: none.
245  */
246
247 /* ARGSUSED */
248 static void ClearText(w,text_ptr,call_data)
249 Widget w;
250 XtPointer text_ptr;
251 XtPointer call_data;
252 {
253     Widget text = (Widget) text_ptr;
254     Arg args[1];
255
256     XtSetArg(args[0], XtNstring, "");
257     XtSetValues(text, args, ONE);
258 }
259
260 /*      Function Name: PrintText
261  *      Description: This function clears all text out of the text widget.
262  *      Arguments: w - *** UNUSED ***
263  *                 text_ptr - a pointer to the text widget.
264  *                 call_data - *** UNUSED ***.
265  *      Returns: none.
266  */
267
268 /* ARGSUSED */
269 static void PrintText(w, text_ptr, call_data)
270 Widget w;
271 XtPointer text_ptr;
272 XtPointer call_data;
273 {
274     Widget text = (Widget) text_ptr;
275     Arg args[1];
276     String str;
277
278     XtSetArg(args[0], XtNstring, &str);
279     XtGetValues(text, args, ONE);
280
281     fprintf(stderr, "Text String is:\n--------\n%s\n--------\n", str);
282 }
283
284 /*      Function Name: QuitProgram
285  *      Description: This function exits the program
286  *      Arguments: w - *** UNUSED ***
287  *                 text_ptr - a pointer to the text widget.
288  *                 call_data - *** UNUSED ***.
289  *      Returns: none.
290  */
291
292 /* ARGSUSED */
293 static void QuitProgram(w,app_con,call_data)
294 Widget w;
295 XtAppContext app_con;
296 XtPointer call_data;
297 {
298     fprintf(stderr, "Bye!\n");
299     XtDestroyApplicationContext(app_con);
300     exit(0);
301 }
302
303 /*      Function Name: Syntax
304  *      Description: Prints a the calling syntax for this function to stdout.
305  *      Arguments: app_con - the application context.
306  *                 call - the name of the application.
307  *      Returns: none - exits tho.
308  */
309
310 static void Syntax(app_con,call)
311 XtAppContext app_con;
312 char *call;
313 {
314     XtDestroyApplicationContext(app_con);
315     fprintf( stderr, "Usage: %s \n", call);
316     exit(1);
317 }
318