static int offline(void) { /* offline mode */ char *line = NULL; size_t llen = 0UL; ssize_t nrd; cnt_t *m; size_t nm; /* estimate */ if (trnd.u != UNIT_SECS) { nimpl: errno = 0, serror("not implemented"); return -1; } switch (intv.u) { case UNIT_DAYS: intv.t *= 24U * 60U * 60U; intv.u = UNIT_SECS; case UNIT_SECS: break; default: goto nimpl; } nm = intv.t / trnd.t; if (UNLIKELY((m = calloc(nm, sizeof(*m))) == NULL)) { return -1; } while ((nrd = getline(&line, &llen, stdin)) > 0) { tv_t t; if (UNLIKELY((t = strtotv(line, NULL)) == NATV)) { /* got metronome c**k-up */ continue; } /* round to seconds */ t /= NSECS; /* move to monday */ t -= 4U * 24U * 60U * 60U; /* align ... */ t %= intv.t; /* ... and round */ t /= trnd.t; /* count */ m[t]++; } for (size_t i = 0U; i < nm; i++) { printf("%zu\t%zu\n", i, m[i]); } /* finalise our findings */ free(line); /* and finalise the counter array */ free(m); return 0; }
t_addr pdq3_parse_addr (DEVICE *dptr, const char *cptr, const char **tptr) { t_addr seg, off; if (cptr[0] == '#') { off = strtotv(cptr+1, tptr, dptr->aradix); return MAKE_BADDR(reg_segb,off); } else if (cptr[0] == '$') { off = strtotv(cptr+1, tptr, dptr->aradix); return MAKE_WADDR(off); } else { char gbuf[CBUFSIZE]; get_glyph (cptr, gbuf, 0); if (!strncmp(gbuf,"SEGB",4)) { seg = reg_segb; *tptr = cptr+4; } else seg = strtotv(cptr, tptr, dptr->aradix); if (*tptr[0] == ':') { cptr = *tptr + 1; off = strtotv(cptr, tptr, dptr->aradix); return MAKE_BADDR(seg,off); } else return MAKE_WADDR(seg); } }
static int push_beef(char *ln, size_t UNUSED(lz)) { char *on; /* metronome is up first */ if (UNLIKELY(strtotv(ln, &on) == NATV)) { return -1; } /* instrument name, don't hash him */ if (UNLIKELY((on = strchr(++on, '\t')) == NULL)) { return -1; } beg = ++on - ln; /* snarf quotes */ with (const char *str = on) { q.b = strtopx(str, &on); q.b = on > str ? q.b : NANPX; }