/* _main_getopt(): extract option map from command line. */ static u3_noun _main_getopt(c3_i argc, c3_c** argv) { c3_i ch_i; c3_w arg_w; u3_Host.ops_u.abo = c3n; u3_Host.ops_u.bat = c3n; u3_Host.ops_u.gab = c3n; u3_Host.ops_u.loh = c3n; u3_Host.ops_u.dem = c3n; u3_Host.ops_u.fog = c3n; u3_Host.ops_u.fak = c3n; u3_Host.ops_u.tex = c3n; u3_Host.ops_u.pro = c3n; u3_Host.ops_u.dry = c3n; u3_Host.ops_u.veb = c3n; u3_Host.ops_u.qui = c3n; u3_Host.ops_u.nuu = c3n; u3_Host.ops_u.mem = c3n; u3_Host.ops_u.rep = c3n; u3_Host.ops_u.kno_w = DefaultKernel; while ( (ch_i=getopt(argc, argv,"I:w:t:f:k:l:n:p:r:LabcdgqvxFMPDXR")) != -1 ) { switch ( ch_i ) { case 'M': { u3_Host.ops_u.mem = c3y; break; } case 'I': { u3_Host.ops_u.imp_c = _main_presig(optarg); break; } case 'w': { u3_Host.ops_u.who_c = _main_presig(optarg); u3_Host.ops_u.nuu = c3y; break; } case 't': { u3_Host.ops_u.tic_c = _main_presig(optarg); break; } case 'x': { u3_Host.ops_u.tex = c3y; break; } case 'X': { u3_Host.ops_u.fog = c3y; break; } case 'f': { if ( c3n == _main_readw(optarg, 100, &u3_Host.ops_u.fuz_w) ) { return c3n; } break; } case 'k': { if ( c3n == _main_readw(optarg, 256, &u3_Host.ops_u.kno_w) ) { return c3n; } break; } case 'l': { if ( c3n == _main_readw(optarg, 65536, &arg_w) ) { return c3n; } else u3_Host.ops_u.rop_s = arg_w; break; } case 'n': { u3_Host.ops_u.nam_c = strdup(optarg); break; } case 'p': { if ( c3n == _main_readw(optarg, 65536, &arg_w) ) { return c3n; } else u3_Host.ops_u.por_s = arg_w; break; } case 'r': { u3_Host.ops_u.raf_c = strdup(optarg); break; } case 'R': { u3_Host.ops_u.rep = c3y; return c3y; } case 'L': { u3_Host.ops_u.loh = c3y; break; } case 'F': { u3_Host.ops_u.loh = c3y; u3_Host.ops_u.fak = c3y; break; } case 'a': { u3_Host.ops_u.abo = c3y; break; } case 'b': { u3_Host.ops_u.bat = c3y; break; } case 'c': { u3_Host.ops_u.nuu = c3y; break; } case 'd': { u3_Host.ops_u.dem = c3y; break; } case 'g': { u3_Host.ops_u.gab = c3y; break; } case 'P': { u3_Host.ops_u.pro = c3y; break; } case 'D': { u3_Host.ops_u.dry = c3y; break; } case 'q': { u3_Host.ops_u.qui = c3y; break; } case 'v': { u3_Host.ops_u.veb = c3y; break; } case '?': default: { return c3n; } } } if ( u3_Host.ops_u.rop_s == 0 && u3_Host.ops_u.raf_c != 0 ) { fprintf(stderr, "The -r flag requires -l.\n"); return c3n; } if ( u3_Host.ops_u.tic_c == 0 && u3_Host.ops_u.who_c != 0 ) { c3_c tic_c[29]; printf("your ticket: ~"); scanf("%28s",tic_c); u3_Host.ops_u.tic_c = _main_presig(tic_c); } if ( c3y == u3_Host.ops_u.bat ) { u3_Host.ops_u.dem = c3y; u3_Host.ops_u.nuu = c3y; } if ( u3_Host.ops_u.nam_c == 0 ) { u3_Host.ops_u.nam_c = getenv("HOSTNAME"); if ( u3_Host.ops_u.nam_c == 0 ) { c3_w len_w = sysconf(_SC_HOST_NAME_MAX) + 1; u3_Host.ops_u.nam_c = hostbuf; if ( 0 != gethostname(u3_Host.ops_u.nam_c, len_w) ) { perror("gethostname"); exit(1); } } } if ( argc != (optind + 1) && u3_Host.ops_u.who_c != 0 ) { u3_Host.dir_c = strdup(1 + u3_Host.ops_u.who_c); } if ( argc != (optind + 1) ) { return u3_Host.dir_c ? c3y : c3n; } else { { c3_c* ash_c; if ( (ash_c = strrchr(argv[optind], '/')) && (ash_c[1] == 0) ) { *ash_c = 0; } } u3_Host.dir_c = strdup(argv[optind]); return c3y; } }
/* _main_getopt(): extract option map from command line. */ static u2_bean _main_getopt(c3_i argc, c3_c** argv) { c3_i ch_i; c3_w arg_w; u2_Host.ops_u.abo = u2_no; u2_Host.ops_u.bat = u2_no; u2_Host.ops_u.gab = u2_no; u2_Host.ops_u.loh = u2_no; u2_Host.ops_u.dem = u2_no; u2_Host.ops_u.fog = u2_no; u2_Host.ops_u.fak = u2_no; u2_Host.ops_u.pro = u2_no; u2_Host.ops_u.veb = u2_yes; u2_Host.ops_u.nuu = u2_no; u2_Host.ops_u.mem = u2_no; u2_Host.ops_u.kno_w = DefaultKernel; u2_Host.ops_u.kaf_c = (c3_c*) NULL; while ( (ch_i = getopt(argc, argv, "I:A:K:X:f:k:l:n:p:r:LabcdgqvFM")) != -1 ) { switch ( ch_i ) { case 'A': { u2_Host.ops_u.adm_c = strdup(optarg); if ((strcmp(optarg, "edmp") != 0) && (strcmp(optarg, "etok") != 0) && (strcmp(optarg, "ktoe") != 0) && (strcmp(optarg, "kcnf") != 0) ) { fprintf(stderr, "illegal -A subcommand: %s\n", optarg); return u2_no; } break; } case 'M': { u2_Host.ops_u.mem = u2_yes; break; } case 'I': { u2_Host.ops_u.imp_c = strdup(optarg); break; } case 'X': { if ( 0 != strcmp("wtf", optarg) ) { fprintf(stderr, "problem with -X\n"); return u2_no; } else u2_Host.ops_u.fog = u2_yes; break; } case 'f': { if ( u2_no == _main_readw(optarg, 100, &u2_Host.ops_u.fuz_w) ) { fprintf(stderr, "problem with -f\n"); return u2_no; } break; } case 'k': { if ( u2_no == _main_readw(optarg, 256, &u2_Host.ops_u.kno_w) ) { fprintf(stderr, "problem with -k\n"); return u2_no; } break; } case 'n': { u2_Host.ops_u.nam_c = strdup(optarg); break; } case 'p': { if ( u2_no == _main_readw(optarg, 65536, &arg_w) ) { fprintf(stderr, "problem with -p\n"); return u2_no; } else u2_Host.ops_u.por_s = arg_w; break; } case 'L': { u2_Host.ops_u.loh = u2_yes; break; } case 'F': { u2_Host.ops_u.loh = u2_yes; u2_Host.ops_u.fak = u2_yes; break; } case 'K': { u2_Host.ops_u.kaf_c = strdup(optarg); break; } case 'a': { u2_Host.ops_u.abo = u2_yes; break; } case 'b': { u2_Host.ops_u.bat = u2_yes; break; } case 'c': { u2_Host.ops_u.nuu = u2_yes; break; } case 'd': { u2_Host.ops_u.dem = u2_yes; break; } case 'g': { u2_Host.ops_u.gab = u2_yes; break; } case 'q': { u2_Host.ops_u.veb = u2_no; break; } case 'v': { u2_Host.ops_u.veb = u2_yes; break; } case '?': default: { return u2_no; } } } if ( u2_yes == u2_Host.ops_u.bat ) { u2_Host.ops_u.dem = u2_yes; u2_Host.ops_u.nuu = u2_yes; } if ( u2_Host.ops_u.nam_c == 0 ) { u2_Host.ops_u.nam_c = getenv("HOSTNAME"); if ( u2_Host.ops_u.nam_c == 0 ) { c3_w len_w = sysconf(_SC_HOST_NAME_MAX) + 1; u2_Host.ops_u.nam_c = c3_malloc(len_w); if ( 0 != gethostname(u2_Host.ops_u.nam_c, len_w) ) { perror("gethostname"); exit(1); } } } // N.B. this used to be something like 'mypier', which specified computer name // As of July 2014, computer name = ship name = name of directory in ~/urb where pier lives // // find shipname // if ( argc != (optind + 1) ) { fprintf(stderr, "You must specify your ship name on the command line.\n"); exit(1); } if (argv[optind][0] != '~'){ fprintf(stderr, "You must specify your ship name (not pier). Names begin with '~'.\n"); exit(1); } u2_Host.cpu_c = strdup(argv[optind]); return u2_yes; }