|
|
1.1 ! root 1: /* ! 2: * fake - make up random lines resembling history-file entries, reproducibly ! 3: * ! 4: * -Log- ! 5: */ ! 6: ! 7: #include <stdio.h> ! 8: #include <sys/types.h> ! 9: #include <sys/stat.h> ! 10: #include <string.h> ! 11: ! 12: #define MAXSTR 500 /* For sizing strings -- DON'T use BUFSIZ! */ ! 13: #define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0) ! 14: ! 15: #ifndef lint ! 16: static char RCSid[] = "$Header: /rel/cvsfiles/devo/libio/dbz/fake.c,v 1.2 1993/10/25 20:02:42 bothner Exp $"; ! 17: #endif ! 18: ! 19: int midonly = 0; /* just message ids, rest not realistic */ ! 20: int tag = 0; /* tag lines with random digit for later use */ ! 21: int expired = -1; /* percentage of lines to be expired */ ! 22: ! 23: int debug = 0; ! 24: char *progname; ! 25: ! 26: char *inname; /* filename for messages etc. */ ! 27: long lineno; /* line number for messages etc. */ ! 28: ! 29: void doline(); ! 30: void addchars(); ! 31: void seed(); ! 32: ! 33: /* ! 34: - main - parse arguments and handle options ! 35: */ ! 36: main(argc, argv) ! 37: int argc; ! 38: char *argv[]; ! 39: { ! 40: int c; ! 41: int errflg = 0; ! 42: FILE *in; ! 43: struct stat statbuf; ! 44: extern int optind; ! 45: extern char *optarg; ! 46: void process(); ! 47: register long no; ! 48: extern long atol(); ! 49: char line[MAXSTR]; ! 50: ! 51: progname = argv[0]; ! 52: ! 53: while ((c = getopt(argc, argv, "ms:te:d")) != EOF) ! 54: switch (c) { ! 55: case 'm': /* message-ids only */ ! 56: midonly = 1; ! 57: break; ! 58: case 's': /* seed */ ! 59: seed(atol(optarg)); ! 60: break; ! 61: case 't': /* tag lines with a random digit */ ! 62: tag = 1; ! 63: break; ! 64: case 'e': /* percentage to be expired */ ! 65: expired = atoi(optarg); ! 66: break; ! 67: case 'd': /* Debugging. */ ! 68: debug++; ! 69: break; ! 70: case '?': ! 71: default: ! 72: errflg++; ! 73: break; ! 74: } ! 75: if (errflg || optind != argc - 1) { ! 76: fprintf(stderr, "usage: %s ", progname); ! 77: fprintf(stderr, "[-m] [-s seed] length\n"); ! 78: exit(2); ! 79: } ! 80: ! 81: for (no = atol(argv[optind]); no > 0; no--) { ! 82: doline(line); ! 83: puts(line); ! 84: } ! 85: #ifdef DBZ_FINISH ! 86: DBZ_FINISH; ! 87: #endif ! 88: exit(0); ! 89: } ! 90: ! 91: /* ! 92: - doline - generate random history pseudo-line ! 93: */ ! 94: void ! 95: doline(buf) ! 96: char *buf; ! 97: { ! 98: char tagch[2]; ! 99: ! 100: (void) strcpy(buf, "<"); ! 101: addchars(buf, range(4, 20)); ! 102: (void) strcat(buf, "@"); ! 103: addchars(buf, range(8, 20)); ! 104: if (midonly) ! 105: (void) strcat(buf, ">\tx"); ! 106: else { ! 107: if (tag) { ! 108: tagch[0] = "1234567890"[range(0,9)]; ! 109: tagch[1] = '\0'; ! 110: (void) strcat(buf, ">\t"); ! 111: (void) strcat(buf, tagch); ! 112: (void) strcat(buf, "00000000~-"); ! 113: } else ! 114: (void) strcat(buf, ">\t1234567890~-"); ! 115: } ! 116: if (range(1, 100) > expired) { ! 117: if (midonly) ! 118: (void) strcat(buf, "\tx"); ! 119: else { ! 120: (void) strcat(buf, "\t"); ! 121: addchars(buf, range(10, 30)); ! 122: } ! 123: } ! 124: } ! 125: ! 126: /* ! 127: - addchars - generate n random characters suitable for history file ! 128: */ ! 129: void ! 130: addchars(buf, len) ! 131: char *buf; ! 132: int len; ! 133: { ! 134: register int i; ! 135: register char *p = buf + strlen(buf); ! 136: static char vocab[] = "1234567890.abcde.fghij.klmno.pqrst.uvwxyz.\ ! 137: 1234567890.ABCDE.FGHIJ.KLMNO.PQRST.UVWXYZ.1234567890.\ ! 138: 1234567890.abcde.fghij.klmno.pqrst.uvwxyz.1234567890"; ! 139: ! 140: for (i = len; i > 0; i--) ! 141: *p++ = vocab[range(0, sizeof(vocab)-2)]; ! 142: *p++ = '\0'; ! 143: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.