we can now ADD or MUL two images
This commit is contained in:
		
							parent
							
								
									342fc4a721
								
							
						
					
					
						commit
						8990d1f9a9
					
				@ -3,7 +3,7 @@
 | 
				
			|||||||
cp	libfloatimg.a 	/usr/local/lib
 | 
					cp	libfloatimg.a 	/usr/local/lib
 | 
				
			||||||
cp	floatimg.h 	/usr/local/include
 | 
					cp	floatimg.h 	/usr/local/include
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cp	tools/mkfimg tools/fimg2pnm 	\
 | 
					cp	tools/mkfimg tools/fimg2pnm tools/fimgops 	\
 | 
				
			||||||
	tools/png2fimg tools/fimgstats			\
 | 
						tools/png2fimg tools/fimgstats			\
 | 
				
			||||||
	/usr/local/bin
 | 
						/usr/local/bin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,8 @@ int		verbosity;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* --------------------------------------------------------------------- */
 | 
					/* --------------------------------------------------------------------- */
 | 
				
			||||||
#define		OP_ADD		1
 | 
					#define		OP_ADD		1
 | 
				
			||||||
#define		OP_MUL		2
 | 
					#define		OP_SUB		2
 | 
				
			||||||
 | 
					#define		OP_MUL		4
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
	int	code;
 | 
						int	code;
 | 
				
			||||||
	char	*op;
 | 
						char	*op;
 | 
				
			||||||
@ -17,6 +18,7 @@ typedef struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Opcode opcodes[] = {
 | 
					Opcode opcodes[] = {
 | 
				
			||||||
	{ OP_ADD,		"add"		},
 | 
						{ OP_ADD,		"add"		},
 | 
				
			||||||
 | 
						{ OP_SUB,		"sub"		},
 | 
				
			||||||
	{ OP_MUL,		"mul"		},
 | 
						{ OP_MUL,		"mul"		},
 | 
				
			||||||
	{ 0,			NULL		}
 | 
						{ 0,			NULL		}
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
@ -28,13 +30,17 @@ for (optr = opcodes; optr->code; optr++) {
 | 
				
			|||||||
	printf("\t%-20s %d\n", optr->op, optr->code); 
 | 
						printf("\t%-20s %d\n", optr->op, optr->code); 
 | 
				
			||||||
	} 
 | 
						} 
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
static int look_opcodes(char *txt)
 | 
					static int look_opcode(char *txt)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
Opcode *optr;
 | 
					Opcode *optr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if DEBUG_LEVEL
 | 
				
			||||||
 | 
					fprintf(stderr, ">>> %s ( '%s' )\n", __func__, txt);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for (optr = opcodes; optr->code; optr++) {
 | 
					for (optr = opcodes; optr->code; optr++) {
 | 
				
			||||||
	if (!strcmp(txt, optr->op)) {
 | 
						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;
 | 
							return optr->code;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} 
 | 
						} 
 | 
				
			||||||
@ -50,12 +56,33 @@ if (verbosity) fimg_print_version(1);
 | 
				
			|||||||
exit(0);
 | 
					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 main(int argc, char *argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
int		foo, opt;
 | 
					int		foo, opt, action;
 | 
				
			||||||
float		fvalue;
 | 
					float		fvalue;
 | 
				
			||||||
 | 
					char		*operator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FloatImg	fimg;
 | 
					FloatImg	srcA, srcB, dest;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
while ((opt = getopt(argc, argv, "hk:v")) != -1) {
 | 
					while ((opt = getopt(argc, argv, "hk:v")) != -1) {
 | 
				
			||||||
	switch(opt) {
 | 
						switch(opt) {
 | 
				
			||||||
@ -76,6 +103,53 @@ if (4 != argc-optind) {
 | 
				
			|||||||
	exit(1);
 | 
						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;
 | 
					return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/* --------------------------------------------------------------------- */
 | 
					/* --------------------------------------------------------------------- */
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user