diff --git a/src/modules/Image/encodings/png.c b/src/modules/Image/encodings/png.c index db63b791735cbf5477ebfe60501a0de0e9717c5c..06a71e519a12d7fda49b028a075ef6b4197fd65c 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.4 1998/04/02 01:07:03 mirar Exp $"); +RCSID("$Id: png.c,v 1.5 1998/04/03 00:18:31 mirar Exp $"); #include "config.h" @@ -1097,7 +1097,7 @@ void exit_image_png(void) free_string(param_type); } -void init_image_png(void) +struct object *init_image_png(void) { start_new_program(); @@ -1164,12 +1164,6 @@ void init_image_png(void) param_alpha=make_shared_string("alpha"); param_bpp=make_shared_string("bpp"); param_type=make_shared_string("type"); - - push_object(clone_object(end_program(),0)); - { - struct pike_string *s=make_shared_string("PNG"); - add_constant(s,sp-1,0); - free_string(s); - } - pop_stack(); + + return clone_object(end_program(),0); } diff --git a/src/modules/Image/image.c b/src/modules/Image/image.c index f500652ef0dee0079ca9ef602ad6630a387013a7..7eb1412781af4103f4685207dd0407391165fcae 100644 --- a/src/modules/Image/image.c +++ b/src/modules/Image/image.c @@ -1,9 +1,9 @@ -/* $Id: image.c,v 1.94 1998/04/01 05:37:21 mirar Exp $ */ +/* $Id: image.c,v 1.95 1998/04/03 00:18:29 mirar Exp $ */ /* **! module Image **! note -**! $Id: image.c,v 1.94 1998/04/01 05:37:21 mirar Exp $ +**! $Id: image.c,v 1.95 1998/04/03 00:18:29 mirar Exp $ **! class image **! **! The main object of the <ref>Image</ref> module, this object @@ -82,7 +82,7 @@ #include "stralloc.h" #include "global.h" -RCSID("$Id: image.c,v 1.94 1998/04/01 05:37:21 mirar Exp $"); +RCSID("$Id: image.c,v 1.95 1998/04/03 00:18:29 mirar Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -3124,22 +3124,30 @@ extern void init_font_programs(void); extern void exit_font(void); extern void init_colortable_programs(void); extern void exit_colortable(void); + +/* encoders */ + extern void init_image_gif(void); extern void exit_image_gif(void); extern void init_image_pnm(void); extern void exit_image_pnm(void); extern void init_image_xwd(void); extern void exit_image_xwd(void); -extern void init_image_png(void); -extern void exit_image_png(void); extern void init_image_x(void); extern void exit_image_x(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_JPEG, *magic_XFace, *magic_PNG; +static struct object *png_object=NULL; + static void image_index_magic(INT32 args) { struct svalue tmp; @@ -3163,6 +3171,15 @@ static void image_index_magic(INT32 args) SAFE_APPLY_MASTER("resolv",2); return; } + else if (sp[-1].u.string==magic_PNG) + { + pop_stack(); + if (!png_object) + png_object=init_image_png(); + png_object->refs++; + push_object(png_object); + return; + } push_object(THISOBJ); THISOBJ->refs++; tmp=sp[-1], sp[-1]=sp[-2], sp[-2]=tmp; f_arrow(2); @@ -3404,7 +3421,6 @@ void pike_module_init(void) init_image_gif(); init_image_pnm(); init_image_xwd(); - init_image_png(); init_image_x(); } @@ -3421,7 +3437,12 @@ void pike_module_exit(void) exit_image_gif(); exit_image_pnm(); exit_image_xwd(); - exit_image_png(); + 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_JPEG/image_jpeg.c b/src/modules/_Image_JPEG/image_jpeg.c index 18bae57342438dce014f064ca17769d169fffd83..12a1520c5385ef78eea1dafed418524000d43545 100644 --- a/src/modules/_Image_JPEG/image_jpeg.c +++ b/src/modules/_Image_JPEG/image_jpeg.c @@ -1,5 +1,5 @@ /* - * $Id: image_jpeg.c,v 1.13 1998/03/28 13:45:55 grubba Exp $ + * $Id: image_jpeg.c,v 1.14 1998/04/03 00:18:33 mirar Exp $ */ #include "config.h" @@ -22,7 +22,7 @@ #undef HAVE_STDLIB_H #endif #include "global.h" -RCSID("$Id: image_jpeg.c,v 1.13 1998/03/28 13:45:55 grubba Exp $"); +RCSID("$Id: image_jpeg.c,v 1.14 1998/04/03 00:18:33 mirar Exp $"); #include "pike_macros.h" #include "object.h" @@ -40,7 +40,12 @@ RCSID("$Id: image_jpeg.c,v 1.13 1998/03/28 13:45:55 grubba Exp $"); #include "../Image/image.h" +#ifdef DYNAMIC_MODULE static struct program *image_program=NULL; +#else +extern struct program *image_program=NULL; +/* Image module is probably linked static too. */ +#endif #endif /* HAVE_JPEGLIB_H */ @@ -594,6 +599,7 @@ void pike_module_exit(void) void pike_module_init(void) { #ifdef HAVE_JPEGLIB_H +#ifdef DYNAMIC_MODULE push_string(make_shared_string("Image")); push_int(0); SAFE_APPLY_MASTER("resolv",2); @@ -604,6 +610,7 @@ void pike_module_init(void) image_program=program_from_svalue(sp-1); } pop_n_elems(1); +#endif /* DYNAMIC_MODULE */ if (image_program) { diff --git a/src/modules/_Image_XFace/image_xface.c b/src/modules/_Image_XFace/image_xface.c index 673fde3c195cd5f14a13d3ab197cf33911a56a20..4d123d59329dd70e24d1ad08c12ae34965afe27e 100644 --- a/src/modules/_Image_XFace/image_xface.c +++ b/src/modules/_Image_XFace/image_xface.c @@ -1,5 +1,5 @@ #include "global.h" -RCSID("$Id: image_xface.c,v 1.1 1998/02/13 18:57:23 marcus Exp $"); +RCSID("$Id: image_xface.c,v 1.2 1998/04/03 00:18:34 mirar Exp $"); #include "config.h" @@ -29,7 +29,12 @@ RCSID("$Id: image_xface.c,v 1.1 1998/02/13 18:57:23 marcus Exp $"); #include "../Image/image.h" +#ifdef DYNAMIC_MODULE static struct program *image_program=NULL; +#else +extern struct program *image_program=NULL; +/* Image module is probably linked static too. */ +#endif #endif /* HAVE_GMP_H */ @@ -285,6 +290,7 @@ void pike_module_exit(void) void pike_module_init(void) { #ifdef HAVE_GMP_H +#ifdef DYNAMIC_MODULE push_string(make_shared_string("Image")); push_int(0); SAFE_APPLY_MASTER("resolv",2); @@ -295,6 +301,7 @@ void pike_module_init(void) image_program=program_from_svalue(sp-1); } pop_n_elems(1); +#endif /* DYNAMIC_MODULE */ if (image_program) {