test routines for visi library
[dyninst.git] / visi / test / xtext2.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 "../src/visualization.h"
46 //////////////////////////////////
47
48 static void ClearText(Widget w,XtPointer text_ptr,XtPointer call_data);
49 static void PrintText(Widget w,XtPointer text_ptr,XtPointer call_data);
50 static void QuitProgram(Widget w,XtAppContext app_con,XtPointer call_data);
51 static void Syntax(XtAppContext app_con,char *call);
52 //////////////////////////////
53 XtAppContext app_con;
54 Widget toplevel, paned, clear, print, quit, text;
55 Widget getMR, stopMR, phaseN;
56 //////////////////////////////
57
58 // extern int fprintf(), bcopy(), read(), perror(), printf();
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(){
77
78   Arg args[1];
79   XawTextPosition pos;
80   XawTextBlock tb;
81   char buf[100];
82   int i,j,k;
83   int noMetrics,noResources,noBins;
84   int size;
85   float value;
86
87   XtSetArg(args[0], XtNinsertPosition, &pos);
88   XtGetValues(text, args, ONE);
89
90
91   noMetrics = dataGrid.NumMetrics();
92   noResources = dataGrid.NumResources();
93   noBins = dataGrid.NumBins();
94   for(i=0;i < noMetrics; i++)
95    for(j=0;j<noResources;j++){
96     for(k=0;k<noBins;k++){
97       if((value = dataGrid[i][j][k]) != ERROR){
98       sprintf(&buf[0],"%s%d%s%d%s%d%s%f\n","dataGrid[",i,"][",j,"][",k,
99               "] = ",value); 
100       }
101       else{
102         sprintf(&buf[0],"%s%d%s%d%s%d%s\n","dataGrid[",i,"][",j,"][",k ,
103                 "] = NaN"); 
104       }
105       size = strlen(buf);  
106       tb.firstPos = 0;
107       tb.length = size;
108       tb.ptr = buf;
109       tb.format = FMT8BIT;
110       if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
111           fprintf(stderr,"XawTextReplace returned error\n");
112       }
113       pos += size;
114       XtSetArg(args[0], XtNinsertPosition, pos);
115       XtSetValues(text, args, ONE);
116     }
117     
118     sprintf(&buf[0],"\n");
119     size = strlen(buf);  
120     tb.firstPos = 0;
121     tb.length = size;
122     tb.ptr = buf;
123     tb.format = FMT8BIT;
124     if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
125       fprintf(stderr,"XawTextReplace returned error\n");
126     }
127     pos += size;
128     XtSetArg(args[0], XtNinsertPosition, pos);
129     XtSetValues(text, args, ONE);
130   }
131
132 }
133
134 // callback routine for ADDMETRICSRESOURCES
135 int fd_input2(){
136   Arg args[1];
137   XawTextPosition pos;
138   XawTextBlock tb;
139   char buf[100];
140   int size;
141   int noMetrics,noResources,noBins;
142   int aggr;
143   float value;
144
145   XtSetArg(args[0], XtNinsertPosition, &pos);
146   XtGetValues(text, args, ONE);
147   noMetrics = dataGrid.NumMetrics();
148   noResources = dataGrid.NumResources();
149   noBins = dataGrid.NumBins();
150   value  = dataGrid.BinWidth();
151   aggr   = dataGrid.FoldMethod(0);
152   sprintf(&buf[0],"\n%s%d%s%d%s%d%s%f%s%d\n","noMetrics = ",noMetrics,
153          ", no resources = ",noResources,", num Bins = ",noBins,
154          "\nbinWidth = ",value,", Fold Method = ",aggr);
155
156   size = strlen(buf);  
157   tb.firstPos = 0;
158   tb.length = size;
159   tb.ptr = buf;
160   tb.format = FMT8BIT;
161   if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
162     fprintf(stderr,"XawTextReplace returned error\n");
163   }
164   pos += size;
165   XtSetArg(args[0], XtNinsertPosition, pos);
166   XtSetValues(text, args, ONE);
167
168   return(OK);
169 }
170
171 // callback routine for NEWMETRICSRESOURCES, PHASENAME
172 int fd_input3(){
173   Arg args[1];
174   XawTextPosition pos;
175   XawTextBlock tb;
176   char buf[100];
177   int size;
178
179   XtSetArg(args[0], XtNinsertPosition, &pos);
180   XtGetValues(text, args, ONE);
181   sprintf(&buf[0],"\n%s\n",
182   "This operation is not fully supported: only the call is implemented");
183   size = strlen(buf);  
184   tb.firstPos = 0;
185   tb.length = size;
186   tb.ptr = buf;
187   tb.format = FMT8BIT;
188   if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
189     fprintf(stderr,"XawTextReplace returned error\n");
190   }
191   pos += size;
192   XtSetArg(args[0], XtNinsertPosition, pos);
193   XtSetValues(text, args, ONE);
194
195   return(OK);
196 }
197
198 /////////////////////////////////////
199 static void GetMetsRes(Widget w,XtAppContext app_con,XtPointer call_data){
200
201  fprintf(stderr,"@@@@ in GetMetsRes before call\n"); 
202   vp->GetMetricResource(" "," ",0);  
203  fprintf(stderr,"@@@@ in GetMetsRes after call\n"); 
204 }
205
206 static void StopMetsRes(Widget w,XtAppContext app_con,XtPointer call_data){
207
208  fprintf(stderr,"@@@@ in StopMetsRes before call\n"); 
209   vp->StopMetricResource(0,0);  
210  fprintf(stderr,"@@@@ in StopMetsRes after call\n"); 
211 }
212
213 static void PName(Widget w,XtAppContext app_con,XtPointer call_data){
214
215  fprintf(stderr,"@@@@ in PName before call\n"); 
216   vp->PhaseName(0.0,1.0," ");  
217  fprintf(stderr,"@@@@ in PName after call\n"); 
218 }
219 /////////////////////////////////////
220
221
222 int main(int argc,char **argv)
223 {
224  //   XtAppContext app_con;
225  //  Widget toplevel, paned, clear, print, quit, text;
226  Arg args[1];
227
228 /////////////////////////////////////
229 // variables added for paradyn integration 
230     int ok, fd;
231 /////////////////////////////////////
232
233     toplevel = XtAppInitialize(&app_con, "Xtext", NULL, ZERO,
234                                &argc, argv, fallback_resources,
235                                NULL, ZERO);
236
237     /*
238      * Check to see that all arguments were processed, and if not then
239      * report an error and exit.
240      */
241
242     if (argc != 1)              
243         Syntax(app_con, argv[0]);
244
245 //////////////////////////////////////
246 // call VisiInit: step (1) from README file
247
248    if((fd = VisiInit()) < 0){
249          exit(-1);
250     }
251 //////////////////////////////////////
252
253 //////////////////////////////////////
254 // register event callbacks: step (2) from README file
255
256    ok = RegistrationCallback(ADDMETRICSRESOURCES,fd_input2); 
257    ok = RegistrationCallback(DATAVALUES,fd_input); 
258    ok = RegistrationCallback(FOLD,fd_input); 
259    ok = RegistrationCallback(INVALIDMETRICSRESOURCES,fd_input);
260    ok = RegistrationCallback(NEWMETRICSRESOURCES,fd_input3);
261    ok = RegistrationCallback(PHASENAME,fd_input3);
262 //////////////////////////////////////
263
264 //////////////////////////////////////
265 // start visi: get initial metric and resource choices: step (3) from README
266
267    ok = StartVisi(0,0);
268 //////////////////////////////////////
269
270     paned = XtCreateManagedWidget("paned", panedWidgetClass, toplevel, 
271                                   NULL, ZERO);
272     clear = XtCreateManagedWidget("clear", commandWidgetClass, paned, 
273                                   NULL, ZERO);
274     print = XtCreateManagedWidget("print", commandWidgetClass, paned, 
275                                   NULL, ZERO);
276     quit = XtCreateManagedWidget("quit", commandWidgetClass, paned, 
277                                   NULL, ZERO);
278 //////////////////////////////////////
279 // this is for an upcall to Paradyn: step (3a) from README
280
281     getMR = XtCreateManagedWidget("Get Metric Resource",commandWidgetClass,
282                                   paned,NULL,ZERO);
283     stopMR = XtCreateManagedWidget("Stop Metric Resource",commandWidgetClass,
284                                   paned,NULL,ZERO);
285     phaseN = XtCreateManagedWidget("Name a Phase",commandWidgetClass,
286                                   paned,NULL,ZERO);
287
288 //////////////////////////////////////
289
290     XtSetArg(args[0], XtNstring, "This is a test.\n");
291
292     text = XtCreateManagedWidget("text", asciiTextWidgetClass, paned, 
293                                  args, ONE);
294
295     XtAddCallback(clear, XtNcallback, ClearText, (XtPointer) text);
296     XtAddCallback(print, XtNcallback, PrintText, (XtPointer) text);
297     XtAddCallback(quit, XtNcallback, QuitProgram, (XtPointer) app_con);
298
299 ///////////////////////////////////////
300 //  Add callbacks for upcalls to Paradyn: step (3b) from README
301
302     XtAddCallback(getMR, XtNcallback, GetMetsRes, (XtPointer) app_con);
303     XtAddCallback(stopMR, XtNcallback, StopMetsRes, (XtPointer) app_con);
304     XtAddCallback(phaseN, XtNcallback, PName, (XtPointer) app_con);
305 //////////////////////////////////////
306
307 //////////////////////////////////////
308 // register visi_callback routine as callback on events assoc. w/ file desc
309 // step (4) from README file
310
311    XtAppAddInput(app_con,fd,(XtPointer) XtInputReadMask,
312                  (XtInputCallbackProc) visi_callback, text); 
313 //////////////////////////////////////
314
315     XtRealizeWidget(toplevel);
316     XtAppMainLoop(app_con);
317 }
318
319 /*      Function Name: ClearText
320  *      Description: This function clears all text out of the text widget.
321  *      Arguments: w - *** UNUSED ***
322  *                 text_ptr - a pointer to the text widget.
323  *                 call_data - *** UNUSED ***.
324  *      Returns: none.
325  */
326
327 /* ARGSUSED */
328 static void ClearText(Widget w,XtPointer text_ptr,XtPointer call_data)
329 {
330     Widget text = (Widget) text_ptr;
331     Arg args[1];
332
333     XtSetArg(args[0], XtNstring, "");
334     XtSetValues(text, args, ONE);
335 }
336
337 /*      Function Name: PrintText
338  *      Description: This function clears all text out of the text widget.
339  *      Arguments: w - *** UNUSED ***
340  *                 text_ptr - a pointer to the text widget.
341  *                 call_data - *** UNUSED ***.
342  *      Returns: none.
343  */
344
345 /* ARGSUSED */
346 static void PrintText(Widget w,XtPointer text_ptr,XtPointer call_data)
347 {
348     Widget text = (Widget) text_ptr;
349     Arg args[1];
350     String str;
351
352     XtSetArg(args[0], XtNstring, &str);
353     XtGetValues(text, args, ONE);
354
355     fprintf(stderr, "Text String is:\n--------\n%s\n--------\n", str);
356 }
357
358 /*      Function Name: QuitProgram
359  *      Description: This function exits the program
360  *      Arguments: w - *** UNUSED ***
361  *                 text_ptr - a pointer to the text widget.
362  *                 call_data - *** UNUSED ***.
363  *      Returns: none.
364  */
365
366 /* ARGSUSED */
367 static void QuitProgram(Widget w,XtAppContext app_con,XtPointer call_data)
368 {
369     fprintf(stderr, "Bye!\n");
370     XtDestroyApplicationContext(app_con);
371     exit(0);
372 }
373
374 /*      Function Name: Syntax
375  *      Description: Prints a the calling syntax for this function to stdout.
376  *      Arguments: app_con - the application context.
377  *                 call - the name of the application.
378  *      Returns: none - exits tho.
379  */
380
381 static void Syntax(XtAppContext app_con,char *call)
382 {
383     XtDestroyApplicationContext(app_con);
384     fprintf( stderr, "Usage: %s \n", call);
385     exit(1);
386 }
387