#include #include #include #include #include "../floatimg.h" int verbosity; /* --------------------------------------------------------------------- */ #define OP_ADD 1 #define OP_SUB 2 #define OP_MUL 4 typedef struct { int code; char *op; } Opcode; Opcode opcodes[] = { { OP_ADD, "add" }, { OP_SUB, "sub" }, { OP_MUL, "mul" }, { 0, NULL } }; static void pr_opcodes(void) { Opcode *optr; puts("operators:"); for (optr = opcodes; optr->code; optr++) { printf("\t%-20s %d\n", optr->op, optr->code); } } 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); return optr->code; } } return -1; } /* --------------------------------------------------------------------- */ static void help(int lj) { puts("usage:\n\tfimgops [options] A.fimg B.fimg operator D.fimg"); pr_opcodes(); 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, action; float fvalue; char *operator; FloatImg srcA, srcB, dest; while ((opt = getopt(argc, argv, "hk:v")) != -1) { switch(opt) { case 'h': help(0); break; case 'k': fvalue = atof(optarg); break; case 'v': verbosity++; break; } } #if DEBUG_LEVEL fprintf(stderr, "argc %d optind %d\n", argc, optind); for (foo=0; foo