First version of new table visi
[dyninst.git] / visiClients / tableVisi / src / main.C
1 // main.C
2 // Ariel Tamches
3
4 /*
5  * $Log: main.C,v $
6  * Revision 1.1  1995/11/04 00:44:36  tamches
7  * First version of new table visi
8  *
9  */
10
11 #include <assert.h>
12 #include <stdlib.h>
13 #include <iostream.h>
14 #include "tclclean.h"
15 #include "tkclean.h"
16 #include "tkTools.h"
17
18 #include "dg2.h"
19 #include "tableVisi.h"
20 #include "tableVisiTcl.h"
21
22 Tcl_Interp *mainInterp;
23 Tk_Window   mainTkWindow;
24
25 void panic(const char *msg) {
26    cerr << msg << endl;
27    exit(5);
28 }
29
30 tableVisi *theTableVisi; // our main data structure
31 bool xsynch_flag=false;
32
33 int main(int argc, char **argv) {
34    if (argc==2 && 0==strcmp(argv[1], "--debug")) {
35       xsynch_flag = true;
36       cout << "tableVisi at sigpause...pid=" << getpid() << endl;
37       sigpause(0);
38       argc = 1;
39    }
40
41    // tableVisi requires no arguments, thanks to tcl2c.
42    if (argc == 3)
43       cout << "tableVisi notice: argc should no longer be 3 (ignoring args)" << endl;
44
45    if (argc == 2 || argc>3)
46       panic("tableVisi: incorrect #args (should be none)");
47
48    mainInterp = Tcl_CreateInterp();
49    assert(mainInterp);
50
51    mainTkWindow = Tk_CreateMainWindow(mainInterp, NULL,
52                                       "tableVisi",
53                                       "TableVisi");
54    if (mainTkWindow == NULL)
55       tclpanic(mainInterp, "Could not Tk_CreateMainWindow()");
56
57    if (xsynch_flag) {
58       cout << "xsynching..." << endl;
59       XSynchronize(Tk_Display(mainTkWindow), 1);
60    }
61
62    if (TCL_OK != Tcl_Init(mainInterp))
63       tclpanic(mainInterp, "Could not Tcl_Init");
64
65    if (TCL_OK != Tk_Init(mainInterp))
66       tclpanic(mainInterp, "Could not Tk_Init");
67
68    if (TCL_OK != Dg2_Init(mainInterp))
69       tclpanic(mainInterp, "Could not Dg2_Init");
70
71    Tcl_SetVar(mainInterp, "tcl_interactive", "0", TCL_GLOBAL_ONLY);
72
73    // Install our new tcl commands here:
74    installTableVisiCommands(mainInterp);
75
76    // Krishna's tcl2c stuff:
77    extern int initialize_tcl_sources(Tcl_Interp *);
78    if (TCL_OK != initialize_tcl_sources(mainInterp))
79       tclpanic(mainInterp, "tableVisi: could not initialize_tcl_sources");
80
81 //if (Tcl_EvalFile(mainInterp, "/p/paradyn/development/tamches/core/visiClients/tableVisi/tcl/tableVisi.tcl") != TCL_OK)
82 //   tclpanic(mainInterp, "could not open tableVisi.tcl");
83
84    // Create our main data structure:
85    theTableVisi = new tableVisi(mainInterp,
86                                 Tk_NameToWindow(mainInterp, ".body", mainTkWindow),
87                                 "*-Helvetica-*-r-*-14-*", // metric font
88                                 "*-Helvetica-*-r-*-12-*", // metric units font
89                                 "*-Helvetica-*-r-*-14-*", // focus font
90                                 "*-Helvetica-*-r-*-12-*", // cell font
91                                 "lightBlue", // line color
92                                 "blue", // metric color
93                                 "black", // metric units color
94                                 "tomato", // focus color
95                                 "black", // cell color
96                                 "gray", // background color
97                                 2 // initial # sig figs
98                                 );
99    assert(theTableVisi);
100
101    Tk_MainLoop(); // returns when all tk windows are closed
102
103    delete theTableVisi;
104
105    // cleanup (uninstall tcl commands, etc.):
106    unInstallTableVisiCommands(mainInterp);
107 }