home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Shareware - Software Farm 2
/
wosw_2.zip
/
wosw_2
/
CPROG
/
PDSRT321.ZIP
/
BLDTST.C
next >
Wrap
C/C++ Source or Header
|
1991-07-25
|
3KB
|
136 lines
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <mem.h>
#include "queue.h"
void Usage (void);
struct FieldEntry {
int Begin;
int Len;
};
void
main (int argc, char *argv[]) {
FILE *F1;
char FileName[65];
char *String;
char Temp[100];
char *Ptr, *p1, *p2;
long Count = 0;
long j;
int i, k;
int Random = 0;
int RecLen = 10;
QUE_DEF Fields;
QUE_ENTRY *t;
struct FieldEntry *f;
char Alphas[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
if (argc < 2) Usage();
strcpy(FileName, "test.dat");
InitQueue(&Fields);
for (i=1; i < argc; i++) {
if (argv[i][0] != '-') continue;
switch ( tolower(argv[i][1]) ) {
case 'r':
Random = 1;
break;
case 'l':
if ( !isdigit(argv[i][2]) ) {
fprintf(stderr, "The '-l' option requires a length.\n");
exit(1);
}
if ( (RecLen = atoi(&argv[i][2])) == 0 ) {
fprintf(stderr, "Invalid length: %s\n", argv[i]);
exit(1);
}
break;
case 'f':
strcpy(FileName, &argv[i][2]);
break;
default:
fprintf(stderr, "Invalid option: %s\n", argv[i]);
Usage();
}
}
for (i=1; i < argc; i++) {
if (argv[i][0] == '-') continue;
p1 = argv[i];
if ( (Count == 0) && (strspn(p1, "0123456789") == strlen(p1)) ) {
Count = strtol(argv[i], &Ptr, 10);
if (*Ptr != '\0') {
fprintf(stderr, "Invalid count: %s\n", argv[i]);
exit(1);
}
}
else {
p2 = &p1[strspn(p1, "0123456789")];
if ( (f = malloc(sizeof(struct FieldEntry))) == NULL) {
fprintf(stderr, "Insufficient memory for field entry.\n");
exit(1);
}
f->Begin = atoi(p1) - 1;
if (*p2 == ':') f->Len = atoi(++p2);
else if (*p2 == '-') f->Len = atoi(++p2) - f->Begin;
else {
fprintf(stderr, "Invalid Field specification: %s\n", argv[i]);
exit(2);
}
Enque(&Fields, f);
}
}
if ( (String = malloc(RecLen + 1)) == NULL ) {
fprintf(stderr, "Insufficient memory!\n");
exit(1);
}
memset(String, '-', RecLen);
String[RecLen] = '\0';
if ( (F1 = fopen(FileName, "w")) == NULL ) {
fprintf(stderr, "I can't create output file: %s", FileName);
perror("");
exit(1);
}
for (j=0; j < Count; j++) {
if (Fields.Count == 0) {
if (Random) sprintf(String, "%09d", rand() );
else sprintf(String, "%09.9ld", j);
if (RecLen > 9) String[9] = '-';
}
else for (k=0, t=Fields.Head; t != NULL; t = t->Next, k++) {
f = t->Body;
if (k & 0x01) {
if (Random) sprintf(Temp, "%0*d", f->Len, rand() );
else sprintf(Temp, "%0*.*ld", f->Len, f->Len, j);
strncpy(&String[f->Begin], Temp, f->Len);
}
else {
if (Random) setmem(Temp, f->Len, Alphas[rand() % 26]);
else setmem(Temp, f->Len, Alphas[j % 26]);
strncpy(&String[f->Begin], Temp, f->Len);
}
}
if ( (j) && ( (j % 1000) == 0) ) printf(".");
fprintf(F1, "%s\n", String);
}
fclose(F1);
}
void
Usage (void) {
fprintf(stderr, "USAGE: bldtst [-r] [-f file_name] count\n");
exit(1);
}