*** empty log message ***
[dyninst.git] / visi / test / xtext.C
1 /* $Log: xtext.C,v $
2 /* Revision 1.5  1994/04/13 21:21:50  newhall
3 /* *** empty log message ***
4 /*
5  * Revision 1.4  1994/03/26  04:37:08  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 //////////////////////////////
61 XtAppContext app_con;
62 Widget toplevel, paned, clear, print, quit, text;
63 Widget getMR;
64 //////////////////////////////
65
66 // extern int fprintf(), bcopy(), read(), perror(), printf();
67
68 String fallback_resources[] = { 
69     "*input:                            True",
70     "*showGrip:                         off",
71     "?.?.text.preferredPaneSize:        200", 
72     "?.?.text.width:                    200", 
73     "?.?.text.textSource.editType:      edit",
74     "?.?.text.scrollVertical:           whenNeeded",
75     "?.?.text.scrollHorizontal:         whenNeeded",
76     "?.?.text.autoFill:                 on",
77     "*clear*label:            Clear",
78     "*print*label:            Print",
79     "*quit*label:              Quit",
80     NULL,
81 };
82  
83 /////////////////////////////////////////////////////////////
84 //void fd_input(XtPointer client_data,int *fid,XtInputId *id)
85 //{
86 //  Widget text = (Widget) client_data;
87 //  Arg args[1];
88 //  XawTextPosition pos;
89 //  XawTextBlock tb;
90 //  char buf[10000];
91 //  int nbytes;
92 //
93 //  XtSetArg(args[0], XtNinsertPosition, &pos);
94 //  XtGetValues(text, args, ONE);
95 //
96 //  if ((nbytes = read(*fid, buf, BUFSIZ)) == -1)
97 //    perror("fd_input");
98 //  else if (nbytes > 0) {
99 //    tb.firstPos = 0;
100 //    tb.length = nbytes;
101 //    tb.ptr = buf;
102 //    tb.format = FMT8BIT;
103 //
104 //    if (XawTextReplace(text,pos,pos+nbytes-1,&tb) != XawEditDone) {
105 //      fprintf(stderr,"XawTextReplace returned error\n");
106 //    }
107 //
108 //    pos += nbytes;
109 //    XtSetArg(args[0], XtNinsertPosition, pos);
110 //    XtSetValues(text, args, ONE);
111 //  }
112 //}
113
114 // callback routine for FOLD and DATAVALUES 
115 int fd_input(int dummy){
116
117   Arg args[1];
118   XawTextPosition pos;
119   XawTextBlock tb;
120   char buf[100];
121   int i,j,k;
122   int noMetrics,noResources,noBins;
123   int size;
124   double value;
125
126   XtSetArg(args[0], XtNinsertPosition, &pos);
127   XtGetValues(text, args, ONE);
128
129
130   noMetrics = dataGrid.NumMetrics();
131   noResources = dataGrid.NumResources();
132   noBins = dataGrid.NumBins();
133   for(i=0;i < noMetrics; i++)
134    for(j=0;j<noResources;j++){
135     for(k=0;k<noBins;k++){
136       if((value = dataGrid[i][j][k]) != ERROR){
137       sprintf(&buf[0],"%s%d%s%d%s%d%s%lf\n","dataGrid[",i,"][",j,"][",k,
138               "] = ",value); 
139       }
140       else{
141         sprintf(&buf[0],"%s%d%s%d%s%d%s\n","dataGrid[",i,"][",j,"][",k ,
142                 "] = NaN"); 
143       }
144       size = strlen(buf);  
145       tb.firstPos = 0;
146       tb.length = size;
147       tb.ptr = buf;
148       tb.format = FMT8BIT;
149       if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
150           fprintf(stderr,"XawTextReplace returned error\n");
151       }
152       pos += size;
153       XtSetArg(args[0], XtNinsertPosition, pos);
154       XtSetValues(text, args, ONE);
155     }
156     
157     sprintf(&buf[0],"\n");
158     size = strlen(buf);  
159     tb.firstPos = 0;
160     tb.length = size;
161     tb.ptr = buf;
162     tb.format = FMT8BIT;
163     if (XawTextReplace(text,pos,pos+size-1,&tb) != XawEditDone) {
164       fprintf(stderr,"XawTextReplace returned error\n");
165     }
166     pos += size;
167     XtSetArg(args[0], XtNinsertPosition, pos);
168     XtSetValues(text, args, ONE);
169   }
170
171 }
172
173 // callback routine for ADDMETRICSRESOURCES
174 int fd_input2(int dummy){
175   Arg args[1];
176   XawTextPosition pos;
177   XawTextBlock tb;
178   char buf[100];
179   int size;
180   int noMetrics,noResources,noBins;
181   int aggr;
182   double value;
183
184   XtSetArg(args[0], XtNinsertPosition, &pos);
185   XtGetValues(text, args, ONE);
186   noMetrics = dataGrid.NumMetrics();
187   noResources = dataGrid.NumResources();
188   noBins = dataGrid.NumBins();
189   value  = dataGrid.BinWidth();
190   aggr   = dataGrid.FoldMethod(0);
191   sprintf(&buf[0],"\n%s%d%s%d%s%d%s%lf%s%d\n","noMetrics = ",noMetrics,
192          ", no resources = ",noResources,", num Bins = ",noBins,
193          "\nbinWidth = ",value,", Fold Method = ",aggr);
194
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
212 /////////////////////////////////////
213 //
214 static void GetMetsRes(Widget w,XtAppContext app_con,XtPointer call_data){
215
216   GetMetsRes(NULL,NULL,0);  
217 }
218 /////////////////////////////////////
219
220
221
222
223 int main(int argc,char **argv)
224 {
225  //   XtAppContext app_con;
226  //  Widget toplevel, paned, clear, print, quit, text;
227  Arg args[1];
228
229 //////////////////////////////////////
230 // variables added for paradyn integration 
231     int ok, fd;
232 //////////////////////////////////////
233
234     toplevel = XtAppInitialize(&app_con, "Xtext", NULL, ZERO,
235                                &argc, argv, fallback_resources,
236                                NULL, ZERO);
237
238     /*
239      * Check to see that all arguments were processed, and if not then
240      * report an error and exit.
241      */
242
243     if (argc != 1)              
244         Syntax(app_con, argv[0]);
245
246 //////////////////////////////////////
247 // call VisiInit: step (1) from README file
248
249    if((fd = VisiInit()) < 0){
250          exit(-1);
251     }
252 //////////////////////////////////////
253
254
255 //////////////////////////////////////
256 // register event callbacks: step (2) from README file
257
258    ok = RegistrationCallback(ADDMETRICSRESOURCES,fd_input2); 
259    ok = RegistrationCallback(DATAVALUES,fd_input); 
260    ok = RegistrationCallback(FOLD,fd_input); 
261
262 // start visi: get initial metric and resource choices: step (3) from README
263
264    ok = StartVisi(0,0);
265 //////////////////////////////////////
266
267     paned = XtCreateManagedWidget("paned", panedWidgetClass, toplevel, 
268                                   NULL, ZERO);
269     clear = XtCreateManagedWidget("clear", commandWidgetClass, paned, 
270                                   NULL, ZERO);
271     print = XtCreateManagedWidget("print", commandWidgetClass, paned, 
272                                   NULL, ZERO);
273     quit = XtCreateManagedWidget("quit", commandWidgetClass, paned, 
274                                   NULL, ZERO);
275
276 //////////////////////////////////////
277 // this is for an upcall to Paradyn: step (3a) from README
278
279     getMR = XtCreateManagedWidget("Get Metric Resource",commandWidgetClass,
280                                   paned,NULL,ZERO);
281 //////////////////////////////////////
282
283
284     XtSetArg(args[0], XtNstring, "This is a test.\n");
285
286     text = XtCreateManagedWidget("text", asciiTextWidgetClass, paned, 
287                                  args, ONE);
288
289     XtAddCallback(clear, XtNcallback, ClearText, (XtPointer) text);
290     XtAddCallback(print, XtNcallback, PrintText, (XtPointer) text);
291     XtAddCallback(quit, XtNcallback, QuitProgram, (XtPointer) app_con);
292
293 ///////////////////////////////////////
294 //  Add callbacks for upcalls to Paradyn: step (3b) from README
295
296     XtAddCallback(getMR, XtNcallback, GetMetsRes, (XtPointer) app_con);
297 //////////////////////////////////////
298
299 //////////////////////////////////////
300 // register function to handle that input 
301 //    XtAppAddInput(app_con, fileno(stdin), (XtPointer) XtInputReadMask, 
302 //                (XtInputCallbackProc) fd_input, text);
303 //////////////////////////////////////
304
305
306 //////////////////////////////////////
307 // register visi_callback routine as callback on events assoc. w/ file desc
308 // step (4) from README file
309
310    XtAppAddInput(app_con,fd,(XtPointer) XtInputReadMask,
311                  (XtInputCallbackProc) visi_callback, text); 
312 //////////////////////////////////////
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