]> gcc.gnu.org Git - gcc.git/blame - libio/dbz/fake.c
Initial revision
[gcc.git] / libio / dbz / fake.c
CommitLineData
6599da04
JM
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
16static char RCSid[] = "$Header: /rel/cvsfiles/devo/libio/dbz/fake.c,v 1.2 1993/10/25 20:02:42 bothner Exp $";
17#endif
18
19int midonly = 0; /* just message ids, rest not realistic */
20int tag = 0; /* tag lines with random digit for later use */
21int expired = -1; /* percentage of lines to be expired */
22
23int debug = 0;
24char *progname;
25
26char *inname; /* filename for messages etc. */
27long lineno; /* line number for messages etc. */
28
29void doline();
30void addchars();
31void seed();
32
33/*
34 - main - parse arguments and handle options
35 */
36int
37main(argc, argv)
38int argc;
39char *argv[];
40{
41 int c;
42 int errflg = 0;
43 FILE *in;
44 struct stat statbuf;
45 extern int optind;
46 extern char *optarg;
47 void process();
48 register long no;
49 extern long atol();
50 char line[MAXSTR];
51
52 progname = argv[0];
53
54 while ((c = getopt(argc, argv, "ms:te:d")) != EOF)
55 switch (c) {
56 case 'm': /* message-ids only */
57 midonly = 1;
58 break;
59 case 's': /* seed */
60 seed(atol(optarg));
61 break;
62 case 't': /* tag lines with a random digit */
63 tag = 1;
64 break;
65 case 'e': /* percentage to be expired */
66 expired = atoi(optarg);
67 break;
68 case 'd': /* Debugging. */
69 debug++;
70 break;
71 case '?':
72 default:
73 errflg++;
74 break;
75 }
76 if (errflg || optind != argc - 1) {
77 fprintf(stderr, "usage: %s ", progname);
78 fprintf(stderr, "[-m] [-s seed] length\n");
79 exit(2);
80 }
81
82 for (no = atol(argv[optind]); no > 0; no--) {
83 doline(line);
84 puts(line);
85 }
86#ifdef DBZ_FINISH
87 DBZ_FINISH;
88#endif
89 exit(0);
90}
91
92/*
93 - doline - generate random history pseudo-line
94 */
95void
96doline(buf)
97char *buf;
98{
99 char tagch[2];
100
101 (void) strcpy(buf, "<");
102 addchars(buf, range(4, 20));
103 (void) strcat(buf, "@");
104 addchars(buf, range(8, 20));
105 if (midonly)
106 (void) strcat(buf, ">\tx");
107 else {
108 if (tag) {
109 tagch[0] = "1234567890"[range(0,9)];
110 tagch[1] = '\0';
111 (void) strcat(buf, ">\t");
112 (void) strcat(buf, tagch);
113 (void) strcat(buf, "00000000~-");
114 } else
115 (void) strcat(buf, ">\t1234567890~-");
116 }
117 if (range(1, 100) > expired) {
118 if (midonly)
119 (void) strcat(buf, "\tx");
120 else {
121 (void) strcat(buf, "\t");
122 addchars(buf, range(10, 30));
123 }
124 }
125}
126
127/*
128 - addchars - generate n random characters suitable for history file
129 */
130void
131addchars(buf, len)
132char *buf;
133int len;
134{
135 register int i;
136 register char *p = buf + strlen(buf);
137 static char vocab[] = "1234567890.abcde.fghij.klmno.pqrst.uvwxyz.\
1381234567890.ABCDE.FGHIJ.KLMNO.PQRST.UVWXYZ.1234567890.\
1391234567890.abcde.fghij.klmno.pqrst.uvwxyz.1234567890";
140
141 for (i = len; i > 0; i--)
142 *p++ = vocab[range(0, sizeof(vocab)-2)];
143 *p++ = '\0';
144}
This page took 0.045063 seconds and 5 git commands to generate.