00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "program.h"
00023 #include "stdlib.h"
00024 #include "stdarg.h"
00025
00026 static Program dummy, *main = 0;
00027
00028 static void init_main(void) {
00029 if (main == 0) {
00030 main = dummy.main();
00031 if (main == 0)
00032 Error("getparam.C: main could not be initialized");
00033 }
00034 }
00035
00036 int hasvalue(string key)
00037 {
00038 init_main();
00039 string val = main->get(key);
00040 if (val == 0 || *val == 0) return FALSE;
00041 return TRUE;
00042 }
00043
00044 int isdefault(string key)
00045 {
00046 init_main();
00047 return main->count(key);
00048 }
00049
00050 int getflag(string key)
00051 {
00052 init_main();
00053 char *sp = main->get(key);
00054 if (strchr("tTyY1",*sp)) return 1;
00055 if (strchr("fFnN0",*sp)) return 0;
00056 Error("Syntax error for flag %s=%s",key,sp);
00057 return 0;
00058 }
00059
00060 string getparam(string key)
00061 {
00062 init_main();
00063 return main->get(key);
00064 }
00065
00066 int getiparam(string key)
00067 {
00068 init_main();
00069
00070 return atoi(main->get(key));
00071 }
00072
00073 real getrparam(string key)
00074 {
00075 init_main();
00076
00077 return atof(main->get(key));
00078 }
00079
00080 int get_argc(void)
00081 {
00082 init_main();
00083 return main->get_argc();
00084 }
00085
00086 char **get_argv(void)
00087 {
00088 init_main();
00089 return main->get_argv();
00090 }
00091
00092
00093
00094 void Error(char *fmt ...)
00095 {
00096 va_list ap;
00097
00098 init_main();
00099
00100 fprintf(stderr,"### Fatal error [%s]: ",main->get("argv0"));
00101
00102 va_start(ap, fmt);
00103 vfprintf(stderr, fmt, ap);
00104
00105 if (fmt[strlen(fmt)-1] != '\n')
00106 fprintf(stderr,"\n");
00107 fflush(stderr);
00108 va_end(ap);
00109
00110
00111 int e = main->dec_error();
00112 if (e > 0) return;
00113
00114 if (main->get_debug()>5) abort();
00115 exit(-1);
00116 }
00117
00118
00119 void Warning(char *fmt ...)
00120 {
00121 va_list ap;
00122
00123 init_main();
00124
00125 fprintf(stderr,"### Warning [%s]: ",main->get("argv0"));
00126
00127 va_start(ap, fmt);
00128 vfprintf(stderr, fmt, ap);
00129 if (fmt[strlen(fmt)-1] != '\n')
00130 fprintf(stderr,"\n");
00131 fflush(stderr);
00132
00133 #if 0
00134
00135 for (;;) {
00136 char *p = va_arg(ap, char *);
00137 if (p == 0) break;
00138 cerr << p ;
00139 }
00140 cerr << endl;
00141 #endif
00142 va_end(ap);
00143
00144 }
00145
00146 void Dprintf(int level, char *fmt ...)
00147 {
00148 va_list ap;
00149
00150 init_main();
00151
00152 if (level > main->get_debug()) return;
00153
00154 va_start(ap, fmt);
00155 vfprintf(stderr, fmt, ap);
00156 fflush(stderr);
00157 va_end(ap);
00158
00159 }
00160
00161
00162
00163