summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/stats.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/SNIP/stats.c')
-rwxr-xr-xreference/C/CONTRIB/SNIP/stats.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/stats.c b/reference/C/CONTRIB/SNIP/stats.c
new file mode 100755
index 0000000..c17f8d6
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/stats.c
@@ -0,0 +1,53 @@
+/****************************************************************/
+/* */
+/* Collect file statistics */
+/* */
+/* Public domain demo program for analyzing encrypted */
+/* files. By: Bob Stout */
+/* */
+/****************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <assert.h>
+
+main(int argc, char *argv[])
+{
+ int i, ch, hist = 0;
+ long n = 0L;
+ double mean = 0., stdev = 0., ftmp;
+ static unsigned bins[256];
+ FILE *infile;
+
+ assert(infile = fopen(argv[1], "rb"));
+ while (!feof(infile))
+ {
+ if (EOF == (ch = fgetc(infile)))
+ break;
+ bins[ch] += 1;
+ ++n;
+ }
+ fclose(infile);
+ for (i = 0; i < 256; ++i)
+ {
+ mean += (double)(bins[i]);
+ if (bins[i])
+ ++hist;
+ }
+ mean /= 256.;
+ for (i = 0; i < 256; ++i)
+ {
+ ftmp = (double)(bins[i]) - mean;
+ stdev += (ftmp * ftmp);
+ }
+ ftmp = stdev / 255.;
+ stdev = sqrt(ftmp);
+ printf("%ld Characters were read from %s\n"
+ "There are an average of %f occurances of each character\n"
+ "%d Characters out of 256 possible were used\n"
+ "The standard deviation is %f\n"
+ "The coefficient of variation is %f%%\n",
+ n, argv[1], mean, hist, stdev, (100. * stdev) / mean);
+ return EXIT_SUCCESS;
+}