* prepeared libgd for dynamic loading support

git-svn-id: trunk@14151 -
This commit is contained in:
ivost 2009-11-12 00:59:53 +00:00
parent e7734027c4
commit f9f9a2e2b1

View File

@ -5,50 +5,38 @@
unit gd;
{$mode objfpc}
{$macro on}
{$h+}
{$MODE objfpc}
{$MACRO on}
{$H+}
{$MINENUMSIZE 4}
interface
uses
Classes,
dynlibs,
ctypes;
//{$if defined(FPC_HAS_FEATURE_DYNLIBS) and (not defined(go32v2))}
// {$define DYNLINK}
//{$endif}
{$IFDEF UNIX}
{$DEFINE EXTDECL := cdecl}
const
gdlib = 'libgd.'+sharedsuffix;
clib = 'libc.'+sharedsuffix;
{$ENDIF}
{$IFDEF WINDOWS}
{$DEFINE DYNLINK}
{$DEFINE EXTDECL := stdcall}
const
gdlib = 'bgd.dll';
clib = 'msvcrt.dll';
{$ENDIF}
{$IFDEF DYNLINK}
const
{$IF Defined(WINDOWS)}
gdlib = 'bgd.dll';
clib = 'msvcrt.dll';
{$ELSEIF Defined(UNIX)}
gdlib = 'libgd.so';
clib = 'libc.so';
{$ELSE}
{$MESSAGE ERROR 'DYNLINK not supported'}
{$IFEND}
{$ELSE}
{$LINKLIB gd}
{$LINKLIB c}
{$IFNDEF LOAD_DYNAMICALLY}
{$IFDEF darwin}
{$linklib c}
{$linklib gd}
{$ENDIF}
{$ENDIF}
{$DEFINE BGD_DECLARE := external {$IFDEF DYNLINK}gdlib{$ENDIF}}
{$DEFINE BGD_DECLARE_CLIB := external {$IFDEF DYNLINK}clib{$ENDIF}}
{$IF Defined(WINDOWS)}
{$DEFINE EXTCALL := stdcall}
{$ELSE}
{$DEFINE EXTCALL := cdecl}
{$IFEND}
type
ppcint = ^pcint;
ppbyte = ^pbyte;
@ -79,18 +67,18 @@ const
type
gdIOCtxPtr = ^gdIOCtx;
gdIOCtx = record
getC : function(ctx: gdIOCtxPtr): cint; EXTCALL;
getBuf : function(ctx: gdIOCtxPtr; buf: pointer; len: cint): cint; EXTCALL;
putC : procedure(ctx: gdIOCtxPtr; len: cint); EXTCALL;
putBuf : procedure(ctx: gdIOCtxPtr; buf: pointer; len: cint); EXTCALL;
getC : function(ctx: gdIOCtxPtr): cint; EXTDECL;
getBuf : function(ctx: gdIOCtxPtr; buf: pointer; len: cint): cint; EXTDECL;
putC : procedure(ctx: gdIOCtxPtr; len: cint); EXTDECL;
putBuf : procedure(ctx: gdIOCtxPtr; buf: pointer; len: cint); EXTDECL;
(* seek must return 1 on SUCCESS, 0 on FAILURE. Unlike fseek! *)
seek : function(ctx: gdIOCtxPtr; pos: cint): cint; EXTCALL;
tell : function(ctx: gdIOCtxPtr): clong; EXTCALL;
gd_free : procedure(ctx: gdIOCtxPtr); EXTCALL;
seek : function(ctx: gdIOCtxPtr; pos: cint): cint; EXTDECL;
tell : function(ctx: gdIOCtxPtr): clong; EXTDECL;
gd_free : procedure(ctx: gdIOCtxPtr); EXTDECL;
end;
function fopen(filename, rights: pchar): PFile; EXTCALL; BGD_DECLARE_CLIB;
procedure fclose(f: PFile); EXTCALL; BGD_DECLARE_CLIB;
function fopen(filename, rights: pchar): PFile; EXTDECL; external clib;
procedure fclose(f: PFile); EXTDECL; external clib;
(* The maximum number of palette entries in palette-based images.
In the wonderful new world of gd 2.0, you can of course have
@ -138,7 +126,7 @@ function gdTrueColorGetBlue(c: cint): cint; inline;
based on the alpha channel value of the source color.
The resulting color is opaque. *)
function gdAlphaBlend(dest: cint; src: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdAlphaBlend@8'{$ENDIF};
function gdAlphaBlend(dest: cint; src: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdAlphaBlend@8'{$ENDIF};
type
gdImagePtr = ^gdImage;
@ -260,33 +248,33 @@ const
(* Functions to manipulate images. *)
(* Creates a palette-based image(up to 256 colors). *)
function gdImageCreate(sx: cint; sy: cint): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreate@8'{$ENDIF};
function gdImageCreate(sx: cint; sy: cint): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreate@8'{$ENDIF};
(* An alternate name for the above(2.0). *)
function gdImageCreatePalette(sx: cint; sy: cint): gdImagePtr;
(* Creates a truecolor image(millions of colors). *)
function gdImageCreateTrueColor(sx: cint; sy: cint): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateTrueColor@8'{$ENDIF};
function gdImageCreateTrueColor(sx: cint; sy: cint): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateTrueColor@8'{$ENDIF};
(* Creates an image from various file types. These functions
return a palette or truecolor image based on the
nature of the file being loaded. Truecolor PNG
stays truecolor; palette PNG stays palette-based;
JPEG is always truecolor. *)
function gdImageCreateFromPng(fd: PFILE): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromPng@4'{$ENDIF};
function gdImageCreateFromPngCtx(_in: gdIOCtxPtr): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromPngCtx@4'{$ENDIF};
function gdImageCreateFromPngPtr(size: cint; data: pointer): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromPngPtr@8'{$ENDIF};
function gdImageCreateFromPng(fd: PFILE): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromPng@4'{$ENDIF};
function gdImageCreateFromPngCtx(_in: gdIOCtxPtr): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromPngCtx@4'{$ENDIF};
function gdImageCreateFromPngPtr(size: cint; data: pointer): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromPngPtr@8'{$ENDIF};
(* These read the first frame only *)
function gdImageCreateFromGif(fd: PFILE): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromGif@4'{$ENDIF};
function gdImageCreateFromGifCtx(_in: gdIOCtxPtr): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromGifCtx@4'{$ENDIF};
function gdImageCreateFromGifPtr(size: cint; data: pointer): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromGifPtr@8'{$ENDIF};
function gdImageCreateFromWBMP(fd: PFILE): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromWBMP@4'{$ENDIF};
function gdImageCreateFromWBMPCtx(_in: gdIOCtxPtr): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromWBMPCtx@4'{$ENDIF};
function gdImageCreateFromWBMPPtr(size: cint; data: pointer): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromWBMPPtr@8'{$ENDIF};
function gdImageCreateFromJpeg(fd: PFILE): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromJpeg@4'{$ENDIF};
function gdImageCreateFromJpegCtx(_in: gdIOCtxPtr): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromJpegCtx@4'{$ENDIF};
function gdImageCreateFromJpegPtr(size: cint; data: pointer): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromJpegPtr@8'{$ENDIF};
function gdImageCreateFromGif(fd: PFILE): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromGif@4'{$ENDIF};
function gdImageCreateFromGifCtx(_in: gdIOCtxPtr): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromGifCtx@4'{$ENDIF};
function gdImageCreateFromGifPtr(size: cint; data: pointer): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromGifPtr@8'{$ENDIF};
function gdImageCreateFromWBMP(fd: PFILE): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromWBMP@4'{$ENDIF};
function gdImageCreateFromWBMPCtx(_in: gdIOCtxPtr): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromWBMPCtx@4'{$ENDIF};
function gdImageCreateFromWBMPPtr(size: cint; data: pointer): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromWBMPPtr@8'{$ENDIF};
function gdImageCreateFromJpeg(fd: PFILE): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromJpeg@4'{$ENDIF};
function gdImageCreateFromJpegCtx(_in: gdIOCtxPtr): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromJpegCtx@4'{$ENDIF};
function gdImageCreateFromJpegPtr(size: cint; data: pointer): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromJpegPtr@8'{$ENDIF};
(* A custom data source. *)
(* The source function must return -1 on error, otherwise the number
@ -296,31 +284,31 @@ function gdImageCreateFromJpegPtr(size: cint; data: pointer): gdImagePtr; EXTCAL
type
gdSourcePtr = ^gdSource;
gdSource = record
source : function(context: pointer; buffer: pchar; len: cint): cint; EXTCALL;
source : function(context: pointer; buffer: pchar; len: cint): cint; EXTDECL;
context : pointer;
end;
(* Deprecated in favor of gdImageCreateFromPngCtx *)
function gdImageCreateFromPngSource(_in: gdSourcePtr): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromPngSource@4'{$ENDIF};
function gdImageCreateFromPngSource(_in: gdSourcePtr): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromPngSource@4'{$ENDIF};
function gdImageCreateFromGd(_in: PFILE): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromGd@4'{$ENDIF};
function gdImageCreateFromGdCtx(_in: gdIOCtxPtr): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromGdCtx@4'{$ENDIF};
function gdImageCreateFromGdPtr(size: cint; data: pointer): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromGdPtr@8'{$ENDIF};
function gdImageCreateFromGd(_in: PFILE): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromGd@4'{$ENDIF};
function gdImageCreateFromGdCtx(_in: gdIOCtxPtr): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromGdCtx@4'{$ENDIF};
function gdImageCreateFromGdPtr(size: cint; data: pointer): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromGdPtr@8'{$ENDIF};
function gdImageCreateFromGd2(_in: PFILE): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromGd2@4'{$ENDIF};
function gdImageCreateFromGd2Ctx(_in: gdIOCtxPtr): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromGd2Ctx@4'{$ENDIF};
function gdImageCreateFromGd2Ptr(size: cint; data: pointer): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromGd2Ptr@8'{$ENDIF};
function gdImageCreateFromGd2(_in: PFILE): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromGd2@4'{$ENDIF};
function gdImageCreateFromGd2Ctx(_in: gdIOCtxPtr): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromGd2Ctx@4'{$ENDIF};
function gdImageCreateFromGd2Ptr(size: cint; data: pointer): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromGd2Ptr@8'{$ENDIF};
function gdImageCreateFromGd2Part(_in: PFILE; srcx: cint; srcy: cint; w: cint; h: cint): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromGd2Part@20'{$ENDIF};
function gdImageCreateFromGd2PartCtx(_in: gdIOCtxPtr; srcx: cint; srcy: cint; w: cint; h: cint): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromGd2PartCtx@20'{$ENDIF};
function gdImageCreateFromGd2PartPtr(size: cint; data: pointer; srcx: cint; srcy: cint; w: cint; h: cint): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromGd2PartCtx@24'{$ENDIF};
function gdImageCreateFromGd2Part(_in: PFILE; srcx: cint; srcy: cint; w: cint; h: cint): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromGd2Part@20'{$ENDIF};
function gdImageCreateFromGd2PartCtx(_in: gdIOCtxPtr; srcx: cint; srcy: cint; w: cint; h: cint): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromGd2PartCtx@20'{$ENDIF};
function gdImageCreateFromGd2PartPtr(size: cint; data: pointer; srcx: cint; srcy: cint; w: cint; h: cint): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromGd2PartCtx@24'{$ENDIF};
(* 2.0.10: prototype was missing *)
function gdImageCreateFromXbm(_in: PFILE): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromXbm@4'{$ENDIF};
function gdImageCreateFromXbm(_in: PFILE): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromXbm@4'{$ENDIF};
(* NOTE: filename, not FILE *)
function gdImageCreateFromXpm(filename: pchar): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreateFromXpm@4'{$ENDIF};
function gdImageCreateFromXpm(filename: pchar): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreateFromXpm@4'{$ENDIF};
procedure gdImageDestroy(im: gdImagePtr); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageDestroy@4'{$ENDIF};
procedure gdImageDestroy(im: gdImagePtr); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageDestroy@4'{$ENDIF};
(* Replaces or blends with the background depending on the
most recent call to gdImageAlphaBlending and the
@ -329,54 +317,54 @@ procedure gdImageDestroy(im: gdImagePtr); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}n
here. All other gd drawing functions pass through this call,
allowing for many useful effects. *)
procedure gdImageSetPixel(im: gdImagePtr; x: cint; y: cint; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageSetPixel@16'{$ENDIF};
procedure gdImageSetPixel(im: gdImagePtr; x: cint; y: cint; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageSetPixel@16'{$ENDIF};
(* FreeType 2 text output with hook to extra flags *)
function gdImageGetPixel(im: gdImagePtr; x: cint; y: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageGetPixel@12'{$ENDIF};
function gdImageGetTrueColorPixel(im: gdImagePtr; x: cint; y: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageGetTrueColorPixel@12'{$ENDIF};
function gdImageGetPixel(im: gdImagePtr; x: cint; y: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageGetPixel@12'{$ENDIF};
function gdImageGetTrueColorPixel(im: gdImagePtr; x: cint; y: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageGetTrueColorPixel@12'{$ENDIF};
procedure gdImageAABlend(im: gdImagePtr); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageAABlend@4'{$ENDIF};
procedure gdImageAABlend(im: gdImagePtr); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageAABlend@4'{$ENDIF};
procedure gdImageLine(im: gdImagePtr; x1: cint; y1: cint; x2: cint; y2: cint; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageLine@24'{$ENDIF};
procedure gdImageLine(im: gdImagePtr; x1: cint; y1: cint; x2: cint; y2: cint; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageLine@24'{$ENDIF};
(* For backwards compatibility only. Use gdImageSetStyle()
for much more flexible line drawing. *)
procedure gdImageDashedLine(im: gdImagePtr; x1: cint; y1: cint; x2: cint; y2: cint; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageDashedLine@24'{$ENDIF};
procedure gdImageDashedLine(im: gdImagePtr; x1: cint; y1: cint; x2: cint; y2: cint; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageDashedLine@24'{$ENDIF};
(* Corners specified(not width and height). Upper left first, lower right
second. *)
procedure gdImageRectangle(im: gdImagePtr; x1: cint; y1: cint; x2: cint; y2: cint; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageRectangle@24'{$ENDIF};
procedure gdImageRectangle(im: gdImagePtr; x1: cint; y1: cint; x2: cint; y2: cint; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageRectangle@24'{$ENDIF};
(* Solid bar. Upper left corner first, lower right corner second. *)
procedure gdImageFilledRectangle(im: gdImagePtr; x1: cint; y1: cint; x2: cint; y2: cint; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageFilledRectangle@24'{$ENDIF};
procedure gdImageSetClip(im: gdImagePtr; x1: cint; y1: cint; x2: cint; y2: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageSetClip@20'{$ENDIF};
procedure gdImageGetClip(im: gdImagePtr; var x1: cint; var y1: cint; var x2: cint; var y2: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageGetClip@20'{$ENDIF};
function gdImageBoundsSafe(im: gdImagePtr; x: cint; y: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageBoundsSafe@12'{$ENDIF};
procedure gdImageChar(im: gdImagePtr; f: gdFontPtr; x: cint; y: cint; c: cint; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageChar@24'{$ENDIF};
procedure gdImageCharUp(im: gdImagePtr; f: gdFontPtr; x: cint; y: cint; c: cint; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCharUp@24'{$ENDIF};
procedure gdImageString(im: gdImagePtr; f: gdFontPtr; x: cint; y: cint; s: pchar; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageString@24'{$ENDIF};
procedure gdImageStringUp(im: gdImagePtr; f: gdFontPtr; x: cint; y: cint; s: pchar; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageStringUp@24'{$ENDIF};
procedure gdImageString16(im: gdImagePtr; f: gdFontPtr; x: cint; y: cint; s: pwidechar; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageString16@24'{$ENDIF};
procedure gdImageStringUp16(im: gdImagePtr; f: gdFontPtr; x: cint; y: cint; s: pwidechar; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageStringUp16@24'{$ENDIF};
procedure gdImageFilledRectangle(im: gdImagePtr; x1: cint; y1: cint; x2: cint; y2: cint; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageFilledRectangle@24'{$ENDIF};
procedure gdImageSetClip(im: gdImagePtr; x1: cint; y1: cint; x2: cint; y2: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageSetClip@20'{$ENDIF};
procedure gdImageGetClip(im: gdImagePtr; var x1: cint; var y1: cint; var x2: cint; var y2: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageGetClip@20'{$ENDIF};
function gdImageBoundsSafe(im: gdImagePtr; x: cint; y: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageBoundsSafe@12'{$ENDIF};
procedure gdImageChar(im: gdImagePtr; f: gdFontPtr; x: cint; y: cint; c: cint; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageChar@24'{$ENDIF};
procedure gdImageCharUp(im: gdImagePtr; f: gdFontPtr; x: cint; y: cint; c: cint; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCharUp@24'{$ENDIF};
procedure gdImageString(im: gdImagePtr; f: gdFontPtr; x: cint; y: cint; s: pchar; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageString@24'{$ENDIF};
procedure gdImageStringUp(im: gdImagePtr; f: gdFontPtr; x: cint; y: cint; s: pchar; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageStringUp@24'{$ENDIF};
procedure gdImageString16(im: gdImagePtr; f: gdFontPtr; x: cint; y: cint; s: pwidechar; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageString16@24'{$ENDIF};
procedure gdImageStringUp16(im: gdImagePtr; f: gdFontPtr; x: cint; y: cint; s: pwidechar; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageStringUp16@24'{$ENDIF};
(* 2.0.16: for thread-safe use of gdImageStringFT and friends,
call this before allowing any thread to call gdImageStringFT.
Otherwise it is invoked by the first thread to invoke
gdImageStringFT, with a very small but real risk of a race condition.
Return 0 on success, nonzero on failure to initialize freetype. *)
function gdFontCacheSetup(): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdFontCacheSetup@0'{$ENDIF};
function gdFontCacheSetup(): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdFontCacheSetup@0'{$ENDIF};
(* Optional: clean up after application is done using fonts in
BGD_DECLARE( ) gdImageStringFT(). *)
procedure gdFontCacheShutdown(); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdFontCacheShutdown@0'{$ENDIF};
procedure gdFontCacheShutdown(); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdFontCacheShutdown@0'{$ENDIF};
(* 2.0.20: for backwards compatibility. A few applications did start calling
this function when it first appeared although it was never documented.
Simply invokes gdFontCacheShutdown. *)
procedure gdFreeFontCache(); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdFreeFontCache@0'{$ENDIF};
procedure gdFreeFontCache(); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdFreeFontCache@0'{$ENDIF};
(* Calls gdImageStringFT. Provided for backwards compatibility only. *)
function gdImageStringTTF(im: gdImagePtr; brect: pcint; fg: cint; fontlist: pchar; ptsize: double; angle: double; x: cint; y: cint; str: pchar): pchar; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageStringTTF@36'{$ENDIF};
function gdImageStringTTF(im: gdImagePtr; brect: pcint; fg: cint; fontlist: pchar; ptsize: double; angle: double; x: cint; y: cint; str: pchar): pchar; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageStringTTF@36'{$ENDIF};
(* FreeType 2 text output *)
function gdImageStringFT(im: gdImagePtr; brect: pcint; fg: cint; fontlist: pchar; ptsize: double; angle: double; x: cint; y: cint; str: pchar): pchar; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageStringFT@36'{$ENDIF};
function gdImageStringFT(im: gdImagePtr; brect: pcint; fg: cint; fontlist: pchar; ptsize: double; angle: double; x: cint; y: cint; str: pchar): pchar; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageStringFT@36'{$ENDIF};
(* 2.0.5: provides an extensible way to pass additional parameters.
Thanks to Wez Furlong, sorry for the delay. *)
@ -439,7 +427,7 @@ const
and gdImageStringFTEx shall be assumed to be a fontconfig font pattern
if fontconfig was compiled into gd. This function returns zero
if fontconfig is not available, nonzero otherwise. *)
function gdFTUseFontConfig(flag: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdFTUseFontConfig@4'{$ENDIF};
function gdFTUseFontConfig(flag: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdFTUseFontConfig@4'{$ENDIF};
(* These are NOT flags; set one in 'charmap' if you set the
gdFTEX_CHARMAP bit in 'flags'. *)
@ -449,7 +437,7 @@ const
gdFTEX_Big5 = 2;
gdFTEX_Adobe_Custom = 3;
function gdImageStringFTEx(im: gdImagePtr; brect: pcint; fg: cint; fontlist: pchar; ptsize: double; angle: double; x: cint; y: cint; str: pchar; strex: gdFTStringExtraPtr): pchar; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageStringFTEx@40'{$ENDIF};
function gdImageStringFTEx(im: gdImagePtr; brect: pcint; fg: cint; fontlist: pchar; ptsize: double; angle: double; x: cint; y: cint; str: pchar; strex: gdFTStringExtraPtr): pchar; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageStringFTEx@40'{$ENDIF};
(* Point type for use in polygon drawing. *)
type
@ -458,32 +446,32 @@ type
x, y: cint;
end;
procedure gdImagePolygon(im: gdImagePtr; p: gdPointPtr; n: cint; c: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImagePolygon@16'{$ENDIF};
procedure gdImageOpenPolygon(im: gdImagePtr; p: gdPointPtr; n: cint; c: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageOpenPolygon@16'{$ENDIF};
procedure gdImageFilledPolygon(im: gdImagePtr; p: gdPointPtr; n: cint; c: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageFilledPolygon@16'{$ENDIF};
procedure gdImagePolygon(im: gdImagePtr; p: gdPointPtr; n: cint; c: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImagePolygon@16'{$ENDIF};
procedure gdImageOpenPolygon(im: gdImagePtr; p: gdPointPtr; n: cint; c: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageOpenPolygon@16'{$ENDIF};
procedure gdImageFilledPolygon(im: gdImagePtr; p: gdPointPtr; n: cint; c: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageFilledPolygon@16'{$ENDIF};
(* These functions still work with truecolor images,
for which they never return error. *)
function gdImageColorAllocate(im: gdImagePtr; r: cint; g: cint; b: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageColorAllocate@16'{$ENDIF};
function gdImageColorAllocate(im: gdImagePtr; r: cint; g: cint; b: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageColorAllocate@16'{$ENDIF};
(* gd 2.0: palette entries with non-opaque transparency are permitted. *)
function gdImageColorAllocateAlpha(im: gdImagePtr; r: cint; g: cint; b: cint; a: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageColorAllocateAlpha@20'{$ENDIF};
function gdImageColorAllocateAlpha(im: gdImagePtr; r: cint; g: cint; b: cint; a: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageColorAllocateAlpha@20'{$ENDIF};
(* Assumes opaque is the preferred alpha channel value *)
function gdImageColorClosest(im: gdImagePtr; r: cint; g: cint; b: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageColorClosest@16'{$ENDIF};
function gdImageColorClosest(im: gdImagePtr; r: cint; g: cint; b: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageColorClosest@16'{$ENDIF};
(* Closest match taking all four parameters into account.
A slightly different color with the same transparency
beats the exact same color with radically different
transparency *)
function gdImageColorClosestAlpha(im: gdImagePtr; r: cint; g: cint; b: cint; a: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageColorClosestAlpha@20'{$ENDIF};
function gdImageColorClosestAlpha(im: gdImagePtr; r: cint; g: cint; b: cint; a: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageColorClosestAlpha@20'{$ENDIF};
(* An alternate method *)
function gdImageColorClosestHWB(im: gdImagePtr; r: cint; g: cint; b: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageColorClosestHWB@16'{$ENDIF};
function gdImageColorClosestHWB(im: gdImagePtr; r: cint; g: cint; b: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageColorClosestHWB@16'{$ENDIF};
(* Returns exact, 100% opaque matches only *)
function gdImageColorExact(im: gdImagePtr; r: cint; g: cint; b: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageColorExact@16'{$ENDIF};
function gdImageColorExact(im: gdImagePtr; r: cint; g: cint; b: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageColorExact@16'{$ENDIF};
(* Returns an exact match only, including alpha *)
function gdImageColorExactAlpha(im: gdImagePtr; r: cint; g: cint; b: cint; a: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageColorExactAlpha@20'{$ENDIF};
function gdImageColorExactAlpha(im: gdImagePtr; r: cint; g: cint; b: cint; a: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageColorExactAlpha@20'{$ENDIF};
(* Opaque only *)
function gdImageColorResolve(im: gdImagePtr; r: cint; g: cint; b: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageColorResolve@16'{$ENDIF};
function gdImageColorResolve(im: gdImagePtr; r: cint; g: cint; b: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageColorResolve@16'{$ENDIF};
(* Based on gdImageColorExactAlpha and gdImageColorClosestAlpha *)
function gdImageColorResolveAlpha(im: gdImagePtr; r: cint; g: cint; b: cint; a: cint): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageColorResolveAlpha@20'{$ENDIF};
function gdImageColorResolveAlpha(im: gdImagePtr; r: cint; g: cint; b: cint; a: cint): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageColorResolveAlpha@20'{$ENDIF};
(* A simpler way to obtain an opaque truecolor value for drawing on a
truecolor image. Not for use with palette images! *)
@ -494,7 +482,7 @@ function gdTrueColor(r: cint; g: cint; b: cint): cint;
opaque. *)
function gdTrueColorAlpha(r: cint; g: cint; b: cint; a: cint): cint;
procedure gdImageColorDeallocate(im: gdImagePtr; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageColorDeallocate@8'{$ENDIF};
procedure gdImageColorDeallocate(im: gdImagePtr; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageColorDeallocate@8'{$ENDIF};
(* Converts a truecolor image to a palette-based image,
using a high-quality two-pass quantization routine
@ -516,9 +504,9 @@ procedure gdImageColorDeallocate(im: gdImagePtr; color: cint); EXTCALL; BGD_DECL
returns a new image. gdImageTrueColorToPalette modifies
an existing image, and the truecolor pixels are discarded. *)
function gdImageCreatePaletteFromTrueColor(im: gdImagePtr; ditherFlag: cint; colorsWanted: cint): gdImagePtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCreatePaletteFromTrueColor@16'{$ENDIF};
function gdImageCreatePaletteFromTrueColor(im: gdImagePtr; ditherFlag: cint; colorsWanted: cint): gdImagePtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCreatePaletteFromTrueColor@16'{$ENDIF};
procedure gdImageTrueColorToPalette(im: gdImagePtr; ditherFlag: cint; colorsWanted: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageTrueColorToPalette@16'{$ENDIF};
procedure gdImageTrueColorToPalette(im: gdImagePtr; ditherFlag: cint; colorsWanted: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageTrueColorToPalette@16'{$ENDIF};
(* Specifies a color index(if a palette image) or an
RGB color(if a truecolor image) which should be
@ -529,38 +517,38 @@ procedure gdImageTrueColorToPalette(im: gdImagePtr; ditherFlag: cint; colorsWant
a truecolor image. Note that gdImageColorTransparent
is usually compatible with older browsers that
do not understand full alpha channels well. TBB *)
procedure gdImageColorTransparent(im: gdImagePtr; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageColorTransparent@8'{$ENDIF};
procedure gdImageColorTransparent(im: gdImagePtr; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageColorTransparent@8'{$ENDIF};
procedure gdImagePaletteCopy(dst: gdImagePtr; src: gdImagePtr); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImagePaletteCopy@8'{$ENDIF};
procedure gdImageGif(im: gdImagePtr; _out: PFILE); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageGif@8'{$ENDIF};
procedure gdImagePng(im: gdImagePtr; _out: PFILE); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImagePng@8'{$ENDIF};
procedure gdImagePngCtx(im: gdImagePtr; _out: gdIOCtxPtr); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImagePngCtx@8'{$ENDIF};
procedure gdImageGifCtx(im: gdImagePtr; _out: gdIOCtxPtr); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageGifCtx@8'{$ENDIF};
procedure gdImagePaletteCopy(dst: gdImagePtr; src: gdImagePtr); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImagePaletteCopy@8'{$ENDIF};
procedure gdImageGif(im: gdImagePtr; _out: PFILE); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageGif@8'{$ENDIF};
procedure gdImagePng(im: gdImagePtr; _out: PFILE); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImagePng@8'{$ENDIF};
procedure gdImagePngCtx(im: gdImagePtr; _out: gdIOCtxPtr); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImagePngCtx@8'{$ENDIF};
procedure gdImageGifCtx(im: gdImagePtr; _out: gdIOCtxPtr); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageGifCtx@8'{$ENDIF};
(* 2.0.12: Compression level: 0-9 or -1, where 0 is NO COMPRESSION at all,
1 is FASTEST but produces larger files, 9 provides the best
compression(smallest files) but takes a long time to compress, and
-1 selects the default compiled into the zlib library. *)
procedure gdImagePngEx(im: gdImagePtr; _out: PFILE; level: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImagePngEx@12'{$ENDIF};
procedure gdImagePngCtxEx(im: gdImagePtr; _out: gdIOCtxPtr; level: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImagePngCtxEx@12'{$ENDIF};
procedure gdImagePngEx(im: gdImagePtr; _out: PFILE; level: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImagePngEx@12'{$ENDIF};
procedure gdImagePngCtxEx(im: gdImagePtr; _out: gdIOCtxPtr; level: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImagePngCtxEx@12'{$ENDIF};
procedure gdImageWBMP(image: gdImagePtr; fg: cint; _out: PFILE); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageWBMP@12'{$ENDIF};
procedure gdImageWBMPCtx(image: gdImagePtr; fg: cint; _out: gdIOCtxPtr); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageWBMPCtx@12'{$ENDIF};
procedure gdImageWBMP(image: gdImagePtr; fg: cint; _out: PFILE); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageWBMP@12'{$ENDIF};
procedure gdImageWBMPCtx(image: gdImagePtr; fg: cint; _out: gdIOCtxPtr); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageWBMPCtx@12'{$ENDIF};
(* Guaranteed to correctly free memory returned
by the gdImage*Ptr functions *)
procedure gdFree(m: pointer); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdFree@4'{$ENDIF};
procedure gdFree(m: pointer); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdFree@4'{$ENDIF};
(* Best to free this memory with gdFree(), not free() *)
function gdImageWBMPPtr(im: gdImagePtr; size: pcint; fg: cint): pointer; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageWBMPPtr@12'{$ENDIF};
function gdImageWBMPPtr(im: gdImagePtr; size: pcint; fg: cint): pointer; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageWBMPPtr@12'{$ENDIF};
(* 100 is highest quality(there is always a little loss with JPEG).
0 is lowest. 10 is about the lowest useful setting. *)
procedure gdImageJpeg(im: gdImagePtr; _out: PFILE; quality: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageJpeg@12'{$ENDIF};
procedure gdImageJpegCtx(im: gdImagePtr; _out: gdIOCtxPtr; quality: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageJpegCtx@12'{$ENDIF};
procedure gdImageJpeg(im: gdImagePtr; _out: PFILE; quality: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageJpeg@12'{$ENDIF};
procedure gdImageJpegCtx(im: gdImagePtr; _out: gdIOCtxPtr; quality: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageJpegCtx@12'{$ENDIF};
(* Best to free this memory with gdFree(), not free() *)
function gdImageJpegPtr(im: gdImagePtr; size: pcint; quality: cint): pointer; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageJpegPtr@12'{$ENDIF};
function gdImageJpegPtr(im: gdImagePtr; size: pcint; quality: cint): pointer; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageJpegPtr@12'{$ENDIF};
(* Legal values for Disposal. gdDisposalNone is always used by
the built-in optimizer if previm is passed. *)
@ -573,15 +561,15 @@ enum {
gdDisposalRestorePrevious
};
procedure gdImageGifAnimBegin(im: gdImagePtr; _outFile: PFILE; int GlobalCM, int Loops); EXTCALL; BGD_DECLARE;
procedure gdImageGifAnimAdd(im: gdImagePtr; _outFile: PFILE; int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm); EXTCALL; BGD_DECLARE;
procedure gdImageGifAnimEnd(_outFile: PFILE); EXTCALL; BGD_DECLARE;
procedure gdImageGifAnimBeginCtx(im: gdImagePtr; gdIOCtx *out, int GlobalCM, int Loops); EXTCALL; BGD_DECLARE;
procedure gdImageGifAnimAddCtx(im: gdImagePtr; gdIOCtx *out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm); EXTCALL; BGD_DECLARE;
procedure gdImageGifAnimEndCtx(gdIOCtx *out); EXTCALL; BGD_DECLARE;
function gdImageGifAnimBeginPtr(im: gdImagePtr; int *size, int GlobalCM, int Loops): pointer; EXTCALL; BGD_DECLARE;
function gdImageGifAnimAddPtr(im: gdImagePtr; int *size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm): pointer; EXTCALL; BGD_DECLARE;
function gdImageGifAnimEndPtr(int *size): pointer; EXTCALL; BGD_DECLARE;
procedure gdImageGifAnimBegin(im: gdImagePtr; _outFile: PFILE; int GlobalCM, int Loops); EXTDECL; BGD_DECLARE;
procedure gdImageGifAnimAdd(im: gdImagePtr; _outFile: PFILE; int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm); EXTDECL; BGD_DECLARE;
procedure gdImageGifAnimEnd(_outFile: PFILE); EXTDECL; BGD_DECLARE;
procedure gdImageGifAnimBeginCtx(im: gdImagePtr; gdIOCtx *out, int GlobalCM, int Loops); EXTDECL; BGD_DECLARE;
procedure gdImageGifAnimAddCtx(im: gdImagePtr; gdIOCtx *out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm); EXTDECL; BGD_DECLARE;
procedure gdImageGifAnimEndCtx(gdIOCtx *out); EXTDECL; BGD_DECLARE;
function gdImageGifAnimBeginPtr(im: gdImagePtr; int *size, int GlobalCM, int Loops): pointer; EXTDECL; BGD_DECLARE;
function gdImageGifAnimAddPtr(im: gdImagePtr; int *size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm): pointer; EXTDECL; BGD_DECLARE;
function gdImageGifAnimEndPtr(int *size): pointer; EXTDECL; BGD_DECLARE;
*)
{$warning TODO}
@ -593,27 +581,27 @@ function gdImageGifAnimEndPtr(int *size): pointer; EXTCALL; BGD_DECLARE;
type
gdSinkPtr = ^gdSink;
gdSink = record
sink : function(context: pointer; buffer: pchar; len: cint): cint; EXTCALL;
sink : function(context: pointer; buffer: pchar; len: cint): cint; EXTDECL;
context : pointer;
end;
procedure gdImagePngToSink(im: gdImagePtr; _out: gdSinkPtr); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImagePngToSink@8'{$ENDIF};
procedure gdImagePngToSink(im: gdImagePtr; _out: gdSinkPtr); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImagePngToSink@8'{$ENDIF};
procedure gdImageGd(im: gdImagePtr; _out: PFILE); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageGd@8'{$ENDIF};
procedure gdImageGd2(im: gdImagePtr; _out: PFILE; cs: cint; fmt: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageGd2@16'{$ENDIF};
procedure gdImageGd(im: gdImagePtr; _out: PFILE); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageGd@8'{$ENDIF};
procedure gdImageGd2(im: gdImagePtr; _out: PFILE; cs: cint; fmt: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageGd2@16'{$ENDIF};
(* Best to free this memory with gdFree(), not free() *)
function gdImageGifPtr(im: gdImagePtr; var size: cint): pointer; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageGifPtr@8'{$ENDIF};
function gdImageGifPtr(im: gdImagePtr; var size: cint): pointer; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageGifPtr@8'{$ENDIF};
(* Best to free this memory with gdFree(), not free() *)
function gdImagePngPtr(im: gdImagePtr; var size: cint): pointer; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImagePngPtr@8'{$ENDIF};
function gdImagePngPtrEx(im: gdImagePtr; var size: cint; level: cint): pointer; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImagePngPtrEx@12'{$ENDIF};
function gdImagePngPtr(im: gdImagePtr; var size: cint): pointer; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImagePngPtr@8'{$ENDIF};
function gdImagePngPtrEx(im: gdImagePtr; var size: cint; level: cint): pointer; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImagePngPtrEx@12'{$ENDIF};
(* Best to free this memory with gdFree(), not free() *)
function gdImageGdPtr(im: gdImagePtr; var size: cint): pointer; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageGdPtr@8'{$ENDIF};
function gdImageGdPtr(im: gdImagePtr; var size: cint): pointer; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageGdPtr@8'{$ENDIF};
(* Best to free this memory with gdFree(), not free() *)
function gdImageGd2Ptr(im: gdImagePtr; cs: cint; fmt: cint; var size: cint): pointer; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageGd2Ptr@16'{$ENDIF};
function gdImageGd2Ptr(im: gdImagePtr; cs: cint; fmt: cint; var size: cint): pointer; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageGd2Ptr@16'{$ENDIF};
(* Style is a bitwise OR( | operator ) of these.
@ -634,20 +622,20 @@ const
gdNoFill = 2;
gdEdged = 4;
procedure gdImageFilledArc(im: gdImagePtr; cx: cint; cy: cint; w: cint; h: cint; s: cint; e: cint; color: cint; style: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageFilledArc@36'{$ENDIF};
procedure gdImageArc(im: gdImagePtr; cx: cint; cy: cint; w: cint; h: cint; s: cint; e: cint; color: cint; style: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageArc@36'{$ENDIF};
procedure gdImageEllipse(im: gdImagePtr; cx: cint; cy: cint; w: cint; h: cint; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageEllipse@24'{$ENDIF};
procedure gdImageFilledEllipse(im: gdImagePtr; cx: cint; cy: cint; w: cint; h: cint; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageFilledEllipse@24'{$ENDIF};
procedure gdImageFillToBorder(im: gdImagePtr; cx: cint; cy: cint; border: cint; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageFillToBorder@20'{$ENDIF};
procedure gdImageFill(im: gdImagePtr; x: cint; y: cint; color: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageFill@16'{$ENDIF};
procedure gdImageCopy(dst: gdImagePtr; src: gdImagePtr; dstX: cint; dstY: cint; srcX: cint; srcY: cint; w: cint; h: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCopy@32'{$ENDIF};
procedure gdImageCopyMerge(dst: gdImagePtr; src: gdImagePtr; dstX: cint; dstY: cint; srcX: cint; srcY: cint; w: cint; h: cint; pct: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCopyMerge@36'{$ENDIF};
procedure gdImageCopyMergeGray(dst: gdImagePtr; src: gdImagePtr; dstX: cint; dstY: cint; srcX: cint; srcY: cint; w: cint; h: cint; pct: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCopyMergeGray@36'{$ENDIF};
procedure gdImageFilledArc(im: gdImagePtr; cx: cint; cy: cint; w: cint; h: cint; s: cint; e: cint; color: cint; style: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageFilledArc@36'{$ENDIF};
procedure gdImageArc(im: gdImagePtr; cx: cint; cy: cint; w: cint; h: cint; s: cint; e: cint; color: cint; style: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageArc@36'{$ENDIF};
procedure gdImageEllipse(im: gdImagePtr; cx: cint; cy: cint; w: cint; h: cint; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageEllipse@24'{$ENDIF};
procedure gdImageFilledEllipse(im: gdImagePtr; cx: cint; cy: cint; w: cint; h: cint; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageFilledEllipse@24'{$ENDIF};
procedure gdImageFillToBorder(im: gdImagePtr; cx: cint; cy: cint; border: cint; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageFillToBorder@20'{$ENDIF};
procedure gdImageFill(im: gdImagePtr; x: cint; y: cint; color: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageFill@16'{$ENDIF};
procedure gdImageCopy(dst: gdImagePtr; src: gdImagePtr; dstX: cint; dstY: cint; srcX: cint; srcY: cint; w: cint; h: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCopy@32'{$ENDIF};
procedure gdImageCopyMerge(dst: gdImagePtr; src: gdImagePtr; dstX: cint; dstY: cint; srcX: cint; srcY: cint; w: cint; h: cint; pct: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCopyMerge@36'{$ENDIF};
procedure gdImageCopyMergeGray(dst: gdImagePtr; src: gdImagePtr; dstX: cint; dstY: cint; srcX: cint; srcY: cint; w: cint; h: cint; pct: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCopyMergeGray@36'{$ENDIF};
(* Stretches or shrinks to fit, as needed. Does NOT attempt
to average the entire set of source pixels that scale down onto the
destination pixel. *)
procedure gdImageCopyResized(dst: gdImagePtr; src: gdImagePtr; dstX: cint; dstY: cint; srcX: cint; srcY: cint; dstW: cint; dstH: cint; srcW: cint; srcH: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCopyResized@40'{$ENDIF};
procedure gdImageCopyResized(dst: gdImagePtr; src: gdImagePtr; dstX: cint; dstY: cint; srcX: cint; srcY: cint; dstW: cint; dstH: cint; srcW: cint; srcH: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCopyResized@40'{$ENDIF};
(* gd 2.0: stretches or shrinks to fit, as needed. When called with a
truecolor destination image, this function averages the
@ -658,7 +646,7 @@ procedure gdImageCopyResized(dst: gdImagePtr; src: gdImagePtr; dstX: cint; dstY:
on modern hardware, except for some embedded devices. If the
destination is a palette image, gdImageCopyResized is
substituted automatically. *)
procedure gdImageCopyResampled(dst: gdImagePtr; src: gdImagePtr; dstX: cint; dstY: cint; srcX: cint; srcY: cint; dstW: cint; dstH: cint; srcW: cint; srcH: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCopyResampled@40'{$ENDIF};
procedure gdImageCopyResampled(dst: gdImagePtr; src: gdImagePtr; dstX: cint; dstY: cint; srcX: cint; srcY: cint; dstW: cint; dstH: cint; srcW: cint; srcH: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCopyResampled@40'{$ENDIF};
(* gd 2.0.8: gdImageCopyRotated is added. Source
is a rectangle, with its upper left corner at
@ -667,20 +655,20 @@ procedure gdImageCopyResampled(dst: gdImagePtr; src: gdImagePtr; dstX: cint; dst
gdImageArc. Floating point destination center
coordinates allow accurate rotation of
objects of odd-numbered width or height. *)
procedure gdImageCopyRotated(dst: gdImagePtr; src: gdImagePtr; dstX: double; dstY: double; srcX: cint; srcY: cint; srcWidth: cint; srcHeight: cint; angle: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCopyRotated@36'{$ENDIF};
procedure gdImageCopyRotated(dst: gdImagePtr; src: gdImagePtr; dstX: double; dstY: double; srcX: cint; srcY: cint; srcWidth: cint; srcHeight: cint; angle: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCopyRotated@36'{$ENDIF};
procedure gdImageSetBrush(im: gdImagePtr; brush: gdImagePtr); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageSetBrush@8'{$ENDIF};
procedure gdImageSetTile(im: gdImagePtr; tile: gdImagePtr); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageSetTile@8'{$ENDIF};
procedure gdImageSetAntiAliased(im: gdImagePtr; c: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageSetAntiAliased@8'{$ENDIF};
procedure gdImageSetAntiAliasedDontBlend(im: gdImagePtr; c: cint; dont_blend: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageSetAntiAliasedDontBlend@12'{$ENDIF};
procedure gdImageSetStyle(im: gdImagePtr; style: pcint; noOfPixels: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageSetStyle@12'{$ENDIF};
procedure gdImageSetBrush(im: gdImagePtr; brush: gdImagePtr); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageSetBrush@8'{$ENDIF};
procedure gdImageSetTile(im: gdImagePtr; tile: gdImagePtr); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageSetTile@8'{$ENDIF};
procedure gdImageSetAntiAliased(im: gdImagePtr; c: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageSetAntiAliased@8'{$ENDIF};
procedure gdImageSetAntiAliasedDontBlend(im: gdImagePtr; c: cint; dont_blend: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageSetAntiAliasedDontBlend@12'{$ENDIF};
procedure gdImageSetStyle(im: gdImagePtr; style: pcint; noOfPixels: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageSetStyle@12'{$ENDIF};
(* Line thickness(defaults to 1). Affects lines, ellipses,
rectangles, polygons and so forth. *)
procedure gdImageSetThickness(im: gdImagePtr; thickness: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageSetThickness@8'{$ENDIF};
procedure gdImageSetThickness(im: gdImagePtr; thickness: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageSetThickness@8'{$ENDIF};
(* On or off(1 or 0) for all three of these. *)
procedure gdImageInterlace(im: gdImagePtr; interlaceArg: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageInterlace@8'{$ENDIF};
procedure gdImageAlphaBlending(im: gdImagePtr; alphaBlendingArg: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageAlphaBlending@8'{$ENDIF};
procedure gdImageSaveAlpha(im: gdImagePtr; saveAlphaArg: cint); EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageSaveAlpha@8'{$ENDIF};
procedure gdImageInterlace(im: gdImagePtr; interlaceArg: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageInterlace@8'{$ENDIF};
procedure gdImageAlphaBlending(im: gdImagePtr; alphaBlendingArg: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageAlphaBlending@8'{$ENDIF};
procedure gdImageSaveAlpha(im: gdImagePtr; saveAlphaArg: cint); EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageSaveAlpha@8'{$ENDIF};
(* Macros to access information about images. *)
@ -708,14 +696,14 @@ function gdImageTrueColorPixel(im: gdImagePtr; x, y: cint): cint; inline;
(* I/O Support routines. *)
function gdNewFileCtx(p: PFILE): gdIOCtxPtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdNewFileCtx@4'{$ENDIF};
function gdNewFileCtx(p: PFILE): gdIOCtxPtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdNewFileCtx@4'{$ENDIF};
(* If data is null, size is ignored and an initial data buffer is
allocated automatically. NOTE: this function assumes gd has the right
to free or reallocate "data" at will! Also note that gd will free
"data" when the IO context is freed. If data is not null, it must point
to memory allocated with gdMalloc, or by a call to gdImage[something]Ptr.
If not, see gdNewDynamicCtxEx for an alternative. *)
function gdNewDynamicCtx(size: cint; data: pointer): gdIOCtxPtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdNewDynamicCtx@8'{$ENDIF};
function gdNewDynamicCtx(size: cint; data: pointer): gdIOCtxPtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdNewDynamicCtx@8'{$ENDIF};
(* 2.0.21: if freeFlag is nonzero, gd will free and/or reallocate "data" as
needed as described above. If freeFlag is zero, gd will never free
or reallocate "data," which means that the context should only be used
@ -724,9 +712,9 @@ function gdNewDynamicCtx(size: cint; data: pointer): gdIOCtxPtr; EXTCALL; BGD_DE
not large enough and an image write is attempted, the write operation
will fail. Those wishing to write an image to a buffer in memory have
a much simpler alternative in the gdImage[something]Ptr functions. *)
function gdNewDynamicCtxEx(size: cint; data: pointer; freeFlag: cint): gdIOCtxPtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdNewDynamicCtxEx@12'{$ENDIF};
function gdNewSSCtx(_in: gdSourcePtr; _out: gdSinkPtr): gdIOCtxPtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdNewSSCtx@8'{$ENDIF};
function gdDPExtractData(ctx: gdIOCtxPtr; size: pcint): pointer; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdDPExtractData@8'{$ENDIF};
function gdNewDynamicCtxEx(size: cint; data: pointer; freeFlag: cint): gdIOCtxPtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdNewDynamicCtxEx@12'{$ENDIF};
function gdNewSSCtx(_in: gdSourcePtr; _out: gdSinkPtr): gdIOCtxPtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdNewSSCtx@8'{$ENDIF};
function gdDPExtractData(ctx: gdIOCtxPtr; size: pcint): pointer; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdDPExtractData@8'{$ENDIF};
function gdNewStreamCtx(Stream: TStream; free: boolean): gdIOCtxPtr;
// NOTE: don't forget to call ctx^.gd_free(ctx)
@ -743,7 +731,7 @@ const
GD2_FMT_COMPRESSED = 2;
(* Image comparison definitions *)
function gdImageCompare(im1: gdImagePtr; im2: gdImagePtr): cint; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdImageCompare@8'{$ENDIF};
function gdImageCompare(im1: gdImagePtr; im2: gdImagePtr): cint; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdImageCompare@8'{$ENDIF};
const
GD_CMP_IMAGE = 1; (* Actual image IS different *)
@ -762,11 +750,11 @@ const
(* newfangled special effects *)
//#include "gdfx.h"
function gdFontGetLarge(): gdFontPtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdFontGetLarge@0'{$ENDIF};
function gdFontGetSmall(): gdFontPtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdFontGetSmall@0'{$ENDIF};
function gdFontGetGiant(): gdFontPtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdFontGetGiant@0'{$ENDIF};
function gdFontGetMediumBold(): gdFontPtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdFontGetMediumBold@0'{$ENDIF};
function gdFontGetTiny(): gdFontPtr; EXTCALL; BGD_DECLARE {$IFDEF WINDOWS}name '_gdFontGetTiny@0'{$ENDIF};
function gdFontGetLarge(): gdFontPtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdFontGetLarge@0'{$ENDIF};
function gdFontGetSmall(): gdFontPtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdFontGetSmall@0'{$ENDIF};
function gdFontGetGiant(): gdFontPtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdFontGetGiant@0'{$ENDIF};
function gdFontGetMediumBold(): gdFontPtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdFontGetMediumBold@0'{$ENDIF};
function gdFontGetTiny(): gdFontPtr; EXTDECL; external gdlib {$IFDEF WINDOWS}name '_gdFontGetTiny@0'{$ENDIF};
{$ifdef windows}
function gdFontLarge(): gdFontPtr; inline;
@ -777,17 +765,17 @@ function gdFontTiny(): gdFontPtr; inline;
{$else}
var
{$ifndef darwin}
gdFontLarge : gdFontPtr; cvar; BGD_DECLARE;
gdFontSmall : gdFontPtr; cvar; BGD_DECLARE;
gdFontGiant : gdFontPtr; cvar; BGD_DECLARE;
gdFontMediumBold : gdFontPtr; cvar; BGD_DECLARE;
gdFontTiny : gdFontPtr; cvar; BGD_DECLARE;
gdFontLarge : gdFontPtr; cvar; external gdlib;
gdFontSmall : gdFontPtr; cvar; external gdlib;
gdFontGiant : gdFontPtr; cvar; external gdlib;
gdFontMediumBold : gdFontPtr; cvar; external gdlib;
gdFontTiny : gdFontPtr; cvar; external gdlib;
{$else darwin}
gdFontLarge : gdFontPtr; BGD_DECLARE name 'gdFontLarge';
gdFontSmall : gdFontPtr; BGD_DECLARE name 'gdFontSmall';
gdFontGiant : gdFontPtr; BGD_DECLARE name 'gdFontGiant';
gdFontMediumBold : gdFontPtr; BGD_DECLARE name 'gdFontMediumBold';
gdFontTiny : gdFontPtr; BGD_DECLARE name 'gdFontTiny';
gdFontLarge : gdFontPtr; external gdlib name 'gdFontLarge';
gdFontSmall : gdFontPtr; external gdlib name 'gdFontSmall';
gdFontGiant : gdFontPtr; external gdlib name 'gdFontGiant';
gdFontMediumBold : gdFontPtr; external gdlib name 'gdFontMediumBold';
gdFontTiny : gdFontPtr; external gdlib name 'gdFontTiny';
{$endif darwin}
{$endif}
@ -980,7 +968,7 @@ type
free: Boolean;
end;
function stream_getC(ctx: gdIOCtxPtr): cint; EXTCALL;
function stream_getC(ctx: gdIOCtxPtr): cint; EXTDECL;
var
s: stream_gdIOCtxPtr absolute ctx;
begin
@ -988,42 +976,42 @@ begin
s^.strm.read(result, 1);
end;
function stream_getBuf(ctx: gdIOCtxPtr; buf: pointer; len: cint): cint; EXTCALL;
function stream_getBuf(ctx: gdIOCtxPtr; buf: pointer; len: cint): cint; EXTDECL;
var
s: stream_gdIOCtxPtr absolute ctx;
begin
result := s^.strm.read(buf^, len);
end;
procedure stream_putC(ctx: gdIOCtxPtr; len: cint); EXTCALL;
procedure stream_putC(ctx: gdIOCtxPtr; len: cint); EXTDECL;
var
s: stream_gdIOCtxPtr absolute ctx;
begin
s^.strm.write(len, 1);
end;
procedure stream_putBuf(ctx: gdIOCtxPtr; buf: pointer; len: cint); EXTCALL;
procedure stream_putBuf(ctx: gdIOCtxPtr; buf: pointer; len: cint); EXTDECL;
var
s: stream_gdIOCtxPtr absolute ctx;
begin
s^.strm.write(buf^, len);
end;
function stream_seek(ctx: gdIOCtxPtr; pos: cint): cint; EXTCALL;
function stream_seek(ctx: gdIOCtxPtr; pos: cint): cint; EXTDECL;
var
s: stream_gdIOCtxPtr absolute ctx;
begin
result := s^.strm.seek(soFromBeginning, pos);
end;
function stream_tell(ctx: gdIOCtxPtr): clong; EXTCALL;
function stream_tell(ctx: gdIOCtxPtr): clong; EXTDECL;
var
s: stream_gdIOCtxPtr absolute ctx;
begin
result := s^.strm.position;
end;
procedure stream_gd_free(ctx: gdIOCtxPtr); EXTCALL;
procedure stream_gd_free(ctx: gdIOCtxPtr); EXTDECL;
var
s: stream_gdIOCtxPtr absolute ctx;
begin