1 /* UtilsInterface.c */
2 /**********************************************************************************************************
3 Copyright (c) 2002-2013 Abdul-Rahman Allouche. All rights reserved
4 
5 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
6 documentation files (the Gabedit), to deal in the Software without restriction, including without limitation
7 the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
8 and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9 
10   The above copyright notice and this permission notice shall be included in all copies or substantial portions
11   of the Software.
12 
13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
14 TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
15 THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
16 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17 DEALINGS IN THE SOFTWARE.
18 ************************************************************************************************************/
19 
20 
21 #include "../../Config.h"
22 #include <stdlib.h>
23 #include <ctype.h>
24 #include <unistd.h>
25 
26 #include "../Common/Global.h"
27 #include "../Utils/Constants.h"
28 #include "../Gaussian/GaussGlobal.h"
29 #include "../Files/FileChooser.h"
30 #include "../Gamess/Gamess.h"
31 #include "../FireFly/FireFly.h"
32 #include "../Molcas/Molcas.h"
33 #include "../Molpro/Molpro.h"
34 #include "../MPQC/MPQC.h"
35 #include "../DeMon/DeMon.h"
36 #include "../Orca/Orca.h"
37 #include "../NWChem/NWChem.h"
38 #include "../Psicode/Psicode.h"
39 #include "../QChem/QChem.h"
40 #include "../Mopac/Mopac.h"
41 #include "../Gaussian/Gaussian.h"
42 #include "../Geometry/GeomGlobal.h"
43 #include "../Utils/UtilsInterface.h"
44 #include "../Geometry/InterfaceGeom.h"
45 #include "../Utils/Utils.h"
46 #include "../Utils/GabeditTextEdit.h"
47 #include "../Geometry/ResultsAnalise.h"
48 #include "../Geometry/EnergiesCurves.h"
49 #include "../Common/Windows.h"
50 #include "../Files/ListeFiles.h"
51 #include "../Geometry/GeomXYZ.h"
52 #include "../Geometry/GeomZmatrix.h"
53 #include "../Common/SplashScreen.h"
54 #include "../Display/ViewOrb.h"
55 #include "../Geometry/Fragments.h"
56 #include "../Geometry/DrawGeom.h"
57 #include "../Common/Exit.h"
58 #include "../Molcas/MolcasVariables.h"
59 #include "../Molcas/MolcasGateWay.h"
60 #include "../Utils/GabeditXYPlot.h"
61 
62 #include "../../pixmaps/Ok.xpm"
63 #include "../../pixmaps/Cancel.xpm"
64 #include "../../pixmaps/Yes.xpm"
65 #include "../../pixmaps/No.xpm"
66 #include "../../pixmaps/SaveMini.xpm"
67 #include "../../pixmaps/Close.xpm"
68 #include "../../pixmaps/Apply.xpm"
69 #include "../../pixmaps/Question.xpm"
70 #include "../../pixmaps/Warning.xpm"
71 #include "../../pixmaps/Error.xpm"
72 #include "../../pixmaps/Info.xpm"
73 #include "../../pixmaps/A0p.xpm"
74 #include "../../pixmaps/A0d.xpm"
75 #include "../../pixmaps/Open.xpm"
76 #include "../../pixmaps/Gabedit.xpm"
77 #include "../../pixmaps/Print.xpm"
78 #include "../../pixmaps/Next.xpm"
79 #include "../../pixmaps/Stop.xpm"
80 #include "../../pixmaps/Play.xpm"
81 #include "../Common/StockIcons.h"
82 
83 #include "../Spectrum/IRSpectrum.h"
84 #include "../Spectrum/RamanSpectrum.h"
85 
86 
87 /********************************************************************************/
destroy_popup(gpointer data)88 static gint destroy_popup(gpointer data)
89 {
90         gtk_widget_hide(GTK_WIDGET(data));
91         gtk_object_destroy(GTK_OBJECT(data));
92         return FALSE;
93 }
94 /********************************************************************************/
create_popup_win(gchar * label)95 void create_popup_win(gchar* label)
96 {
97 	GtkWidget *MainFrame;
98 	GtkWidget *Label;
99 	GtkWidget *hbox = gtk_hbox_new(0,FALSE);
100 
101 
102 	MainFrame = gtk_window_new (GTK_WINDOW_POPUP);
103 
104 	/* center it on the screen*/
105         gtk_window_set_position(GTK_WINDOW (MainFrame), GTK_WIN_POS_MOUSE);
106 
107 	/* set up key and mound button press to hide splash screen*/
108 
109         gtk_widget_add_events(MainFrame,
110                               GDK_BUTTON_PRESS_MASK|
111                               GDK_BUTTON_RELEASE_MASK|
112                               GDK_KEY_PRESS_MASK);
113 
114         g_signal_connect(G_OBJECT(MainFrame),"button_press_event",
115                 G_CALLBACK(gtk_widget_destroy),NULL);
116         g_signal_connect(G_OBJECT(MainFrame),"key_press_event",
117                 G_CALLBACK(gtk_widget_destroy),NULL);
118         gtk_widget_realize(MainFrame);
119 
120 	Label = gtk_label_new(label);
121    	gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT);
122  	set_font (Label,"helvetica bold 24");
123 	gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 0);
124         gtk_widget_show(Label);
125         gtk_widget_show(hbox);
126         gtk_container_add (GTK_CONTAINER (MainFrame), hbox);
127         gtk_widget_show(MainFrame);
128 
129 	/* force it to draw now.*/
130 	gdk_flush();
131 
132 	/* go into main loop, processing events.*/
133         while(gtk_events_pending())
134                 gtk_main_iteration();
135 
136 	/* after 3 seconds, destroy the splash screen.*/
137         g_timeout_add( 1000, destroy_popup, MainFrame );
138 }
139 /********************************************************************************/
init_child(GtkWidget * widget,GabeditSignalFunc func,gchar * buttonlabel)140 void init_child(GtkWidget *widget, GabeditSignalFunc func,gchar *buttonlabel)
141 {
142   WidgetChildren  *children = g_malloc(sizeof(WidgetChildren));
143   g_object_set_data(G_OBJECT (widget), "Children", children);
144   children->nchildren = 1;
145   children->children = g_malloc(sizeof(GtkWidget*));
146   children->destroychildren = g_malloc(sizeof(GCallback));
147   children->children[0] = widget;
148   g_object_set_data(G_OBJECT(children->children[0]),"Parent",widget);
149   children->destroychildren[0] = func;
150   if(buttonlabel)
151 	add_button_windows(buttonlabel,widget);
152 }
153 /********************************************************************************/
add_child(GtkWidget * widget,GtkWidget * childwidget,GabeditSignalFunc func,gchar * buttonlabel)154 void add_child(GtkWidget *widget,GtkWidget *childwidget,GabeditSignalFunc func,gchar *buttonlabel)
155 {
156   WidgetChildren  *children = (WidgetChildren  *)g_object_get_data(G_OBJECT(widget),"Children");
157   children->nchildren++;
158   children->children = g_realloc(children->children,children->nchildren*sizeof(GtkWidget*));
159   children->destroychildren = g_realloc(children->destroychildren,children->nchildren*sizeof(GCallback));
160   children->children[children->nchildren-1] = childwidget;
161   g_object_set_data(G_OBJECT(children->children[children->nchildren-1]),"Parent",widget);
162   children->destroychildren[children->nchildren-1] = func;
163   if(buttonlabel)
164 	add_button_windows(buttonlabel,childwidget);
165 }
166 /********************************************************************************/
delete_child(GtkWidget * childwidget)167 void delete_child(GtkWidget *childwidget)
168 {
169   GtkWidget *widget = NULL;
170   WidgetChildren  *children;
171   gint i;
172   gint k;
173 
174   widget = GTK_WIDGET(g_object_get_data(G_OBJECT(childwidget),"Parent"));
175   if(!widget)
176 	return;
177   children = (WidgetChildren  *)g_object_get_data(G_OBJECT(widget),"Children");
178 
179   k = -1;
180   for(i=0;i<children->nchildren;i++)
181   {
182 	if(children->children[i]==childwidget)
183         {
184 		destroy_button_windows(children->children[i]);
185 		children->destroychildren[i](children->children[i]);
186 		children->children[i] = NULL;
187 		k = i;
188 		break;
189 	}
190   }
191   if(k!=-1)
192   {
193   	for(i=k;i<children->nchildren-1;i++)
194   	{
195 		children->children[i] = children->children[i+1];
196 		children->destroychildren[i] = children->destroychildren[i+1];
197   	}
198   	children->nchildren--;
199   	children->children = g_realloc(children->children,children->nchildren*sizeof(GtkWidget*));
200   	children->destroychildren = g_realloc(children->destroychildren,children->nchildren*sizeof(GCallback));
201   }
202 }
203 /********************************************************************************/
delete_all_children(GtkWidget * widget)204 void delete_all_children(GtkWidget *widget)
205 {
206   WidgetChildren  *children;
207   gint i;
208 
209   if(!widget)
210 	return;
211   children = (WidgetChildren  *)g_object_get_data(G_OBJECT(widget),"Children");
212   for(i=1;i<children->nchildren;i++)
213   {
214 	if(children->children[i])
215 	{
216 		destroy_button_windows(children->children[i]);
217 		children->destroychildren[i](children->children[i]);
218 		children->children[i] = NULL;
219 	}
220   }
221   children->nchildren = 1;
222   children->children = g_realloc(children->children,children->nchildren*sizeof(GtkWidget*));
223   children->destroychildren = g_realloc(children->destroychildren,children->nchildren*sizeof(GCallback));
224 
225 }
226 /********************************************************************************/
destroy_children(GtkWidget * widget)227 void destroy_children(GtkWidget *widget)
228 {
229   WidgetChildren  *children = (WidgetChildren  *)g_object_get_data(G_OBJECT(widget),"Children");
230   gint i;
231   for(i=children->nchildren-1;i>=0;i--)
232   {
233    if(children->children[i])
234    {
235 	destroy_button_windows(children->children[i]);
236 	children->destroychildren[i](children->children[i]);
237    }
238   }
239   g_free(children->children);
240   g_free(children->destroychildren);
241   g_free(children);
242 }
243 /********************************************************************************/
244 /* create_pixmap, convenience function to create a pixmap widget, from data */
create_pixmap(GtkWidget * widget,gchar ** data)245 GtkWidget *create_pixmap(GtkWidget *widget, gchar **data)
246 {
247   GtkStyle *style;
248   GdkBitmap *mask;
249   GdkPixmap *gdk_pixmap;
250   GtkWidget *gtk_pixmap;
251 
252   style = gtk_widget_get_style(widget);
253   g_assert(style != NULL);
254 
255   gdk_pixmap = gdk_pixmap_create_from_xpm_d(widget->window,&mask, &style->bg[GTK_STATE_NORMAL],data);
256   g_assert(gdk_pixmap != NULL);
257   gtk_pixmap = gtk_image_new_from_pixmap(gdk_pixmap, mask);
258 
259   g_assert(gtk_pixmap != NULL);
260   gtk_widget_show(gtk_pixmap);
261 
262   return(gtk_pixmap);
263 }
264 /********************************************************************************/
get_pixmap(GtkWidget * widget,gushort red,gushort green,gushort blue)265  GdkPixmap *get_pixmap(GtkWidget  *widget,gushort red,gushort green,gushort blue)
266 {
267   GdkPixmap *pixmap = NULL;
268   GdkGC *gc = NULL;
269   gint width = ScreenHeight/20;
270   gint height = ScreenHeight/50;
271   GdkColormap *colormap;
272   GdkColor Color;
273 
274   gc = gdk_gc_new(widget->window);
275   Color.red =  red;
276   Color.green =  green;
277   Color.blue =  blue;
278 
279   pixmap = gdk_pixmap_new(widget->window,width,height, -1);
280   gdk_draw_rectangle (pixmap,
281                       widget->style->black_gc,
282                       TRUE,
283                       0, 0, width, height);
284   colormap  = gdk_drawable_get_colormap(widget->window);
285   gdk_colormap_alloc_color(colormap,&Color,FALSE,TRUE);
286   gdk_gc_set_foreground(gc,&Color);
287   gdk_draw_rectangle (pixmap,
288                       gc,
289                       TRUE,
290                       1, 1, width-1, height-1);
291 
292   g_object_unref(gc);
293   return pixmap;
294 }
295 /********************************************************************************/
create_hbox_pixmap_color(GtkWidget * widget,gushort red,gushort green,gushort blue)296 GtkWidget *create_hbox_pixmap_color(GtkWidget *widget,gushort red,gushort green,gushort blue)
297 {
298   GdkBitmap *mask = NULL;
299   GdkPixmap *gdk_pixmap;
300   GtkWidget *gtk_pixmap;
301   GtkWidget *hbox;
302 
303   hbox = gtk_hbox_new (TRUE, 0);
304 
305   gdk_pixmap = get_pixmap(widget,red,green,blue);
306   gtk_pixmap = gtk_image_new_from_pixmap(gdk_pixmap, mask);
307 
308   g_object_unref(gdk_pixmap);
309 
310 
311   gtk_box_pack_start (GTK_BOX (hbox), gtk_pixmap, TRUE, TRUE, 1);
312 
313   return hbox ;
314 }
315 /********************************************************************************/
create_button_pixmap_color(GtkWidget * widget,gushort red,gushort green,gushort blue)316 GtkWidget *create_button_pixmap_color(GtkWidget *widget,gushort red,gushort green,gushort blue)
317 {
318   GtkWidget *hbox = create_hbox_pixmap_color(widget,red,green,blue);
319   GtkWidget *Button = gtk_button_new();
320 
321   gtk_container_add(GTK_CONTAINER(Button),hbox);
322   gtk_widget_show (hbox);
323   g_object_set_data(G_OBJECT (Button), "Hbox", hbox);
324 
325   return Button ;
326 }
327 /********************************************************************************/
create_radio_button_pixmap(GtkWidget * widget,gchar ** data,gchar * string,GtkWidget * oldbutton)328 GtkWidget *create_radio_button_pixmap(GtkWidget *widget, gchar **data,gchar *string,GtkWidget *oldbutton)
329 {
330   GtkStyle *style;
331   GdkBitmap *mask;
332   GdkPixmap *gdk_pixmap;
333   GtkWidget *gtk_pixmap;
334   GtkWidget *Button;
335   GtkWidget *hbox;
336   GtkWidget *Label = NULL;
337 
338   hbox = gtk_hbox_new (TRUE, 0);
339   g_object_ref (hbox);
340   gtk_widget_show (hbox);
341 
342 
343   style = gtk_widget_get_style(widget);
344   g_assert(style != NULL);
345 
346   gdk_pixmap = gdk_pixmap_create_from_xpm_d(widget->window,
347                                             &mask, &style->bg[GTK_STATE_NORMAL],data);
348   g_assert(gdk_pixmap != NULL);
349   gtk_pixmap = gtk_image_new_from_pixmap(gdk_pixmap, mask);
350 
351   g_object_unref(gdk_pixmap);
352   g_object_unref(mask);
353 
354   g_assert(gtk_pixmap != NULL);
355 /*  gtk_widget_show(gtk_pixmap);*/
356 
357   /*
358   if(oldbutton)
359   Button = gtk_radio_button_new(gtk_radio_button_group (GTK_RADIO_BUTTON (oldbutton)));
360   else
361   Button = gtk_radio_button_new(NULL);
362   */
363   Button = gtk_toggle_button_new();
364 
365   gtk_container_add(GTK_CONTAINER(Button),hbox);
366   if(string)
367   	Label = gtk_label_new(string);
368   gtk_box_pack_start (GTK_BOX (hbox), gtk_pixmap, FALSE, FALSE, 1);
369   if(string)
370   	gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 1);
371 
372   return Button ;
373 }
374 /********************************************************************************/
set_icon_default()375 void set_icon_default()
376 {
377   GdkPixbuf *pixbuf;
378 
379   pixbuf = gdk_pixbuf_new_from_xpm_data((const char**)gabedit_xpm);
380   gtk_window_set_default_icon (pixbuf);
381 }
382 /********************************************************************************/
set_icone(GtkWidget * widget)383 void set_icone(GtkWidget *widget)
384 {
385   GtkStyle *style;
386   GdkBitmap *mask;
387   GdkPixmap *gdk_pixmap;
388 
389 
390   style = gtk_widget_get_style(widget);
391   gdk_pixmap = gdk_pixmap_create_from_xpm_d (widget->window,&mask, &style->bg[GTK_STATE_NORMAL],gabedit_xpm);
392   gdk_window_set_icon(widget->window,NULL,gdk_pixmap,mask);
393 }
394 /********************************************************************************/
data_modify(gboolean mod)395 void data_modify(gboolean mod)
396 {
397         if(mod)
398          imodif = DATA_MOD_YES;
399         else
400          imodif = DATA_MOD_NO;
401  	change_all_labels();
402 }
403 /********************************************************************************/
create_label_pixmap(GtkWidget * widget,gchar ** data,gchar * string)404 GtkWidget *create_label_pixmap(GtkWidget *widget, gchar **data,gchar *string)
405 {
406   GtkStyle *style;
407   GdkBitmap *mask;
408   GdkPixmap *gdk_pixmap;
409   GtkWidget *gtk_pixmap;
410   GtkWidget *Label;
411   GtkWidget *hbox;
412 
413   hbox = gtk_hbox_new (FALSE, 0);
414   g_object_ref (hbox);
415   gtk_widget_show (hbox);
416 
417   style = gtk_widget_get_style(widget);
418   g_assert(style != NULL);
419 
420   gdk_pixmap = gdk_pixmap_create_from_xpm_d(widget->window,
421                                             &mask, &style->bg[GTK_STATE_NORMAL],data);
422   g_assert(gdk_pixmap != NULL);
423   gtk_pixmap = gtk_image_new_from_pixmap(gdk_pixmap, mask);
424 
425   g_object_unref(gdk_pixmap);
426   g_object_unref(mask);
427 
428   g_assert(gtk_pixmap != NULL);
429 
430   Label = gtk_label_new(string);
431   gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT);
432   gtk_box_pack_end (GTK_BOX (hbox), gtk_pixmap, FALSE, FALSE, 2);
433   gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 2);
434 
435   return hbox;
436 }
437 /********************************************************************************/
create_pixmap_label(GtkWidget * widget,gchar ** data,gchar * string)438 GtkWidget *create_pixmap_label(GtkWidget *widget, gchar **data,gchar *string)
439 {
440   GtkStyle *style;
441   GdkBitmap *mask;
442   GdkPixmap *gdk_pixmap;
443   GtkWidget *gtk_pixmap;
444   GtkWidget *Label;
445   GtkWidget *hbox;
446 
447   hbox = gtk_hbox_new (FALSE, 0);
448   g_object_ref (hbox);
449   gtk_widget_show (hbox);
450 
451   style = gtk_widget_get_style(widget);
452   g_assert(style != NULL);
453 
454   gdk_pixmap = gdk_pixmap_create_from_xpm_d(widget->window,
455                                             &mask, &style->bg[GTK_STATE_NORMAL],data);
456   g_assert(gdk_pixmap != NULL);
457   gtk_pixmap = gtk_image_new_from_pixmap(gdk_pixmap, mask);
458 
459   g_object_unref(gdk_pixmap);
460   g_object_unref(mask);
461 
462   g_assert(gtk_pixmap != NULL);
463 
464   Label = gtk_label_new(string);
465   gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT);
466   gtk_box_pack_start (GTK_BOX (hbox), gtk_pixmap, FALSE, FALSE, 2);
467   gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 2);
468 
469   return hbox;
470 }
471 /********************************************************************************/
create_label_with_pixmap(GtkWidget * Win,gchar * string,gchar * type)472 GtkWidget *create_label_with_pixmap(GtkWidget *Win,gchar *string,gchar *type)
473 {
474     GtkWidget *hbox;
475     GtkWidget *Label;
476     if( strstr(type,_("Question")) )
477     	hbox = create_pixmap_label(Win,question_xpm,string);
478     else
479     if( strstr(type,_("Warning")) )
480     	hbox = create_pixmap_label(Win,warning_xpm,string);
481     else
482     if( strstr(type,_("Error")))
483     	hbox = create_pixmap_label(Win,error_xpm,string);
484     else
485     if( strstr(type,_("Info")) )
486     	hbox = create_pixmap_label(Win,info_xpm,string);
487     else
488     {
489   	hbox = gtk_hbox_new (TRUE, 0);
490   	gtk_widget_show (hbox);
491         Label = gtk_label_new(string);
492         gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 1);
493     }
494 
495     return hbox;
496 }
497 /********************************************************************************/
create_button_pixmap(GtkWidget * widget,gchar ** data,gchar * string)498 GtkWidget *create_button_pixmap(GtkWidget *widget, gchar **data,gchar *string)
499 {
500   GtkStyle *style;
501   GdkBitmap *mask;
502   GdkPixmap *gdk_pixmap;
503   GtkWidget *gtk_pixmap;
504   GtkWidget *Button;
505   GtkWidget *Label = NULL;
506   GtkWidget *hbox;
507 
508   hbox = gtk_hbox_new (FALSE, 1);
509   g_object_ref (hbox);
510   gtk_widget_show (hbox);
511 
512 
513   style = gtk_widget_get_style(widget);
514   g_assert(style != NULL);
515 
516   gdk_pixmap = gdk_pixmap_create_from_xpm_d (widget->window,&mask, &style->bg[GTK_STATE_NORMAL],data);
517   g_assert(gdk_pixmap != NULL);
518   gtk_pixmap = gtk_image_new_from_pixmap(gdk_pixmap, mask);
519 
520   g_object_unref(gdk_pixmap);
521   g_object_unref(mask);
522 
523   g_assert(gtk_pixmap != NULL);
524 
525   Button = gtk_button_new();
526   gtk_container_add(GTK_CONTAINER(Button),hbox);
527   gtk_box_pack_start (GTK_BOX (hbox), gtk_pixmap, FALSE, FALSE, 2);
528 
529   if(string)
530   {
531   	Label = gtk_label_new(string);
532   	gtk_box_pack_end (GTK_BOX (hbox), Label, FALSE, FALSE, 1);
533   }
534 
535   return Button ;
536 }
537 
538 /********************************************************************************/
exit_all(GtkWidget * widget,gchar * data)539 void exit_all(GtkWidget *widget, gchar *data)
540 {
541  if(imodif == DATA_MOD_NO )
542 	ExitDlg(NULL, NULL);
543  else
544  	Save_YesNo();
545 }
546 /********************************************************************************/
create_button(GtkWidget * Win,gchar * string)547 GtkWidget *create_button(GtkWidget *Win,gchar *string)
548 {
549     GtkWidget *button;
550     if( strstr(string,_("OK")) )
551     	button = create_button_pixmap(Win,ok_xpm,_("OK"));
552     else
553     if(strstr(string,_("Cancel")) )
554     	button = create_button_pixmap(Win,cancel_xpm,_("Cancel"));
555     else
556     if(strstr(string,_("Yes")) )
557     	button = create_button_pixmap(Win,yes_xpm,_("Yes"));
558     else
559     if(strstr(string,_("No")) )
560     	button = create_button_pixmap(Win,no_xpm,_("No"));
561     else
562     if(strstr(string,_("Save&Apply&Close")) )
563     	button = create_button_pixmap(Win,savemini_xpm,_("Save&Apply&Close"));
564     else
565     if(strstr(string,_("Save&Close")) )
566     	button = create_button_pixmap(Win,savemini_xpm,_("Save&Close"));
567     else
568     if(strstr(string,_("Apply&Close")) )
569     	button = create_button_pixmap(Win,apply_xpm,_("Apply&Close"));
570     else
571     if(strstr(string,_("Save")) )
572     	button = create_button_pixmap(Win,savemini_xpm,_("Save"));
573     else
574     if(strstr(string,_("Close")) )
575     	button = create_button_pixmap(Win,close_xpm,_("Close"));
576     else
577     if(strstr(string,_("Apply")) )
578     	button = create_button_pixmap(Win,apply_xpm,_("Apply"));
579     else
580     if(strstr(string," *a0 ") )
581 		button = create_button_pixmap(Win,a0p_xpm,NULL);
582     else
583     if(strstr(string," /a0 ") )
584 		button = create_button_pixmap(Win,a0d_xpm,NULL);
585     else
586     if(strstr(string,_("Print")) )
587     	button = create_button_pixmap(Win,print_xpm,_("Print"));
588     else
589     if(strstr(string,_("Stop")) )
590     	button = create_button_pixmap(Win,stop_xpm,_("Stop"));
591     else
592     if(strstr(string,_("Play")) )
593     	button = create_button_pixmap(Win,play_xpm,_("Play"));
594     else
595     if(strstr(string,_("Next")) )
596     	button = create_button_pixmap(Win,next_xpm,_("Next"));
597     else
598     	button = gtk_button_new_with_label(string);
599 
600     return button;
601 }
602 /********************************************************************************/
Message(char * message,char * titre,gboolean center)603 GtkWidget* Message(char *message,char *titre,gboolean center)
604 {
605     GtkWidget *DialogueMessage = NULL;
606     GtkWidget *Label, *Bouton;
607     GtkWidget *frame, *vboxframe;
608 
609 
610     DialogueMessage = gtk_dialog_new();
611     gtk_widget_realize(GTK_WIDGET(DialogueMessage));
612 
613     gtk_window_set_title(GTK_WINDOW(DialogueMessage),titre);
614    gtk_window_set_transient_for(GTK_WINDOW(DialogueMessage),GTK_WINDOW(Fenetre));
615     gtk_window_set_position(GTK_WINDOW(DialogueMessage),GTK_WIN_POS_CENTER);
616 
617    g_signal_connect(G_OBJECT(DialogueMessage), "delete_event", (GCallback)destroy_button_windows, NULL);
618     g_signal_connect(G_OBJECT(DialogueMessage), "delete_event", (GCallback)gtk_widget_destroy, NULL);
619   frame = gtk_frame_new (NULL);
620   gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT);
621 
622   gtk_container_set_border_width (GTK_CONTAINER (frame), 5);
623    gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->vbox), frame,TRUE,TRUE,0);
624 
625   gtk_widget_show (frame);
626 
627   vboxframe = create_vbox(frame);
628 
629     if(center)
630     {
631     	Label = create_label_with_pixmap(Fenetre,message,titre);
632     	gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0);
633     }
634     else
635     {
636 	GtkWidget* hbox;
637     	Label = gtk_label_new(message);
638   	gtk_widget_show (Label);
639    	gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT);
640   	hbox = gtk_hbox_new (FALSE, 5);
641   	gtk_box_pack_start (GTK_BOX (vboxframe), hbox, FALSE, FALSE, 5);
642   	gtk_box_pack_start (GTK_BOX(hbox), Label, FALSE, FALSE, 5);
643   	gtk_widget_show (hbox);
644     }
645 
646     gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(DialogueMessage)->action_area), FALSE);
647 
648   Bouton = create_button(DialogueMessage,_("OK"));
649   gtk_box_pack_end (GTK_BOX( GTK_DIALOG(DialogueMessage)->action_area), Bouton, FALSE, TRUE, 5);
650   GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT);
651   gtk_widget_grab_default(Bouton);
652  g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",
653                           (GCallback)destroy_button_windows,
654                           GTK_OBJECT(DialogueMessage));
655     g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",
656                           (GCallback)gtk_widget_destroy,
657                           GTK_OBJECT(DialogueMessage));
658 
659     add_button_windows(titre,DialogueMessage);
660     gtk_widget_show_all(DialogueMessage);
661     return DialogueMessage;
662 }
663 /********************************************************************************/
MessageTxt(gchar * message,gchar * title)664 GtkWidget* MessageTxt(gchar *message,gchar *title)
665 {
666 	GtkWidget *dlgWin = NULL;
667 	GtkWidget *frame;
668 	GtkWidget *vboxframe;
669 	GtkWidget *txtWid;
670 	GtkWidget *button;
671 
672 
673 	dlgWin = gtk_dialog_new();
674 	gtk_widget_realize(GTK_WIDGET(dlgWin));
675 
676 	gtk_window_set_title(GTK_WINDOW(dlgWin),title);
677 	gtk_window_set_transient_for(GTK_WINDOW(dlgWin),GTK_WINDOW(Fenetre));
678 	gtk_window_set_position(GTK_WINDOW(dlgWin),GTK_WIN_POS_CENTER);
679 
680 	g_signal_connect(G_OBJECT(dlgWin), "delete_event", (GCallback)destroy_button_windows, NULL);
681 	g_signal_connect(G_OBJECT(dlgWin), "delete_event", (GCallback)gtk_widget_destroy, NULL);
682 	frame = gtk_frame_new (NULL);
683 	gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT);
684 
685 	gtk_container_set_border_width (GTK_CONTAINER (frame), 5);
686 	gtk_box_pack_start( GTK_BOX(GTK_DIALOG(dlgWin)->vbox), frame,TRUE,TRUE,0);
687 
688 	gtk_widget_show (frame);
689 
690 	vboxframe = create_vbox(frame);
691 	txtWid = create_text_widget(vboxframe,NULL,&frame);
692 	if(message) gabedit_text_insert (GABEDIT_TEXT(txtWid), NULL, NULL, NULL,message,-1);
693 
694 	gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), FALSE);
695 
696 	button = create_button(dlgWin,_("OK"));
697 	gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5);
698 	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
699 	gtk_widget_grab_default(button);
700 	g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(dlgWin));
701 	g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dlgWin));
702 
703 	add_button_windows(title,dlgWin);
704 	gtk_window_set_default_size (GTK_WINDOW(dlgWin), (gint)(ScreenHeight*0.4), (gint)(ScreenHeight*0.4));
705 	gtk_widget_show_all(dlgWin);
706 	return dlgWin;
707 }
708 /********************************************************************************/
select_all()709 void select_all()
710 {
711 
712 	if( gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBookText))==0)
713 		gabedit_text_select_all(text);
714 	else
715 		gabedit_text_select_all(textresult);
716 }
717 /********************************************************************************/
goto_end(GtkWidget * current,gpointer data)718 void goto_end(GtkWidget *current,gpointer data)
719 {
720 	gabedit_text_goto_end(current);
721 }
722 /********************************************************************************/
goto_end_result(GtkWidget * win,gpointer data)723 void goto_end_result(GtkWidget *win,gpointer data)
724 {
725  	goto_end(textresult,data);
726 }
727 /********************************************************************************/
ClearText(GtkWidget * text)728 void ClearText(GtkWidget* text)
729 {
730         gint nchar;
731         nchar=gabedit_text_get_length(GABEDIT_TEXT(text));
732         gabedit_text_set_point(GABEDIT_TEXT(text),0);
733         gabedit_text_forward_delete(GABEDIT_TEXT(text),nchar);
734 
735         gabedit_text_set_point(GABEDIT_TEXT(text),0);
736 
737 }
738 /********************************************************************************/
destroy(GtkWidget * widget,gpointer data)739 void destroy( GtkWidget *widget, gpointer   data )
740 {
741   guint i;
742            if(iframe==2)
743  		geom_is_not_open();
744            gtk_widget_destroy(widget);
745            iedit=1;
746            gabedit_text_set_editable(GABEDIT_TEXT(text), TRUE);
747            if(iframe==2 && iprogram == PROG_IS_GAUSS)
748        	     for(i=0;i<6;i++)
749        		EntryCS[i]=NULL;
750            iframe=1;
751            widget = NULL;
752 }
753 /********************************************************************************/
Cancel_YesNo(GtkWidget * widget,gpointer data,GabeditSignalFunc func)754 void Cancel_YesNo(GtkWidget *widget, gpointer   data, GabeditSignalFunc func)
755 {
756     GtkWidget *DialogueMessage = NULL;
757     GtkWidget *Label, *Bouton;
758 	GtkWidget *frame, *vboxframe;
759     DialogueMessage = gtk_dialog_new();
760 	gtk_window_set_position(GTK_WINDOW(DialogueMessage),GTK_WIN_POS_CENTER);
761     gtk_window_set_title(GTK_WINDOW(DialogueMessage),_("Warning"));
762     gtk_window_set_modal (GTK_WINDOW (DialogueMessage), TRUE);
763 
764     g_signal_connect(G_OBJECT(DialogueMessage),
765                        "delete_event",
766                        (GCallback)gtk_widget_destroy,
767                        NULL);
768 
769 	frame = gtk_frame_new (NULL);
770     gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT);
771     g_object_ref (frame);
772     g_object_set_data_full (G_OBJECT (DialogueMessage), "frame",
773 	  frame,(GDestroyNotify) g_object_unref);
774     gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
775     gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->vbox), frame,TRUE,TRUE,0);
776     gtk_widget_show (frame);
777     vboxframe = create_vbox(frame);
778 
779     Label = gtk_label_new(_("Are you sure to \ncancel this window ?"));
780     gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0);
781     gtk_label_set_justify(GTK_LABEL(Label),
782                           GTK_JUSTIFY_CENTER);
783     gtk_misc_set_padding(GTK_MISC(Label), 10, 10);
784 
785     gtk_widget_realize(DialogueMessage);
786 
787     Bouton = create_button(DialogueMessage,_("No"));
788     gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->action_area), Bouton,TRUE,TRUE,0);
789     g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(DialogueMessage));
790     GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT);
791     gtk_widget_grab_default(Bouton);
792 
793     Bouton = create_button(DialogueMessage,_("Yes"));
794     gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->action_area), Bouton,TRUE,TRUE,0);
795     GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT);
796     g_signal_connect_swapped(G_OBJECT(Bouton),"clicked", (GCallback)func, GTK_OBJECT(widget));
797     g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(DialogueMessage));
798 
799 
800     gtk_widget_show_all(DialogueMessage);
801 }
802 /**********************************************************************************/
get_geometry_type_from_molpro_input_file(gchar * NomFichier)803 FilePosTypeGeom get_geometry_type_from_molpro_input_file(gchar *NomFichier)
804 {
805  gchar *t;
806  FILE *fd;
807  guint taille=BSIZE;
808  FilePosTypeGeom j;
809  gint k;
810  gchar *t1;
811  gchar *t2;
812  gchar *t3 = NULL;
813 
814 
815  j.geomtyp=GEOM_IS_ZMAT;
816  j.numline=0;
817  j.units=0;
818  t=g_malloc(taille);
819  fd = FOpen(NomFichier, "rb");
820  if(fd!=NULL)
821  {
822  	k= 0;
823  	while(!feof(fd) )
824  	{
825  		if(!fgets(t, taille, fd))
826 			break;
827  		k++;
828                 t1 = g_strdup(t);
829                 t2= g_strdup("Geometry={");
830                 uppercase(t1);
831                 uppercase(t2);
832                 t3 = NULL;
833                 t3 = strstr(t1,t2);
834                 if(t3 != NULL)
835  			j.numline=k;
836                 g_free(t2);
837                 t3 = NULL;
838                 t2= g_strdup("ANGSTROM");
839                 t3 = strstr(t1,t2);
840                 if(t3 != NULL)
841  			j.units=1;
842                 g_free(t2);
843                 t2= g_strdup("geomtyp=xyz");
844                 uppercase(t2);
845                 t3 = NULL;
846                 t3 = strstr(t1,t2);
847                 if(t3 != NULL)
848  			j.geomtyp=GEOM_IS_XYZ;
849                 g_free(t2);
850                 g_free(t1);
851   	}
852   	fclose(fd);
853   }
854   if(j.numline==0)
855 	j.geomtyp=GEOM_IS_OTHER;
856   g_free(t);
857   return j;
858 }
859 /**********************************************************************************/
get_geometry_type_from_demon_input_file(gchar * NomFichier)860 FilePosTypeGeom get_geometry_type_from_demon_input_file(gchar *NomFichier)
861 {
862  gchar *t;
863  FILE *fd;
864  guint taille=BSIZE;
865  gboolean OK=TRUE;
866  gint i;
867  FilePosTypeGeom j;
868  gint k;
869  gchar *t1;
870  gchar *t2;
871  gchar *t3 = NULL;
872  gchar dum[100];
873 
874 
875  sprintf(dum,"NONE");
876  j.geomtyp=GEOM_IS_OTHER;
877  j.numline=0;
878  j.units=1;
879  t=g_malloc(taille);
880  fd = FOpen(NomFichier, "rb");
881  if(fd!=NULL)
882  {
883 /* Charge and Spin */
884  k = 0;
885  while(!feof(fd) )
886  {
887  	if(!fgets(t, taille, fd)) break;
888 	deleteFirstSpaces(t);
889      	if((int)t[0]==(int)'#') continue;
890         uppercase(t);
891 	sscanf(t,"%s", dum);
892 	if(strstr(dum,"MULTIPLICIT"))
893 	{
894 		sscanf(t,"%s %d", dum, &SpinMultiplicities[0]);
895 		SpinMultiplicities[1] = SpinMultiplicities[0];
896 		SpinMultiplicities[2] = SpinMultiplicities[0];
897 		k++;
898 	}
899 	if(strstr(dum,"CHARGE"))
900 	{
901 		sscanf(t,"%s %d", dum, &SpinMultiplicities[0]);
902 		SpinMultiplicities[1] = SpinMultiplicities[0];
903 		SpinMultiplicities[2] = SpinMultiplicities[0];
904 		k++;
905 	}
906 	if(k==2) break;
907  }
908  fseek(fd, 0L, SEEK_SET);
909 /* Geometry, Type and unit */
910  while(!feof(fd) )
911  {
912  	if(!fgets(t, taille, fd)) break;
913  	j.numline++;
914 	deleteFirstSpaces(t);
915      	if((int)t[0]==(int)'#' ) continue;
916         uppercase(t);
917 	sscanf(t,"%s", dum);
918 	if(strstr(dum,"GEOMETRY"))
919 	{
920 		if(strstr(t,"CARTES")) j.geomtyp = GEOM_IS_XYZ;
921 		else j.geomtyp = GEOM_IS_ZMAT;
922 		if(strstr(t,"BOHR")) j.units = 0;
923  		j.numline++;
924 		break;
925 	}
926  }
927 }
928   fclose(fd);
929   g_free(t);
930   return j;
931 }
932 /**********************************************************************************/
get_geometry_type_from_gauss_input_file(gchar * NomFichier)933 FilePosTypeGeom get_geometry_type_from_gauss_input_file(gchar *NomFichier)
934 {
935  gchar *t;
936  FILE *fd;
937  guint taille=BSIZE;
938  gboolean OK=TRUE;
939  gint i;
940  FilePosTypeGeom j;
941  gint k;
942  gchar *t1;
943  gchar *t2;
944  gchar *t3 = NULL;
945 
946 
947  j.geomtyp=GEOM_IS_OTHER;
948  j.numline=0;
949  j.units=1;
950  t=g_malloc(taille);
951  fd = FOpen(NomFichier, "rb");
952  if(fd!=NULL)
953  {
954 /* Commands lines */
955  while(!feof(fd) )
956  {
957  	if(!fgets(t, taille, fd))
958 		break;
959  	j.numline++;
960      	if((int)t[0]==(int)'#' || (int)t[0]==(int)'%' )
961         {
962                 t1 = g_strdup(t);
963                 t2= g_strdup("Units(Au");
964                 uppercase(t1);
965                 uppercase(t2);
966                 t3 = strstr(t1,t2);
967                 if(t3 != NULL)
968  			j.units=0;
969                 g_free(t1);
970                 g_free(t2);
971         	continue;
972         }
973      	else
974 		break;
975   }
976 /* Title */
977  while(!feof(fd) )
978  {
979  	if(!fgets(t, taille, fd))
980 		break;
981  	j.numline++;
982       	OK=TRUE;
983       	for(i=0;i<(gint)strlen(t);i++)
984       	if(t[i]!=' ' && t[i] !='\n' )
985       	{
986 		OK=FALSE;
987         	break;
988       	}
989         if(OK)
990         	break;
991   }
992 
993 /* Charge and Spin */
994  if(!feof(fd) )
995  {
996 	 if(fgets(t, taille, fd)) j.numline++;
997 	 sscanf(t,"%d %d %d %d %d %d",
998 		  &TotalCharges[0],
999 		  &SpinMultiplicities[0],
1000 		  &TotalCharges[1],
1001 		  &SpinMultiplicities[1],
1002 		  &TotalCharges[2],
1003 		  &SpinMultiplicities[2]);
1004  }
1005 /* First line of geometry */
1006   if(!feof(fd) )
1007   {
1008  	if(!fgets(t, taille, fd))
1009         {
1010   		j.geomtyp = GEOM_IS_OTHER;
1011         }
1012         else
1013         {
1014 		gchar dump[5][BSIZE];
1015  		j.numline++;
1016 
1017 		k = sscanf(t,"%s %s %s %s %s",dump[0],dump[1],dump[2],dump[3],dump[4]);
1018 		if(k==5)
1019 			j.geomtyp = GEOM_IS_XYZ;
1020 		else
1021 		if(k==4)
1022 			j.geomtyp = GEOM_IS_XYZ;
1023 		else
1024 		if(k==1)
1025 			j.geomtyp = GEOM_IS_ZMAT;
1026 		else
1027 			j.geomtyp = GEOM_IS_OTHER;
1028 		/*
1029   		k=0;
1030   		for(i=strlen(t)-1;i>0;i--)
1031     		if(t[i]!=' ' || t[i] !='\n' )
1032     		{
1033 			k=i;
1034        			break;
1035     		}
1036   		if(k>2)
1037    			j.geomtyp = GEOM_IS_XYZ;
1038   		else
1039   		if(k>0 && k<=2)
1040    			j.geomtyp = GEOM_IS_ZMAT;
1041   		else j.geomtyp = GEOM_IS_OTHER;
1042 		*/
1043         }
1044    }
1045  }
1046   fclose(fd);
1047   g_free(t);
1048   return j;
1049 }
1050 /**********************************************************************************/
get_geometry_type_from_nwchem_input_file(gchar * NomFichier)1051 FilePosTypeGeom get_geometry_type_from_nwchem_input_file(gchar *NomFichier)
1052 {
1053  gchar *t;
1054  FILE *fd;
1055  guint taille=BSIZE;
1056  FilePosTypeGeom j;
1057 
1058 
1059  j.geomtyp=GEOM_IS_OTHER;
1060  j.numline=0;
1061  j.units=1;
1062  t=g_malloc(taille);
1063  fd = FOpen(NomFichier, "rb");
1064  if(fd==NULL) return j;
1065  while(!feof(fd) )
1066  {
1067  	if(!fgets(t, taille, fd)) break;
1068 	uppercase(t);
1069 	if(strstr(t,"GEOMETRY"))
1070 	{
1071 		j.geomtyp = GEOM_IS_XYZ;
1072  		if(!fgets(t, taille, fd)) break;
1073 		uppercase(t);
1074 		if(strstr(t,"ZMATRIX")) j.geomtyp = GEOM_IS_ZMAT;
1075 		break;
1076 	}
1077   	j.numline++;
1078   }
1079   fclose(fd);
1080   g_free(t);
1081   return j;
1082 }
1083 /**********************************************************************************/
get_geometry_type_from_psicode_input_file(gchar * NomFichier)1084 FilePosTypeGeom get_geometry_type_from_psicode_input_file(gchar *NomFichier)
1085 {
1086  gchar *t;
1087  FILE *fd;
1088  guint taille=BSIZE;
1089  FilePosTypeGeom j;
1090 
1091 
1092  j.geomtyp=GEOM_IS_OTHER;
1093  j.numline=0;
1094  j.units=1;
1095  /* printf("NomFichier=%s\n",NomFichier);*/
1096  t = g_malloc(taille*sizeof(gchar));
1097  fd = FOpen(NomFichier, "rb");
1098  if(fd==NULL) return j;
1099  while(!feof(fd) )
1100  {
1101  	if(!fgets(t, taille, fd)) break;
1102 	uppercase(t);
1103 		/* printf("t=%s\n",t);*/
1104 	if(strstr(t,"MOLECULE"))
1105 	{
1106 		gint charge,mult;
1107 		gboolean OK = FALSE;
1108 		gint i;
1109 		if(fgets(t,taille,fd) && 2==sscanf(t,"%d %d",&charge,&mult)) OK = TRUE;
1110 		else OK = FALSE;
1111 		/* printf("t=%s\n",t);*/
1112 		if(OK && fgets(t,taille,fd))
1113 		{
1114 			gchar*t1 = g_malloc(taille*sizeof(gchar));
1115 			gchar*t2 = g_malloc(taille*sizeof(gchar));
1116 			gchar*t3 = g_malloc(taille*sizeof(gchar));
1117 			gchar*t4 = g_malloc(taille*sizeof(gchar));
1118 		/* printf("t=%s\n",t);*/
1119         		i = sscanf(t,"%s %s %s %s",t1,t2,t3,t4);
1120 			if(i==4)j.geomtyp = GEOM_IS_XYZ;
1121 			else j.geomtyp = GEOM_IS_ZMAT;
1122   			g_free(t1);
1123   			g_free(t2);
1124   			g_free(t3);
1125   			g_free(t4);
1126 		}
1127 		break;
1128 	}
1129   	j.numline++;
1130   }
1131   fclose(fd);
1132   g_free(t);
1133   return j;
1134 }
1135 /**********************************************************************************/
get_geometry_type_from_orca_input_file(gchar * NomFichier)1136 FilePosTypeGeom get_geometry_type_from_orca_input_file(gchar *NomFichier)
1137 {
1138  gchar *t;
1139  FILE *fd;
1140  guint taille=BSIZE;
1141  FilePosTypeGeom j;
1142 
1143 
1144  j.geomtyp=GEOM_IS_OTHER;
1145  j.numline=0;
1146  j.units=1;
1147  t=g_malloc(taille);
1148  fd = FOpen(NomFichier, "rb");
1149  if(fd==NULL) return j;
1150  while(!feof(fd) )
1151  {
1152  	if(!fgets(t, taille, fd)) break;
1153 	uppercase(t);
1154 	if(strstr(t,"* XYZ"))
1155 	{
1156 		j.geomtyp = GEOM_IS_XYZ;
1157 		break;
1158 	}
1159 	if(strstr(t,"* INT"))
1160 	{
1161 		j.geomtyp = GEOM_IS_ZMAT;
1162 		break;
1163 	}
1164   	j.numline++;
1165   }
1166   fclose(fd);
1167   g_free(t);
1168   return j;
1169 }
1170 /**********************************************************************************/
get_geometry_type_from_qchem_input_file(gchar * NomFichier)1171 FilePosTypeGeom get_geometry_type_from_qchem_input_file(gchar *NomFichier)
1172 {
1173  gchar *t;
1174  FILE *fd;
1175  guint taille=BSIZE;
1176  FilePosTypeGeom j;
1177  gint k;
1178 
1179 
1180  j.geomtyp=GEOM_IS_OTHER;
1181  j.numline=0;
1182  j.units=1;
1183  t=g_malloc(taille);
1184  fd = FOpen(NomFichier, "rb");
1185  if(fd!=NULL)
1186  {
1187  while(!feof(fd) )
1188  {
1189  	if(!fgets(t, taille, fd)) break;
1190 	if(strstr(t,"$molecule")) break;
1191   	j.numline++;
1192   }
1193 /* Charge and Spin */
1194  if(!feof(fd) )
1195  {
1196  if(fgets(t, taille, fd))
1197   	j.numline++;
1198  }
1199 /* First line of geometry */
1200   if(!feof(fd) )
1201   {
1202  	if(!fgets(t, taille, fd))
1203         {
1204   		j.geomtyp = GEOM_IS_OTHER;
1205         }
1206         else
1207         {
1208 		gchar dump[5][BSIZE];
1209  		j.numline++;
1210 
1211 		k = sscanf(t,"%s %s %s %s %s",dump[0],dump[1],dump[2],dump[3],dump[4]);
1212 		if(k==5)
1213 			j.geomtyp = GEOM_IS_XYZ;
1214 		else
1215 		if(k==4)
1216 			j.geomtyp = GEOM_IS_XYZ;
1217 		else
1218 		if(k==1)
1219 			j.geomtyp = GEOM_IS_ZMAT;
1220 		else
1221 			j.geomtyp = GEOM_IS_OTHER;
1222         }
1223    }
1224  }
1225   fclose(fd);
1226   g_free(t);
1227   return j;
1228 }
1229 /**********************************************************************************/
get_geometry_type_from_mopac_input_file(gchar * NomFichier)1230 FilePosTypeGeom get_geometry_type_from_mopac_input_file(gchar *NomFichier)
1231 {
1232  gchar *t;
1233  FILE *fd;
1234  guint taille=BSIZE;
1235  FilePosTypeGeom j;
1236  gint k;
1237 
1238 
1239  j.geomtyp=GEOM_IS_OTHER;
1240  j.numline=0;
1241  j.units=1;
1242  t=g_malloc(taille);
1243  fd = FOpen(NomFichier, "rb");
1244  if(fd!=NULL)
1245  {
1246   	while(!feof(fd) )
1247   	{
1248  		if(!fgets(t, taille, fd))break;
1249   		j.numline++;
1250 		if(t[0] !='*') break;
1251 	}
1252     	if(!feof(fd)) { char* e = fgets(t,taille,fd);}
1253   	j.numline++;
1254     	if(!feof(fd)) { char* e = fgets(t,taille,fd);}
1255   	j.numline++;
1256 /* First line of geometry */
1257   if(!feof(fd) )
1258   {
1259  	if(!fgets(t, taille, fd))
1260         {
1261   		j.geomtyp = GEOM_IS_OTHER;
1262         }
1263         else
1264         {
1265 		gchar dump[8][BSIZE];
1266  		j.numline++;
1267 
1268 		k = sscanf(t,"%s %s %s %s %s %s %s %s",dump[0],dump[1],dump[2],dump[3],dump[4], dump[5], dump[6], dump[7]);
1269 		if(k==8)
1270 			j.geomtyp = GEOM_IS_ZMAT;
1271 		else
1272 		if(k==7)
1273 			j.geomtyp = GEOM_IS_XYZ;
1274 		else
1275 			j.geomtyp = GEOM_IS_OTHER;
1276         }
1277    }
1278  }
1279   fclose(fd);
1280   g_free(t);
1281   return j;
1282 }
1283 /**********************************************************************************/
read_geom_in_gamess_input(gchar * fileName)1284 void read_geom_in_gamess_input(gchar *fileName)
1285 {
1286 	gchar* logfile;
1287 	gchar* t;
1288 	FILE* file;
1289 	t = get_suffix_name_file(fileName);
1290 	logfile = g_strdup_printf("%s.log",t);
1291 	file = FOpen(logfile, "rb");
1292 	if(!file)
1293 	{
1294 		if(logfile) g_free(logfile);
1295 		logfile = g_strdup_printf("%s.out",t);
1296 		file = FOpen(logfile, "rb");
1297 		if(!file) return;
1298 	}
1299 	fclose(file);
1300 	read_geom_from_gamess_output_file(logfile,1);
1301 }
1302 /**********************************************************************************/
read_geom_in_firefly_input(gchar * fileName)1303 void read_geom_in_firefly_input(gchar *fileName)
1304 {
1305 	gchar* logfile;
1306 	gchar* t;
1307 	FILE* file;
1308 	t = get_suffix_name_file(fileName);
1309 	logfile = g_strdup_printf("%s.log",t);
1310 	file = FOpen(logfile, "rb");
1311 	if(!file)
1312 	{
1313 		if(logfile) g_free(logfile);
1314 		logfile = g_strdup_printf("%s.out",t);
1315 		file = FOpen(logfile, "rb");
1316 		if(!file) return;
1317 	}
1318 	fclose(file);
1319 	read_geom_from_gamess_output_file(logfile,1);
1320 }
1321 /**********************************************************************************/
read_geom_in_mpqc_input(gchar * fileName)1322 void read_geom_in_mpqc_input(gchar *fileName)
1323 {
1324 	read_XYZ_from_mpqc_input_file(fileName);
1325 }
1326 /**********************************************************************************/
read_geom_in_demon_input(gchar * NameFile)1327 void read_geom_in_demon_input(gchar *NameFile)
1328 {
1329         FilePosTypeGeom j;
1330         j=  get_geometry_type_from_demon_input_file(NameFile);
1331         if( j.geomtyp == GEOM_IS_XYZ)
1332                 read_XYZ_from_demon_input_file(NameFile,j);
1333         else
1334         if( j.geomtyp == GEOM_IS_ZMAT)
1335                 read_Zmat_from_demon_input_file(NameFile,j);
1336         else
1337                 Message(_("Sorry\nI can not read gemetry in DeMon input file\n"),_("Warning"),TRUE);
1338 }
1339 
1340 /**********************************************************************************/
read_geom_in_gauss_input(gchar * NameFile)1341 void read_geom_in_gauss_input(gchar *NameFile)
1342 {
1343 	FilePosTypeGeom j;
1344  	j=  get_geometry_type_from_gauss_input_file(NameFile);
1345  	if( j.geomtyp == GEOM_IS_XYZ)
1346 		read_XYZ_from_gauss_input_file(NameFile,j);
1347       	else
1348  	if( j.geomtyp == GEOM_IS_ZMAT)
1349 		read_Zmat_from_gauss_input_file(NameFile,j);
1350         else
1351     		Message(_("Sorry\nI can not read gemetry in gaussian input file\n"),_("Warning"),TRUE);
1352 }
1353 /**********************************************************************************/
read_geom_in_molcas_input(gchar * NameFile)1354 void read_geom_in_molcas_input(gchar *NameFile)
1355 {
1356 	setMolcasGeometryFromInputFile(NameFile);
1357 }
1358 /**********************************************************************************/
read_geom_in_molpro_input(gchar * NameFile)1359 void read_geom_in_molpro_input(gchar *NameFile)
1360 {
1361 	FilePosTypeGeom j;
1362  	j=  get_geometry_type_from_molpro_input_file(NameFile);
1363 
1364  	if( j.geomtyp == GEOM_IS_XYZ)
1365 		read_XYZ_from_molpro_input_file(NameFile,j);
1366         else
1367  	if( j.geomtyp == GEOM_IS_ZMAT)
1368 		read_Zmat_from_molpro_input_file(NameFile,j);
1369         else
1370     		Message(_("Sorry\nI can not read gemetry in molpro input file\n"),_("Warning"),TRUE);
1371 }
1372 /**********************************************************************************/
read_geom_in_nwchem_input(gchar * NameFile)1373 void read_geom_in_nwchem_input(gchar *NameFile)
1374 {
1375 	FilePosTypeGeom j;
1376  	j=  get_geometry_type_from_nwchem_input_file(NameFile);
1377  	if( j.geomtyp == GEOM_IS_XYZ)
1378 		read_XYZ_from_nwchem_input_file(NameFile);
1379       	else
1380  	if( j.geomtyp == GEOM_IS_ZMAT)
1381 		read_Zmat_from_nwchem_input_file(NameFile);
1382         else
1383     		Message(_("Sorry\nI can not read gemetry in NWChem input file\n"),_("Warning"),TRUE);
1384 }
1385 /**********************************************************************************/
read_geom_in_psicode_input(gchar * NameFile)1386 void read_geom_in_psicode_input(gchar *NameFile)
1387 {
1388 	FilePosTypeGeom j;
1389  	j=  get_geometry_type_from_psicode_input_file(NameFile);
1390  	if( j.geomtyp == GEOM_IS_XYZ)
1391 		read_XYZ_from_psicode_input_file(NameFile);
1392       	else
1393  	if( j.geomtyp == GEOM_IS_ZMAT)
1394 		read_Zmat_from_psicode_input_file(NameFile);
1395         else
1396     		Message(_("Sorry\nI can not read gemetry in Psicode input file\n"),_("Warning"),TRUE);
1397 }
1398 /**********************************************************************************/
read_geom_in_orca_input(gchar * NameFile)1399 void read_geom_in_orca_input(gchar *NameFile)
1400 {
1401 	FilePosTypeGeom j;
1402  	j=  get_geometry_type_from_orca_input_file(NameFile);
1403  	if( j.geomtyp == GEOM_IS_XYZ)
1404 		read_XYZ_from_orca_input_file(NameFile);
1405       	else
1406  	if( j.geomtyp == GEOM_IS_ZMAT)
1407 		read_Zmat_from_orca_input_file(NameFile);
1408         else
1409     		Message(_("Sorry\nI can not read gemetry in Orca input file\n"),_("Warning"),TRUE);
1410 }
1411 /**********************************************************************************/
read_geom_in_qchem_input(gchar * NameFile)1412 void read_geom_in_qchem_input(gchar *NameFile)
1413 {
1414 	FilePosTypeGeom j;
1415  	j=  get_geometry_type_from_qchem_input_file(NameFile);
1416  	if( j.geomtyp == GEOM_IS_XYZ)
1417 		read_XYZ_from_qchem_input_file(NameFile);
1418       	else
1419  	if( j.geomtyp == GEOM_IS_ZMAT)
1420 		read_Zmat_from_qchem_input_file(NameFile);
1421         else
1422     		Message(_("Sorry\nI can not read gemetry in Q-Chem input file\n"),_("Warning"),TRUE);
1423 }
1424 /**********************************************************************************/
read_geom_in_mopac_input(gchar * NameFile)1425 void read_geom_in_mopac_input(gchar *NameFile)
1426 {
1427 	FilePosTypeGeom j;
1428  	j=  get_geometry_type_from_mopac_input_file(NameFile);
1429  	if( j.geomtyp == GEOM_IS_XYZ)
1430 		read_XYZ_from_mopac_input_file(NameFile);
1431       	else
1432  	if( j.geomtyp == GEOM_IS_ZMAT)
1433 		read_Zmat_from_mopac_input_file(NameFile);
1434         else
1435     		Message(_("Sorry\nI can not read gemetry in Mopac input file\n"),_("Warning"),TRUE);
1436 }
1437 /**********************************************************************************/
get_doc(gchar * NomFichier)1438 void get_doc(gchar *NomFichier)
1439 {
1440 	gchar *t;
1441 	FILE *fd;
1442 	guint nchar;
1443 	guint taille=BSIZE;
1444 
1445 	if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) return ;
1446 
1447 	t=g_malloc(taille*sizeof(gchar));
1448 	fd = FOpen(NomFichier, "rb");
1449 	if(fd==NULL)
1450 	{
1451 		//fprintf(stderr,"Sorry, I can not open\n %s\n file",NomFichier);
1452 		g_free(t);
1453 		t = g_strdup_printf(_("Sorry, I can not open\n %s\n file"),NomFichier);
1454 		Message(t,_("Error"),TRUE);
1455 		g_free(t);
1456 		return;
1457 	}
1458 
1459 	iprogram = get_type_of_program(fd);
1460 	//fprintf(stderr,"iprog=%d",iprogram);
1461 
1462 	nchar=gabedit_text_get_length(GABEDIT_TEXT(text));
1463 	gabedit_text_set_point(GABEDIT_TEXT(text),0);
1464 	gabedit_text_forward_delete(GABEDIT_TEXT(text),nchar);
1465 
1466 	while(1)
1467 	{
1468 		nchar = fread(t, 1, taille, fd);
1469 		gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, t,nchar);
1470      		if(nchar<taille) break;
1471 	}
1472 	fclose(fd);
1473 
1474 	g_free(t);
1475 	gabedit_text_set_point(GABEDIT_TEXT(text),0);
1476 
1477 	fileopen.remotehost = NULL;
1478 	fileopen.remoteuser = NULL;
1479 	fileopen.remotepass = NULL;
1480 	fileopen.remotedir = NULL;
1481 	fileopen.command = NULL;
1482 	fileopen.netWorkProtocol = defaultNetWorkProtocol;
1483 
1484 	if(iprogram == PROG_IS_MPQC) fileopen.command=g_strdup(NameCommandMPQC);
1485 	else if(iprogram == PROG_IS_DEMON) fileopen.command=g_strdup(NameCommandDeMon);
1486 	else if(iprogram == PROG_IS_GAMESS) fileopen.command=g_strdup(NameCommandGamess);
1487 	else if(iprogram == PROG_IS_FIREFLY) fileopen.command=g_strdup(NameCommandFireFly);
1488 	else if(iprogram == PROG_IS_GAUSS) fileopen.command=g_strdup(NameCommandGaussian);
1489 	else if(iprogram == PROG_IS_MOLCAS) fileopen.command=g_strdup(NameCommandMolcas);
1490 	else if(iprogram == PROG_IS_MOLPRO) fileopen.command=g_strdup(NameCommandMolpro);
1491 	else if(iprogram == PROG_IS_QCHEM) fileopen.command=g_strdup(NameCommandQChem);
1492 	else if(iprogram == PROG_IS_ORCA) fileopen.command=g_strdup(NameCommandOrca);
1493 	else if(iprogram == PROG_IS_MOPAC) fileopen.command=g_strdup(NameCommandMopac);
1494      	else fileopen.command=NULL;
1495 
1496 	if(iprogram> PROG_IS_OTHER )
1497 	{
1498 		fileopen.datafile = get_name_file(NomFichier);
1499 		t = get_suffix_name_file(NomFichier);
1500 		fileopen.projectname = get_name_file(t);
1501 		fileopen.localdir = get_name_dir(t);
1502 		g_free(t);
1503 		CreeFeuille(treeViewProjects, noeud[iprogram],fileopen.projectname,fileopen.datafile ,fileopen.localdir,
1504 			fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,iprogram,  fileopen.command, fileopen.netWorkProtocol);
1505 	}
1506 	else
1507 	{
1508   		fileopen.projectname = get_name_file(NomFichier);
1509   		fileopen.localdir = get_name_dir(NomFichier);
1510  		CreeFeuille(treeViewProjects, noeud[NBNOD-1],fileopen.projectname,fileopen.projectname,fileopen.localdir,
1511 				fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,NBNOD-1,  fileopen.command, fileopen.netWorkProtocol);
1512 	}
1513 
1514 	if(iprogram == PROG_IS_GAMESS)
1515 	{
1516  		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1517  		fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname);
1518  		fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname);
1519   		/* fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);*/
1520   		fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname);
1521 	}
1522 	else
1523 	if(iprogram == PROG_IS_FIREFLY)
1524 	{
1525  		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1526  		fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname);
1527  		fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname);
1528   		/* fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);*/
1529   		fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname);
1530 	}
1531 	else
1532 	if(iprogram == PROG_IS_DEMON)
1533 	{
1534  		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1535  		fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname);
1536  		fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname);
1537   		fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);
1538 	}
1539 	else
1540 	if(iprogram == PROG_IS_MPQC)
1541 	{
1542  		fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname);
1543  		fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname);
1544  		fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname);
1545   		fileopen.moldenfile=g_strdup_printf("'%s.molden'", fileopen.projectname);
1546 	}
1547 	else
1548 	if(iprogram == PROG_IS_MOLCAS)
1549 	{
1550  		fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname);
1551  		fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname);
1552  		fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname);
1553   		/* fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);*/
1554   		fileopen.moldenfile=g_strdup_printf("'%s.*.molden'", fileopen.projectname);
1555 	}
1556 	else
1557 	if(iprogram == PROG_IS_MOLPRO)
1558 	{
1559  		fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname);
1560  		fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname);
1561  		fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname);
1562   		fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);
1563 	}
1564 	else if(iprogram == PROG_IS_GAUSS)
1565  	{
1566  		fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname);
1567  		fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname);
1568  		fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname);
1569   		fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname);
1570  	}
1571 	else if(iprogram == PROG_IS_ORCA)
1572  	{
1573  		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1574  		fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname);
1575  		fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname);
1576   		fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname);
1577  	}
1578 	else if(iprogram == PROG_IS_NWCHEM)
1579  	{
1580  		fileopen.datafile = g_strdup_printf("%s.nw",fileopen.projectname);
1581  		fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname);
1582  		fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname);
1583   		fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname);
1584  	}
1585 	else if(iprogram == PROG_IS_QCHEM)
1586  	{
1587  		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1588  		fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname);
1589  		fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname);
1590   		fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname);
1591  	}
1592 	else if(iprogram == PROG_IS_MOPAC)
1593  	{
1594  		fileopen.datafile = g_strdup_printf("%s.mop",fileopen.projectname);
1595  		fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname);
1596  		fileopen.logfile=g_strdup_printf("%s.aux",fileopen.projectname);
1597   		fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname);
1598  	}
1599 	else
1600 	{
1601  		fileopen.datafile = g_strdup_printf("%s",fileopen.projectname);
1602  		fileopen.outputfile=g_strdup_printf("%s","Unknown");
1603  		fileopen.logfile = g_strdup_printf("%s","Unknown");
1604 	}
1605 
1606 	if( iprogram == PROG_IS_GAUSS) read_geom_in_gauss_input(NomFichier);
1607 	else if( iprogram == PROG_IS_DEMON) read_geom_in_demon_input(NomFichier);
1608 	else if( iprogram == PROG_IS_GAMESS) read_geom_in_gamess_input(NomFichier);
1609 	else if( iprogram == PROG_IS_FIREFLY) read_geom_in_firefly_input(NomFichier);
1610 	else if( iprogram == PROG_IS_MOLPRO) read_geom_in_molpro_input(NomFichier);
1611 	else if( iprogram == PROG_IS_MPQC) read_geom_in_mpqc_input(NomFichier);
1612 	else if( iprogram == PROG_IS_ORCA) read_geom_in_orca_input(NomFichier);
1613 	else if( iprogram == PROG_IS_NWCHEM) read_geom_in_nwchem_input(NomFichier);
1614 	else if( iprogram == PROG_IS_PSICODE) read_geom_in_psicode_input(NomFichier);
1615 	else if( iprogram == PROG_IS_QCHEM) read_geom_in_qchem_input(NomFichier);
1616 	else if( iprogram == PROG_IS_MOPAC) read_geom_in_mopac_input(NomFichier);
1617 	else if(iprogram == PROG_IS_MOLCAS)
1618 	{
1619 		setMolcasVariablesFromInputFile(NomFichier);
1620 		read_geom_in_molcas_input(NomFichier);
1621 	}
1622 
1623 	data_modify(FALSE);
1624 
1625 	if(GeomConvIsOpen) find_energy_all(NULL,NULL);
1626 
1627 }
1628 /********************************************************************************/
show_doc(GabeditFileChooser * SelecteurFichier,gint response_id)1629  void show_doc(GabeditFileChooser *SelecteurFichier, gint response_id)
1630 {
1631 
1632  char *NomFichier;
1633  if(response_id != GTK_RESPONSE_OK) return;
1634  NomFichier = gabedit_file_chooser_get_current_file(SelecteurFichier);
1635  get_doc(NomFichier);
1636  }
1637 /********************************************************************************/
insert_doc(GabeditFileChooser * SelecteurFichier,gint response_id)1638  void insert_doc(GabeditFileChooser *SelecteurFichier, gint response_id)
1639 {
1640  char *t;
1641  char *NomFichier;
1642  guint nchar;
1643  FILE *fd;
1644  guint taille=BSIZE;
1645  if(response_id != GTK_RESPONSE_OK) return;
1646  NomFichier = gabedit_file_chooser_get_current_file(SelecteurFichier);
1647  if ((!NomFichier) || (strcmp(NomFichier,"") == 0))
1648 		    return ;
1649 
1650 
1651  t=g_malloc(taille);
1652  fd = FOpen(NomFichier, "rb");
1653  if(fd!=NULL)
1654  {
1655   while(1)
1656   {
1657      nchar = fread(t, 1, taille, fd);
1658      gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, t,nchar);
1659      if(nchar<taille) break;
1660   }
1661   fclose(fd);
1662  }
1663  g_free(t);
1664  gabedit_text_set_point(GABEDIT_TEXT(text),0);
1665  set_last_directory(NomFichier);
1666 }
1667 /********************************************************************************/
charge_doc(GtkWidget * wid,gpointer data)1668  void charge_doc(GtkWidget* wid, gpointer data)
1669 {
1670  gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0);
1671  choose_file_to_open();
1672 }
1673 /********************************************************************************/
inserrer_doc(void)1674  void inserrer_doc(void)
1675 {
1676  gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0);
1677  choose_file_to_insert();
1678  /*data_modify(TRUE);*/
1679 }
1680 /********************************************************************************/
enreg_doc(gchar * NomFichier)1681 static gboolean enreg_doc(gchar *NomFichier)
1682 {
1683 	gchar *temp;
1684 	FILE *fd;
1685 	gint i;
1686 
1687 	fd = FOpen(NomFichier, "wb");
1688 	if(fd == NULL)
1689 	{
1690 		Message(_("Sorry, I can not save file"),_("Error"),TRUE);
1691 		return FALSE;
1692 	}
1693 	temp=gabedit_text_get_chars(text,0,-1);
1694 	for(i=0;i<strlen(temp);i++)
1695 		if(temp[i]=='\r') temp[i] = ' ';
1696 	fprintf(fd,"%s",temp);
1697 	fclose(fd);
1698 	g_free(temp);
1699 	set_last_directory(NomFichier);
1700 	return TRUE;
1701 }
1702 /********************************************************************************/
enreg_selec_doc(GabeditFileChooser * SelecteurFichier,gint response_id)1703 void enreg_selec_doc(GabeditFileChooser *SelecteurFichier , gint response_id)
1704 {
1705 	gchar *temp;
1706 	gchar *NomFichier;
1707 
1708  	if(response_id != GTK_RESPONSE_OK) return;
1709  	NomFichier = gabedit_file_chooser_get_current_file(SelecteurFichier);
1710 
1711 	if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) return ;
1712 
1713 	if(iprogram == PROG_IS_MPQC) fileopen.command=g_strdup(NameCommandMPQC);
1714 	else if(iprogram == PROG_IS_DEMON) fileopen.command=g_strdup(NameCommandDeMon);
1715 	else if(iprogram == PROG_IS_GAMESS) fileopen.command=g_strdup(NameCommandGamess);
1716 	else if(iprogram == PROG_IS_FIREFLY) fileopen.command=g_strdup(NameCommandFireFly);
1717 	else if(iprogram == PROG_IS_GAUSS) fileopen.command=g_strdup(NameCommandGaussian);
1718 	else if(iprogram == PROG_IS_MOLCAS) fileopen.command=g_strdup(NameCommandMolcas);
1719 	else if(iprogram == PROG_IS_MOLPRO) fileopen.command=g_strdup(NameCommandMolpro);
1720      	else fileopen.command=NULL;
1721 
1722 	if(iprogram>PROG_IS_OTHER)
1723 	{
1724  		temp = get_suffix_name_file(NomFichier);
1725  		fileopen.projectname = get_name_file(temp);
1726  		fileopen.localdir = get_name_dir(temp);
1727  		g_free(temp);
1728 		if(iprogram==PROG_IS_GAMESS)
1729 		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1730 		else
1731 		if(iprogram==PROG_IS_FIREFLY)
1732 		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1733 		else
1734 		if(iprogram==PROG_IS_DEMON)
1735 		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1736 		else
1737 		if(iprogram==PROG_IS_QCHEM)
1738 		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1739 		else
1740 		if(iprogram==PROG_IS_MOPAC)
1741 		fileopen.datafile = g_strdup_printf("%s.mop",fileopen.projectname);
1742 		else
1743 		fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname);
1744 		if(NomFichier) g_free(NomFichier);
1745 		NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile);
1746 
1747  		fileopen.remotehost = NULL;
1748  		fileopen.remoteuser = NULL;
1749  		fileopen.remotepass = NULL;
1750  		fileopen.remotedir = NULL;
1751 		fileopen.netWorkProtocol = defaultNetWorkProtocol;
1752 
1753  		CreeFeuille(treeViewProjects, noeud[iprogram],fileopen.projectname,fileopen.datafile,fileopen.localdir,
1754 					fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,iprogram,  fileopen.command, fileopen.netWorkProtocol);
1755 	}
1756 	else
1757 	{
1758 		temp = NomFichier;
1759  		fileopen.projectname = get_name_file(temp);
1760  		fileopen.localdir = get_name_dir(temp);
1761  		fileopen.remotehost = NULL;
1762  		fileopen.remoteuser = NULL;
1763  		fileopen.remotepass = NULL;
1764 		fileopen.netWorkProtocol = defaultNetWorkProtocol;
1765  		CreeFeuille(treeViewProjects, noeud[NBNOD-1],fileopen.projectname,fileopen.projectname,
1766 			fileopen.localdir,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,NBNOD-1,  fileopen.command, fileopen.netWorkProtocol);
1767 	}
1768 
1769 	if(iprogram == PROG_IS_MPQC)
1770 	{
1771 		fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname);
1772 	 	fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
1773  		fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname);
1774  		fileopen.moldenfile = g_strdup_printf("%s.molden",fileopen.projectname);
1775 	}
1776 	else
1777 	if(iprogram == PROG_IS_GAMESS)
1778 	{
1779 		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1780 	 	fileopen.outputfile = g_strdup_printf("%s.log",fileopen.projectname);
1781  		fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname);
1782  		fileopen.moldenfile = g_strdup_printf("%s.log",fileopen.projectname);
1783 	}
1784 	else
1785 	if(iprogram == PROG_IS_FIREFLY)
1786 	{
1787 		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1788 	 	fileopen.outputfile = g_strdup_printf("%s.log",fileopen.projectname);
1789  		fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname);
1790  		fileopen.moldenfile = g_strdup_printf("%s.log",fileopen.projectname);
1791 	}
1792 	else
1793 	if(iprogram == PROG_IS_DEMON)
1794 	{
1795 		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1796 	 	fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
1797  		fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname);
1798  		fileopen.moldenfile = g_strdup_printf("%s.out",fileopen.projectname);
1799 	}
1800 	else
1801 	if(iprogram == PROG_IS_GAUSS)
1802 	{
1803 		fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname);
1804 	 	fileopen.outputfile = g_strdup_printf("%s.log",fileopen.projectname);
1805  		fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname);
1806  		fileopen.moldenfile = g_strdup_printf("%s.log",fileopen.projectname);
1807 	}
1808 	else if(iprogram == PROG_IS_MOLCAS)
1809 	{
1810  		fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname);
1811  		fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
1812 		fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname);
1813 		fileopen.moldenfile = g_strdup_printf("%s.molden",fileopen.projectname);
1814 	}
1815 	else if(iprogram == PROG_IS_MOLPRO)
1816 	{
1817  		fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname);
1818  		fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
1819 		fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname);
1820 		fileopen.moldenfile = g_strdup_printf("%s.molden",fileopen.projectname);
1821 	}
1822 	else if(iprogram == PROG_IS_QCHEM)
1823 	{
1824  		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1825  		fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
1826 		fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname);
1827 		fileopen.moldenfile = g_strdup_printf("%s.molden",fileopen.projectname);
1828 	}
1829 	else if(iprogram == PROG_IS_ORCA)
1830 	{
1831  		fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname);
1832  		fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
1833 		fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname);
1834 		fileopen.moldenfile = g_strdup_printf("%s.molden",fileopen.projectname);
1835 	}
1836      	else
1837 	{
1838 		fileopen.datafile = g_strdup(NomFichier);
1839 		fileopen.outputfile = g_strdup("Unknown");
1840 		fileopen.logfile = g_strdup("Unknown");
1841 	}
1842 
1843 	if(enreg_doc(NomFichier))
1844 	{
1845  		change_label_onglet();
1846  		data_modify(FALSE);
1847 	}
1848 }
1849 /********************************************************************************/
save_as_doc(void)1850  void save_as_doc(void)
1851 {
1852 	choose_file_to_save();
1853 }
1854 /********************************************************************************/
save_doc(void)1855 void save_doc(void)
1856 {
1857 	 if ( strcmp(fileopen.datafile,"NoName") != 0)
1858 	 {
1859 		gchar* FileName =  g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile);
1860  		if(enreg_doc(FileName))
1861 			data_modify(FALSE);
1862 
1863 		g_free(FileName);
1864 	 }
1865 	else
1866 		choose_file_to_save();
1867 }
1868 /********************************************************************************/
new_doc_molcas(GtkWidget * wid,gpointer data)1869 void new_doc_molcas(GtkWidget* wid, gpointer data)
1870 {
1871  	newMolcas();
1872 	iprogram = PROG_IS_MOLCAS;
1873 }
1874 /********************************************************************************/
new_doc_molpro(GtkWidget * wid,gpointer data)1875  void new_doc_molpro(GtkWidget* wid, gpointer data)
1876 {
1877  	molpro();
1878 	iprogram = PROG_IS_MOLPRO;
1879 }
1880 /********************************************************************************/
new_doc_mpqc(GtkWidget * wid,gpointer data)1881  void new_doc_mpqc(GtkWidget* wid, gpointer data)
1882 {
1883  	newMPQC();
1884 	iprogram = PROG_IS_MPQC;
1885 }
1886 /********************************************************************************/
new_doc_gamess(GtkWidget * wid,gpointer data)1887  void new_doc_gamess(GtkWidget* wid, gpointer data)
1888 {
1889  	newGamess();
1890 	iprogram = PROG_IS_GAMESS;
1891 	fileopen.command=g_strdup(NameCommandGamess);
1892 }
1893 /********************************************************************************/
new_doc_demon(GtkWidget * wid,gpointer data)1894  void new_doc_demon(GtkWidget* wid, gpointer data)
1895 {
1896  	newDeMon();
1897 	iprogram = PROG_IS_DEMON;
1898 	fileopen.command=g_strdup(NameCommandDeMon);
1899 }
1900 /********************************************************************************/
new_doc_firefly(GtkWidget * wid,gpointer data)1901  void new_doc_firefly(GtkWidget* wid, gpointer data)
1902 {
1903  	newFireFly();
1904 	iprogram = PROG_IS_FIREFLY;
1905 	fileopen.command=g_strdup(NameCommandFireFly);
1906 }
1907 /********************************************************************************/
new_doc_gauss(GtkWidget * wid,gpointer data)1908  void new_doc_gauss(GtkWidget* wid, gpointer data)
1909 {
1910  gauss(1);
1911 }
1912 /********************************************************************************/
new_doc_orca(GtkWidget * wid,gpointer data)1913  void new_doc_orca(GtkWidget* wid, gpointer data)
1914 {
1915  	newOrca();
1916 	iprogram = PROG_IS_ORCA;
1917 	fileopen.command=g_strdup(NameCommandOrca);
1918 }
1919 /********************************************************************************/
new_doc_nwchem(GtkWidget * wid,gpointer data)1920  void new_doc_nwchem(GtkWidget* wid, gpointer data)
1921 {
1922  	newNWChem();
1923 	iprogram = PROG_IS_NWCHEM;
1924 	fileopen.command=g_strdup(NameCommandNWChem);
1925 }
1926 /********************************************************************************/
new_doc_psicode(GtkWidget * wid,gpointer data)1927 void new_doc_psicode(GtkWidget* wid, gpointer data)
1928 {
1929  	newPsicode();
1930 	iprogram = PROG_IS_PSICODE;
1931 	fileopen.command=g_strdup(NameCommandPsicode);
1932 }
1933 /********************************************************************************/
new_doc_qchem(GtkWidget * wid,gpointer data)1934  void new_doc_qchem(GtkWidget* wid, gpointer data)
1935 {
1936  	newQChem();
1937 	iprogram = PROG_IS_QCHEM;
1938 	fileopen.command=g_strdup(NameCommandQChem);
1939 }
1940 /********************************************************************************/
new_doc_mopac(GtkWidget * wid,gpointer data)1941  void new_doc_mopac(GtkWidget* wid, gpointer data)
1942 {
1943  	newMopac();
1944 	iprogram = PROG_IS_MOPAC;
1945 	fileopen.command=g_strdup(NameCommandMopac);
1946 }
1947 /********************************************************************************/
new_doc_other(GtkWidget * wid,gpointer data)1948 void new_doc_other(GtkWidget* wid, gpointer data)
1949 {
1950 	gint nchar;
1951  	reset_name_files();
1952 	data_modify(TRUE);
1953     gabedit_text_set_point(GABEDIT_TEXT(text),0);
1954 	nchar =  gabedit_text_get_length(GABEDIT_TEXT(text));
1955     gabedit_text_forward_delete(GABEDIT_TEXT(text),nchar);
1956 	gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0);
1957 }
1958 /********************************************************************************/
insert_doc_gauss(void)1959  void insert_doc_gauss(void)
1960 {
1961  gauss(0);
1962 }
1963 /********************************************************************************/
show_about_new()1964 static void show_about_new()
1965  {
1966 	static const gchar *authors[] = {
1967 		"Abdul-Rahman Allouche <allouchear@users.sourceforge.net>",
1968 		NULL
1969 	};
1970 
1971 	static const gchar *documenters[] = {
1972 		"Abdul-Rahman Allouche <allouchear@users.sourceforge.net>",
1973 		NULL
1974 	};
1975 
1976 	static const gchar *copyright =
1977 		"Copyright \xc2\xa9 2002-2013 Abdul-Rahman Allouche.\n"
1978 		"All rights reserved.\n";
1979 
1980 	gchar *license =
1981 		g_strdup_printf("%s%s",
1982 			copyright,
1983 			"\n"
1984 			"Permission is hereby granted, free of charge, to any person obtaining a copy\n"
1985 			"of this software(the Gabedit) and associated documentation files, to deal in\n"
1986 			"the Software without restriction, including without limitation the rights to\n"
1987 			"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n"
1988 			"of the Software, and to permit persons to whom the Software is furnished to \n"
1989 			"do so, subject to the following conditions:\n"
1990 			"\n"
1991 			"The above copyright notice and this permission notice shall be included in all\n"
1992 			"copies or substantial portions of the Software.\n"
1993 			"\n"
1994 			"THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
1995 			"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
1996 			"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n"
1997 			"THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n"
1998 			"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n"
1999 			"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n"
2000 			"DEALINGS IN THE SOFTWARE."
2001 			);
2002 
2003 	static const gchar *comments =
2004 		"Graphical User Interface to DeMon, FireFly, GAMESS-US, Gaussian, Molcas, Molpro, "
2005 		"OpenMopac, Orca, MPQC, NWChem and Q-Chem computational chemistry packages.\n\n"
2006 		"Please use the following citations in any report or publication :\n"
2007 		"A.R. ALLOUCHE, Gabedit - A graphical user interface for computational chemistry softwares,\n"
2008 	        "Journal of Computational Chemistry, 32, 174-182(2011)\n";
2009 
2010 	gchar *GABEDIT_VERSION =
2011 		g_strdup_printf("%d.%d.%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION);
2012 
2013 	gtk_about_dialog_set_url_hook(show_homepage, NULL, NULL);
2014 
2015 	gtk_show_about_dialog (
2016 		NULL,
2017 		"name", "Gabedit",
2018 		"version", GABEDIT_VERSION,
2019 		"comments", comments,
2020 		"copyright", copyright,
2021 		"license", license,
2022 		"website", "http://gabedit.sourceforge.net",
2023 		"documenters", documenters,
2024 		"authors", authors,
2025 		"logo-icon-name", GTK_STOCK_ABOUT,
2026 		NULL);
2027 
2028 	g_free(GABEDIT_VERSION);
2029 	g_free(license);
2030 }
2031 /********************************************************************************/
show_about()2032 void show_about()
2033 {
2034 	if(GTK_MAJOR_VERSION>=2 && GTK_MINOR_VERSION>=6) show_about_new();
2035 	else create_about_frame();
2036 }
2037 /********************************************************************************/
show_version()2038 void show_version()
2039 {
2040  gchar* Version_S = g_strdup_printf("%d.%d.%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION);
2041  gchar *temp=g_strdup_printf("\n Version %s \n\n Abdul-Rahman ALLOUCHE\n",Version_S);
2042  Message(temp,_("Version"),TRUE);
2043  g_free(Version_S);
2044  g_free(temp);
2045 }
2046 /********************************************************************************/
show_homepage(GtkWidget * w,gpointer data)2047 void show_homepage(GtkWidget *w,gpointer data)
2048 {
2049 
2050 #ifdef G_OS_WIN32
2051 	gchar* Command = "Iexplore.exe http://gabedit.sourceforge.net/";
2052 	system(Command);
2053 #else
2054 	gchar* Command = "mozilla  http://gabedit.sourceforge.net/ &";
2055 	if (system(Command)<0)
2056 	{
2057 		gchar* Command = "galeon http://gabedit.sourceforge.net/ &";
2058 		if (system(Command)<0)
2059 		{
2060 			gchar* Command = "konqueror http://gabedit.sourceforge.net/ &";
2061 			{int ierr = system(Command);}
2062 		}
2063 	}
2064 #endif
2065 }
2066 /********************************************************************************/
desole(void)2067 void desole(void)
2068 {
2069  char *temp=_("Sorry , this option is not active");
2070  Message(temp,_("Warning"),TRUE);
2071 }
2072 /********************************************************************************/
change_insert(void)2073  void change_insert(void)
2074 {
2075  if (iedit==0)
2076       {
2077       iedit=1;
2078       gabedit_text_set_editable(GABEDIT_TEXT(text), TRUE);
2079       }
2080   else
2081    {
2082       iedit=0;
2083       gabedit_text_set_editable(GABEDIT_TEXT(text), FALSE);
2084    }
2085 }
2086 /********************************************************************************/
create_label_hbox(GtkWidget * hbox,gchar * tlabel,gint llen)2087 void  create_label_hbox(GtkWidget *hbox,gchar *tlabel,gint llen)
2088 {
2089     GtkWidget* label;
2090     label = gtk_label_new(tlabel);
2091     gtk_widget_set_size_request(GTK_WIDGET(label),llen,-1);
2092     gtk_box_pack_start(GTK_BOX(hbox), label,FALSE,FALSE,2);
2093 }
2094 /********************************************************************************/
create_text(GtkWidget * win,GtkWidget * frame,gboolean editable)2095 GtkWidget *create_text(GtkWidget *win,GtkWidget *frame,gboolean editable)
2096 {
2097   GtkWidget *Text;
2098   GtkWidget *scrolledwindow;
2099   scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
2100   g_object_ref (scrolledwindow);
2101   g_object_set_data_full (G_OBJECT (win), "scrolledwindow", scrolledwindow,
2102                             (GDestroyNotify) g_object_unref);
2103   gtk_widget_show (scrolledwindow);
2104   gtk_container_add (GTK_CONTAINER (frame), scrolledwindow);
2105   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2106 
2107   Text = gabedit_text_new ();
2108   g_object_ref (Text);
2109   g_object_set_data_full (G_OBJECT (win), "Text", Text,
2110                             (GDestroyNotify) g_object_unref);
2111   gtk_widget_show (Text);
2112   gtk_container_add (GTK_CONTAINER (scrolledwindow), Text);
2113   gabedit_text_set_editable (GABEDIT_TEXT (Text), editable);
2114   return Text;
2115 }
2116 /********************************************************************************/
gtk_combo_box_entry_set_popdown_strings(GtkWidget * comboBoxEntry,GList * list)2117 void  gtk_combo_box_entry_set_popdown_strings(GtkWidget* comboBoxEntry, GList *list)
2118 {
2119 	GList* l;
2120 	GtkTreeModel * model = NULL;
2121 	if(!list) return;
2122 	model = gtk_combo_box_get_model(GTK_COMBO_BOX(comboBoxEntry));
2123 	gtk_list_store_clear(GTK_LIST_STORE(model));
2124 	l = list;
2125 	while(l)
2126 	{
2127 		gtk_combo_box_append_text (GTK_COMBO_BOX (comboBoxEntry), (gchar*)(l->data));
2128 		l = l->next;
2129 	}
2130   	gtk_combo_box_set_active(GTK_COMBO_BOX (comboBoxEntry), 0);
2131 }
2132 /********************************************************************************/
create_combo_box_entry(gchar ** tlist,gint nlist,gboolean edit,gint llen,gint elen)2133 GtkWidget*  create_combo_box_entry(gchar **tlist,gint nlist, gboolean edit,gint llen,gint elen)
2134 {
2135 	GtkWidget* combo;
2136 	gint i;
2137 	combo = gtk_combo_box_entry_new_text();
2138 	for (i=0;i<nlist;i++) gtk_combo_box_append_text (GTK_COMBO_BOX (combo), tlist[i]);
2139 	gtk_widget_set_size_request(GTK_WIDGET(combo),elen,-1);
2140  	gtk_editable_set_editable((GtkEditable*) (GTK_BIN (combo)->child),edit);
2141 	if(nlist>0) gtk_combo_box_set_active(GTK_COMBO_BOX (combo), 0);
2142 	return combo;
2143 }
2144 /********************************************************************************/
create_combo_box_entry_liste(GtkWidget * Window,GtkWidget * hbox,gchar * lname,gchar ** liste,int n)2145 GtkWidget *create_combo_box_entry_liste(GtkWidget* Window,GtkWidget* hbox,gchar *lname,gchar **liste,int n)
2146 {
2147   int i;
2148   GtkWidget *label;
2149   GtkWidget *combo;
2150   GtkWidget *combo_entry;
2151 
2152   if(lname)
2153   {
2154   	label = gtk_label_new (lname);
2155   	gtk_widget_show (label);
2156   	gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 2);
2157   }
2158 
2159   combo = gtk_combo_box_entry_new_text ();
2160   gtk_widget_set_size_request(combo, (gint)(ScreenHeight*0.1), -1);
2161   gtk_widget_show (combo);
2162   gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 2);
2163 
2164   for (i=0;i<n;i++) gtk_combo_box_append_text (GTK_COMBO_BOX (combo), liste[i]);
2165   if(n>0) gtk_combo_box_set_active(GTK_COMBO_BOX (combo), 0);
2166 
2167   combo_entry = (GTK_BIN (combo)->child);
2168   gtk_widget_show (combo_entry);
2169   gtk_entry_set_text (GTK_ENTRY (combo_entry), liste[0]);
2170   return combo_entry;
2171  }
2172 /********************************************************************************/
create_label_combo_in_table(GtkWidget * table,gchar * tlabel,gchar ** tlist,gint nlist,gboolean edit,gint llen,gint elen,gint iligne)2173 GtkWidget*  create_label_combo_in_table(GtkWidget *table,gchar *tlabel,gchar **tlist,gint nlist, gboolean edit,gint llen,gint elen, gint iligne)
2174 {
2175         GtkWidget* combo;
2176         GtkWidget* label;
2177 	GtkWidget *hbox = gtk_hbox_new(0,FALSE);
2178         gint i;
2179 
2180 
2181         label = gtk_label_new(tlabel);
2182 	gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);
2183         gtk_widget_set_size_request(GTK_WIDGET(label),llen,-1);
2184         gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2185 	gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, iligne, iligne+1, GTK_FILL, GTK_FILL, 1, 1);
2186         gtk_widget_show(label);
2187         gtk_widget_show(hbox);
2188 
2189         label = gtk_label_new(":");
2190 	gtk_table_attach(GTK_TABLE(table), label, 1, 2, iligne, iligne+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1, 1);
2191 
2192         combo = gtk_combo_box_entry_new_text();
2193         for (i=0;i<nlist;i++) gtk_combo_box_append_text (GTK_COMBO_BOX (combo), tlist[i]);
2194         if(nlist>0) gtk_combo_box_set_active(GTK_COMBO_BOX (combo), 0);
2195         gtk_widget_set_size_request(GTK_WIDGET(combo),elen,-1);
2196 	gtk_table_attach(GTK_TABLE(table), combo, 2, 3, iligne, iligne+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1, 1);
2197         gtk_widget_set_sensitive(GTK_BIN(combo)->child,edit);
2198         return GTK_BIN(combo)->child;
2199 }
2200 /********************************************************************************/
create_frame(GtkWidget * win,GtkWidget * box,gchar * title)2201 GtkWidget *create_frame(GtkWidget *win,GtkWidget *box,gchar *title)
2202 {
2203   GtkWidget *frame;
2204   frame = gtk_frame_new (title);
2205   gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT);
2206   gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 0);
2207   gtk_container_set_border_width (GTK_CONTAINER (frame), 5);
2208   gtk_widget_show (frame);
2209   return frame;
2210 }
2211 /********************************************************************************/
create_hbox(GtkWidget * vbox)2212 GtkWidget *create_hbox(GtkWidget *vbox)
2213 {
2214   GtkWidget *hbox;
2215   hbox = gtk_hbox_new (TRUE, 0);
2216   gtk_widget_show (hbox);
2217   gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
2218   return hbox;
2219 }
2220 /********************************************************************************/
create_vbox(GtkWidget * win)2221 GtkWidget *create_vbox(GtkWidget *win)
2222 {
2223   GtkWidget *vbox;
2224   vbox = gtk_vbox_new (FALSE, 0);
2225   gtk_widget_show (vbox);
2226   gtk_container_add (GTK_CONTAINER (win), vbox);
2227   return vbox;
2228 }
2229 /********************************************************************************/
create_label_button(GtkWidget * win,GtkWidget * frame,GtkWidget * Vbox,gchar * tlabel,gchar * tbutton)2230 GtkWidget *create_label_button(GtkWidget *win,GtkWidget *frame,GtkWidget* Vbox,
2231                          gchar *tlabel,gchar *tbutton)
2232 {
2233   GtkWidget *label;
2234   GtkWidget *button;
2235   GtkWidget *hbox;
2236 
2237   hbox = gtk_hbox_new (FALSE, 2);
2238   g_object_ref (hbox);
2239   gtk_widget_show (hbox);
2240   gtk_box_pack_start (GTK_BOX (Vbox), hbox, FALSE, FALSE, 0);
2241 
2242   label = gtk_label_new (tlabel);
2243   g_object_ref (label);
2244   g_object_set_data_full (G_OBJECT (win), "label", label,
2245                             (GDestroyNotify) g_object_unref);
2246   gtk_widget_show (label);
2247   gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 2);
2248 
2249   button = gtk_button_new_with_label (tbutton);
2250   gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 2);
2251   gtk_widget_show (button);
2252   return button;
2253 }
2254 /********************************************************************************/
change_label_onglet()2255 void change_label_onglet()
2256 {
2257 	GtkWidget *LabelOnglet = GTK_WIDGET(g_object_get_data(G_OBJECT(text),"LabelOnglet"));
2258 	gchar *temp;
2259 	GtkStyle *style;
2260 
2261 	temp=get_name_file(fileopen.datafile);
2262 	gtk_label_set_text(GTK_LABEL(LabelOnglet),temp);
2263 
2264 	if(imodif == DATA_MOD_YES)
2265 	{
2266 		/*
2267 		PangoFontDescription *font_desc;
2268 
2269 		font_desc = pango_font_description_from_string (FontsStyleLabel.fontname);
2270 		*/
2271 		style = (GtkStyle*)g_object_get_data(G_OBJECT(text),"StyleRed");
2272 
2273 
2274 		/*
2275 		if (style && font_desc)
2276 		{
2277 			style->font_desc = font_desc;
2278 		}
2279 		*/
2280 		gtk_widget_set_style(LabelOnglet, style );
2281 	}
2282 	else
2283 	{
2284 		/*
2285   		PangoFontDescription *font_desc;
2286 
2287 		font_desc = pango_font_description_from_string (FontsStyleLabel.fontname);
2288 		*/
2289 		style = (GtkStyle*)g_object_get_data(G_OBJECT(text),"StyleDef");
2290 
2291 		/*
2292 		if (style && font_desc)
2293 		{
2294 			style->font_desc = font_desc;
2295 		}
2296 		*/
2297 
2298 		if(style) gtk_widget_set_style(LabelOnglet, style );
2299 	}
2300 
2301 	temp=get_name_file(fileopen.outputfile);
2302 	LabelOnglet = GTK_WIDGET(g_object_get_data(G_OBJECT(textresult),"LabelOnglet"));
2303 	gtk_label_set_text(GTK_LABEL(LabelOnglet),temp);
2304 
2305 	g_free(temp);
2306 
2307 }
2308 /********************************************************************************/
change_all_labels()2309 void change_all_labels()
2310 {
2311   change_label_onglet();
2312    set_label_infos_file();
2313 }
2314 /********************************************************************************/
add_widget_table(GtkWidget * Table,GtkWidget * wid,gushort line,gushort colonne)2315 void add_widget_table(GtkWidget *Table,GtkWidget *wid,gushort line,gushort colonne)
2316 {
2317 
2318 	gtk_table_attach(GTK_TABLE(Table),wid,colonne,colonne+1,line,line+1,
2319                   (GtkAttachOptions)(GTK_FILL | GTK_SHRINK),
2320                   (GtkAttachOptions)(GTK_FILL | GTK_SHRINK),
2321                   3,3);
2322 
2323 }
2324 
2325 /********************************************************************************/
add_label_table(GtkWidget * Table,G_CONST_RETURN gchar * label,gushort line,gushort colonne)2326 GtkWidget *add_label_table(GtkWidget *Table, G_CONST_RETURN gchar *label,gushort line,gushort colonne)
2327 {
2328 	GtkWidget *Label;
2329 	GtkWidget *hbox = gtk_hbox_new(0,FALSE);
2330 
2331 	Label = gtk_label_new (label);
2332    	gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT);
2333 	gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 0);
2334 	add_widget_table(Table,hbox,line,colonne);
2335 
2336 	return Label;
2337 }
2338 /********************************************************************************/
add_label_at_table(GtkWidget * Table,gchar * label,gushort line,gushort colonne,GtkJustification just)2339 GtkWidget *add_label_at_table(GtkWidget *Table,gchar *label,gushort line,gushort colonne,GtkJustification just)
2340 {
2341 	GtkWidget *Label;
2342 	GtkWidget *hbox = gtk_hbox_new(0,FALSE);
2343 
2344 	Label = gtk_label_new (label);
2345    	gtk_label_set_justify(GTK_LABEL(Label),just);
2346 	if(just ==GTK_JUSTIFY_CENTER)
2347 		gtk_box_pack_start (GTK_BOX (hbox), Label, TRUE, TRUE, 0);
2348 	else
2349 		gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 0);
2350 
2351 	add_widget_table(Table,hbox,line,colonne);
2352 
2353 	return Label;
2354 }
2355 /********************************************************************************/
get_result()2356 void get_result()
2357 {
2358 	gchar *t;
2359 	gchar *fileName;
2360 	guint nchar;
2361 	guint taille=BSIZE;
2362 	nchar=gabedit_text_get_length(GABEDIT_TEXT(textresult));
2363 	if ((!fileopen.outputfile) || (strcmp(fileopen.outputfile,"") == 0)) return ;
2364 	if ((!fileopen.localdir) || (strcmp(fileopen.localdir,"") == 0)) return ;
2365 
2366 	gabedit_text_set_point(GABEDIT_TEXT(textresult),0);
2367 	gabedit_text_forward_delete(GABEDIT_TEXT(textresult),nchar);
2368 
2369 	fileName = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.outputfile);
2370 	t = readFile(fileName);
2371 	g_free(fileName);
2372 	if(t!=NULL)
2373 	{
2374 		gtk_widget_set_sensitive(ResultLocalFrame, FALSE);
2375 		nchar=strlen(t);
2376 		gabedit_text_insert (GABEDIT_TEXT(textresult), NULL, NULL, NULL, t,nchar);
2377 		gtk_widget_set_sensitive(ResultLocalFrame, TRUE);
2378 		//g_free(t);
2379 	}
2380 	gabedit_text_set_point(GABEDIT_TEXT(textresult),0);
2381 }
2382 /********************************************************************************/
view_result_end()2383  void view_result_end()
2384 {
2385 	gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,1);
2386 	get_result();
2387 	goto_end_result(NULL,NULL);
2388 }
2389 /********************************************************************************/
view_result()2390 void view_result()
2391 {
2392 	gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,1);
2393 	get_result();
2394 }
2395 /********************************************************************************/
create_hseparator(GtkWidget * vbox)2396 GtkWidget * create_hseparator(GtkWidget *vbox)
2397 {
2398 	GtkWidget *hseparator;
2399 	hseparator = gtk_hseparator_new ();
2400 	g_object_ref (hseparator);
2401 	g_object_set_data_full (G_OBJECT (vbox), "hseparator", hseparator, (GDestroyNotify) g_object_unref);
2402 	gtk_widget_show (hseparator);
2403 	gtk_box_pack_start (GTK_BOX (vbox), hseparator, FALSE, FALSE, 1);
2404 	return hseparator;
2405 }
2406 /********************************************************************************/
create_vseparator(GtkWidget * hbox)2407 GtkWidget * create_vseparator(GtkWidget *hbox)
2408 {
2409 	GtkWidget *vseparator;
2410 	vseparator = gtk_vseparator_new ();
2411 	g_object_ref (vseparator);
2412 	g_object_set_data_full (G_OBJECT (hbox), "vseparator", vseparator, (GDestroyNotify) g_object_unref);
2413 	gtk_widget_show (vseparator);
2414 	gtk_box_pack_start (GTK_BOX (hbox), vseparator, FALSE, FALSE, 1);
2415 	return vseparator;
2416 }
2417 /********************************************************************************/
create_vbox_false(GtkWidget * win)2418 GtkWidget*  create_vbox_false(GtkWidget *win)
2419 {
2420 	GtkWidget *vbox;
2421 	vbox = gtk_vbox_new (FALSE, 0);
2422 	gtk_container_add (GTK_CONTAINER (win), vbox);
2423 	gtk_widget_show (vbox);
2424 	return vbox;
2425 }
2426 /********************************************************************************/
create_hbox_false(GtkWidget * vbox)2427 GtkWidget*  create_hbox_false(GtkWidget *vbox)
2428 {
2429 	GtkWidget *hbox;
2430 	hbox = gtk_hbox_new (FALSE, 0);
2431 	gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 2);
2432 	gtk_widget_show (hbox);
2433 	return hbox;
2434 }
2435 /********************************************************************************/
create_hbox_true(GtkWidget * vbox)2436 GtkWidget*  create_hbox_true(GtkWidget *vbox)
2437 {
2438 	GtkWidget *hbox;
2439 	hbox = gtk_hbox_new (FALSE, 0);
2440 	gtk_box_pack_start (GTK_BOX(vbox), hbox, TRUE, TRUE, 2);
2441 	gtk_widget_show (hbox);
2442 	return hbox;
2443 }
2444 /********************************************************************************/
create_label_entry(GtkWidget * hbox,gchar * tlabel,gint llen,gint elen)2445 GtkWidget*  create_label_entry(GtkWidget *hbox,gchar *tlabel,gint llen,gint elen)
2446 {
2447 	 GtkWidget* entry;
2448 	GtkWidget* label;
2449 
2450 	label = gtk_label_new(tlabel);
2451 	gtk_widget_set_size_request(GTK_WIDGET(label),llen,-1);
2452 	gtk_box_pack_start(GTK_BOX(hbox), label,FALSE,FALSE,2);
2453 
2454 	entry = gtk_entry_new();
2455 	gtk_widget_set_size_request(GTK_WIDGET(entry),elen,-1);
2456 	gtk_box_pack_start(GTK_BOX(hbox), entry,FALSE,FALSE,2);
2457 	return entry;
2458 }
2459 /********************************************************************************/
create_label_combo(GtkWidget * hbox,gchar * tlabel,gchar ** tlist,gint nlist,gboolean edit,gint llen,gint elen)2460 GtkWidget*  create_label_combo(GtkWidget *hbox,gchar *tlabel,gchar **tlist,gint nlist, gboolean edit,gint llen,gint elen)
2461 {
2462 	GtkWidget* combo;
2463 	GtkWidget* label;
2464 	gint i;
2465 
2466 	label = gtk_label_new(tlabel);
2467 	gtk_widget_set_size_request(GTK_WIDGET(label),llen,-1);
2468 	gtk_box_pack_start(GTK_BOX(hbox), label,FALSE,FALSE,2);
2469 
2470 	combo = gtk_combo_box_entry_new_text();
2471 	for (i=0;i<nlist;i++) gtk_combo_box_append_text (GTK_COMBO_BOX (combo), tlist[i]);
2472 	if(nlist>0) gtk_combo_box_set_active(GTK_COMBO_BOX (combo), 0);
2473 	gtk_widget_set_size_request(GTK_WIDGET(combo),elen,-1);
2474 	gtk_box_pack_start(GTK_BOX(hbox), combo,FALSE,FALSE,2);
2475 	gtk_widget_set_sensitive(GTK_BIN(combo)->child,edit);
2476 	return GTK_BIN(combo)->child;
2477 }
2478 /********************************************************************************/
show_forbidden_characters()2479 void show_forbidden_characters()
2480 {
2481 	gchar *temp;
2482 	gchar Forbidden[]={
2483 	'0','1','2','3','4','5','6','7','8','9',
2484     	'+','-','/','%','$','*','!','@','#','^',
2485     	'&','(',')','|','\\','<','>','?',',','~',
2486     	'`','\'','.','"',':',';'};
2487 	guint All=36;
2488 	guint i;
2489 	temp = g_strdup(_("Sorry the name of varibale is not valid !\n\n"));
2490 	temp = g_strdup_printf(_("%s The first character can not be one of : \n"),temp);
2491 	for(i=0;i<10;i++)
2492 		temp = g_strdup_printf("%s %c",temp,Forbidden[i]);
2493 	temp = g_strdup_printf("%s \n\n",temp);
2494 	temp = g_strdup_printf(_("%s Do not use the following characters :\n"),temp);
2495 	for(i=11;i<All;i++)
2496 	{
2497 		temp = g_strdup_printf("%s %c ",temp,Forbidden[i]);
2498 		if(i%10 == 0) temp = g_strdup_printf("%s \n",temp);
2499 	}
2500 	Message(temp,_("Error"),TRUE);
2501 	g_free(temp);
2502 }
2503 /********************************************************************************/
cree_p_vbox()2504 void  cree_p_vbox()
2505 {
2506 	vboxmain = gtk_vbox_new (FALSE, 0);
2507 	gtk_container_add (GTK_CONTAINER (Fenetre), vboxmain);
2508 	gtk_widget_show (vboxmain);
2509 }
2510 /********************************************************************************/
cree_vboxs_list_text()2511 void  cree_vboxs_list_text()
2512 {
2513 	GtkWidget *hpaned;
2514 
2515 	hpaned = gtk_hpaned_new();
2516 	gtk_container_add (GTK_CONTAINER (vboxmain), hpaned);
2517 
2518 	vboxlistfiles = gtk_vbox_new (FALSE, 0);
2519 	gtk_paned_add1(GTK_PANED(hpaned), vboxlistfiles);
2520 	gtk_widget_show (vboxlistfiles);
2521 
2522 	vboxtexts = gtk_vbox_new (FALSE, 0);
2523 	gtk_paned_add2(GTK_PANED(hpaned), vboxtexts);
2524 	gtk_widget_realize (vboxtexts);
2525 	gtk_widget_show (vboxtexts);
2526 	Hpaned = hpaned;
2527 }
2528 /********************************************************************************/
create_checkbutton(GtkWidget * win,GtkWidget * box,gchar * tlabel)2529 GtkWidget *create_checkbutton(GtkWidget *win,GtkWidget *box,gchar *tlabel)
2530 {
2531 	GtkWidget* checkbutton;
2532 	checkbutton = gtk_check_button_new_with_label (tlabel);
2533 	g_object_ref (checkbutton);
2534 	g_object_set_data_full (G_OBJECT (win), "checkbutton", checkbutton, (GDestroyNotify) g_object_unref);
2535 	gtk_widget_show (checkbutton);
2536 	gtk_box_pack_start (GTK_BOX (box), checkbutton, FALSE, FALSE, 0);
2537 	return checkbutton;
2538 }
2539 /********************************************************************************/
Continue_YesNo(void (* func)(GtkWidget *,gpointer data),gpointer data,gchar * message)2540 GtkWidget *Continue_YesNo(void (*func)(GtkWidget*,gpointer data),gpointer data,gchar *message)
2541 {
2542 	GtkWidget *DialogueMessage = NULL;
2543 	GtkWidget *Label, *Bouton;
2544 	GtkWidget *frame, *vboxframe;
2545 	DialogueMessage = gtk_dialog_new();
2546 	gtk_window_set_position(GTK_WINDOW(DialogueMessage),GTK_WIN_POS_CENTER);
2547 	gtk_window_set_title(GTK_WINDOW(DialogueMessage),_("Warning"));
2548 	gtk_window_set_transient_for(GTK_WINDOW(DialogueMessage),GTK_WINDOW(Fenetre));
2549 	gtk_window_set_modal (GTK_WINDOW (DialogueMessage), TRUE);
2550 
2551 
2552 	g_signal_connect(G_OBJECT(DialogueMessage), "delete_event", (GCallback)gtk_widget_destroy, NULL);
2553 
2554 	frame = gtk_frame_new (NULL);
2555 	gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT);
2556 	g_object_ref (frame);
2557 	g_object_set_data_full (G_OBJECT (DialogueMessage), "frame", frame,(GDestroyNotify) g_object_unref);
2558 	gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
2559 	gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->vbox), frame,TRUE,TRUE,0);
2560 	gtk_widget_show (frame);
2561 	vboxframe = create_vbox(frame);
2562 	gtk_widget_realize(DialogueMessage);
2563 	Label = create_label_with_pixmap(DialogueMessage,message,_("Question"));
2564 	gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0);
2565 
2566 	gtk_widget_realize(DialogueMessage);
2567 
2568 	Bouton = create_button(DialogueMessage,_("No"));
2569 	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(DialogueMessage)->action_area),Bouton,TRUE,TRUE,0);
2570 	g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(DialogueMessage));
2571 	GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT);
2572 	gtk_widget_grab_default(Bouton);
2573 
2574 	Bouton = create_button(DialogueMessage,_("Yes"));
2575 	gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->action_area), Bouton,TRUE,TRUE,0);
2576 	GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT);
2577 	g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)func,data);
2578 	g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(DialogueMessage));
2579 
2580 
2581 	gtk_widget_show_all(DialogueMessage);
2582 	return DialogueMessage;
2583 }
2584 /**********************************************************************************/
open_file(GtkWidget * widget,gchar * data)2585 void open_file(GtkWidget *widget, gchar *data)
2586 {
2587 	gchar *t;
2588  	if(imodif == DATA_MOD_YES)
2589         {
2590 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2591 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2592 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2593 		Continue_YesNo(charge_doc, NULL,t);
2594 		g_free(t);
2595         }
2596         else
2597         {
2598 		charge_doc(NULL, NULL);
2599  		data_modify(FALSE);
2600  	}
2601 }
2602 /**********************************************************************************/
new_molcas(GtkWidget * widget,gchar * data)2603 void new_molcas(GtkWidget *widget, gchar *data)
2604 {
2605 	gchar t[BSIZE];
2606 	gchar t1[BSIZE];
2607  	if(imodif == DATA_MOD_YES)
2608         {
2609 		sprintf(t,_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2610 		sprintf(t1,"%s",t);
2611 		sprintf(t,_(" %sIf you continue, you lose what you have changed.\n\n"),t1);
2612 		sprintf(t1,"%s",t);
2613 		sprintf(t,_(" %sYou want to continue?\n"),t1);
2614 		Continue_YesNo(new_doc_molcas, NULL,t);
2615         }
2616         else
2617         {
2618 		new_doc_molcas(NULL, NULL);
2619 		iprogram = PROG_IS_MOLCAS;
2620 		fileopen.command=g_strdup(NameCommandMolcas);
2621  	}
2622 }
2623 /**********************************************************************************/
new_molpro(GtkWidget * widget,gchar * data)2624 void new_molpro(GtkWidget *widget, gchar *data)
2625 {
2626 	gchar *t;
2627  	if(imodif == DATA_MOD_YES)
2628         {
2629 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2630 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2631 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2632 		Continue_YesNo(new_doc_molpro, NULL,t);
2633 		g_free(t);
2634         }
2635         else
2636         {
2637 		new_doc_molpro(NULL, NULL);
2638 		iprogram = PROG_IS_MOLPRO;
2639 		fileopen.command=g_strdup(NameCommandMolpro);
2640  	}
2641 }
2642 /**********************************************************************************/
new_mpqc(GtkWidget * widget,gchar * data)2643 void new_mpqc(GtkWidget *widget, gchar *data)
2644 {
2645 	gchar *t;
2646  	if(imodif == DATA_MOD_YES)
2647         {
2648 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2649 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2650 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2651 		Continue_YesNo(new_doc_mpqc, NULL,t);
2652 		g_free(t);
2653         }
2654         else
2655         {
2656 		new_doc_mpqc(NULL, NULL);
2657 		iprogram = PROG_IS_MPQC;
2658 		fileopen.command=g_strdup(NameCommandMPQC);
2659  	}
2660 }
2661 /**********************************************************************************/
new_firefly(GtkWidget * widget,gchar * data)2662 void new_firefly(GtkWidget *widget, gchar *data)
2663 {
2664 	gchar *t;
2665  	if(imodif == DATA_MOD_YES)
2666         {
2667 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2668 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2669 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2670 		Continue_YesNo(new_doc_firefly, NULL,t);
2671 		g_free(t);
2672         }
2673         else
2674         {
2675 		new_doc_firefly(NULL, NULL);
2676 		iprogram = PROG_IS_FIREFLY;
2677 		fileopen.command=g_strdup(NameCommandFireFly);
2678  	}
2679 }
2680 /**********************************************************************************/
new_demon(GtkWidget * widget,gchar * data)2681 void new_demon(GtkWidget *widget, gchar *data)
2682 {
2683 	gchar *t;
2684  	if(imodif == DATA_MOD_YES)
2685         {
2686 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2687 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2688 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2689 		Continue_YesNo(new_doc_demon, NULL,t);
2690 		g_free(t);
2691         }
2692         else
2693         {
2694 		new_doc_demon(NULL, NULL);
2695 		iprogram = PROG_IS_DEMON;
2696 		fileopen.command=g_strdup(NameCommandDeMon);
2697  	}
2698 }
2699 /**********************************************************************************/
new_gamess(GtkWidget * widget,gchar * data)2700 void new_gamess(GtkWidget *widget, gchar *data)
2701 {
2702 	gchar *t;
2703  	if(imodif == DATA_MOD_YES)
2704         {
2705 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2706 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2707 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2708 		Continue_YesNo(new_doc_gamess, NULL,t);
2709 		g_free(t);
2710         }
2711         else
2712         {
2713 		new_doc_gamess(NULL, NULL);
2714 		iprogram = PROG_IS_GAMESS;
2715 		fileopen.command=g_strdup(NameCommandGamess);
2716  	}
2717 }
2718 /**********************************************************************************/
new_gauss(GtkWidget * widget,gchar * data)2719 void new_gauss(GtkWidget *widget, gchar *data)
2720 {
2721 	gchar *t;
2722  	if(imodif == DATA_MOD_YES)
2723         {
2724 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2725 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2726 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2727 		Continue_YesNo(new_doc_gauss, NULL,t);
2728 		g_free(t);
2729         }
2730         else
2731         {
2732 		new_doc_gauss(NULL, NULL);
2733 		iprogram = PROG_IS_GAUSS;
2734 		fileopen.command=g_strdup(NameCommandGaussian);
2735  	}
2736 }
2737 /**********************************************************************************/
new_nwchem(GtkWidget * widget,gchar * data)2738 void new_nwchem(GtkWidget *widget, gchar *data)
2739 {
2740 	gchar *t;
2741  	if(imodif == DATA_MOD_YES)
2742         {
2743 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2744 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2745 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2746 		Continue_YesNo(new_doc_nwchem, NULL,t);
2747 		g_free(t);
2748         }
2749         else
2750         {
2751 		new_doc_nwchem(NULL, NULL);
2752 		iprogram = PROG_IS_NWCHEM;
2753 		fileopen.command=g_strdup(NameCommandNWChem);
2754  	}
2755 }
2756 /**********************************************************************************/
new_psicode(GtkWidget * widget,gchar * data)2757 void new_psicode(GtkWidget *widget, gchar *data)
2758 {
2759 	gchar *t;
2760  	if(imodif == DATA_MOD_YES)
2761         {
2762 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2763 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2764 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2765 		Continue_YesNo(new_doc_psicode, NULL,t);
2766 		g_free(t);
2767         }
2768         else
2769         {
2770 		new_doc_psicode(NULL, NULL);
2771 		iprogram = PROG_IS_PSICODE;
2772 		fileopen.command=g_strdup(NameCommandPsicode);
2773  	}
2774 }
2775 /**********************************************************************************/
new_orca(GtkWidget * widget,gchar * data)2776 void new_orca(GtkWidget *widget, gchar *data)
2777 {
2778 	gchar *t;
2779  	if(imodif == DATA_MOD_YES)
2780         {
2781 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2782 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2783 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2784 		Continue_YesNo(new_doc_orca, NULL,t);
2785 		g_free(t);
2786         }
2787         else
2788         {
2789 		new_doc_orca(NULL, NULL);
2790 		iprogram = PROG_IS_ORCA;
2791 		fileopen.command=g_strdup(NameCommandOrca);
2792  	}
2793 }
2794 /**********************************************************************************/
new_qchem(GtkWidget * widget,gchar * data)2795 void new_qchem(GtkWidget *widget, gchar *data)
2796 {
2797 	gchar *t;
2798  	if(imodif == DATA_MOD_YES)
2799         {
2800 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2801 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2802 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2803 		Continue_YesNo(new_doc_qchem, NULL,t);
2804 		g_free(t);
2805         }
2806         else
2807         {
2808 		new_doc_qchem(NULL, NULL);
2809 		iprogram = PROG_IS_QCHEM;
2810 		fileopen.command=g_strdup(NameCommandQChem);
2811  	}
2812 }
2813 /**********************************************************************************/
new_mopac(GtkWidget * widget,gchar * data)2814 void new_mopac(GtkWidget *widget, gchar *data)
2815 {
2816 	gchar *t;
2817  	if(imodif == DATA_MOD_YES)
2818         {
2819 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2820 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2821 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2822 		Continue_YesNo(new_doc_mopac, NULL,t);
2823 		g_free(t);
2824         }
2825         else
2826         {
2827 		new_doc_mopac(NULL, NULL);
2828 		iprogram = PROG_IS_MOPAC;
2829 		fileopen.command=g_strdup(NameCommandMopac);
2830  	}
2831 }
2832 /**********************************************************************************/
new_other(GtkWidget * widget,gchar * data)2833  void new_other(GtkWidget *widget, gchar *data)
2834 {
2835 	gchar *t;
2836  	if(imodif == DATA_MOD_YES)
2837         {
2838 		t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
2839 		t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
2840 		t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
2841 		Continue_YesNo(new_doc_other, NULL,t);
2842 		g_free(t);
2843         }
2844         else
2845         {
2846 		new_doc_other(NULL, NULL);
2847 		iprogram = PROG_IS_OTHER;
2848  	}
2849 }
2850 /**********************************************************************************/
create_hbox_browser(GtkWidget * Wins,GtkWidget * vbox,gchar * tlabel,gchar * deffile,gchar ** patterns)2851 GtkWidget *create_hbox_browser(GtkWidget* Wins,GtkWidget* vbox,gchar *tlabel,gchar *deffile,gchar** patterns)
2852 {
2853   GtkWidget *Entry = NULL;
2854   GtkWidget *hbox ;
2855   GtkWidget *button;
2856   GtkWidget* Label;
2857 
2858   hbox = create_hbox_false(vbox);
2859   /* The label */
2860   Label = gtk_label_new(tlabel);
2861   gtk_widget_set_size_request(GTK_WIDGET(Label),(gint)(ScreenHeight*0.06),-1);
2862   gtk_box_pack_start(GTK_BOX(hbox), Label,FALSE,FALSE,2);
2863 
2864   /* The Entry */
2865   Entry = gtk_entry_new();
2866   gtk_box_pack_start(GTK_BOX(hbox), Entry,TRUE,TRUE,2);
2867   if(deffile)
2868   {
2869   	gint len = strlen(deffile)*8;
2870   	 len = strlen(deffile)*(gint)(8);
2871 
2872   	gtk_widget_set_size_request(GTK_WIDGET(Entry),len,32);
2873 	gtk_entry_set_text(GTK_ENTRY(Entry),deffile);
2874   }
2875   else
2876   	gtk_widget_set_size_request(GTK_WIDGET(Entry),350,32);
2877 
2878   /* The Button */
2879   button = create_button_pixmap(Wins,open_xpm,NULL);
2880   g_signal_connect_swapped(G_OBJECT (button), "clicked",G_CALLBACK(set_entry_selected_file),GTK_OBJECT(hbox));
2881   gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 1);
2882   g_object_set_data(G_OBJECT (hbox), "Entry", Entry);
2883   g_object_set_data(G_OBJECT (hbox), "Button", button);
2884   g_object_set_data(G_OBJECT (hbox), "Label", Label);
2885   g_object_set_data(G_OBJECT (hbox), "Window", Wins);
2886   g_object_set_data(G_OBJECT (hbox), "Patterns",patterns);
2887   gtk_widget_show_all(hbox);
2888   return hbox;
2889 }
2890 /********************************************************************************/
create_table_browser(GtkWidget * Wins,GtkWidget * vbox)2891 GtkWidget*  create_table_browser(GtkWidget *Wins,GtkWidget *vbox)
2892 {
2893   	GtkWidget *table = gtk_table_new(2,4,FALSE);
2894 	GtkWidget* buttonDirSelector = NULL;
2895 	GtkWidget* entryFileName = NULL;
2896 	GtkWidget* label = NULL;
2897 	gint i;
2898 	gint j;
2899 
2900 	gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
2901 /*----------------------------------------------------------------------------------*/
2902 	i = 0;
2903 	j = 0;
2904 	add_label_table(table,_("Folder"),(gushort)i,(gushort)j);
2905 	j = 1;
2906 	label = gtk_label_new(":");
2907 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1);
2908 
2909 	j = 2;
2910 	buttonDirSelector =  gabedit_dir_button();
2911 	gtk_widget_set_size_request(GTK_WIDGET(buttonDirSelector),(gint)(ScreenHeight*0.2),-1);
2912 	gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1);
2913 	g_object_set_data(G_OBJECT(Wins), "ButtonDirSelector", buttonDirSelector);
2914 /*----------------------------------------------------------------------------------*/
2915 	i++;
2916 	j = 0;
2917 	add_label_table(table,_("File name"),(gushort)i,(gushort)j);
2918 	j = 1;
2919 	label = gtk_label_new(":");
2920 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1);
2921 	j = 2;
2922 	entryFileName = gtk_entry_new();
2923 	gtk_entry_set_text(GTK_ENTRY(entryFileName),"data.xyz");
2924 	gtk_widget_set_size_request(GTK_WIDGET(entryFileName),(gint)(ScreenHeight*0.2),-1);
2925 	gtk_table_attach(GTK_TABLE(table),entryFileName, j,j+4,i,i+1,
2926                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
2927                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2928                   1,1);
2929 	g_object_set_data(G_OBJECT(Wins), "EntryFileName", entryFileName);
2930 /*----------------------------------------------------------------------------------*/
2931 	gtk_widget_show_all(table);
2932 	return table;
2933 }
2934 /********************************************************************************/
set_default_styles()2935 void set_default_styles()
2936 {
2937 	/*
2938 	gchar *font = NULL;
2939 	gchar *fontLabel = NULL;
2940 	gchar *rc_string = NULL;
2941 
2942 	if(FontsStyleOther.fontname) font = g_strdup_printf("font =\"%s\"",FontsStyleOther.fontname);
2943 	else font = g_strdup(" ");
2944 
2945 	if(FontsStyleLabel.fontname) fontLabel = g_strdup_printf("font =\"%s\"",FontsStyleLabel.fontname);
2946 	else fontLabel = g_strdup(" ");
2947 
2948 	rc_string=g_strdup_printf(
2949 	 "style \"allwid\""
2950      "{"
2951 		"%s"
2952      "}"
2953 	 "style \"labels\""
2954      "{"
2955 		"%s"
2956      "}"
2957 	 "style \"frames\""
2958      "{"
2959 		"fg[NORMAL] = { 1., 0., 0. }"
2960 		"bg[NORMAL] = { 0.5, 0.5, 0.5 }"
2961 		"%s"
2962      "}"
2963 	 "style \"buttons\""
2964      "{"
2965        "fg[PRELIGHT] = { 0, 0.1, 1.0 }\n"
2966        "bg[PRELIGHT] = { 0.4, 0.4, 0.4 }\n"
2967        "bg[ACTIVE] = { 1.0, 0, 0 }\n"
2968        "fg[ACTIVE] = { 0, 1.0, 0 }\n"
2969        "bg[NORMAL] = { 0.65, 0.65, 0.65 }\n"
2970        "fg[NORMAL] = { 0.0, 0.0, 1.0 }\n"
2971        "bg[INSENSITIVE] = { 1.0, 1.0, 1.0 }\n"
2972        "fg[INSENSITIVE] = { 1.0, 0, 1.0 }\n"
2973 	   "%s"
2974      "}\n"
2975 	 "style \"toggle_button\" = \"button\"\n"
2976      "{\n"
2977        "fg[NORMAL] = { 0.0, 0.0, 0.0 }\n"
2978        "fg[ACTIVE] = { 0.0, 0.0, 1.0 }\n"
2979        "%s"
2980      "}\n"
2981 
2982        "widget_class \"*Gtk*\" style \"allwid\"\n"
2983      "widget_class \"*GtkButton*\" style \"buttons\"\n"
2984      "widget_class \"*GtkCheckButton*\" style \"toggle_button\"\n"
2985      "widget_class \"*GtkRadioButton*\" style \"toggle_button\"\n"
2986      "widget_class \"*GtkToggleButton*\" style \"toggle_button\"\n"
2987 	 "widget_class \"*GtkFrame\" style \"frames\"\n"
2988 	 "widget_class \"*GtkLabel\" style \"labels\"\n"
2989 	 ,font,fontLabel,font,font,font);
2990 
2991 	gtk_rc_parse_string(rc_string);
2992 
2993 	g_free(rc_string);
2994 	g_free(font);
2995 	g_free(fontLabel);
2996 	*/
2997 	gtk_rc_parse_string("gtk-icon-sizes = \"gtk-menu=13,13:gtk-small-toolbar=16,16:gtk-large-toolbar=24,24\"gtk-toolbar-icon-size = small-toolbar");
2998 }
2999 /********************************************************************************/
create_text_widget(GtkWidget * box,gchar * title,GtkWidget ** frame)3000 GtkWidget* create_text_widget(GtkWidget* box,gchar *title,GtkWidget **frame)
3001 {
3002   GtkWidget *scrolledwindow;
3003   GtkWidget *Frame;
3004   GtkWidget *Text;
3005 
3006   Frame = gtk_frame_new(title);
3007   gtk_container_set_border_width(GTK_CONTAINER(Frame), 2);
3008   gtk_container_add (GTK_CONTAINER (box), Frame);
3009 
3010   scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
3011   gtk_widget_show (scrolledwindow);
3012   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow ),
3013                    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
3014 
3015   gtk_container_add (GTK_CONTAINER (Frame), scrolledwindow);
3016   Text = gabedit_text_new ();
3017   set_tab_size (Text, 8);
3018   /*
3019   gabedit_text_set_word_wrap(GABEDIT_TEXT(Text), TRUE);
3020   gabedit_text_set_line_wrap(GABEDIT_TEXT(Text), TRUE);
3021   */
3022 
3023   gtk_widget_show (Text);
3024   gtk_container_add (GTK_CONTAINER (scrolledwindow), Text);
3025   gabedit_text_set_editable (GABEDIT_TEXT (Text), FALSE);
3026   *frame = Frame;
3027 
3028   return Text;
3029 }
3030 /*********************************************************************/
draw_density_orbitals_gamess_or_gauss_or_molcas_or_molpro(GtkWidget * wid,gpointer data)3031 void draw_density_orbitals_gamess_or_gauss_or_molcas_or_molpro(GtkWidget *wid,gpointer data)
3032 {
3033   if( iprogram == PROG_IS_GAMESS)
3034   {
3035  	gchar** FileName = g_malloc(2*sizeof(gchar*));
3036  	FileName[0] = NULL;
3037 	FileName[1] = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.logfile);
3038  	view_orb(Fenetre,2,FileName);
3039 	g_free(FileName[1] );
3040 	g_free(FileName);
3041   }
3042   else
3043   if( iprogram == PROG_IS_FIREFLY)
3044   {
3045  	gchar** FileName = g_malloc(2*sizeof(gchar*));
3046  	FileName[0] = NULL;
3047 	FileName[1] = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.logfile);
3048  	view_orb(Fenetre,2,FileName);
3049 	g_free(FileName[1] );
3050 	g_free(FileName);
3051   }
3052   else
3053   if( iprogram == PROG_IS_GAUSS)
3054   {
3055  	gchar** FileName = g_malloc(2*sizeof(gchar*));
3056  	FileName[0] = NULL;
3057 	FileName[1] = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.logfile);
3058  	view_orb(Fenetre,2,FileName);
3059 	g_free(FileName[1] );
3060 	g_free(FileName);
3061   }
3062   else
3063   if( iprogram == PROG_IS_MOLCAS)
3064   {
3065  	gchar** FileName = g_malloc(2*sizeof(gchar*));
3066  	FileName[0] = NULL;
3067 	FileName[1] = g_strdup_printf("%s%s%s.scf.molden",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.projectname);
3068  	view_orb(Fenetre,2,FileName);
3069 	g_free(FileName[1] );
3070 	g_free(FileName);
3071   }
3072   else
3073   if( iprogram == PROG_IS_MOLPRO)
3074   {
3075  	gchar** FileName = g_malloc(2*sizeof(gchar*));
3076  	FileName[0] = NULL;
3077 	FileName[1] = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.outputfile);
3078  	view_orb(Fenetre,2,FileName);
3079 	g_free(FileName[1] );
3080 	g_free(FileName);
3081   }
3082   else
3083   if( iprogram == PROG_IS_QCHEM)
3084   {
3085  	gchar** FileName = g_malloc(2*sizeof(gchar*));
3086  	FileName[0] = NULL;
3087 	FileName[1] = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.outputfile);
3088  	view_orb(Fenetre,2,FileName);
3089 	g_free(FileName[1] );
3090 	g_free(FileName);
3091   }
3092   if( iprogram == PROG_IS_MOPAC)
3093   {
3094  	gchar** FileName = g_malloc(2*sizeof(gchar*));
3095  	FileName[0] = NULL;
3096 	FileName[1] = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.outputfile);
3097  	view_orb(Fenetre,2,FileName);
3098 	g_free(FileName[1] );
3099 	g_free(FileName);
3100   }
3101   else
3102  	view_orb(Fenetre,0,NULL);
3103 }
3104 /*********************************************************************/
set_last_directory(G_CONST_RETURN gchar * FileName)3105 void set_last_directory(G_CONST_RETURN gchar* FileName)
3106 {
3107 	gchar* temp = get_suffix_name_file(FileName);
3108 	gchar* localdir = get_name_dir(temp);
3109 	if(!localdir) return;
3110 	if(lastdirectory) g_free(lastdirectory);
3111 	lastdirectory = g_strdup(localdir);
3112 	if(temp) g_free(temp);
3113 	if(localdir) g_free(localdir);
3114 	if(lastdirectory && gabedit_directory() && strcmp(lastdirectory,gabedit_directory()))
3115 		{int it = chdir(lastdirectory);}
3116 }
3117 /*********************************************************************/
get_last_directory()3118 gchar* get_last_directory()
3119 {
3120 	return lastdirectory;
3121 }
3122 /******************************************************************/
set_dipole_color(GtkColorSelection * Sel,gpointer * d)3123 static void set_dipole_color(GtkColorSelection *Sel,gpointer *d)
3124 {
3125 	GdkColor* color;
3126 	color = g_object_get_data(G_OBJECT (Sel), "Color");
3127 	gtk_color_selection_get_current_color(Sel, color);
3128 }
3129 /******************************************************************/
set_dipole_button_color(GtkObject * button,gpointer * data)3130 static void set_dipole_button_color(GtkObject *button,gpointer *data)
3131 {
3132 	GtkStyle *style = g_object_get_data(G_OBJECT (button), "Style");
3133 	GdkColor* color = g_object_get_data(G_OBJECT (button), "Color");
3134 	GtkWidget *OldButton  = g_object_get_data(G_OBJECT (button), "Button");
3135   	style =  gtk_style_copy(style);
3136   	style->bg[0].red=color->red;
3137   	style->bg[0].green=color->green;
3138   	style->bg[0].blue= color->blue;
3139 	gtk_widget_set_style(OldButton, style);
3140 }
3141 /******************************************************************/
open_color_dlg_dipole(GtkWidget * button,gpointer data)3142 static void open_color_dlg_dipole(GtkWidget *button,gpointer data)
3143 {
3144 
3145 	GtkColorSelectionDialog *colorDlg;
3146   	GtkStyle* style = g_object_get_data(G_OBJECT (button), "Style");
3147   	GtkWidget *win = g_object_get_data(G_OBJECT (button), "Win");
3148 	GdkColor* color = g_object_get_data(G_OBJECT (button), "Color");;
3149 
3150 	colorDlg = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new(_("Set Dipole Color"));
3151 	gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorDlg->colorsel), color);
3152 	gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorDlg->colorsel), color);
3153 	gtk_window_set_transient_for(GTK_WINDOW(colorDlg),GTK_WINDOW(win));
3154         gtk_window_set_position(GTK_WINDOW(colorDlg),GTK_WIN_POS_CENTER);
3155   	gtk_window_set_modal (GTK_WINDOW (colorDlg), TRUE);
3156  	g_signal_connect(G_OBJECT(colorDlg), "delete_event",(GCallback)destroy_button_windows,NULL);
3157   	g_signal_connect(G_OBJECT(colorDlg), "delete_event",G_CALLBACK(gtk_widget_destroy),NULL);
3158 
3159   	g_object_set_data(G_OBJECT (colorDlg->colorsel), "Color", color);
3160   	gtk_widget_hide(colorDlg->help_button);
3161 	g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)set_dipole_color,GTK_OBJECT(colorDlg->colorsel));
3162 
3163   	g_object_set_data(G_OBJECT (colorDlg->ok_button), "Color", color);
3164   	g_object_set_data(G_OBJECT (colorDlg->ok_button), "Button", button);
3165   	g_object_set_data(G_OBJECT (colorDlg->ok_button), "Style", style);
3166 	g_signal_connect(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)set_dipole_button_color,NULL);
3167 
3168   	g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button), "clicked", (GCallback)destroy_button_windows,GTK_OBJECT(colorDlg));
3169 	g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(colorDlg));
3170 
3171   	g_signal_connect_swapped(G_OBJECT(colorDlg->cancel_button), "clicked", (GCallback)destroy_button_windows,GTK_OBJECT(colorDlg));
3172 	g_signal_connect_swapped(G_OBJECT(colorDlg->cancel_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(colorDlg));
3173 
3174   	add_button_windows(_(" Set Color "),GTK_WIDGET(colorDlg));
3175 	gtk_widget_show(GTK_WIDGET(colorDlg));
3176 
3177 }
3178 /*********************************************************************/
set_dipole_dialog()3179 GtkWidget* set_dipole_dialog ()
3180 {
3181   GtkWidget *fp;
3182   GtkWidget *frame;
3183   GtkWidget *vboxall;
3184   GtkWidget *vboxframe;
3185   GtkWidget *hbox;
3186   GtkWidget *button;
3187   GtkWidget *label;
3188   GtkStyle *style;
3189   static GtkWidget* entrys[8];
3190   static GdkColor color;
3191   gchar* tlabel[8]={"Factor : ","X(D) : ","Y(D) : ","Z(D) : ","Radius : ","X0(Ang) : ","Y0(Ang) : ","Z0(Ang) : "};
3192   gint i;
3193 
3194   /* principal Window */
3195   fp = gtk_window_new(GTK_WINDOW_TOPLEVEL);
3196   gtk_window_set_modal(GTK_WINDOW(fp),TRUE);
3197   gtk_window_set_title(GTK_WINDOW(fp),_("Set Dipole"));
3198   gtk_container_set_border_width (GTK_CONTAINER (fp), 5);
3199 
3200   gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER);
3201   gtk_window_set_modal (GTK_WINDOW (fp), TRUE);
3202 
3203   g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)gtk_widget_destroy,NULL);
3204 
3205   vboxall = create_vbox(fp);
3206   frame = gtk_frame_new (_("Set Dipole(Debye)"));
3207   gtk_container_set_border_width (GTK_CONTAINER (frame), 5);
3208   gtk_container_add (GTK_CONTAINER (vboxall), frame);
3209   gtk_widget_show (frame);
3210 
3211   vboxframe = create_vbox(frame);
3212   for(i=0;i<5;i++)
3213   {
3214 	hbox = create_hbox(vboxframe);
3215 	label = gtk_label_new (tlabel[i]);
3216 	gtk_widget_show (label);
3217 	gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 0);
3218 
3219 	entrys[i] = gtk_entry_new ();
3220 	gtk_widget_show (entrys[i]);
3221 	gtk_box_pack_start (GTK_BOX (hbox), entrys[i], FALSE, TRUE, 0);
3222 
3223 	if(i!=0)
3224 	{
3225 		if(i==4)
3226 		{
3227 			gchar* t = g_strdup_printf("%f",Dipole.radius*AUTODEB);
3228 			gtk_entry_set_text(GTK_ENTRY(entrys[i]),t);
3229 			g_free(t);
3230 		}
3231 		else
3232 		{
3233 			gchar* t = g_strdup_printf("%f",Dipole.value[i-1]*AUTODEB);
3234 			gtk_entry_set_text(GTK_ENTRY(entrys[i]),t);
3235 			g_free(t);
3236 		}
3237 	}
3238 	else
3239 	{
3240 		if(i==0)
3241 			gtk_entry_set_text(GTK_ENTRY(entrys[i]),"1.0");
3242 		else
3243 			gtk_entry_set_text(GTK_ENTRY(entrys[i]),"0.0");
3244 	}
3245   }
3246   for(i=5;i<8;i++)
3247   {
3248 	hbox = create_hbox(vboxframe);
3249 	label = gtk_label_new (tlabel[i]);
3250 	gtk_widget_show (label);
3251 	gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 0);
3252 
3253 	entrys[i] = gtk_entry_new ();
3254 	gtk_widget_show (entrys[i]);
3255 	gtk_box_pack_start (GTK_BOX (hbox), entrys[i], FALSE, TRUE, 0);
3256 	{
3257 		gchar* t = g_strdup_printf("%f",Dipole.origin[i-5]*BOHR_TO_ANG);
3258 		gtk_entry_set_text(GTK_ENTRY(entrys[i]),t);
3259 		g_free(t);
3260 	}
3261   }
3262   hbox = gtk_hbox_new (TRUE, 0);
3263   gtk_widget_show (hbox);
3264   gtk_box_pack_start (GTK_BOX (vboxframe), hbox, FALSE, FALSE, 1);
3265 
3266   label = gtk_label_new (_("Color : "));
3267   gtk_widget_show (label);
3268   gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 0);
3269   style = gtk_widget_get_style(fp);
3270   button = gtk_button_new_with_label(" ");
3271   style =  gtk_style_copy(style);
3272   style->bg[0].red=Dipole.color[0];
3273   style->bg[0].green=Dipole.color[1];
3274   style->bg[0].blue=Dipole.color[2];
3275 
3276   color.red =style->bg[0].red;
3277   color.green =style->bg[0].green;
3278   color.blue =style->bg[0].blue;
3279   gtk_widget_set_style(button, style );
3280   gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 1);
3281   gtk_widget_show (button);
3282   g_object_set_data(G_OBJECT (button), "Style", style);
3283   g_object_set_data(G_OBJECT (button), "Win", fp);
3284   g_object_set_data(G_OBJECT (button), "Color", &color);
3285   g_signal_connect(G_OBJECT(button), "clicked", (GCallback)open_color_dlg_dipole, NULL);
3286 
3287   hbox = create_hbox(vboxall);
3288 
3289   button = create_button(Fenetre,_("Close"));
3290   gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3);
3291   g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp));
3292 
3293   button = create_button(Fenetre,_("Apply"));
3294   gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3);
3295   g_object_set_data(G_OBJECT (button), "Color", &color);
3296   g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(set_dipole),(gpointer)entrys);
3297   gtk_widget_show (button);
3298 
3299 
3300   button = create_button(Fenetre,_("OK"));
3301   gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3);
3302   g_object_set_data(G_OBJECT (button), "Color", &color);
3303   g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(set_dipole),(gpointer)entrys);
3304   g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp));
3305   gtk_widget_show (button);
3306 
3307 
3308   gtk_widget_show (button);
3309 
3310   gtk_widget_show_all(fp);
3311   return fp;
3312 }
3313 /*************************************************************************************/
fit_windows_position(GtkWidget * parent,GtkWidget * child)3314 void fit_windows_position(GtkWidget* parent, GtkWidget* child)
3315 {
3316 	gint wChild = 0, hChild = 0;
3317 	gint wParent=0, hParent=0;
3318 	gdk_drawable_get_size(parent->window,&wParent,&hParent);
3319 	gtk_window_move(GTK_WINDOW(parent),0,0);
3320 	gdk_drawable_get_size(child->window,&wChild,&hChild);
3321 	if(wParent+wChild+10<ScreenWidth) gtk_window_move(GTK_WINDOW(child),wParent+10,0);
3322 	else if(wChild<ScreenWidth) gtk_window_move(GTK_WINDOW(child),ScreenWidth-wChild,0);
3323 }
3324 /*************************************************************************************/
readOneFile(gchar * fileName,gint n0,gint * nP,gdouble * dt)3325 static gdouble** readOneFile(gchar* fileName, gint n0, gint* nP, gdouble* dt)
3326 {
3327 	gint nPoints = 0;
3328 	gdouble** Dipole= NULL;
3329 	FILE* file;
3330 	gchar t[BSIZE];
3331 	gint i;
3332 	gint k;
3333 	file = fopen(fileName,"rb");
3334 	if(!file) printf("I cannot open '%s'\n",fileName);
3335 	if(!file) return 0;
3336 	k = 0;
3337 	*nP = 0;
3338 	*dt = 0;
3339 	while(!feof(file))
3340 	{
3341 		if(!fgets(t,BSIZE,file))break;
3342 		if(strstr(t,"Maximum Steps") && strstr(t,"="))
3343 		{
3344 			nPoints = atoi(strstr(t,"=")+1);
3345 		}
3346 		if(strstr(t," Time Step") && strstr(t,"="))
3347 		{
3348 			*dt = atof(strstr(t,"=")+1);
3349 		}
3350 		if(nPoints>0 && *dt>0) break;
3351 	}
3352 	rewind(file);
3353 	if(nPoints == 0 && nPoints<n0) { return NULL;}
3354 	Dipole =   malloc(nPoints*sizeof(gdouble*));
3355         for(k=0;k<nPoints;k++) Dipole[k] = malloc(3*sizeof(gdouble));
3356 	k = 0;
3357 	while(!feof(file))
3358 	{
3359 		if(!fgets(t,BSIZE,file))break;
3360 		if(strstr(t,"Dipole        ="))
3361 		{
3362 			gchar* tt = strstr(t,"=")+1;
3363 			gchar dum[16];
3364 			gint j;
3365 			if(k<n0) { k++; continue;}
3366 			for(i=0;i<strlen(t);i++) if(t[i]=='D' || t[i] == 'd') t[i] = 'e';
3367 			for(j=0;j<3;j++)
3368 			{
3369 				gint ii = 15;
3370 				dum[ii] = '\0';
3371 				for(i=0;i<ii;i++) dum[i] = tt[i];
3372 				Dipole[k-n0][j] = atof(dum);
3373 				dum[ii] = '\0';
3374 				tt += ii;
3375 			}
3376 			k++;
3377 		}
3378 		else continue;
3379 		if(k==nPoints) break;
3380 	}
3381 	if(k!=nPoints) printf("Warning : k != nPoints in %s file\n",fileName);
3382 	fclose(file);
3383 	*nP = nPoints-n0;
3384 	return Dipole;
3385 }
3386 /********************************************************************************/
doAutoCorr(gdouble ** Dipole,gdouble * X,gint M)3387 static gint doAutoCorr(gdouble** Dipole, gdouble* X, gint M)
3388 {
3389 	int m,n,j;
3390 	for (m = 0; m < M; m++) X[m] = 0.0;
3391 	/* This algorithm was adapted from the formulas given in
3392 	 J. Kohanoff Comp. Mat. Sci. 2 221-232 (1994). The estimator
3393 	 formulation used here is unbiased and statistically consistent,
3394    	 Looping through all time origins to collect an average -
3395    	*/
3396 	int NCorr = 3*M/4;
3397 	int Nav = M - NCorr;
3398    	for (m = 0; m < NCorr; m++)
3399       	for (n = 0; n < Nav; n++)
3400             for (j = 0; j < 3; j++)
3401                X[m] += Dipole[n + m][j] * Dipole[n][j];
3402    	for (m = 0; m < NCorr; m++) X[m] /= Nav;
3403 	return NCorr;
3404 }
3405 /********************************************************************************/
read_admp_dipole_dipole_file(GabeditFileChooser * filesel,gint response_id)3406 static gboolean read_admp_dipole_dipole_file(GabeditFileChooser *filesel, gint response_id)
3407 {
3408 	gchar* fileName = NULL;
3409 	GtkWidget* entryN = NULL;
3410 	gint n0      = 1;
3411 	gdouble* X = NULL;
3412 	gdouble* Y = NULL;
3413 	gdouble* Ytmp = NULL;
3414 	gdouble** Dipole = NULL;
3415 	gdouble dt;
3416 	gint M = 0;
3417 	gint MC = 0;
3418 	gint k;
3419 	GtkWidget* xyplot;
3420 	GtkWidget* window;
3421 	GSList* lists = NULL;
3422 	GSList* cur = NULL;
3423 	gint nf = 0;
3424 	if(response_id != GTK_RESPONSE_OK) return FALSE;
3425 
3426 	lists = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(filesel));
3427 
3428 	entryN = g_object_get_data (G_OBJECT (filesel), "EntryN");
3429 	if(!entryN) return FALSE;
3430 	n0     = atoi(gtk_entry_get_text(GTK_ENTRY(entryN)));
3431 	if(n0<0) n0 = 0;
3432 
3433 	create_popup_win(_("Please wait"));
3434 	cur = lists;
3435 	nf = 0;
3436 	while(cur != NULL)
3437 	{
3438 		fileName = (gchar*)(cur->data);
3439 		nf++;
3440 		if(cur==lists)
3441 		{
3442 			Dipole = readOneFile(fileName, n0, &M, &dt);
3443 			if(M<2)
3444 			{
3445     				Message(_("Error\n The number of steps <2 !\n"),_("Error"),TRUE);
3446 				return FALSE;
3447 			}
3448 			X = g_malloc(M*sizeof(gdouble));
3449 			Y = g_malloc(M*sizeof(gdouble));
3450 			for(k=0;k<M;k++) X[k] = dt*k;
3451 			MC = doAutoCorr(Dipole, Y, M);
3452 			for(k=0;k<M;k++) g_free(Dipole[k]);
3453 			g_free(Dipole);
3454 		}
3455 		else
3456 		{
3457 			gint m = 0;
3458 			gint mc = 0;
3459 			gdouble dt0;
3460 			Dipole = readOneFile(fileName, n0, &m, &dt0);
3461 
3462 			if(m!=M || M<2)
3463 			{
3464     				Message(_("Error\n The number of steps is not same in all files\n"),_("Error"),TRUE);
3465 				return FALSE;
3466 			}
3467 
3468 			Ytmp = g_malloc(m*sizeof(gdouble));
3469 			mc = doAutoCorr(Dipole, Ytmp, m);
3470 			for(k=0;k<M;k++) g_free(Dipole[k]);
3471 			g_free(Dipole);
3472 			for(k=0;k<MC;k++) Y[k] += Ytmp[k];
3473 			g_free(Ytmp);
3474 		}
3475 
3476 		cur = cur->next;
3477 	}
3478 	if(nf>0) for(k=0;k<MC;k++) Y[k] /= nf;
3479 
3480 
3481 	window = gabedit_xyplot_new_window(_("Dipole-Dipole autocorrelation"),NULL);
3482 	xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT");
3483 	gabedit_xyplot_add_data_conv(GABEDIT_XYPLOT(xyplot),MC, X,  Y, 1.0, GABEDIT_XYPLOT_CONV_NONE,NULL);
3484 	gabedit_xyplot_set_range_xmin (GABEDIT_XYPLOT(xyplot), 0.0);
3485 	g_free(X);
3486 	g_free(Y);
3487 
3488 	return TRUE;
3489 }
3490 /********************************************************************************/
read_admp_build_dipole_dipole_autocorrelation_dlg()3491 void read_admp_build_dipole_dipole_autocorrelation_dlg()
3492 {
3493 	GtkWidget* filesel =
3494  	file_chooser_open(read_admp_dipole_dipole_file,
3495 			_("Read the ADMP Gaussian output file to do a dipole_dipole autocorrelation function"),
3496 			GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_OTHER);
3497 	GtkWidget* entryN = gtk_entry_new();
3498 	GtkWidget* hbox = gtk_hbox_new(FALSE,1);
3499 	GtkWidget* hsep1 = gtk_hseparator_new();
3500 	GtkWidget* hsep2 = gtk_hseparator_new();
3501 	GtkWidget* labelN = gtk_label_new(_("     Number of steps to remove : "));
3502 
3503 	gtk_entry_set_text(GTK_ENTRY(entryN),"0");
3504 
3505 	gtk_box_pack_start (GTK_BOX (hbox), labelN, FALSE, FALSE, 0);
3506 	gtk_box_pack_start (GTK_BOX (hbox), entryN, FALSE, FALSE, 0);
3507 
3508 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hsep1, FALSE, FALSE, 0);
3509 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hbox, FALSE, FALSE, 0);
3510 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hsep2, FALSE, FALSE, 0);
3511 	gtk_widget_show_all(hsep1);
3512 	gtk_widget_show_all(hsep2);
3513 	gtk_widget_show_all(hbox);
3514 
3515 	gtk_window_set_modal (GTK_WINDOW (filesel), TRUE);
3516 	gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(filesel),TRUE);
3517 	g_object_set_data (G_OBJECT (filesel), "EntryN",entryN);
3518 }
3519 /*************************************************************************************/
readOneTxtFile(gchar * fileName,gint n0,gint * nP,gdouble * dt)3520 static gdouble** readOneTxtFile(gchar* fileName, gint n0, gint* nP, gdouble* dt)
3521 {
3522 	gint nPoints = 0;
3523 	gdouble** Dipole= NULL;
3524 	FILE* file;
3525 	gchar t[BSIZE];
3526 	gdouble d[4];
3527 	gint i;
3528 	gint k;
3529 	double t0 = 0;
3530 	file = fopen(fileName,"rb");
3531 	if(!file) printf("I cannot open '%s'\n",fileName);
3532 	if(!file) return 0;
3533 	k = 0;
3534 	*nP = 0;
3535 	*dt = 0;
3536 	while(!feof(file))
3537 	{
3538 		if(!fgets(t,BSIZE,file))break;
3539 		if(sscanf(t,"%lf%lf%lf%lf",&d[0],&d[1],&d[2],&d[3])!=4)break;
3540 		nPoints++;
3541 	}
3542 	rewind(file);
3543 	if(nPoints == 0 || nPoints<n0) { return NULL;}
3544 	Dipole =   malloc(nPoints*sizeof(gdouble*));
3545         for(k=0;k<nPoints;k++) Dipole[k] = malloc(3*sizeof(gdouble));
3546 	k = 0;
3547 	*dt = 0;
3548 	while(!feof(file))
3549 	{
3550 		if(!fgets(t,BSIZE,file))break;
3551 		if(sscanf(t,"%lf%lf%lf%lf",&d[0],&d[1],&d[2],&d[3])!=4)break;
3552 		if(k>=n0) for(i=0;i<3;i++) Dipole[k-n0][i] = d[i+1];
3553 		*dt = d[0];
3554 		if(k==0) t0 = d[0];
3555 		k++;
3556 		if(k==nPoints) break;
3557 	}
3558 	*dt = (*dt-t0)/nPoints;
3559 	fclose(file);
3560 	*nP = nPoints-n0;
3561 	return Dipole;
3562 }
3563 /********************************************************************************/
read_dipole_text_file(GabeditFileChooser * filesel,gint response_id)3564 static gboolean read_dipole_text_file(GabeditFileChooser *filesel, gint response_id)
3565 {
3566 	gchar* fileName = NULL;
3567 	GtkWidget* entryN = NULL;
3568 	gint n0      = 1;
3569 	gdouble* X = NULL;
3570 	gdouble* Y = NULL;
3571 	gdouble* Ytmp = NULL;
3572 	gdouble** Dipole = NULL;
3573 	gdouble dt;
3574 	gint M = 0;
3575 	gint MC = 0;
3576 	gint k;
3577 	GtkWidget* xyplot;
3578 	GtkWidget* window;
3579 	GSList* lists = NULL;
3580 	GSList* cur = NULL;
3581 	gint nf = 0;
3582 	if(response_id != GTK_RESPONSE_OK) return FALSE;
3583 
3584 	lists = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(filesel));
3585 
3586 	entryN = g_object_get_data (G_OBJECT (filesel), "EntryN");
3587 	if(!entryN) return FALSE;
3588 	n0     = atoi(gtk_entry_get_text(GTK_ENTRY(entryN)));
3589 	if(n0<0) n0 = 0;
3590 
3591 	create_popup_win(_("Please wait"));
3592 	cur = lists;
3593 	nf = 0;
3594 	while(cur != NULL)
3595 	{
3596 		fileName = (gchar*)(cur->data);
3597 		nf++;
3598 		if(cur==lists)
3599 		{
3600 			Dipole = readOneTxtFile(fileName, n0, &M, &dt);
3601 			if(M<2)
3602 			{
3603     				Message(_("Error\n The number of steps <2 !\n"),_("Error"),TRUE);
3604 				return FALSE;
3605 			}
3606 			X = g_malloc(M*sizeof(gdouble));
3607 			Y = g_malloc(M*sizeof(gdouble));
3608 			for(k=0;k<M;k++) X[k] = dt*k;
3609 			MC = doAutoCorr(Dipole, Y, M);
3610 			for(k=0;k<M;k++) g_free(Dipole[k]);
3611 			g_free(Dipole);
3612 		}
3613 		else
3614 		{
3615 			gint m = 0;
3616 			gint mc = 0;
3617 			gdouble dt0;
3618 			Dipole = readOneTxtFile(fileName, n0, &m, &dt0);
3619 
3620 			if(m!=M || M<2)
3621 			{
3622     				Message(_("Error\n The number of steps is not same in all files\n"),_("Error"),TRUE);
3623 				return FALSE;
3624 			}
3625 
3626 			Ytmp = g_malloc(m*sizeof(gdouble));
3627 			mc = doAutoCorr(Dipole, Ytmp, m);
3628 			for(k=0;k<M;k++) g_free(Dipole[k]);
3629 			g_free(Dipole);
3630 			for(k=0;k<MC;k++) Y[k] += Ytmp[k];
3631 			g_free(Ytmp);
3632 		}
3633 
3634 		cur = cur->next;
3635 	}
3636 	if(nf>0) for(k=0;k<MC;k++) Y[k] /= nf;
3637 
3638 
3639 	window = gabedit_xyplot_new_window(_("Dipole-Dipole autocorrelation"),NULL);
3640 	xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT");
3641 	gabedit_xyplot_add_data_conv(GABEDIT_XYPLOT(xyplot),MC, X,  Y, 1.0, GABEDIT_XYPLOT_CONV_NONE,NULL);
3642 	gabedit_xyplot_set_range_xmin (GABEDIT_XYPLOT(xyplot), 0.0);
3643 	g_free(X);
3644 	g_free(Y);
3645 
3646 	return TRUE;
3647 }
3648 /********************************************************************************/
read_dipole_build_dipole_dipole_autocorrelation_dlg()3649 void read_dipole_build_dipole_dipole_autocorrelation_dlg()
3650 {
3651 	GtkWidget* filesel =
3652  	file_chooser_open(read_dipole_text_file,
3653 			_("Read dipole from an ascii file(fs,au,au,au) to do a dipole_dipole autocorrelation function"),
3654 			GABEDIT_TYPEFILE_TXT,GABEDIT_TYPEWIN_OTHER);
3655 	GtkWidget* entryN = gtk_entry_new();
3656 	GtkWidget* hbox = gtk_hbox_new(FALSE,1);
3657 	GtkWidget* hsep1 = gtk_hseparator_new();
3658 	GtkWidget* hsep2 = gtk_hseparator_new();
3659 	GtkWidget* labelN = gtk_label_new(_("     Number of steps to remove : "));
3660 
3661 	gtk_entry_set_text(GTK_ENTRY(entryN),"0");
3662 
3663 	gtk_box_pack_start (GTK_BOX (hbox), labelN, FALSE, FALSE, 0);
3664 	gtk_box_pack_start (GTK_BOX (hbox), entryN, FALSE, FALSE, 0);
3665 
3666 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hsep1, FALSE, FALSE, 0);
3667 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hbox, FALSE, FALSE, 0);
3668 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hsep2, FALSE, FALSE, 0);
3669 	gtk_widget_show_all(hsep1);
3670 	gtk_widget_show_all(hsep2);
3671 	gtk_widget_show_all(hbox);
3672 
3673 	gtk_window_set_modal (GTK_WINDOW (filesel), TRUE);
3674 	gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(filesel),TRUE);
3675 	g_object_set_data (G_OBJECT (filesel), "EntryN",entryN);
3676 }
3677 /********************************************************************************/
gabedit_dir_button()3678 GtkWidget* gabedit_dir_button()
3679 {
3680 	gboolean ret = FALSE;
3681 	GtkWidget* buttonDirSelector;
3682 	gchar* initial_dir = g_get_current_dir ();
3683 
3684 	buttonDirSelector =  gtk_file_chooser_button_new(_("Select your folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
3685 	ret = gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(buttonDirSelector), initial_dir);
3686 	if( ! ret ) ret = gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(buttonDirSelector), "/");
3687 	return buttonDirSelector;
3688 }
3689 
3690 /********************************************************************************************************/
add_cancel_ok_buttons(GtkWidget * Win,GtkWidget * vbox,GCallback myFunc)3691 void  add_cancel_ok_buttons(GtkWidget *Win, GtkWidget *vbox, GCallback myFunc)
3692 {
3693 	GtkWidget *hbox;
3694 	GtkWidget *button;
3695 	/* buttons box */
3696 	hbox = create_hbox_false(vbox);
3697 	gtk_widget_realize(Win);
3698 
3699 	button = create_button(Win,_("Cancel"));
3700 	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
3701 	gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3);
3702 	g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win));
3703 	g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win));
3704 	gtk_widget_show (button);
3705 
3706 	button = create_button(Win,_("OK"));
3707 	gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3);
3708 	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
3709 	gtk_widget_grab_default(button);
3710 	gtk_widget_show (button);
3711 	g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)myFunc,GTK_OBJECT(Win));
3712 
3713 	gtk_widget_show_all(vbox);
3714 }
3715