better parsing of type, and add on "gray" type

This commit is contained in:
tth 2019-09-29 00:11:18 +02:00
parent bacf6ecd94
commit adc08ce777
1 changed files with 38 additions and 12 deletions

View File

@ -9,19 +9,37 @@
int verbosity;
/* --------------------------------------------------------------------- */
#define T_BLACK 0
#define T_DRAND48 1
#define T_RGB_0 2
#define T_BLACK 1
#define T_DRAND48 2
#define T_GRAY 3
typedef struct {
int code;
char *name;
} Type;
Type types[] = {
{ T_BLACK, "black" },
{ T_DRAND48, "drand48" },
{ T_GRAY, "gray" },
{ T_GRAY, "grey" }
};
static int get_type(char *name)
{
Type *type;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' )\n", __func__, name);
#endif
#define TEST(str) ( ! strcmp(name, str) )
if TEST("black") return T_BLACK;
if TEST("drand48") return T_DRAND48;
// #define TEST(str) ( ! strcmp(name, str) )
for (type = types; type->code; type++) {
// printf("\t%-15s %d\n", type->name, type->code);
if (!strcmp(name, type->name)) {
return type->code;
}
}
return -1;
}
@ -32,7 +50,7 @@ static void help(int lj)
puts("Usage:\tmkfimg [options] quux.fimg width height");
puts("\t-k N.N\tgive a float parameter");
puts("\t-t bla\t\howto make the pic");
puts("\t-t bla\t\thowto make the pic");
puts("\t\t\tblack, drand48...");
puts("\t-v\tincrease verbosity");
@ -46,8 +64,9 @@ int main(int argc, char *argv[])
int foo, opt;
int width, height;
char *fname;
float fvalue = 0.00001;
int type = 0;
float fvalue = 0.01;
int type = T_BLACK;
char *tname = "wtf?";
FloatImg fimg;
@ -55,7 +74,7 @@ while ((opt = getopt(argc, argv, "hk:t:v")) != -1) {
switch(opt) {
case 'h': help(0); break;
case 'k': fvalue = atof(optarg); break;
case 't': type = get_type(optarg); break;
case 't': type = get_type(tname=optarg); break;
case 'v': verbosity++; break;
}
}
@ -71,6 +90,11 @@ if (3 != argc-optind) {
exit(1);
}
if (type < 0) {
fprintf(stderr, "type '%s' is unknow\n", tname);
exit(2);
}
fname = argv[optind];
width = atoi(argv[optind+1]); height = atoi(argv[optind+2]);
@ -81,13 +105,15 @@ srand48(getpid() ^ time(NULL));
foo = fimg_create(&fimg, width, height, 3);
if (foo) {
fprintf(stderr, "create floatimg -> %d\n", foo);
exit(1);
exit(3);
}
switch(type) {
default:
case T_BLACK: fimg_clear(&fimg); break;
case T_DRAND48: fimg_drand48(&fimg, 1.0); break;
case T_DRAND48: fimg_drand48(&fimg, fvalue); break;
case T_GRAY: fimg_rgb_constant(&fimg, fvalue, fvalue, fvalue);
break;
}
foo = fimg_dump_to_file(&fimg, fname, 0);