FloatImg/tools/mkfimg.c

213 lines
4.7 KiB
C
Raw Normal View History

/*
* making a floatimg with some random datas
* an ugly software from tTh - february 2021
*/
2019-03-03 16:22:55 +01:00
#include <stdio.h>
2019-09-11 06:06:59 +02:00
#include <string.h>
2021-05-20 09:31:28 +02:00
#include <stdint.h>
2019-03-03 16:22:55 +01:00
#include <stdlib.h>
#include <unistd.h>
2019-09-11 13:45:18 +02:00
#include <time.h>
2019-03-03 16:22:55 +01:00
#include "../floatimg.h"
2019-07-16 00:19:59 +02:00
int verbosity;
2019-03-03 16:22:55 +01:00
/* --------------------------------------------------------------------- */
#define T_BLACK 1
#define T_DRAND48 2
#define T_GRAY 3
2020-01-03 18:21:43 +01:00
#define T_HDEG_A 4
#define T_VDEG_A 5
2020-02-29 21:34:29 +01:00
#define T_TPAT0 6
2021-05-12 12:04:55 +02:00
#define T_MIRCOL1 7
2021-05-12 16:45:30 +02:00
#define T_BLOUP 8
2022-04-12 14:49:00 +02:00
#define T_STRIPES 9
typedef struct {
int code;
char *name;
} Type;
Type types[] = {
{ T_BLACK, "black" },
{ T_DRAND48, "drand48" },
{ T_GRAY, "gray" },
2020-01-03 18:21:43 +01:00
{ T_GRAY, "grey" },
{ T_HDEG_A, "hdeg" },
{ T_VDEG_A, "vdeg" },
2020-02-29 21:34:29 +01:00
{ T_TPAT0, "tpat0" },
2021-05-12 12:04:55 +02:00
{ T_MIRCOL1, "mircol1" },
2021-05-12 16:45:30 +02:00
{ T_BLOUP, "bloup" },
2022-04-12 14:49:00 +02:00
{ T_STRIPES, "stripes" },
2020-01-03 18:21:43 +01:00
{ 0, NULL }
};
2021-05-12 16:45:30 +02:00
static int get_type_by_name(char *name)
2019-07-16 00:19:59 +02:00
{
Type *type;
2019-09-11 06:06:59 +02:00
2019-09-11 13:45:18 +02:00
#if DEBUG_LEVEL
2019-09-11 06:06:59 +02:00
fprintf(stderr, ">>> %s ( '%s' )\n", __func__, name);
2019-09-11 13:45:18 +02:00
#endif
2019-09-11 06:06:59 +02:00
for (type = types; type->code; type++) {
if (!strcmp(name, type->name)) {
return type->code;
}
}
2019-09-11 06:06:59 +02:00
return -1;
}
/* --------------------------------------------------------------------- */
2021-05-29 09:33:38 +02:00
static void list_types(void)
{
Type *type;
for (type = types; type->code; type++) {
puts(type->name);
}
exit(0);
}
/* --------------------------------------------------------------------- */
2022-10-27 21:32:02 +02:00
static void help(char *texte)
2019-09-11 06:06:59 +02:00
{
2021-05-12 12:04:55 +02:00
int foo, cc;
2019-09-11 06:06:59 +02:00
2019-09-27 12:25:09 +02:00
puts("Usage:\tmkfimg [options] quux.fimg width height");
puts("\t-k N.N\tgive a float multiplier");
2021-05-29 13:01:32 +02:00
puts("\t-L\tlist howto make a pic");
2022-04-17 04:20:35 +02:00
puts("\t-m\tadd faked metadata");
2021-05-12 16:45:30 +02:00
2022-04-17 04:20:35 +02:00
fputs("\t-t bla\thowto make the pic :\n\t\t | ", stdout);
2021-05-12 16:45:30 +02:00
for (foo=cc=0; types[foo].code; foo++) {
cc += printf("%s ", types[foo].name);
2022-04-09 23:18:14 +02:00
if (cc>35) { cc=0; printf("\n\t\t | "); }
2020-01-03 18:21:43 +01:00
}
2021-05-12 16:45:30 +02:00
2020-01-03 18:21:43 +01:00
puts("\n\t-v\tincrease verbosity");
2019-09-11 06:06:59 +02:00
2020-01-09 01:34:07 +01:00
if (verbosity) {
fimg_print_version(1);
2022-10-27 21:32:02 +02:00
printf("*** %s compiled %s, %s\n", texte, __DATE__, __TIME__);
2020-01-09 01:34:07 +01:00
}
2019-03-03 16:22:55 +01:00
2019-07-16 00:19:59 +02:00
exit(0);
}
/* --------------------------------------------------------------------- */
2019-03-03 16:22:55 +01:00
int main(int argc, char *argv[])
{
2021-05-04 10:29:02 +02:00
int foo, opt, nbargs;
2019-03-03 16:22:55 +01:00
int width, height;
char *fname;
float fvalue = 1.0;
int type = T_BLACK;
2022-04-09 23:18:14 +02:00
int wrmdata = 0;
char *tname = "wtf?";
2019-03-03 16:22:55 +01:00
FloatImg fimg;
2022-04-09 23:18:14 +02:00
FimgMetaData metadata;
2019-03-03 16:22:55 +01:00
2022-04-09 23:18:14 +02:00
while ((opt = getopt(argc, argv, "hk:Lmt:v")) != -1) {
2019-07-16 00:19:59 +02:00
switch(opt) {
2022-10-27 21:32:02 +02:00
case 'h': help(argv[0]); break;
2019-09-11 13:45:18 +02:00
case 'k': fvalue = atof(optarg); break;
2022-04-09 23:18:14 +02:00
case 'm': wrmdata = 1; break;
2021-05-12 16:45:30 +02:00
case 't': type = get_type_by_name(tname=optarg);
break;
2021-05-29 09:33:38 +02:00
case 'L': list_types(); break;
2019-07-16 00:19:59 +02:00
case 'v': verbosity++; break;
2023-05-29 09:06:57 +02:00
default: exit(1);
2019-07-16 00:19:59 +02:00
}
}
2019-09-11 06:06:59 +02:00
#if DEBUG_LEVEL
fprintf(stderr, "argc %d optind %d\n", argc, optind);
for (foo=0; foo<argc; foo++)
fprintf(stderr, "%3d %s\n", foo, argv[foo]);
#endif
if (type < 0) {
2023-10-09 03:13:50 +02:00
fprintf(stderr, "%s: type '%s' is unknow\n", argv[0], tname);
exit(2);
}
2021-05-04 10:29:02 +02:00
nbargs = argc-optind;
switch (nbargs) {
case 2:
if (2!=parse_WxH(argv[optind+1], &width, &height)) {
fprintf(stderr, "%s: parse error on '%s'\n",
argv[0], argv[optind+1]);
exit(1);
}
break;
case 3:
width = atoi(argv[optind+1]);
height = atoi(argv[optind+2]);
break;
default:
2021-05-12 12:04:55 +02:00
fprintf(stderr, "%s need filename, width & height\n",
argv[0]);
2021-05-04 10:29:02 +02:00
exit(1);
}
2019-07-16 00:19:59 +02:00
fname = argv[optind];
2019-09-11 06:06:59 +02:00
2022-09-19 11:58:30 +02:00
if (verbosity) fprintf(stderr, "::: %s is making '%s' %dx%d, type %d\n",
argv[0], fname, width, height, type);
2019-03-03 16:22:55 +01:00
2019-09-11 13:45:18 +02:00
srand48(getpid() ^ time(NULL));
2019-03-03 16:22:55 +01:00
foo = fimg_create(&fimg, width, height, 3);
if (foo) {
fprintf(stderr, "create floatimg -> %d\n", foo);
exit(3);
2019-03-03 16:22:55 +01:00
}
2019-09-11 06:06:59 +02:00
2023-06-29 14:29:59 +02:00
/* NO ERROR CONTROL ? WTF ? */
2019-09-11 06:06:59 +02:00
switch(type) {
default:
case T_BLACK: fimg_clear(&fimg); break;
case T_DRAND48: fimg_drand48(&fimg, fvalue); break;
case T_GRAY: fimg_rgb_constant(&fimg, fvalue, fvalue, fvalue);
break;
case T_HDEG_A: fimg_hdeg_a(&fimg, fvalue); break;
case T_VDEG_A: fimg_vdeg_a(&fimg, fvalue); break;
case T_TPAT0: fimg_test_pattern(&fimg, 0, fvalue); break;
case T_MIRCOL1: fimg_mircol_1(&fimg, fvalue); break;
case T_BLOUP: fimg_draw_something(&fimg); break;
case T_STRIPES: fimg_do_stripes(&fimg, fvalue, 0); break;
2020-05-29 13:32:15 +02:00
case -1: exit(1);
2019-09-11 06:06:59 +02:00
}
2019-03-03 16:22:55 +01:00
2023-06-29 14:29:59 +02:00
if (verbosity > 1) fprintf(stderr, "%s: end of switch\n", __func__);
/* NO ERROR CONTROL ? WTF ? */
2022-04-09 23:18:14 +02:00
if (wrmdata) {
2023-06-29 14:29:59 +02:00
fprintf(stderr, "%s: warning, metadata is bogus\n", argv[0]);
2022-05-14 20:49:59 +02:00
(void)fimg_default_metadata(&metadata, 9);
2022-04-09 23:18:14 +02:00
sprintf(metadata.idcam, "mkfimg (libv %d)", FIMG_VERSION);
foo = fimg_dumpmd_to_file(&fimg, fname, &metadata, 0);
#if DEBUG_LEVEL
fprintf(stderr, "save w. metadata -> %d\n", foo);
#endif
}
else {
foo = fimg_dump_to_file(&fimg, fname, 0);
}
2022-09-19 11:58:30 +02:00
2019-03-03 16:22:55 +01:00
if (foo) {
2022-09-19 11:58:30 +02:00
fprintf(stderr, "*** dump fimg to %s error -> %d\n", fname, foo);
2019-03-03 16:22:55 +01:00
exit(1);
}
2020-08-23 23:55:36 +02:00
fimg_destroy(&fimg);
2019-03-03 16:22:55 +01:00
return 0;
}
/* --------------------------------------------------------------------- */