My Project
Loading...
Searching...
No Matches
feOpt.cc File Reference
#include <string.h>
#include "kernel/mod2.h"
#include "factory/factory.h"
#include "feOpt.h"
#include "misc/options.h"
#include "misc/sirandom.h"
#include "fehelp.h"
#include <flint/flint.h>
#include "omalloc/omalloc.h"
#include "resources/feResource.h"
#include "kernel/oswrapper/feread.h"
#include "kernel/oswrapper/timer.h"
#include "ipshell.h"
#include "tok.h"
#include "sdb.h"
#include "cntrlc.h"
#include <errno.h>

Go to the source code of this file.

Macros

#define FE_OPT_STRUCTURE
 

Functions

feOptIndex feGetOptIndex (const char *name)
 
feOptIndex feGetOptIndex (int optc)
 
static const char * feOptAction (feOptIndex opt)
 
const char * feSetOptValue (feOptIndex opt, char *optarg)
 
const char * feSetOptValue (feOptIndex opt, int optarg)
 
void fePrintOptValues ()
 
void feOptHelp (const char *name)
 
void feOptDumpVersionTuple (void)
 

Variables

const char SHORT_OPTS_STRING [] = "bdhpqstvxec:r:u:"
 

Macro Definition Documentation

◆ FE_OPT_STRUCTURE

#define FE_OPT_STRUCTURE

Definition at line 15 of file feOpt.cc.

Function Documentation

◆ feGetOptIndex() [1/2]

feOptIndex feGetOptIndex ( const char * name)

Definition at line 104 of file feOpt.cc.

105{
106 int opt = 0;
107
108 while (opt != (int) FE_OPT_UNDEF)
109 {
110 if (strcmp(feOptSpec[opt].name, name) == 0)
111 return (feOptIndex) opt;
112 opt = opt + 1;
113 }
114 return FE_OPT_UNDEF;
115}
feOptIndex
Definition feOptGen.h:15
@ FE_OPT_UNDEF
Definition feOptGen.h:15
EXTERN_VAR struct fe_option feOptSpec[]
Definition feOpt.h:17
int name
New type name for int.

◆ feGetOptIndex() [2/2]

feOptIndex feGetOptIndex ( int optc)

Definition at line 117 of file feOpt.cc.

118{
119 int opt = 0;
120
121 if (optc == LONG_OPTION_RETURN) return FE_OPT_UNDEF;
122
123 while (opt != (int) FE_OPT_UNDEF)
124 {
125 if (feOptSpec[opt].val == optc)
126 return (feOptIndex) opt;
127 opt = opt + 1;
128 }
129 return FE_OPT_UNDEF;
130}
#define LONG_OPTION_RETURN
Definition feOptTab.h:4

◆ feOptAction()

static const char * feOptAction ( feOptIndex opt)
static

Definition at line 202 of file feOpt.cc.

203{
204 // do some special actions
205 switch(opt)
206 {
207 case FE_OPT_BATCH:
208 if (feOptSpec[FE_OPT_BATCH].value)
210 return NULL;
211
212 case FE_OPT_HELP:
214 return NULL;
215
216 case FE_OPT_PROFILE:
217 traceit=1024;
218 return NULL;
219
220 case FE_OPT_QUIET:
221 if (feOptSpec[FE_OPT_QUIET].value)
223 else
225 return NULL;
226
227 case FE_OPT_NO_TTY:
228 if (feOptSpec[FE_OPT_NO_TTY].value)
230 return NULL;
231
232 case FE_OPT_SDB:
233 #ifdef HAVE_SDB
234 if (feOptSpec[FE_OPT_SDB].value)
235 sdb_flags = 1;
236 else
237 sdb_flags = 0;
238 #endif
239 return NULL;
240
241 case FE_OPT_VERSION:
242 {
243 char *s=versionString();
244 printf("%s",s);
245 omFree(s);
246 return NULL;
247 }
248
249 case FE_OPT_ECHO:
250 si_echo = (int) ((long)(feOptSpec[FE_OPT_ECHO].value));
252 return "argument of option is not in valid range 0..9";
253 return NULL;
254
255 case FE_OPT_RANDOM:
256 siRandomStart = (unsigned int) ((unsigned long)
257 (feOptSpec[FE_OPT_RANDOM].value));
260 return NULL;
261
262 case FE_OPT_EMACS:
263 if (feOptSpec[FE_OPT_EMACS].value)
264 {
265 // print EmacsDir and InfoFile so that Emacs
266 // mode can pcik it up
267 Warn("EmacsDir: %s", (feResource('e' /*"EmacsDir"*/) != NULL ?
268 feResource('e' /*"EmacsDir"*/) : ""));
269 Warn("InfoFile: %s", (feResource('i' /*"InfoFile"*/) != NULL ?
270 feResource('i' /*"InfoFile"*/) : ""));
271 }
272 return NULL;
273
274 case FE_OPT_NO_WARN:
275 if (feOptSpec[FE_OPT_NO_WARN].value)
276 feWarn = FALSE;
277 else
278 feWarn = TRUE;
279 return NULL;
280
281 case FE_OPT_NO_OUT:
282 if (feOptSpec[FE_OPT_NO_OUT].value)
283 feOut = FALSE;
284 else
285 feOut = TRUE;
286 return NULL;
287
288 case FE_OPT_MIN_TIME:
289 {
290 double mintime = atof((char*) feOptSpec[FE_OPT_MIN_TIME].value);
291 if (mintime <= 0) return "invalid float argument";
293 return NULL;
294 }
295
296 case FE_OPT_BROWSER:
297 feHelpBrowser((char*) feOptSpec[FE_OPT_BROWSER].value, 1);
298
299 case FE_OPT_TICKS_PER_SEC:
300 {
301 int ticks = (int) ((long)(feOptSpec[FE_OPT_TICKS_PER_SEC].value));
302 if (ticks <= 0)
303 return "integer argument must be larger than 0";
304 SetTimerResolution(ticks);
305 return NULL;
306 }
307
308 case FE_OPT_DUMP_VERSIONTUPLE:
309 {
311 return NULL;
312 }
313
314 case FE_OPT_FLINT_THREADS:
315 {
316 long nthreads = (long)feOptSpec[FE_OPT_FLINT_THREADS].value;
317 #ifdef HAVE_FLINT
318 #if __FLINT_RELEASE >= 20503
319 nthreads = FLINT_MAX(nthreads, WORD(1));
320 flint_set_num_threads(nthreads);
321 int * cpu_affinities = new int[nthreads];
322 for (slong i = 0; i < nthreads; i++)
323 cpu_affinities[i] = (int)i;
324 flint_set_thread_affinity(cpu_affinities, nthreads);
325 delete[] cpu_affinities;
326 return NULL;
327 #endif
328 #endif
329 #ifdef HAVE_NTL
330 #if NTL_MAJOR_VERSION>=10
331 #ifdef NTL_THREAD_BOOST
332 SetNumThreads(nthreads);
333 #endif
334 #endif
335 #endif
336 }
337
338 default:
339 return NULL;
340 }
341}
#define TRUE
Definition auxiliary.h:101
#define FALSE
Definition auxiliary.h:97
int i
Definition cfEzgcd.cc:132
void factoryseed(int s)
random seed initializer
Definition cf_random.cc:189
VAR int siRandomStart
Definition cntrlc.cc:99
#define Warn
Definition emacs.cc:77
#define slong
const CanonicalForm int s
Definition facAbsFact.cc:51
void feOptDumpVersionTuple(void)
Definition feOpt.cc:430
void feOptHelp(const char *name)
Definition feOpt.cc:379
VAR char * feArgv0
Definition feResource.cc:19
static char * feResource(feResourceConfig config, int warn)
VAR int si_echo
Definition febase.cc:35
const char * feHelpBrowser(char *which, int warn)
Definition fehelp.cc:249
char * fe_fgets_dummy(const char *, char *, int)
Definition feread.cc:455
char *(* fe_fgets_stdin)(const char *pr, char *s, int size)
Definition feread.cc:32
char * fe_fgets(const char *pr, char *s, int size)
Definition feread.cc:309
char * versionString()
Definition misc_ip.cc:772
#define omFree(addr)
#define NULL
Definition omList.c:12
VAR unsigned si_opt_2
Definition options.c:6
#define Sy_bit(x)
Definition options.h:31
#define V_LOAD_LIB
Definition options.h:47
VAR BOOLEAN feWarn
Definition reporter.cc:49
VAR BOOLEAN feOut
Definition reporter.cc:50
EXTERN_VAR int traceit
Definition reporter.h:24
VAR int sdb_flags
Definition sdb.cc:31
VAR int siSeed
Definition sirandom.c:30
void SetMinDisplayTime(double mtime)
Definition timer.cc:27
STATIC_VAR double mintime
Definition timer.cc:20
void SetTimerResolution(int res)
Definition timer.cc:22

◆ feOptDumpVersionTuple()

void feOptDumpVersionTuple ( void )

Definition at line 430 of file feOpt.cc.

431{
432 printf("%s\n",VERSION);
433}
#define VERSION

◆ feOptHelp()

void feOptHelp ( const char * name)

Definition at line 379 of file feOpt.cc.

380{
381 int i = 0;
382 char tmp[60];
383#if defined(ESINGULAR)
384 printf("ESingular starts up Singular within emacs;\n");
385#elif defined(TSINGULAR)
386 printf("TSingular starts up Singular within a terminal window;\n");
387#endif
388 printf("Singular is a Computer Algebra System (CAS) for Polynomial Computations.\n");
389 printf("Usage: %s [options] [file1 [file2 ...]]\n", name);
390 printf("Options:\n");
391
392 while (feOptSpec[i].name != 0)
393 {
394 if (feOptSpec[i].help != NULL
395#ifdef SING_NDEBUG
396 && *(feOptSpec[i].help) != '/'
397#endif
398 )
399 {
400 if (feOptSpec[i].has_arg > 0)
401 {
402 if (feOptSpec[i].has_arg > 1)
403 snprintf(tmp,60, "%s[=%s]", feOptSpec[i].name, feOptSpec[i].arg_name);
404 else
405 snprintf(tmp,60, "%s=%s", feOptSpec[i].name, feOptSpec[i].arg_name);
406
407 printf(" %c%c --%-20s %s\n",
408 (feOptSpec[i].val != LONG_OPTION_RETURN ? '-' : ' '),
409 (feOptSpec[i].val != LONG_OPTION_RETURN ? feOptSpec[i].val : ' '),
410 tmp,
411 feOptSpec[i].help);
412 }
413 else
414 {
415 printf(" %c%c --%-20s %s\n",
416 (feOptSpec[i].val != LONG_OPTION_RETURN ? '-' : ' '),
417 (feOptSpec[i].val != LONG_OPTION_RETURN ? feOptSpec[i].val : ' '),
419 feOptSpec[i].help);
420 }
421 }
422 i++;
423 }
424
425 printf("\nFor more information, type `help;' from within Singular or visit\n");
426 printf("https://www.singular.uni-kl.de or consult the\n");
427 printf("Singular manual (available as on-line info or html manual).\n");
428}
#define SING_NDEBUG
#define help
Definition libparse.cc:1230

◆ fePrintOptValues()

void fePrintOptValues ( )

Definition at line 344 of file feOpt.cc.

345{
346 int i = 0;
347
348 while (feOptSpec[i].name != 0)
349 {
350 if (feOptSpec[i].help != NULL && feOptSpec[i].type != feOptUntyped
351#ifndef SING_NDEBUG
352 && *(feOptSpec[i].help) != '/'
353#endif
354 )
355 {
356 if (feOptSpec[i].type == feOptString)
357 {
358 if (feOptSpec[i].value == NULL)
359 {
360 Print("// --%-15s\n", feOptSpec[i].name);
361 }
362 else
363 {
364 Print("// --%-15s \"%s\"\n", feOptSpec[i].name, (char*) feOptSpec[i].value);
365 }
366 }
367 else
368 {
369 Print("// --%-15s %d\n", feOptSpec[i].name, (int)(long)feOptSpec[i].value);
370 }
371 }
372 i++;
373 }
374}
#define Print
Definition emacs.cc:80
@ feOptUntyped
Definition fegetopt.h:77
@ feOptString
Definition fegetopt.h:77

◆ feSetOptValue() [1/2]

const char * feSetOptValue ( feOptIndex opt,
char * optarg )

Definition at line 154 of file feOpt.cc.

155{
156 if (opt == FE_OPT_UNDEF) return "option undefined";
157
158 if (feOptSpec[opt].type != feOptUntyped)
159 {
160 if (feOptSpec[opt].type != feOptString)
161 {
162 if (optarg != NULL)
163 {
164 errno = 0;
165 feOptSpec[opt].value = (void*) strtol(optarg, NULL, 10);
166 if (errno) return "invalid integer argument";
167 }
168 else
169 {
170 feOptSpec[opt].value = (void*) 0;
171 }
172 }
173 else
174 {
175 assume(feOptSpec[opt].type == feOptString);
176 if (feOptSpec[opt].set && feOptSpec[opt].value != NULL)
177 omFree(feOptSpec[opt].value);
178 if (optarg != NULL)
179 feOptSpec[opt].value = omStrDup(optarg);
180 else
181 feOptSpec[opt].value = NULL;
182 feOptSpec[opt].set = 1;
183 }
184 }
185 return feOptAction(opt);
186}
static const char * feOptAction(feOptIndex opt)
Definition feOpt.cc:202
#define assume(x)
Definition mod2.h:389
#define omStrDup(s)

◆ feSetOptValue() [2/2]

const char * feSetOptValue ( feOptIndex opt,
int optarg )

Definition at line 188 of file feOpt.cc.

189{
190 if (opt == FE_OPT_UNDEF) return "option undefined";
191
192 if (feOptSpec[opt].type != feOptUntyped)
193 {
194 if (feOptSpec[opt].type == feOptString)
195 return "option value needs to be an integer";
196
197 feOptSpec[opt].value = (void*)(long) optarg;
198 }
199 return feOptAction(opt);
200}

Variable Documentation

◆ SHORT_OPTS_STRING

const char SHORT_OPTS_STRING[] = "bdhpqstvxec:r:u:"

Definition at line 29 of file feOpt.cc.