3 * This source code is part of
7 * GROningen MAchine for Chemical Simulations
10 * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
11 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
12 * Copyright (c) 2001-2004, The GROMACS development team,
13 * check out http://www.gromacs.org for more information.
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License
17 * as published by the Free Software Foundation; either version 2
18 * of the License, or (at your option) any later version.
20 * If you want to redistribute modifications, please consider that
21 * scientific software is very special. Version control is crucial -
22 * bugs must be traceable. We will be happy to consider code for
23 * inclusion in the official distribution, but derived work must not
24 * be called official GROMACS. Details are found in the README & COPYING
25 * files - if they are missing, get the official version at www.gromacs.org.
27 * To help us fund GROMACS development, we humbly ask that you cite
28 * the papers on the package - you can find them in the top README file.
30 * For more info, check our website at http://www.gromacs.org
33 * Gyas ROwers Mature At Cryogenic Speed
51 #include "gmx_fatal.h"
53 #define MBFLAGS /* MB_APPLMODAL | */ MB_DONTSHOW
55 void write_gmx(t_x11
*x11
,t_gmx
*gmx
,int mess
)
59 letter
.type
=ClientMessage
;
60 letter
.xclient
.display
=x11
->disp
;
61 letter
.xclient
.window
=gmx
->wd
->self
;
62 letter
.xclient
.message_type
=0;
63 letter
.xclient
.format
=32;
64 letter
.xclient
.data
.l
[0]=mess
;
65 letter
.xclient
.data
.l
[1]=Button1
;
66 XSendEvent(x11
->disp
,letter
.xclient
.window
,True
,0,&letter
);
69 static void shell_comm(const char *title
,const char *script
,int nsleep
)
75 strcpy(tmp
,"dialogXXXXXX");
78 if ((tfil
= fopen(tmp
,"w")) == NULL
) {
79 sprintf(tmp
,"%ctmp%cdialogXXXXXX",DIR_SEPARATOR
,DIR_SEPARATOR
);
82 if ((tfil
= fopen(tmp
,"w")) == NULL
)
83 gmx_fatal(FARGS
,"Can not open tmp file %s",tmp
);
85 fprintf(tfil
,"%s\n",script
);
86 fprintf(tfil
,"sleep %d\n",nsleep
);
89 sprintf(command
,"xterm -title %s -e sh %s",title
,tmp
);
91 fprintf(stderr
,"command: %s\n",command
);
95 printf("Warning-- No calls to system(3) supported on this platform.");
96 printf("Warning-- Skipping execution of 'system(\"%s\")'.", buf
);
98 if(0 != system(command
))
100 gmx_fatal(FARGS
,"Failed to execute command: %s",command
);
109 void show_mb(t_gmx
*gmx
,int mb
)
111 if (mb
>=0 && mb
< emNR
) {
113 ShowDlg(gmx
->mboxes
[mb
]);
117 static void hide_mb(t_gmx
*gmx
)
119 if (gmx
->which_mb
>= 0 && gmx
->which_mb
< emNR
) {
120 HideDlg(gmx
->mboxes
[gmx
->which_mb
]);
125 static void MBCallback(t_x11
*x11
,int dlg_mess
,int item_id
,
126 char *set
,void *data
)
131 if (dlg_mess
==DLG_EXIT
)
135 static t_dlg
*about_mb(t_x11
*x11
,t_gmx
*gmx
)
139 " Machine for Simulating Chemistry",
140 " Copyright (c) 1992-2000",
141 " Dept. of Biophysical Chemistry",
142 " University of Groningen"
145 return MessageBox(x11
,gmx
->wd
->self
,gmx
->wd
->text
,
146 asize(lines
),lines
,MB_OK
| MB_ICONGMX
| MBFLAGS
,
150 static void QuitCB(t_x11
*x11
,int dlg_mess
,int item_id
,
151 char *set
,void *data
)
157 if (dlg_mess
==DLG_EXIT
) {
158 if (strcasecmp("yes",set
)==0)
159 write_gmx(x11
,gmx
,IDTERM
);
163 static t_dlg
*quit_mb(t_x11
*x11
,t_gmx
*gmx
)
166 " Do you really want to Quit ?"
169 return MessageBox(x11
,gmx
->wd
->self
,gmx
->wd
->text
,
171 MB_YESNO
| MB_ICONSTOP
| MBFLAGS
,
175 static t_dlg
*help_mb(t_x11
*x11
,t_gmx
*gmx
)
178 " Help will soon be added"
181 return MessageBox(x11
,gmx
->wd
->self
,gmx
->wd
->text
,
183 MB_OK
| MB_ICONINFORMATION
| MBFLAGS
,
187 static t_dlg
*ni_mb(t_x11
*x11
,t_gmx
*gmx
)
190 " This feature has not been",
194 return MessageBox(x11
,gmx
->wd
->self
,gmx
->wd
->text
,
196 MB_OK
| MB_ICONEXCLAMATION
| MBFLAGS
,
200 enum { eExE
, eExGrom
, eExPdb
, eExConf
, eExNR
};
202 static void ExportCB(t_x11
*x11
,int dlg_mess
,int item_id
,
203 char *set
,void *data
)
210 dlg
=gmx
->dlgs
[edExport
];
215 gmx
->ExpMode
=eExpGromos
;
218 gmx
->ExpMode
=eExpPDB
;
224 fprintf(stderr
,"exportcb: item_id=%d\n",item_id
);
228 if ((bOk
=(strcasecmp("ok",set
))==0))
229 strcpy(gmx
->confout
,EditText(dlg
,eExConf
));
232 write_gmx(x11
,gmx
,IDDOEXPORT
);
237 enum { eg0
, egTOPOL
, egCONFIN
, egPARAM
, eg1
, eg1PROC
, eg32PROC
};
239 static void Extract(t_dlg
*dlg
,int ID
,char *buf
)
248 enum bond_set
{ ebShowH
=11, ebDPlus
, ebRMPBC
, ebCue
, ebSkip
, ebWait
};
250 static void BondsCB(t_x11
*x11
,int dlg_mess
,int item_id
,
251 char *set
,void *data
)
255 bool bOk
,bBond
=FALSE
;
261 ebond
= gmx
->man
->molw
->bond_type
;
262 ebox
= gmx
->man
->molw
->boxtype
;
266 if (item_id
<= eBNR
) {
270 else if (item_id
<= eBNR
+esbNR
+1) {
271 ebox
= item_id
-eBNR
-2;
276 #define DO_NOT(b) (b) = (!(b))
280 toggle_hydrogen(x11
,gmx
->man
->molw
);
283 DO_NOT(gmx
->man
->bPlus
);
285 fprintf(stderr
,"gmx->man->bPlus=%s\n",bool_names
[gmx
->man
->bPlus
]);
289 set_box_type(x11,gmx->man->molw,ebond);
292 toggle_pbc(gmx
->man
);
295 DO_NOT(gmx
->man
->bSort
);
297 fprintf(stderr
,"gmx->man->bSort=%s\n",bool_names
[gmx
->man
->bSort
]);
301 sscanf(set
,"%d",&nskip
);
303 fprintf(stderr
,"nskip: %d frames\n",nskip
);
306 gmx
->man
->nSkip
=nskip
;
309 sscanf(set
,"%d",&nwait
);
311 fprintf(stderr
,"wait: %d ms\n",nwait
);
314 gmx
->man
->nWait
=nwait
;
317 fprintf(stderr
,"item_id: %d, set: %s\n",item_id
,set
);
324 bOk
=(strcasecmp("ok",set
)==0);
325 HideDlg(gmx
->dlgs
[edBonds
]);
330 write_gmx(x11
,gmx
,IDTHIN
);
333 write_gmx(x11
,gmx
,IDFAT
);
336 write_gmx(x11
,gmx
,IDVERYFAT
);
339 write_gmx(x11
,gmx
,IDBALLS
);
342 gmx_fatal(FARGS
,"Invalid bond type %d at %s, %d",
343 ebond
,__FILE__
,__LINE__
);
349 write_gmx(x11
,gmx
,IDNOBOX
);
352 write_gmx(x11
,gmx
,IDRECTBOX
);
355 write_gmx(x11
,gmx
,IDTRIBOX
);
358 write_gmx(x11
,gmx
,IDTOBOX
);
361 gmx_fatal(FARGS
,"Invalid box type %d at %s, %d",
362 ebox
,__FILE__
,__LINE__
);
370 enum { esFUNCT
=1, esBSHOW
, esINFIL
, esINDEXFIL
, esLSQ
, esSHOW
, esPLOTFIL
};
372 static bool in_set(int i
,int n
,int set
[])
381 typedef t_dlg
*t_mmb(t_x11
*x11
,t_gmx
*gmx
);
395 void init_dlgs(t_x11
*x11
,t_gmx
*gmx
)
397 static t_dlginit di
[] = {
398 { edExport
, "export.dlg", ExportCB
},
399 { edBonds
, "bonds.dlg", BondsCB
}
401 static t_mbinit mi
[emNR
] = {
402 { emQuit
, quit_mb
, QuitCB
},
403 { emHelp
, help_mb
, MBCallback
},
404 { emAbout
, about_mb
, MBCallback
},
405 { emNotImplemented
, ni_mb
, MBCallback
}
409 snew(gmx
->dlgs
,edNR
);
410 for(i
=0; (i
<asize(di
)); i
++)
411 gmx
->dlgs
[i
]=ReadDlg(x11
,gmx
->wd
->self
,di
[i
].dlgfile
,
412 x11
->fg
,x11
->bg
,di
[i
].dlgfile
,
413 0,0,TRUE
,FALSE
,di
[i
].cb
,gmx
);
415 gmx
->dlgs
[edFilter
]=select_filter(x11
,gmx
);
417 snew(gmx
->mboxes
,emNR
);
418 for(i
=0; (i
<emNR
); i
++)
419 gmx
->mboxes
[i
]=mi
[i
].mmb(x11
,gmx
);
423 void done_dlgs(t_gmx
*gmx
)
427 for(i
=0; (i
<edNR
); i
++)
428 FreeDlg(gmx
->dlgs
[i
]);
429 for(i
=0; (i
<emNR
); i
++)
430 FreeDlg(gmx
->mboxes
[i
]);
433 void edit_file(const char *fn
)
438 sprintf(script
,"vi %s",fn
);
439 shell_comm(fn
,script
,0);