17aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley/* count.c - Progress indicator from stdin to stdout
2fece5cb6d796119eccb1ae0074e5b3aaccbb74eeRob Landley *
32896480c4918f2accccb8301bec457a7bff7377eRob Landley * Copyright 2002 Rob Landley <rob@landley.net>
42896480c4918f2accccb8301bec457a7bff7377eRob Landley
555928b1e0a08d84a5cbc50020f0a8c1024f5b6ceRob LandleyUSE_COUNT(NEWTOY(count, NULL, TOYFLAG_USR|TOYFLAG_BIN))
655928b1e0a08d84a5cbc50020f0a8c1024f5b6ceRob Landley
72896480c4918f2accccb8301bec457a7bff7377eRob Landleyconfig COUNT
87aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  bool "count"
97aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  default y
107aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  help
117aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley    usage: count
122896480c4918f2accccb8301bec457a7bff7377eRob Landley
137aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley    Copy stdin to stdout, displaying simple progress indicator to stderr.
142896480c4918f2accccb8301bec457a7bff7377eRob Landley*/
15c555a0ca46e75097596274bf5e634127015aa144Rob Landley
16c555a0ca46e75097596274bf5e634127015aa144Rob Landley#include "toys.h"
17c555a0ca46e75097596274bf5e634127015aa144Rob Landley
18efda21ca931766eed6cfc49d1b2122c53827d9fcRob Landleyvoid count_main(void)
19c555a0ca46e75097596274bf5e634127015aa144Rob Landley{
207aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  uint64_t size = 0;
217aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  int len;
227aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  char buf[32];
23c555a0ca46e75097596274bf5e634127015aa144Rob Landley
247aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  for (;;) {
257aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley    len = xread(0, toybuf, sizeof(toybuf));
267aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley    if (!len) break;
277aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley    size += len;
287aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley    xwrite(1, toybuf, len);
297aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley    xwrite(2, buf, sprintf(buf, "%"PRIu64" bytes\r", size));
307aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  }
317aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  xwrite(2, "\n", 1);
32c555a0ca46e75097596274bf5e634127015aa144Rob Landley}
33