source: tags/initial/NTREE/NT_main.cxx

Last change on this file was 2, checked in by oldcode, 23 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.4 KB
Line 
1#include <string.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <malloc.h>
5#include <arbdb.h>
6#include <arbdbt.h>
7
8#include <servercntrl.h>
9#include <aw_root.hxx>
10#include <aw_device.hxx>
11#include <aw_window.hxx>
12#include <aw_awars.hxx>
13#include <awt_canvas.hxx>
14
15#include <awt_tree.hxx>
16#include <awt_dtree.hxx>
17#include <awt.hxx>
18#include <awtc_import.hxx>
19
20#include "ntree.hxx"
21#include "nt_cb.hxx"
22#include <mg_merge.hxx>
23#include <seer.hxx>
24
25AW_HEADER_MAIN
26
27#define NT_SERVE_DB_TIMER 50
28#define NT_CHECK_DB_TIMER 200
29
30GBDATA *gb_main;
31NT_global nt = { 0,0,0};
32
33
34void 
35serve_db_interrupt(AW_root *awr){
36    GB_BOOL succes = GBCMS_accept_calls(gb_main,GB_FALSE);
37    while (succes){
38        awr->check_for_remote_command((AW_default)gb_main,AWAR_NT_REMOTE_BASE);
39        succes = GBCMS_accept_calls(gb_main,GB_TRUE);
40    }
41   
42    awr->add_timed_callback(NT_SERVE_DB_TIMER,(AW_RCB)serve_db_interrupt,0,0);
43}
44
45void 
46check_db_interrupt(AW_root *awr){
47    awr->check_for_remote_command((AW_default)gb_main,AWAR_NT_REMOTE_BASE);
48    awr->add_timed_callback(NT_CHECK_DB_TIMER,(AW_RCB)check_db_interrupt,0,0);
49}
50
51GB_ERROR create_nt_window(AW_root *aw_root){
52        AW_window *aww;
53        GB_ERROR error = GB_request_undo_type(gb_main, GB_UNDO_NONE);
54        if (error) aw_message(error);
55        create_all_awars(aw_root,AW_ROOT_DEFAULT);
56        if (GB_NOVICE){
57            aw_root->set_sensitive(AWM_BASIC);
58        }
59        aww = create_nt_main_window(aw_root,0);
60        aww->show();
61        error = GB_request_undo_type(gb_main, GB_UNDO_UNDO);
62        if (error) aw_message(error);
63        return error;
64}
65
66// after intro
67void nt_main_startup_main_window(AW_root *aw_root){
68    create_nt_window(aw_root);
69
70    if (GB_read_clients(gb_main)==0) {
71        GB_ERROR error = GBCMS_open(":",0,gb_main);
72        if (error) {
73            aw_message(
74                       "THIS PROGRAMM HAS PROBLEMS TO OPEN INTERCLIENT COMMUNICATION !!!\n"
75                       "(MAYBE THERE IS A SERVER RUNNING ALREADY)\n\n"
76                       "You cannot use any EDITOR or other external SOFTWARE with this dataset!");
77        }else{
78            aw_root->add_timed_callback(NT_SERVE_DB_TIMER,(AW_RCB)serve_db_interrupt,0,0);
79        }
80    }else{
81        aw_root->add_timed_callback(NT_CHECK_DB_TIMER,(AW_RCB)check_db_interrupt,0,0);
82    }
83}
84
85int main_load_and_startup_main_window(AW_root *aw_root) // returns 0 when successfull
86{
87
88
89        char *db_server = aw_root->awar(AWAR_DB_PATH)->read_string();
90        gb_main = GBT_open(db_server,"rw","$(ARBHOME)/lib/pts/*");
91
92        if (!gb_main) {
93                aw_message(GB_get_error(),"OK");
94                return -1;
95        }
96
97        aw_root->awar(AWAR_DB_PATH)->write_string(db_server);
98        delete db_server;
99        nt_main_startup_main_window(aw_root);
100
101
102        return 0;
103}
104
105void nt_delete_database(AW_window *aww){
106    char *db_server = aww->get_root()->awar(AWAR_DB_PATH)->read_string();
107    if (strlen(db_server)){
108        if (aw_message(GBS_global_string("Are you sure to delete database %s\nNote: there is no way to undelete it afterwards",db_server),"Delete Database,Cancel") == 0){
109            GB_ERROR error = 0;
110            error = GB_delete_database(db_server);
111            if (error){
112                aw_message(error);
113            }else{
114                aww->get_root()->awar(AWAR_DB"filter")->touch();
115            }
116        }
117    }else{
118        aw_message("No database selected");
119    }
120    delete db_server;
121}
122
123                // after import !!!!!
124void main3(AW_root *aw_root)
125        {
126
127        nt.awr = aw_root;
128        create_nt_window(aw_root);
129
130        if (GB_read_clients(gb_main)==0) {
131                GB_ERROR error = GBCMS_open(":",0,gb_main);
132                if (error) {
133                        aw_message("THIS PROGRAMM IS NOT THE ONLY DB SERVER !!!\nDONT USE ANY ARB PROGRAMM !!!!");
134                }else{
135                        aw_root->add_timed_callback(NT_SERVE_DB_TIMER,
136                                (AW_RCB)serve_db_interrupt,0,0);
137                }
138        }
139        return;
140}
141
142
143
144
145void nt_intro_start_old(AW_window *aws)
146        {
147        aws->hide();
148        if (main_load_and_startup_main_window(aws->get_root())) {
149                aws->show();
150        }
151}
152
153void nt_intro_start_merge(AW_window *aws,AW_root *awr){
154    if (aws) awr = aws->get_root();
155    create_MG_main_window(awr);
156    if (aws) aws->hide();
157}
158
159void nt_intro_start_import(AW_window *aws)
160        {
161        aws->hide();
162        aws->get_root()->awar_string( AWAR_DB"file_name")->write_string( "noname.arb");
163        gb_main = open_AWTC_import_window(aws->get_root(),"",1,(AW_RCB)main3,0,0);
164}
165
166AW_window *nt_create_intro_window(AW_root *awr)
167        {
168        AW_window_simple *aws = new AW_window_simple;
169        aws->init( awr, "ARB_INTRO", "ARB INTRO", 400, 100 );
170        aws->load_xfig("arb_intro.fig");
171
172        aws->callback( (AW_CB0)exit);
173        aws->at("close");
174        aws->create_button("CANCEL","CANCEL","C");                         
175
176        aws->at("help");
177        aws->callback(AW_POPUP_HELP,(AW_CL)"arb_intro.hlp");
178        aws->create_button("HELP","HELP","H");                     
179
180        awt_create_selection_box(aws,"tmp/nt/arbdb");
181
182        aws->button_length(0);
183
184        aws->at("logo");
185        aws->create_button(0,"#logo.bitmap");
186
187
188        aws->button_length(25);
189
190        aws->at("old");
191        aws->callback(nt_intro_start_old);
192        aws->create_button("OPEN_SELECTED","OPEN SELECTED","O");                           
193
194        aws->at("merge");
195        aws->callback((AW_CB1)nt_intro_start_merge,0);
196        aws->create_button("MERGE_TWO_DATABASES","MERGE TWO ARB DATABASES","O");                           
197
198        aws->at("new_complex");
199        aws->callback(nt_intro_start_import);
200        aws->create_button("CREATE_AND_IMPORT","CREATE AND IMPORT","I");                           
201
202        aws->at("novice");
203        aws->create_toggle("NT/GB_NOVICE");
204
205
206        aws->at("del");
207        aws->button_length(15);
208        aws->callback(nt_delete_database);
209        aws->create_button("DELETE_SELECTED","DELETE SELECTED");                           
210        return (AW_window *)aws;
211}
212
213int
214main(int argc, char **argv)
215{
216        AW_root *aw_root;
217        AW_default aw_default;
218
219        const char *db_server =":";
220
221        unsigned long mtime = GB_time_of_file("$(ARBHOME)/lib/message");
222        unsigned long rtime = GB_time_of_file("$(HOME)/.arb_prop/msgtime");
223        if (mtime > rtime){
224            GB_edit("${ARBHOME}/lib/message");
225            system("touch ${HOME}/.arb_prop/msgtime");
226        }
227        aw_initstatus();
228        GB_set_verbose();
229       
230        aw_root = new AW_root;
231        nt.awr = aw_root;
232        aw_default = aw_root->open_default(".arb_prop/ntree.arb");
233        aw_root->init_variables(aw_default);
234        aw_root->init("ARB_NT");
235
236        aw_root->awar_string( AWAR_DB"file_name", "noname.arb", aw_default);
237        aw_root->awar_string( AWAR_DB"directory", "", aw_default);
238        aw_root->awar_string( AWAR_DB"filter", "arb", aw_default);
239        aw_root->awar_string( AWAR_DB"type", "b", aw_default);
240        aw_root->awar_int( "NT/GB_NOVICE",              0, aw_default)  ->add_target_var(&GB_NOVICE);
241
242        if (argc==3) {          // looks like merge
243            MG_create_all_awars(aw_root,aw_default,argv[1],argv[2]);
244            nt_intro_start_merge(0,aw_root);
245            aw_root->main_loop();
246        }
247        if (argc==2) {
248        if (strcmp(argv[1], "--help")==0 || strcmp(argv[1], "-h")==0) {
249            fprintf(stderr,
250                    "\n"
251                    "arb_ntree commandline reference:\n"
252                    "--------------------------------\n"
253                    "\n"
254                    "db.arb             => start ARB_NTREE with database db.arb\n"
255                    "db1.arb db2.arb    => merge databases db1.arb and db2.arb\n"
256                    "-export            => connect to existing ARB server and export database to noname.arb\n"
257                    "w/o arguments      => start database browser\n"
258                    "\n"
259                    );
260           
261            exit(1);
262        }
263       
264       
265                if ( strcmp(argv[1],"-export")==0) {
266                        MG_create_all_awars(aw_root,aw_default,":","noname.arb");
267                        gb_merge = GBT_open(":","rw",0);
268                        if (!gb_merge) {
269                                aw_message(GB_get_error(),"OK");
270                                exit(0);
271                        }
272                        gb_dest = GBT_open("noname.arb","cw",0);
273                       
274                        MG_start_cb2(0,aw_root);
275                        aw_root->main_loop();
276                }
277
278                db_server = argv[1];
279                if (GBT_check_arb_file(db_server)) {
280                        char msg[1024];
281                        sprintf(msg,"Your file is not an original arb file\n%s",
282                    GB_get_error());
283                        switch(aw_message(msg,  "Continue (dangerous),Start Converter,Exit")) {
284                                case 0: break;
285                                case 2: return 0;
286                                case 1:                                 
287                                        gb_main = open_AWTC_import_window(aw_root,db_server, 1,(AW_RCB)main3,0,0);
288                                        aw_root->main_loop();
289                                default:        break;
290                        }
291                }
292        }else{
293            char *latest = GB_find_latest_file(".","/\\.a[r0-9][b0-9]$/");
294            if (latest){
295            int l = strlen(latest);
296            latest[l-1] = 'b';
297            latest[l-2] = 'r';
298            latest[l-3] = 'a';
299            aw_root->awar(AWAR_DB"file_name")->write_string(latest);
300            delete latest;
301            }
302            AW_window *iws;
303            if (nt.window_creator){
304            iws = nt.window_creator(aw_root,0);
305            }else{
306            iws = nt_create_intro_window(aw_root);
307            }
308            iws->show();                       
309            aw_root->main_loop();
310        }
311
312        aw_root->awar(AWAR_DB_PATH)->write_string(db_server);
313
314        if (main_load_and_startup_main_window(aw_root)) return -1;
315        aw_root->main_loop();
316
317        return 0;
318}
Note: See TracBrowser for help on using the repository browser.