From 8990d1f9a9ce7bd2be93a63b56f42ee74e14d264 Mon Sep 17 00:00:00 2001 From: tth Date: Wed, 11 Sep 2019 13:56:38 +0200 Subject: [PATCH] we can now ADD or MUL two images --- install.sh | 2 +- tools/fimgops.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 80 insertions(+), 6 deletions(-) diff --git a/install.sh b/install.sh index 23c85251..d3d50105 100755 --- a/install.sh +++ b/install.sh @@ -3,7 +3,7 @@ cp libfloatimg.a /usr/local/lib cp floatimg.h /usr/local/include -cp tools/mkfimg tools/fimg2pnm \ +cp tools/mkfimg tools/fimg2pnm tools/fimgops \ tools/png2fimg tools/fimgstats \ /usr/local/bin diff --git a/tools/fimgops.c b/tools/fimgops.c index bab7786d..e3e17b56 100644 --- a/tools/fimgops.c +++ b/tools/fimgops.c @@ -9,7 +9,8 @@ int verbosity; /* --------------------------------------------------------------------- */ #define OP_ADD 1 -#define OP_MUL 2 +#define OP_SUB 2 +#define OP_MUL 4 typedef struct { int code; char *op; @@ -17,6 +18,7 @@ typedef struct { Opcode opcodes[] = { { OP_ADD, "add" }, + { OP_SUB, "sub" }, { OP_MUL, "mul" }, { 0, NULL } }; @@ -28,13 +30,17 @@ for (optr = opcodes; optr->code; optr++) { printf("\t%-20s %d\n", optr->op, optr->code); } } -static int look_opcodes(char *txt) +static int look_opcode(char *txt) { Opcode *optr; +#if DEBUG_LEVEL +fprintf(stderr, ">>> %s ( '%s' )\n", __func__, txt); +#endif + for (optr = opcodes; optr->code; optr++) { if (!strcmp(txt, optr->op)) { - printf("found %s as %d\n", optr->op, optr->code); + // printf("found %s as %d\n", optr->op, optr->code); return optr->code; } } @@ -50,12 +56,33 @@ if (verbosity) fimg_print_version(1); exit(0); } /* --------------------------------------------------------------------- */ +int exec_operator(FloatImg *A, FloatImg *B, int action, FloatImg *D) +{ +int foo; + +switch (action) { + + case OP_ADD: + foo = fimg_add(A, B, D); break; + case OP_SUB: + foo = fimg_sub(A, B, D); break; + case OP_MUL: + foo = fimg_add(A, B, D); break; + default: + foo = -99; break; + + } + +return foo; +} +/* --------------------------------------------------------------------- */ int main(int argc, char *argv[]) { -int foo, opt; +int foo, opt, action; float fvalue; +char *operator; -FloatImg fimg; +FloatImg srcA, srcB, dest; while ((opt = getopt(argc, argv, "hk:v")) != -1) { switch(opt) { @@ -76,6 +103,53 @@ if (4 != argc-optind) { exit(1); } +operator = argv[optind+2]; +action = look_opcode(operator); +if (action < 0) { + fprintf(stderr, "%s : opcode '%s' unknow\n", argv[0], operator); + exit(1); + } + +/* + * load the two source files, and check comatibility + */ +if ((foo=fimg_create_from_dump(argv[optind], &srcA))) { + fprintf(stderr, "read error on '%s' is %d\n", argv[optind], foo); + exit(2); + } +if ((foo=fimg_create_from_dump(argv[optind+1], &srcB))) { + fprintf(stderr, "read error on '%s' is %d\n", argv[optind+1], foo); + exit(3); + } + +if (verbosity) { /* please, debug me */ + fimg_describe(&srcA, argv[optind]); + fimg_describe(&srcB, argv[optind+1]); + } + +foo = fimg_images_compatible(&srcA, &srcB); +if (foo) { + fprintf(stderr, "images are not compatibles, %d\n", foo); + exit(4); + } + +/* + * we can now create the resultant image, and going coredump... + */ +foo = fimg_create(&dest, srcA.width, srcA.height, srcA.type); +// fimg_describe(&dest, "destination"); + +foo = exec_operator(&srcA, &srcB, action, &dest); +if (foo) { + fprintf(stderr, "operator exec give us a %d\n", foo); + } + +foo = fimg_dump_to_file(&dest, argv[optind+3], 0); +if (foo) { + fprintf(stderr, "dumping datas to file give us a %d\n", foo); + } + + return 0; } /* --------------------------------------------------------------------- */