home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / texmf / source / SpecHost / postlib.h < prev    next >
C/C++ Source or Header  |  1994-09-09  |  11KB  |  303 lines

  1. #ifndef POSTLIB_H
  2. #define POSTLIB_H
  3. /*------------------------------------------------------------------------*/
  4. /*                                                                        *
  5.  *  $Id: postlib.h,v 2.17 1994/09/09 16:42:31 heinz Exp $
  6.  *                                                                        */
  7. /*------------------------------------------------------------------------*/
  8.  
  9. /*------------------------------------------------------------------------*/
  10.  
  11. /* PostScript interpreter file "postlib.h" - library interface header (Amiga)
  12.  *
  13.  * Based on postlib.h 1.7, (C) Adrian Aylward 1989, 1991.
  14.  *
  15.  * This file defines the library interface, so that other programs can
  16.  * use the PostScript drawing machinery.  It is totally Amiga specific.
  17.  *
  18.  * All versions >=2.0 ©1993,1994 HWG, For Joan Thuesen.
  19.  *
  20.  * HWGPOST leans heavily towards PostScript Level 2
  21.  *
  22.  * All rights reserved. Commercial use of HWGPOST only with my permission!
  23.  * Read the docs for further information on legal issues.
  24.  * Don't use HWGPOST without reading up on the legal issues!
  25.  *
  26.  *
  27.  *  Heinz Wrobel
  28.  *  Karlstr. 16
  29.  *  82131 Gauting
  30.  *  Germany
  31.  *  FAX +49 89 850 51 25 (I don't like phone calls)
  32.  *  <heinz@hwg.muc.de>
  33.  *
  34.  */
  35.  
  36.  
  37. #include <exec/types.h>
  38. #include <dos/dos.h>
  39.  
  40. /*------------------------------------------------------------------------*/
  41. /* Default and minimum memory sizes */
  42.  
  43. #define defmemflen  60000       /* Font cache */
  44. #define defmemhlen  20000       /* Halftone screen cache */
  45. #define defmemvlen  50000       /* VM segment length */
  46. #define defmemllen  15000       /* Path element memory */
  47. #define defmemplen  60000       /* Pattern cache */
  48.  
  49. #define minmemflen   5000
  50. #define minmemhlen   1000
  51. #define minmemvlen   5000
  52. #define minmemllen   1000
  53. #define minmemplen   5000
  54.  
  55. /*------------------------------------------------------------------------*/
  56. /* The device page and parameter block */
  57.  
  58. /*
  59.  **************************************************************************
  60.  *** IMPORTANT NOTE: For anything below, the General Amiga Development  ***
  61.  ***                 Guidelines as described in the Addison Wesley "ROM ***
  62.  ***                 Kernel Reference Manual Libraries" are valid.      ***
  63.  ***                                                                    ***
  64.  ***                 Note especially that "Fields that are not defined  ***
  65.  ***                 to contain particular initial values must be       ***
  66.  ***                 initialized to zero. This includes pointer         ***
  67.  ***                 fields." and "All reserved or unused fields must   ***
  68.  ***                 be initialized to zero for future compatibility."  ***
  69.  **************************************************************************
  70. */
  71.  
  72. /* A possible extension to the device structure described below */
  73. struct PSextdevice
  74. {
  75.     unsigned long       flags;
  76.  
  77.     unsigned char       *maskbuf;
  78.  
  79.     unsigned char       *Kbuf[8];
  80.  
  81.     unsigned char       *alphabuf[8];
  82.  
  83.     long                reserved[16];
  84.     /* The length of this structure is subject to change. */
  85. };
  86.  
  87. /* The standard device structure */
  88. struct PSdevice
  89. {
  90.     /*---------------------------------------------------------------------
  91.        "buf"            These are 24 bitplane pointers which can be set or
  92.                         cleared. HWGPOST will just ignore NULL pointers to
  93.                         make masking possible.
  94.  
  95.        "len"            This value gives the total length in bytes of the
  96.                         memory for one bitplane.
  97.  
  98.        "depth"          How many bitplanes should be used at all.
  99.  
  100.        "flags"          Various. See below.
  101.  
  102.        "bitspercolor"   To specify how many bitplanes are used per color,
  103.                         you set "bitspercolor" to the appropriate value. If
  104.                         this value is not set, one bitplane per color is
  105.                         assumed.
  106.  
  107.                         Example: RGB 3:3:2 => depth=8, bitspercolor=3
  108.  
  109.        "PSextdevice"    Set it for the special features or leave it NULL.
  110.  
  111.        "xoff", "yoff"   To specify rendering offsets into the bitplanes.
  112.  
  113.        "xbytes"         The size of one row in a bitplane in bytes.
  114.  
  115.        "xsize", "ysize" The size of the bitplane in pixels.
  116.  
  117.        "ybase"          The first row to draw into for band rendering.
  118.  
  119.        "yheight"        The number of rows to use for band rendering.
  120.  
  121.        "xden", "yden"   The dpi values to use.
  122.  
  123.        "ydir"           Direction of the y axis for rendering.
  124.  
  125.  
  126.        Fields in the extended device structure:
  127.  
  128.        "flags"          See below.
  129.  
  130.        "maskbuf"        If set, must be a plane as in "buf". For any
  131.                         rendering you'll get bits set in this mask plane.
  132.                         This gives you a mask of the actually used places
  133.                         in the buffer. The mask might be useful for
  134.                         BltMaskBitMapRastPort() or some such. erasepage
  135.                         will clear this mask plane.
  136.  
  137.         "Kbuf"          The missing eight plane pointers to be able to do
  138.                         CMYK rendering with 8 bits per color.
  139.  
  140.         "alphabuf"      Plane pointers for an alpha channel. Do not use
  141.                         or set until further notice.
  142.  
  143.       ---------------------------------------------------------------------
  144.     */
  145.  
  146.     unsigned char       *buf[24];
  147.     int                 len;
  148.     short               depth;
  149.     unsigned char       flags;
  150.     unsigned char       bitspercolor;
  151.     struct PSextdevice  *PSextdevice;
  152.     short               xoff, yoff;
  153.     short               xbytes, xsize, ysize;
  154.     short               ybase, yheight;
  155.     short               xden, yden;
  156.     short               ydir;
  157. };
  158.  
  159. /* Definitions for the flags field in the standard device structure */
  160. #define HWGPOST_DEVB_NOSHADE           0    /* Suppress any halftoning */
  161. #define HWGPOST_DEVF_NOSHADE        0x01
  162. #define HWGPOST_DEVB_CMYK              1    /* CMYK instead of RGBW */
  163. #define HWGPOST_DEVF_CMYK           0x02
  164. #define HWGPOST_DEVB_INVERTOUTPUT      2    /* Inverted rendering */
  165. #define HWGPOST_DEVF_INVERTOUTPUT   0x04
  166.  
  167. /* Flags defined for the extended device structure */
  168. #define HWGPOST_EXTDEVB_USEALPHACHANNEL     0   /* Not implemented */
  169. #define HWGPOST_EXTDEVF_USEALPHACHANNEL  0x01
  170.  
  171. /*------------------------------------------------------------------------*/
  172. /* The parameter block */
  173.  
  174. struct PSparm
  175. {
  176.     /*---------------------------------------------------------------------
  177.         "page"          The page description to set on startup.
  178.  
  179.         "memvlen",      Memory size in bytes to use for VM segments.
  180.         "memflen",                                      the font cache.
  181.         "memllen",                                      path elements.
  182.         "memhlen"                                       halftone screens.
  183.  
  184.         "userdata"      Data passed to the "flushfunc" and "copyfunc".
  185.  
  186.         "flushfunc",    Callback functions to implement page flushing and
  187.         "copyfunc"      copying to the display.
  188.  
  189.         "infh",         AmigaDOS (BPTR) handles to implement %stdin,
  190.         "outfh",        %stdout and %stderr.
  191.         "errfh"
  192.  
  193.         "funcmax"       Number of external functions.
  194.  
  195.         "functab"       Pointer to external function table, or zero.
  196.  
  197.         "reserved"      DO NOT TOUCH AND SET TO ZERO!
  198.  
  199.       ---------------------------------------------------------------------
  200.     */
  201.     struct PSdevice page;
  202.     int             memvlen, memflen, memllen, memhlen;
  203.     APTR            userdata, flushfunc, copyfunc;
  204.     BPTR            infh, outfh, errfh;
  205.     int             funcmax;
  206.     APTR            *functab;
  207.     long            reserved[2];
  208. };
  209.  
  210. /*------------------------------------------------------------------------*/
  211. /* Errors */
  212.  
  213. #define errdictfull             1
  214. #define errdictstackoverflow    2
  215. #define errdictstackunderflow   3
  216. #define errexecstackoverflow    4
  217. #define errinterrupt            5
  218. #define errinvalidaccess        6
  219. #define errinvalidexit          7
  220. #define errinvalidfileaccess    8
  221. #define errinvalidfont          9
  222. #define errinvalidrestore      10
  223. #define errinvalidstop         11
  224. #define errioerror             12
  225. #define errlimitcheck          13
  226. #define errnocurrentpoint      14
  227. #define errrangecheck          15
  228. #define errstackoverflow       16
  229. #define errstackunderflow      17
  230. #define errsyntaxerror         18
  231. #define errtimeout             19
  232. #define errtypecheck           20
  233. #define errundefined           21
  234. #define errundefinedfilename   22
  235. #define errundefinedresult     23
  236. #define errunmatchedmark       24
  237. #define errunregistered        25
  238. #define errVMerror             26
  239. #define errmemoryallocation    27
  240. #define errkill                28
  241. #define errconfiguration       29
  242. #define errundefinedresource   30
  243. #define errmax                 31
  244.  
  245. /*------------------------------------------------------------------------*/
  246. /* Flags to control interpretation behaviour
  247.  
  248.     DO NOT USE THESE WITHOUT READING THE DOCS FOR THEM!
  249. */
  250.  
  251. #define PSFLAGSTRING            0x00000001 /* Interpret string */
  252. #define PSFLAGFILE              0x00000002 /* Interpret file */
  253. #define PSFLAGINTER             0x00000004 /* Interactive, issue prompts */
  254. #define PSFLAGCLEAR             0x00000008 /* Clear stacks afterwards */
  255. #define PSFLAGSAVE              0x00000010 /* Save and restore */
  256. #define PSFLAGERASE             0x00000020 /* Erase page afterwards */
  257. #define PSFLAGSTARTJOBSERVER    0x00000040 /* Save VM and init before run */
  258. #define PSFLAGENDJOBSERVER      0x00000080 /* Do the final cleanup */
  259.  
  260. /*------------------------------------------------------------------------*/
  261. /* Flags for PSsignalint() */
  262.  
  263. /* Bit numbers */
  264. #define PSINTSIGB_ABORT              0
  265. #define PSINTSIGB_KILL               1
  266. #define PSINTSIGB_VMRECLAIMLOCAL     2
  267. #define PSINTSIGB_VMRECLAIMALL       3
  268.  
  269. /* Masks to use */
  270. #define PSINTSIGF_ABORT              0x00000001
  271. #define PSINTSIGF_KILL               0x00000002
  272. #define PSINTSIGF_VMRECLAIMLOCAL     0x00000004
  273. #define PSINTSIGF_VMRECLAIMALL       0x00000008
  274.  
  275. /*------------------------------------------------------------------------*/
  276. /* Entry points */
  277.  
  278. extern int      PScreateact(struct PSparm *parm);
  279. extern void     PSdeleteact(int arec);
  280. extern int      PSintstring(int arec, char *string, int length, int flags);
  281. extern void     PSsignalint(int arec, int flag);
  282. extern void     PSsignalfpe(int arec);
  283. extern void     PSerror(int arec, int errnum);
  284. extern void     PSsetdevice(int arec, struct PSdevice *page);
  285. extern char     *PSerrstr(int arec, int errnum);
  286.  
  287. /*------------------------------------------------------------------------*/
  288. #ifdef __SASC
  289. #pragma libcall PSbase PScreateact  1e    901 /* d0 = (a1)*/
  290. #pragma libcall PSbase PSdeleteact  24    801 /*      (a0)*/
  291. #pragma libcall PSbase PSintstring  2A 109804 /* d0 = (a0, a1, d0, d1)*/
  292. #pragma libcall PSbase PSsignalint  30   0802 /*      (a0, d0)*/
  293. #pragma libcall PSbase PSsignalfpe  36    801 /*      (a0)    */
  294. #pragma libcall PSbase PSerror      3C   0802 /*      (a0, d0)*/
  295. #pragma libcall PSbase PSsetdevice  4E   9802 /*      (a0, a1)*/
  296. #pragma libcall PSbase PSerrstr     54   0802 /* d0 = (a0, d0)*/
  297. #endif /* __SASC */
  298.  
  299. /*------------------------------------------------------------------------*/
  300.  
  301. #endif /* POSTLIB_H */
  302.  
  303.