Main Page   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  

driver.cc File Reference

#include "rs274ngc.hh"
#include "rs274ngc_return.hh"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

Include dependency graph for new/driver.cc:

Include dependency graph

Go to the source code of this file.

Functions

void report_error (int error_code, int print_stack)
int interpret_from_keyboard (int block_delete, int print_stack)
int interpret_from_file (int do_next, int block_delete, int print_stack)
int read_tool_file (char *file_name)
int designate_parameter_file (char *file_name)
int adjust_error_handling (int args, int *print_stack, int *do_next)
int main (int argc, char **argv)


Function Documentation

int adjust_error_handling int    args,
int *    print_stack,
int *    do_next
 

Definition at line 398 of file new/driver.cc.

Referenced by main().

00402 {
00403   char buffer[80];
00404   int choice;
00405 
00406   for(;;)
00407     {
00408       fprintf(stderr, "enter a number:\n");
00409       fprintf(stderr, "1 = done with error handling\n");
00410       fprintf(stderr, "2 = %sprint stack on error\n",
00411               ((*print_stack IS ON) ? "do not " : ""));
00412       if (args IS 3)
00413         {
00414           if (*do_next IS 0) /* 0 means continue */
00415             fprintf(stderr,
00416                     "3 = stop on error (do not continue)\n");
00417           else /* if do_next IS 2 -- 2 means stopping on error */
00418             fprintf(stderr,
00419                     "3 = continue on error (do not stop)\n");
00420         }
00421       else if (args IS 2)
00422         {
00423           if (*do_next IS 0) /* 0 means continue */
00424             fprintf(stderr,
00425                     "3 = mdi on error (do not continue or stop)\n");
00426           else if (*do_next IS 1) /* 1 means MDI */
00427             fprintf(stderr,
00428                     "3 = stop on error (do not mdi or continue)\n");
00429           else /* if do_next IS 2 -- 2 means stopping on error */
00430             fprintf(stderr,
00431                     "3 = continue on error (do not stop or mdi)\n");
00432         }
00433       fprintf(stderr, "enter choice => ");
00434       fgets(buffer,80,stdin);
00435       if (sscanf(buffer, "%d", &choice) ISNT 1)
00436         continue;
00437       if (choice IS 1)
00438         break;
00439       else if (choice IS 2)
00440         *print_stack SET_TO ((*print_stack IS OFF) ? ON : OFF);
00441       else if ((choice IS 3) AND (args IS 3))
00442         *do_next SET_TO ((*do_next IS 0) ? 2 : 0);
00443       else if ((choice IS 3) AND (args IS 2))
00444         *do_next SET_TO ((*do_next IS 2) ? 0 : (*do_next + 1));
00445     }
00446   return 0;
00447 }

int designate_parameter_file char *    file_name
 

Definition at line 347 of file new/driver.cc.

Referenced by main().

00348 {
00349   FILE * test_port;
00350 
00351   fprintf(stderr, "name of parameter file => ");
00352   fgets(file_name,PARAMETER_FILE_NAME_LENGTH,stdin);
00353   test_port SET_TO fopen(file_name, "r");
00354   if (test_port IS NULL)
00355     {
00356       fprintf(stderr, "Cannot open %s\n", file_name);
00357       return 1;
00358     }
00359   fclose(test_port);
00360   return 0;
00361 }

int interpret_from_file int    do_next,
int    block_delete,
int    print_stack
 

Definition at line 166 of file new/driver.cc.

Referenced by BuildList(), and main().

00170 {
00171   int status;
00172   char line[RS274NGC_TEXT_SIZE];
00173 
00174   for(; ;)
00175     {
00176       status SET_TO rs274ngc_read(NULL);
00177       if ((status IS RS274NGC_EXECUTE_FINISH) AND (block_delete IS ON))
00178         continue;
00179       else if (status IS RS274NGC_ENDFILE)
00180         break;
00181       if ((status ISNT RS274NGC_OK) AND    // should not be EXIT
00182           (status ISNT RS274NGC_EXECUTE_FINISH))
00183         {
00184           report_error(status, print_stack);
00185           if ((status IS NCE_FILE_ENDED_WITH_NO_PERCENT_SIGN) OR
00186               (do_next IS 2)) /* 2 means stop */
00187             {
00188               status SET_TO 1;
00189               break;
00190             }
00191           else if (do_next IS 1) /* 1 means MDI */
00192             {
00193               fprintf(stderr, "starting MDI\n");
00194               interpret_from_keyboard(block_delete, print_stack);
00195               fprintf(stderr, "continue program? y/n =>");
00196               fgets(line,RS274NGC_TEXT_SIZE,stdin);
00197               if (line[0] ISNT 'y')
00198                 {
00199                   status SET_TO 1;
00200                   break;
00201                 }
00202               else
00203                 continue;
00204             }
00205           else /* if do_next IS 0 -- 0 means continue */
00206             continue;
00207         }
00208       status SET_TO rs274ngc_execute();
00209       if ((status ISNT RS274NGC_OK) AND
00210           (status ISNT RS274NGC_EXIT) AND
00211           (status ISNT RS274NGC_EXECUTE_FINISH))
00212         {
00213           report_error(status, print_stack);
00214           status SET_TO 1;
00215           if (do_next IS 1) /* 1 means MDI */
00216             {
00217               fprintf(stderr, "starting MDI\n");
00218               interpret_from_keyboard(block_delete, print_stack);
00219               fprintf(stderr, "continue program? y/n =>");
00220               fgets(line,RS274NGC_TEXT_SIZE,stdin);
00221               if (line[0] ISNT 'y')
00222                 break;
00223             }
00224           else if (do_next IS 2) /* 2 means stop */
00225             break;
00226         }
00227       else if (status IS RS274NGC_EXIT)
00228         break;
00229     }
00230   return ((status IS 1) ? 1 : 0);
00231 }

int interpret_from_keyboard int    block_delete,
int    print_stack
 

Definition at line 103 of file new/driver.cc.

Referenced by interpret_from_file(), and main().

00106 {
00107   char line[RS274NGC_TEXT_SIZE];
00108   int status;
00109 
00110   for(; ;)
00111     {
00112       printf("READ => ");
00113       fgets(line,RS274NGC_TEXT_SIZE,stdin);
00114       if (strcmp (line, "quit") IS 0)
00115         return 0;
00116       status SET_TO rs274ngc_read(line);
00117       if ((status IS RS274NGC_EXECUTE_FINISH) AND (block_delete IS ON));
00118       else if (status IS RS274NGC_ENDFILE);
00119       else if ((status ISNT RS274NGC_EXECUTE_FINISH) AND
00120                (status ISNT RS274NGC_OK))
00121         report_error(status, print_stack);
00122       else
00123         {
00124           status SET_TO rs274ngc_execute();
00125           if ((status IS RS274NGC_EXIT) OR
00126               (status IS RS274NGC_EXECUTE_FINISH));
00127           else if (status ISNT RS274NGC_OK)
00128             report_error(status, print_stack);
00129         }
00130     }
00131 }

int main int    argc,
char **    argv
 

Definition at line 519 of file new/driver.cc.

00520 {
00521   int status;
00522   int choice;
00523   int do_next; /* 0=continue, 1=mdi, 2=stop */
00524   int block_delete;
00525   char buffer[80];
00526   int tool_flag;
00527   int gees[RS274NGC_ACTIVE_G_CODES];
00528   int ems[RS274NGC_ACTIVE_M_CODES];
00529   double sets[RS274NGC_ACTIVE_SETTINGS];
00530   char default_name[] SET_TO "rs274ngc.var";
00531   int print_stack;
00532 
00533   if (argc > 3)
00534     {
00535       fprintf(stderr, "Usage \"%s\"\n", argv[0]);
00536       fprintf(stderr, "   or \"%s <input file>\"\n", argv[0]);
00537       fprintf(stderr, "   or \"%s <input file> <output file>\"\n", argv[0]);
00538       exit(1);
00539     }
00540 
00541   do_next SET_TO 2;  /* 2=stop */
00542   block_delete SET_TO OFF;
00543   print_stack SET_TO OFF;
00544   tool_flag SET_TO 0;
00545   strcpy(_parameter_file_name, default_name);
00546   _outfile SET_TO stdout; /* may be reset below */
00547 
00548   for(; ;)
00549     {
00550       fprintf(stderr, "enter a number:\n");
00551       fprintf(stderr, "1 = start interpreting\n");
00552       fprintf(stderr, "2 = choose parameter file ...\n");
00553       fprintf(stderr, "3 = read tool file ...\n");
00554       fprintf(stderr, "4 = turn block delete switch %s\n",
00555               ((block_delete IS OFF) ? "ON" : "OFF"));
00556       fprintf(stderr, "5 = adjust error handling...\n");
00557       fprintf(stderr, "enter choice => ");
00558       fgets(buffer,80,stdin);
00559       if (sscanf(buffer, "%d", &choice) ISNT 1)
00560         continue;
00561       if (choice IS 1)
00562         break;
00563       else if (choice IS 2)
00564         {
00565           if (designate_parameter_file(_parameter_file_name) ISNT 0)
00566             exit(1);
00567         }
00568       else if (choice IS 3)
00569         {
00570           if (read_tool_file("") ISNT 0)
00571             exit(1);
00572           tool_flag SET_TO 1;
00573         }
00574       else if (choice IS 4)
00575         block_delete SET_TO ((block_delete IS OFF) ? ON : OFF);
00576       else if (choice IS 5)
00577         adjust_error_handling(argc, &print_stack, &do_next);
00578     }
00579   fprintf(stderr, "executing\n");
00580   if (tool_flag IS 0)
00581     {
00582       if (read_tool_file("rs274ngc.tool_default") ISNT 0)
00583         exit(1);
00584     }
00585 
00586   if (argc IS 3)
00587     {
00588       _outfile SET_TO fopen(argv[2], "w");
00589       if (_outfile IS NULL)
00590         {
00591           fprintf(stderr, "could not open output file %s\n", argv[2]);
00592           exit(1);
00593         }
00594     }
00595 
00596   if ((status SET_TO rs274ngc_init()) ISNT RS274NGC_OK)
00597     {
00598       report_error(status, print_stack);
00599       exit(1);
00600     }
00601 
00602   if (argc IS 1)
00603     status SET_TO interpret_from_keyboard(block_delete, print_stack);
00604   else /* if (argc IS 2 or argc IS 3) */
00605     {
00606       status SET_TO rs274ngc_open(argv[1]);
00607       if (status ISNT RS274NGC_OK) /* do not need to close since not open */
00608         {
00609           report_error(status, print_stack);
00610           exit(1);
00611         }
00612       status SET_TO interpret_from_file(do_next, block_delete, print_stack);
00613       rs274ngc_file_name(buffer, 5);  /* called to exercise the function */
00614       rs274ngc_file_name(buffer, 79); /* called to exercise the function */
00615       rs274ngc_close();
00616     }
00617   rs274ngc_line_length();         /* called to exercise the function */
00618   rs274ngc_sequence_number();     /* called to exercise the function */
00619   rs274ngc_active_g_codes(gees);  /* called to exercise the function */
00620   rs274ngc_active_m_codes(ems);   /* called to exercise the function */
00621   rs274ngc_active_settings(sets); /* called to exercise the function */
00622   rs274ngc_exit(); /* saves parameters */
00623   exit(status);
00624 }

int read_tool_file char *    file_name
 

Definition at line 268 of file new/driver.cc.

Referenced by main().

00270 {
00271   FILE * tool_file_port;
00272   char buffer[1000];
00273   int slot;
00274   int tool_id;
00275   double offset;
00276   double diameter;
00277 
00278   if (file_name[0] IS 0) /* ask for name if given name is empty string */
00279     {
00280       fprintf(stderr, "name of tool file => ");
00281       fgets(buffer,1000,stdin);
00282       tool_file_port SET_TO fopen(buffer, "r");
00283     }
00284   else
00285       tool_file_port SET_TO fopen(file_name, "r");
00286   if (tool_file_port IS NULL)
00287     {
00288       fprintf(stderr, "Cannot open %s\n",
00289               ((file_name[0] IS 0) ? buffer : file_name));
00290       return 1;
00291     }
00292   for(;;)    /* read and discard header, checking for blank line */
00293     {
00294       if (fgets(buffer, 1000, tool_file_port) IS NULL)
00295         {
00296           fprintf(stderr, "Bad tool file format\n");
00297           return 1;
00298         }
00299       else if (buffer[0] IS '\n')
00300         break;
00301     }
00302 
00303   for (slot SET_TO 0; slot <= _tool_max; slot++) /* initialize */
00304     {
00305       _tools[slot].id SET_TO -1;
00306       _tools[slot].length SET_TO 0;
00307       _tools[slot].diameter SET_TO 0;
00308     }
00309   for (; (fgets(buffer, 1000, tool_file_port) ISNT NULL); )
00310     {
00311       if (sscanf(buffer, "%d %d %lf %lf", &slot,
00312                  &tool_id, &offset, &diameter) < 4)
00313         {
00314           fprintf(stderr, "Bad input line \"%s\" in tool file\n", buffer);
00315           return 1;
00316         }
00317       if ((slot < 0) OR (slot > _tool_max)) /* zero and max both OK */
00318         {
00319           fprintf(stderr, "Out of range tool slot number %d\n", slot);
00320           return 1;
00321         }
00322       _tools[slot].id SET_TO tool_id;
00323       _tools[slot].length SET_TO offset;
00324       _tools[slot].diameter SET_TO diameter;
00325     }
00326   fclose(tool_file_port);
00327   return 0;
00328 }

void report_error int    error_code,
int    print_stack
 

Definition at line 52 of file new/driver.cc.

Referenced by interpret_from_file(), interpret_from_keyboard(), and main().

00055 {
00056   char buffer[RS274NGC_TEXT_SIZE];
00057   int k;
00058 
00059   rs274ngc_error_text(error_code, buffer, 5); /* for coverage of code */
00060   rs274ngc_error_text(error_code, buffer, RS274NGC_TEXT_SIZE);
00061   fprintf(stderr, "%s\n",
00062           ((buffer[0] IS 0) ? "Unknown error, bad error code" : buffer));
00063   rs274ngc_line_text(buffer, RS274NGC_TEXT_SIZE);
00064   fprintf(stderr, "%s\n", buffer);
00065   if (print_stack IS ON)
00066     {
00067       for (k SET_TO 0; ; k++)
00068         {
00069           rs274ngc_stack_name(k, buffer, RS274NGC_TEXT_SIZE);
00070           if (buffer[0] ISNT 0)
00071             fprintf(stderr, "%s\n", buffer);
00072           else
00073             break;
00074         }
00075     }
00076 }


Generated on Sun Dec 2 15:27:51 2001 for EMC by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001