|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|
/* --------------------------------------------------------------------- */ |
|
|
|
|