diff options
| author | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-01-26 23:36:53 +0000 |
|---|---|---|
| committer | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-01-26 23:36:53 +0000 |
| commit | 085f07f9d66cd0fe47fdb69e54e10ab010b15a1b (patch) | |
| tree | 943bf53527b83defb7065691908b19ccb5168f3e /packages/libgd/src | |
| parent | 152df1b5658e4ee20cd65f6837e6ec170da86173 (diff) | |
| download | fpc-085f07f9d66cd0fe47fdb69e54e10ab010b15a1b.tar.gz | |
* libgd moved
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@10005 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/libgd/src')
| -rw-r--r-- | packages/libgd/src/gd.pp | 416 |
1 files changed, 416 insertions, 0 deletions
diff --git a/packages/libgd/src/gd.pp b/packages/libgd/src/gd.pp new file mode 100644 index 0000000000..e52ee2b925 --- /dev/null +++ b/packages/libgd/src/gd.pp @@ -0,0 +1,416 @@ +{ + This file is part of the Free Pascal run time library. + Copyright (c) 1999-2000 by Michael Van Canneyt, member of + the Free Pascal development team + + This file implements an interface to the gd library. + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} +unit gd; + + interface + +{$linklib c} +{$linklib m} +{$linklib png} +{$linklib gd} +{$ifdef hasttf} +{$linklib ttf} +{$endif hasttf} + +{$PACKRECORDS C} + +const + + libgd = 'gd'; + libc = 'c'; + + GD_H = 1; + DEFAULT_FONTPATH = '/usr/share/fonts/truetype'; + PATHSEPARATOR = ':'; + gdMaxColors = 256; + +type + PByte = ^Byte; + PPByte = ^PByte; + PVoid = Pointer; + PFile = Pointer; + + PGDIMAGESTRUCT = ^gdImage; + gdImage = record + pixels : PPbyte; + sx : longint; + sy : longint; + colorsTotal : longint; + red : array[0..(gdMaxColors)-1] of longint; + green : array[0..(gdMaxColors)-1] of longint; + blue : array[0..(gdMaxColors)-1] of longint; + open : array[0..(gdMaxColors)-1] of longint; + transparent : longint; + polyInts : Plongint; + polyAllocated : longint; + brush : PgdImageStruct; + tile : PgdImageStruct; + brushColorMap : array[0..(gdMaxColors)-1] of longint; + tileColorMap : array[0..(gdMaxColors)-1] of longint; + styleLength : longint; + stylePos : longint; + style : Plongint; + interlace : longint; + end; + + gdImageStruct = gdImage; + pgdImage = ^gdImage; + gdImagePtr = PgdImage; + + gdFont = record + nchars : longint; + offset : longint; + w : longint; + h : longint; + data : Pchar; + end; + pgdFont = ^gdFont; + gdFontPtr = PgdFont; + +var +{$ifndef darwin} + gdFontLarge : gdFontPtr; cvar; external; + gdFontSmall : gdFontPtr; cvar; external; + gdFontGiant : gdFontPtr; cvar; external; + gdFontMediumBold : gdFontPtr; cvar; external; + gdFontTiny : gdFontPtr; cvar; external; +{$else darwin} + gdFontLarge : gdFontPtr; external libgd name 'gdFontLarge'; + gdFontSmall : gdFontPtr; external libgd name 'gdFontSmall'; + gdFontGiant : gdFontPtr; external libgd name 'gdFontGiant'; + gdFontMediumBold : gdFontPtr; external libgd name 'gdFontMediumBold'; + gdFontTiny : gdFontPtr; external libgd name 'gdFontTiny'; +{$endif darwin} + +const + gdDashSize = 4; + gdStyled = -(2); + gdBrushed = -(3); + gdStyledBrushed = -(4); + gdTiled = -(5); + gdTransparent = -(6); + +type + + gdSource = record + source : function (context:Pointer; buffer:Pchar; len:longint):longint;cdecl; + context : pointer; + end; + pgdSource = ^gdSource; + gdSourcePtr = PgdSource; + + gdSink = record + sink : function (context:Pvoid; buffer:Pchar; len:longint):longint;cdecl; + context : pointer; + end; + pgdSink = ^gdSink; + gdSinkPtr = PgdSink; + + gdPoint = record + x : longint; + y : longint; + end; + pgdPoint = ^gdPoint; + gdPointPtr = PgdPoint; + + pgdIOCtx = ^gdIOCtx; + gdIOCtx = record + getC : function (_para1:PgdIOCtx):longint;cdecl; + getBuf : function (_para1:PgdIOCtx; _para2:pointer; _para3:longint):longint; + putC : procedure (_para1:PgdIOCtx; _para2:longint); + putBuf : function (_para1:PgdIOCtx; _para2:pointer; _para3:longint):longint; + seek : function (_para1:PgdIOCtx; _para2:longint):longint; + tell : function (_para1:PgdIOCtx):longint; + free : procedure (_para1:PgdIOCtx); + end; + GDIOCTXPTR = pgdIOCtx; + +{ Translated from gd_io.h} +function fopen(a,b:pchar):pFile; cdecl;external libc; +procedure fclose(a:pFile); cdecl;external libc; + +procedure Putword(w:longint; ctx:PgdIOCtx); cdecl; external libgd; +procedure Putchar(c:longint; ctx:PgdIOCtx); cdecl; external libgd; +procedure gdPutC(c:byte; ctx:PgdIOCtx); cdecl; external libgd; +function gdPutBuf(_para1:pointer; _para2:longint; _para3:PgdIOCtx):longint; cdecl; external libgd; +procedure gdPutWord(w:longint; ctx:PgdIOCtx); cdecl; external libgd; +procedure gdPutInt(w:longint; ctx:PgdIOCtx); cdecl; external libgd; +function gdGetC(ctx:PgdIOCtx):longint; cdecl; external libgd; +function gdGetBuf(_para1:pointer; _para2:longint; _para3:PgdIOCtx):longint; cdecl; external libgd; +function gdGetByte(result:Plongint; ctx:PgdIOCtx):longint; cdecl; external libgd; +function gdGetWord(result:Plongint; ctx:PgdIOCtx):longint; cdecl; external libgd; +function gdGetInt(result:Plongint; ctx:PgdIOCtx):longint; cdecl; external libgd; +function gdSeek(ctx:PgdIOCtx; _para2:longint):longint; cdecl; external libgd; +function gdTell(ctx:PgdIOCtx):longint; cdecl; external libgd; + +function gdImageCreate(sx:longint; sy:longint):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromPng(fd:PFILE):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromPngCtx(inIO:gdIOCtxPtr):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromWBMP(inFile:PFILE):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromWBMPCtx(infile:PgdIOCtx):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromJpeg(infile:PFILE):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromJpegCtx(infile:PgdIOCtx):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromPngSource(infile:gdSourcePtr):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromGd(infile:PFILE):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromGdCtx(infile:gdIOCtxPtr):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromGd2(infile:PFILE):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromGd2Ctx(infile:gdIOCtxPtr):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromGd2Part(infile:PFILE; srcx:longint; srcy:longint; w:longint; h:longint):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromGd2PartCtx(infile:gdIOCtxPtr; srcx:longint; srcy:longint; w:longint; h:longint):gdImagePtr; cdecl; external libgd; +function gdImageCreateFromXbm(fd:PFILE):gdImagePtr; cdecl; external libgd; +procedure gdImageDestroy(im:gdImagePtr); cdecl; external libgd; +procedure gdImageSetPixel(im:gdImagePtr; x:longint; y:longint; color:longint); cdecl; external libgd; +function gdImageGetPixel(im:gdImagePtr; x:longint; y:longint):longint; cdecl; external libgd; +procedure gdImageLine(im:gdImagePtr; x1:longint; y1:longint; x2:longint; y2:longint; color:longint); cdecl; external libgd; +procedure gdImageDashedLine(im:gdImagePtr; x1:longint; y1:longint; x2:longint; y2:longint; color:longint); cdecl; external libgd; +procedure gdImageRectangle(im:gdImagePtr; x1:longint; y1:longint; x2:longint; y2:longint; color:longint); cdecl; external libgd; +procedure gdImageFilledRectangle(im:gdImagePtr; x1:longint; y1:longint; x2:longint; y2:longint; color:longint); cdecl; external libgd; +function gdImageBoundsSafe(im:gdImagePtr; x:longint; y:longint):longint; cdecl; external libgd; +procedure gdImageChar(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:longint; color:longint); cdecl; external libgd; +procedure gdImageCharUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:longint; color:longint); cdecl; external libgd; +procedure gdImageString(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:Pbyte; color:longint); cdecl; external libgd; +procedure gdImageStringUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:Pbyte; color:longint); cdecl; external libgd; +procedure gdImageString16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:Pword; color:longint); cdecl; external libgd; +procedure gdImageStringUp16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:Pword; color:longint); cdecl; external libgd; +{$ifdef HasTTF} +function gdImageStringTTF(im:PgdImage; brect:Plongint; fg:longint; fontlist:Pchar; ptsize:double; angle:double; x:longint; y:longint; astring:Pchar):Pchar; cdecl; external libgd; +function gdImageStringFT(im:PgdImage; brect:Plongint; fg:longint; fontlist:Pchar; ptsize:double; angle:double; x:longint; y:longint; astring:Pchar):Pchar; cdecl; external libgd; +{$endif hasTTF} +procedure gdImagePolygon(im:gdImagePtr; p:gdPointPtr; n:longint; c:longint); cdecl; external libgd; +procedure gdImageFilledPolygon(im:gdImagePtr; p:gdPointPtr; n:longint; c:longint); cdecl; external libgd; +function gdImageColorAllocate(im:gdImagePtr; r:longint; g:longint; b:longint):longint; cdecl; external libgd; +function gdImageColorClosest(im:gdImagePtr; r:longint; g:longint; b:longint):longint; cdecl; external libgd; +function gdImageColorExact(im:gdImagePtr; r:longint; g:longint; b:longint):longint; cdecl; external libgd; +function gdImageColorResolve(im:gdImagePtr; r:longint; g:longint; b:longint):longint; cdecl; external libgd; +procedure gdImageColorDeallocate(im:gdImagePtr; color:longint); cdecl; external libgd; +procedure gdImageColorTransparent(im:gdImagePtr; color:longint); cdecl; external libgd; +procedure gdImagePaletteCopy(dst:gdImagePtr; src:gdImagePtr); cdecl; external libgd; +procedure gdImagePng(im:gdImagePtr; _out:PFILE); cdecl; external libgd; +procedure gdImagePngCtx(im:gdImagePtr; _out:PgdIOCtx); cdecl; external libgd; +procedure gdImageWBMP(image:gdImagePtr; fg:longint; _out:PFILE); cdecl; external libgd; +procedure gdImageWBMPCtx(image:gdImagePtr; fg:longint; _out:PgdIOCtx); cdecl; external libgd; +procedure gdFree(m:Pvoid); cdecl; external libgd; +function gdImageWBMPPtr(im:gdImagePtr; size:Plongint; fg:longint):pointer; cdecl; external libgd; +procedure gdImageJpeg(im:gdImagePtr; _out:PFILE; quality:longint); cdecl; external libgd; +procedure gdImageJpegCtx(im:gdImagePtr; _out:PgdIOCtx; quality:longint); cdecl; external libgd; +function gdImageJpegPtr(im:gdImagePtr; size:Plongint; quality:longint):pointer; cdecl; external libgd; +procedure gdImagePngToSink(im:gdImagePtr; _out:gdSinkPtr); cdecl; external libgd; +procedure gdImageGd(im:gdImagePtr; _out:PFILE); cdecl; external libgd; +procedure gdImageGd2(im:gdImagePtr; _out:PFILE; cs:longint; fmt:longint); cdecl; external libgd; +function gdImagePngPtr(im:gdImagePtr; size:Plongint):pointer; cdecl; external libgd; +function gdImageGdPtr(im:gdImagePtr; size:Plongint):pointer; cdecl; external libgd; +function gdImageGd2Ptr(im:gdImagePtr; cs:longint; fmt:longint; size:Plongint):pointer; cdecl; external libgd; +procedure gdImageArc(im:gdImagePtr; cx:longint; cy:longint; w:longint; h:longint; s:longint; e:longint; color:longint); cdecl; external libgd; +procedure gdImageFillToBorder(im:gdImagePtr; x:longint; y:longint; border:longint; color:longint); cdecl; external libgd; +procedure gdImageFill(im:gdImagePtr; x:longint; y:longint; color:longint); cdecl; external libgd; +procedure gdImageCopy(dst:gdImagePtr; src:gdImagePtr; dstX:longint; dstY:longint; srcX:longint; srcY:longint; w:longint; h:longint); cdecl; external libgd; +procedure gdImageCopyMerge(dst:gdImagePtr; src:gdImagePtr; dstX:longint; dstY:longint; srcX:longint; srcY:longint; w:longint; h:longint; pct:longint); cdecl; external libgd; +procedure gdImageCopyMergeGray(dst:gdImagePtr; src:gdImagePtr; dstX:longint; dstY:longint; srcX:longint; srcY:longint; w:longint; h:longint; pct:longint); cdecl; external libgd; +procedure gdImageCopyResized(dst:gdImagePtr; src:gdImagePtr; dstX:longint; dstY:longint; srcX:longint; srcY:longint; dstW:longint; dstH:longint; srcW:longint; srcH:longint); cdecl; external libgd; +procedure gdImageSetBrush(im:gdImagePtr; brush:gdImagePtr); cdecl; external libgd; +procedure gdImageSetTile(im:gdImagePtr; tile:gdImagePtr); cdecl; external libgd; +procedure gdImageSetStyle(im:gdImagePtr; style:Plongint; noOfPixels:longint); cdecl; external libgd; +procedure gdImageInterlace(im:gdImagePtr; interlaceArg:longint); cdecl; external libgd; + +{ Translated macros } +function gdImageSX(im : pgdimage) : longint; +function gdImageSY(im : pgdimage) : longint; +function gdImageColorsTotal(im : pgdimage) : longint; +function gdImageRed(im : pgdimage; c : longint): longint; +function gdImageGreen(im : pgdimage; c : longint): longint; +function gdImageBlue(im : pgdimage; c : longint): longint; +function gdImageGetTransparent(im : pgdimage) : longint; +function gdImageGetInterlaced(im : pgdimage) : longint; + +function gdNewFileCtx(_para1:PFILE):PgdIOCtx; cdecl; external libgd; +function gdNewDynamicCtx(_para1:longint; _para2:pointer):PgdIOCtx; cdecl; external libgd; +function gdNewSSCtx(infile:gdSourcePtr; _out:gdSinkPtr):PgdIOCtx; cdecl; external libgd; +function gdDPExtractData(ctx:pointer; size:Plongint):pointer; cdecl; external libgd; + +{overloaded pascal functions} +function fopen(a,b:string):pFile; +procedure gdImageChar(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:char; color:longint); +procedure gdImageCharUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:char; color:longint); +procedure gdImageString(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint); +procedure gdImageStringUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint); +procedure gdImageString16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint); +procedure gdImageStringUp16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint); +{$ifdef hasttf} +function gdImageStringTTF(im:PgdImage; brect:Plongint; fg:longint; fontlist:string; ptsize:double; angle:double; x:longint; y:longint; astring:string): string; +function gdImageStringFT(im:PgdImage; brect:Plongint; fg:longint; fontlist:string; ptsize:double; angle:double; x:longint; y:longint; astring:string):string; +{$endif} + + +const + GD2_CHUNKSIZE = 128; + GD2_CHUNKSIZE_MIN = 64; + GD2_CHUNKSIZE_MAX = 4096; + GD2_VERS = 1; + GD2_ID = 'gd2'; + GD2_FMT_RAW = 1; + GD2_FMT_COMPRESSED = 2; + +function gdImageCompare(im1:gdImagePtr; im2:gdImagePtr):longint;cdecl; external libgd; + +const + GD_CMP_IMAGE = 1; + GD_CMP_NUM_COLORS = 2; + GD_CMP_COLOR = 4; + GD_CMP_SIZE_X = 8; + GD_CMP_SIZE_Y = 16; + GD_CMP_TRANSPARENT = 32; + GD_CMP_BACKGROUND = 64; + GD_CMP_INTERLACE = 128; + GD_RESOLUTION = 96; + +implementation + + function gdImageSX(im : pgdimage) : longint; + begin + gdImageSX:=im^.sx; + end; + function gdImageSY(im : pgdimage) : longint; + begin + gdImageSY:=im^.sy; + end; + function gdImageColorsTotal(im : pgdimage) : longint; + begin + gdImageColorsTotal:=im^.colorsTotal; + end; + function gdImageGetTransparent(im : pgdimage) : longint; + begin + gdImageGetTransparent:=im^.transparent; + end; + function gdImageGetInterlaced(im : pgdimage) : longint; + begin + gdImageGetInterlaced:=im^.interlace; + end; + + function gdImageRed(im : pgdimage; c : longint): longint; + + begin + gdImageRed:=im^.red[c]; + end; + + function gdImageGreen(im : pgdimage; c : longint): longint; + + begin + gdImageGreen := im^.green[c]; + end; + + function gdImageBlue(im : pgdimage; c : longint): longint; + + begin + gdImageBlue := im^.blue[c]; + end; + +function fopen(a,b:string):pFile; + +begin +{$ifopt h+} + fopen:=fopen(pchar(a),pchar(b)); +{$else} + a:=a+#0; + b:=b+#0; + fopen:=fopen(@a[1],@b[1]); +{$endif} +end; + +procedure gdImageChar(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:char; color:longint); + +begin + gdimagechar(im,f,x,y,ord(c),color); +end; + +procedure gdImageCharUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:char; color:longint); + +begin + gdimagecharup(im,f,x,y,ord(c),color); +end; + +procedure gdImageString(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint); + +begin +{$ifopt h+} + gdImageString(im,f,x,y,pbyte(pchar(s)),color); +{$else} + s:=s+#0; + gdImageString(im,f,x,y,@s[1],color); +{$endif} +end; + +procedure gdImageStringUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint); + +begin +{$ifopt h+} + gdImageStringUp(im,f,x,y,pbyte(pchar(s)),color); +{$else} + s:=s+#0; + gdImageStringUp(im,f,x,y,pbyte(@s[1]),color); +{$endif} +end; + +procedure gdImageString16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint); + +begin +{$ifopt h+} + gdImageString16(im,f,x,y,pword(pchar(s)),color); +{$else} + s:=s+#0; + gdImageString16(im,f,x,y,pword(@s[1]),color); +{$endif} +end; + +procedure gdImageStringUp16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint); + +begin +{$ifopt h+} + gdImageStringUp16(im,f,x,y,pword(pchar(s)),color); +{$else} + s:=s+#0; + gdImageStringUp16(im,f,x,y,pword(@s[1]),color); +{$endif} +end; + +{$ifdef hasttf} + +function gdImageStringTTF(im:PgdImage; brect:Plongint; fg:longint; fontlist:string; ptsize:double; angle:double; x:longint; y:longint; astring:string): string; + +begin +{$ifopt h+} + gdImageStringTTF:=strpas(gdImageStringTTF(im,brect,fg,pchar(fontlist),ptsize,angle,x,y,pchar(astring))); +{$else} + fontlist:=fornlist+#0; + astring:=astring+#0; + gdImageStringTTF:=strpas(gdImageStringTTF(im,brect,fg,@fontlist[1],ptsize,angle,x,y,@astring[1])); +{$endif} +end; + +function gdImageStringFT(im:PgdImage; brect:Plongint; fg:longint; fontlist:string; ptsize:double; angle:double; x:longint; y:longint; astring:string):string; + +begin +{$ifopt h+} + gdImageStringFT:=strpas(gdImageStringFT(im,brect,fg,pchar(fontlist),ptsize,angle,x,y,pchar(astring))); +{$else} + fontlist:=fornlist+#0; + astring:=astring+#0; + gdImageStringFT:=strpas(gdImageStringFT(im,brect,fg,@fontlist[1],ptsize,angle,x,y,@astring[1])); + +{$endif} +end; +{$endif} + +end. |
