int main(int argc, char *argv[]) { static char dflt_fmt[] = "%Y-%m-%d\n\0H:%M:%S %Z\n"; yuck_t argi[1U]; char *outfmt = dflt_fmt; char **infmt; size_t ninfmt; char **input; size_t ninput; int quietp; int res = 0; if (yuck_parse(argi, argc, argv)) { res = 1; goto out; } if (argi->format_arg) { outfmt = argi->format_arg; /* unescape sequences, maybe */ if (argi->backslash_escapes_flag) { dt_io_unescape(outfmt); } } else if (argi->time_flag) { outfmt[8] = ' '; outfmt[9] = '%'; } if (!argi->input_format_nargs) { infmt = argi->args; ninfmt = argi->nargs; input = NULL; ninput = 0; } else { infmt = argi->input_format_args; ninfmt = argi->input_format_nargs; input = argi->args; ninput = argi->nargs; } /* get quiet predicate */ quietp = argi->quiet_flag; /* get lines one by one, apply format string and print date/time */ if (ninput == 0) { /* read from stdin */ proc_lines((const char*const*)infmt, ninfmt, outfmt, quietp); } else { const char *const *cinfmt = (const char*const*)infmt; for (size_t i = 0; i < ninput; i++) { proc_line(input[i], cinfmt, ninfmt, outfmt, quietp); } } out: yuck_free(argi); return res; }
int main(int argc, char *argv[]) { yuck_t argi[1U]; char **fmt; size_t nfmt; dexpr_t root; oper_t o = OP_UNK; int res = 0; if (yuck_parse(argi, argc, argv)) { res = 1; goto out; } /* init and unescape sequences, maybe */ ckv_fmt = fmt = argi->input_format_args; ckv_nfmt = nfmt = argi->input_format_nargs; if (argi->backslash_escapes_flag) { for (size_t i = 0; i < nfmt; i++) { dt_io_unescape(fmt[i]); } } if (argi->base_arg) { struct dt_dt_s base = dt_strpdt(argi->base_arg, NULL, NULL); dt_set_base(base); } if (argi->eq_flag) { o = OP_EQ; } else if (argi->ne_flag) { o = OP_NE; } else if (argi->lt_flag || argi->ot_flag) { o = OP_LT; } else if (argi->le_flag) { o = OP_LE; } else if (argi->gt_flag || argi->nt_flag) { o = OP_GT; } else if (argi->ge_flag) { o = OP_GE; } /* parse the expression */ if (argi->nargs == 0U || dexpr_parse(&root, argi->args[0U], strlen(argi->args[0U])) < 0) { res = 1; error("Error: need an expression to grep"); goto out; } /* fixup o, default is OP_EQ */ if (o != OP_UNK && root->type != DEX_VAL) { res = 1; error("\ long opt operators (--lt, --gt, ...) cannot be used in conjunction \n\ with complex expressions"); goto out; } else if (o != OP_UNK) {
int main(int argc, char *argv[]) { static yuck_t argi[1U]; int rc = EXIT_SUCCESS; if (yuck_parse(argi, argc, argv) < 0) { rc = EXIT_FAILURE; goto out; } if (argi->interval_arg) { intv = strtotvu(argi->interval_arg, NULL); if (!intv.t) { errno = 0, serror("\ Error: cannot read interval argument, must be positive."); rc = EXIT_FAILURE; goto out; } else if (!intv.u) {
int main(int argc, char *argv[]) { yuck_t argp[1U]; yuck_parse(argp, argc, argv); if (argp->extra_flag) { puts("BLING BLING!"); } switch (argp->cmd) { case XMPL_CMD_NONE: default: puts("no command :("); break; } yuck_free(argp); return 0; }
int mux_main(mux_ctx_t ctx, int argc, char *argv[]) { static struct mux_ctx_s __ctx[1U]; static struct sumux_opt_s __opts[1U]; yuck_t argi[1U]; int rc = 0; if (yuck_parse(argi, argc, argv)) { rc = 1; goto out; } else if (UNLIKELY(ctx == NULL)) { ctx = __ctx; ctx->opts = __opts; } if (argi->human_readable_flag) { /* wipe off the stuff ute-mux prepared for us */ const char *fn; if (ctx->wrr != NULL && ctx->opts->outfile == NULL && (fn = ute_fn(ctx->wrr)) != NULL) { unlink(fn); ute_close(ctx->wrr); ctx->wrr = NULL; } } if (argi->all_flag) { ctx->opts->flags |= SUMUX_FLAG_ALL_TICKS; } for (size_t j = 0U; j < argi->nargs; j++) { const char *f = argi->args[j]; int fd; /* open the infile ... */ if (f[0] == '-' && f[1] == '\0') { ctx->infd = fd = STDIN_FILENO; ctx->infn = NULL; ctx->badfd = STDERR_FILENO; } else if ((fd = open(f, 0)) < 0) { ctx->infd = -1; error("cannot open file '%s'", f); /* just try the next bloke */ continue; } else if (argi->guess_flag && guess(ctx, f) < 0) { error("cannot guess info from '%s'", f); /* well try to do the actual muxing anyway */ ; } else { /* huuuuge success */ ctx->infd = fd; ctx->infn = f; ctx->badfd = STDERR_FILENO; } /* ... and now mux it */ if (argi->human_readable_flag) { dump_l1bi5(ctx); } else { mux(ctx); } /* close the infile */ close(fd); } out: yuck_free(argi); return rc; }
int main(int argc, char *argv[]) { static char dflt_fmt[] = "%Y-%m-%d\n\0H:%M:%S %Z\n"; yuck_t argi[1U]; char *outfmt = dflt_fmt; char **infmt; size_t ninfmt; char **input; size_t ninput; int quietp; int res = 0; if (yuck_parse(argi, argc, argv)) { res = 1; goto out; } if (argi->format_arg) { outfmt = argi->format_arg; /* unescape sequences, maybe */ if (argi->backslash_escapes_flag) { dt_io_unescape(outfmt); } } else if (argi->time_flag) { outfmt[8] = ' '; outfmt[9] = '%'; } if (!argi->input_format_nargs) { infmt = argi->args; ninfmt = argi->nargs; input = NULL; ninput = 0; } else { infmt = argi->input_format_args; ninfmt = argi->input_format_nargs; input = argi->args; ninput = argi->nargs; } /* get quiet predicate */ quietp = argi->quiet_flag; /* set locale specific/independent behaviour */ with (const char *loc) { if (!argi->locale_flag) { loc = "C"; /* we need to null out TZ for UTC */ setenv("TZ", "", 1); } else { loc = ""; } /* actually set our findings in stone */ setlocale(LC_TIME, loc); tzset(); } /* get lines one by one, apply format string and print date/time */ if (ninput == 0) { /* read from stdin */ proc_lines((const char*const*)infmt, ninfmt, outfmt, quietp); } else { const char *const *cinfmt = (const char*const*)infmt; for (size_t i = 0; i < ninput; i++) { proc_line(input[i], cinfmt, ninfmt, outfmt, quietp); } } out: yuck_free(argi); return res; }
int main(int argc, char *argv[]) { yuck_t argi[1U]; struct dt_dt_s d; struct __strpdtdur_st_s st = __strpdtdur_st_initialiser(); const char *ofmt; char **fmt; size_t nfmt; int rc = 0; bool dt_given_p = false; zif_t fromz = NULL; zif_t z = NULL; zif_t hackz = NULL; if (yuck_parse(argi, argc, argv)) { rc = 1; goto out; } else if (argi->nargs == 0) { error("Error: DATE or DURATION must be specified\n"); yuck_auto_help(argi); rc = 1; goto out; } /* init and unescape sequences, maybe */ ofmt = argi->format_arg; fmt = argi->input_format_args; nfmt = argi->input_format_nargs; if (argi->backslash_escapes_flag) { dt_io_unescape(argi->format_arg); for (size_t i = 0; i < nfmt; i++) { dt_io_unescape(fmt[i]); } } /* try and read the from and to time zones */ if (argi->from_zone_arg) { fromz = dt_io_zone(argi->from_zone_arg); } if (argi->zone_arg) { z = dt_io_zone(argi->zone_arg); } if (argi->base_arg) { struct dt_dt_s base = dt_strpdt(argi->base_arg, NULL, NULL); dt_set_base(base); } /* sanity checks, decide whether we're a mass date adder * or a mass duration adder, or both, a date and durations are * present on the command line */ with (const char *inp = argi->args[0U]) { /* date parsing needed postponing as we need to find out * about the durations */ if (!dt_unk_p(dt_io_strpdt(inp, fmt, nfmt, NULL))) { dt_given_p = true; } } /* check first arg, if it's a date the rest of the arguments are * durations, if not, dates must be read from stdin */ for (size_t i = dt_given_p; i < argi->nargs; i++) { const char *inp = argi->args[i]; do { if (dt_io_strpdtdur(&st, inp) < 0) { serror("Error: \ cannot parse duration string `%s'", st.istr); rc = 1; goto dur_out; } } while (__strpdtdur_more_p(&st)); } /* check if there's only d durations */ hackz = durs_only_d_p(st.durs, st.ndurs) ? NULL : fromz; /* read the first argument again in light of a completely parsed * duration sequence */ if (dt_given_p) { const char *inp = argi->args[0U]; if (dt_unk_p(d = dt_io_strpdt(inp, fmt, nfmt, hackz))) { error("\ Error: cannot interpret date/time string `%s'", inp); rc = 1; goto dur_out; } } /* start the actual work */ if (dt_given_p && st.ndurs) { if (!dt_unk_p(d = dadd_add(d, st.durs, st.ndurs))) { if (UNLIKELY(d.fix) && !argi->quiet_flag) { rc = 2; } if (hackz == NULL && fromz != NULL) { /* fixup zone */ d = dtz_forgetz(d, fromz); } dt_io_write(d, ofmt, z, '\n'); } else { rc = 1; } } else if (st.ndurs) { /* read dates from stdin */ struct grep_atom_s __nstk[16], *needle = __nstk; size_t nneedle = countof(__nstk); struct grep_atom_soa_s ndlsoa; struct mass_add_clo_s clo[1]; void *pctx; /* no threads reading this stream */ __io_setlocking_bycaller(stdout); /* lest we overflow the stack */ if (nfmt >= nneedle) { /* round to the nearest 8-multiple */ nneedle = (nfmt | 7) + 1; needle = calloc(nneedle, sizeof(*needle)); } /* and now build the needle */ ndlsoa = build_needle(needle, nneedle, fmt, nfmt); /* using the prchunk reader now */ if ((pctx = init_prchunk(STDIN_FILENO)) == NULL) { serror("could not open stdin"); goto ndl_free; } /* build the clo and then loop */ clo->pctx = pctx; clo->gra = &ndlsoa; clo->st = st; clo->fromz = fromz; clo->hackz = hackz; clo->z = z; clo->ofmt = ofmt; clo->sed_mode_p = argi->sed_mode_flag; clo->quietp = argi->quiet_flag; while (prchunk_fill(pctx) >= 0) { rc |= mass_add_dur(clo); } /* get rid of resources */ free_prchunk(pctx); ndl_free: if (needle != __nstk) { free(needle); } } else { /* mass-adding durations to reference date */ struct mass_add_clo_s clo[1]; void *pctx; /* no threads reading this stream */ __io_setlocking_bycaller(stdout); /* using the prchunk reader now */ if ((pctx = init_prchunk(STDIN_FILENO)) == NULL) { serror("could not open stdin"); goto dur_out; } /* build the clo and then loop */ clo->pctx = pctx; clo->rd = d; clo->fromz = fromz; clo->hackz = hackz; clo->z = z; clo->ofmt = ofmt; clo->sed_mode_p = argi->sed_mode_flag; clo->quietp = argi->quiet_flag; while (prchunk_fill(pctx) >= 0) { rc |= mass_add_d(clo); } /* get rid of resources */ free_prchunk(pctx); } dur_out: /* free the strpdur status */ __strpdtdur_free(&st); dt_io_clear_zones(); out: yuck_free(argi); return rc; }
int main(int argc, char *argv[]) { static struct dt_dtdur_s ite_p1; yuck_t argi[1U]; struct dt_dt_s tmp; char **ifmt; size_t nifmt; char *ofmt; dt_dttyp_t tgttyp; int rc = 0; struct dseq_clo_s clo = { .ite = &ite_p1, .nite = 1, .altite = NULL, .naltite = 0, .ss = 0, .dir = 0, .flags = 0, }; if (yuck_parse(argi, argc, argv)) { rc = 1; goto out; } /* assign ofmt/ifmt */ ofmt = argi->format_arg; if (argi->backslash_escapes_flag) { dt_io_unescape(ofmt); } nifmt = argi->input_format_nargs; ifmt = argi->input_format_args; if (argi->from_locale_arg) { setilocale(argi->from_locale_arg); } if (argi->locale_arg) { setflocale(argi->locale_arg); } if (argi->base_arg) { struct dt_dt_s base = dt_strpdt(argi->base_arg, NULL, NULL); dt_set_base(base); } for (size_t i = 0; i < argi->skip_nargs; i++) { clo.ss = set_skip(clo.ss, argi->skip_args[i]); } if (argi->alt_inc_arg) { struct __strpdtdur_st_s st = __strpdtdur_st_initialiser(); do { if (dt_io_strpdtdur(&st, argi->alt_inc_arg) < 0) { if (!argi->quiet_flag) { error("Error: \ cannot parse duration string `%s'", argi->alt_inc_arg); } rc = 1; goto out; } } while (__strpdtdur_more_p(&st)); /* assign values */ clo.altite = st.durs; clo.naltite = st.ndurs; } switch (argi->nargs) { struct dt_dt_s fst, lst; default: yuck_auto_help(argi); rc = 1; goto out; case 2: lst = dt_io_strpdt(argi->args[1U], ifmt, nifmt, NULL); if (dt_unk_p(lst)) { if (!argi->quiet_flag) { dt_io_warn_strpdt(argi->args[1U]); } rc = 1; goto out; } else if (UNLIKELY(lst.fix) && !argi->quiet_flag) { rc = 2; } /* fallthrough */ case 1: fst = dt_io_strpdt(argi->args[0U], ifmt, nifmt, NULL); if (dt_unk_p(fst)) { if (!argi->quiet_flag) { dt_io_warn_strpdt(argi->args[0U]); } rc = 1; goto out; } else if (UNLIKELY(fst.fix) && !argi->quiet_flag) { rc = 2; } /* check the input arguments and do the sane thing now * if it's all dates, use DURD iterator * if it's all times, use DURS/DURM/DURH iterators * if one of them is a dt, promote the other */ if (dt_sandwich_only_d_p(fst)) { /* emulates old dseq(1) */ if (argi->nargs == 1U) { lst.d = dt_date(fst.d.typ); dt_make_d_only(&lst, fst.d.typ); } clo.ite->d = dt_make_ddur(DT_DURD, 1); } else if (dt_sandwich_only_t_p(fst)) { /* emulates old tseq(1) */ if (argi->nargs == 1U) { lst.t = dt_time(); dt_make_t_only(&lst, DT_HMS); } } else if (dt_sandwich_p(fst)) { if (argi->nargs == 1U) { lst = dt_datetime(fst.typ); dt_make_sandwich(&lst, fst.d.typ, DT_HMS); } clo.ite->d = dt_make_ddur(DT_DURD, 1); } else { error("\ don't know how to handle single argument case"); rc = 1; goto out; } goto make_compat; case 3: { struct __strpdtdur_st_s st = __strpdtdur_st_initialiser(); /* get lower bound */ fst = dt_io_strpdt(argi->args[0U], ifmt, nifmt, NULL); if (dt_unk_p(fst)) { if (!argi->quiet_flag) { dt_io_warn_strpdt(argi->args[0U]); } rc = 1; goto out; } else if (UNLIKELY(fst.fix) && !argi->quiet_flag) { rc = 2; } /* get increment */ do { if (dt_io_strpdtdur(&st, argi->args[1U]) < 0) { error("Error: \ cannot parse duration string `%s'", argi->args[1U]); rc = 1; goto out; } } while (__strpdtdur_more_p(&st)); /* assign values */ clo.ite = st.durs; clo.nite = st.ndurs; clo.flags |= CLO_FL_FREE_ITE; /* get upper bound */ lst = dt_io_strpdt(argi->args[2U], ifmt, nifmt, NULL); if (dt_unk_p(lst)) { if (!argi->quiet_flag) { dt_io_warn_strpdt(argi->args[2U]); } rc = 1; goto out; } else if (UNLIKELY(lst.fix) && !argi->quiet_flag) { rc = 2; } goto make_compat; } make_compat: if (LIKELY(fst.typ == lst.typ)) { clo.fst = fst; clo.lst = lst; } else { clo.fst = fst; clo.lst = dt_dtconv(fst.typ, lst); } break; } /* promote the args maybe */ if ((dt_sandwich_only_d_p(clo.fst) && dt_sandwich_only_t_p(clo.lst)) || (dt_sandwich_only_t_p(clo.fst) && dt_sandwich_only_d_p(clo.lst))) { error("\ cannot mix dates and times as arguments"); rc = 1; goto out; } else if (dt_sandwich_only_d_p(clo.fst) && dt_sandwich_p(clo.lst)) {
int main(int argc, char *argv[]) { yuck_t argi[1U]; struct dt_dt_s d; struct __strpdtdur_st_s st = __strpdtdur_st_initialiser(); char *inp; const char *ofmt; char **fmt; size_t nfmt; int rc = 0; bool dt_given_p = false; bool nextp = false; zif_t fromz = NULL; zif_t z = NULL; zif_t hackz = NULL; if (yuck_parse(argi, argc, argv)) { rc = 1; goto out; } else if (argi->nargs == 0U) { error("Error: DATE or DURATION must be specified\n"); yuck_auto_help(argi); rc = 1; goto out; } /* init and unescape sequences, maybe */ ofmt = argi->format_arg; fmt = argi->input_format_args; nfmt = argi->input_format_nargs; if (argi->backslash_escapes_flag) { dt_io_unescape(argi->format_arg); for (size_t i = 0; i < nfmt; i++) { dt_io_unescape(fmt[i]); } } /* try and read the from and to time zones */ if (argi->from_zone_arg) { fromz = dt_io_zone(argi->from_zone_arg); } if (argi->zone_arg) { z = dt_io_zone(argi->zone_arg); } if (argi->next_flag) { nextp = true; } if (argi->base_arg) { struct dt_dt_s base = dt_strpdt(argi->base_arg, NULL, NULL); dt_set_base(base); } /* check first arg, if it's a date the rest of the arguments are * durations, if not, dates must be read from stdin */ for (size_t i = 0U; i < argi->nargs; i++) { inp = argi->args[i]; do { if (dt_io_strpdtrnd(&st, inp) < 0) { if (UNLIKELY(i == 0)) { /* that's ok, must be a date then */ dt_given_p = true; } else { serror("Error: \ cannot parse duration/rounding string `%s'", st.istr); } } } while (__strpdtdur_more_p(&st)); } /* check if there's only d durations */ hackz = durs_only_d_p(st.durs, st.ndurs) ? NULL : fromz; /* sanity checks */ if (dt_given_p) { /* date parsing needed postponing as we need to find out * about the durations */ inp = argi->args[0U]; if (dt_unk_p(d = dt_io_strpdt(inp, fmt, nfmt, hackz))) { error("Error: \ cannot interpret date/time string `%s'", argi->args[0U]); rc = 1; goto out; } } else if (st.ndurs == 0) {