Files
gimp/plug-ins/perl/Gimp.xs
Sven Neumann a56949222f HACKING Makefile.am acconfig.h autogen.sh use AM_GLIB_GNU_GETTEXT. Since
2001-09-27  Sven Neumann  <sven@gimp.org>

        * HACKING
        * Makefile.am
        * acconfig.h
        * autogen.sh
        * configure.in: use AM_GLIB_GNU_GETTEXT. Since glib and GTK+ rely on
        gettext being available, we don't need to ship with the option to use
        an included implementation. The intl subdirectory will not be created
        anymore. Had to put the old sed hacks back in that create Makefiles
        from Makefile.in in the extra po directories.

        * almost all Makefile.am: removed $(top_srcdir)/intl from INCLUDES.

        * app/main.c
        * libgimp/stdplugins-intl.h
        * plug-ins/perl/Gimp.xs
        * plug-ins/script-fu/script-fu-intl.h: changed package names to
        gimp14* so the po files don't clash with gimp12.
2001-09-27 15:33:53 +00:00

297 lines
7.5 KiB
Plaintext

#include "config.h"
#include <libgimp/gimp.h>
#include <libgimp/gimpexport.h>
#include <locale.h>
/* FIXME */
/* sys/param.h is redefining these! */
#undef MIN
#undef MAX
/* dunno where this comes from */
#undef VOIDUSED
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#define NEED_newCONSTSUB
#include "gppport.h"
#include "perl-intl.h"
/* FIXME */
/* dirty is used in gimp.h. */
#ifdef dirty
# undef dirty
#endif
#include "extradefs.h"
#if GIMP_MAJOR_VERSION>1 || (GIMP_MAJOR_VERSION==1 && GIMP_MINOR_VERSION>=1)
# define GIMP11 1
# define GIMP_PARASITE 1
#endif
#ifndef HAVE_EXIT
/* expect iso-c here. */
# include <signal.h>
#endif
MODULE = Gimp PACKAGE = Gimp
PROTOTYPES: ENABLE
void
_exit()
CODE:
#ifdef HAVE__EXIT
_exit(0);
#elif defined(SIGKILL)
raise(SIGKILL);
#else
raise(9)
#endif
abort();
BOOT:
#ifdef ENABLE_NLS
setlocale (LC_MESSAGES, ""); /* calling twice doesn't hurt, no? */
bindtextdomain ("gimp14-perl", datadir "/locale");
textdomain ("gimp14-perl");
#endif
char *
bindtextdomain(d,dir)
char * d
char * dir
char *
textdomain(d)
char * d
char *
gettext(s)
char * s
char *
dgettext(d,s)
char * d
char * s
char *
__(s)
char * s
PROTOTYPE: $
void
xs_exit(status)
int status
CODE:
exit (status);
BOOT:
{
HV *stash = gv_stashpvn("Gimp", 4, TRUE);
newCONSTSUB(stash,"PDB_BOUNDARY",newSViv(GIMP_PDB_BOUNDARY));
newCONSTSUB(stash,"PDB_CHANNEL",newSViv(GIMP_PDB_CHANNEL));
newCONSTSUB(stash,"PDB_COLOR",newSViv(GIMP_PDB_COLOR));
newCONSTSUB(stash,"PDB_DISPLAY",newSViv(GIMP_PDB_DISPLAY));
newCONSTSUB(stash,"PDB_DRAWABLE",newSViv(GIMP_PDB_DRAWABLE));
newCONSTSUB(stash,"PDB_END",newSViv(GIMP_PDB_END));
newCONSTSUB(stash,"PDB_FLOAT",newSViv(GIMP_PDB_FLOAT));
newCONSTSUB(stash,"PDB_FLOATARRAY",newSViv(GIMP_PDB_FLOATARRAY));
newCONSTSUB(stash,"PDB_IMAGE",newSViv(GIMP_PDB_IMAGE));
newCONSTSUB(stash,"PDB_INT16",newSViv(GIMP_PDB_INT16));
newCONSTSUB(stash,"PDB_INT16ARRAY",newSViv(GIMP_PDB_INT16ARRAY));
newCONSTSUB(stash,"PDB_INT32",newSViv(GIMP_PDB_INT32));
newCONSTSUB(stash,"PDB_INT32ARRAY",newSViv(GIMP_PDB_INT32ARRAY));
newCONSTSUB(stash,"PDB_INT8",newSViv(GIMP_PDB_INT8));
newCONSTSUB(stash,"PDB_INT8ARRAY",newSViv(GIMP_PDB_INT8ARRAY));
newCONSTSUB(stash,"PDB_LAYER",newSViv(GIMP_PDB_LAYER));
newCONSTSUB(stash,"PDB_PATH",newSViv(GIMP_PDB_PATH));
newCONSTSUB(stash,"PDB_REGION",newSViv(GIMP_PDB_REGION));
newCONSTSUB(stash,"PDB_SELECTION",newSViv(GIMP_PDB_SELECTION));
newCONSTSUB(stash,"PDB_STATUS",newSViv(GIMP_PDB_STATUS));
newCONSTSUB(stash,"PDB_STRING",newSViv(GIMP_PDB_STRING));
newCONSTSUB(stash,"PDB_STRINGARRAY",newSViv(GIMP_PDB_STRINGARRAY));
#if GIMP_PARASITE
newCONSTSUB(stash,"PDB_PARASITE",newSViv(GIMP_PDB_PARASITE));
newCONSTSUB(stash,"PARASITE_PERSISTENT",newSViv(GIMP_PARASITE_PERSISTENT));
newCONSTSUB(stash,"PARASITE_UNDOABLE",newSViv(GIMP_PARASITE_UNDOABLE));
newCONSTSUB(stash,"PARASITE_ATTACH_PARENT",newSViv(GIMP_PARASITE_ATTACH_PARENT));
newCONSTSUB(stash,"PARASITE_PARENT_PERSISTENT",newSViv(GIMP_PARASITE_PARENT_PERSISTENT));
newCONSTSUB(stash,"PARASITE_PARENT_UNDOABLE",newSViv(GIMP_PARASITE_PARENT_UNDOABLE));
newCONSTSUB(stash,"PARASITE_ATTACH_GRANDPARENT",newSViv(GIMP_PARASITE_ATTACH_GRANDPARENT));
newCONSTSUB(stash,"PARASITE_GRANDPARENT_PERSISTENT",newSViv(GIMP_PARASITE_GRANDPARENT_PERSISTENT));
newCONSTSUB(stash,"PARASITE_GRANDPARENT_UNDOABLE",newSViv(GIMP_PARASITE_GRANDPARENT_UNDOABLE));
#endif
newCONSTSUB(stash,"TRACE_NONE",newSViv(TRACE_NONE));
newCONSTSUB(stash,"TRACE_CALL",newSViv(TRACE_CALL));
newCONSTSUB(stash,"TRACE_TYPE",newSViv(TRACE_TYPE));
newCONSTSUB(stash,"TRACE_NAME",newSViv(TRACE_NAME));
newCONSTSUB(stash,"TRACE_DESC",newSViv(TRACE_DESC));
newCONSTSUB(stash,"TRACE_ALL" ,newSViv(TRACE_ALL ));
/**/
#if HAVE_DIVIDE_MODE || IN_GIMP
/*newCONSTSUB(stash,"GIMP_DIVIDE_MODE",newSViv(GIMP_DIVIDE_MODE));*/
#endif
newCONSTSUB(stash,"EXPORT_CAN_HANDLE_RGB", newSViv(GIMP_EXPORT_CAN_HANDLE_RGB));
newCONSTSUB(stash,"EXPORT_CAN_HANDLE_GRAY", newSViv(GIMP_EXPORT_CAN_HANDLE_GRAY));
newCONSTSUB(stash,"EXPORT_CAN_HANDLE_INDEXED", newSViv(GIMP_EXPORT_CAN_HANDLE_INDEXED));
newCONSTSUB(stash,"EXPORT_CAN_HANDLE_ALPHA ", newSViv(GIMP_EXPORT_CAN_HANDLE_ALPHA ));
newCONSTSUB(stash,"EXPORT_CAN_HANDLE_LAYERS", newSViv(GIMP_EXPORT_CAN_HANDLE_LAYERS));
newCONSTSUB(stash,"EXPORT_CAN_HANDLE_LAYERS_AS_ANIMATION", newSViv(GIMP_EXPORT_CAN_HANDLE_LAYERS_AS_ANIMATION));
newCONSTSUB(stash,"EXPORT_NEEDS_ALPHA", newSViv(GIMP_EXPORT_NEEDS_ALPHA));
newCONSTSUB(stash,"EXPORT_CANCEL", newSViv(GIMP_EXPORT_CANCEL));
newCONSTSUB(stash,"EXPORT_IGNORE", newSViv(GIMP_EXPORT_CANCEL));
newCONSTSUB(stash,"EXPORT_EXPORT", newSViv(GIMP_EXPORT_EXPORT));
}
MODULE = Gimp PACKAGE = Gimp::RAW
# some raw byte/bit-manipulation (e.g. for avi and miff), use PDL instead
# mostly undocumented as well...
void
reverse_v_inplace (datasv, bpl)
SV * datasv
IV bpl
CODE:
char *line, *data, *end;
STRLEN h;
data = SvPV (datasv, h); h /= bpl;
end = data + (h-1) * bpl;
New (0, line, bpl, char);
while (data < end)
{
Move (data, line, bpl, char);
Move (end, data, bpl, char);
Move (line, end, bpl, char);
data += bpl;
end -= bpl;
}
Safefree (line);
OUTPUT:
datasv
void
convert_32_24_inplace (datasv)
SV * datasv
CODE:
STRLEN dc;
char *data, *src, *dst, *end;
data = SvPV (datasv, dc); end = data + dc;
for (src = dst = data; src < end; )
{
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
*src++;
}
SvCUR_set (datasv, dst - data);
OUTPUT:
datasv
void
convert_24_15_inplace (datasv)
SV * datasv
CODE:
STRLEN dc;
char *data, *src, *dst, *end;
U16 m31d255[256];
for (dc = 256; dc--; )
m31d255[dc] = (dc*31+127)/255;
data = SvPV (datasv, dc); end = data + dc;
for (src = dst = data; src < end; )
{
unsigned int r = *(U8 *)src++;
unsigned int g = *(U8 *)src++;
unsigned int b = *(U8 *)src++;
U16 rgb = m31d255[r]<<10 | m31d255[g]<<5 | m31d255[b];
*dst++ = rgb & 0xff;
*dst++ = rgb >> 8;
}
SvCUR_set (datasv, dst - data);
OUTPUT:
datasv
void
convert_15_24_inplace (datasv)
SV * datasv
CODE:
STRLEN dc, de;
char *data, *src, *dst;
U8 m255d31[32];
for (dc = 32; dc--; )
m255d31[dc] = (dc*255+15)/31;
data = SvPV (datasv, dc); dc &= ~1;
de = dc + (dc >> 1);
SvGROW (datasv, de);
SvCUR_set (datasv, de);
data = SvPV (datasv, de); src = data + dc;
dst = data + de;
while (src != dst)
{
U16 rgb = *(U8 *)--src << 8 | *(U8 *)--src;
*(U8 *)--dst = m255d31[ rgb & 0x001f ];
*(U8 *)--dst = m255d31[(rgb & 0x03e0) >> 5];
*(U8 *)--dst = m255d31[(rgb & 0x7c00) >> 10];
}
OUTPUT:
datasv
void
convert_bgr_rgb_inplace (datasv)
SV * datasv
CODE:
char *data, *end;
data = SvPV_nolen (datasv);
end = SvEND (datasv);
while (data < end)
{
char x = data[0];
data[0] = data[2];
data[2] = x;
data += 3;
}
OUTPUT:
datasv