gd.pp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. {
  2. $Id$
  3. This file is part of the Free Pascal run time library.
  4. Copyright (c) 1999-2000 by Michael Van Canneyt, member of
  5. the Free Pascal development team
  6. This file implements an interface to the gd library.
  7. See the file COPYING.FPC, included in this distribution,
  8. for details about the copyright.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12. **********************************************************************}
  13. unit gd;
  14. interface
  15. {$linklib c}
  16. {$linklib m}
  17. {$linklib png}
  18. {$linklib gd}
  19. {$ifdef hasttf}
  20. {$linklib ttf}
  21. {$endif hasttf}
  22. {$PACKRECORDS C}
  23. const
  24. libgd = 'gd';
  25. libc = 'c';
  26. GD_H = 1;
  27. DEFAULT_FONTPATH = '/usr/share/fonts/truetype';
  28. PATHSEPARATOR = ':';
  29. gdMaxColors = 256;
  30. type
  31. PByte = ^Byte;
  32. PPByte = ^PByte;
  33. PVoid = Pointer;
  34. PFile = Pointer;
  35. PGDIMAGESTRUCT = ^gdImage;
  36. gdImage = record
  37. pixels : PPbyte;
  38. sx : longint;
  39. sy : longint;
  40. colorsTotal : longint;
  41. red : array[0..(gdMaxColors)-1] of longint;
  42. green : array[0..(gdMaxColors)-1] of longint;
  43. blue : array[0..(gdMaxColors)-1] of longint;
  44. open : array[0..(gdMaxColors)-1] of longint;
  45. transparent : longint;
  46. polyInts : Plongint;
  47. polyAllocated : longint;
  48. brush : PgdImageStruct;
  49. tile : PgdImageStruct;
  50. brushColorMap : array[0..(gdMaxColors)-1] of longint;
  51. tileColorMap : array[0..(gdMaxColors)-1] of longint;
  52. styleLength : longint;
  53. stylePos : longint;
  54. style : Plongint;
  55. interlace : longint;
  56. end;
  57. gdImageStruct = gdImage;
  58. pgdImage = ^gdImage;
  59. gdImagePtr = PgdImage;
  60. gdFont = record
  61. nchars : longint;
  62. offset : longint;
  63. w : longint;
  64. h : longint;
  65. data : Pchar;
  66. end;
  67. pgdFont = ^gdFont;
  68. gdFontPtr = PgdFont;
  69. var
  70. {$ifndef darwin}
  71. gdFontLarge : gdFontPtr; cvar; external;
  72. gdFontSmall : gdFontPtr; cvar; external;
  73. gdFontGiant : gdFontPtr; cvar; external;
  74. gdFontMediumBold : gdFontPtr; cvar; external;
  75. gdFontTiny : gdFontPtr; cvar; external;
  76. {$else darwin}
  77. gdFontLarge : gdFontPtr; external libgd name 'gdFontLarge';
  78. gdFontSmall : gdFontPtr; external libgd name 'gdFontSmall';
  79. gdFontGiant : gdFontPtr; external libgd name 'gdFontGiant';
  80. gdFontMediumBold : gdFontPtr; external libgd name 'gdFontMediumBold';
  81. gdFontTiny : gdFontPtr; external libgd name 'gdFontTiny';
  82. {$endif darwin}
  83. const
  84. gdDashSize = 4;
  85. gdStyled = -(2);
  86. gdBrushed = -(3);
  87. gdStyledBrushed = -(4);
  88. gdTiled = -(5);
  89. gdTransparent = -(6);
  90. type
  91. gdSource = record
  92. source : function (context:Pointer; buffer:Pchar; len:longint):longint;cdecl;
  93. context : pointer;
  94. end;
  95. pgdSource = ^gdSource;
  96. gdSourcePtr = PgdSource;
  97. gdSink = record
  98. sink : function (context:Pvoid; buffer:Pchar; len:longint):longint;cdecl;
  99. context : pointer;
  100. end;
  101. pgdSink = ^gdSink;
  102. gdSinkPtr = PgdSink;
  103. gdPoint = record
  104. x : longint;
  105. y : longint;
  106. end;
  107. pgdPoint = ^gdPoint;
  108. gdPointPtr = PgdPoint;
  109. pgdIOCtx = ^gdIOCtx;
  110. gdIOCtx = record
  111. getC : function (_para1:PgdIOCtx):longint;cdecl;
  112. getBuf : function (_para1:PgdIOCtx; _para2:pointer; _para3:longint):longint;
  113. putC : procedure (_para1:PgdIOCtx; _para2:longint);
  114. putBuf : function (_para1:PgdIOCtx; _para2:pointer; _para3:longint):longint;
  115. seek : function (_para1:PgdIOCtx; _para2:longint):longint;
  116. tell : function (_para1:PgdIOCtx):longint;
  117. free : procedure (_para1:PgdIOCtx);
  118. end;
  119. GDIOCTXPTR = pgdIOCtx;
  120. { Translated from gd_io.h}
  121. function fopen(a,b:pchar):pFile; cdecl;external libc;
  122. procedure fclose(a:pFile); cdecl;external libc;
  123. procedure Putword(w:longint; ctx:PgdIOCtx); cdecl; external libgd;
  124. procedure Putchar(c:longint; ctx:PgdIOCtx); cdecl; external libgd;
  125. procedure gdPutC(c:byte; ctx:PgdIOCtx); cdecl; external libgd;
  126. function gdPutBuf(_para1:pointer; _para2:longint; _para3:PgdIOCtx):longint; cdecl; external libgd;
  127. procedure gdPutWord(w:longint; ctx:PgdIOCtx); cdecl; external libgd;
  128. procedure gdPutInt(w:longint; ctx:PgdIOCtx); cdecl; external libgd;
  129. function gdGetC(ctx:PgdIOCtx):longint; cdecl; external libgd;
  130. function gdGetBuf(_para1:pointer; _para2:longint; _para3:PgdIOCtx):longint; cdecl; external libgd;
  131. function gdGetByte(result:Plongint; ctx:PgdIOCtx):longint; cdecl; external libgd;
  132. function gdGetWord(result:Plongint; ctx:PgdIOCtx):longint; cdecl; external libgd;
  133. function gdGetInt(result:Plongint; ctx:PgdIOCtx):longint; cdecl; external libgd;
  134. function gdSeek(ctx:PgdIOCtx; _para2:longint):longint; cdecl; external libgd;
  135. function gdTell(ctx:PgdIOCtx):longint; cdecl; external libgd;
  136. function gdImageCreate(sx:longint; sy:longint):gdImagePtr; cdecl; external libgd;
  137. function gdImageCreateFromPng(fd:PFILE):gdImagePtr; cdecl; external libgd;
  138. function gdImageCreateFromPngCtx(inIO:gdIOCtxPtr):gdImagePtr; cdecl; external libgd;
  139. function gdImageCreateFromWBMP(inFile:PFILE):gdImagePtr; cdecl; external libgd;
  140. function gdImageCreateFromWBMPCtx(infile:PgdIOCtx):gdImagePtr; cdecl; external libgd;
  141. function gdImageCreateFromJpeg(infile:PFILE):gdImagePtr; cdecl; external libgd;
  142. function gdImageCreateFromJpegCtx(infile:PgdIOCtx):gdImagePtr; cdecl; external libgd;
  143. function gdImageCreateFromPngSource(infile:gdSourcePtr):gdImagePtr; cdecl; external libgd;
  144. function gdImageCreateFromGd(infile:PFILE):gdImagePtr; cdecl; external libgd;
  145. function gdImageCreateFromGdCtx(infile:gdIOCtxPtr):gdImagePtr; cdecl; external libgd;
  146. function gdImageCreateFromGd2(infile:PFILE):gdImagePtr; cdecl; external libgd;
  147. function gdImageCreateFromGd2Ctx(infile:gdIOCtxPtr):gdImagePtr; cdecl; external libgd;
  148. function gdImageCreateFromGd2Part(infile:PFILE; srcx:longint; srcy:longint; w:longint; h:longint):gdImagePtr; cdecl; external libgd;
  149. function gdImageCreateFromGd2PartCtx(infile:gdIOCtxPtr; srcx:longint; srcy:longint; w:longint; h:longint):gdImagePtr; cdecl; external libgd;
  150. function gdImageCreateFromXbm(fd:PFILE):gdImagePtr; cdecl; external libgd;
  151. procedure gdImageDestroy(im:gdImagePtr); cdecl; external libgd;
  152. procedure gdImageSetPixel(im:gdImagePtr; x:longint; y:longint; color:longint); cdecl; external libgd;
  153. function gdImageGetPixel(im:gdImagePtr; x:longint; y:longint):longint; cdecl; external libgd;
  154. procedure gdImageLine(im:gdImagePtr; x1:longint; y1:longint; x2:longint; y2:longint; color:longint); cdecl; external libgd;
  155. procedure gdImageDashedLine(im:gdImagePtr; x1:longint; y1:longint; x2:longint; y2:longint; color:longint); cdecl; external libgd;
  156. procedure gdImageRectangle(im:gdImagePtr; x1:longint; y1:longint; x2:longint; y2:longint; color:longint); cdecl; external libgd;
  157. procedure gdImageFilledRectangle(im:gdImagePtr; x1:longint; y1:longint; x2:longint; y2:longint; color:longint); cdecl; external libgd;
  158. function gdImageBoundsSafe(im:gdImagePtr; x:longint; y:longint):longint; cdecl; external libgd;
  159. procedure gdImageChar(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:longint; color:longint); cdecl; external libgd;
  160. procedure gdImageCharUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:longint; color:longint); cdecl; external libgd;
  161. procedure gdImageString(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:Pbyte; color:longint); cdecl; external libgd;
  162. procedure gdImageStringUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:Pbyte; color:longint); cdecl; external libgd;
  163. procedure gdImageString16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:Pword; color:longint); cdecl; external libgd;
  164. procedure gdImageStringUp16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:Pword; color:longint); cdecl; external libgd;
  165. {$ifdef HasTTF}
  166. function gdImageStringTTF(im:PgdImage; brect:Plongint; fg:longint; fontlist:Pchar; ptsize:double; angle:double; x:longint; y:longint; astring:Pchar):Pchar; cdecl; external libgd;
  167. function gdImageStringFT(im:PgdImage; brect:Plongint; fg:longint; fontlist:Pchar; ptsize:double; angle:double; x:longint; y:longint; astring:Pchar):Pchar; cdecl; external libgd;
  168. {$endif hasTTF}
  169. procedure gdImagePolygon(im:gdImagePtr; p:gdPointPtr; n:longint; c:longint); cdecl; external libgd;
  170. procedure gdImageFilledPolygon(im:gdImagePtr; p:gdPointPtr; n:longint; c:longint); cdecl; external libgd;
  171. function gdImageColorAllocate(im:gdImagePtr; r:longint; g:longint; b:longint):longint; cdecl; external libgd;
  172. function gdImageColorClosest(im:gdImagePtr; r:longint; g:longint; b:longint):longint; cdecl; external libgd;
  173. function gdImageColorExact(im:gdImagePtr; r:longint; g:longint; b:longint):longint; cdecl; external libgd;
  174. function gdImageColorResolve(im:gdImagePtr; r:longint; g:longint; b:longint):longint; cdecl; external libgd;
  175. procedure gdImageColorDeallocate(im:gdImagePtr; color:longint); cdecl; external libgd;
  176. procedure gdImageColorTransparent(im:gdImagePtr; color:longint); cdecl; external libgd;
  177. procedure gdImagePaletteCopy(dst:gdImagePtr; src:gdImagePtr); cdecl; external libgd;
  178. procedure gdImagePng(im:gdImagePtr; _out:PFILE); cdecl; external libgd;
  179. procedure gdImagePngCtx(im:gdImagePtr; _out:PgdIOCtx); cdecl; external libgd;
  180. procedure gdImageWBMP(image:gdImagePtr; fg:longint; _out:PFILE); cdecl; external libgd;
  181. procedure gdImageWBMPCtx(image:gdImagePtr; fg:longint; _out:PgdIOCtx); cdecl; external libgd;
  182. procedure gdFree(m:Pvoid); cdecl; external libgd;
  183. function gdImageWBMPPtr(im:gdImagePtr; size:Plongint; fg:longint):pointer; cdecl; external libgd;
  184. procedure gdImageJpeg(im:gdImagePtr; _out:PFILE; quality:longint); cdecl; external libgd;
  185. procedure gdImageJpegCtx(im:gdImagePtr; _out:PgdIOCtx; quality:longint); cdecl; external libgd;
  186. function gdImageJpegPtr(im:gdImagePtr; size:Plongint; quality:longint):pointer; cdecl; external libgd;
  187. procedure gdImagePngToSink(im:gdImagePtr; _out:gdSinkPtr); cdecl; external libgd;
  188. procedure gdImageGd(im:gdImagePtr; _out:PFILE); cdecl; external libgd;
  189. procedure gdImageGd2(im:gdImagePtr; _out:PFILE; cs:longint; fmt:longint); cdecl; external libgd;
  190. function gdImagePngPtr(im:gdImagePtr; size:Plongint):pointer; cdecl; external libgd;
  191. function gdImageGdPtr(im:gdImagePtr; size:Plongint):pointer; cdecl; external libgd;
  192. function gdImageGd2Ptr(im:gdImagePtr; cs:longint; fmt:longint; size:Plongint):pointer; cdecl; external libgd;
  193. procedure gdImageArc(im:gdImagePtr; cx:longint; cy:longint; w:longint; h:longint; s:longint; e:longint; color:longint); cdecl; external libgd;
  194. procedure gdImageFillToBorder(im:gdImagePtr; x:longint; y:longint; border:longint; color:longint); cdecl; external libgd;
  195. procedure gdImageFill(im:gdImagePtr; x:longint; y:longint; color:longint); cdecl; external libgd;
  196. procedure gdImageCopy(dst:gdImagePtr; src:gdImagePtr; dstX:longint; dstY:longint; srcX:longint; srcY:longint; w:longint; h:longint); cdecl; external libgd;
  197. procedure gdImageCopyMerge(dst:gdImagePtr; src:gdImagePtr; dstX:longint; dstY:longint; srcX:longint; srcY:longint; w:longint; h:longint; pct:longint); cdecl; external libgd;
  198. procedure gdImageCopyMergeGray(dst:gdImagePtr; src:gdImagePtr; dstX:longint; dstY:longint; srcX:longint; srcY:longint; w:longint; h:longint; pct:longint); cdecl; external libgd;
  199. 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;
  200. procedure gdImageSetBrush(im:gdImagePtr; brush:gdImagePtr); cdecl; external libgd;
  201. procedure gdImageSetTile(im:gdImagePtr; tile:gdImagePtr); cdecl; external libgd;
  202. procedure gdImageSetStyle(im:gdImagePtr; style:Plongint; noOfPixels:longint); cdecl; external libgd;
  203. procedure gdImageInterlace(im:gdImagePtr; interlaceArg:longint); cdecl; external libgd;
  204. { Translated macros }
  205. function gdImageSX(im : pgdimage) : longint;
  206. function gdImageSY(im : pgdimage) : longint;
  207. function gdImageColorsTotal(im : pgdimage) : longint;
  208. function gdImageRed(im : pgdimage; c : longint): longint;
  209. function gdImageGreen(im : pgdimage; c : longint): longint;
  210. function gdImageBlue(im : pgdimage; c : longint): longint;
  211. function gdImageGetTransparent(im : pgdimage) : longint;
  212. function gdImageGetInterlaced(im : pgdimage) : longint;
  213. function gdNewFileCtx(_para1:PFILE):PgdIOCtx; cdecl; external libgd;
  214. function gdNewDynamicCtx(_para1:longint; _para2:pointer):PgdIOCtx; cdecl; external libgd;
  215. function gdNewSSCtx(infile:gdSourcePtr; _out:gdSinkPtr):PgdIOCtx; cdecl; external libgd;
  216. function gdDPExtractData(ctx:pointer; size:Plongint):pointer; cdecl; external libgd;
  217. {overloaded pascal functions}
  218. function fopen(a,b:string):pFile;
  219. procedure gdImageChar(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:char; color:longint);
  220. procedure gdImageCharUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:char; color:longint);
  221. procedure gdImageString(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
  222. procedure gdImageStringUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
  223. procedure gdImageString16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
  224. procedure gdImageStringUp16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
  225. {$ifdef hasttf}
  226. function gdImageStringTTF(im:PgdImage; brect:Plongint; fg:longint; fontlist:string; ptsize:double; angle:double; x:longint; y:longint; astring:string): string;
  227. function gdImageStringFT(im:PgdImage; brect:Plongint; fg:longint; fontlist:string; ptsize:double; angle:double; x:longint; y:longint; astring:string):string;
  228. {$endif}
  229. const
  230. GD2_CHUNKSIZE = 128;
  231. GD2_CHUNKSIZE_MIN = 64;
  232. GD2_CHUNKSIZE_MAX = 4096;
  233. GD2_VERS = 1;
  234. GD2_ID = 'gd2';
  235. GD2_FMT_RAW = 1;
  236. GD2_FMT_COMPRESSED = 2;
  237. function gdImageCompare(im1:gdImagePtr; im2:gdImagePtr):longint;cdecl; external libgd;
  238. const
  239. GD_CMP_IMAGE = 1;
  240. GD_CMP_NUM_COLORS = 2;
  241. GD_CMP_COLOR = 4;
  242. GD_CMP_SIZE_X = 8;
  243. GD_CMP_SIZE_Y = 16;
  244. GD_CMP_TRANSPARENT = 32;
  245. GD_CMP_BACKGROUND = 64;
  246. GD_CMP_INTERLACE = 128;
  247. GD_RESOLUTION = 96;
  248. implementation
  249. function gdImageSX(im : pgdimage) : longint;
  250. begin
  251. gdImageSX:=im^.sx;
  252. end;
  253. function gdImageSY(im : pgdimage) : longint;
  254. begin
  255. gdImageSY:=im^.sy;
  256. end;
  257. function gdImageColorsTotal(im : pgdimage) : longint;
  258. begin
  259. gdImageColorsTotal:=im^.colorsTotal;
  260. end;
  261. function gdImageGetTransparent(im : pgdimage) : longint;
  262. begin
  263. gdImageGetTransparent:=im^.transparent;
  264. end;
  265. function gdImageGetInterlaced(im : pgdimage) : longint;
  266. begin
  267. gdImageGetInterlaced:=im^.interlace;
  268. end;
  269. function gdImageRed(im : pgdimage; c : longint): longint;
  270. begin
  271. gdImageRed:=im^.red[c];
  272. end;
  273. function gdImageGreen(im : pgdimage; c : longint): longint;
  274. begin
  275. gdImageGreen := im^.green[c];
  276. end;
  277. function gdImageBlue(im : pgdimage; c : longint): longint;
  278. begin
  279. gdImageBlue := im^.blue[c];
  280. end;
  281. function fopen(a,b:string):pFile;
  282. begin
  283. {$ifopt h+}
  284. fopen:=fopen(pchar(a),pchar(b));
  285. {$else}
  286. a:=a+#0;
  287. b:=b+#0;
  288. fopen:=fopen(@a[1],@b[1]);
  289. {$endif}
  290. end;
  291. procedure gdImageChar(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:char; color:longint);
  292. begin
  293. gdimagechar(im,f,x,y,ord(c),color);
  294. end;
  295. procedure gdImageCharUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:char; color:longint);
  296. begin
  297. gdimagecharup(im,f,x,y,ord(c),color);
  298. end;
  299. procedure gdImageString(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
  300. begin
  301. {$ifopt h+}
  302. gdImageString(im,f,x,y,pbyte(pchar(s)),color);
  303. {$else}
  304. s:=s+#0;
  305. gdImageString(im,f,x,y,@s[1],color);
  306. {$endif}
  307. end;
  308. procedure gdImageStringUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
  309. begin
  310. {$ifopt h+}
  311. gdImageStringUp(im,f,x,y,pbyte(pchar(s)),color);
  312. {$else}
  313. s:=s+#0;
  314. gdImageStringUp(im,f,x,y,pbyte(@s[1]),color);
  315. {$endif}
  316. end;
  317. procedure gdImageString16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
  318. begin
  319. {$ifopt h+}
  320. gdImageString16(im,f,x,y,pword(pchar(s)),color);
  321. {$else}
  322. s:=s+#0;
  323. gdImageString16(im,f,x,y,pword(@s[1]),color);
  324. {$endif}
  325. end;
  326. procedure gdImageStringUp16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
  327. begin
  328. {$ifopt h+}
  329. gdImageStringUp16(im,f,x,y,pword(pchar(s)),color);
  330. {$else}
  331. s:=s+#0;
  332. gdImageStringUp16(im,f,x,y,pword(@s[1]),color);
  333. {$endif}
  334. end;
  335. {$ifdef hasttf}
  336. function gdImageStringTTF(im:PgdImage; brect:Plongint; fg:longint; fontlist:string; ptsize:double; angle:double; x:longint; y:longint; astring:string): string;
  337. begin
  338. {$ifopt h+}
  339. gdImageStringTTF:=strpas(gdImageStringTTF(im,brect,fg,pchar(fontlist),ptsize,angle,x,y,pchar(astring)));
  340. {$else}
  341. fontlist:=fornlist+#0;
  342. astring:=astring+#0;
  343. gdImageStringTTF:=strpas(gdImageStringTTF(im,brect,fg,@fontlist[1],ptsize,angle,x,y,@astring[1]));
  344. {$endif}
  345. end;
  346. function gdImageStringFT(im:PgdImage; brect:Plongint; fg:longint; fontlist:string; ptsize:double; angle:double; x:longint; y:longint; astring:string):string;
  347. begin
  348. {$ifopt h+}
  349. gdImageStringFT:=strpas(gdImageStringFT(im,brect,fg,pchar(fontlist),ptsize,angle,x,y,pchar(astring)));
  350. {$else}
  351. fontlist:=fornlist+#0;
  352. astring:=astring+#0;
  353. gdImageStringFT:=strpas(gdImageStringFT(im,brect,fg,@fontlist[1],ptsize,angle,x,y,@astring[1]));
  354. {$endif}
  355. end;
  356. {$endif}
  357. end.