modified command line args to psuedoparadyn
[dyninst.git] / visi / test / xtext2.C
1 /* $Log: xtext2.C,v $
2 /* Revision 1.6  1994/06/08 17:34:55  newhall
3 /* *** empty log message ***
4 /*
5  * Revision 1.5  1994/04/13  21:21:54  newhall
6  * *** empty log message ***
7  *
8  * Revision 1.4  1994/03/26  04:37:11  newhall
9  * change all floats to double
10  * */
11 /*
12  * xtext.c
13  *
14  * This an example of how to use the Text and Paned widgets.
15  *
16  * November 14, 1989 - Chris D. Peterson 
17  *
18  * Updated to also demonstrate XtAppAddInput() -- Bruce Irvin 3/8/94
19  */
20
21 /*
22  * $XConsortium: xtext.c,v 1.16 91/05/16 14:56:23 swick Exp $
23  *
24  * Copyright 1989 Massachusetts Institute of Technology
25  *
26  * Permission to use, copy, modify, distribute, and sell this software and its
27  * documentation for any purpose is hereby granted without fee, provided that
28  * the above copyright notice appear in all copies and that both that
29  * copyright notice and this permission notice appear in supporting
30  * documentation, and that the name of M.I.T. not be used in advertising or
31  * publicity pertaining to distribution of the software without specific,
32  * written prior permission.  M.I.T. makes no representations about the
33  * suitability of this software for any purpose.  It is provided "as is"
34  * without express or implied warranty.
35  *
36  * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
37  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T.
38  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
39  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
40  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 
41  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
42  */
43
44 #include <stdio.h>
45 #include <X11/Intrinsic.h>
46 #include <X11/StringDefs.h>
47
48 #include <X11/Xaw/AsciiText.h>
49 #include <X11/Xaw/Command.h>
50 #include <X11/Xaw/Paned.h>
51
52 #include <X11/Xaw/Cardinals.h>
53
54 //////////////////////////////////
55 #include "../h/visualization.h"
56 //////////////////////////////////
57
58 static void ClearText(Widget w,XtPointer text_ptr,XtPointer call_data);
59 static void PrintText(Widget w,XtPointer text_ptr,XtPointer call_data);
60 static void QuitProgram(Widget w,XtAppContext app_con,XtPointer call_data);
61 static void Syntax(XtAppContext app_con,char *call);
62 //////////////////////////////
63 XtAppContext app_con;
64 Widget toplevel, paned, clear, print, quit, text;
65 Widget getMR, stopMR, phaseN;
66 //////////////////////////////
67
68 // extern int fprintf(), bcopy(), read(), perror(), printf();
69
70 String fallback_resources[] = { 
71     "*input:                            True",
72     "*showGrip:                         off",
73     "?.?.text.preferredPaneSize:        200", 
74     "?.?.text.width:                    200", 
75     "?.?.text.textSource.editType:      edit",
76     "?.?.text.scrollVertical:           whenNeeded",
77     "?.?.text.scrollHorizontal:         whenNeeded",
78     "?.?.text.autoFill:                 on",
79     "*clear*label:            Clear",
80     "*print*label:            Print",
81     "*quit*label:              Quit",
82     NULL,
83 };
84  
85 // callback routine for FOLD and DATAVALUES 
86 int fd_input(int dummy){
87
88   Arg args[1];
89   XawTextPosition pos;
90   XawTextBlock tb;
91   char buf[100];
92   int i,j,k;
93   int noMetrics,noResources,noBins;
94   int size;
95   double value;
96
97   XtSetArg(args[0], XtNinsertPosition, &pos);
98   XtGetValues(text, args, ONE);
99
100
101   fprintf(stderr,"@@@@ in callback for datavalues and fold\n");
102   noMetrics = dataGrid.NumMetrics();
103   noResources = dataGrid.NumResources();
104   noBins = dataGrid.NumBins();
105   for(i=0;i < noMetrics; i++)
106    for(j=0;j<noResources;j++){
107     for(k=0;k<noBins;k++){
108       if((value = dataGrid[i][j][k]) != ERROR){
109       sprintf(&buf[0],"%s%d%s%d%s%d%s%lf\n","dataGrid[",i,"][",j,"][",k,
110               "] = ",value); 
111       }
112       else{
113         sprintf(&buf[0],"%s%d%s%d%s%d%s\n","dataGrid[",i,"][",j,"][",k ,
114                 "] = NaN"); 
115       }
116       size = strlen(buf);  
117       tb.firstPos = 0;
118       tb.length = size;
119       tb.ptr = buf;
120       tb.format = FMT8BIT;
121       if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
122           fprintf(stderr,"XawTextReplace returned error\n");
123       }
124       pos += size;
125       XtSetArg(args[0], XtNinsertPosition, pos);
126       XtSetValues(text, args, ONE);
127     }
128
129     sprintf(&buf[0],"\n");
130     size = strlen(buf);  
131     tb.firstPos = 0;
132     tb.length = size;
133     tb.ptr = buf;
134     tb.format = FMT8BIT;
135     if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
136       fprintf(stderr,"XawTextReplace returned error\n");
137     }
138     pos += size;
139     XtSetArg(args[0], XtNinsertPosition, pos);
140     XtSetValues(text, args, ONE);
141   }
142
143
144 }
145
146 // callback routine for ADDMETRICSRESOURCES
147 int fd_input2(int dummy){
148   Arg args[1];
149   XawTextPosition pos;
150   XawTextBlock tb;
151   char buf[100];
152   int size;
153   int noMetrics,noResources,noBins;
154   int aggr;
155   double value;
156
157   fprintf(stderr,"@@@@ in callback for ADDMETRICSRESOURCES\n");
158   XtSetArg(args[0], XtNinsertPosition, &pos);
159   XtGetValues(text, args, ONE);
160   noMetrics = dataGrid.NumMetrics();
161   noResources = dataGrid.NumResources();
162   noBins = dataGrid.NumBins();
163   value  = dataGrid.BinWidth();
164   aggr   = dataGrid.FoldMethod(0);
165   sprintf(&buf[0],"\n%s%d%s%d%s%d%s%lf%s%d\n","noMetrics = ",noMetrics,
166          ", no resources = ",noResources,", num Bins = ",noBins,
167          "\nbinWidth = ",value,", Fold Method = ",aggr);
168
169   size = strlen(buf);  
170   tb.firstPos = 0;
171   tb.length = size;
172   tb.ptr = buf;
173   tb.format = FMT8BIT;
174   if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
175     fprintf(stderr,"XawTextReplace returned error\n");
176   }
177   pos += size;
178   XtSetArg(args[0], XtNinsertPosition, pos);
179   XtSetValues(text, args, ONE);
180   return(OK);
181 }
182
183 // callback routine for NEWMETRICSRESOURCES, PHASENAME
184 int fd_input3(int dummy){
185   Arg args[1];
186   XawTextPosition pos;
187   XawTextBlock tb;
188   char buf[100];
189   int size;
190
191   XtSetArg(args[0], XtNinsertPosition, &pos);
192   XtGetValues(text, args, ONE);
193   sprintf(&buf[0],"\n%s\n",
194   "This operation is not fully supported: only the call is implemented");
195   size = strlen(buf);  
196   tb.firstPos = 0;
197   tb.length = size;
198   tb.ptr = buf;
199   tb.format = FMT8BIT;
200   if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
201     fprintf(stderr,"XawTextReplace returned error\n");
202   }
203   pos += size;
204   XtSetArg(args[0], XtNinsertPosition, pos);
205   XtSetValues(text, args, ONE);
206
207   return(OK);
208 }
209
210 /////////////////////////////////////
211 static void GetMetsRes(Widget w,XtAppContext app_con,XtPointer call_data){
212
213  fprintf(stderr,"@@@@ in GetMetsRes upcall\n"); 
214   GetMetsRes(NULL,NULL,0);  
215 }
216
217 static void StopMetsRes(Widget w,XtAppContext app_con,XtPointer call_data){
218
219  fprintf(stderr,"@@@@ in StopMetsRes upcall\n"); 
220   
221   StopMetRes(0,0);  
222 }
223
224 static void PName(Widget w,XtAppContext app_con,XtPointer call_data){
225
226  fprintf(stderr,"@@@@ in PName upcall\n"); 
227   NamePhase(0.0,1.0," ");  
228 }
229 /////////////////////////////////////
230
231
232 int main(int argc,char **argv)
233 {
234  //   XtAppContext app_con;
235  //  Widget toplevel, paned, clear, print, quit, text;
236  Arg args[1];
237
238 /////////////////////////////////////
239 // variables added for paradyn integration 
240     int ok, fd;
241 /////////////////////////////////////
242
243     toplevel = XtAppInitialize(&app_con, "Xtext", NULL, ZERO,
244                                &argc, argv, fallback_resources,
245                                NULL, ZERO);
246
247     /*
248      * Check to see that all arguments were processed, and if not then
249      * report an error and exit.
250      */
251
252     if (argc != 1)              
253         Syntax(app_con, argv[0]);
254
255 //////////////////////////////////////
256 // call VisiInit: step (1) from README file
257
258    if((fd = VisiInit()) < 0){
259          exit(-1);
260     }
261 //////////////////////////////////////
262
263 //////////////////////////////////////
264 // register event callbacks: step (2) from README file
265
266    ok = RegistrationCallback(ADDMETRICSRESOURCES,fd_input2); 
267    ok = RegistrationCallback(DATAVALUES,fd_input); 
268    ok = RegistrationCallback(FOLD,fd_input); 
269    ok = RegistrationCallback(INVALIDMETRICSRESOURCES,fd_input);
270    ok = RegistrationCallback(NEWMETRICSRESOURCES,fd_input3);
271    ok = RegistrationCallback(PHASENAME,fd_input3);
272 //////////////////////////////////////
273
274 //////////////////////////////////////
275 // start visi: get initial metric and resource choices: step (3) from README
276
277 //   ok = StartVisi(0,0);
278 //////////////////////////////////////
279
280     paned = XtCreateManagedWidget("paned", panedWidgetClass, toplevel, 
281                                   NULL, ZERO);
282     clear = XtCreateManagedWidget("clear", commandWidgetClass, paned, 
283                                   NULL, ZERO);
284     print = XtCreateManagedWidget("print", commandWidgetClass, paned, 
285                                   NULL, ZERO);
286     quit = XtCreateManagedWidget("quit", commandWidgetClass, paned, 
287                                   NULL, ZERO);
288 //////////////////////////////////////
289 // this is for an upcall to Paradyn: step (3a) from README
290
291     getMR = XtCreateManagedWidget("Get Metric Resource",commandWidgetClass,
292                                   paned,NULL,ZERO);
293     stopMR = XtCreateManagedWidget("Stop Metric Resource",commandWidgetClass,
294                                   paned,NULL,ZERO);
295     phaseN = XtCreateManagedWidget("Name a Phase",commandWidgetClass,
296                                   paned,NULL,ZERO);
297
298 //////////////////////////////////////
299
300     XtSetArg(args[0], XtNstring, "This is a test.\n");
301
302     text = XtCreateManagedWidget("text", asciiTextWidgetClass, paned, 
303                                  args, ONE);
304
305     XtAddCallback(clear, XtNcallback, ClearText, (XtPointer) text);
306     XtAddCallback(print, XtNcallback, PrintText, (XtPointer) text);
307     XtAddCallback(quit, XtNcallback, QuitProgram, (XtPointer) app_con);
308
309 ///////////////////////////////////////
310 //  Add callbacks for upcalls to Paradyn: step (3b) from README
311
312     XtAddCallback(getMR, XtNcallback, GetMetsRes, (XtPointer) app_con);
313     XtAddCallback(stopMR, XtNcallback, StopMetsRes, (XtPointer) app_con);
314     XtAddCallback(phaseN, XtNcallback, PName, (XtPointer) app_con);
315 //////////////////////////////////////
316
317 //////////////////////////////////////
318 // register visi_callback routine as callback on events assoc. w/ file desc
319 // step (4) from README file
320
321    XtAppAddInput(app_con,fd,(XtPointer) XtInputReadMask,
322                  (XtInputCallbackProc) visi_callback, text); 
323 //////////////////////////////////////
324
325     XtRealizeWidget(toplevel);
326     XtAppMainLoop(app_con);
327 }
328
329 /*      Function Name: ClearText
330  *      Description: This function clears all text out of the text widget.
331  *      Arguments: w - *** UNUSED ***
332  *                 text_ptr - a pointer to the text widget.
333  *                 call_data - *** UNUSED ***.
334  *      Returns: none.
335  */
336
337 /* ARGSUSED */
338 static void ClearText(Widget w,XtPointer text_ptr,XtPointer call_data)
339 {
340     Widget text = (Widget) text_ptr;
341     Arg args[1];
342
343     XtSetArg(args[0], XtNstring, "");
344     XtSetValues(text, args, ONE);
345 }
346
347 /*      Function Name: PrintText
348  *      Description: This function clears all text out of the text widget.
349  *      Arguments: w - *** UNUSED ***
350  *                 text_ptr - a pointer to the text widget.
351  *                 call_data - *** UNUSED ***.
352  *      Returns: none.
353  */
354
355 /* ARGSUSED */
356 static void PrintText(Widget w,XtPointer text_ptr,XtPointer call_data)
357 {
358     Widget text = (Widget) text_ptr;
359     Arg args[1];
360     String str;
361
362     XtSetArg(args[0], XtNstring, &str);
363     XtGetValues(text, args, ONE);
364
365     fprintf(stderr, "Text String is:\n--------\n%s\n--------\n", str);
366 }
367
368 /*      Function Name: QuitProgram
369  *      Description: This function exits the program
370  *      Arguments: w - *** UNUSED ***
371  *                 text_ptr - a pointer to the text widget.
372  *                 call_data - *** UNUSED ***.
373  *      Returns: none.
374  */
375
376 /* ARGSUSED */
377 static void QuitProgram(Widget w,XtAppContext app_con,XtPointer call_data)
378 {
379     fprintf(stderr, "Bye!\n");
380     XtDestroyApplicationContext(app_con);
381     exit(0);
382 }
383
384 /*      Function Name: Syntax
385  *      Description: Prints a the calling syntax for this function to stdout.
386  *      Arguments: app_con - the application context.
387  *                 call - the name of the application.
388  *      Returns: none - exits tho.
389  */
390
391 static void Syntax(XtAppContext app_con,char *call)
392 {
393     XtDestroyApplicationContext(app_con);
394     fprintf( stderr, "Usage: %s \n", call);
395     exit(1);
396 }
397