chiark / gitweb /
README with final notes
[version-charset-test.git] / generate.c
index 861d2061e31484067c7738c668deecaa2aa3a71b..c9c8ceee4e1e1000bdbcb77c8667d83778b52999 100644 (file)
@@ -1,6 +1,8 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
+#include <assert.h>
 
 static const char charset[]=
   "0123456789"
@@ -12,10 +14,16 @@ static const char charset[]=
 
 static char sofar[ML+1];
 
+static int denomix, denom=1;
+
 static void gen(char *inbuf, int len) {
   if (!len) {
     *inbuf = 0;
-    puts(sofar);
+    if (!denomix) {
+      puts(sofar);
+    }
+    denomix += (denom-1);
+    denomix %= denom;
     return;
   }
   const char *cp;
@@ -25,13 +33,35 @@ static void gen(char *inbuf, int len) {
   }
 }    
 
-int main(void) {
+int main(int argc, char **argv) {
   int len;
+  int minlen=0, maxlen=ML;
+  char *slash;
+
+  if (argc>=2 && (slash = strchr(argv[1], '/'))) {
+      denomix = atoi(argv[1]);
+      denom = atoi(slash+1);
+      argv++; argc--;
+  }
+
+  if (argc==3) {
+    minlen = atoi(argv[1]);
+    maxlen = atoi(argv[2]);
+  } else if (argc==2) {
+    maxlen = atoi(argv[1]);
+  } else if (argc==1) {
+  } else {
+    abort();
+  }
+
+  assert(maxlen <= ML);
 
-  for (len=0; len<ML; len++) {
+  for (len=minlen; len<=maxlen; len++) {
     fprintf(stderr,"********** generating len=%d **********\n",len);
     gen(sofar, len);
   }
   if (ferror(stdout) ||
       fflush(stdout)) { perror("stdout"); abort(); }
+  fputs("generate done\n",stderr);
+  return 0;
 }