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