xref: /plan9-contrib/sys/src/cmd/gs/src/gconfig.c (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
17dd7cddfSDavid du Colombier /* Copyright (C) 1989, 1995, 1996, 1997, 1998, 1999 Aladdin Enterprises.  All rights reserved.
27dd7cddfSDavid du Colombier 
3*593dc095SDavid du Colombier   This software is provided AS-IS with no warranty, either express or
4*593dc095SDavid du Colombier   implied.
57dd7cddfSDavid du Colombier 
6*593dc095SDavid du Colombier   This software is distributed under license and may not be copied,
7*593dc095SDavid du Colombier   modified or distributed except as expressly authorized under the terms
8*593dc095SDavid du Colombier   of the license contained in the file LICENSE in this distribution.
97dd7cddfSDavid du Colombier 
10*593dc095SDavid du Colombier   For more information about licensing, please refer to
11*593dc095SDavid du Colombier   http://www.ghostscript.com/licensing/. For information on
12*593dc095SDavid du Colombier   commercial licensing, go to http://www.artifex.com/licensing/ or
13*593dc095SDavid du Colombier   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14*593dc095SDavid du Colombier   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
157dd7cddfSDavid du Colombier */
167dd7cddfSDavid du Colombier 
17*593dc095SDavid du Colombier /* $Id: gconf.c,v 1.6 2002/08/22 07:12:28 henrys Exp $ */
187dd7cddfSDavid du Colombier /* Configuration tables */
197dd7cddfSDavid du Colombier #include "memory_.h"
207dd7cddfSDavid du Colombier #include "gx.h"
217dd7cddfSDavid du Colombier #include "gscdefs.h"		/* interface */
227dd7cddfSDavid du Colombier #include "gconf.h"		/* for #defines */
237dd7cddfSDavid du Colombier #include "gxdevice.h"
247dd7cddfSDavid du Colombier #include "gxdhtres.h"
257dd7cddfSDavid du Colombier #include "gxiclass.h"
267dd7cddfSDavid du Colombier #include "gxiodev.h"
277dd7cddfSDavid du Colombier #include "gxiparam.h"
28*593dc095SDavid du Colombier #include "gxcomp.h"
297dd7cddfSDavid du Colombier 
307dd7cddfSDavid du Colombier /*
317dd7cddfSDavid du Colombier  * The makefile generates the file gconfig.h, which consists of
327dd7cddfSDavid du Colombier  * lines of the form
337dd7cddfSDavid du Colombier  *      device_(gs_xxx_device)
347dd7cddfSDavid du Colombier  * or
357dd7cddfSDavid du Colombier  *      device2_(gs_xxx_device)
367dd7cddfSDavid du Colombier  * for each installed device;
377dd7cddfSDavid du Colombier  *      emulator_("emulator", strlen("emulator"))
387dd7cddfSDavid du Colombier  * for each known emulator;
397dd7cddfSDavid du Colombier  *	function_type_(xxx, gs_function_type_xxx)
407dd7cddfSDavid du Colombier  * for each known function type;
417dd7cddfSDavid du Colombier  *	halftone_(gs_dht_xxx)
427dd7cddfSDavid du Colombier  * for each known (device) halftone;
437dd7cddfSDavid du Colombier  *	image_class_(gs_image_class_xxx)
447dd7cddfSDavid du Colombier  * for each known image class;
457dd7cddfSDavid du Colombier  *	image_type_(xxx, gs_image_type_xxx)
467dd7cddfSDavid du Colombier  * for each known image type;
477dd7cddfSDavid du Colombier  *      init_(gs_xxx_init)
487dd7cddfSDavid du Colombier  * for each initialization procedure;
497dd7cddfSDavid du Colombier  *      io_device_(gs_iodev_xxx)
507dd7cddfSDavid du Colombier  * for each known IODevice;
517dd7cddfSDavid du Colombier  *      oper_(xxx_op_defs)
527dd7cddfSDavid du Colombier  * for each operator option;
537dd7cddfSDavid du Colombier  *      psfile_("gs_xxxx.ps", strlen("gs_xxxx.ps"))
547dd7cddfSDavid du Colombier  * for each optional initialization file.
55*593dc095SDavid du Colombier  *      plug_(gs_xxx_init)
56*593dc095SDavid du Colombier  * for each plugin;
577dd7cddfSDavid du Colombier  *
587dd7cddfSDavid du Colombier  * We include this file multiple times to generate various different
597dd7cddfSDavid du Colombier  * source structures.  (It's a hack, but we haven't come up with anything
607dd7cddfSDavid du Colombier  * more satisfactory.)
617dd7cddfSDavid du Colombier  */
627dd7cddfSDavid du Colombier 
637dd7cddfSDavid du Colombier /* ---------------- Resources (devices, inits, IODevices) ---------------- */
647dd7cddfSDavid du Colombier 
657dd7cddfSDavid du Colombier /* Declare devices, image types, init procedures, and IODevices as extern. */
66*593dc095SDavid du Colombier #define compositor_(comp_type) extern gs_composite_type_t comp_type;
677dd7cddfSDavid du Colombier #define device_(dev) extern gx_device dev;
687dd7cddfSDavid du Colombier #define device2_(dev) extern const gx_device dev;
697dd7cddfSDavid du Colombier #define halftone_(dht) extern DEVICE_HALFTONE_RESOURCE_PROC(dht);
707dd7cddfSDavid du Colombier #define image_class_(cls) extern iclass_proc(cls);
717dd7cddfSDavid du Colombier #define image_type_(i,type) extern const gx_image_type_t type;
727dd7cddfSDavid du Colombier #define init_(proc) extern init_proc(proc);
737dd7cddfSDavid du Colombier #define io_device_(iodev) extern const gx_io_device iodev;
747dd7cddfSDavid du Colombier #include "gconf.h"
757dd7cddfSDavid du Colombier #undef io_device_
767dd7cddfSDavid du Colombier #undef init_
777dd7cddfSDavid du Colombier #undef image_type_
787dd7cddfSDavid du Colombier #undef image_class_
797dd7cddfSDavid du Colombier #undef halftone_
807dd7cddfSDavid du Colombier #undef device2_
817dd7cddfSDavid du Colombier #undef device_
82*593dc095SDavid du Colombier #undef compositor_
83*593dc095SDavid du Colombier 
84*593dc095SDavid du Colombier /* Set up compositor type table. */
85*593dc095SDavid du Colombier #define compositor_(comp_type) &comp_type,
86*593dc095SDavid du Colombier private const gs_composite_type_t *const gx_compositor_list[] = {
87*593dc095SDavid du Colombier #include "gconf.h"
88*593dc095SDavid du Colombier     0
89*593dc095SDavid du Colombier };
90*593dc095SDavid du Colombier #undef compositor_
917dd7cddfSDavid du Colombier 
927dd7cddfSDavid du Colombier /* Set up the device table. */
937dd7cddfSDavid du Colombier #define device_(dev) (const gx_device *)&dev,
947dd7cddfSDavid du Colombier #define device2_(dev) &dev,
957dd7cddfSDavid du Colombier private const gx_device *const gx_device_list[] = {
967dd7cddfSDavid du Colombier #include "gconf.h"
977dd7cddfSDavid du Colombier 	 0
987dd7cddfSDavid du Colombier };
997dd7cddfSDavid du Colombier #undef device2_
1007dd7cddfSDavid du Colombier #undef device_
1017dd7cddfSDavid du Colombier 
1027dd7cddfSDavid du Colombier /* Set up the (device) halftone table. */
1037dd7cddfSDavid du Colombier extern_gx_device_halftone_list();
1047dd7cddfSDavid du Colombier #define halftone_(dht) dht,
1057dd7cddfSDavid du Colombier const gx_dht_proc gx_device_halftone_list[] = {
1067dd7cddfSDavid du Colombier #include "gconf.h"
1077dd7cddfSDavid du Colombier     0
1087dd7cddfSDavid du Colombier };
1097dd7cddfSDavid du Colombier #undef halftone_
1107dd7cddfSDavid du Colombier 
1117dd7cddfSDavid du Colombier /* Set up the image class table. */
1127dd7cddfSDavid du Colombier extern_gx_image_class_table();
1137dd7cddfSDavid du Colombier #define image_class_(cls) cls,
1147dd7cddfSDavid du Colombier const gx_image_class_t gx_image_class_table[] = {
1157dd7cddfSDavid du Colombier #include "gconf.h"
1167dd7cddfSDavid du Colombier     0
1177dd7cddfSDavid du Colombier };
1187dd7cddfSDavid du Colombier #undef image_class_
1197dd7cddfSDavid du Colombier /* We must use unsigned here, not uint.  See gscdefs.h. */
1207dd7cddfSDavid du Colombier const unsigned gx_image_class_table_count = countof(gx_image_class_table) - 1;
1217dd7cddfSDavid du Colombier 
1227dd7cddfSDavid du Colombier /* Set up the image type table. */
1237dd7cddfSDavid du Colombier extern_gx_image_type_table();
1247dd7cddfSDavid du Colombier #define image_type_(i,type) &type,
1257dd7cddfSDavid du Colombier const gx_image_type_t *const gx_image_type_table[] = {
1267dd7cddfSDavid du Colombier #include "gconf.h"
1277dd7cddfSDavid du Colombier     0
1287dd7cddfSDavid du Colombier };
1297dd7cddfSDavid du Colombier #undef image_type_
1307dd7cddfSDavid du Colombier /* We must use unsigned here, not uint.  See gscdefs.h. */
1317dd7cddfSDavid du Colombier const unsigned gx_image_type_table_count = countof(gx_image_type_table) - 1;
1327dd7cddfSDavid du Colombier 
1337dd7cddfSDavid du Colombier /* Set up the initialization procedure table. */
1347dd7cddfSDavid du Colombier extern_gx_init_table();
1357dd7cddfSDavid du Colombier #define init_(proc) proc,
1367dd7cddfSDavid du Colombier const gx_init_proc gx_init_table[] = {
1377dd7cddfSDavid du Colombier #include "gconf.h"
1387dd7cddfSDavid du Colombier     0
1397dd7cddfSDavid du Colombier };
1407dd7cddfSDavid du Colombier #undef init_
1417dd7cddfSDavid du Colombier 
1427dd7cddfSDavid du Colombier /* Set up the IODevice table.  The first entry must be %os%, */
1437dd7cddfSDavid du Colombier /* since it is the default for files with no explicit device specified. */
1447dd7cddfSDavid du Colombier extern_gx_io_device_table();
1457dd7cddfSDavid du Colombier extern gx_io_device gs_iodev_os;
1467dd7cddfSDavid du Colombier #define io_device_(iodev) &iodev,
1477dd7cddfSDavid du Colombier const gx_io_device *const gx_io_device_table[] = {
1487dd7cddfSDavid du Colombier     &gs_iodev_os,
1497dd7cddfSDavid du Colombier #include "gconf.h"
1507dd7cddfSDavid du Colombier     0
1517dd7cddfSDavid du Colombier };
1527dd7cddfSDavid du Colombier #undef io_device_
1537dd7cddfSDavid du Colombier /* We must use unsigned here, not uint.  See gscdefs.h. */
1547dd7cddfSDavid du Colombier const unsigned gx_io_device_table_count = countof(gx_io_device_table) - 1;
1557dd7cddfSDavid du Colombier 
156*593dc095SDavid du Colombier /* Find a compositor by name. */
157*593dc095SDavid du Colombier extern_gs_find_compositor();
158*593dc095SDavid du Colombier const gs_composite_type_t *
gs_find_compositor(int comp_id)159*593dc095SDavid du Colombier gs_find_compositor(int comp_id)
160*593dc095SDavid du Colombier {
161*593dc095SDavid du Colombier     const gs_composite_type_t *const * ppcomp = gx_compositor_list;
162*593dc095SDavid du Colombier     const gs_composite_type_t *  pcomp;
163*593dc095SDavid du Colombier 
164*593dc095SDavid du Colombier     while ((pcomp = *ppcomp++) != 0 && pcomp->comp_id != comp_id)
165*593dc095SDavid du Colombier         ;
166*593dc095SDavid du Colombier     return pcomp;
167*593dc095SDavid du Colombier }
168*593dc095SDavid du Colombier 
1697dd7cddfSDavid du Colombier /* Return the list of device prototypes, a NULL list of their structure */
1707dd7cddfSDavid du Colombier /* descriptors (no longer used), and (as the value) the length of the lists. */
1717dd7cddfSDavid du Colombier extern_gs_lib_device_list();
1727dd7cddfSDavid du Colombier int
gs_lib_device_list(const gx_device * const ** plist,gs_memory_struct_type_t ** pst)1737dd7cddfSDavid du Colombier gs_lib_device_list(const gx_device * const **plist,
1747dd7cddfSDavid du Colombier 		   gs_memory_struct_type_t ** pst)
1757dd7cddfSDavid du Colombier {
1767dd7cddfSDavid du Colombier     if (plist != 0)
1777dd7cddfSDavid du Colombier 	*plist = gx_device_list;
1787dd7cddfSDavid du Colombier     if (pst != 0)
1797dd7cddfSDavid du Colombier 	*pst = NULL;
1807dd7cddfSDavid du Colombier     return countof(gx_device_list) - 1;
1817dd7cddfSDavid du Colombier }
182