root/mpich2/trunk/src/pm/smpd/wmpiexec/wmpiexec.cs @ 4897

Revision 4897, 61.3 KB (checked in by jayesh, 5 months ago)

Adding nemesis & removing stale channels from mpiexec wrapper utils for windows

Line 
1using System;
2using System.Drawing;
3using System.Collections;
4using System.ComponentModel;
5using System.Windows.Forms;
6using System.Data;
7using Microsoft.Win32;
8using System.IO;
9using System.Threading;
10using System.Diagnostics;
11
12namespace wmpiexec
13{
14        /// <summary>
15        /// Summary description for Form1.
16        /// </summary>
17        public class wmpiexec : System.Windows.Forms.Form
18        {
19                private System.Windows.Forms.Label application_label;
20                private System.Windows.Forms.Button application_browse_button;
21                private System.Windows.Forms.Label nproc_label;
22                private System.Windows.Forms.NumericUpDown nproc_numericUpDown;
23                private System.Windows.Forms.Label wdir_label;
24                private System.Windows.Forms.TextBox wdir_textBox;
25                private System.Windows.Forms.Button wdir_browse_button;
26                private System.Windows.Forms.Label hosts_label;
27                private System.Windows.Forms.TextBox hosts_textBox;
28                private System.Windows.Forms.Button hosts_reset_button;
29                private System.Windows.Forms.Label configfile_label;
30                private System.Windows.Forms.TextBox configfile_textBox;
31                private System.Windows.Forms.Button configfile_browse_button;
32                private System.Windows.Forms.Label mpich1_label;
33                private System.Windows.Forms.TextBox mpich1_textBox;
34                private System.Windows.Forms.Button mpich1_browse_button;
35                private System.Windows.Forms.Label env_label;
36                private System.Windows.Forms.TextBox env_textBox;
37                private System.Windows.Forms.Label drive_map_label;
38                private System.Windows.Forms.TextBox drive_map_textBox;
39                private System.Windows.Forms.Label channel_label;
40                private System.Windows.Forms.ComboBox channel_comboBox;
41                private System.Windows.Forms.Button save_job_button;
42                private System.Windows.Forms.Button load_job_button;
43                private System.Windows.Forms.Button execute_button;
44                private System.Windows.Forms.Button break_button;
45                private System.Windows.Forms.RichTextBox output_richTextBox;
46                private System.Windows.Forms.ComboBox application_comboBox;
47                private System.Windows.Forms.Button show_command_button;
48                private System.Windows.Forms.TextBox command_line_textBox;
49                private System.Windows.Forms.RadioButton application_radioButton;
50                private System.Windows.Forms.RadioButton configfile_radioButton;
51                private System.Windows.Forms.RadioButton mpich1_radioButton;
52                private System.Windows.Forms.CheckBox show_bottom_checkBox;
53                private System.Windows.Forms.TextBox extra_options_textBox;
54                private System.Windows.Forms.Label extra_options_label;
55                private System.Windows.Forms.CheckBox popup_checkBox;
56                private System.Windows.Forms.Button jumpshot_button;
57                private System.Windows.Forms.CheckBox log_checkBox;
58                /// <summary>
59                /// Required designer variable.
60                /// </summary>
61                private System.ComponentModel.Container components = null;
62
63                private RunCommandDelegate run_command;
64                private IAsyncResult last_execute_result;
65                private Process process;
66                private string thread_command;
67                private string thread_mpiexec_command;
68                private string thread_mpiexec_command_args;
69                private bool thread_popup;
70                private TextReader thread_output_stream;
71                private TextReader thread_error_stream;
72                private TextWriter thread_input_stream;
73                delegate void RunCommandDelegate(string command, string mpiexec_command, string mpiexec_command_args, bool popup);
74                delegate void ReadOutputDelegate(TextReader stream);
75                delegate void ReadErrorDelegate(TextReader stream);
76                delegate void WriteInputDelegate(TextWriter stream);
77                delegate void AppendTextDelegate(string str);
78                delegate void SetProcessDelegate(Process p);
79                delegate void ResetExecuteButtonsDelegate();
80
81                private string mpiexec_command, mpiexec_command_args;
82                private int expanded_dialog_difference;
83
84                public wmpiexec()
85                {
86                        //
87                        // Required for Windows Form Designer support
88                        //
89                        InitializeComponent();
90
91                        expanded_dialog_difference = mpich1_browse_button.Bottom - show_bottom_checkBox.Bottom + 8;
92                        //MessageBox.Show(string.Format("difference = {0}", mpich1_browse_button.Bottom - show_bottom_checkBox.Bottom));
93
94                        run_command = null;
95                        last_execute_result = null;
96                        UpdateExtraControls(show_bottom_checkBox.Checked);
97                        EnableApplicationControls();
98                        DisableConfigfileControls();
99                        DisableMPICH1Controls();
100                }
101
102                /// <summary>
103                /// Clean up any resources being used.
104                /// </summary>
105                protected override void Dispose( bool disposing )
106                {
107                        if( disposing )
108                        {
109                                if (components != null) 
110                                {
111                                        components.Dispose();
112                                }
113                        }
114                        base.Dispose( disposing );
115                }
116
117                #region Windows Form Designer generated code
118                /// <summary>
119                /// Required method for Designer support - do not modify
120                /// the contents of this method with the code editor.
121                /// </summary>
122                private void InitializeComponent()
123                {
124                        System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(wmpiexec));
125                        this.application_label = new System.Windows.Forms.Label();
126                        this.application_browse_button = new System.Windows.Forms.Button();
127                        this.nproc_label = new System.Windows.Forms.Label();
128                        this.nproc_numericUpDown = new System.Windows.Forms.NumericUpDown();
129                        this.wdir_label = new System.Windows.Forms.Label();
130                        this.wdir_textBox = new System.Windows.Forms.TextBox();
131                        this.wdir_browse_button = new System.Windows.Forms.Button();
132                        this.hosts_label = new System.Windows.Forms.Label();
133                        this.hosts_textBox = new System.Windows.Forms.TextBox();
134                        this.hosts_reset_button = new System.Windows.Forms.Button();
135                        this.configfile_label = new System.Windows.Forms.Label();
136                        this.configfile_textBox = new System.Windows.Forms.TextBox();
137                        this.configfile_browse_button = new System.Windows.Forms.Button();
138                        this.mpich1_label = new System.Windows.Forms.Label();
139                        this.mpich1_textBox = new System.Windows.Forms.TextBox();
140                        this.mpich1_browse_button = new System.Windows.Forms.Button();
141                        this.env_label = new System.Windows.Forms.Label();
142                        this.env_textBox = new System.Windows.Forms.TextBox();
143                        this.drive_map_label = new System.Windows.Forms.Label();
144                        this.drive_map_textBox = new System.Windows.Forms.TextBox();
145                        this.channel_label = new System.Windows.Forms.Label();
146                        this.channel_comboBox = new System.Windows.Forms.ComboBox();
147                        this.save_job_button = new System.Windows.Forms.Button();
148                        this.load_job_button = new System.Windows.Forms.Button();
149                        this.execute_button = new System.Windows.Forms.Button();
150                        this.break_button = new System.Windows.Forms.Button();
151                        this.output_richTextBox = new System.Windows.Forms.RichTextBox();
152                        this.application_comboBox = new System.Windows.Forms.ComboBox();
153                        this.show_command_button = new System.Windows.Forms.Button();
154                        this.command_line_textBox = new System.Windows.Forms.TextBox();
155                        this.application_radioButton = new System.Windows.Forms.RadioButton();
156                        this.configfile_radioButton = new System.Windows.Forms.RadioButton();
157                        this.mpich1_radioButton = new System.Windows.Forms.RadioButton();
158                        this.show_bottom_checkBox = new System.Windows.Forms.CheckBox();
159                        this.extra_options_textBox = new System.Windows.Forms.TextBox();
160                        this.extra_options_label = new System.Windows.Forms.Label();
161                        this.popup_checkBox = new System.Windows.Forms.CheckBox();
162                        this.jumpshot_button = new System.Windows.Forms.Button();
163                        this.log_checkBox = new System.Windows.Forms.CheckBox();
164                        ((System.ComponentModel.ISupportInitialize)(this.nproc_numericUpDown)).BeginInit();
165                        this.SuspendLayout();
166                        //
167                        // application_label
168                        //
169                        this.application_label.Location = new System.Drawing.Point(24, 8);
170                        this.application_label.Name = "application_label";
171                        this.application_label.Size = new System.Drawing.Size(64, 23);
172                        this.application_label.TabIndex = 1;
173                        this.application_label.Text = "Application";
174                        //
175                        // application_browse_button
176                        //
177                        this.application_browse_button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
178                        this.application_browse_button.Location = new System.Drawing.Point(480, 8);
179                        this.application_browse_button.Name = "application_browse_button";
180                        this.application_browse_button.Size = new System.Drawing.Size(24, 21);
181                        this.application_browse_button.TabIndex = 3;
182                        this.application_browse_button.Text = "...";
183                        this.application_browse_button.Click += new System.EventHandler(this.application_browse_button_Click);
184                        //
185                        // nproc_label
186                        //
187                        this.nproc_label.Location = new System.Drawing.Point(24, 32);
188                        this.nproc_label.Name = "nproc_label";
189                        this.nproc_label.Size = new System.Drawing.Size(112, 23);
190                        this.nproc_label.TabIndex = 3;
191                        this.nproc_label.Text = "Number of processes";
192                        //
193                        // nproc_numericUpDown
194                        //
195                        this.nproc_numericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
196                        this.nproc_numericUpDown.Location = new System.Drawing.Point(456, 32);
197                        this.nproc_numericUpDown.Maximum = new System.Decimal(new int[] {
198                                                                                                                                                                10000,
199                                                                                                                                                                0,
200                                                                                                                                                                0,
201                                                                                                                                                                0});
202                        this.nproc_numericUpDown.Minimum = new System.Decimal(new int[] {
203                                                                                                                                                                1,
204                                                                                                                                                                0,
205                                                                                                                                                                0,
206                                                                                                                                                                0});
207                        this.nproc_numericUpDown.Name = "nproc_numericUpDown";
208                        this.nproc_numericUpDown.Size = new System.Drawing.Size(48, 20);
209                        this.nproc_numericUpDown.TabIndex = 4;
210                        this.nproc_numericUpDown.Value = new System.Decimal(new int[] {
211                                                                                                                                                          1,
212                                                                                                                                                          0,
213                                                                                                                                                          0,
214                                                                                                                                                          0});
215                        //
216                        // wdir_label
217                        //
218                        this.wdir_label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
219                        this.wdir_label.Location = new System.Drawing.Point(24, 368);
220                        this.wdir_label.Name = "wdir_label";
221                        this.wdir_label.Size = new System.Drawing.Size(96, 24);
222                        this.wdir_label.TabIndex = 5;
223                        this.wdir_label.Text = "working directory";
224                        //
225                        // wdir_textBox
226                        //
227                        this.wdir_textBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
228                                | System.Windows.Forms.AnchorStyles.Right)));
229                        this.wdir_textBox.Location = new System.Drawing.Point(152, 368);
230                        this.wdir_textBox.Name = "wdir_textBox";
231                        this.wdir_textBox.Size = new System.Drawing.Size(328, 20);
232                        this.wdir_textBox.TabIndex = 13;
233                        this.wdir_textBox.Text = "";
234                        //
235                        // wdir_browse_button
236                        //
237                        this.wdir_browse_button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
238                        this.wdir_browse_button.Location = new System.Drawing.Point(480, 368);
239                        this.wdir_browse_button.Name = "wdir_browse_button";
240                        this.wdir_browse_button.Size = new System.Drawing.Size(24, 20);
241                        this.wdir_browse_button.TabIndex = 14;
242                        this.wdir_browse_button.Text = "...";
243                        this.wdir_browse_button.Click += new System.EventHandler(this.wdir_browse_button_Click);
244                        //
245                        // hosts_label
246                        //
247                        this.hosts_label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
248                        this.hosts_label.Location = new System.Drawing.Point(24, 392);
249                        this.hosts_label.Name = "hosts_label";
250                        this.hosts_label.Size = new System.Drawing.Size(32, 23);
251                        this.hosts_label.TabIndex = 8;
252                        this.hosts_label.Text = "hosts";
253                        //
254                        // hosts_textBox
255                        //
256                        this.hosts_textBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
257                                | System.Windows.Forms.AnchorStyles.Right)));
258                        this.hosts_textBox.Location = new System.Drawing.Point(152, 392);
259                        this.hosts_textBox.Name = "hosts_textBox";
260                        this.hosts_textBox.Size = new System.Drawing.Size(312, 20);
261                        this.hosts_textBox.TabIndex = 15;
262                        this.hosts_textBox.Text = "";
263                        //
264                        // hosts_reset_button
265                        //
266                        this.hosts_reset_button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
267                        this.hosts_reset_button.Location = new System.Drawing.Point(464, 392);
268                        this.hosts_reset_button.Name = "hosts_reset_button";
269                        this.hosts_reset_button.Size = new System.Drawing.Size(40, 20);
270                        this.hosts_reset_button.TabIndex = 16;
271                        this.hosts_reset_button.Text = "reset";
272                        this.hosts_reset_button.Click += new System.EventHandler(this.hosts_reset_button_Click);
273                        //
274                        // configfile_label
275                        //
276                        this.configfile_label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
277                        this.configfile_label.Location = new System.Drawing.Point(24, 524);
278                        this.configfile_label.Name = "configfile_label";
279                        this.configfile_label.Size = new System.Drawing.Size(88, 16);
280                        this.configfile_label.TabIndex = 11;
281                        this.configfile_label.Text = "configuration file";
282                        //
283                        // configfile_textBox
284                        //
285                        this.configfile_textBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
286                                | System.Windows.Forms.AnchorStyles.Right)));
287                        this.configfile_textBox.Location = new System.Drawing.Point(152, 522);
288                        this.configfile_textBox.Name = "configfile_textBox";
289                        this.configfile_textBox.Size = new System.Drawing.Size(320, 20);
290                        this.configfile_textBox.TabIndex = 22;
291                        this.configfile_textBox.Text = "";
292                        //
293                        // configfile_browse_button
294                        //
295                        this.configfile_browse_button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
296                        this.configfile_browse_button.Location = new System.Drawing.Point(480, 522);
297                        this.configfile_browse_button.Name = "configfile_browse_button";
298                        this.configfile_browse_button.Size = new System.Drawing.Size(24, 20);
299                        this.configfile_browse_button.TabIndex = 23;
300                        this.configfile_browse_button.Text = "...";
301                        this.configfile_browse_button.Click += new System.EventHandler(this.configfile_browse_button_Click);
302                        //
303                        // mpich1_label
304                        //
305                        this.mpich1_label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
306                        this.mpich1_label.Location = new System.Drawing.Point(24, 548);
307                        this.mpich1_label.Name = "mpich1_label";
308                        this.mpich1_label.Size = new System.Drawing.Size(128, 16);
309                        this.mpich1_label.TabIndex = 14;
310                        this.mpich1_label.Text = "mpich1 configuration file";
311                        //
312                        // mpich1_textBox
313                        //
314                        this.mpich1_textBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
315                                | System.Windows.Forms.AnchorStyles.Right)));
316                        this.mpich1_textBox.Location = new System.Drawing.Point(152, 546);
317                        this.mpich1_textBox.Name = "mpich1_textBox";
318                        this.mpich1_textBox.Size = new System.Drawing.Size(320, 20);
319                        this.mpich1_textBox.TabIndex = 25;
320                        this.mpich1_textBox.Text = "";
321                        //
322                        // mpich1_browse_button
323                        //
324                        this.mpich1_browse_button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
325                        this.mpich1_browse_button.Location = new System.Drawing.Point(480, 546);
326                        this.mpich1_browse_button.Name = "mpich1_browse_button";
327                        this.mpich1_browse_button.Size = new System.Drawing.Size(24, 20);
328                        this.mpich1_browse_button.TabIndex = 26;
329                        this.mpich1_browse_button.Text = "...";
330                        this.mpich1_browse_button.Click += new System.EventHandler(this.mpich1_browse_button_Click);
331                        //
332                        // env_label
333                        //
334                        this.env_label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
335                        this.env_label.Location = new System.Drawing.Point(24, 416);
336                        this.env_label.Name = "env_label";
337                        this.env_label.Size = new System.Drawing.Size(120, 23);
338                        this.env_label.TabIndex = 17;
339                        this.env_label.Text = "environment variables";
340                        //
341                        // env_textBox
342                        //
343                        this.env_textBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
344                                | System.Windows.Forms.AnchorStyles.Right)));
345                        this.env_textBox.Location = new System.Drawing.Point(152, 416);
346                        this.env_textBox.Name = "env_textBox";
347                        this.env_textBox.Size = new System.Drawing.Size(352, 20);
348                        this.env_textBox.TabIndex = 17;
349                        this.env_textBox.Text = "";
350                        //
351                        // drive_map_label
352                        //
353                        this.drive_map_label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
354                        this.drive_map_label.Location = new System.Drawing.Point(24, 440);
355                        this.drive_map_label.Name = "drive_map_label";
356                        this.drive_map_label.Size = new System.Drawing.Size(88, 23);
357                        this.drive_map_label.TabIndex = 19;
358                        this.drive_map_label.Text = "drive mappings";
359                        //
360                        // drive_map_textBox
361                        //
362                        this.drive_map_textBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
363                                | System.Windows.Forms.AnchorStyles.Right)));
364                        this.drive_map_textBox.Location = new System.Drawing.Point(152, 440);
365                        this.drive_map_textBox.Name = "drive_map_textBox";
366                        this.drive_map_textBox.Size = new System.Drawing.Size(352, 20);
367                        this.drive_map_textBox.TabIndex = 18;
368                        this.drive_map_textBox.Text = "";
369                        //
370                        // channel_label
371                        //
372                        this.channel_label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
373                        this.channel_label.Location = new System.Drawing.Point(24, 464);
374                        this.channel_label.Name = "channel_label";
375                        this.channel_label.Size = new System.Drawing.Size(48, 23);
376                        this.channel_label.TabIndex = 21;
377                        this.channel_label.Text = "channel";
378                        //
379                        // channel_comboBox
380                        //
381                        this.channel_comboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
382                        this.channel_comboBox.Items.AddRange(new object[] {
383                                                                                                                                  "sock",
384                                                                                                                                  "nemesis",
385                                                                                                                                  "shm",
386                                                                                                                                  "ssm",
387                                                                                                                                  "mt",
388                                                                                                                                  "default",
389                                                                                                                                  "auto"});
390                        this.channel_comboBox.Location = new System.Drawing.Point(424, 464);
391                        this.channel_comboBox.Name = "channel_comboBox";
392                        this.channel_comboBox.Size = new System.Drawing.Size(80, 21);
393                        this.channel_comboBox.TabIndex = 19;
394                        this.channel_comboBox.Text = "default";
395                        //
396                        // save_job_button
397                        //
398                        this.save_job_button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
399                        this.save_job_button.Location = new System.Drawing.Point(429, 56);
400                        this.save_job_button.Name = "save_job_button";
401                        this.save_job_button.TabIndex = 8;
402                        this.save_job_button.Text = "Save Job";
403                        this.save_job_button.Click += new System.EventHandler(this.save_job_button_Click);
404                        //
405                        // load_job_button
406                        //
407                        this.load_job_button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
408                        this.load_job_button.Location = new System.Drawing.Point(352, 56);
409                        this.load_job_button.Name = "load_job_button";
410                        this.load_job_button.TabIndex = 7;
411                        this.load_job_button.Text = "Load Job";
412                        this.load_job_button.Click += new System.EventHandler(this.load_job_button_Click);
413                        //
414                        // execute_button
415                        //
416                        this.execute_button.Location = new System.Drawing.Point(8, 56);
417                        this.execute_button.Name = "execute_button";
418                        this.execute_button.TabIndex = 5;
419                        this.execute_button.Text = "Execute";
420                        this.execute_button.Click += new System.EventHandler(this.execute_button_Click);
421                        //
422                        // break_button
423                        //
424                        this.break_button.Enabled = false;
425                        this.break_button.Location = new System.Drawing.Point(88, 56);
426                        this.break_button.Name = "break_button";
427                        this.break_button.TabIndex = 6;
428                        this.break_button.Text = "Break";
429                        this.break_button.Click += new System.EventHandler(this.break_button_Click);
430                        //
431                        // output_richTextBox
432                        //
433                        this.output_richTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
434                                | System.Windows.Forms.AnchorStyles.Left) 
435                                | System.Windows.Forms.AnchorStyles.Right)));
436                        this.output_richTextBox.Font = new System.Drawing.Font("Lucida Console", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
437                        this.output_richTextBox.Location = new System.Drawing.Point(8, 104);
438                        this.output_richTextBox.Name = "output_richTextBox";
439                        this.output_richTextBox.Size = new System.Drawing.Size(496, 224);
440                        this.output_richTextBox.TabIndex = 11;
441                        this.output_richTextBox.Text = "";
442                        this.output_richTextBox.WordWrap = false;
443                        this.output_richTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.output_richTextBox_KeyPress);
444                        //
445                        // application_comboBox
446                        //
447                        this.application_comboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
448                                | System.Windows.Forms.AnchorStyles.Right)));
449                        this.application_comboBox.Location = new System.Drawing.Point(88, 8);
450                        this.application_comboBox.Name = "application_comboBox";
451                        this.application_comboBox.Size = new System.Drawing.Size(392, 21);
452                        this.application_comboBox.TabIndex = 2;
453                        //
454                        // show_command_button
455                        //
456                        this.show_command_button.Location = new System.Drawing.Point(8, 80);
457                        this.show_command_button.Name = "show_command_button";
458                        this.show_command_button.Size = new System.Drawing.Size(96, 23);
459                        this.show_command_button.TabIndex = 9;
460                        this.show_command_button.Text = "Show Command";
461                        this.show_command_button.Click += new System.EventHandler(this.show_command_button_Click);
462                        //
463                        // command_line_textBox
464                        //
465                        this.command_line_textBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
466                                | System.Windows.Forms.AnchorStyles.Right)));
467                        this.command_line_textBox.Location = new System.Drawing.Point(104, 80);
468                        this.command_line_textBox.Name = "command_line_textBox";
469                        this.command_line_textBox.ReadOnly = true;
470                        this.command_line_textBox.Size = new System.Drawing.Size(400, 20);
471                        this.command_line_textBox.TabIndex = 10;
472                        this.command_line_textBox.Text = "";
473                        //
474                        // application_radioButton
475                        //
476                        this.application_radioButton.Checked = true;
477                        this.application_radioButton.Location = new System.Drawing.Point(8, 8);
478                        this.application_radioButton.Name = "application_radioButton";
479                        this.application_radioButton.Size = new System.Drawing.Size(16, 24);
480                        this.application_radioButton.TabIndex = 1;
481                        this.application_radioButton.TabStop = true;
482                        this.application_radioButton.CheckedChanged += new System.EventHandler(this.application_radioButton_CheckedChanged);
483                        //
484                        // configfile_radioButton
485                        //
486                        this.configfile_radioButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
487                        this.configfile_radioButton.Location = new System.Drawing.Point(8, 520);
488                        this.configfile_radioButton.Name = "configfile_radioButton";
489                        this.configfile_radioButton.Size = new System.Drawing.Size(16, 24);
490                        this.configfile_radioButton.TabIndex = 21;
491                        this.configfile_radioButton.CheckedChanged += new System.EventHandler(this.configfile_radioButton_CheckedChanged);
492                        //
493                        // mpich1_radioButton
494                        //
495                        this.mpich1_radioButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
496                        this.mpich1_radioButton.Location = new System.Drawing.Point(8, 544);
497                        this.mpich1_radioButton.Name = "mpich1_radioButton";
498                        this.mpich1_radioButton.Size = new System.Drawing.Size(16, 24);
499                        this.mpich1_radioButton.TabIndex = 24;
500                        this.mpich1_radioButton.CheckedChanged += new System.EventHandler(this.mpich1_radioButton_CheckedChanged);
501                        //
502                        // show_bottom_checkBox
503                        //
504                        this.show_bottom_checkBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
505                        this.show_bottom_checkBox.Location = new System.Drawing.Point(8, 328);
506                        this.show_bottom_checkBox.Name = "show_bottom_checkBox";
507                        this.show_bottom_checkBox.Size = new System.Drawing.Size(96, 16);
508                        this.show_bottom_checkBox.TabIndex = 12;
509                        this.show_bottom_checkBox.Text = "more options";
510                        this.show_bottom_checkBox.CheckedChanged += new System.EventHandler(this.show_bottom_checkBox_CheckedChanged);
511                        //
512                        // extra_options_textBox
513                        //
514                        this.extra_options_textBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
515                                | System.Windows.Forms.AnchorStyles.Right)));
516                        this.extra_options_textBox.Location = new System.Drawing.Point(152, 496);
517                        this.extra_options_textBox.Name = "extra_options_textBox";
518                        this.extra_options_textBox.Size = new System.Drawing.Size(352, 20);
519                        this.extra_options_textBox.TabIndex = 27;
520                        this.extra_options_textBox.Text = "";
521                        //
522                        // extra_options_label
523                        //
524                        this.extra_options_label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
525                        this.extra_options_label.Location = new System.Drawing.Point(24, 496);
526                        this.extra_options_label.Name = "extra_options_label";
527                        this.extra_options_label.Size = new System.Drawing.Size(120, 23);
528                        this.extra_options_label.TabIndex = 28;
529                        this.extra_options_label.Text = "extra mpiexec options";
530                        //
531                        // popup_checkBox
532                        //
533                        this.popup_checkBox.Location = new System.Drawing.Point(168, 56);
534                        this.popup_checkBox.Name = "popup_checkBox";
535                        this.popup_checkBox.Size = new System.Drawing.Size(168, 24);
536                        this.popup_checkBox.TabIndex = 29;
537                        this.popup_checkBox.Text = "run in an separate window";
538                        //
539                        // jumpshot_button
540                        //
541                        this.jumpshot_button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
542                        this.jumpshot_button.Location = new System.Drawing.Point(432, 336);
543                        this.jumpshot_button.Name = "jumpshot_button";
544                        this.jumpshot_button.Size = new System.Drawing.Size(75, 24);
545                        this.jumpshot_button.TabIndex = 30;
546                        this.jumpshot_button.Text = "Jumpshot";
547                        this.jumpshot_button.Click += new System.EventHandler(this.jumpshot_button_Click);
548                        //
549                        // log_checkBox
550                        //
551                        this.log_checkBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
552                        this.log_checkBox.Location = new System.Drawing.Point(312, 336);
553                        this.log_checkBox.Name = "log_checkBox";
554                        this.log_checkBox.Size = new System.Drawing.Size(112, 24);
555                        this.log_checkBox.TabIndex = 31;
556                        this.log_checkBox.Text = "produce clog2 file";
557                        //
558                        // wmpiexec
559                        //
560                        this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
561                        this.ClientSize = new System.Drawing.Size(512, 579);
562                        this.Controls.Add(this.log_checkBox);
563                        this.Controls.Add(this.jumpshot_button);
564                        this.Controls.Add(this.popup_checkBox);
565                        this.Controls.Add(this.extra_options_label);
566                        this.Controls.Add(this.extra_options_textBox);
567                        this.Controls.Add(this.application_radioButton);
568                        this.Controls.Add(this.command_line_textBox);
569                        this.Controls.Add(this.drive_map_textBox);
570                        this.Controls.Add(this.env_textBox);
571                        this.Controls.Add(this.mpich1_textBox);
572                        this.Controls.Add(this.configfile_textBox);
573                        this.Controls.Add(this.hosts_textBox);
574                        this.Controls.Add(this.wdir_textBox);
575                        this.Controls.Add(this.show_bottom_checkBox);
576                        this.Controls.Add(this.mpich1_radioButton);
577                        this.Controls.Add(this.configfile_radioButton);
578                        this.Controls.Add(this.show_command_button);
579                        this.Controls.Add(this.application_comboBox);
580                        this.Controls.Add(this.output_richTextBox);
581                        this.Controls.Add(this.break_button);
582                        this.Controls.Add(this.execute_button);
583                        this.Controls.Add(this.load_job_button);
584                        this.Controls.Add(this.save_job_button);
585                        this.Controls.Add(this.channel_comboBox);
586                        this.Controls.Add(this.channel_label);
587                        this.Controls.Add(this.drive_map_label);
588                        this.Controls.Add(this.env_label);
589                        this.Controls.Add(this.mpich1_browse_button);
590                        this.Controls.Add(this.mpich1_label);
591                        this.Controls.Add(this.configfile_browse_button);
592                        this.Controls.Add(this.configfile_label);
593                        this.Controls.Add(this.hosts_reset_button);
594                        this.Controls.Add(this.hosts_label);
595                        this.Controls.Add(this.wdir_browse_button);
596                        this.Controls.Add(this.wdir_label);
597                        this.Controls.Add(this.nproc_numericUpDown);
598                        this.Controls.Add(this.nproc_label);
599                        this.Controls.Add(this.application_browse_button);
600                        this.Controls.Add(this.application_label);
601                        this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
602                        this.Name = "wmpiexec";
603                        this.Text = "MPIEXEC wrapper";
604                        this.Closing += new System.ComponentModel.CancelEventHandler(this.wmpiexec_Closing);
605                        ((System.ComponentModel.ISupportInitialize)(this.nproc_numericUpDown)).EndInit();
606                        this.ResumeLayout(false);
607
608                }
609                #endregion
610
611                /// <summary>
612                /// The main entry point for the application.
613                /// </summary>
614                [STAThread]
615                static void Main() 
616                {
617                        Application.Run(new wmpiexec());
618                }
619
620                private void AppendText(string str)
621                {
622                        output_richTextBox.AppendText(str);
623                }
624
625                private void SetProcess(Process p)
626                {
627                        process = p;
628                }
629
630                private void ResetExecuteButtons()
631                {
632                        execute_button.Enabled = true;
633                        break_button.Enabled = false;
634                }
635
636                private void application_browse_button_Click(object sender, System.EventArgs e)
637                {
638                        OpenFileDialog dlg = new OpenFileDialog();
639                        dlg.Filter = "Executable files (*.exe)|*.exe|All files (*.*)|*.*";
640                        if (dlg.ShowDialog() == DialogResult.OK)
641                        {
642                                if (dlg.FileName.IndexOf(' ') != -1)
643                                {
644                                        application_comboBox.Text = "\"" + dlg.FileName + "\"";
645                                }
646                                else
647                                {
648                                        application_comboBox.Text = dlg.FileName;
649                                }
650                        }
651                }
652
653                private void wdir_browse_button_Click(object sender, System.EventArgs e)
654                {
655                        FolderBrowserDialog dlg = new FolderBrowserDialog();
656                        if (wdir_textBox.Text.Length > 0)
657                        {
658                                dlg.SelectedPath = wdir_textBox.Text;
659                        }
660                        else
661                        {
662                                dlg.SelectedPath = Environment.CurrentDirectory;
663                        }
664                        if (dlg.ShowDialog() == DialogResult.OK)
665                        {
666                                wdir_textBox.Text = dlg.SelectedPath;
667                        }
668                }
669
670                private void hosts_reset_button_Click(object sender, System.EventArgs e)
671                {
672                        object obj;
673                        RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\MPICH\SMPD");
674                        obj = key.GetValue("hosts");
675                        if (obj != null)
676                        {
677                                hosts_textBox.Text = obj.ToString();
678                        }
679                        else
680                        {
681                                hosts_textBox.Text = "";
682                        }
683                }
684
685                private void configfile_browse_button_Click(object sender, System.EventArgs e)
686                {
687                        OpenFileDialog dlg = new OpenFileDialog();
688                        dlg.Filter = "All files (*.*)|*.*";
689                        if (dlg.ShowDialog() == DialogResult.OK)
690                        {
691                                configfile_textBox.Text = dlg.FileName;
692                        }
693                }
694
695                private void mpich1_browse_button_Click(object sender, System.EventArgs e)
696                {
697                        OpenFileDialog dlg = new OpenFileDialog();
698                        dlg.Filter = "Configuration file (*.cfg)|*.cfg|All files (*.*)|*.*";
699                        if (dlg.ShowDialog() == DialogResult.OK)
700                        {
701                                mpich1_textBox.Text = dlg.FileName;
702                        }
703                }
704
705                private void save_job_button_Click(object sender, System.EventArgs e)
706                {
707                        SaveFileDialog dlg = new SaveFileDialog();
708                        dlg.Filter = "Job files (*.txt *.mpi)|*.txt;*.mpi|All files (*.*)|*.*";
709                        if (dlg.ShowDialog() == DialogResult.OK)
710                        {
711                                StreamWriter stream;
712                                using (stream = new StreamWriter(dlg.FileName))
713                                {
714                                        stream.WriteLine("exe {0}", application_comboBox.Text.Trim());
715                                        stream.WriteLine("n {0}", nproc_numericUpDown.Value);
716                                        stream.WriteLine("wdir {0}", wdir_textBox.Text.Trim());
717                                        stream.WriteLine("hosts {0}", hosts_textBox.Text.Trim());
718                                        stream.WriteLine("cfg {0}", configfile_textBox.Text.Trim());
719                                        stream.WriteLine("mpich1 {0}", mpich1_textBox.Text.Trim());
720                                        stream.WriteLine("env {0}", env_textBox.Text.Trim());
721                                        stream.WriteLine("map {0}", drive_map_textBox.Text.Trim());
722                                        stream.WriteLine("channel {0}", channel_comboBox.Text.Trim());
723                                        stream.WriteLine("extra {0}", extra_options_textBox.Text.Trim());
724                                        stream.WriteLine(popup_checkBox.Checked ? "window yes" : "window no");
725                                        stream.WriteLine(log_checkBox.Checked ? "log yes" : "log no");
726                                        stream.Close();
727                                }
728                        }
729                }
730
731                private void load_job_button_Click(object sender, System.EventArgs e)
732                {
733                        OpenFileDialog dlg = new OpenFileDialog();
734                        dlg.Filter = "Job files (*.txt *.mpi)|*.txt;*.mpi|All files (*.*)|*.*";
735                        if (dlg.ShowDialog() == DialogResult.OK)
736                        {
737                                StreamReader stream;
738                                using (stream = new StreamReader(dlg.FileName))
739                                {
740                                        string line;
741                                        int index;
742
743                                        // reset all the values before loading new ones
744                                        application_comboBox.Text = "";
745                                        nproc_numericUpDown.Value = 1;
746                                        wdir_textBox.Text = "";
747                                        hosts_textBox.Text = "";
748                                        configfile_textBox.Text = "";
749                                        mpich1_textBox.Text = "";
750                                        env_textBox.Text = "";
751                                        drive_map_textBox.Text = "";
752                                        channel_comboBox.Text = "";
753                                        extra_options_textBox.Text = "";
754                                        popup_checkBox.Checked = false;
755                                        log_checkBox.Checked = false;
756
757                                        line = stream.ReadLine();
758                                        while (line != null)
759                                        {
760                                                index = line.IndexOf(" ");
761                                                if (index > 0)
762                                                {
763                                                        string key, val;
764                                                        key = line.Substring(0, index);
765                                                        val = line.Substring(index+1);
766                                                        switch (key)
767                                                        {
768                                                                case "exe":
769                                                                        application_comboBox.Text = val;
770                                                                        break;
771                                                                case "n":
772                                                                        nproc_numericUpDown.Value = Convert.ToInt32(val);
773                                                                        break;
774                                                                case "wdir":
775                                                                        wdir_textBox.Text = val;
776                                                                        break;
777                                                                case "hosts":
778                                                                        hosts_textBox.Text = val;
779                                                                        break;
780                                                                case "cfg":
781                                                                        configfile_textBox.Text = val;
782                                                                        break;
783                                                                case "mpich1":
784                                                                        mpich1_textBox.Text = val;
785                                                                        break;
786                                                                case "env":
787                                                                        env_textBox.Text = val;
788                                                                        break;
789                                                                case "map":
790                                                                        drive_map_textBox.Text = val;
791                                                                        break;
792                                                                case "channel":
793                                                                        channel_comboBox.Text = val;
794                                                                        break;
795                                                                case "extra":
796                                                                        extra_options_textBox.Text = val;
797                                                                        break;
798                                                                case "window":
799                                                                        if (val == "yes")
800                                                                                popup_checkBox.Checked = true;
801                                                                        else
802                                                                                popup_checkBox.Checked = false;
803                                                                        break;
804                                                                case "log":
805                                                                        if (val == "yes")
806                                                                                log_checkBox.Checked = true;
807                                                                        else
808                                                                                log_checkBox.Checked = false;
809                                                                        break;
810                                                        }
811                                                }
812                                                line = stream.ReadLine();
813                                        }
814                                        stream.Close();
815                                }
816                        }
817                }
818
819                #region Process thread functions
820                /// <summary>
821                /// These functions read and write input and output of the spawned mpiexec process.
822                /// They are run in separate threads since they can execute for a long period of time
823                /// and therefore shouldn't come from the thread pool (delegates).
824                /// Is this a correct design decision?
825                /// </summary>
826                private void ReadOutput(TextReader stream)
827                {
828                        thread_output_stream = stream;
829                        Thread thread = new Thread(new ThreadStart(ReadOutputThread));
830                        thread.Start();
831                }
832
833                private void ReadError(TextReader stream)
834                {
835                        thread_error_stream = stream;
836                        Thread thread = new Thread(new ThreadStart(ReadErrorThread));
837                        thread.Start();
838                }
839
840                private void ReadErrorThread()
841                {
842                        int num_read;
843                        char [] buffer = new char[4096];
844                        TextReader stream = thread_error_stream;
845                        num_read = stream.Read(buffer, 0, 4096);
846                        while (num_read > 0)
847                        {
848                                string str;
849                                char [] text = new char[num_read];
850                                Array.Copy(buffer, 0, text, 0, num_read);
851                                str = new string(text);
852                                object[] pList = { str };
853                                // put the string in the edit box in a thread safe way
854                                AppendTextDelegate ap = new AppendTextDelegate(AppendText);
855                                output_richTextBox.Invoke(ap, pList);
856                                num_read = stream.Read(buffer, 0, 1024);
857                        }
858                }
859
860                private void ReadOutputThread()
861                {
862                        int num_read;
863                        char [] buffer = new char[4096];
864                        TextReader stream = thread_output_stream;
865                        num_read = stream.Read(buffer, 0, 4096);
866                        while (num_read > 0)
867                        {
868                                string str;
869                                char [] text = new char[num_read];
870                                Array.Copy(buffer, 0, text, 0, num_read);
871                                str = new string(text);
872                                object[] pList = { str };
873                                // put the string in the edit box in a thread safe way
874                                AppendTextDelegate ap = new AppendTextDelegate(AppendText);
875                                output_richTextBox.Invoke(ap, pList);
876                                num_read = stream.Read(buffer, 0, 1024);
877                        }
878                }
879
880                ManualResetEvent char_available = new ManualResetEvent(false);
881                ManualResetEvent char_written = new ManualResetEvent(true);
882                bool quit_input = false;
883                char ch;
884                private void WriteInput(TextWriter stream)
885                {
886                        thread_input_stream = stream;
887                        Thread thread = new Thread(new ThreadStart(WriteInputThread));
888                        thread.Start();
889                }
890
891                private void WriteInputThread()
892                {
893                        WriteInputEx(thread_input_stream);
894                }
895
896                private void WriteInputEx(TextWriter stream)
897                {
898                        while (char_available.WaitOne())
899                        {
900                                if (quit_input)
901                                {
902                                        return;
903                                }
904                                stream.Write(ch);
905                                stream.Flush();
906                                char_available.Reset();
907                                char_written.Set();
908
909                                /*
910                                object[] pList = { "ch(" + ch + ")" };
911                                // put the string in the edit box in a thread safe way
912                                AppendTextDelegate ap = new AppendTextDelegate(AppendText);
913                                output_richTextBox.Invoke(ap, pList);
914                                */
915                        }
916                }
917
918                private void RunCommand(string command, string mpiexec_command, string mpiexec_command_args, bool popup)
919                {
920                        thread_command = command;
921                        thread_mpiexec_command = mpiexec_command;
922                        thread_mpiexec_command_args = mpiexec_command_args;
923                        thread_popup = popup;
924                        Thread thread = new Thread(new ThreadStart(RunCommandThread));
925                        thread.Start();
926                }
927
928                void RunCommandThread()
929                {
930                        RunCommandEx(thread_command, thread_mpiexec_command, thread_mpiexec_command_args, thread_popup);
931                }
932
933                private void RunCommandEx(string command, string mpiexec_command, string mpiexec_command_args, bool popup)
934                {
935                        if (popup)
936                        {
937                                // start a process to run the mpiexec command
938                                Process p = new Process();
939                                p.StartInfo.UseShellExecute = true;
940                                p.StartInfo.CreateNoWindow = false;
941                                p.StartInfo.RedirectStandardError = false;
942                                p.StartInfo.RedirectStandardInput = false;
943                                p.StartInfo.RedirectStandardOutput = false;
944                                p.StartInfo.FileName = "cmd.exe";
945                                if (command.IndexOf('"') != -1)
946                                {
947                                        p.StartInfo.Arguments = "/C \"" + command + "\" && pause";
948                                }
949                                else
950                                {
951                                        p.StartInfo.Arguments = "/C " + command + " && pause";
952                                }
953                                p.Start();
954                                p.WaitForExit();
955                        }
956                        else
957                        {
958                                quit_input = false;
959                                // start a process to run the mpiexec command
960                                Process p = new Process();
961                                p.StartInfo.UseShellExecute = false;
962                                p.StartInfo.CreateNoWindow = true;
963                                p.StartInfo.RedirectStandardError = true;
964                                p.StartInfo.RedirectStandardInput = true;
965                                p.StartInfo.RedirectStandardOutput = true;
966                                p.StartInfo.FileName = mpiexec_command;
967                                p.StartInfo.Arguments = mpiexec_command_args;
968                                p.Start();
969                                // start a delagate to read stdout
970                                ReadOutputDelegate r1 = new ReadOutputDelegate(ReadOutput);
971                                //IAsyncResult ar1 = r1.BeginInvoke(TextReader.Synchronized(p.StandardOutput), null, null);
972                                object [] list1 = { TextReader.Synchronized(p.StandardOutput) };
973                                Invoke(r1, list1);
974                                // start a delagate to read stderr
975                                ReadErrorDelegate r2 = new ReadErrorDelegate(ReadError);
976                                //IAsyncResult ar2 = r2.BeginInvoke(TextReader.Synchronized(p.StandardError), null, null);
977                                object [] list2 = { TextReader.Synchronized(p.StandardError) };
978                                Invoke(r2, list2);
979                                // Send stdin to the process
980                                WriteInputDelegate w = new WriteInputDelegate(WriteInput);
981                                //IAsyncResult ar3 = w.BeginInvoke(TextWriter.Synchronized(p.StandardInput), null, null);
982                                object [] list3 = { TextWriter.Synchronized(p.StandardInput) };
983                                Invoke(w, list3);
984
985                                //process = p;
986                                SetProcessDelegate sp = new SetProcessDelegate(SetProcess);
987                                object [] list = { p };
988                                Invoke(sp, list);
989                                // wait for the process to exit
990                                p.WaitForExit();
991                                // wait for the output and error delegates to finish
992                                //r1.EndInvoke(ar1);
993                                //r2.EndInvoke(ar2);
994                                // set the process variable to null
995                                list[0] = null;
996                                Invoke(sp, list);
997                                // signal the input delegate to exit after setting the process variable to null to avoid conflicts with the keypressed handler
998                                quit_input = true;
999                                char_available.Set();
1000                                //w.EndInvoke(ar3);
1001                        }
1002                        ResetExecuteButtonsDelegate d = new ResetExecuteButtonsDelegate(ResetExecuteButtons);
1003                        Invoke(d);
1004                }
1005                #endregion
1006
1007                private void execute_button_Click(object sender, System.EventArgs e)
1008                {
1009                        VerifyEncryptedPasswordExists();
1010                        execute_button.Enabled = false;
1011                        break_button.Enabled = true;
1012                        output_richTextBox.Clear();
1013                        if (last_execute_result != null)
1014                        {
1015                                run_command.EndInvoke(last_execute_result);
1016                        }
1017                        // Create the command line
1018                        command_line_textBox.Text = get_command_line();
1019                        // Add the command to the application drop down if it has not already been added
1020                        bool found = false;
1021                        foreach (string str in application_comboBox.Items)
1022                        {
1023                                if (str == application_comboBox.Text)
1024                                        found = true;
1025                        }
1026                        if (!found)
1027                        {
1028                                application_comboBox.Items.Add(application_comboBox.Text);
1029                        }
1030                        run_command = new RunCommandDelegate(RunCommand);
1031                        last_execute_result = run_command.BeginInvoke(command_line_textBox.Text, mpiexec_command, mpiexec_command_args, popup_checkBox.Checked, null, null);
1032                        // after starting a command move to the output box so the user can interact with the running process.
1033                        output_richTextBox.Focus();
1034                }
1035
1036                private void VerifyEncryptedPasswordExists()
1037                {
1038                        try
1039                        {
1040                                bool popup = true;
1041                                string mpiexec = get_mpiexec();
1042
1043                                // Check the registry for the encrypted password
1044                                // This code will have to be kept synchronized with the smpd code
1045                                // The advantage of this approach is that the credentials don't have to be valid on the local host
1046                                RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\MPICH");
1047                                if (key != null)
1048                                {
1049                                        // check to see that an encrypted password for the current user exists
1050                                        object obj = key.GetValue("smpdPassword");
1051                                        key.Close();
1052                                        if (obj != null)
1053                                        {
1054                                                popup = false;
1055                                        }
1056                                }
1057
1058                                // Or run "mpiexec -validate" and check the output for SUCCESS
1059                                // This code will last longer because it doesn't rely on known information about the smpd implementation
1060                                // The disadvantage of this code is that the user credentials have to be valid on the local host.
1061                                /*
1062                                Process p1 = new Process();
1063                                p1.StartInfo.RedirectStandardOutput = true;
1064                                p1.StartInfo.RedirectStandardError = true;
1065                                p1.StartInfo.UseShellExecute = false;
1066                                p1.StartInfo.CreateNoWindow = true;
1067                                p1.StartInfo.FileName = mpiexec;
1068                                p1.StartInfo.Arguments = "-validate";
1069                                p1.Start();
1070                                string output = p1.StandardOutput.ReadToEnd() + p1.StandardError.ReadToEnd();
1071                                p1.WaitForExit();
1072                                p1.Close();
1073                                if (output.IndexOf("SUCCESS") != -1)
1074                                {
1075                                        popup = false;
1076                                }
1077                                */
1078
1079                                if (popup)
1080                                {
1081                                        string wmpiregister;
1082                                        wmpiregister = mpiexec.Replace("mpiexec.exe", "wmpiregister.exe");
1083                                        Process p = new Process();
1084                                        p.StartInfo.FileName = wmpiregister;
1085                                        p.Start();
1086                                        p.WaitForExit();
1087                                }
1088                        }
1089                        catch (Exception)
1090                        {
1091                        }
1092                }
1093
1094                private void break_button_Click(object sender, System.EventArgs e)
1095                {
1096                        if (process != null)
1097                        {
1098                                process.Kill();
1099                        }
1100                }
1101
1102                #region Get known files: mpiexec, jumpshot, and clog2 files
1103                private string get_jumpshot()
1104                {
1105                        string jumpshot = "";
1106                        object obj;
1107                        try
1108                        {
1109                                RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\MPICH2");
1110                                if (key != null)
1111                                {
1112                                        obj = key.GetValue("Path");
1113                                        key.Close();
1114                                        if (obj != null)
1115                                        {
1116                                                jumpshot = obj.ToString();
1117                                                if (jumpshot.EndsWith(@"\"))
1118                                                {
1119                                                        jumpshot = jumpshot + @"bin\jumpshot.jar";
1120                                                }
1121                                                else
1122                                                {
1123                                                        jumpshot = jumpshot + @"\bin\jumpshot.jar";
1124                                                }
1125                                                if (!File.Exists(jumpshot))
1126                                                {
1127                                                        jumpshot = "";
1128                                                }
1129                                        }
1130                                }
1131                                if (jumpshot == "")
1132                                {
1133                                        key = Registry.LocalMachine.OpenSubKey(@"Software\MPICH\SMPD");
1134                                        if (key != null)
1135                                        {
1136                                                obj = key.GetValue("binary");
1137                                                key.Close();
1138                                                if (obj != null)
1139                                                {
1140                                                        jumpshot = obj.ToString().Replace("smpd.exe", "jumpshot.jar");
1141                                                        if (!File.Exists(jumpshot))
1142                                                        {
1143                                                                jumpshot = "";
1144                                                        }
1145                                                }
1146                                        }
1147                                }
1148                                if (jumpshot == "")
1149                                {
1150                                        jumpshot = "jumpshot.jar";
1151                                }
1152                                jumpshot = jumpshot.Trim();
1153                                if (jumpshot.IndexOf(' ') != -1)
1154                                {
1155                                        jumpshot = "\"" + jumpshot + "\"";
1156                                }
1157                        }
1158                        catch (Exception)
1159                        {
1160                                jumpshot = "jumpshot.jar";
1161                        }
1162                        return jumpshot;
1163                }
1164
1165                private string get_clog2()
1166                {
1167                        int index, last;
1168                        string app = application_comboBox.Text;
1169                        try
1170                        {
1171                                if (app[0] == '\"')
1172                                {
1173                                        // remove the quotes to be restored at the end
1174                                        app = app.Replace("\"", "");
1175                                }
1176                                index = app.LastIndexOf('\\');
1177                                if (index == -1)
1178                                {
1179                                        index = 0;
1180                                }
1181                                last = index;
1182                                // find the index of .exe starting from the last \
1183                                index = app.IndexOf(".exe", last);
1184                                if (index == -1)
1185                                {
1186                                        // no .exe so find the first space after the last \
1187                                        // This assumes the executable does not have spaces in its name
1188                                        index = app.IndexOf(' ', last);
1189                                        if (index == -1)
1190                                        {
1191                                                // no .exe and no spaces found so take the entire string
1192                                                index = app.Length;
1193                                        }
1194                                }
1195                                app = app.Substring(0, index) + ".exe.clog2";
1196                                app = app.Trim();
1197                                if (!File.Exists(app) && wdir_textBox.Text.Length > 0)
1198                                {
1199                                        // file not found from the application combo box so try finding it in the working directory
1200                                        string app2 = application_comboBox.Text;
1201                                        if (app2[0] == '\"')
1202                                        {
1203                                                // remove the quotes to be restored at the end
1204                                                app2 = app2.Replace("\"", "");
1205                                        }
1206                                        index = app2.LastIndexOf('\\');
1207                                        if (index != -1)
1208                                        {
1209                                                // remove the path
1210                                                app2 = app2.Remove(0, index);
1211                                        }
1212                                        // find the index of .exe
1213                                        index = app2.IndexOf(".exe");
1214                                        if (index != -1)
1215                                        {
1216                                                // remove any arguments after the executable name
1217                                                app2 = app2.Substring(0, index + 4);
1218                                        }
1219                                        else
1220                                        {
1221                                                // no .exe so find the first space
1222                                                // This assumes the executable does not have spaces in its name
1223                                                index = app.IndexOf(' ');
1224                                                if (index != -1)
1225                                                {
1226                                                        app2 = app2.Substring(0, index) + ".exe";
1227                                                }
1228                                                else
1229                                                {
1230                                                        // no .exe and no arguments so append .exe
1231                                                        app2 += ".exe";
1232                                                }
1233                                        }
1234                                        // app2 should now contain only the executable name
1235                                        // Add the wdir path and clog2 extension
1236                                        if (wdir_textBox.Text.EndsWith("\\"))
1237                                                app2 = wdir_textBox.Text + app2 + ".clog2";
1238                                        else
1239                                                app2 = wdir_textBox.Text + "\\" + app2 + ".clog2";
1240                                        if (File.Exists(app2))
1241                                        {
1242                                                app = app2;
1243                                                FileStream f = File.OpenRead(app2);
1244                                                app = f.Name;
1245                                                f.Close();
1246                                        }
1247                                }
1248                                if (app.IndexOf(' ') != -1)
1249                                {
1250                                        app = "\"" + app + "\"";
1251                                }
1252                        }
1253                        catch (Exception)
1254                        {
1255                                app = "";
1256                        }
1257                        return app;
1258                }
1259
1260                private string get_mpiexec()
1261                {
1262                        string mpiexec = "";
1263                        object obj;
1264                        try
1265                        {
1266                                RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\MPICH2");
1267                                if (key != null)
1268                                {
1269                                        obj = key.GetValue("Path");
1270                                        key.Close();
1271                                        if (obj != null)
1272                                        {
1273                                                mpiexec = obj.ToString();
1274                                                if (mpiexec.EndsWith(@"\"))
1275                                                {
1276                                                        mpiexec = mpiexec + @"bin\mpiexec.exe";
1277                                                }
1278                                                else
1279                                                {
1280                                                        mpiexec = mpiexec + @"\bin\mpiexec.exe";
1281                                                }
1282                                                if (!File.Exists(mpiexec))
1283                                                {
1284                                                        mpiexec = "";
1285                                                }
1286                                        }
1287                                }
1288                                if (mpiexec == "")
1289                                {
1290                                        key = Registry.LocalMachine.OpenSubKey(@"Software\MPICH\SMPD");
1291                                        if (key != null)
1292                                        {
1293                                                obj = key.GetValue("binary");
1294                                                key.Close();
1295                                                if (obj != null)
1296                                                {
1297                                                        mpiexec = obj.ToString().Replace("smpd.exe", "mpiexec.exe");
1298                                                        if (!File.Exists(mpiexec))
1299                                                        {
1300                                                                mpiexec = "";
1301                                                        }
1302                                                }
1303                                        }
1304                                }
1305                                if (mpiexec == "")
1306                                {
1307                                        mpiexec = "mpiexec.exe";
1308                                }
1309                                mpiexec = mpiexec.Trim();
1310                                mpiexec_command = mpiexec; // save the path to mpiexec.exe without quotes
1311                                if (mpiexec.IndexOf(' ') != -1)
1312                                {
1313                                        mpiexec = "\"" + mpiexec + "\"";
1314                                }
1315                        }
1316                        catch (Exception)
1317                        {
1318                                mpiexec = "mpiexec.exe";
1319                        }
1320                        return mpiexec;
1321                }
1322                #endregion
1323
1324                private string get_command_line()
1325                {
1326                        string cmd, mpiexec;
1327                        cmd = mpiexec = get_mpiexec();
1328                        if (application_radioButton.Checked)
1329                        {
1330                                wdir_textBox.Text = wdir_textBox.Text.Trim();
1331                                if (wdir_textBox.Text.Length > 0)
1332                                {
1333                                        if (wdir_textBox.Text.IndexOf(' ') != -1)
1334                                        {
1335                                                cmd = cmd + " -wdir \"" + wdir_textBox.Text + "\"";
1336                                        }
1337                                        else
1338                                        {
1339                                                cmd = cmd + " -wdir " + wdir_textBox.Text;
1340                                        }
1341                                }
1342                                drive_map_textBox.Text = drive_map_textBox.Text.Trim();
1343                                if (drive_map_textBox.Text.Length > 0)
1344                                {
1345                                        if (drive_map_textBox.Text.IndexOf(' ') != -1)
1346                                        {
1347                                                cmd = cmd + " -map \"" + drive_map_textBox.Text + "\"";
1348                                        }
1349                                        else
1350                                        {
1351                                                cmd = cmd + " -map " + drive_map_textBox.Text;
1352                                        }
1353                                }
1354                                if (log_checkBox.Checked)
1355                                {
1356                                        cmd = cmd + " -log";
1357                                }
1358                                channel_comboBox.Text = channel_comboBox.Text.Trim();
1359                                if (channel_comboBox.Text != "default" && channel_comboBox.Text != "auto" && channel_comboBox.Text != "")
1360                                {
1361                                        cmd = cmd + " -env MPICH2_CHANNEL " + channel_comboBox.Text;
1362                                }
1363                                env_textBox.Text = env_textBox.Text.Trim();
1364                                if (env_textBox.Text.Length > 0)
1365                                {
1366                                        foreach (string keyval in env_textBox.Text.Split(' '))
1367                                        {
1368                                                string [] kv;
1369                                                kv = keyval.Split('=');
1370                                                if (kv.Length > 1)
1371                                                {
1372                                                        cmd = cmd + " -env " + kv[0] + " " + kv[1];
1373                                                }
1374                                        }
1375                                }
1376                                hosts_textBox.Text = hosts_textBox.Text.Trim();
1377                                if (hosts_textBox.Text.Length > 0)
1378                                {
1379                                        string [] hosts;
1380                                        int n;
1381                                        hosts = hosts_textBox.Text.Split(' ');
1382                                        n = (int)nproc_numericUpDown.Value;
1383                                        if (n > hosts.Length)
1384                                        {
1385                                                int max = n % hosts.Length;
1386                                                cmd = cmd + " -hosts " + hosts.Length + " ";
1387                                                for (int i=0; i<hosts.Length; i++)
1388                                                {
1389                                                        if (i<max)
1390                                                        {
1391                                                                cmd = cmd + hosts[i] + " " + ((n / hosts.Length) + 1) + " ";
1392                                                        }
1393                                                        else
1394                                                        {
1395                                                                cmd = cmd + hosts[i] + " " + (n / hosts.Length) + " ";
1396                                                        }
1397                                                }
1398                                        }
1399                                        else
1400                                        {
1401                                                cmd = cmd + " -hosts " + n + " ";
1402                                                for (int i=0; i<n; i++)
1403                                                {
1404                                                        cmd = cmd + hosts[i] + " ";
1405                                                }
1406                                        }
1407                                }
1408                                else
1409                                {
1410                                        cmd = cmd + " -n " + nproc_numericUpDown.Value + " ";
1411                                }
1412                                extra_options_textBox.Text = extra_options_textBox.Text.Trim();
1413                                if (extra_options_textBox.Text.Length > 0)
1414                                {
1415                                        cmd = cmd + " " + extra_options_textBox.Text;
1416                                }
1417                                application_comboBox.Text = application_comboBox.Text.Trim();
1418                                // Don't add quotes because they would enclose any arguments to the application
1419                                // The user must provide the quotes as necessary in the combo box.
1420                                /*
1421                                if (application_comboBox.Text.IndexOf(' ') != -1)
1422                                {
1423                                        cmd = cmd + " \"" + application_comboBox.Text + "\"";
1424                                }
1425                                else
1426                                {
1427                                        cmd = cmd + " " + application_comboBox.Text;
1428                                }
1429                                */
1430                                cmd = cmd + " -noprompt " + application_comboBox.Text; // add -noprompt since we can't send input to stdin
1431                                mpiexec_command_args = cmd.Replace(mpiexec, ""); // save the command line minus the mpiexec path
1432                        }
1433                        else if (configfile_radioButton.Checked)
1434                        {
1435                                configfile_textBox.Text = configfile_textBox.Text.Trim();
1436                                if (configfile_textBox.Text.IndexOf(' ') != -1)
1437                                {
1438                                        cmd = cmd + " -configfile \"" + configfile_textBox.Text + "\"";
1439                                }
1440                                else
1441                                {
1442                                        cmd = cmd + " -configfile " + configfile_textBox.Text;
1443                                }
1444                        }
1445                        else if (mpich1_radioButton.Checked)
1446                        {
1447                                mpich1_textBox.Text = mpich1_textBox.Text.Trim();
1448                                if (mpich1_textBox.Text.IndexOf(' ') != -1)
1449                                {
1450                                        cmd = cmd + " -file \"" + mpich1_textBox.Text + "\"";
1451                                }
1452                                else
1453                                {
1454                                        cmd = cmd + " -file " + mpich1_textBox.Text;
1455                                }
1456                        }
1457                        else
1458                        {
1459                                cmd = "";
1460                        }
1461                        return cmd;
1462                }
1463
1464                private void show_command_button_Click(object sender, System.EventArgs e)
1465                {
1466                        command_line_textBox.Text = get_command_line();
1467                }
1468
1469                private void output_richTextBox_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
1470                {
1471                        if (process != null)
1472                        {
1473                                char_written.WaitOne();
1474                                ch = e.KeyChar;
1475                                char_written.Reset();
1476                                char_available.Set();
1477                        }
1478                }
1479
1480                #region Radio buttons enabling and disabling functions
1481                /// <summary>
1482                /// Enable and disable controls based on which radio button is selected
1483                /// </summary>
1484                private void DisableApplicationControls()
1485                {
1486                        application_label.Enabled = false;
1487                        application_comboBox.Enabled = false;
1488                        application_browse_button.Enabled = false;
1489                        nproc_label.Enabled = false;
1490                        nproc_numericUpDown.Enabled = false;
1491                        wdir_label.Enabled = false;
1492                        wdir_textBox.Enabled = false;
1493                        wdir_browse_button.Enabled = false;
1494                        hosts_label.Enabled = false;
1495                        hosts_textBox.Enabled = false;
1496                        hosts_reset_button.Enabled = false;
1497                        env_label.Enabled = false;
1498                        env_textBox.Enabled = false;
1499                        drive_map_label.Enabled = false;
1500                        drive_map_textBox.Enabled = false;
1501                        channel_label.Enabled = false;
1502                        channel_comboBox.Enabled = false;
1503                        extra_options_label.Enabled = false;
1504                        extra_options_textBox.Enabled = false;
1505                        log_checkBox.Enabled = false;
1506                }
1507
1508                private void EnableApplicationControls()
1509                {
1510                        application_label.Enabled = true;
1511                        application_comboBox.Enabled = true;
1512                        application_browse_button.Enabled = true;
1513                        nproc_label.Enabled = true;
1514                        nproc_numericUpDown.Enabled = true;
1515                        wdir_label.Enabled = true;
1516                        wdir_textBox.Enabled = true;
1517                        wdir_browse_button.Enabled = true;
1518                        hosts_label.Enabled = true;
1519                        hosts_textBox.Enabled = true;
1520                        hosts_reset_button.Enabled = true;
1521                        env_label.Enabled = true;
1522                        env_textBox.Enabled = true;
1523                        drive_map_label.Enabled = true;
1524                        drive_map_textBox.Enabled = true;
1525                        channel_label.Enabled = true;
1526                        channel_comboBox.Enabled = true;
1527                        extra_options_textBox.Enabled = true;
1528                        extra_options_label.Enabled = true;
1529                        log_checkBox.Enabled = true;
1530                }
1531
1532                private void DisableConfigfileControls()
1533                {
1534                        configfile_label.Enabled = false;
1535                        configfile_textBox.Enabled = false;
1536                        configfile_browse_button.Enabled = false;
1537                }
1538
1539                private void EnableConfigfileControls()
1540                {
1541                        configfile_label.Enabled = true;
1542                        configfile_textBox.Enabled = true;
1543                        configfile_browse_button.Enabled = true;
1544                }
1545
1546                private void DisableMPICH1Controls()
1547                {
1548                        mpich1_label.Enabled = false;
1549                        mpich1_textBox.Enabled = false;
1550                        mpich1_browse_button.Enabled = false;
1551                }
1552
1553                private void EnableMPICH1Controls()
1554                {
1555                        mpich1_label.Enabled = true;
1556                        mpich1_textBox.Enabled = true;
1557                        mpich1_browse_button.Enabled = true;
1558                }
1559
1560                private void application_radioButton_CheckedChanged(object sender, System.EventArgs e)
1561                {
1562                        if (application_radioButton.Checked)
1563                        {
1564                                EnableApplicationControls();
1565                                DisableConfigfileControls();
1566                                DisableMPICH1Controls();
1567                        }
1568                }
1569
1570                private void configfile_radioButton_CheckedChanged(object sender, System.EventArgs e)
1571                {
1572                        if (configfile_radioButton.Checked)
1573                        {
1574                                DisableApplicationControls();
1575                                EnableConfigfileControls();
1576                                DisableMPICH1Controls();
1577                        }
1578                }
1579
1580                private void mpich1_radioButton_CheckedChanged(object sender, System.EventArgs e)
1581                {
1582                        if (mpich1_radioButton.Checked)
1583                        {
1584                                DisableApplicationControls();
1585                                DisableConfigfileControls();
1586                                EnableMPICH1Controls();
1587                        }
1588                }
1589                #endregion
1590
1591                #region Dialog expansion and contraction
1592                /// <summary>
1593                /// Manage expansion and contraction of the extra dialog controls
1594                /// </summary>
1595                private void DisableAnchors()
1596                {
1597                        show_bottom_checkBox.Anchor = AnchorStyles.Top;
1598                        wdir_label.Anchor = AnchorStyles.Top;
1599                        wdir_textBox.Anchor = AnchorStyles.Top;
1600                        wdir_browse_button.Anchor = AnchorStyles.Top;
1601                        hosts_label.Anchor = AnchorStyles.Top;
1602                        hosts_textBox.Anchor = AnchorStyles.Top;
1603                        hosts_reset_button.Anchor = AnchorStyles.Top;
1604                        configfile_label.Anchor = AnchorStyles.Top;
1605                        configfile_textBox.Anchor = AnchorStyles.Top;
1606                        configfile_browse_button.Anchor = AnchorStyles.Top;
1607                        mpich1_label.Anchor = AnchorStyles.Top;
1608                        mpich1_textBox.Anchor = AnchorStyles.Top;
1609                        mpich1_browse_button.Anchor = AnchorStyles.Top;
1610                        env_label.Anchor = AnchorStyles.Top;
1611                        env_textBox.Anchor = AnchorStyles.Top;
1612                        drive_map_label.Anchor = AnchorStyles.Top;
1613                        drive_map_textBox.Anchor = AnchorStyles.Top;
1614                        channel_label.Anchor = AnchorStyles.Top;
1615                        channel_comboBox.Anchor = AnchorStyles.Top;
1616                        output_richTextBox.Anchor = AnchorStyles.Top;
1617                        configfile_radioButton.Anchor = AnchorStyles.Top;
1618                        mpich1_radioButton.Anchor = AnchorStyles.Top;
1619                        extra_options_label.Anchor = AnchorStyles.Top;
1620                        extra_options_textBox.Anchor = AnchorStyles.Top;
1621                        log_checkBox.Anchor = AnchorStyles.Top;
1622                        jumpshot_button.Anchor = AnchorStyles.Top;
1623                }
1624
1625                private void EnableAnchors()
1626                {
1627                        show_bottom_checkBox.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left);
1628                        wdir_label.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Left)));
1629                        wdir_textBox.Anchor = ((AnchorStyles)(((AnchorStyles.Bottom | AnchorStyles.Left) | AnchorStyles.Right)));
1630                        wdir_browse_button.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Right)));
1631                        hosts_label.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Left)));
1632                        hosts_textBox.Anchor = ((AnchorStyles)(((AnchorStyles.Bottom | AnchorStyles.Left) | AnchorStyles.Right)));
1633                        hosts_reset_button.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Right)));
1634                        configfile_label.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Left)));
1635                        configfile_textBox.Anchor = ((AnchorStyles)(((AnchorStyles.Bottom | AnchorStyles.Left) | AnchorStyles.Right)));
1636                        configfile_browse_button.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Right)));
1637                        mpich1_label.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Left)));
1638                        mpich1_textBox.Anchor = ((AnchorStyles)(((AnchorStyles.Bottom | AnchorStyles.Left) | AnchorStyles.Right)));
1639                        mpich1_browse_button.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Right)));
1640                        env_label.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Left)));
1641                        env_textBox.Anchor = ((AnchorStyles)(((AnchorStyles.Bottom | AnchorStyles.Left) | AnchorStyles.Right)));
1642                        drive_map_label.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Left)));
1643                        drive_map_textBox.Anchor = ((AnchorStyles)(((AnchorStyles.Bottom | AnchorStyles.Left) | AnchorStyles.Right)));
1644                        channel_label.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Left)));
1645                        channel_comboBox.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Right)));
1646                        output_richTextBox.Anchor = ((AnchorStyles)((((AnchorStyles.Top | AnchorStyles.Bottom) | AnchorStyles.Left) | AnchorStyles.Right)));
1647                        configfile_radioButton.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Left)));
1648                        mpich1_radioButton.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Left)));
1649                        extra_options_label.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Left)));
1650                        extra_options_textBox.Anchor = ((AnchorStyles)(((AnchorStyles.Bottom | AnchorStyles.Left) | AnchorStyles.Right)));
1651                        log_checkBox.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Right)));
1652                        jumpshot_button.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Right)));
1653                }
1654
1655                private void HideExtraOptions()
1656                {
1657                        wdir_label.Hide();
1658                        wdir_textBox.Hide();
1659                        wdir_browse_button.Hide();
1660                        hosts_label.Hide();
1661                        hosts_textBox.Hide();
1662                        hosts_reset_button.Hide();
1663                        configfile_label.Hide();
1664                        configfile_textBox.Hide();
1665                        configfile_browse_button.Hide();
1666                        mpich1_label.Hide();
1667                        mpich1_textBox.Hide();
1668                        mpich1_browse_button.Hide();
1669                        env_label.Hide();
1670                        env_textBox.Hide();
1671                        drive_map_label.Hide();
1672                        drive_map_textBox.Hide();
1673                        channel_label.Hide();
1674                        channel_comboBox.Hide();
1675                        configfile_radioButton.Hide();
1676                        mpich1_radioButton.Hide();
1677                        extra_options_textBox.Hide();
1678                        extra_options_label.Hide();
1679                        log_checkBox.Hide();
1680                        jumpshot_button.Hide();
1681                }
1682
1683                private void ShowExtraOptions()
1684                {
1685                        wdir_label.Show();
1686                        wdir_textBox.Show();
1687                        wdir_browse_button.Show();
1688                        hosts_label.Show();
1689                        hosts_textBox.Show();
1690                        hosts_reset_button.Show();
1691                        configfile_label.Show();
1692                        configfile_textBox.Show();
1693                        configfile_browse_button.Show();
1694                        mpich1_label.Show();
1695                        mpich1_textBox.Show();
1696                        mpich1_browse_button.Show();
1697                        env_label.Show();
1698                        env_textBox.Show();
1699                        drive_map_label.Show();
1700                        drive_map_textBox.Show();
1701                        channel_label.Show();
1702                        channel_comboBox.Show();
1703                        configfile_radioButton.Show();
1704                        mpich1_radioButton.Show();
1705                        extra_options_label.Show();
1706                        extra_options_textBox.Show();
1707                        log_checkBox.Show();
1708                        jumpshot_button.Show();
1709                }
1710
1711                private void UpdateExtraControls(bool bShow)
1712                {
1713                        DisableAnchors();
1714                        if (bShow)
1715                        {
1716                                ShowExtraOptions();
1717                                Height = Height + expanded_dialog_difference;//230;
1718                        }
1719                        else
1720                        {
1721                                HideExtraOptions();
1722                                Height = Height - expanded_dialog_difference;//230;
1723                        }
1724                        EnableAnchors();
1725                }
1726
1727                private void show_bottom_checkBox_CheckedChanged(object sender, System.EventArgs e)
1728                {
1729                        UpdateExtraControls(show_bottom_checkBox.Checked);
1730                }
1731                #endregion
1732
1733                private void wmpiexec_Closing(object sender, System.ComponentModel.CancelEventArgs e)
1734                {
1735                        if (process != null)
1736                        {
1737                                process.Kill();
1738                        }
1739                        if (last_execute_result != null)
1740                        {
1741                                run_command.EndInvoke(last_execute_result);
1742                                last_execute_result = null;
1743                        }
1744                }
1745
1746                private void jumpshot_button_Click(object sender, System.EventArgs e)
1747                {
1748                        Process p;
1749                        string args = "-Xms32m -Xmx256m -jar " + get_jumpshot() + " " + get_clog2();
1750                        //MessageBox.Show("javaw.exe " + args);
1751                        //output_richTextBox.AppendText("javaw.exe " + args + "\r\n");
1752                        try
1753                        {
1754                                p = Process.Start("javaw.exe", args);
1755                        }
1756                        catch (Exception x)
1757                        {
1758                                MessageBox.Show("Unable to start: javaw.exe " + args + "\r\n" + x.Message, "Error");
1759                        }
1760                }
1761        }
1762}
Note: See TracBrowser for help on using the browser.