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