2eb4f5cdbe396ae6405431551faa92474f80480a
[mussa.git] / mussa.cc
1 #include "mussa_gui_conn_window.hh"
2
3
4 char
5 parse_args(int argc, char **argv, string *a_file_path, int *window, 
6            int *threshold, char *ana_mode, float *ent_thres);
7
8
9 int main(int argc, char **argv) 
10 {
11   Mussa an_analysis;
12   string a_file_path;
13   char * picked_file;
14   int window, threshold;
15   float ent_thres;
16   char run_mode, ana_mode;
17   int x_max=1000;
18   int y_max=500;
19   string err_msg;
20
21
22   err_msg = "";
23
24   // yeah, its horrible to be passing these by reference, but I just don't see
25   // any other way without making parse_args part of MussaClass, which just
26   // seems wrong (args are after all, an io type thing, and the gui only mode
27   // will have it own way as well...
28   run_mode = parse_args(argc, argv, &a_file_path, &window, &threshold,
29                         &ana_mode, &ent_thres);
30
31   cout << "mussa: run mode = " << run_mode;
32   cout << "\tfile_path = "<< a_file_path << endl;
33   cout << "mussa: ent_thres = " << ent_thres << endl;
34
35   // if no error from parse args (run_mode = 'e', ie error), run in proper mode
36   if (run_mode != 'e')
37   {
38     if ((run_mode == 'f') || (run_mode == 'n'))
39     {
40       err_msg = an_analysis.load_mupa_file(a_file_path);
41       err_msg = an_analysis.analyze(window, threshold, ana_mode, ent_thres);
42       //an_overlord.do_analysis();
43     }
44
45     if (run_mode == 'v')
46       err_msg = an_analysis.load(a_file_path);
47       //an_overlord.get_analysis();
48
49     // no longer needed, but still semi-useful reality check...
50     if (run_mode == 'g')
51     {
52       cout << "GTV - All Gui, All the Time\n";
53     }
54
55     if (err_msg == "")
56     {
57       if  ((run_mode == 'f') || (run_mode == 'v') || (run_mode == 'g'))
58       {
59         //an_overlord.spawnConnView(1000,500);
60         ConnWindow *a_conn_win = new ConnWindow(x_max, y_max, "Mussa");
61
62         // we have an analysis already if in these 2 modes
63         if  ((run_mode == 'f') || (run_mode == 'v'))
64           a_conn_win->add_ana(&an_analysis);
65
66         Fl::run();
67       }
68     }
69     else
70       cout << err_msg << endl;
71   }
72 }
73
74
75 // minimal arg reading function, not very robust to errors
76 char
77 parse_args(int argc, char **argv, string *a_file_path, int *window, 
78            int *threshold, char *ana_mode, float *ent_thres)
79 {
80   int i, else_i;
81   string an_arg;
82   char run_mode;
83
84   // initialize these to 0 as flag if they are not changed
85   *window = 0;
86   *threshold = 0;
87   *ent_thres = 0.0;
88   run_mode = 'e'; //error default if no run mode set implicitly or explicitly
89   *ana_mode = 't'; // default to transitivie analyses mode
90
91
92  
93   // no args means gui only mode
94   if (argc == 1)
95     run_mode = 'g';
96   // 1 arg means its a mupa file and run in full mode
97   /*
98   else if (argc == 2)
99   {
100   }
101   */
102   else
103   {
104     else_i = 0;
105     i = 1;
106     while (i < argc)
107     {
108       an_arg = * ++argv;
109       i++;
110
111       // see what alternate mode the user wants to run in
112       if (an_arg == "-m")
113       {
114         an_arg = * ++argv;
115         i++;
116         if ( (an_arg == "v") || (an_arg == "n") ) //only 2 valid modes so far
117           run_mode = an_arg[0];
118         else
119         {
120           cout << "Error: \'" << an_arg;
121           cout << "\' is not a valid analysis mode for -a argument" << endl; 
122           run_mode = 'e';
123         }
124         *a_file_path = * ++argv;
125         i++;
126       }
127       // alternate analyses modes
128       else if (an_arg == "-a")
129       {
130         an_arg = * ++argv;
131         i++;
132         // t = transitive, r = radial, e = entropy
133         if ( (an_arg == "t") || (an_arg == "r") || (an_arg == "e") )
134           *ana_mode = an_arg[0];
135         else
136         {
137           cout << "Error: \'" << an_arg;
138           cout << "\' is not a valid run mode for -m argument" << endl; 
139           run_mode = 'e';
140         }
141
142       }
143       else if (an_arg == "-w") // alternate window size arg
144       {
145         *window = atoi(* ++argv);
146         i++;
147       }
148       else if (an_arg == "-t") // alternate threshold arg
149       {
150         *threshold = atoi(* ++argv);
151         i++;
152       }
153       else if (an_arg == "-et") // alternate entropy threshold arg
154       {
155         *ent_thres = atof(* ++argv);
156         i++;
157       }
158       else
159       {
160         if (else_i == 0)
161         {
162           *a_file_path = an_arg;
163           run_mode = 'f';
164           else_i++;
165         }
166         else
167         {
168           //cout << "Error, unknown arg: \'" << an_arg << "\'" << endl;
169           cout << "Error, too many filenames: \'" << an_arg << "\'" << endl;
170           run_mode == 'e';
171         }
172       }
173     }
174   }
175
176   return run_mode;
177 }
178
179
180 /*
181       cout << "fee\n";
182       cout << "fie\n";
183       cout << "foe\n";
184       cout << "fum\n";
185 */