Fixed text file permissions
[snark14.git] / tools / Input / SnarkInput.cpp
1 /** @file SnarkInput.cpp
2     @package snark14Input
3     @author Bruno M. Carvalho and Deniz Sarioz
4     modifications made June 13, 2008 by Joanna Klukowska
5         addition of variability to snark14 (two extra fields in LAST line
6         changed occurances of snark05 to snark14
7         removed SAVE and MODIFY options from RUN since snark14 does not have file12
8     licensed under (open-source) QPL v1.0
9     which accompanies this distribution in the file QPL
10 */
11
12 #include "SnarkInput.h"
13 #include "icons.h"
14 #include "variables.h"
15
16 #include "basis.h"
17 #include "create.h"
18 #include "display.h"
19 #include "evaluate.h"
20 #include "execute.h"
21 #include "experiment.h"
22 #include "lines.h"
23 #include "mode.h"
24 #include "picture.h"
25 #include "projection.h"
26 #include "punch.h"
27 #include "select.h"
28 #include "skunk.h"
29 #include "stop.h"
30 #include "super.h"
31 #include "trace.h"
32
33 #include <qstring.h>
34 #include <qlabel.h>
35 #include <qrect.h>
36 #include <qintdict.h>
37 #include <qlistbox.h>
38 #include <qtoolbar.h>
39 #include <qstatusbar.h>
40 #include <qbuttongroup.h>
41 #include <qradiobutton.h>
42
43 char *myTag = "si140703";
44
45 int edittype=1;
46
47 /** 
48  *  Constructs a SnarkInput which is a child of 'parent', with the 
49  *  name 'name' and widget flags set to 'f' 
50  *
51  *  The dialog will by default be modeless, unless you set 'modal' to
52  *  TRUE to construct a modal dialog.
53 @param void
54 @author Bruno M. Carvalho
55 @version 1.0 */
56 SnarkInput::SnarkInput(QWidget* parent, const char* name, WFlags fl)
57     : QMainWindow(parent, name, fl)
58
59   printf("snark14Input version %s\n", myTag);
60
61   entries=0;
62   resize(482,665);
63   setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, sizePolicy().hasHeightForWidth() ) );
64   setMinimumSize(QSize(482,665));
65
66   inputfilename=QString("./snark_input");
67
68   QPixmap comments_icon( ( const char** ) comments_icon_data );
69   QPixmap trace_icon( ( const char** ) trace_icon_data );
70   QPixmap mode_icon( ( const char** ) mode_icon_data );
71   QPixmap create_icon( ( const char** ) create_icon_data );
72   QPixmap picture_icon( ( const char** ) picture_icon_data );
73   QPixmap projection_icon( ( const char** ) projection_icon_data );
74   QPixmap select_icon( ( const char** ) select_icon_data );
75   QPixmap basis_icon( ( const char** ) basis_icon_data );
76   QPixmap stop_icon( ( const char** ) stop_icon_data );
77   QPixmap super_icon( ( const char** ) super_icon_data );
78   QPixmap execute_icon( ( const char** ) execute_icon_data );
79   QPixmap evaluate_icon( ( const char** ) evaluate_icon_data );
80   QPixmap display_icon( ( const char** ) display_icon_data );
81   QPixmap punch_icon( ( const char** ) punch_icon_data );
82   QPixmap lines_icon( ( const char** ) lines_icon_data );
83   QPixmap skunk_icon( ( const char** ) skunk_icon_data );
84   QPixmap end_icon( ( const char** ) end_icon_data );
85   QPixmap run_icon( ( const char** ) run_icon_data );
86   QPixmap open_icon( ( const char** ) open_icon_data );
87   QPixmap save_icon( ( const char** ) save_icon_data );
88   QPixmap saveas_icon( ( const char** ) saveas_icon_data );
89   QPixmap newfile_icon( ( const char** ) newfile_icon_data );
90
91   QMenuBar* menubar=menuBar();
92
93   filemenu=new QPopupMenu(menubar,"File Menu");
94   QString t="&Open";
95   filemenu->insertItem(t,this,SLOT(openFile()));
96   t="&New";
97   filemenu->insertItem(t,this,SLOT(newInputFile()));
98   t="&Save";
99   filemenu->insertItem(t,this,SLOT(saveFile()));
100   t="S&ave as";
101   filemenu->insertItem(t,this,SLOT(saveFileAs()));
102   t="&Quit";
103   filemenu->insertItem(t,qApp,SLOT(quit()));  
104
105   commandsmenu=new QPopupMenu(menubar,"Commands Menu");
106   t="&* Comments Window";
107   commandsmenu->insertItem(t,this,SLOT(callComment()));
108   t="&Trace Window";
109   commandsmenu->insertItem(t,this,SLOT(callTrace()));
110   t="&Mode Window";
111   commandsmenu->insertItem(t,this,SLOT(callMode()));
112   t="&Create Window";
113   commandsmenu->insertItem(t,this,SLOT(callCreate()));
114   t="&Picture Window";
115   commandsmenu->insertItem(t,this,SLOT(callPicture()));
116   t="p&Rojection Window";
117   commandsmenu->insertItem(t,this,SLOT(callProjection()));
118   t="&Select Window";
119   commandsmenu->insertItem(t,this,SLOT(callSelect()));
120   t="&Basis Function Window";
121   commandsmenu->insertItem(t,this,SLOT(callBasis()));
122   t="st&Op Window";
123   commandsmenu->insertItem(t,this,SLOT(callStop()));
124   t="s&Uperiorize Window";
125   commandsmenu->insertItem(t,this,SLOT(callSuper()));
126   t="&Execute Window";
127   commandsmenu->insertItem(t,this,SLOT(callExecute()));
128   t="e&Valuate Window";
129   commandsmenu->insertItem(t,this,SLOT(callEvaluate()));
130   t="&Display Window";
131   commandsmenu->insertItem(t,this,SLOT(callDisplay()));
132   t="p&Unch Window";
133   commandsmenu->insertItem(t,this,SLOT(callPunch()));
134   t="&Lines Window";
135   commandsmenu->insertItem(t,this,SLOT(callLines()));
136   t="s&Kunk Function Window";
137   commandsmenu->insertItem(t,this,SLOT(callSkunk()));
138   t="E&nd Command";
139   commandsmenu->insertItem(t,this,SLOT(addEnd()));
140
141   runsnarkmenu=new QPopupMenu(menubar,"Run Snark Menu");
142   t="&Run SNARK";
143   runsnarkmenu->insertItem(t,this,SLOT(runSnark()));
144
145   helpmenu=new QPopupMenu(menubar,"Help Menu");
146   t="&About";
147   helpmenu->insertItem(t,this,SLOT(about()));
148
149   menubar->insertItem("&File",filemenu);
150   menubar->insertItem("&Commands",commandsmenu);
151   menubar->insertItem("&SNARK",runsnarkmenu);
152   menubar->insertSeparator();
153   menubar->insertItem("&Help",helpmenu);
154
155   /** Add graphical buttons to the interface */  
156   QToolBar *tb1 = new QToolBar("label",this,Top,false,"fileiconsbar");
157   tb1->setHorizontalStretchable(true);
158
159   QToolButton* ii=new QToolButton(open_icon,"Open File",QString::null,this,SLOT(openFile()),tb1,"Open File");
160
161   ii=new QToolButton(newfile_icon,"New File",QString::null,this,SLOT(newInputFile()),tb1,"New File");
162
163   ii=new QToolButton(save_icon,"Save File",QString::null,this,SLOT(saveFile()),tb1,"Save File");
164
165   ii=new QToolButton(saveas_icon,"Save File as",QString::null,this,SLOT(saveFileAs()),tb1,"Save File as");
166
167   QToolBar *tb2 = new QToolBar("label",this,Left,false,"iconsbar");
168   tb2->setVerticalStretchable(true);
169
170   QToolBar *tb3 = new QToolBar("label",this,Left,false,"iconsbar2");
171   tb3->setVerticalStretchable(true);
172
173   ii=new QToolButton(comments_icon,"Comments",QString::null,this,SLOT(callComment()),tb2,"Experiment Comments");
174
175   ii=new QToolButton(trace_icon,"Trace Window",QString::null,this,SLOT(callTrace()),tb2,"Trace Window");
176
177   ii=new QToolButton(mode_icon,"Mode window",QString::null,this,SLOT(callMode()),tb2,"Mode window");
178
179   ii=new QToolButton(create_icon,"Create Window",QString::null,this,SLOT(callCreate()),tb2,"Create Window");
180
181   ii=new QToolButton(picture_icon,"Picture window",QString::null,this,SLOT(callPicture()),tb2,"Picture window");
182
183   ii=new QToolButton(projection_icon,"Projection Window",QString::null,this,SLOT(callProjection()),tb2,"Projection Window");
184
185   ii=new QToolButton(select_icon,"Select Window",QString::null,this,SLOT(callSelect()),tb2,"Select Window");
186
187   ii=new QToolButton(basis_icon,"Basis window",QString::null,this,SLOT(callBasis()),tb2,"Basis window");
188
189   ii=new QToolButton(stop_icon,"Stop Window",QString::null,this,SLOT(callStop()),tb2,"Stop Window");
190
191   ii=new QToolButton(super_icon,"Superiorize Window",QString::null,this,SLOT(callSuper()),tb2,"Superiorize Window");
192
193   ii=new QToolButton(execute_icon,"Execute Window",QString::null,this,SLOT(callExecute()),tb3,"Execute Window");
194
195   ii=new QToolButton(evaluate_icon,"Evaluate Window",QString::null,this,SLOT(callEvaluate()),tb3,"Evaluate Window");
196
197   ii=new QToolButton(display_icon,"Display window",QString::null,this,SLOT(callDisplay()),tb3,"Display window");  
198
199   ii=new QToolButton(punch_icon,"Punch window",QString::null,this,SLOT(callPunch()),tb3,"Punch window");
200
201   ii=new QToolButton(lines_icon,"Lines window",QString::null,this,SLOT(callLines()),tb3,"Lines window");
202
203   ii=new QToolButton(skunk_icon,"Skunk Window",QString::null,this,SLOT(callSkunk()),tb3,"Skunk Window");
204
205   ii=new QToolButton(end_icon,"End Command",QString::null,this,SLOT(addEnd()),tb3,"End Command");
206
207   ii=new QToolButton(run_icon,"Run SNARK14",QString::null,this,SLOT(runSnark()),tb3,"Run SNARK14");
208
209   currentinput = new QMultiLineEdit(this,"current input");
210   setCentralWidget(currentinput);
211
212   QLabel* ibl = new QLabel( statusBar(), "tracelabel" );
213   ibl->setGeometry( QRect( 10, 0, 130, 30 ) ); 
214   ibl->setText( tr( "Insert command:" ) );
215
216   QButtonGroup* insertbuttongroup = new QButtonGroup( statusBar(), "tracebuttongroup" );
217   insertbuttongroup->setGeometry( QRect( 150, 0, 300, 60 ) );
218   insertbuttongroup->setFrameStyle(QFrame::NoFrame);
219   insertbuttongroup->setAlignment( int( QButtonGroup::AlignVCenter ) );
220   QObject::connect(insertbuttongroup,SIGNAL(clicked(int)),this,SLOT(setInsertType(int)));
221
222   QRadioButton* int1button = new QRadioButton(insertbuttongroup,"int1button");
223   int1button->setGeometry( QRect( 0, 0, 100, 30 ) ); 
224   int1button->setText( tr( "At the end" ) );
225   //  int1button->setChecked(true);
226
227   QRadioButton* int2button = new QRadioButton(insertbuttongroup,"int2button");
228   int2button->setGeometry( QRect( 110, 0, 130, 30 ) ); 
229   int2button->setText( tr( "After cursor line" ) );
230   int2button->setChecked(true);
231
232   sleep(1);
233
234   //  delete splash;
235 }
236
237 /** Calls file dialog and opens file
238 @param void
239 @author Bruno M. Carvalho
240 @version 1.0 */
241 void SnarkInput::setInsertType(int e)
242 {
243   edittype=e;
244 }
245
246
247 /** Calls file dialog and opens file
248 @param void
249 @author Bruno M. Carvalho
250 @version 1.0 */
251 void SnarkInput::openFile()
252 {
253   QString tempbuffer,tempinputfilename;
254   char tempstring[500];
255   int i,l;
256
257   tempinputfilename=QFileDialog::getOpenFileName(QString::null,"Snark input files (*.in)\n All files (*)");
258   if(tempinputfilename) {
259     inputfilename=tempinputfilename;
260     if((inputfile=fopen(inputfilename,"r+"))==NULL) {
261       printf("Error opening %s\n",(const char *)inputfilename);
262     } 
263     else { /* fseek(inputfile,0L,SEEK_END); */
264       tempbuffer=QString();
265       l=currentinput->numLines();
266       for(i=0;i<l;i++)
267         currentinput->removeLine(0);
268       while(fgets(tempstring,500,inputfile)) {
269         tempbuffer.append(QString(tempstring));
270       }
271       currentinput->insertLine(tempbuffer,-1);
272       fclose(inputfile);
273     }
274   }
275 }
276
277 /** Erases current content for a new input file
278 @param void
279 @author Bruno M. Carvalho
280 @version 1.0 */
281 void SnarkInput::newInputFile()
282 {
283   while(currentinput->numLines()>1)
284     currentinput->removeLine(0);
285   currentinput->removeLine(0);
286   inputfilename=QString("./snark_input");
287 }
288
289 /**  Saves file 
290 @param void
291 @author Bruno M. Carvalho
292 @version 1.0 */
293 void SnarkInput::saveFile()
294 {
295   int i,l;
296   QString t;
297
298   if((inputfile=fopen(inputfilename,"w"))==NULL) {
299   QMessageBox::information(this,"SnarkInput","Error!\n"
300                                  "Could not open file %s\n",(const char *)inputfilename);
301   } 
302   else {
303     l=currentinput->numLines();
304     for(i=0;i<l;i++) {
305       t=currentinput->textLine(i);
306       fprintf(inputfile,"%s\n",t.latin1());
307     }
308     fclose(inputfile);  
309   }
310 }
311
312 /**  Calls file dialog and saves file as
313 @param void
314 @author Bruno M. Carvalho
315 @version 1.0 */
316 void SnarkInput::saveFileAs()
317 {
318   int i,l;
319   QString t;
320
321   outputfilename=QFileDialog::getSaveFileName(QString::null,"Snark input files (*.in)\n All files (*)");
322   if(outputfilename) {
323     inputfilename=outputfilename;
324     if((inputfile=fopen(inputfilename,"w"))==NULL) {
325     QMessageBox::information(this,"SnarkInput","Error!\n"
326                                    "Could not open file %s\n",(const char *)inputfilename);
327     } 
328     else {
329       l=currentinput->numLines();
330       for(i=0;i<l;i++) {
331         t=currentinput->textLine(i);
332         fprintf(inputfile,"%s\n",t.latin1());
333       }
334       fclose(inputfile);
335     }
336   }
337 }
338
339 /** Calls SNARK with current input file
340 @param void
341 @author Bruno M. Carvalho
342 @version 1.0 */
343 void SnarkInput::runSnark()
344
345   QString todo;
346   printf("SNARK14 is run on file %s\n",(const char *)inputfilename);
347   char tmpfilename[100];
348   sprintf(tmpfilename, "/tmp/snark_input_%d_%d", getuid(), geteuid());
349   char command[150];
350   if((inputfile=fopen(tmpfilename, "w"))==NULL) {
351     printf("Error opening for read-write %s\n",(const char *)tmpfilename);
352   }
353   todo=currentinput->text();
354   fprintf(inputfile,"%s\n",todo.latin1());
355   fflush(inputfile);
356   fclose(inputfile);  
357   // Added by deniz to fix bug 85
358   // these tests return 0 for pass, so we use some deMorgan :)
359   if(system("test -x ./bin/snark14UserDefined") ||  // file exists and executable
360      system("test -s ./bin/snark14UserDefined") ||  // exists and has non-zero size
361      system("test -f ./bin/snark14UserDefined")) {  // exists and is regular (not a directory)
362 // std::cout << "file is not a non-zero-size executable non-directory" << std::endl;
363     // run snark14 as usual
364     sprintf(command, "snark14 < %s", tmpfilename);
365     //    system("snark14 < /tmp/snark_input ");
366     system(command);
367   } else {
368 // std::cout << "file is a non-zero-size executable non-directory" << std::endl;
369     // run ./bin/snark14UserAlg
370     sprintf(command, "./bin/snark14UserDefined < %s", tmpfilename);
371     //    system("./bin/snark14UserAlg < /tmp/snark_input ");
372     system(command);
373   }
374   // don't clean-up... potentially dangerous... let files be.
375   //  sprintf(command, "rm -f %s", tmpfilename);
376   //  system(command);
377 }
378
379 /** Calls SnarkInput manual
380 @param void
381 @author Bruno M. Carvalho
382 @version 1.0 
383 COMMENTED OUT BY DENIZ SARIOZ in line with "new requirements"
384 */
385 // void SnarkInput::help()
386 // {
387 //   char command[80];
388 //   // char *snarkinputbase;
389 //   sprintf(command,"acroread %s/doc/SnarkInput.pdf &",SNARKINPUTBASE);
390 //   /* snarkinputbase=getenv("HOME");
391 //   printf("SNARKINPUTBASE=%s\n",snarkinputbase);
392 //   snarkinputbase=getenv("SNARKBASE");
393 //   printf("SNARKINPUTBASE=%s\n",snarkinputbase);
394 //   sprintf(command,"acroread $SNARKINPUTBASE/doc/SnarkInput.pdf &"); */
395 //   system(command);
396 // }
397
398 /** Calls Snark manual
399 @param void
400 @author Bruno M. Carvalho
401 @version 1.0 
402 COMMENTED OUT BY DENIZ SARIOZ in line with "new requirements"
403 */
404 // void SnarkInput::SNARKManual()
405 // {
406 //   char command[80];
407 //   sprintf(command,"acroread %s/doc/Snark_manual.pdf &",SNARKBASE);
408 //   system(command); 
409 // }
410
411 /** Calls about window
412 @param void
413 @author Bruno M. Carvalho & Deniz Sarioz
414 @version 2.0 */
415 void SnarkInput::about()
416 {
417   QMessageBox::information(this,"snark14Input",
418                               "snark05Input was developed by\n"
419                            "Bruno M. Carvalho and Deniz Sarioz\n"
420                            "2003--2005\n"
421                            "converted to snark14Input by Joanna Klukowska\n"
422                            "June 2008\n"
423                            "converted to snark14Input by Bernhard Prommegger\n"
424                            "July 2014\n"
425                            "copyright (QPL) by CUNY-GC-CS-DIG\n"
426                            "http://www.dig.cs.gc.cuny.edu");
427 }
428
429 /** Calls comment window
430 @param void
431 @author Bruno M. Carvalho
432 @version 1.0 */
433 void SnarkInput::callComment()
434 {
435   QString line;
436   int l,col;
437
438   experimentwindow* nw=new experimentwindow(this,"Experiment's Comments Window",true);
439   int c=nw->exec();
440   if(c==QDialog::Accepted) {
441     line=nw->getOutput();
442     if(edittype) {
443       currentinput->getCursorPosition(&l,&col);
444       currentinput->insertLine(line,l+1);
445     }
446     else
447       currentinput->insertLine(line);
448   }
449 }
450
451 /** Starts a trace window
452 @param void
453 @author Bruno M. Carvalho
454 @version 1.0 */ 
455 void SnarkInput::callTrace()
456
457   QString line;
458   int l,col;
459
460   tracewindow* nw=new tracewindow(this,"Trace Window",true);
461   int c=nw->exec();
462   if(c==QDialog::Accepted) {
463     line=nw->getOutput();
464     if(edittype) {
465       currentinput->getCursorPosition(&l,&col);
466       currentinput->insertLine(line,l+1);
467     }
468     else
469       currentinput->insertLine(line);
470   }
471 }
472
473 /** Starts a mode window
474 @param void
475 @author Bruno M. Carvalho
476 @version 1.0 */ 
477 void SnarkInput::callMode()
478 {
479   QString line;
480   int l,col;
481
482   modewindow* nw=new modewindow(this,"Mode Window",true);
483   int c=nw->exec();
484   if(c==QDialog::Accepted) {
485     line=nw->getOutput();
486     if(edittype) {
487       currentinput->getCursorPosition(&l,&col);
488       currentinput->insertLine(line,l+1);
489     }
490     else
491       currentinput->insertLine(line);
492   }
493 }
494
495 /** Starts a create window
496 @param void
497 @author Bruno M. Carvalho
498 @version 1.0 */ 
499 void SnarkInput::callCreate() 
500 {  
501   QString line1,line2,line3,line4,line5,line6,line7,line8;
502   QStringList divline;
503   int ell,col;
504
505   createwindow* nw=new createwindow(this,"Create Window",true);
506   int c=nw->exec();
507   if(c==QDialog::Accepted) {
508     line1=nw->getOutput1();
509     line2=nw->getOutput2();
510     line3=nw->getOutput3();
511     line4=nw->getOutput4();
512     line5=nw->getOutput5();
513     if(nw->isRaysumAveragePresent()) {
514       line6=nw->getOutput6();
515       line7=nw->getOutput7();
516       line8=nw->getOutput8();
517     }
518     if(edittype) {
519       currentinput->getCursorPosition(&ell,&col);
520       if((currentinput->numLines()) == (ell+1)) { // if cursor on last line of text
521         currentinput->insertLine("",ell+1); // hack so that stuff below will work
522       }
523       if(nw->isRaysumAveragePresent()) {
524         currentinput->insertLine(line8,ell+1);
525         currentinput->insertLine(line7,ell+1);
526         currentinput->insertLine(line6,ell+1);
527       }
528       currentinput->insertLine(line5,ell+1);
529       currentinput->insertLine(line4,ell+1);
530       currentinput->insertLine(line3,ell+1);
531       currentinput->insertLine(line2,ell+1);
532       currentinput->insertLine(line1,ell+1);
533     }
534     else {
535       currentinput->insertLine(line1);
536       currentinput->insertLine(line2);
537       currentinput->insertLine(line3);
538       currentinput->insertLine(line4);
539       currentinput->insertLine(line5);
540       if(nw->isRaysumAveragePresent()) {
541         currentinput->insertLine(line6);
542         currentinput->insertLine(line7);
543         currentinput->insertLine(line8);
544       }
545     }
546   }
547 }
548
549 /** Starts a picture window
550 @param void
551 @author Bruno M. Carvalho
552 @version 1.0 */ 
553 void SnarkInput::callPicture()
554 {
555   QString line;
556   int l,col;
557
558   picturewindow* nw=new picturewindow(this,"Picture Window",true);
559   int c=nw->exec();
560   if(c==QDialog::Accepted) {
561     line=nw->getOutput();
562     if(edittype) {
563       currentinput->getCursorPosition(&l,&col);
564       currentinput->insertLine(line,l+1);
565     }
566     else
567       currentinput->insertLine(line);
568   }
569 }
570
571 /** Starts a projection window
572 @param void
573 @author Bruno M. Carvalho
574 @version 1.0 */ 
575 void SnarkInput::callProjection() 
576 {
577   QString line;
578   int l,col;
579
580   projectionwindow* nw=new projectionwindow(this,"Projection Window",true);
581   int c=nw->exec();
582   if(c==QDialog::Accepted) {
583     line=nw->getOutput();
584     if(edittype) {
585       currentinput->getCursorPosition(&l,&col);
586       currentinput->insertLine(line,l+1);
587     }
588     else
589       currentinput->insertLine(line);
590   }
591 }
592
593 /** Starts a select window
594 @param void
595 @author Bruno M. Carvalho
596 @version 1.0 */ 
597 void SnarkInput::callSelect() 
598 {
599   QString line;
600   int l,col;
601
602   selectwindow* nw=new selectwindow(this,"Select Window",true);
603   int c=nw->exec();
604   if(c==QDialog::Accepted) {
605     line=nw->getOutput();
606     if(edittype) {
607       currentinput->getCursorPosition(&l,&col);
608       currentinput->insertLine(line,l+1);
609     }
610     else
611       currentinput->insertLine(line);
612   }
613 }
614
615 /** Starts a basis window
616 @param void
617 @author Bruno M. Carvalho
618 @version 1.0 */ 
619 void SnarkInput::callBasis()
620 {  
621   QString line;
622   int l,col;
623
624   basiswindow* nw=new basiswindow(this,"Basis Function Window",true);
625   int c=nw->exec();
626   if(c==QDialog::Accepted) {
627     line=nw->getOutput();
628     if(edittype) {
629       currentinput->getCursorPosition(&l,&col);
630       currentinput->insertLine(line,l+1);
631     }
632     else
633       currentinput->insertLine(line);
634   } 
635 }
636
637 /** Starts a stop window
638 @param void
639 @author Bruno M. Carvalho
640 @version 1.0 */ 
641 void SnarkInput::callStop() 
642 {
643   QString line;
644   int l,col;
645
646   stopwindow* nw=new stopwindow(this,"Stop Window",true);
647   int c=nw->exec();
648   if(c==QDialog::Accepted) {    
649     line=nw->getOutput();
650     if(edittype) {
651       currentinput->getCursorPosition(&l,&col);
652       currentinput->insertLine(line,l+1);
653     }
654     else
655       currentinput->insertLine(line);
656   }
657 }
658
659 // Starts a superiorize window
660 void SnarkInput::callSuper()
661 {
662   QString line;
663   int l,col;
664
665   superwindow* nw=new superwindow(this,"Superiorize Window",true);
666   int c=nw->exec();
667   if(c==QDialog::Accepted) {
668     line=nw->getOutput();
669     if(edittype) {
670       currentinput->getCursorPosition(&l,&col);
671       currentinput->insertLine(line,l+1);
672     }
673     else
674       currentinput->insertLine(line);
675   }
676 }
677
678 /** Starts a execute window
679 @param void
680 @author Bruno M. Carvalho
681 @version 1.0 */ 
682 void SnarkInput::callExecute()
683 {
684   QString line;
685   int l,col;
686
687   executewindow* nw=new executewindow(this,"Execute Window",true);
688   int c=nw->exec();
689   if(c==QDialog::Accepted) {
690     line=nw->getOutput();
691     if(edittype) {
692       currentinput->getCursorPosition(&l,&col);
693       currentinput->insertLine(line,l+1);
694     }
695     else
696       currentinput->insertLine(line);
697   }
698 }
699
700 /** Starts a evaluate window
701 @param void
702 @author Bruno M. Carvalho
703 @version 1.0 */ 
704 void SnarkInput::callEvaluate() 
705 {
706   QString line;
707   int l,col;
708
709   evaluatewindow* nw=new evaluatewindow(this,"Evaluate Window",true);
710   int c=nw->exec();
711   if(c==QDialog::Accepted) {
712     line=nw->getOutput();
713     if(edittype) {
714       currentinput->getCursorPosition(&l,&col);
715       currentinput->insertLine(line,l+1);
716     }
717     else
718       currentinput->insertLine(line);
719   }
720 }
721
722 /** Starts a display window
723 @param void
724 @author Bruno M. Carvalho
725 @version 1.0 */ 
726 void SnarkInput::callDisplay() 
727 {
728   QString line;
729   int l,col;
730
731   displaywindow* nw=new displaywindow(this,"Display Window",true);
732   int c=nw->exec();
733   if(c==QDialog::Accepted) {
734     line=nw->getOutput();
735     if(edittype) {
736       currentinput->getCursorPosition(&l,&col);
737       currentinput->insertLine(line,l+1);
738     }
739     else
740       currentinput->insertLine(line);
741   }
742 }
743
744 /** Starts a punch window
745 @param void
746 @author Bruno M. Carvalho
747 @version 1.0 */ 
748 void SnarkInput::callPunch()
749 {  
750   QString line;
751   int l,col;
752
753   punchwindow* nw=new punchwindow(this,"Punch Window",true);
754   int c=nw->exec();
755   if(c==QDialog::Accepted) {
756     line=nw->getOutput();
757     if(edittype) {
758       currentinput->getCursorPosition(&l,&col);
759       currentinput->insertLine(line,l+1);
760     }
761     else
762       currentinput->insertLine(line);
763   }
764 }
765
766 /** Starts a lines window
767 @param void
768 @author Bruno M. Carvalho
769 @version 1.0 */ 
770 void SnarkInput::callLines() 
771 {
772   QString line;
773   int l,col;
774
775   lineswindow* nw=new lineswindow(this,"Lines Window",true);
776   int c=nw->exec();
777   if(c==QDialog::Accepted) {
778     line=nw->getOutput();
779     if(edittype) {
780       currentinput->getCursorPosition(&l,&col);
781       currentinput->insertLine(line,l+1);
782     }
783     else
784       currentinput->insertLine(line);
785   }
786 }
787
788 /** Starts a skunk window
789 @param void
790 @author Bruno M. Carvalho
791 @version 1.0 */ 
792 void SnarkInput::callSkunk() 
793 {
794   QString line;
795   int l,col;
796
797   skunkwindow* nw=new skunkwindow(this,"Skunk Window",true);
798   int c=nw->exec();
799   if(c==QDialog::Accepted) {
800     line=nw->getOutput();
801     if(edittype) {
802       currentinput->getCursorPosition(&l,&col);
803       currentinput->insertLine(line,l+1);
804     }
805     else
806       currentinput->insertLine(line);
807   }
808 }
809
810 /** Adds an end command
811 @param void
812 @author Bruno M. Carvalho
813 @version 1.0 */ 
814 void SnarkInput::addEnd()
815 {  
816   int l,col;
817
818   if(edittype) {
819     currentinput->getCursorPosition(&l,&col);
820     currentinput->insertLine(QString("END"),l+1);
821   }
822   else
823     currentinput->insertLine(QString("END"));
824 }
825
826 /** Starts the application
827 @param void
828 @author Bruno M. Carvalho
829 @version 1.0 */ 
830 int main(int argc,char* argv[])
831 {
832   QApplication snarkapp(argc,argv);
833  
834   SnarkInput* mw=new SnarkInput();
835   snarkapp.setMainWidget(mw);
836   mw->show();
837   return snarkapp.exec();
838 }