From 81544348222b2c6ed9123482856d0b5f3c266e22 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Sat, 20 Jan 2024 18:03:45 +0100 Subject: [PATCH 01/15] Move command line and config file parsing to a new method configuration::read_config --- src/include/read_config.h | 3 ++- src/main/read_config.cpp | 20 ++++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/include/read_config.h b/src/include/read_config.h index beb45496..125a2411 100644 --- a/src/include/read_config.h +++ b/src/include/read_config.h @@ -12,8 +12,9 @@ class configuration { char input_file[256]; char param_file[256]; char output_file[256]; - configuration(int argc,char *argv[]); + configuration(int argc, char *argv[]); ~configuration(){}; + void read_config(int argc, char *argv[]); void missing_argument(const char *arg); int check_arg(const char *arg,const char *val); bool noplot; diff --git a/src/main/read_config.cpp b/src/main/read_config.cpp index 3ab8fc32..bea9dcde 100644 --- a/src/main/read_config.cpp +++ b/src/main/read_config.cpp @@ -8,14 +8,7 @@ #include "read_config.h" #include "matplotlib.h" -configuration::configuration(int argc,char *argv[]) { - - int i, k; - char *arg,*val; - char file[256]; - cmdline_parser cmd; - file_parser fp; - +configuration::configuration(int argc, char *argv[]) { verbose=1; strcpy(plot_device,"/NULL"); plot_interval=10; @@ -28,6 +21,17 @@ configuration::configuration(int argc,char *argv[]) { newton_dmax=0.5; noplot = false; + read_config(argc, argv); +} + + +void configuration::read_config(int argc, char *argv[]) { + int i, k; + char *arg,*val; + char file[256]; + cmdline_parser cmd; + file_parser fp; + sprintf(file, "%s/ester/star.cfg", ESTER_DATADIR); if(!fp.open(file)) printf("Can't open configuration file %s\n",file); From cc7fe9118ec0a480dcbf1d8e17c488c6f89e4872 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 23 Jan 2024 09:40:00 +0100 Subject: [PATCH 02/15] Seggregate config file and cmd line parsing in configuration class --- src/include/read_config.h | 4 +++- src/main/read_config.cpp | 16 ++++++++++++---- src/main/star1d.cpp | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/include/read_config.h b/src/include/read_config.h index 125a2411..1ecc24cb 100644 --- a/src/include/read_config.h +++ b/src/include/read_config.h @@ -12,9 +12,11 @@ class configuration { char input_file[256]; char param_file[256]; char output_file[256]; + configuration(int argc, char *argv[]); ~configuration(){}; - void read_config(int argc, char *argv[]); + void read_config_file(); + void read_command_line(int argc, char *argv[]); void missing_argument(const char *arg); int check_arg(const char *arg,const char *val); bool noplot; diff --git a/src/main/read_config.cpp b/src/main/read_config.cpp index bea9dcde..769df24f 100644 --- a/src/main/read_config.cpp +++ b/src/main/read_config.cpp @@ -21,18 +21,20 @@ configuration::configuration(int argc, char *argv[]) { newton_dmax=0.5; noplot = false; - read_config(argc, argv); + read_config_file(); + read_command_line(argc, argv); } -void configuration::read_config(int argc, char *argv[]) { - int i, k; +void configuration::read_config_file() { char *arg,*val; + int i, k; char file[256]; - cmdline_parser cmd; file_parser fp; + // Write in file the path to the default config file sprintf(file, "%s/ester/star.cfg", ESTER_DATADIR); + if(!fp.open(file)) printf("Can't open configuration file %s\n",file); else { @@ -48,6 +50,12 @@ void configuration::read_config(int argc, char *argv[]) { } fp.close(); } +} + +void configuration::read_command_line(int argc, char *argv[]) { + char *arg,*val; + cmdline_parser cmd; + cmd.open(argc,argv); while(int err_code=cmd.get(arg,val)) { diff --git a/src/main/star1d.cpp b/src/main/star1d.cpp index 7271cda7..50165e9b 100644 --- a/src/main/star1d.cpp +++ b/src/main/star1d.cpp @@ -36,8 +36,8 @@ int main(int argc,char *argv[]) { int nit,last_it; double err; tiempo t; - // double t_plot; + // Create config object configuration config(argc, argv); signal(SIGINT, sig_handler); From 7df9edeecc244602333a9bb86e3e1e02e4e68a4b Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 23 Jan 2024 09:50:04 +0100 Subject: [PATCH 03/15] Introduce and call configuration::read_config from main (see body) configuration::read_config wraps read_config_file and read_command_line to ensure execution order --- src/include/read_config.h | 3 ++- src/main/polytrope1d.cpp | 3 ++- src/main/read_config.cpp | 13 ++++++++++--- src/main/star1d.cpp | 3 ++- src/main/star2d.cpp | 6 ++++-- src/main/star_evol.cpp | 4 +++- 6 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/include/read_config.h b/src/include/read_config.h index 1ecc24cb..2f16edd2 100644 --- a/src/include/read_config.h +++ b/src/include/read_config.h @@ -13,8 +13,9 @@ class configuration { char param_file[256]; char output_file[256]; - configuration(int argc, char *argv[]); + configuration(); ~configuration(){}; + void read_config(int argc, char *argv[]); // wrapper around the following 2 methods void read_config_file(); void read_command_line(int argc, char *argv[]); void missing_argument(const char *arg); diff --git a/src/main/polytrope1d.cpp b/src/main/polytrope1d.cpp index 40e7101a..571261cd 100644 --- a/src/main/polytrope1d.cpp +++ b/src/main/polytrope1d.cpp @@ -36,7 +36,8 @@ int main(int argc,char *argv[]) { int nit,last_it; tiempo t; - configuration config(argc, argv); + configuration config; + config.read_config(argc, argv); signal(SIGINT, sig_handler); diff --git a/src/main/read_config.cpp b/src/main/read_config.cpp index 769df24f..69f3202e 100644 --- a/src/main/read_config.cpp +++ b/src/main/read_config.cpp @@ -8,7 +8,8 @@ #include "read_config.h" #include "matplotlib.h" -configuration::configuration(int argc, char *argv[]) { +configuration::configuration() { + // These are default values aimed to be replaced by config file values then command line ones verbose=1; strcpy(plot_device,"/NULL"); plot_interval=10; @@ -20,9 +21,15 @@ configuration::configuration(int argc, char *argv[]) { tol=1e-8; newton_dmax=0.5; noplot = false; +} + + +void configuration::read_config(int argc, char *argv[]) { + // To ensure command line argument's precendence (complying with documentation) + // over the configuration file argument these methods must be called IN THIS ORDER - read_config_file(); - read_command_line(argc, argv); + read_config_file(); // 1st --> default values + read_command_line(argc, argv); // 2nd --> can erase default config file values } diff --git a/src/main/star1d.cpp b/src/main/star1d.cpp index 50165e9b..979e6c71 100644 --- a/src/main/star1d.cpp +++ b/src/main/star1d.cpp @@ -38,7 +38,8 @@ int main(int argc,char *argv[]) { tiempo t; // Create config object - configuration config(argc, argv); + configuration config; + config.read_config(argc, argv); signal(SIGINT, sig_handler); diff --git a/src/main/star2d.cpp b/src/main/star2d.cpp index 7d3bb337..5c41056e 100644 --- a/src/main/star2d.cpp +++ b/src/main/star2d.cpp @@ -20,10 +20,12 @@ int main(int argc,char *argv[]) { int nit,last_it; double err=1; double t_plot; - configuration config(argc,argv); tiempo t; // figure *fig = NULL; - + + configuration config; + config.read_config(argc, argv); + signal(SIGINT,sig_handler); plt::figure(1, 10, 4); diff --git a/src/main/star_evol.cpp b/src/main/star_evol.cpp index 62affccd..e8223081 100644 --- a/src/main/star_evol.cpp +++ b/src/main/star_evol.cpp @@ -11,7 +11,9 @@ int main(int argc,char *argv[]) { - configuration config(argc,argv); + configuration config; + config.read_config(argc, argv); // Should we called only read_config_file here ? + cmdline_parser cmd; double dXc=0.05,Xcmin=0.05; From 283ad98ac60120058d54d6b70c096acb344c45ce Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 23 Jan 2024 10:31:57 +0100 Subject: [PATCH 04/15] Improve file_parser::open method and configuration::read_config_file logic and code file_parser::open now returns 1 on error and 0 else configuration::read_config_file has been cleared a bit: - add some comments - rename variables - better logic --- src/include/read_config.h | 1 + src/main/read_config.cpp | 36 +++++++++++++++++++++--------------- src/star/star1d_class.cpp | 4 ++-- src/star/star2d_class.cpp | 4 ++-- src/utils/parser.cpp | 5 ++--- 5 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/include/read_config.h b/src/include/read_config.h index 2f16edd2..9e1c301b 100644 --- a/src/include/read_config.h +++ b/src/include/read_config.h @@ -19,6 +19,7 @@ class configuration { void read_config_file(); void read_command_line(int argc, char *argv[]); void missing_argument(const char *arg); + void unknown_parameter(const char *arg); int check_arg(const char *arg,const char *val); bool noplot; }; diff --git a/src/main/read_config.cpp b/src/main/read_config.cpp index 69f3202e..0bead40e 100644 --- a/src/main/read_config.cpp +++ b/src/main/read_config.cpp @@ -35,28 +35,30 @@ void configuration::read_config(int argc, char *argv[]) { void configuration::read_config_file() { char *arg,*val; - int i, k; + int err_code, line; char file[256]; file_parser fp; // Write in file the path to the default config file sprintf(file, "%s/ester/star.cfg", ESTER_DATADIR); - if(!fp.open(file)) - printf("Can't open configuration file %s\n",file); - else { - while((k=fp.get(arg,val))) { - if((i=check_arg(arg,val))) { - printf("Syntax error in configuration file %s, line %d\n",file,k); - if(i==2) missing_argument(arg); - if(i==1) { - printf("Unknown parameter %s\n",arg); - exit(1); - } - } + // Try opening the file, get 1 on error + if(fp.open(file)){ + printf("Can't open configuration file %s\n", file); + ester_err(strerror(errno)); + } + + // iterate over each line/arg of the config file + while((line = fp.get(arg, val))) { + if((err_code = check_arg(arg, val))) { + printf("Syntax error in configuration file %s, line %d\n", file, line); + if(err_code == 2) + missing_argument(arg); + if(err_code == 1) + unknown_parameter(arg); } - fp.close(); } + fp.close(); } void configuration::read_command_line(int argc, char *argv[]) { @@ -148,5 +150,9 @@ int configuration::check_arg(const char *arg,const char *val) { } void configuration::missing_argument(const char *arg) { - ester_err("Error: Argument to '%s' missing", arg); + ester_err("Argument to '%s' missing", arg); } + +void configuration::unknown_parameter(const char *arg) { + ester_err("Unknown parameter '%s'", arg); +} \ No newline at end of file diff --git a/src/star/star1d_class.cpp b/src/star/star1d_class.cpp index 86ec087c..5dc4cc3b 100644 --- a/src/star/star1d_class.cpp +++ b/src/star/star1d_class.cpp @@ -50,7 +50,7 @@ int star1d::init(const char *input_file, const char *param_file, int argc, char } map0=map; } else { - if(!fp.open(default_params)) { + if(fp.open(default_params)) { printf("Can't open default parameters file %s\n", default_params); return 1; } @@ -74,7 +74,7 @@ int star1d::init(const char *input_file, const char *param_file, int argc, char } if(*param_file) { - if(!fp.open(param_file)) { + if(fp.open(param_file)) { printf("Can't open parameters file %s\n", param_file); return 1; } diff --git a/src/star/star2d_class.cpp b/src/star/star2d_class.cpp index 1ef15d6c..2f608b0a 100644 --- a/src/star/star2d_class.cpp +++ b/src/star/star2d_class.cpp @@ -526,7 +526,7 @@ int star2d::init(const char *input_file,const char *param_file,int argc,char *ar } map0=map; } else { - if(!fp.open(default_params)) { + if(fp.open(default_params)) { ester_err("Can't open default parameters file %s\n", default_params); } else { @@ -549,7 +549,7 @@ int star2d::init(const char *input_file,const char *param_file,int argc,char *ar } if(*param_file) { - if(!fp.open(param_file)) { + if(fp.open(param_file)) { ester_err("Can't open parameters file %s\n",param_file); return 1; } diff --git a/src/utils/parser.cpp b/src/utils/parser.cpp index 80977b4d..0102e180 100644 --- a/src/utils/parser.cpp +++ b/src/utils/parser.cpp @@ -60,10 +60,9 @@ void cmdline_parser::close(){} int file_parser::open(const char *file) { - iline=0; - if(!(fp=fopen(file,"rt"))) return 0; - return 1; + fp = fopen(file,"rt"); + return (fp == NULL); // return 1 on error (fp == NULL), else 0 } int file_parser::get(char *&arg,char *&val){ From 613b8bd97f3e62dca24cbda5116a4e1440eda2a8 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 23 Jan 2024 11:18:15 +0100 Subject: [PATCH 05/15] Reorganize read_config.h --- src/include/read_config.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/include/read_config.h b/src/include/read_config.h index 9e1c301b..f4bea045 100644 --- a/src/include/read_config.h +++ b/src/include/read_config.h @@ -7,6 +7,7 @@ class configuration { int minit,maxit; double tol,newton_dmax; int verbose; + bool noplot; char plot_device[64]; double plot_interval; char input_file[256]; @@ -14,13 +15,15 @@ class configuration { char output_file[256]; configuration(); - ~configuration(){}; + ~configuration(){}; + void read_config(int argc, char *argv[]); // wrapper around the following 2 methods - void read_config_file(); - void read_command_line(int argc, char *argv[]); + void read_config_file(); + void read_command_line(int argc, char *argv[]); + + int check_arg(const char *arg,const char *val); + void missing_argument(const char *arg); void unknown_parameter(const char *arg); - int check_arg(const char *arg,const char *val); - bool noplot; }; From b5dd8ebbce704d925091ff61ed4476071031b49f Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 23 Jan 2024 11:25:06 +0100 Subject: [PATCH 06/15] Change indentation from tabs to 4 whitespaces --- src/include/read_config.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/include/read_config.h b/src/include/read_config.h index f4bea045..761d4b59 100644 --- a/src/include/read_config.h +++ b/src/include/read_config.h @@ -4,15 +4,15 @@ class configuration { public: - int minit,maxit; - double tol,newton_dmax; - int verbose; - bool noplot; - char plot_device[64]; - double plot_interval; - char input_file[256]; - char param_file[256]; - char output_file[256]; + int minit,maxit; + double tol,newton_dmax; + int verbose; + bool noplot; + char plot_device[64]; + double plot_interval; + char input_file[256]; + char param_file[256]; + char output_file[256]; configuration(); ~configuration(){}; @@ -23,7 +23,7 @@ class configuration { int check_arg(const char *arg,const char *val); - void missing_argument(const char *arg); - void unknown_parameter(const char *arg); + void missing_argument(const char *arg); + void unknown_parameter(const char *arg); }; From 8a7657cc04ee150e6417a18db0cbe9acb6947147 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 23 Jan 2024 11:40:13 +0100 Subject: [PATCH 07/15] Improve configuration::read_command_line readibility --- src/main/read_config.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/read_config.cpp b/src/main/read_config.cpp index 0bead40e..4de21125 100644 --- a/src/main/read_config.cpp +++ b/src/main/read_config.cpp @@ -61,19 +61,24 @@ void configuration::read_config_file() { fp.close(); } -void configuration::read_command_line(int argc, char *argv[]) { - char *arg,*val; - cmdline_parser cmd; - - cmd.open(argc,argv); - while(int err_code=cmd.get(arg,val)) { - if(err_code==-1) exit(1); - err_code=check_arg(arg,val); - if(err_code==2) missing_argument(arg); - if(err_code==0) cmd.ack(arg,val); - } - cmd.close(); +void configuration::read_command_line(int argc, char *argv[]) { + char *arg,*val; + int err_code; + cmdline_parser cmd; + + cmd.open(argc, argv); + while(err_code = cmd.get(arg, val)) { + if(err_code == -1) + exit(1); + + err_code = check_arg(arg,val); + if(err_code == 2) + missing_argument(arg); + if(err_code == 0) + cmd.ack(arg,val); + } + cmd.close(); if (noplot == false) plt::init(); @@ -149,10 +154,12 @@ int configuration::check_arg(const char *arg,const char *val) { } + void configuration::missing_argument(const char *arg) { ester_err("Argument to '%s' missing", arg); } + void configuration::unknown_parameter(const char *arg) { ester_err("Unknown parameter '%s'", arg); -} \ No newline at end of file +} From 681fa89ee3ad28f3d146831322b35ec3cae7908c Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 23 Jan 2024 11:41:04 +0100 Subject: [PATCH 08/15] Improve src/include/parser.h readibility --- src/include/parser.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/include/parser.h b/src/include/parser.h index 89d5d075..4835218e 100644 --- a/src/include/parser.h +++ b/src/include/parser.h @@ -11,17 +11,17 @@ #include inline void force_locale() { - setlocale(LC_NUMERIC, "C"); + setlocale(LC_NUMERIC, "C"); } class cmdline_parser { - int argc,i; + int argc, i; char **argv; public: - cmdline_parser() { force_locale(); } - void open(int argc_in,char *argv_in[]); - int get(char *&arg,char *&val); - void ack(char *arg,char *val); + cmdline_parser() { force_locale(); } + void open(int argc_in, char *argv_in[]); + int get(char *&arg, char *&val); + void ack(char *arg, char *val); void close(); }; @@ -30,7 +30,7 @@ class file_parser { int iline; char line[1024]; public: - file_parser() { force_locale(); } + file_parser() { force_locale(); } int open(const char *file); int get(char *&arg,char *&val); void close(); From 6a298adb3d86e01764a6de3c4a6c7a2d25ae5ddf Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 23 Jan 2024 11:41:31 +0100 Subject: [PATCH 09/15] Change src/include/parser.h indentation from tabs to 4 whitespaces --- src/include/parser.h | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/include/parser.h b/src/include/parser.h index 4835218e..bf37ae5a 100644 --- a/src/include/parser.h +++ b/src/include/parser.h @@ -11,29 +11,29 @@ #include inline void force_locale() { - setlocale(LC_NUMERIC, "C"); + setlocale(LC_NUMERIC, "C"); } class cmdline_parser { - int argc, i; - char **argv; + int argc, i; + char **argv; public: - cmdline_parser() { force_locale(); } - void open(int argc_in, char *argv_in[]); - int get(char *&arg, char *&val); - void ack(char *arg, char *val); - void close(); + cmdline_parser() { force_locale(); } + void open(int argc_in, char *argv_in[]); + int get(char *&arg, char *&val); + void ack(char *arg, char *val); + void close(); }; class file_parser { - FILE *fp; - int iline; - char line[1024]; + FILE *fp; + int iline; + char line[1024]; public: - file_parser() { force_locale(); } - int open(const char *file); - int get(char *&arg,char *&val); - void close(); + file_parser() { force_locale(); } + int open(const char *file); + int get(char *&arg,char *&val); + void close(); }; #endif From c3969de8209bcb97e7c5371caa8b200099992a8b Mon Sep 17 00:00:00 2001 From: ctmbl Date: Wed, 24 Jan 2024 20:11:24 +0100 Subject: [PATCH 10/15] Improve command_parser::get error code -1 logic --- src/main/read_config.cpp | 3 ++- src/main/star_evol.cpp | 5 +++-- src/star/star1d_class.cpp | 6 ++++-- src/star/star2d_class.cpp | 4 +++- src/utils/parser.cpp | 4 +--- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/read_config.cpp b/src/main/read_config.cpp index 4de21125..319c9c51 100644 --- a/src/main/read_config.cpp +++ b/src/main/read_config.cpp @@ -70,7 +70,7 @@ void configuration::read_command_line(int argc, char *argv[]) { cmd.open(argc, argv); while(err_code = cmd.get(arg, val)) { if(err_code == -1) - exit(1); + ester_err("Invalid argument %s", arg); err_code = check_arg(arg,val); if(err_code == 2) @@ -84,6 +84,7 @@ void configuration::read_command_line(int argc, char *argv[]) { plt::init(); } + int configuration::check_arg(const char *arg,const char *val) { int err=0; diff --git a/src/main/star_evol.cpp b/src/main/star_evol.cpp index e8223081..a834de9e 100644 --- a/src/main/star_evol.cpp +++ b/src/main/star_evol.cpp @@ -20,8 +20,9 @@ int main(int argc,char *argv[]) { char *arg,*val; cmd.open(argc,argv); - while(int err_code=cmd.get(arg,val)) { - if(err_code==-1) exit(1); + while(int err_code = cmd.get(arg,val)) { + if(err_code == -1) + ester_err("Invalid argument %s", arg); err_code=0; if(!strcmp(arg,"dXc")) { if(val==NULL) err_code=2; diff --git a/src/star/star1d_class.cpp b/src/star/star1d_class.cpp index 5dc4cc3b..7917392f 100644 --- a/src/star/star1d_class.cpp +++ b/src/star/star1d_class.cpp @@ -97,8 +97,10 @@ int star1d::init(const char *input_file, const char *param_file, int argc, char } cmd.open(argc, argv); - while(int err_code=cmd.get(arg, val)) { - if(err_code==-1) exit(1); + while(int err_code = cmd.get(arg, val)) { + if(err_code == -1) // Normally this can't happen because an Invalid Argument would already have been found in read_command_line + ester_err("Invalid argument %s", arg); + err_code=check_arg(arg, val, &change_grid); if(err_code==2) { fprintf(stderr, "Error: Argument to '%s' missing\n", arg); diff --git a/src/star/star2d_class.cpp b/src/star/star2d_class.cpp index 2f608b0a..85a3c42d 100644 --- a/src/star/star2d_class.cpp +++ b/src/star/star2d_class.cpp @@ -574,7 +574,9 @@ int star2d::init(const char *input_file,const char *param_file,int argc,char *ar cmd.open(argc,argv); while(int err_code=cmd.get(arg,val)) { - if(err_code==-1) exit(1); + if(err_code == -1) // Normally this can't happen because an Invalid Argument would already have been found in read_command_line + ester_err("Invalid argument %s", arg); + err_code=check_arg(arg,val,&change_grid); if(err_code==2) { ester_err("Error: Argument to '%s' missing\n",arg); diff --git a/src/utils/parser.cpp b/src/utils/parser.cpp index 0102e180..6f6ceee0 100644 --- a/src/utils/parser.cpp +++ b/src/utils/parser.cpp @@ -24,10 +24,8 @@ int cmdline_parser::get(char *&arg,char *&val) { } if(i==argc) return 0; if(argv[i][0]!='-') { - printf("Invalid argument %s\n",argv[i]); - arg=argv[i]+1; + arg=argv[i]; val=NULL; - i++; return -1; } arg=argv[i]+1; From 9199a7de609f349f358fc91a23affc3cb6eec1a3 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Wed, 24 Jan 2024 23:28:18 +0100 Subject: [PATCH 11/15] Comment read_config and parser code --- src/main/read_config.cpp | 8 +++++++- src/utils/parser.cpp | 25 ++++++++++++++----------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/main/read_config.cpp b/src/main/read_config.cpp index 319c9c51..b37b7622 100644 --- a/src/main/read_config.cpp +++ b/src/main/read_config.cpp @@ -73,6 +73,7 @@ void configuration::read_command_line(int argc, char *argv[]) { ester_err("Invalid argument %s", arg); err_code = check_arg(arg,val); + // We ignore Error Code 1 (unknown parameter) on purpose: it might be interpreted by star1d::init later if(err_code == 2) missing_argument(arg); if(err_code == 0) @@ -86,7 +87,12 @@ void configuration::read_command_line(int argc, char *argv[]) { int configuration::check_arg(const char *arg,const char *val) { - + /* + Return codes: + 0: No Error + 1: Unknown paramter + 2: Missing value + */ int err=0; if(!strcmp(arg,"v0")) diff --git a/src/utils/parser.cpp b/src/utils/parser.cpp index 6f6ceee0..6845d769 100644 --- a/src/utils/parser.cpp +++ b/src/utils/parser.cpp @@ -8,17 +8,20 @@ extern "C" { } void cmdline_parser::open(int argc_in, char *argv_in[]) { - - argc=argc_in; - argv=argv_in; - i=1; - + argc = argc_in; + argv = argv_in; + i = 1; } int cmdline_parser::get(char *&arg,char *&val) { - + /* + Return codes: + -1: Invalid Parameter (missing '-' probably) + 0: End Of List, no more parameters to get + 1: No Error + */ if(i>=argc) return 0; - while(argv[i][0]=='\0') { + while(argv[i][0]=='\0') { // Ignore already parsed arguments i++; if(i==argc) break; } @@ -48,10 +51,10 @@ int cmdline_parser::get(char *&arg,char *&val) { } void cmdline_parser::ack(char *arg,char *val) { - - *(arg-1)='\0'; - if(val!=NULL) *val='\0'; - + // Acknoledge, argument parsed successfully + *(arg-1) = '\0'; + if(val != NULL) + *val = '\0'; } void cmdline_parser::close(){} From ef9195617337d4c699010a3515020ffc8b35784d Mon Sep 17 00:00:00 2001 From: ctmbl Date: Wed, 24 Jan 2024 23:31:26 +0100 Subject: [PATCH 12/15] Rename check_arg --> parse_arg --- src/include/read_config.h | 2 +- src/include/star.h | 4 ++-- src/main/read_config.cpp | 6 +++--- src/star/star1d_class.cpp | 10 +++++----- src/star/star2d_class.cpp | 8 ++++---- utils/starR/star1dR_class.cpp | 4 ++-- utils/starR/star2dR_class.cpp | 4 ++-- utils/starR/starR.h | 4 ++-- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/include/read_config.h b/src/include/read_config.h index 761d4b59..af21cc18 100644 --- a/src/include/read_config.h +++ b/src/include/read_config.h @@ -21,7 +21,7 @@ class configuration { void read_config_file(); void read_command_line(int argc, char *argv[]); - int check_arg(const char *arg,const char *val); + int parse_arg(const char *arg,const char *val); void missing_argument(const char *arg); void unknown_parameter(const char *arg); diff --git a/src/include/star.h b/src/include/star.h index 04e34b00..80640632 100644 --- a/src/include/star.h +++ b/src/include/star.h @@ -88,7 +88,7 @@ class star2d { virtual void atmosphere(); virtual int init(const char *input_file, const char *param_file, int argc, char *argv[]); - virtual int check_arg(char *arg, char *val, int *change_grid); + virtual int parse_arg(char *arg, char *val, int *change_grid); virtual int read(const char *input_file, int dim = 2); int hdf5_read(const char *input_file, int dim); virtual void write(const char *output_file) const; @@ -181,7 +181,7 @@ class star1d : public star2d { star1d(const star1d &); star1d &operator=(const star1d &); virtual int init(const char *input_file, const char *param_file, int argc, char *argv[]); - virtual int check_arg(char *arg, char *val, int *change_grid); + virtual int parse_arg(char *arg, char *val, int *change_grid); virtual int read(const char *input_file, int dim = 1); virtual void dump_info(); diff --git a/src/main/read_config.cpp b/src/main/read_config.cpp index b37b7622..d3805d4b 100644 --- a/src/main/read_config.cpp +++ b/src/main/read_config.cpp @@ -50,7 +50,7 @@ void configuration::read_config_file() { // iterate over each line/arg of the config file while((line = fp.get(arg, val))) { - if((err_code = check_arg(arg, val))) { + if((err_code = parse_arg(arg, val))) { printf("Syntax error in configuration file %s, line %d\n", file, line); if(err_code == 2) missing_argument(arg); @@ -72,7 +72,7 @@ void configuration::read_command_line(int argc, char *argv[]) { if(err_code == -1) ester_err("Invalid argument %s", arg); - err_code = check_arg(arg,val); + err_code = parse_arg(arg,val); // We ignore Error Code 1 (unknown parameter) on purpose: it might be interpreted by star1d::init later if(err_code == 2) missing_argument(arg); @@ -86,7 +86,7 @@ void configuration::read_command_line(int argc, char *argv[]) { } -int configuration::check_arg(const char *arg,const char *val) { +int configuration::parse_arg(const char *arg,const char *val) { /* Return codes: 0: No Error diff --git a/src/star/star1d_class.cpp b/src/star/star1d_class.cpp index 7917392f..28a01a4a 100644 --- a/src/star/star1d_class.cpp +++ b/src/star/star1d_class.cpp @@ -56,7 +56,7 @@ int star1d::init(const char *input_file, const char *param_file, int argc, char } else { while((k=fp.get(arg, val))) { - if((i=check_arg(arg, val, &change_grid))) { + if((i=parse_arg(arg, val, &change_grid))) { printf("Syntax error in parameters file %s, line %d\n", param_file, k); if(i==2) { printf("Error: Argument to '%s' missing\n", arg); @@ -80,7 +80,7 @@ int star1d::init(const char *input_file, const char *param_file, int argc, char } else { while((k=fp.get(arg, val))) { - if((i=check_arg(arg, val, &change_grid))) { + if((i=parse_arg(arg, val, &change_grid))) { printf("Syntax error in parameters file %s, line %d\n", param_file, k); if(i==2) { printf("Error: Argument to '%s' missing\n", arg); @@ -101,7 +101,7 @@ int star1d::init(const char *input_file, const char *param_file, int argc, char if(err_code == -1) // Normally this can't happen because an Invalid Argument would already have been found in read_command_line ester_err("Invalid argument %s", arg); - err_code=check_arg(arg, val, &change_grid); + err_code=parse_arg(arg, val, &change_grid); if(err_code==2) { fprintf(stderr, "Error: Argument to '%s' missing\n", arg); exit(EXIT_FAILURE); @@ -165,7 +165,7 @@ int star1d::init(const char *input_file, const char *param_file, int argc, char return 0; } -int star1d::check_arg(char *arg, char *val, int *change_grid) { +int star1d::parse_arg(char *arg, char *val, int *change_grid) { if(!strcmp(arg, "nth")) { return 1; } else if(!strcmp(arg, "nex")) { @@ -175,7 +175,7 @@ int star1d::check_arg(char *arg, char *val, int *change_grid) { } else if(!strcmp(arg, "Ekman")) { return 1; } - return star2d::check_arg(arg, val, change_grid); + return star2d::parse_arg(arg, val, change_grid); } diff --git a/src/star/star2d_class.cpp b/src/star/star2d_class.cpp index 85a3c42d..d9c81936 100644 --- a/src/star/star2d_class.cpp +++ b/src/star/star2d_class.cpp @@ -531,7 +531,7 @@ int star2d::init(const char *input_file,const char *param_file,int argc,char *ar } else { while((k=fp.get(arg,val))) { - if((i=check_arg(arg,val,&change_grid))) { + if((i=parse_arg(arg,val,&change_grid))) { ester_err("Syntax error in parameters file %s, line %d\n",default_params,k); if(i==2) { ester_err("Error: Argument to '%s' missing\n",arg); @@ -555,7 +555,7 @@ int star2d::init(const char *input_file,const char *param_file,int argc,char *ar } else { while((k=fp.get(arg,val))) { - if((i=check_arg(arg,val,&change_grid))) { + if((i=parse_arg(arg,val,&change_grid))) { ester_err("Syntax error in parameters file %s, line %d\n", param_file, k); if(i==2) { @@ -577,7 +577,7 @@ int star2d::init(const char *input_file,const char *param_file,int argc,char *ar if(err_code == -1) // Normally this can't happen because an Invalid Argument would already have been found in read_command_line ester_err("Invalid argument %s", arg); - err_code=check_arg(arg,val,&change_grid); + err_code=parse_arg(arg,val,&change_grid); if(err_code==2) { ester_err("Error: Argument to '%s' missing\n",arg); return 1; @@ -667,7 +667,7 @@ void star2d::interp(remapper *red) { } extern bool dump_jac; -int star2d::check_arg(char *arg,char *val,int *change_grid) { +int star2d::parse_arg(char *arg,char *val,int *change_grid) { int err=0,i; char *tok; diff --git a/utils/starR/star1dR_class.cpp b/utils/starR/star1dR_class.cpp index 91962f8c..7edb3c7c 100644 --- a/utils/starR/star1dR_class.cpp +++ b/utils/starR/star1dR_class.cpp @@ -4,7 +4,7 @@ star1dR::star1dR() {Teff_obj=-1;} -int star1dR::check_arg(char *arg,char *val,int *change_grid) { +int star1dR::parse_arg(char *arg,char *val,int *change_grid) { if(!strcmp(arg,"R")) { if(val==NULL) return 2; @@ -23,7 +23,7 @@ int star1dR::check_arg(char *arg,char *val,int *change_grid) { return 1; } - return star1d::check_arg(arg,val,change_grid); + return star1d::parse_arg(arg,val,change_grid); } diff --git a/utils/starR/star2dR_class.cpp b/utils/starR/star2dR_class.cpp index d3c551ac..f5767312 100644 --- a/utils/starR/star2dR_class.cpp +++ b/utils/starR/star2dR_class.cpp @@ -4,7 +4,7 @@ star2dR::star2dR() {Teff_obj=-1;Re_obj=-1;} -int star2dR::check_arg(char *arg,char *val,int *change_grid) { +int star2dR::parse_arg(char *arg,char *val,int *change_grid) { if(!strcmp(arg,"R")||!strcmp(arg,"Rp")) { if(val==NULL) return 2; @@ -31,7 +31,7 @@ int star2dR::check_arg(char *arg,char *val,int *change_grid) { return 1; } - return star2d::check_arg(arg,val,change_grid); + return star2d::parse_arg(arg,val,change_grid); } solver *star2dR::init_solver(int nvar_add) { diff --git a/utils/starR/starR.h b/utils/starR/starR.h index 88000f1c..6a36c6ca 100644 --- a/utils/starR/starR.h +++ b/utils/starR/starR.h @@ -7,7 +7,7 @@ class star1dR: public star1d { public: star1dR(); double Teff_obj; - int check_arg(char *arg,char *val,int *change_grid); + int parse_arg(char *arg,char *val,int *change_grid); solver *init_solver(int nvar_add=0); void register_variables(solver *); double solve(solver *); @@ -22,7 +22,7 @@ class star2dR: public star2d { public: star2dR(); double Teff_obj,Re_obj; - int check_arg(char *arg,char *val,int *change_grid); + int parse_arg(char *arg,char *val,int *change_grid); solver *init_solver(int nvar_add=0); void register_variables(solver *); double solve(solver *); From 1f2f367b0ed1882e83478eb102ca0c71d43cf997 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Wed, 24 Jan 2024 23:54:08 +0100 Subject: [PATCH 13/15] Comment star*d.cpp main --- src/main/star1d.cpp | 4 +++- src/main/star2d.cpp | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/star1d.cpp b/src/main/star1d.cpp index 979e6c71..52322157 100644 --- a/src/main/star1d.cpp +++ b/src/main/star1d.cpp @@ -39,6 +39,7 @@ int main(int argc,char *argv[]) { // Create config object configuration config; + // Parse configuration file star.cfg and command line simulation parameters (not star ones) config.read_config(argc, argv); signal(SIGINT, sig_handler); @@ -48,7 +49,8 @@ int main(int argc,char *argv[]) { star1d A; solver *op; - if(A.init(config.input_file,config.param_file,argc,argv)) { + // Parse configutation file 1d_default.par and command line star parameters + if(A.init(config.input_file, config.param_file, argc, argv)) { ester_err("Could not initialize star"); return 1; } diff --git a/src/main/star2d.cpp b/src/main/star2d.cpp index 5c41056e..b876302f 100644 --- a/src/main/star2d.cpp +++ b/src/main/star2d.cpp @@ -23,7 +23,9 @@ int main(int argc,char *argv[]) { tiempo t; // figure *fig = NULL; - configuration config; + // Create config object + configuration config; + // Parse configuration file star.cfg and command line simulation parameters (not star ones) config.read_config(argc, argv); signal(SIGINT,sig_handler); @@ -40,7 +42,7 @@ int main(int argc,char *argv[]) { star2d A; solver *op; - if(A.init(config.input_file,config.param_file,argc,argv)) { + if(A.init(config.input_file, config.param_file, argc, argv)) { ester_err("Could not initialize star"); return 1; } From 1578bdba824d681c2155e9b92b255438398ee697 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Fri, 26 Jan 2024 21:28:31 +0100 Subject: [PATCH 14/15] Improve star1d::init messages and consistency --- src/star/star1d_class.cpp | 40 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/src/star/star1d_class.cpp b/src/star/star1d_class.cpp index 28a01a4a..934c12fe 100644 --- a/src/star/star1d_class.cpp +++ b/src/star/star1d_class.cpp @@ -48,23 +48,21 @@ int star1d::init(const char *input_file, const char *param_file, int argc, char printf("Error reading input file: %s\n", input_file); return 1; } - map0=map; + map0 = map; } else { if(fp.open(default_params)) { printf("Can't open default parameters file %s\n", default_params); return 1; } else { - while((k=fp.get(arg, val))) { - if((i=parse_arg(arg, val, &change_grid))) { + while((k = fp.get(arg, val))) { + if((i = parse_arg(arg, val, &change_grid))) { printf("Syntax error in parameters file %s, line %d\n", param_file, k); - if(i==2) { - printf("Error: Argument to '%s' missing\n", arg); - exit(EXIT_FAILURE); + if(i == 2) { + ester_err("%s: Argument to '%s' missing", default_params, arg); } - if(i==1) { - printf("Unknown parameter %s\n", arg); - exit(EXIT_FAILURE); + if(i == 1) { + ester_err("%s: Unknown parameter %s", default_params, arg); } } } @@ -79,16 +77,14 @@ int star1d::init(const char *input_file, const char *param_file, int argc, char return 1; } else { - while((k=fp.get(arg, val))) { - if((i=parse_arg(arg, val, &change_grid))) { + while((k = fp.get(arg, val))) { + if((i = parse_arg(arg, val, &change_grid))) { printf("Syntax error in parameters file %s, line %d\n", param_file, k); - if(i==2) { - printf("Error: Argument to '%s' missing\n", arg); - exit(EXIT_FAILURE); + if(i == 2) { + ester_err("%s: Argument to '%s' missing", param_file, arg); } - if(i==1) { - printf("Unknown parameter %s\n", arg); - exit(EXIT_FAILURE); + if(i == 1) { + ester_err("%s: Unknown parameter %s", param_file, arg); } } } @@ -102,13 +98,11 @@ int star1d::init(const char *input_file, const char *param_file, int argc, char ester_err("Invalid argument %s", arg); err_code=parse_arg(arg, val, &change_grid); - if(err_code==2) { - fprintf(stderr, "Error: Argument to '%s' missing\n", arg); - exit(EXIT_FAILURE); + if(err_code == 2) { + ester_err("Argument to '%s' missing", arg); } - if(err_code==1) { - fprintf(stderr, "Unknown parameter '%s'\n", arg); - exit(EXIT_FAILURE); + if(err_code == 1) { + ester_err("Unknown parameter %s", arg); } cmd.ack(arg, val); } From 432565a17634d4fb77ce66ab8a9cbb5ed59faf46 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Fri, 26 Jan 2024 21:31:58 +0100 Subject: [PATCH 15/15] Remove useless methods of configuration class --- src/include/read_config.h | 3 --- src/main/read_config.cpp | 16 +++------------- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/src/include/read_config.h b/src/include/read_config.h index af21cc18..41bbefe4 100644 --- a/src/include/read_config.h +++ b/src/include/read_config.h @@ -22,8 +22,5 @@ class configuration { void read_command_line(int argc, char *argv[]); int parse_arg(const char *arg,const char *val); - - void missing_argument(const char *arg); - void unknown_parameter(const char *arg); }; diff --git a/src/main/read_config.cpp b/src/main/read_config.cpp index d3805d4b..1c51fca4 100644 --- a/src/main/read_config.cpp +++ b/src/main/read_config.cpp @@ -53,9 +53,9 @@ void configuration::read_config_file() { if((err_code = parse_arg(arg, val))) { printf("Syntax error in configuration file %s, line %d\n", file, line); if(err_code == 2) - missing_argument(arg); + ester_err("%s: Argument to '%s' missing", file, arg); if(err_code == 1) - unknown_parameter(arg); + ester_err("%s: Unknown parameter '%s'", file, arg); } } fp.close(); @@ -75,7 +75,7 @@ void configuration::read_command_line(int argc, char *argv[]) { err_code = parse_arg(arg,val); // We ignore Error Code 1 (unknown parameter) on purpose: it might be interpreted by star1d::init later if(err_code == 2) - missing_argument(arg); + ester_err("Argument to '%s' missing", arg); if(err_code == 0) cmd.ack(arg,val); } @@ -160,13 +160,3 @@ int configuration::parse_arg(const char *arg,const char *val) { return err; } - - -void configuration::missing_argument(const char *arg) { - ester_err("Argument to '%s' missing", arg); -} - - -void configuration::unknown_parameter(const char *arg) { - ester_err("Unknown parameter '%s'", arg); -}