home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 mARCH / PCWK3A99.iso / Linux / DDD331 / DDD-3_1_.000 / DDD-3_1_ / ddd-3.1.1 / ddd / eps-code.h < prev    next >
Text File  |  1998-12-06  |  12KB  |  417 lines

  1. // $Id: eps-code.x,v 1.9 1998/03/25 12:45:41 zeller Exp $ -*- C++ -*-
  2.  
  3. // Copyright (C) 1995 Technische Universitaet Braunschweig, Germany.
  4. // Written by Christian Lindig <lindig@ips.cs.tu-bs.de>.
  5. // 
  6. // This file is part of DDD.
  7. // 
  8. // DDD is free software; you can redistribute it and/or
  9. // modify it under the terms of the GNU General Public
  10. // License as published by the Free Software Foundation; either
  11. // version 2 of the License, or (at your option) any later version.
  12. // 
  13. // DDD is distributed in the hope that it will be useful,
  14. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  16. // See the GNU General Public License for more details.
  17. // 
  18. // You should have received a copy of the GNU General Public
  19. // License along with DDD -- see the file COPYING.
  20. // If not, write to the Free Software Foundation, Inc.,
  21. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  22. // 
  23. // DDD is the data display debugger.
  24. // For details, see the DDD World-Wide-Web page, 
  25. // `http://www.cs.tu-bs.de/softech/ddd/',
  26. // or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.
  27.  
  28. //
  29. // $Id: eps-code.x,v 1.9 1998/03/25 12:45:41 zeller Exp $
  30. //
  31. // This file is only a template for generating eps-code.h!
  32. // Do not edit this file directly!  Edit the *.ps code and
  33. // call make(1).
  34. //
  35.  
  36. char eps_code_rcsid[] = 
  37.     "$Id: eps-code.x,v 1.9 1998/03/25 12:45:41 zeller Exp $";
  38.  
  39. static const char prolog[] = 
  40. "% $Id: header.ps,v 1.11 1998/10/05 12:21:09 zeller Exp $\n"
  41. "% Header for DDD PostScript Box output\n"
  42. "\n"
  43. "% Copyright (C) 1995-1998 Technische Universitaet Braunschweig, Germany.\n"
  44. "% Written by Christian Lindig <lindig@ips.cs.tu-bs.de>.\n"
  45. "% \n"
  46. "% This file is part of DDD.\n"
  47. "% \n"
  48. "% DDD is free software; you can redistribute it and/or\n"
  49. "% modify it under the terms of the GNU General Public\n"
  50. "% License as published by the Free Software Foundation; either\n"
  51. "% version 2 of the License, or (at your option) any later version.\n"
  52. "% \n"
  53. "% DDD is distributed in the hope that it will be useful,\n"
  54. "% but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
  55. "% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
  56. "% See the GNU General Public License for more details.\n"
  57. "% \n"
  58. "% You should have received a copy of the GNU General Public\n"
  59. "% License along with DDD -- see the file COPYING.\n"
  60. "% If not, write to the Free Software Foundation, Inc.,\n"
  61. "% 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
  62. "% \n"
  63. "% DDD is the data display debugger.\n"
  64. "% For details, see the DDD World-Wide-Web page, \n"
  65. "% `http://www.cs.tu-bs.de/softech/ddd/',\n"
  66. "% or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.\n"
  67. "\n"
  68. "% Make all definitions local to the ddddict dictionary\n"
  69. "/ddddict 25 dict def \n"
  70. "\n"
  71. "ddddict begin        % make dict active \n"
  72. "\n"
  73. "\n"
  74. "% Global variables\n"
  75. "/fontSize+ 12 def\n"
  76. "/font+ /Courier def  \n"
  77. "\n"
  78. "\n"
  79. "% Some small utilities\n"
  80. "/cm { 28.34646 mul } bind def\n"
  81. "\n"
  82. "\n"
  83. "% ISOLATIN1* - reencode a font to ISO Latin 1 encoding\n"
  84. "%\n"
  85. "% newfont table oldfont isolatin1*\n"
  86. "\n"
  87. "/isolatin1* {\n"
  88. "    findfont\n"
  89. "    dup maxlength dict begin\n"
  90. "    {\n"
  91. "        1 index /FID ne { def } { pop pop } ifelse\n"
  92. "    } forall\n"
  93. "    /Encoding exch def\n"
  94. "    dup /FontName exch def\n"
  95. "    currentdict end definefont pop\n"
  96. "} bind def\n"
  97. "\n"
  98. "\n"
  99. "% Define the ISO Latin 1 encoding of a font\n"
  100. " \n"
  101. "/isotable[\n"
  102. "/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n"
  103. "/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n"
  104. "/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n"
  105. "/.notdef/.notdef/.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign\n"
  106. "/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma\n"
  107. "/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon\n"
  108. "/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S\n"
  109. "/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore\n"
  110. "/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar\n"
  111. "/braceright/asciitilde/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n"
  112. "/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef\n"
  113. "/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve/dotaccent/dieresis\n"
  114. "/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron/.notdef/exclamdown/cent\n"
  115. "/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine\n"
  116. "/guilsinglleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior\n"
  117. "/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior\n"
  118. "/ordmasculine/guilsinglright/onequarter/onehalf/threequarters/questiondown\n"
  119. "/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute\n"
  120. "/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve\n"
  121. "/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex\n"
  122. "/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis\n"
  123. "/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute\n"
  124. "/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis\n"
  125. "/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis\n"
  126. "] def\n"
  127. "\n"
  128. "\n"
  129. "% YCORRECT*\n"
  130. "% The reference point of a string ist NOT its lower left corner but \n"
  131. "% its baseline.  Therefore, the y coordinate must be corrected.  \n"
  132. "% Returns the correction for the current font.\n"
  133. "%\n"
  134. "% ycorrect* y\n"
  135. "\n"
  136. "/ycorrect* {\n"
  137. "    currentfont /FontBBox get\n"
  138. "    aload pop pop pop\n"
  139. "    currentfont /FontMatrix get dtransform\n"
  140. "    exch pop\n"
  141. "} def \n"
  142. "\n"
  143. "\n"
  144. "% TEXT*\n"
  145. "% print out a string and make sure not to require more space than\n"
  146. "% specified.\n"
  147. "% font xsize ysize xorigin yorigin (string) text*\n"
  148. "\n"
  149. "/text* {\n"
  150. "\n"
  151. "    /string+ exch def        % set up some variables ..\n"
  152. "    moveto                % move to (xorigin,yorigin)\n"
  153. "    /ysize+ exch def\n"
  154. "    /xsize+ exch def\n"
  155. "    /thefont+ exch def\n"
  156. "\n"
  157. "    % is the right font already selected ?\n"
  158. "\n"
  159. "    thefont+ font+ ne \n"
  160. "    ysize+ fontSize+ ne\n"
  161. "    or {    \n"
  162. "        % set up the right font - reencode it    \n"
  163. "        \n"
  164. "        /Symbol thefont+ eq \n"
  165. "        {\n"
  166. "            thefont+ findfont\n"
  167. "        }{\n"
  168. "\n"
  169. "            /isofont+ isotable thefont+ isolatin1*    \n"
  170. "            /isofont+ findfont\n"
  171. "        }ifelse\n"
  172. "\n"
  173. "        [ysize+ 0 0 ysize+ neg 0 0] makefont\n"
  174. "        setfont\n"
  175. "        \n"
  176. "        /font+ thefont+ def\n"
  177. "        /fontSize+ ysize+ def\n"
  178. "    } if\n"
  179. "\n"
  180. "    % correct current point \n"
  181. "\n"
  182. "    0 ycorrect* neg rmoveto\n"
  183. "\n"
  184. "    % string too long?  Scale it down ...\n"
  185. "    % The actual font is scaled. There is a good chance,\n"
  186. "    % that this will not happen too often when the font is not\n"
  187. "    % changed during the calls of text*\n"
  188. "\n"
  189. "    xsize+ string+ stringwidth pop div dup dup\n"
  190. "    1 lt {\n"
  191. "        0 0 1 0 0 6 array astore currentfont exch \n"
  192. "        makefont setfont\n"
  193. "        pop\n"
  194. "    }{ \n"
  195. "        % string is too short ... scale it up\n"
  196. "\n"
  197. "        1.05 gt {\n"
  198. "            0 0 1 0 0 6 array astore currentfont exch \n"
  199. "            makefont setfont    \n"
  200. "        }{\n"
  201. "            pop\n"
  202. "\n"
  203. "        } ifelse\n"
  204. "    } ifelse\n"
  205. "    \n"
  206. "    string+ show\n"
  207. "\n"
  208. "} bind def\n"
  209. "\n"
  210. "    \n"
  211. "% ARROWLINE*\n"
  212. "% Draw a line of given width with an arrow at its end\n"
  213. "% len gives the height of the triangle forming the head of the arrow\n"
  214. "% and angle the angle at its top\n"
  215. "%    \n"
  216. "% angle len  x1 y1 x2 y2 linewidth arrowline*\n"
  217. "\n"
  218. "/arrowline* {\n"
  219. "    setlinewidth            % angle len x1 y1 x2 y2\n"
  220. "    /y2 exch def\n"
  221. "    /x2 exch def\n"
  222. "    /y1 exch def\n"
  223. "    /x1 exch def\n"
  224. "    /len+ exch def            % height of triangle\n"
  225. "\n"
  226. "    /alpha+ \n"
  227. "        y2 y1 sub        % define alpha+\n"
  228. "        x2 x1 sub\n"
  229. "        atan\n"
  230. "    def\n"
  231. "\n"
  232. "    /base+                % define half of baseline\n"
  233. "        exch \n"
  234. "        2 div dup        % angle angle\n"
  235. "        sin exch cos          % sin(angle) cos(angle)\n"
  236. "        div            % tan(angle)\n"
  237. "        len+\n"
  238. "        mul            % half of baseline\n"
  239. "    def  \n"
  240. "    \n"
  241. "    newpath                % draw the line\n"
  242. "    x1 y1 moveto \n"
  243. "    x2 len+ alpha+ cos mul sub     % shorten the line to the end  \n"
  244. "    y2 len+ alpha+ sin mul sub     % of the triangle\n"
  245. "    lineto\n"
  246. "    stroke        \n"
  247. "\n"
  248. "    gsave                % set the origin to the head of\n"
  249. "    0 setlinewidth            % the arrow and rotate the system\n"
  250. "    x2 y2 \n"
  251. "    translate            % origin now at x2 y2\n"
  252. "\n"
  253. "    alpha+ 90 sub rotate         % rotate the system\n"
  254. "\n"
  255. "    newpath                % draw a triangle\n"
  256. "    0 0 moveto\n"
  257. "    base+ len+ neg rlineto\n"
  258. "    base+ 2 mul neg 0 rlineto\n"
  259. "    closepath\n"
  260. "    fill\n"
  261. "    \n"
  262. "    grestore\n"
  263. "} bind def\n"
  264. "\n"
  265. "% ARROWHEAD*\n"
  266. "% draw an arrow head inclined by alpha at (x,y)\n"
  267. "%\n"
  268. "% angle len alpha x y\n"
  269. "\n"
  270. "/arrowhead* {\n"
  271. "    /y exch def\n"
  272. "    /x exch def\n"
  273. "    /alpha+ exch def\n"
  274. "    /len+ exch def            % height of triangle\n"
  275. "\n"
  276. "    /base+                % define half of baseline\n"
  277. "        exch \n"
  278. "        2 div dup        % angle angle\n"
  279. "        sin exch cos          % sin(angle) cos(angle)\n"
  280. "        div            % tan(angle)\n"
  281. "        len+\n"
  282. "        mul            % half of baseline\n"
  283. "    def\n"
  284. "\n"
  285. "    gsave                % set the origin to the head of\n"
  286. "    0 setlinewidth            % the arrow and rotate the system\n"
  287. "    x y \n"
  288. "    translate            % origin now at x y\n"
  289. "\n"
  290. "    alpha+ 90 sub rotate         % rotate the system\n"
  291. "\n"
  292. "    newpath                % draw a triangle\n"
  293. "    0 0 moveto\n"
  294. "    base+ len+ neg rlineto\n"
  295. "    base+ 2 mul neg 0 rlineto\n"
  296. "    closepath\n"
  297. "    fill\n"
  298. "    \n"
  299. "    grestore\n"
  300. "} bind def\n"
  301. "\n"
  302. "\n"
  303. "% LINE*\n"
  304. "% draw a line of given width from (x1,y1) to (x2,y2)\n"
  305. "%\n"
  306. "% x1 y1 x2 y2 width line*\n"
  307. "\n"
  308. "/line* {\n"
  309. "    setlinewidth    % x1 y1 x2 y2\n"
  310. "    newpath\n"
  311. "    4 2 roll     % x2 y2 x1 y1\n"
  312. "    moveto        % x2 y2\n"
  313. "    lineto        \n"
  314. "    stroke\n"
  315. "} bind def\n"
  316. "\n"
  317. "\n"
  318. "% CLEAN*\n"
  319. "%\n"
  320. "% fill a box given by four points with white colour ..\n"
  321. "% x1 y1 x2 y2 x3 y3 x4 y4 clean*\n"
  322. "\n"
  323. "/clean* {\n"
  324. "    gsave\n"
  325. "    1 setgray\n"
  326. "    0 setlinewidth\n"
  327. "    newpath\n"
  328. "    moveto  lineto  lineto lineto\n"
  329. "    closepath\n"
  330. "    fill\n"
  331. "    grestore\n"
  332. "} bind def\n"
  333. "\n"
  334. "\n"
  335. "% BOX*\n"
  336. "% fill a box given by four points\n"
  337. "%\n"
  338. "% x1 y1 x2 y2 x3 y3 x4 y4 box*\n"
  339. "\n"
  340. "/box* {\n"
  341. "    0 setlinewidth\n"
  342. "    newpath\n"
  343. "    moveto     lineto     lineto lineto\n"
  344. "    closepath\n"
  345. "    fill\n"
  346. "} bind def\n"
  347. "\n"
  348. "\n"
  349. "% ARC*\n"
  350. "% draw an ellipse with center (cx,cy), radius dx dy, starting at start\n"
  351. "% and ending at end.\n"
  352. "%\n"
  353. "% start end dx dy cx cy width arc*\n"
  354. "\n"
  355. "/arc* {\n"
  356. "    gsave\n"
  357. "    setlinewidth\n"
  358. "    translate\n"
  359. "    newpath\n"
  360. "    dup 3 1 roll        % start end dy dx dy\n"
  361. "    div 1 scale        % dy dx/dy 1 scale => start end dy\n"
  362. "    \n"
  363. "    0 exch  0 exch        % start end 0 0 dy \n"
  364. "    5 -2 roll         % 0 0 dy start end\n"
  365. "\n"
  366. "    dup\n"
  367. "    0 eq {            % replace 0 by 360\n"
  368. "        pop \n"
  369. "        360\n"
  370. "    } if\n"
  371. "    arc\n"
  372. "    stroke\n"
  373. "    grestore\n"
  374. "} bind def\n"
  375. "\n"
  376. "\n"
  377. "% BEGINCOLOR* / ENDCOLOR*\n"
  378. "% Draw something using a specific foreground color\n"
  379. "%\n"
  380. "% red green blue begincolor* SOMETHING endcolor*\n"
  381. "\n"
  382. "/begincolor* {\n"
  383. "        currentrgbcolor         % red green blue red' green' blue'\n"
  384. "        6 3 roll                % red' green' blue' red green blue\n"
  385. "    setrgbcolor             % red' green' blue'\n"
  386. "} bind def\n"
  387. "\n"
  388. "/endcolor* {\n"
  389. "    setrgbcolor\n"
  390. "} bind def\n"
  391. "\n"
  392. "\n"
  393. "% Set up the right font to the right size\n"
  394. "\n"
  395. "/isofont+ isotable font+ isolatin1*     % reencode font+\n"
  396. "                    % and make it the current font\n"
  397. "/isofont+ findfont\n"
  398. "[fontSize+ 0 0 fontSize+ neg 0 0] makefont\n"
  399. "setfont\n"
  400. "\n"
  401. "\n"
  402. "%%EndProlog\n"
  403. ;
  404.  
  405.  
  406. static const char trailer[] =
  407. "%%Trailer\n"
  408. "\n"
  409. "% $Id: trailer.ps,v 1.3 1996/08/15 13:17:36 zeller Exp $\n"
  410. "% Trailer for DDD PostScript Box output\n"
  411. "\n"
  412. "grestore\n"
  413. "showpage\n"
  414. "end        % of ddddict \n"
  415. ;
  416.  
  417.