From 8db2c3a291af81c4e4b739148607166e55a42076 Mon Sep 17 00:00:00 2001 From: "Mirar (Pontus Hagland)" <pike@sort.mirar.org> Date: Sun, 23 May 1999 19:47:04 +0200 Subject: [PATCH] image module startup changed, using headerfile initstuff.h Rev: src/modules/Image/Makefile.in:1.23 Rev: src/modules/Image/colors.c:1.17 Rev: src/modules/Image/colortable.c:1.67 Rev: src/modules/Image/encodings/Makefile.in:1.26 Rev: src/modules/Image/encodings/_xpm.c:1.7 Rev: src/modules/Image/encodings/any.c:1.9 Rev: src/modules/Image/encodings/avs.c:1.6 Rev: src/modules/Image/encodings/bmp.c:1.14 Rev: src/modules/Image/encodings/gif.c:1.48 Rev: src/modules/Image/encodings/hrz.c:1.2 Rev: src/modules/Image/encodings/ilbm.c:1.11 Rev: src/modules/Image/encodings/pcx.c:1.6 Rev: src/modules/Image/encodings/png.c:1.24 Rev: src/modules/Image/encodings/pnm.c:1.19 Rev: src/modules/Image/encodings/psd.c:1.10 Rev: src/modules/Image/encodings/tga.c:1.7 Rev: src/modules/Image/encodings/x.c:1.22 Rev: src/modules/Image/encodings/xbm.c:1.5 Rev: src/modules/Image/encodings/xcf.c:1.8 Rev: src/modules/Image/encodings/xwd.c:1.12 Rev: src/modules/Image/font.c:1.48 Rev: src/modules/Image/image.c:1.136 Rev: src/modules/Image/image.h:1.32 Rev: src/modules/Image/image_module.c:1.1 Rev: src/modules/Image/initstuff.h:1.1 Rev: src/modules/Image/layers.c:1.12 Rev: src/modules/Image/pattern.c:1.16 --- .gitattributes | 1 + src/modules/Image/Makefile.in | 5 +- src/modules/Image/colors.c | 23 +-- src/modules/Image/colortable.c | 34 +--- src/modules/Image/encodings/Makefile.in | 6 +- src/modules/Image/encodings/_xpm.c | 18 +- src/modules/Image/encodings/any.c | 21 +-- src/modules/Image/encodings/avs.c | 18 +- src/modules/Image/encodings/bmp.c | 24 +-- src/modules/Image/encodings/gif.c | 21 +-- src/modules/Image/encodings/hrz.c | 19 +-- src/modules/Image/encodings/ilbm.c | 25 +-- src/modules/Image/encodings/pcx.c | 30 +--- src/modules/Image/encodings/png.c | 15 +- src/modules/Image/encodings/pnm.c | 22 +-- src/modules/Image/encodings/psd.c | 17 +- src/modules/Image/encodings/tga.c | 37 ++-- src/modules/Image/encodings/x.c | 19 +-- src/modules/Image/encodings/xbm.c | 25 +-- src/modules/Image/encodings/xcf.c | 19 +-- src/modules/Image/encodings/xwd.c | 13 +- src/modules/Image/font.c | 18 +- src/modules/Image/image.c | 153 +---------------- src/modules/Image/image.h | 3 +- src/modules/Image/image_module.c | 216 ++++++++++++++++++++++++ src/modules/Image/initstuff.h | 45 +++++ src/modules/Image/layers.c | 23 +-- src/modules/Image/pattern.c | 10 +- 28 files changed, 360 insertions(+), 520 deletions(-) create mode 100644 src/modules/Image/image_module.c create mode 100644 src/modules/Image/initstuff.h diff --git a/.gitattributes b/.gitattributes index bc1a8e1a67..c59959d55e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -202,6 +202,7 @@ testfont binary /src/modules/Image/illustration.pike foreign_ident /src/modules/Image/image.c foreign_ident /src/modules/Image/image.h foreign_ident +/src/modules/Image/image_module.c foreign_ident /src/modules/Image/layers.c foreign_ident /src/modules/Image/matrix.c foreign_ident /src/modules/Image/mkwmml.pike foreign_ident diff --git a/src/modules/Image/Makefile.in b/src/modules/Image/Makefile.in index 5d2c753ae6..8dfe0c2054 100644 --- a/src/modules/Image/Makefile.in +++ b/src/modules/Image/Makefile.in @@ -1,7 +1,8 @@ -# $Id: Makefile.in,v 1.22 1999/04/23 21:34:24 grubba Exp $ +# $Id: Makefile.in,v 1.23 1999/05/23 17:46:37 mirar Exp $ SRCDIR=@srcdir@ VPATH=@srcdir@:@srcdir@/../..:../.. -OBJS = image.o font.o togif.o matrix.o pnm_compat.o blit.o \ +OBJS = image_module.o \ + image.o font.o togif.o matrix.o pnm_compat.o blit.o \ pattern.o dct.o operator.o x.o colortable.o polyfill.o \ orient.o colors.o search.o layers.o MODNAME=image diff --git a/src/modules/Image/colors.c b/src/modules/Image/colors.c index 7fe6a780e3..38f557f5e0 100644 --- a/src/modules/Image/colors.c +++ b/src/modules/Image/colors.c @@ -1,7 +1,7 @@ /* **! module Image **! note -**! $Id: colors.c,v 1.16 1999/05/20 17:07:00 mirar Exp $ +**! $Id: colors.c,v 1.17 1999/05/23 17:46:38 mirar Exp $ **! submodule Color **! **! This module keeps names and easy handling @@ -97,7 +97,7 @@ #include "global.h" #include <config.h> -RCSID("$Id: colors.c,v 1.16 1999/05/20 17:07:00 mirar Exp $"); +RCSID("$Id: colors.c,v 1.17 1999/05/23 17:46:38 mirar Exp $"); #include "config.h" @@ -1431,6 +1431,8 @@ void init_image_colors(void) no_name=make_shared_string(""); + /* make color object program */ + start_new_program(); ADD_STORAGE(struct color_struct); @@ -1471,8 +1473,9 @@ void init_image_colors(void) ADD_FUNCTION("`+",image_color_add,tFunc(tObj,tObj),0); image_color_program=end_program(); + + /* this is the Image.Color stuff */ - start_new_program(); ADD_FUNCTION("`[]",image_get_color,tFunc(tStr,tObj),0); ADD_FUNCTION("`()",image_make_color,tFuncV(,tOr(tStr,tInt),tObj),0); ADD_FUNCTION("rgb",image_make_rgb_color,tFunc(tInt tInt tInt,tObj),0); @@ -1490,23 +1493,11 @@ void init_image_colors(void) ADD_FUNCTION("_values",image_colors_values,tFunc(,tArr(tObj)),0); add_program_constant("Color",image_color_program,0); - - prg=end_program(); - push_object(clone_object(prg,0)); - free_program(prg); - str=make_shared_string("Color"); - add_constant(str,sp-1,0); - free_string(str); - pop_stack(); } void exit_image_colors(void) { - if (image_color_program) - { - free_program(image_color_program); - image_color_program=NULL; - } + free_program(image_color_program); if (colors) { int i; diff --git a/src/modules/Image/colortable.c b/src/modules/Image/colortable.c index 7d9bb24542..f3745ec4e3 100644 --- a/src/modules/Image/colortable.c +++ b/src/modules/Image/colortable.c @@ -1,12 +1,12 @@ #include "global.h" #include <config.h> -/* $Id: colortable.c,v 1.66 1999/04/20 18:16:09 mirar Exp $ */ +/* $Id: colortable.c,v 1.67 1999/05/23 17:46:39 mirar Exp $ */ /* **! module Image **! note -**! $Id: colortable.c,v 1.66 1999/04/20 18:16:09 mirar Exp $ +**! $Id: colortable.c,v 1.67 1999/05/23 17:46:39 mirar Exp $ **! class Colortable **! **! This object keeps colortable information, @@ -21,7 +21,7 @@ #undef COLORTABLE_DEBUG #undef COLORTABLE_REDUCE_DEBUG -RCSID("$Id: colortable.c,v 1.66 1999/04/20 18:16:09 mirar Exp $"); +RCSID("$Id: colortable.c,v 1.67 1999/05/23 17:46:39 mirar Exp $"); #include <math.h> /* fabs() */ @@ -39,16 +39,12 @@ RCSID("$Id: colortable.c,v 1.66 1999/04/20 18:16:09 mirar Exp $"); #include "builtin_functions.h" #include "../../error.h" #include "module_support.h" +#include "operators.h" +#include "dmalloc.h" #include "image.h" #include "colortable.h" -#include "dmalloc.h" - -void f_index(INT32); - -struct program *image_colortable_program; -extern struct program *image_program; -extern struct program *image_color_program; +#include "initstuff.h" #define WEIGHT_NEEDED (nct_weight_t)(0x10000000) #define WEIGHT_REMOVE (nct_weight_t)(0x10000001) @@ -1908,7 +1904,6 @@ int image_colortable_initiate_dither(struct neo_colortable *nct, return 1; case NCTD_ORDERED: - fprintf(stderr,"init ordered\n"); /* copy it all */ dith->u.ordered=nct->du.ordered; @@ -4367,16 +4362,16 @@ void image_colortable_corners(INT32 args) /***************** global init etc *****************************/ -void init_colortable_programs(void) +void init_image_colortable(void) { s_array=make_shared_string("array"); s_string=make_shared_string("string"); s_mapping=make_shared_string("mapping"); - start_new_program(); ADD_STORAGE(struct neo_colortable); set_init_callback(init_colortable_struct); + set_exit_callback(exit_colortable_struct); /* function(void:void)|" "function(array(array(int)):void)|" @@ -4441,23 +4436,12 @@ void init_colortable_programs(void) ADD_FUNCTION("corners",image_colortable_corners,tFunc(,tArray),0); - set_exit_callback(exit_colortable_struct); - - image_colortable_program=end_program(); - add_program_constant("colortable",image_colortable_program, 0); /* compat */ - add_program_constant("Colortable",image_colortable_program, 0); } -void exit_colortable(void) +void exit_image_colortable(void) { free_string(s_array); free_string(s_mapping); free_string(s_string); - - if(image_colortable_program) - { - free_program(image_colortable_program); - image_colortable_program=0; - } } diff --git a/src/modules/Image/encodings/Makefile.in b/src/modules/Image/encodings/Makefile.in index 637f49f907..1d63bf79fe 100644 --- a/src/modules/Image/encodings/Makefile.in +++ b/src/modules/Image/encodings/Makefile.in @@ -1,13 +1,13 @@ -# $Id: Makefile.in,v 1.25 1999/04/15 02:40:07 per Exp $ +# $Id: Makefile.in,v 1.26 1999/05/23 17:46:47 mirar Exp $ SRCDIR=@srcdir@ VPATH=@srcdir@:@srcdir@/../../..:../../.. -OBJS = gif.o gif_lzw.o pnm.o x.o xwd.o png.o any.o bmp.o tga.o pcx.o xbm.o _xpm.o ilbm.o iff.o xcf.o hrz.o avs.o psd.o +OBJS = gif.o gif_lzw.o pnm.o x.o xwd.o png.o any.o bmp.o tga.o pcx.o xbm.o _xpm.o ilbm.o iff.o xcf.o hrz.o avs.o psd.o gd.o @SET_MAKE@ CC=@CC@ CPP=@CPP@ -AR=ar +# AR=ar RANLIB=@RANLIB@ PREFLAGS=-I. -I$(SRCDIR) -I$(SRCDIR)/../../.. -I$(SRCDIR)/.. -I../../.. -I.. -I. $(MODULE_CPPFLAGS) $(DEFINES) diff --git a/src/modules/Image/encodings/_xpm.c b/src/modules/Image/encodings/_xpm.c index a9d5bd4c67..b597e72521 100644 --- a/src/modules/Image/encodings/_xpm.c +++ b/src/modules/Image/encodings/_xpm.c @@ -1,5 +1,5 @@ #include "global.h" -RCSID("$Id: _xpm.c,v 1.6 1999/04/15 20:31:18 per Exp $"); +RCSID("$Id: _xpm.c,v 1.7 1999/05/23 17:46:48 mirar Exp $"); #include "config.h" @@ -386,28 +386,12 @@ void f__xpm_trim_rows( INT32 args ) pop_n_elems(args-1); } -static struct program *image_encoding__xpm_program=NULL; void init_image__xpm( ) { - start_new_program(); add_function( "_xpm_write_rows", f__xpm_write_rows, "mixed", 0); add_function( "_xpm_trim_rows", f__xpm_trim_rows, "mixed", 0); - image_encoding__xpm_program=end_program(); - - push_object(clone_object(image_encoding__xpm_program,0)); - { - struct pike_string *s=make_shared_string("_XPM"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); } void exit_image__xpm(void) { - if(image_encoding__xpm_program) - { - free_program(image_encoding__xpm_program); - image_encoding__xpm_program=0; - } } diff --git a/src/modules/Image/encodings/any.c b/src/modules/Image/encodings/any.c index bbe7ac0055..69a513484d 100644 --- a/src/modules/Image/encodings/any.c +++ b/src/modules/Image/encodings/any.c @@ -1,9 +1,9 @@ -/* $Id: any.c,v 1.8 1999/05/02 15:29:25 mirar Exp $ */ +/* $Id: any.c,v 1.9 1999/05/23 17:46:49 mirar Exp $ */ /* **! module Image **! note -**! $Id: any.c,v 1.8 1999/05/02 15:29:25 mirar Exp $ +**! $Id: any.c,v 1.9 1999/05/23 17:46:49 mirar Exp $ **! submodule ANY **! **! This method calls the other decoding methods @@ -23,7 +23,7 @@ #include <ctype.h> #include "stralloc.h" -RCSID("$Id: any.c,v 1.8 1999/05/02 15:29:25 mirar Exp $"); +RCSID("$Id: any.c,v 1.9 1999/05/23 17:46:49 mirar Exp $"); #include "pike_macros.h" #include "operators.h" #include "builtin_functions.h" @@ -174,27 +174,12 @@ void image_any_decode_alpha(INT32 args) void init_image_any(void) { - struct program *p; - - start_new_program(); - add_function("_decode",image_any__decode, "function(string:mapping)",0); add_function("decode",image_any_decode, "function(string:mapping)",0); add_function("decode_alpha",image_any_decode_alpha, "function(string:mapping)",0); - /** done **/ - - p=end_program(); - push_object(clone_object(p,0)); - { - struct pike_string *s=make_shared_string("ANY"); - add_constant(s,sp-1,0); - free_string(s); - } - free_program(p); - pop_stack(); } void exit_image_any(void) diff --git a/src/modules/Image/encodings/avs.c b/src/modules/Image/encodings/avs.c index 49db81cbcc..e9a3634e49 100644 --- a/src/modules/Image/encodings/avs.c +++ b/src/modules/Image/encodings/avs.c @@ -8,7 +8,7 @@ #endif #include "stralloc.h" -RCSID("$Id: avs.c,v 1.5 1999/05/13 03:25:48 neotron Exp $"); +RCSID("$Id: avs.c,v 1.6 1999/05/23 17:46:50 mirar Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -44,8 +44,6 @@ extern struct program *image_program; **! g and b. */ -struct program *image_encoding_avs_program; - void image_avs_f__decode(INT32 args) { extern void f_aggregate_mapping(INT32 args); @@ -138,25 +136,11 @@ void image_avs_f_encode(INT32 args ) void init_image_avs() { - start_new_program(); add_function( "decode", image_avs_f_decode, "function(string:object)", 0); add_function( "_decode", image_avs_f__decode, "function(string:mapping)", 0); add_function( "encode", image_avs_f_encode, "function(object:string)", 0); - image_encoding_avs_program=end_program(); - push_object(clone_object(image_encoding_avs_program,0)); - { - struct pike_string *s=make_shared_string("AVS"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); } void exit_image_avs() { - if(image_encoding_avs_program) - { - free_program(image_encoding_avs_program); - image_encoding_avs_program=NULL; - } } diff --git a/src/modules/Image/encodings/bmp.c b/src/modules/Image/encodings/bmp.c index 3e388c68b0..3b963825f5 100644 --- a/src/modules/Image/encodings/bmp.c +++ b/src/modules/Image/encodings/bmp.c @@ -1,9 +1,9 @@ -/* $Id: bmp.c,v 1.13 1999/05/08 00:44:41 hubbe Exp $ */ +/* $Id: bmp.c,v 1.14 1999/05/23 17:46:51 mirar Exp $ */ /* **! module Image **! note -**! $Id: bmp.c,v 1.13 1999/05/08 00:44:41 hubbe Exp $ +**! $Id: bmp.c,v 1.14 1999/05/23 17:46:51 mirar Exp $ **! submodule BMP **! **! This submodule keeps the BMP (Windows Bitmap) @@ -22,7 +22,7 @@ #include <ctype.h> #include "stralloc.h" -RCSID("$Id: bmp.c,v 1.13 1999/05/08 00:44:41 hubbe Exp $"); +RCSID("$Id: bmp.c,v 1.14 1999/05/23 17:46:51 mirar Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -990,12 +990,8 @@ void img_bmp_decode(INT32 args) f_index(2); } -struct program *image_bmp_module_program=NULL; - void init_image_bmp(void) { - start_new_program(); - add_function("encode",img_bmp_encode, "function(object,void|object|int|mapping:string)",0); add_function("_decode",img_bmp__decode, @@ -1004,22 +1000,8 @@ void init_image_bmp(void) "function(string,void|mapping:object)",0); add_function("decode_header",img_bmp_decode_header, "function(string,void|mapping:mapping)",0); - - image_bmp_module_program=end_program(); - push_object(clone_object(image_bmp_module_program,0)); - { - struct pike_string *s=make_shared_string("BMP"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); } void exit_image_bmp(void) { - if(image_bmp_module_program) - { - free_program(image_bmp_module_program); - image_bmp_module_program=0; - } } diff --git a/src/modules/Image/encodings/gif.c b/src/modules/Image/encodings/gif.c index 3271be326a..c3acaa8a16 100644 --- a/src/modules/Image/encodings/gif.c +++ b/src/modules/Image/encodings/gif.c @@ -1,9 +1,9 @@ -/* $Id: gif.c,v 1.47 1999/04/13 12:32:41 mirar Exp $ */ +/* $Id: gif.c,v 1.48 1999/05/23 17:46:52 mirar Exp $ */ /* **! module Image **! note -**! $Id: gif.c,v 1.47 1999/04/13 12:32:41 mirar Exp $ +**! $Id: gif.c,v 1.48 1999/05/23 17:46:52 mirar Exp $ **! submodule GIF **! **! This submodule keep the GIF encode/decode capabilities @@ -31,7 +31,7 @@ #include <ctype.h> #include "stralloc.h" -RCSID("$Id: gif.c,v 1.47 1999/04/13 12:32:41 mirar Exp $"); +RCSID("$Id: gif.c,v 1.48 1999/05/23 17:46:52 mirar Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -2530,7 +2530,6 @@ struct program *image_encoding_gif_program=NULL; void init_image_gif(void) { - start_new_program(); add_function("render_block",image_gif_render_block, "function(object,object,void|int,void|int,void|int,void|object,void|int,void|int,void|int,void|int,void|int,void|int,void|int:string)" @@ -2584,22 +2583,8 @@ void init_image_gif(void) add_integer_constant("ERROR_TOO_MUCH_DATA",GIF_ERROR_TOO_MUCH_DATA,0); /** done **/ - - image_encoding_gif_program=end_program(); - push_object(clone_object(image_encoding_gif_program,0)); - { - struct pike_string *s=make_shared_string("GIF"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); } void exit_image_gif(void) { - if(image_encoding_gif_program) - { - free_program(image_encoding_gif_program); - image_encoding_gif_program=0; - } } diff --git a/src/modules/Image/encodings/hrz.c b/src/modules/Image/encodings/hrz.c index a926aa92d7..0f165ba31f 100644 --- a/src/modules/Image/encodings/hrz.c +++ b/src/modules/Image/encodings/hrz.c @@ -4,7 +4,7 @@ #include <ctype.h> #include "stralloc.h" -RCSID("$Id: hrz.c,v 1.1 1999/04/12 10:30:03 per Exp $"); +RCSID("$Id: hrz.c,v 1.2 1999/05/23 17:46:53 mirar Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -13,6 +13,7 @@ RCSID("$Id: hrz.c,v 1.1 1999/04/12 10:30:03 per Exp $"); #include "threads.h" #include "array.h" #include "error.h" +#include "builtin_functions.h" #include "image.h" @@ -40,8 +41,6 @@ extern struct program *image_program; **! HRZ is (was?) used for amatuer radio slow-scan TV. */ -struct program *image_encoding_hrz_program; - void image_hrz_f_decode(INT32 args) { struct object *io; @@ -106,25 +105,11 @@ void image_hrz_f_encode(INT32 args ) void init_image_hrz() { - start_new_program(); add_function( "decode", image_hrz_f_decode, "function(string:object)", 0); add_function( "_decode", image_hrz_f__decode, "function(string:mapping)", 0); add_function( "encode", image_hrz_f_encode, "function(object:string)", 0); - image_encoding_hrz_program=end_program(); - push_object(clone_object(image_encoding_hrz_program,0)); - { - struct pike_string *s=make_shared_string("HRZ"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); } void exit_image_hrz() { - if(image_encoding_hrz_program) - { - free_program(image_encoding_hrz_program); - image_encoding_hrz_program=NULL; - } } diff --git a/src/modules/Image/encodings/ilbm.c b/src/modules/Image/encodings/ilbm.c index 139303c696..c05fe036f7 100644 --- a/src/modules/Image/encodings/ilbm.c +++ b/src/modules/Image/encodings/ilbm.c @@ -1,9 +1,9 @@ -/* $Id: ilbm.c,v 1.10 1999/04/19 21:10:35 marcus Exp $ */ +/* $Id: ilbm.c,v 1.11 1999/05/23 17:46:54 mirar Exp $ */ /* **! module Image **! note -**! $Id: ilbm.c,v 1.10 1999/04/19 21:10:35 marcus Exp $ +**! $Id: ilbm.c,v 1.11 1999/05/23 17:46:54 mirar Exp $ **! submodule ILBM **! **! This submodule keep the ILBM encode/decode capabilities @@ -14,7 +14,7 @@ #include "global.h" #include "stralloc.h" -RCSID("$Id: ilbm.c,v 1.10 1999/04/19 21:10:35 marcus Exp $"); +RCSID("$Id: ilbm.c,v 1.11 1999/05/23 17:46:54 mirar Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -248,9 +248,9 @@ static void parse_body(struct BMHD *bmhd, unsigned char *body, INT32 blen, unsigned int x, y; int rbyt = ((bmhd->w+15)&~15)>>3; int eplanes = (bmhd->masking == mskHasMask? bmhd->nPlanes+1:bmhd->nPlanes); - unsigned char *line; + unsigned char *line=0; INT32 *cptr, *cline = alloca((rbyt<<3)*sizeof(INT32)); - INT32 suse; + INT32 suse=0; rgb_group *dest = img->img; rgb_group *adest = (alpha==NULL? NULL : alpha->img); @@ -826,7 +826,6 @@ void init_image_ilbm(void) pop_stack(); } - start_new_program(); add_function("__decode",image_ilbm___decode, "function(string:array)",0); @@ -836,25 +835,11 @@ void init_image_ilbm(void) "function(string|array:object)",0); add_function("encode",image_ilbm_encode, "function(object,void|mapping(string:mixed):string)",0); - - image_encoding_ilbm_program=end_program(); - push_object(clone_object(image_encoding_ilbm_program,0)); - { - struct pike_string *s=make_shared_string("ILBM"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); } void exit_image_ilbm(void) { int n; - if(image_encoding_ilbm_program) - { - free_program(image_encoding_ilbm_program); - image_encoding_ilbm_program=NULL; - } for(n=0; n<4; n++) free_svalue(&string_[n]); } diff --git a/src/modules/Image/encodings/pcx.c b/src/modules/Image/encodings/pcx.c index 1a732bf309..dbdcb0d5e4 100644 --- a/src/modules/Image/encodings/pcx.c +++ b/src/modules/Image/encodings/pcx.c @@ -1,5 +1,5 @@ #include "global.h" -RCSID("$Id: pcx.c,v 1.5 1999/04/15 04:08:35 hubbe Exp $"); +RCSID("$Id: pcx.c,v 1.6 1999/05/23 17:46:55 mirar Exp $"); #include "config.h" @@ -582,7 +582,6 @@ void image_pcx_encode( INT32 args ) static struct program *image_encoding_pcx_program=NULL; void init_image_pcx( ) { - start_new_program(); add_function( "_decode", image_pcx__decode, "function(string:mapping(string:object))", 0); add_function( "decode", image_pcx_decode, @@ -591,15 +590,7 @@ void init_image_pcx( ) "function(object,mapping|void:string)", 0); add_function( "_encode", image_pcx_encode, "function(object,mapping|void:string)", 0); - image_encoding_pcx_program=end_program(); - push_object(clone_object(image_encoding_pcx_program,0)); - { - struct pike_string *s=make_shared_string("PCX"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); opt_raw=make_shared_string("raw"); opt_dpy=make_shared_string("dpy"); opt_xdpy=make_shared_string("xdpy"); @@ -611,16 +602,11 @@ void init_image_pcx( ) void exit_image_pcx(void) { - if(image_encoding_pcx_program) - { - free_program(image_encoding_pcx_program); - image_encoding_pcx_program=0; - free_string(opt_raw); - free_string(opt_dpy); - free_string(opt_xdpy); - free_string(opt_ydpy); - free_string(opt_xoffset); - free_string(opt_colortable); - free_string(opt_yoffset); - } + free_string(opt_raw); + free_string(opt_dpy); + free_string(opt_xdpy); + free_string(opt_ydpy); + free_string(opt_xoffset); + free_string(opt_colortable); + free_string(opt_yoffset); } diff --git a/src/modules/Image/encodings/png.c b/src/modules/Image/encodings/png.c index fb6045e8fe..a006550758 100644 --- a/src/modules/Image/encodings/png.c +++ b/src/modules/Image/encodings/png.c @@ -1,5 +1,5 @@ #include "global.h" -RCSID("$Id: png.c,v 1.23 1999/05/10 23:03:45 mirar Exp $"); +RCSID("$Id: png.c,v 1.24 1999/05/23 17:46:56 mirar Exp $"); #include "config.h" @@ -1671,13 +1671,8 @@ void exit_image_png(void) free_program(gz_deflate); } -struct object *init_image_png(void) +void init_image_png(void) { - struct program *p; - struct object *o; - - start_new_program(); - push_text("Gz"); push_int(0); SAFE_APPLY_MASTER("resolv",2); @@ -1709,7 +1704,6 @@ struct object *init_image_png(void) } pop_stack(); - if (gz_deflate && gz_inflate && gz_crc32.type!=T_INT) { add_function("_chunk",image_png__chunk, @@ -1740,9 +1734,4 @@ struct object *init_image_png(void) param_bpp=make_shared_string("bpp"); param_type=make_shared_string("type"); param_background=make_shared_string("background"); - - o = clone_object((p = end_program()),0); - free_program(p); - - return o; } diff --git a/src/modules/Image/encodings/pnm.c b/src/modules/Image/encodings/pnm.c index 459565eccd..acb5982d7c 100644 --- a/src/modules/Image/encodings/pnm.c +++ b/src/modules/Image/encodings/pnm.c @@ -1,9 +1,9 @@ -/* $Id: pnm.c,v 1.18 1999/04/13 12:32:44 mirar Exp $ */ +/* $Id: pnm.c,v 1.19 1999/05/23 17:46:58 mirar Exp $ */ /* **! module Image **! note -**! $Id: pnm.c,v 1.18 1999/04/13 12:32:44 mirar Exp $ +**! $Id: pnm.c,v 1.19 1999/05/23 17:46:58 mirar Exp $ **! submodule PNM **! **! This submodule keeps the PNM encode/decode capabilities @@ -49,7 +49,7 @@ #include <ctype.h> #include "stralloc.h" -RCSID("$Id: pnm.c,v 1.18 1999/04/13 12:32:44 mirar Exp $"); +RCSID("$Id: pnm.c,v 1.19 1999/05/23 17:46:58 mirar Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -583,8 +583,6 @@ struct program *image_pnm_module_program=NULL; void init_image_pnm(void) { - start_new_program(); - add_function("encode",img_pnm_encode_binary, "function(object:string)",0); add_function("encode_binary",img_pnm_encode_binary, @@ -608,22 +606,8 @@ void init_image_pnm(void) add_function("decode",img_pnm_decode, "function(string:object)",0); - - image_pnm_module_program=end_program(); - push_object(clone_object(image_pnm_module_program,0)); - { - struct pike_string *s=make_shared_string("PNM"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); } void exit_image_pnm(void) { - if(image_pnm_module_program) - { - free_program(image_pnm_module_program); - image_pnm_module_program=0; - } } diff --git a/src/modules/Image/encodings/psd.c b/src/modules/Image/encodings/psd.c index 90eec727d3..8345fdf73d 100644 --- a/src/modules/Image/encodings/psd.c +++ b/src/modules/Image/encodings/psd.c @@ -1,5 +1,5 @@ #include "global.h" -RCSID("$Id: psd.c,v 1.9 1999/05/08 00:44:42 hubbe Exp $"); +RCSID("$Id: psd.c,v 1.10 1999/05/23 17:46:59 mirar Exp $"); #include "config.h" @@ -625,7 +625,6 @@ static void f_apply_cmap( INT32 args ) static struct program *image_encoding_psd_program=NULL; void init_image_psd() { - start_new_program(); add_function( "___decode", image_f_psd___decode, "function(string:mapping)", 0); add_function( "___decode_image_channel", f_decode_image_channel, @@ -650,15 +649,6 @@ void init_image_psd() add_integer_constant("LAYER_FLAG_BIT4", 0x04, 0 ); add_integer_constant("LAYER_FLAG_NOPIX", 0x08, 0 ); - image_encoding_psd_program=end_program(); - - push_object(clone_object(image_encoding_psd_program,0)); - { - struct pike_string *s=make_shared_string("_PSD"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); #define STRING(X) s_##X = make_shared_binary_string(#X,sizeof( #X )-sizeof("")); #include "psd_constant_strings.h" #undef STRING @@ -667,13 +657,8 @@ void init_image_psd() void exit_image_psd() { - if(image_encoding_psd_program) - { - free_program(image_encoding_psd_program); - image_encoding_psd_program=0; #define STRING(X) free_string(s_##X) #include "psd_constant_strings.h" #undef STRING - } } diff --git a/src/modules/Image/encodings/tga.c b/src/modules/Image/encodings/tga.c index 3a2ff2c2d8..96657ee27c 100644 --- a/src/modules/Image/encodings/tga.c +++ b/src/modules/Image/encodings/tga.c @@ -1,6 +1,6 @@ /* - * $Id: tga.c,v 1.6 1999/05/10 23:03:46 mirar Exp $ + * $Id: tga.c,v 1.7 1999/05/23 17:47:00 mirar Exp $ * * Targa codec for pike. Based on the tga plugin for gimp. * @@ -73,7 +73,7 @@ #include "image.h" #include "colortable.h" -RCSID("$Id: tga.c,v 1.6 1999/05/10 23:03:46 mirar Exp $"); +RCSID("$Id: tga.c,v 1.7 1999/05/23 17:47:00 mirar Exp $"); #ifndef MIN # define MIN(X,Y) ((X)<(Y)?(X):(Y)) @@ -428,7 +428,7 @@ static struct image_alpha ReadImage(struct buffer *fp, struct tga_header *hdr) int i, j, k; int pelbytes=0, npels, pels, read_so_far=0, rle=0; unsigned char *cmap=NULL, *data; - int itype; + int itype=0; int (*myfread)(unsigned char *, int, int, struct buffer *); @@ -829,7 +829,16 @@ void image_tga__decode( INT32 args ) push_object( i.ao ); push_constant_text( "image" ); push_object( i.io ); - f_aggregate_mapping( 4 ); + + push_constant_text( "type" ); + push_constant_text( "image/x-targa" ); + + push_constant_text( "xsize" ); + push_int( i.img->xsize ); + push_constant_text( "ysize" ); + push_int( i.img->ysize ); + + f_aggregate_mapping( 10 ); } /* @@ -932,33 +941,19 @@ void image_tga_encode( INT32 args ) static struct program *image_encoding_tga_program=NULL; void init_image_tga( ) { - start_new_program(); add_function( "_decode", image_tga__decode, "function(string:mapping(string:object))", 0); add_function( "decode", image_tga_decode, "function(string:object)", 0); add_function( "encode", image_tga_encode, "function(object,mapping|void:string)", 0); - image_encoding_tga_program=end_program(); - - push_object(clone_object(image_encoding_tga_program,0)); - { - struct pike_string *s=make_shared_string("TGA"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); + param_alpha=make_shared_string("alpha"); param_raw=make_shared_string("raw"); } void exit_image_tga(void) { - if(image_encoding_tga_program) - { - free_program(image_encoding_tga_program); - image_encoding_tga_program=0; - free_string(param_alpha); - free_string(param_raw); - } + free_string(param_alpha); + free_string(param_raw); } diff --git a/src/modules/Image/encodings/x.c b/src/modules/Image/encodings/x.c index 47e0fdc595..d0bc918105 100644 --- a/src/modules/Image/encodings/x.c +++ b/src/modules/Image/encodings/x.c @@ -1,9 +1,9 @@ -/* $Id: x.c,v 1.21 1999/05/20 14:08:56 mirar Exp $ */ +/* $Id: x.c,v 1.22 1999/05/23 17:47:01 mirar Exp $ */ /* **! module Image **! note -**! $Id: x.c,v 1.21 1999/05/20 14:08:56 mirar Exp $ +**! $Id: x.c,v 1.22 1999/05/23 17:47:01 mirar Exp $ **! submodule X **! **! This submodule handles encoding and decoding of @@ -29,7 +29,7 @@ #include <winsock.h> #endif -RCSID("$Id: x.c,v 1.21 1999/05/20 14:08:56 mirar Exp $"); +RCSID("$Id: x.c,v 1.22 1999/05/23 17:47:01 mirar Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -1092,9 +1092,6 @@ struct program *image_x_module_program=NULL; void init_image_x(void) { - struct pike_string *s; - start_new_program(); - add_function("encode_truecolor",image_x_encode_truecolor, "function(object,int,int,int,int,int,int,int,int,int,void|object:string)",0); add_function("encode_truecolor_masks",image_x_encode_truecolor_masks, @@ -1105,18 +1102,8 @@ void init_image_x(void) add_function("examine_mask",image_x_call_examine_mask, "function(int:array(int))",0); - image_x_module_program=end_program(); - push_object(clone_object(image_x_module_program,0)); - add_constant(s=make_shared_string("X"),sp-1,0); - free_string(s); - pop_stack(); } void exit_image_x(void) { - if(image_x_module_program) - { - free_program(image_x_module_program); - image_x_module_program=0; - } } diff --git a/src/modules/Image/encodings/xbm.c b/src/modules/Image/encodings/xbm.c index 6115aa7df4..46151716aa 100644 --- a/src/modules/Image/encodings/xbm.c +++ b/src/modules/Image/encodings/xbm.c @@ -1,5 +1,5 @@ #include "global.h" -RCSID("$Id: xbm.c,v 1.4 1999/05/10 23:03:47 mirar Exp $"); +RCSID("$Id: xbm.c,v 1.5 1999/05/23 17:47:02 mirar Exp $"); #include "config.h" @@ -422,22 +422,12 @@ void image_xbm_encode( INT32 args ) static struct program *image_encoding_xbm_program=NULL; void init_image_xbm( ) { - start_new_program(); add_function( "_decode", image_xbm__decode, "function(string,mapping|void:mapping(string:object))", 0); add_function( "decode", image_xbm_decode, "function(string:object)", 0); add_function( "encode", image_xbm_encode, "function(object,mapping|void:string)", 0); - image_encoding_xbm_program=end_program(); - - push_object(clone_object(image_encoding_xbm_program,0)); - { - struct pike_string *s=make_shared_string("XBM"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); param_name=make_shared_string("name"); param_fg=make_shared_string("fg"); param_bg=make_shared_string("bg"); @@ -446,13 +436,8 @@ void init_image_xbm( ) void exit_image_xbm(void) { - if(image_encoding_xbm_program) - { - free_program(image_encoding_xbm_program); - image_encoding_xbm_program=0; - free_string(param_name); - free_string(param_fg); - free_string(param_bg); - free_string(param_invert); - } + free_string(param_name); + free_string(param_fg); + free_string(param_bg); + free_string(param_invert); } diff --git a/src/modules/Image/encodings/xcf.c b/src/modules/Image/encodings/xcf.c index 5c16c5bcc2..99dbb5c560 100644 --- a/src/modules/Image/encodings/xcf.c +++ b/src/modules/Image/encodings/xcf.c @@ -1,5 +1,5 @@ #include "global.h" -RCSID("$Id: xcf.c,v 1.7 1999/04/15 04:08:39 hubbe Exp $"); +RCSID("$Id: xcf.c,v 1.8 1999/05/23 17:47:03 mirar Exp $"); #include "config.h" @@ -1233,7 +1233,6 @@ void image_xcf_f__decode_tiles( INT32 args ) static struct program *image_encoding_xcf_program=NULL; void init_image_xcf() { - start_new_program(); add_function( "___decode", image_xcf____decode, "function(string:mapping)", 0); @@ -1310,17 +1309,6 @@ void init_image_xcf() add_integer_constant( "INDEXED_GIMAGE", INDEXED_GIMAGE, 0 ); add_integer_constant( "INDEXEDA_GIMAGE", INDEXEDA_GIMAGE, 0 ); - image_encoding_xcf_program=end_program(); - - - push_object(clone_object(image_encoding_xcf_program,0)); - - { - struct pike_string *s=make_shared_string("_XCF"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); #define STRING(X) s_##X = make_shared_binary_string(#X,sizeof( #X )-sizeof("")); #include "xcf_constant_strings.h" #undef STRING @@ -1329,13 +1317,8 @@ void init_image_xcf() void exit_image_xcf() { - if(image_encoding_xcf_program) - { - free_program(image_encoding_xcf_program); - image_encoding_xcf_program=0; #define STRING(X) free_string(s_##X) #include "xcf_constant_strings.h" #undef STRING - } } diff --git a/src/modules/Image/encodings/xwd.c b/src/modules/Image/encodings/xwd.c index f95bbc6cb0..686835034f 100644 --- a/src/modules/Image/encodings/xwd.c +++ b/src/modules/Image/encodings/xwd.c @@ -1,9 +1,9 @@ -/* $Id: xwd.c,v 1.11 1999/05/20 14:08:14 mirar Exp $ */ +/* $Id: xwd.c,v 1.12 1999/05/23 17:47:04 mirar Exp $ */ /* **! module Image **! note -**! $Id: xwd.c,v 1.11 1999/05/20 14:08:14 mirar Exp $ +**! $Id: xwd.c,v 1.12 1999/05/23 17:47:04 mirar Exp $ **! submodule XWD **! **! This submodule keeps the XWD (X Windows Dump) @@ -25,7 +25,7 @@ #include <ctype.h> #include "stralloc.h" -RCSID("$Id: xwd.c,v 1.11 1999/05/20 14:08:14 mirar Exp $"); +RCSID("$Id: xwd.c,v 1.12 1999/05/23 17:47:04 mirar Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -393,9 +393,6 @@ struct program *image_xwd_module_program=NULL; void init_image_xwd(void) { - struct program *p; - start_new_program(); - add_function("_decode",image_xwd__decode, "function(string,void|int:mapping(string:int|array|object))",0); add_function("decode",image_xwd_decode, @@ -404,10 +401,6 @@ void init_image_xwd(void) add_function("decode_header",image_xwd_decode_header, "function(string:object)",0); - push_object(clone_object(p=end_program(),0)); - simple_add_constant("XWD",sp-1,0); - free_program(p); - pop_stack(); } void exit_image_xwd(void) diff --git a/src/modules/Image/font.c b/src/modules/Image/font.c index 4738ed2371..c6f8239764 100644 --- a/src/modules/Image/font.c +++ b/src/modules/Image/font.c @@ -1,4 +1,4 @@ -/* $Id: font.c,v 1.47 1999/04/25 20:03:36 grubba Exp $ */ +/* $Id: font.c,v 1.48 1999/05/23 17:46:40 mirar Exp $ */ #include "global.h" #include <config.h> @@ -7,7 +7,7 @@ /* **! module Image **! note -**! $Id: font.c,v 1.47 1999/04/25 20:03:36 grubba Exp $ +**! $Id: font.c,v 1.48 1999/05/23 17:46:40 mirar Exp $ **! class Font **! **! note @@ -877,9 +877,8 @@ int baseline(); // font baseline */ -void init_font_programs(void) +void init_image_font(void) { - start_new_program(); ADD_STORAGE(struct font*); /* function(string:object|int) */ @@ -919,19 +918,10 @@ void init_font_programs(void) set_init_callback(init_font_struct); set_exit_callback(exit_font_struct); - - font_program=end_program(); - add_program_constant("font",font_program, 0); /* compat */ - add_program_constant("Font",font_program, 0); } -void exit_font(void) +void exit_image_font(void) { - if(font_program) - { - free_program(font_program); - font_program=0; - } } diff --git a/src/modules/Image/image.c b/src/modules/Image/image.c index 431e461a9d..c8ad661283 100644 --- a/src/modules/Image/image.c +++ b/src/modules/Image/image.c @@ -1,9 +1,9 @@ -/* $Id: image.c,v 1.135 1999/05/20 17:34:35 mirar Exp $ */ +/* $Id: image.c,v 1.136 1999/05/23 17:46:41 mirar Exp $ */ /* **! module Image **! note -**! $Id: image.c,v 1.135 1999/05/20 17:34:35 mirar Exp $ +**! $Id: image.c,v 1.136 1999/05/23 17:46:41 mirar Exp $ **! class Image **! **! The main object of the <ref>Image</ref> module, this object @@ -97,7 +97,7 @@ #include "stralloc.h" #include "global.h" -RCSID("$Id: image.c,v 1.135 1999/05/20 17:34:35 mirar Exp $"); +RCSID("$Id: image.c,v 1.136 1999/05/23 17:46:41 mirar Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -3554,73 +3554,10 @@ extern void exit_image_hrz(void); extern void init_image_avs(void); extern void exit_image_avs(void); -/* dynamic encoders (dependent on other modules, loaded dynamically) */ - -extern struct object* init_image_png(void); -extern void exit_image_png(void); - -static struct pike_string - *magic_PNG; - -static struct object *png_object=NULL; - -static void image_index_magic(INT32 args) -{ - struct svalue tmp; - if (args!=1) - error("Image.`[]: Too few or too many arguments\n"); - if (sp[-1].type!=T_STRING) - error("Image.`[]: Illegal type of argument\n"); - - if (sp[-1].u.string==magic_PNG) - { - pop_stack(); - if (!png_object) - png_object=init_image_png(); - ref_push_object(png_object); - return; - } - - stack_dup(); - ref_push_object(THISOBJ); - stack_swap(); - f_arrow(2); - - if (sp[-1].type==T_INT) - { - pop_stack(); - push_text("_Image_"); - stack_swap(); - f_add(2); - push_int(0); - SAFE_APPLY_MASTER("resolv",2); - } - else - { - stack_swap(); - pop_stack(); - } -} - #define tRGB tOr3(tColor,tVoid,tInt) tOr(tInt,tVoid) tOr(tInt,tVoid) -void pike_module_init(void) +void init_image_image(void) { - int i; -#ifdef PIKE_DEBUG - struct svalue *save_sp = sp; -#define IMAGE_CHECK_STACK() do { if (save_sp != sp) { fatal("%s:%d: %d droppings on stack!\n", __FILE__, __LINE__, sp - save_sp); } } while(0) -#else -#define IMAGE_CHECK_STACK() -#endif /* PIKE_DEBUG */ - - magic_PNG=make_shared_string("PNG"); - - image_noise_init(); - - IMAGE_CHECK_STACK(); - - start_new_program(); ADD_STORAGE(struct image); ADD_FUNCTION("create",image_create, @@ -3912,90 +3849,10 @@ void pike_module_init(void) set_init_callback(init_image_struct); set_exit_callback(exit_image_struct); - - image_program=end_program(); - add_program_constant("image",image_program, 0); /* compat */ - add_program_constant("Image",image_program, 0); - - for (i=0; i<CIRCLE_STEPS; i++) - circle_sin_table[i]=(INT32)4096*sin(((double)i)*2.0*3.141592653589793/(double)CIRCLE_STEPS); - - init_font_programs(); - init_colortable_programs(); - init_image_colors(); - - ADD_FUNCTION("`[]",image_index_magic, - tFunc(tStr,tObj),0); - - init_image_gif(); - IMAGE_CHECK_STACK(); - init_image_pnm(); - IMAGE_CHECK_STACK(); - init_image_bmp(); - IMAGE_CHECK_STACK(); - init_image_xwd(); - IMAGE_CHECK_STACK(); - init_image_any(); - IMAGE_CHECK_STACK(); - init_image_tga(); - IMAGE_CHECK_STACK(); - init_image_pcx(); - IMAGE_CHECK_STACK(); - init_image_xbm(); - IMAGE_CHECK_STACK(); - init_image__xpm(); - IMAGE_CHECK_STACK(); - init_image_ilbm(); - IMAGE_CHECK_STACK(); - init_image_xcf(); - IMAGE_CHECK_STACK(); - init_image_psd(); - IMAGE_CHECK_STACK(); - init_image_x(); - IMAGE_CHECK_STACK(); - init_image_hrz(); - IMAGE_CHECK_STACK(); - init_image_avs(); - IMAGE_CHECK_STACK(); - init_image_layers(); - IMAGE_CHECK_STACK(); } -void pike_module_exit(void) +void exit_image_image(void) { - if(image_program) - { - free_program(image_program); - image_program=0; - } - exit_font(); - exit_colortable(); - exit_image_colors(); - - exit_image_gif(); - exit_image_pnm(); - exit_image_bmp(); - exit_image_xwd(); - exit_image_any(); - exit_image_tga(); - exit_image_pcx(); - exit_image__xpm(); - exit_image_xbm(); - exit_image_ilbm(); - exit_image_xcf(); - exit_image_psd(); - exit_image_hrz(); - exit_image_avs(); - exit_image_layers(); - if (png_object) - { - free_object(png_object); - png_object=NULL; - exit_image_png(); - } - exit_image_x(); - - free_string(magic_PNG); } diff --git a/src/modules/Image/image.h b/src/modules/Image/image.h index 82a0437769..2eb7a78871 100644 --- a/src/modules/Image/image.h +++ b/src/modules/Image/image.h @@ -1,7 +1,7 @@ /* **! module Image **! note -**! $Id: image.h,v 1.31 1999/05/20 17:08:03 mirar Exp $ +**! $Id: image.h,v 1.32 1999/05/23 17:46:43 mirar Exp $ */ #ifdef PIKE_IMAGE_IMAGE_H @@ -78,6 +78,7 @@ struct color_struct }; #define tColor tOr3(tArr(tInt),tString,tObj) +#define tLayerMap tMap(tString,tOr4(tString,tColor,tFloat,tInt)) /* COMPAT: encoding of a gif - from togif */ diff --git a/src/modules/Image/image_module.c b/src/modules/Image/image_module.c new file mode 100644 index 0000000000..0f296a9b10 --- /dev/null +++ b/src/modules/Image/image_module.c @@ -0,0 +1,216 @@ +#include "global.h" +#include "stralloc.h" +#include "global.h" +RCSID("$Id: image_module.c,v 1.1 1999/05/23 17:46:44 mirar Exp $"); +#include "pike_macros.h" +#include "interpret.h" +#include "program.h" +#include "object.h" +#include "operators.h" + +#include "image.h" + +#define IMAGE_INITER + + +#define IMAGE_CLASS(name,init,exit,prog) \ + void init(void); void exit(void); struct program *prog; +#define IMAGE_SUBMODULE(name,init,exit) \ + void init(void); void exit(void); +#define IMAGE_SUBMODMAG(name,init,exit) \ + void init(void); void exit(void); +#define IMAGE_FUNCTION(name,func,def0,def1) \ + void func(INT32 args); +#include "initstuff.h" + +static struct +{ + char *name; + void (*init)(void); + void (*exit)(void); + struct program **dest; +} initclass[]= +{ +#undef IMAGE_CLASS +#undef IMAGE_SUBMODULE +#undef IMAGE_FUNCTION +#undef IMAGE_SUBMODMAG +#define IMAGE_SUBMODMAG(a,b,c) +#define IMAGE_FUNCTION(a,b,c,d) +#define IMAGE_CLASS(name,init,exit,prog) { name,init,exit,&prog }, +#define IMAGE_SUBMODULE(a,b,c) +#include "initstuff.h" +}; + +static struct +{ + char *name; + void (*init)(void); + void (*exit)(void); +} initsubmodule[]= +{ +#undef IMAGE_CLASS +#undef IMAGE_SUBMODULE +#define IMAGE_CLASS(name,init,exit,prog) +#define IMAGE_SUBMODULE(name,init,exit) { name,init,exit }, +#include "initstuff.h" +}; + +static struct +{ + char *name; + void (*init)(void); + void (*exit)(void); + struct pike_string *ps; + struct object *o; +} submagic[]= +{ +#undef IMAGE_SUBMODULE +#undef IMAGE_SUBMODMAG +#define IMAGE_SUBMODULE(a,b,c) +#define IMAGE_SUBMODMAG(name,init,exit) { name,init,exit,NULL,NULL }, +#include "initstuff.h" +}; + +#ifdef PIKE_DEBUG +#define IMAGE_CHECK_STACK(X) do { if (save_sp != sp) { fatal("%s:%d: %d droppings on stack! previous init: %s\n", __FILE__, __LINE__, sp - save_sp,X); } } while(0) +#else +#define IMAGE_CHECK_STACK(X) +#endif /* PIKE_DEBUG */ + + +static void image_magic_index(INT32 args) +{ + struct svalue tmp; + int i; + + if (args!=1) + error("Image.`[]: Too few or too many arguments\n"); + if (sp[-1].type!=T_STRING) + error("Image.`[]: Illegal type of argument\n"); + + for (i=0; i<(int)NELEM(submagic); i++) + if (sp[-1].u.string==submagic[i].ps) + { +#ifdef PIKE_DEBUG + struct svalue *save_sp; +#endif + pop_stack(); + +#ifdef PIKE_DEBUG + save_sp = sp; +#endif + + if (!submagic[i].o) + { + struct program *p; + start_new_program(); + (submagic[i].init)(); + IMAGE_CHECK_STACK(submagic[i].name); + p=end_program(); + submagic[i].o=clone_object(p,0); + free_program(p); + } + + ref_push_object(submagic[i].o); + return; + } + + stack_dup(); + ref_push_object(fp->current_object); + stack_swap(); + f_arrow(2); + + if (sp[-1].type==T_INT) + { + pop_stack(); + push_text("_Image_"); + stack_swap(); + f_add(2); + push_int(0); + SAFE_APPLY_MASTER("resolv",2); + } + else + { + stack_swap(); + pop_stack(); + } +} + +void pike_module_init(void) +{ + char type_of_index[]= + tFunc(tStr,tOr3(tObj,tPrg,"")) +/* "\004" tStr "\021" tVoid */ +/* "\373" tObj "\373" tPrg */ + +#undef IMAGE_FUNCTION +#undef IMAGE_SUBMODMAG +#define IMAGE_SUBMODMAG(name,init,exit) +#define IMAGE_FUNCTION(name,func,def0,def1) tOr(def0,"") +#include "initstuff.h" + tFunc(tStr,tMixed); /* this */ + +#ifdef PIKE_DEBUG + struct svalue *save_sp = sp; +#endif + + int i; + for (i=0; i<(int)NELEM(initclass); i++) + { + start_new_program(); + (initclass[i].init)(); + IMAGE_CHECK_STACK(initclass[i].name); + initclass[i].dest[0]=end_program(); + add_program_constant(initclass[i].name,initclass[i].dest[0],0); + } + + for (i=0; i<(int)NELEM(initsubmodule); i++) + { + struct program *p; + struct pike_string *s; + + start_new_program(); + (initsubmodule[i].init)(); + IMAGE_CHECK_STACK(initsubmodule[i].name); + p=end_program(); + push_object(clone_object(p,0)); + s=make_shared_string(initsubmodule[i].name); + add_constant(s,sp-1,0); + free_string(s); + free_program(p); + pop_stack(); + } + + for (i=0; i<(int)NELEM(submagic); i++) + submagic[i].ps=make_shared_string(submagic[i].name); + +#undef IMAGE_FUNCTION +#define IMAGE_FUNCTION(name,func,def0,def1) ADD_FUNCTION(name,func,def0,def1); +#include "initstuff.h" + + quick_add_function("`[]",3,image_magic_index, + type_of_index,CONSTANT_STRLEN(type_of_index),0,0); + + /* compat stuff */ + add_program_constant("image",image_program,0); + add_program_constant("colortable",image_program,0); +} + +void pike_module_exit(void) +{ + int i; + for (i=0; i<(int)NELEM(initclass); i++) + { + (initclass[i].exit)(); + free_program(initclass[i].dest[0]); + } + for (i=0; i<(int)NELEM(initsubmodule); i++) + (initsubmodule[i].exit)(); + for (i=0; i<(int)NELEM(submagic); i++) + if (submagic[i].o) + { + (submagic[i].exit)(); + free_object(submagic[i].o); + } +} diff --git a/src/modules/Image/initstuff.h b/src/modules/Image/initstuff.h new file mode 100644 index 0000000000..58b987aaa7 --- /dev/null +++ b/src/modules/Image/initstuff.h @@ -0,0 +1,45 @@ +#ifndef IMAGE_INITER +#define IMAGE_CLASS(a,b,c,what) extern struct program *what; +#define IMAGE_SUBMODULE(a,b,c) +#define IMAGE_SUBMODMAG(a,b,c) +#define IMAGE_FUNCTION(a,name,c,d) void name(INT32 args); +#endif + +IMAGE_CLASS("Image", init_image_image, exit_image_image, + image_program ) + +IMAGE_CLASS("Colortable", init_image_colortable, exit_image_colortable, + image_colortable_program ) + +IMAGE_CLASS("Color", init_image_colors, exit_image_colors, + image_colors_program ) + +IMAGE_CLASS("Layer", init_image_layers, exit_image_layers, + image_layer_program ) + +IMAGE_CLASS("font", init_image_font, exit_image_font, + image_font_program ) + +IMAGE_SUBMODULE("ANY", init_image_any, exit_image_any ) +IMAGE_SUBMODULE("AVS", init_image_avs, exit_image_avs ) +IMAGE_SUBMODULE("BMP", init_image_bmp, exit_image_bmp ) +IMAGE_SUBMODULE("GD", init_image_gd, exit_image_gd ) +IMAGE_SUBMODULE("GIF", init_image_gif, exit_image_gif ) +IMAGE_SUBMODULE("HRZ", init_image_hrz, exit_image_hrz ) +IMAGE_SUBMODULE("ILBM", init_image_ilbm, exit_image_ilbm ) +IMAGE_SUBMODULE("PCX", init_image_pcx, exit_image_pcx ) +IMAGE_SUBMODULE("PNM", init_image_pnm, exit_image_pnm ) +IMAGE_SUBMODULE("PSD", init_image_psd, exit_image_psd ) +IMAGE_SUBMODULE("TGA", init_image_tga, exit_image_tga ) +IMAGE_SUBMODULE("X", init_image_x, exit_image_x ) +IMAGE_SUBMODULE("XBM", init_image_xbm, exit_image_xbm ) +IMAGE_SUBMODULE("XCF", init_image_xcf, exit_image_xcf ) +IMAGE_SUBMODULE("XWD", init_image_xwd, exit_image_xwd ) +IMAGE_SUBMODULE("_XPM", init_image__xpm, exit_image__xpm ) + +IMAGE_SUBMODMAG("PNG", init_image_png, exit_image_png ) + +IMAGE_FUNCTION("lay",image_lay, + tOr(tFunc(tArr(tOr(tObj,tLayerMap)),tObj), + tFunc(tArr(tOr(tObj,tLayerMap)) + tInt tInt tInt tInt,tObj)),0) diff --git a/src/modules/Image/layers.c b/src/modules/Image/layers.c index 0b0e7baab6..2a18dc9e98 100644 --- a/src/modules/Image/layers.c +++ b/src/modules/Image/layers.c @@ -1,7 +1,7 @@ /* **! module Image **! note -**! $Id: layers.c,v 1.11 1999/05/08 00:42:12 hubbe Exp $ +**! $Id: layers.c,v 1.12 1999/05/23 17:46:44 mirar Exp $ **! class Layer */ @@ -10,7 +10,7 @@ #include <math.h> /* floor */ -RCSID("$Id: layers.c,v 1.11 1999/05/08 00:42:12 hubbe Exp $"); +RCSID("$Id: layers.c,v 1.12 1999/05/23 17:46:44 mirar Exp $"); #include "config.h" @@ -2060,14 +2060,12 @@ void init_image_layers(void) for (i=0; i<LAYER_MODES; i++) layer_mode[i].ps=make_shared_string(layer_mode[i].name); - start_new_program(); + /* layer object */ ADD_STORAGE(struct layer); set_init_callback(init_layer); set_exit_callback(exit_layer); -#define tLayerMap tMap(tString,tOr4(tString,tColor,tFloat,tInt)) - ADD_FUNCTION("create",image_layer_create, tOr4(tFunc(,tVoid), tFunc(tObj tOr(tObj,tVoid) tOr(tString,tVoid),tVoid), @@ -2109,15 +2107,6 @@ void init_image_layers(void) ADD_FUNCTION("fill_alpha",image_layer_fill_alpha,tFunc(,tObj),0); ADD_FUNCTION("tiled",image_layer_tiled,tFunc(,tInt01),0); - - image_layer_program=end_program(); - - add_program_constant("Layer",image_layer_program,0); - - ADD_FUNCTION("lay",image_lay, - tOr(tFunc(tArr(tOr(tObj,tLayerMap)),tObj), - tFunc(tArr(tOr(tObj,tLayerMap)) - tInt tInt tInt tInt,tObj)),0); } void exit_image_layers(void) @@ -2126,10 +2115,4 @@ void exit_image_layers(void) for (i=0; i<LAYER_MODES; i++) free_string(layer_mode[i].ps); - - if (image_layer_program) - { - free_program(image_layer_program); - image_layer_program=NULL; - } } diff --git a/src/modules/Image/pattern.c b/src/modules/Image/pattern.c index 0bd4b53075..6dc60393de 100644 --- a/src/modules/Image/pattern.c +++ b/src/modules/Image/pattern.c @@ -1,9 +1,9 @@ -/* $Id: pattern.c,v 1.15 1999/04/13 12:32:30 mirar Exp $ */ +/* $Id: pattern.c,v 1.16 1999/05/23 17:46:45 mirar Exp $ */ /* **! module Image **! note -**! $Id: pattern.c,v 1.15 1999/04/13 12:32:30 mirar Exp $ +**! $Id: pattern.c,v 1.16 1999/05/23 17:46:45 mirar Exp $ **! class Image */ @@ -545,9 +545,3 @@ void image_random(INT32 args) push_object(o); } - - -void image_noise_init(void) -{ - -} -- GitLab