Dash:
[t2-trunk.git] / misc / archive / ccat.c
blob6f35ee41bf55f5b3cdf70565ff718eaca31e70da
1 /* ccat (counting cat)
3 * --- T2-COPYRIGHT-NOTE-BEGIN ---
4 * This copyright note is auto-generated by ./scripts/Create-CopyPatch.
5 *
6 * T2 SDE: misc/archive/ccat.c
7 * Copyright (C) 2004 - 2005 The T2 SDE Project
8 * Copyright (C) 1998 - 2003 ROCK Linux Project
9 *
10 * More information can be found in the files COPYING and README.
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; version 2 of the License. A copy of the
15 * GNU General Public License can be found in the file COPYING.
16 * --- T2-COPYRIGHT-NOTE-END ---
19 #define VERSION "2000-06-15"
21 #include <stdio.h>
22 #include <string.h>
23 #include <errno.h>
25 int main(int argc) {
26 char s1[]="................................"
27 "................................";
28 char buf[10240];
29 int c,rc1,rc2;
31 if (argc != 1) {
32 fprintf(stderr,
33 "ccat (counting cat) Version " VERSION "\n"
34 "Copyright (C) 2000 Clifford Wolf, Thomas Baumgartner\n"
35 "\n"
36 " This program is free software; you can redistribute it and/or modify\n"
37 " it under the terms of the GNU General Public License as published by\n"
38 " the Free Software Foundation; either version 2 of the License, or\n"
39 " (at your option) any later version.\n"
40 "\n"
41 " This program is distributed in the hope that it will be useful,\n"
42 " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
43 " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
44 " GNU General Public License for more details.\n"
45 "\n"
46 " You should have received a copy of the GNU General Public License\n"
47 " along with this program; if not, write to the Free Software\n"
48 " Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
49 "\n"
50 "Usage: `ccat' reads from its stdin and writes to stdout. No command line\n"
51 " arguments ar allowed. A status bar is printed to stderr.\n\n"
52 ); fflush(stderr);
53 return 1;
56 c=1024; rc1=rc2=0;
57 while (1) {
58 if (c%1024 == 0) {
59 fprintf(stderr,"\r%6d0 MB [%s]\r%6d0 MB [",
60 c/1024,s1,c/1024); fflush(stderr);
62 if ( (rc1=read(0,buf,10240)) <= 0 ) { rc2=rc1; break; }
63 if (c%16 == 0) {
64 fprintf(stderr,"X"); fflush(stderr);
66 if ( (rc2=write(1,buf,rc1)) != rc1 ) break;
67 c++;
70 if (rc1 == -1) {
71 fprintf(stderr,"\nRead ERROR: %s\n",strerror(errno));
72 } else if (rc2 == -1) {
73 fprintf(stderr,"\nWrite ERROR: %s\n",strerror(errno));
74 } else if (rc2 != rc1) {
75 fprintf(stderr,"\nWrite ERROR: Only %d of %d bytes "
76 "in the last block has been written.\n",rc2,rc1);
77 } else
78 fprintf(stderr,"\n");
80 return 0;