static int cmd_ro(int argc, char** argv) { int err = 0; unsigned long n,o; err = s2ul(argv[0],&n); if(err) goto ret; err = s2ul(argv[1],&o); if(err) goto ret; g_p = ggen_generate_random_orders(rng,n,o); if(g_p == NULL) err = 1; ret: return err; }
static int cmd_gnm(int argc, char** argv) { int err = 0; unsigned long n,m; err = s2ul(argv[0],&n); if(err) goto ret; err = s2ul(argv[1],&m); if(err) goto ret; g_p = ggen_generate_erdos_gnm(rng,n,m); if(g_p == NULL) err = 1; ret: return err; }
static int cmd_fifo(int argc, char** argv) { int err = 0; unsigned long n,i,o; err = s2ul(argv[0],&n); if(err) goto ret; err = s2ul(argv[1],&o); if(err) goto ret; err = s2ul(argv[2],&i); if(err) goto ret; g_p = ggen_generate_fifo(rng,n,o,i); if(g_p == NULL) err = 1; ret: return err; }
static int cmd_poisson2d(int argc, char** argv) { int err = 0; unsigned long n,iter; err = s2ul(argv[0],&n); if(err) goto ret; err = s2ul(argv[1],&iter); if(err) goto ret; g_p = ggen_generate_poisson2d(n, iter); if(g_p == NULL) { error("ggen error: %s\n",ggen_error_strerror()); err = 1; } ret: return err; }
static int cmd_forkjoin(int argc, char** argv) { int err = 0; unsigned long phases,diameter; err = s2ul(argv[0],&phases); if(err) goto ret; err = s2ul(argv[1],&diameter); if(err) goto ret; g_p = ggen_generate_forkjoin(phases, diameter); if(g_p == NULL) { error("ggen error: %s\n",ggen_error_strerror()); err = 1; } ret: return err; }
static int cmd_fibonacci(int argc, char** argv) { int err = 0; unsigned long n,cutoff; err = s2ul(argv[0],&n); if(err) goto ret; err = s2ul(argv[1],&cutoff); if(err) goto ret; g_p = ggen_generate_fibonacci(n, cutoff); if(g_p == NULL) { error("ggen error: %s\n",ggen_error_strerror()); err = 1; } ret: return err; }
static int cmd_lbl(int argc, char** argv) { int err = 0; unsigned long n,l; double p; err = s2ul(argv[0],&n); if(err) goto ret; err = s2ul(argv[1],&l); if(err) goto ret; err = s2d(argv[2],&p); if(err) goto ret; g_p = ggen_generate_erdos_lbl(rng,n,p,l); if(g_p == NULL) err = 1; ret: return err; }
static int cmd_strassen(int argc, char** argv) { int err = 0; unsigned long size, depth, cutoff; err = s2ul(argv[0],&size); if(err) goto ret; err = s2ul(argv[1],&depth); if(err) goto ret; err = s2ul(argv[2],&cutoff); if(err) goto ret; g_p = ggen_generate_strassen(size, depth, cutoff); if(g_p == NULL) { error("ggen error: %s\n",ggen_error_strerror()); err = 1; } ret: return err; }
static int cmd_sparselu(int argc, char** argv) { int err = 0; unsigned long size; err = s2ul(argv[0],&size); if(err) goto ret; g_p = ggen_generate_sparselu(size); if(g_p == NULL) { error("ggen error: %s\n",ggen_error_strerror()); err = 1; } ret: return err; }
static int cmd_cholesky(int argc, char** argv) { int err = 0; unsigned long n; err = s2ul(argv[0],&n); if(err) goto ret; g_p = ggen_generate_cholesky(n); if(g_p == NULL) { error("ggen error: %s\n",ggen_error_strerror()); err = 1; } ret: return err; }
static int cmd_gnp(int argc, char** argv) { int err = 0; unsigned long number; double prob; err = s2ul(argv[0],&number); if(err) goto ret; err = s2d(argv[1],&prob); if(err) goto ret; g_p = ggen_generate_erdos_gnp(rng,number,prob); if(g_p == NULL) err = 1; ret: return err; }
int main(int argc,char** argv) { int c; int option_index = 0; int status = 0; // parse options while(1) { c = getopt_long(argc, argv, short_opts,long_options, &option_index); if(c == -1) break; switch(c) { case 0: break; case 'r': rngfname = optarg; break; case 'o': outfname = optarg; break; case 'i': infname = optarg; break; case 'n': name = optarg; break; case 'h': ask_help = 1; break; case 'V': ask_version =1; break; case 'f': logfname = optarg; break; case 'l': logval = optarg; break; default: fprintf(stderr,"ggen bug: someone forgot how to write a switch\n"); exit(EXIT_FAILURE); case '?': fprintf(stderr,"ggen bug: getopt failed miserably\n"); exit(EXIT_FAILURE); } } // forget the parsed part of argv argc -= optind; argv = &(argv[optind]); if(ask_full_help) { print_full_help(); exit(EXIT_SUCCESS); } if(ask_version) { print_version(); exit(EXIT_SUCCESS); } if(argc == 0) { print_help(general_help); exit(EXIT_FAILURE); } // initialize logging if(logfname != NULL) { logfile = fopen(logfname,"w"); if(!logfile) { fprintf(stderr,"failed to open file %s for logging, using stderr instead\n",logfname); logfile = stderr; logfname = NULL; } } else logfile = stderr; status = log_init(logfile,"ggen"); if(status) { fprintf(stderr,"error during log initialization\n"); exit(EXIT_FAILURE); } // now set level according to options unsigned long l; if(logval != NULL) { status = s2ul(logval,&l); if(status) { warning("Cannot convert log level option to int\n"); l = LOG_NORMAL; } else if(l < LOG_QUIET || l > LOG_DEBUG) { warning("Incorrect log level value, must be between %d and %d\n",LOG_QUIET,LOG_DEBUG); l = LOG_NORMAL; } } else l = LOG_NORMAL; log_filter_above((enum log_level)l); normal("Logging facility initialized\n"); // initialize igraph attributes for all commands igraph_i_set_attribute_table(&igraph_cattribute_table); // find the command to launch info("Searching for command %s\n",argv[0]); for(int i = 0; i < ARRAY_SIZE(cmd_table); i++) { struct first_lvl_cmd *c = cmd_table+i; if(!strcmp(c->name,argv[0])) { argc--; argv++; status = handle_first_lvl(argc,argv,c); goto end; } } status = EXIT_FAILURE; error("Command not found\n"); end: // close logging normal("Closing log\n"); if(logfname) { fclose(logfile); } return status; }