Re-organize BlueGene toolchain files
[gromacs.git] / src / ngmx / xstat.c
blob0c98d7ddd7583270ec779ddec444b82788024d5a
1 /*
2 * This file is part of the GROMACS molecular simulation package.
4 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5 * Copyright (c) 2001-2004, The GROMACS development team,
6 * check out http://www.gromacs.org for more information.
7 * Copyright (c) 2012, by the GROMACS development team, led by
8 * David van der Spoel, Berk Hess, Erik Lindahl, and including many
9 * others, as listed in the AUTHORS file in the top-level source
10 * directory and at http://www.gromacs.org.
12 * GROMACS is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public License
14 * as published by the Free Software Foundation; either version 2.1
15 * of the License, or (at your option) any later version.
17 * GROMACS is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Lesser General Public License for more details.
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with GROMACS; if not, see
24 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
25 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 * If you want to redistribute modifications to GROMACS, please
28 * consider that scientific software is very special. Version
29 * control is crucial - bugs must be traceable. We will be happy to
30 * consider code for inclusion in the official distribution, but
31 * derived work must not be called official GROMACS. Details are found
32 * in the README & COPYING files - if they are missing, get the
33 * official version at http://www.gromacs.org.
35 * To help us fund GROMACS development, we humbly ask that you cite
36 * the research papers on the package. Check out http://www.gromacs.org.
38 #ifdef HAVE_CONFIG_H
39 #include <config.h>
40 #endif
42 #include "sysstuff.h"
43 #include "smalloc.h"
44 #include "x11.h"
45 #include "string2.h"
46 #include "macros.h"
47 #include "fgrid.h"
48 #include "futil.h"
49 #include "xdlg.h"
50 #include "xdlghi.h"
52 typedef struct {
53 int nopt,nAppl;
54 char **name;
55 char **description;
56 char **dlgfile;
57 t_dlg *dlg;
58 t_dlg *appl;
59 } t_data;
61 static void ApplCallback(t_x11 *x11,int dlg_mess,int item_id,
62 char *set,void *dta)
64 t_data *data;
65 t_dlg *dlg;
66 t_dlgitem *item;
67 int i;
68 char doit[1024];
70 data=(t_data *)dta;
71 dlg=data->appl;
73 fprintf(stderr,"item_id: %d (%s)\n",item_id,set);
74 if (gmx_strcasecmp(set,"OK") == 0) {
75 /* Doit */
76 sprintf(doit,
77 "xterm -geometry +100+100 -n %s"
78 " -title \"GROMACS: %s\" -e nice %s ",
79 data->name[data->nAppl],
80 data->name[data->nAppl],
81 data->name[data->nAppl]);
82 for(i=0; (i<dlg->nitem); i++) {
83 item=dlg->dlgitem[i];
84 switch (item->type) {
85 case edlgRB:
86 strcat(doit,item->set);
87 strcat(doit," ");
88 break;
89 case edlgCB:
90 if (item->u.checkbox.bChecked)
91 strcat(doit,item->set);
92 strcat(doit," ");
93 break;
94 case edlgET:
95 if (strlen(item->u.edittext.buf) > 0) {
96 strcat(doit,item->set);
97 strcat(doit," ");
98 strcat(doit,item->u.edittext.buf);
99 strcat(doit," ");
101 break;
102 default:
103 fprintf(stderr,"Type: %d\n",item->type);
106 strcat(doit," &");
107 fprintf(stderr,"Going to exec: '%s'\n",doit);
109 #ifdef GMX_NO_SYSTEM
110 printf("Warning-- No calls to system(3) supported on this platform.");
111 printf("Warning-- Skipping execution of 'system(\"%s\")'.", buf);
112 #else
113 system(doit);
114 #endif
116 HideDlg(data->appl);
118 else if (gmx_strcasecmp(set,"Cancel") == 0) {
119 data->nAppl = -1;
120 HideDlg(data->appl);
124 static void Callback(t_x11 *x11,int dlg_mess,int item_id,
125 char *set,void *dta)
127 t_data *data=(t_data *)dta;
129 if (item_id == data->nopt) {
130 fprintf(stderr,"Doei...\n");
131 exit(0);
133 else {
134 fprintf(stderr,"%d: %s\n",item_id,data->description[item_id]);
135 if (data->nAppl != -1)
136 HideDlg(data->appl);
137 data->nAppl=item_id;
138 data->appl=ReadDlg(x11,0,data->name[item_id],
139 BLACK,LIGHTGREY,data->dlgfile[item_id],
140 50,50,FALSE,FALSE,ApplCallback,data);
141 ShowDlg(data->appl);
145 static void read_opts(t_data *data)
147 FILE *in;
148 char fn[STRLEN],buf[STRLEN];
149 int i,n;
151 sprintf(fn,"xstat.dat");
152 in=libopen(fn);
153 fscanf(in,"%d",&n);
154 data->nopt=n;
155 snew(data->name,data->nopt);
156 snew(data->description,data->nopt);
157 snew(data->dlgfile,data->nopt);
159 for(i=0; (i<data->nopt); i++) {
160 ReadQuoteString(fn,in,buf);
161 data->name[i] = strdup(buf);
162 ReadQuoteString(fn,in,buf);
163 data->description[i] = strdup(buf);
164 ReadQuoteString(fn,in,buf);
165 data->dlgfile[i] = strdup(buf);
167 ffclose(in);
170 static void add_opts(t_x11 *x11,t_data *data)
172 t_dlgitem *but;
173 int i,y0,w;
175 y0=OFFS_Y;
176 for(i=0; (i<data->nopt); i++) {
177 but=CreateButton(x11,data->description[i],FALSE,
178 (t_id)i,(t_id)0,
179 OFFS_X,y0,0,0,1);
180 AddDlgItem(data->dlg,but);
181 y0+=but->win.height+OFFS_Y;
183 but=CreateButton(x11,"Quit",TRUE,(t_id)data->nopt,(t_id)0,
184 OFFS_X,y0,0,0,1);
185 AddDlgItem(data->dlg,but);
186 y0+=but->win.height+OFFS_Y;
188 w=0;
189 for(i=0; (i<=data->nopt); i++)
190 w=max(w,QueryDlgItemW(data->dlg,i));
191 w+=2*OFFS_X;
192 for(i=0; (i<=data->nopt); i++)
193 SetDlgItemSize(data->dlg,i,w,0);
194 SetDlgSize(data->dlg,w+2*OFFS_X,y0,TRUE);
198 main(int argc,char *argv[])
200 t_x11 *x11;
201 t_data data;
203 /* Initiate X and data */
204 if ((x11=GetX11(&argc,argv))==NULL) {
205 fprintf(stderr,"Can't open DISPLAY\n");
206 exit(1);
208 read_opts(&data);
209 data.dlg=CreateDlg(x11,0,argv[0],0,0,0,0,0,BLACK,LIGHTGREY,Callback,&data);
210 add_opts(x11,&data);
211 data.nAppl=-1;
213 ShowDlg(data.dlg);
214 x11->MainLoop(x11);
215 HideDlg(data.dlg);