/*@@ @file ProcessCommandLine.c @date Thu Sep 24 10:32:28 1998 @author Tom Goodale @desc Routines to deal with the command line arguments. @enddesc @@*/ #include #include #include "CommandLine.h" #include "cctk_Flesh.h" #include "cctk_GNU.h" static char *rcsid = "$Header$"; CCTK_FILEVERSION(main_ProcessCommandLine_c) static char *parameter_file_name=NULL; static int argc; static char **argv; /*@@ @routine CCTKi_ProcessCommandLine @date Thu Sep 24 10:33:31 1998 @author Tom Goodale @desc Processes the command line arguments. @enddesc @calls @calledby @history @endhistory @@*/ int CCTKi_ProcessCommandLine(int *inargc, char ***inargv, tFleshConfig *ConfigData) { int option_index = 0; int c; /* Store the command line */ argc = *inargc; argv = *inargv; /* Process the command line - needs some work !*/ if(argc>1) { while (1) { struct option long_options[] = { {"help", no_argument, NULL, 'h'}, {"describe-all-parameters", optional_argument, NULL, 'O'}, {"describe-parameter", required_argument, NULL, 'o'}, {"test-parameters", optional_argument, NULL, 'x'}, {"warning-level", required_argument, NULL, 'W'}, {"error-level", required_argument, NULL, 'E'}, {"redirect-stdout", no_argument, NULL, 'r'}, {"list-thorns", no_argument, NULL, 'T'}, {"test-thorn-compiled", required_argument, NULL, 't'}, {"version", no_argument, NULL, 'v'}, {0, 0, 0, 0} }; c = getopt_long_only (argc, argv, "hO::o:x::W:E:rTt:v", long_options, &option_index); if (c == -1) break; switch (c) { case 't': CCTKi_CommandLineTestThornCompiled(optarg); break; case 'O': CCTKi_CommandLineDescribeAllParameters(optarg); break; case 'o': CCTKi_CommandLineDescribeParameter(optarg); break; case 'x': CCTKi_CommandLineTestParameters(optarg); break; case 'W': CCTKi_CommandLineWarningLevel(optarg); break; case 'E': CCTKi_CommandLineErrorLevel(optarg); break; case 'r': CCTKi_CommandLineRedirectStdout(); break; case 'T': CCTKi_CommandLineListThorns(); break; case 'v': CCTKi_CommandLineVersion(); break; case 'h': case '?': CCTKi_CommandLineHelp(); break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if(argc > optind) { ConfigData->parameter_file_name = argv[optind]; parameter_file_name = ConfigData->parameter_file_name; } else { CCTKi_CommandLineUsage(); } } else { CCTKi_CommandLineUsage(); } CCTKi_CommandLineFinished(); return 0; } /*@@ @routine CCTK_CommandLine @date Wed Feb 17 00:19:30 1999 @author Tom Goodale @desc Gets the command line arguments. @enddesc @calls @calledby @history @endhistory @@*/ int CCTK_CommandLine(char ***outargv) { *outargv = argv; return argc; } /*@@ @routine CCTK_ParameterFilename @date Tue Oct 3 2000 @author Gabrielle Allen @desc Returns the parameter filename @enddesc @calls @calledby @history @endhistory @@*/ int CCTK_ParameterFilename(int len, char *filename) { int retval; if (CCTK_Equals(parameter_file_name,"-")) { strncpy(filename,"STDIN",len-1); } else { strncpy(filename,parameter_file_name,len-1); } retval = strlen(filename); retval=retval > len ? 0 : retval; return retval; } void CCTK_FCALL CCTK_FNAME(CCTK_ParameterFilename) (int *retval, int *len, char *name) { *retval = CCTK_ParameterFilename(*len,name); }