xref: /plan9/sys/src/cmd/gs/doc/Source.htm (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
13ff48bf5SDavid du Colombier<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
27dd7cddfSDavid du Colombier<html>
37dd7cddfSDavid du Colombier<head>
47dd7cddfSDavid du Colombier<title>Guide to Ghostscript source code</title>
5*593dc095SDavid du Colombier<!-- $Id: Source.htm,v 1.39 2005/10/20 19:46:23 ray Exp $ -->
67dd7cddfSDavid du Colombier<!-- Originally: source.txt -->
73ff48bf5SDavid du Colombier<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
87dd7cddfSDavid du Colombier</head>
97dd7cddfSDavid du Colombier
107dd7cddfSDavid du Colombier<body>
117dd7cddfSDavid du Colombier<!-- [1.0 begin visible header] ============================================ -->
127dd7cddfSDavid du Colombier
137dd7cddfSDavid du Colombier<!-- [1.1 begin headline] ================================================== -->
147dd7cddfSDavid du Colombier
153ff48bf5SDavid du Colombier<h1>Guide to Ghostscript source code</h1>
167dd7cddfSDavid du Colombier
177dd7cddfSDavid du Colombier<!-- [1.1 end headline] ==================================================== -->
187dd7cddfSDavid du Colombier
197dd7cddfSDavid du Colombier<!-- [1.2 begin table of contents] ========================================= -->
207dd7cddfSDavid du Colombier
217dd7cddfSDavid du Colombier<h2>Table of contents</h2>
227dd7cddfSDavid du Colombier
237dd7cddfSDavid du Colombier<blockquote><ul>
247dd7cddfSDavid du Colombier<li><a href="#Overview">Conceptual overview</a>
257dd7cddfSDavid du Colombier<li><a href="#PostScript_interpreter">PostScript Interpreter</a>
267dd7cddfSDavid du Colombier<li><a href="#PDF_interpreter">PDF interpreter</a>
277dd7cddfSDavid du Colombier<li><a href="#Graphics_library">Graphics library</a>
287dd7cddfSDavid du Colombier<ul>
297dd7cddfSDavid du Colombier<li><a href="#Drivers">Device drivers</a>
307dd7cddfSDavid du Colombier<li><a href="#Platform_specific_code">Platform-specific code</a>
317dd7cddfSDavid du Colombier</ul>
327dd7cddfSDavid du Colombier<li><a href="#Makefiles">Makefiles</a>
337dd7cddfSDavid du Colombier</ul></blockquote>
347dd7cddfSDavid du Colombier
357dd7cddfSDavid du Colombier<!-- [1.2 end table of contents] =========================================== -->
367dd7cddfSDavid du Colombier
377dd7cddfSDavid du Colombier<!-- [1.3 begin hint] ====================================================== -->
387dd7cddfSDavid du Colombier
397dd7cddfSDavid du Colombier<p>For other information, see the <a href="Readme.htm">Ghostscript
407dd7cddfSDavid du Colombieroverview</a> and the documents on <a href="Make.htm">how to build
413ff48bf5SDavid du ColombierGhostscript</a> from source, <a href="C-style.htm">Ghostscript C coding
427dd7cddfSDavid du Colombierguidelines</a>, <a href="Drivers.htm">drivers</a>, the
437dd7cddfSDavid du Colombier<a href="Lib.htm">Ghostscript library</a> and <a href="Install.htm">how to
447dd7cddfSDavid du Colombierinstall Ghostscript</a>.
457dd7cddfSDavid du Colombier
467dd7cddfSDavid du Colombier<!-- [1.3 end hint] ======================================================== -->
477dd7cddfSDavid du Colombier
487dd7cddfSDavid du Colombier<hr>
497dd7cddfSDavid du Colombier
507dd7cddfSDavid du Colombier<!-- [1.0 end visible header] ============================================== -->
517dd7cddfSDavid du Colombier
527dd7cddfSDavid du Colombier<!-- [2.0 begin contents] ================================================== -->
537dd7cddfSDavid du Colombier
543ff48bf5SDavid du Colombier<h2><a name="Overview"></a>Conceptual overview</h2>
557dd7cddfSDavid du Colombier
567dd7cddfSDavid du Colombier<p>
577dd7cddfSDavid du ColombierThe Ghostscript source code is divided conceptually as follows:
587dd7cddfSDavid du Colombier
597dd7cddfSDavid du Colombier<blockquote><table cellpadding=0 cellspacing=0>
607dd7cddfSDavid du Colombier<tr valign=top>	<th align=left colspan=4><a href="#PostScript_interpreter">PostScript interpreter</a>:
617dd7cddfSDavid du Colombier<tr valign=top>	<td>&nbsp;&nbsp;&nbsp;&nbsp;
627dd7cddfSDavid du Colombier	<td>PostScript operators
637dd7cddfSDavid du Colombier	<td>&nbsp;&nbsp;&nbsp;&nbsp;
647dd7cddfSDavid du Colombier	<td><b><tt>z</tt></b>*<b><tt>.h</tt></b> and <b><tt>z</tt></b>*<b><tt>.c</tt></b>
657dd7cddfSDavid du Colombier<tr valign=top>	<td>&nbsp;
667dd7cddfSDavid du Colombier	<td>Other interpreter code
677dd7cddfSDavid du Colombier	<td>&nbsp;
687dd7cddfSDavid du Colombier	<td><b><tt>i</tt></b>*<b><tt>.h</tt></b> and <b><tt>i</tt></b>*<b><tt>.c</tt></b>
697dd7cddfSDavid du Colombier<tr valign=top>	<td>&nbsp;
707dd7cddfSDavid du Colombier	<td>PostScript code
717dd7cddfSDavid du Colombier	<td>&nbsp;
727dd7cddfSDavid du Colombier	<td><b><tt>gs_</tt></b>*<b><tt>.ps</tt></b>
737dd7cddfSDavid du Colombier<tr valign=top>	<th align=left colspan=4><a href="#PDF_interpreter">PDF interpreter</a>:
747dd7cddfSDavid du Colombier<tr valign=top>	<td>&nbsp;
757dd7cddfSDavid du Colombier	<td>PostScript code
767dd7cddfSDavid du Colombier	<td>&nbsp;
777dd7cddfSDavid du Colombier	<td><b><tt>pdf_</tt></b>*<b><tt>.ps</tt></b>
787dd7cddfSDavid du Colombier<tr valign=top>	<th align=left colspan=4><a href="#Graphics_library">Graphics library</a>:
797dd7cddfSDavid du Colombier<tr valign=top>	<td>&nbsp;
807dd7cddfSDavid du Colombier	<td>Main library code
817dd7cddfSDavid du Colombier	<td>&nbsp;
827dd7cddfSDavid du Colombier	<td><b><tt>g</tt></b>*<b><tt>.h</tt></b> and <b><tt>g</tt></b>*<b><tt>.c</tt></b>
837dd7cddfSDavid du Colombier<tr valign=top>	<td>&nbsp;
847dd7cddfSDavid du Colombier	<td>Streams
857dd7cddfSDavid du Colombier	<td>&nbsp;
867dd7cddfSDavid du Colombier	<td><b><tt>s</tt></b>*<b><tt>.h</tt></b> and <b><tt>s</tt></b>*<b><tt>.c</tt></b>
877dd7cddfSDavid du Colombier<tr valign=top>	<td>&nbsp;
887dd7cddfSDavid du Colombier	<td><a href="#Drivers">Device drivers</a>
897dd7cddfSDavid du Colombier	<td>&nbsp;
907dd7cddfSDavid du Colombier	<td><b><tt>gdev</tt></b>*<b><tt>.h</tt></b> and <b><tt>gdev</tt></b>*<b><tt>.c</tt></b>
917dd7cddfSDavid du Colombier<tr valign=top>	<td>&nbsp;
927dd7cddfSDavid du Colombier	<td><a href="#Platform_specific_code">Platform-specific code</a>
937dd7cddfSDavid du Colombier	<td>&nbsp;
947dd7cddfSDavid du Colombier	<td><b><tt>gp</tt></b>*<b><tt>.h</tt></b> and <b><tt>gp</tt></b>*<b><tt>.c</tt></b>
957dd7cddfSDavid du Colombier</table></blockquote>
967dd7cddfSDavid du Colombier
977dd7cddfSDavid du Colombier<hr>
987dd7cddfSDavid du Colombier
993ff48bf5SDavid du Colombier<h2><a name="PostScript_interpreter"></a>PostScript Interpreter</h2>
1007dd7cddfSDavid du Colombier
1017dd7cddfSDavid du Colombier<p>
1027dd7cddfSDavid du Colombier<b><tt>gs.c</tt></b> is the main program for the interactive language
1037dd7cddfSDavid du Colombierinterpreter; <b><tt>gserver.c</tt></b> is an alternative main program that
1047dd7cddfSDavid du Colombieris a rudimentary server.  If you configure Ghostscript as a server rather
1057dd7cddfSDavid du Colombierthan an interactive program, you will use <b><tt>gserver.c</tt></b> instead
1067dd7cddfSDavid du Colombierof <b><tt>gs.c</tt></b>.
1077dd7cddfSDavid du Colombier
1087dd7cddfSDavid du Colombier<p>
1097dd7cddfSDavid du ColombierFiles named <b><tt>z</tt></b>*<b><tt>.c</tt></b> are Ghostscript operator
1107dd7cddfSDavid du Colombierfiles.  The names of the files generally follow the section headings of the
1117dd7cddfSDavid du Colombieroperator summary in section 6.2 (Second Edition) or 8.2 (Third Edition) of
1127dd7cddfSDavid du Colombierthe PostScript Language Reference Manual.  Each operator XXX is implemented
1137dd7cddfSDavid du Colombierby a procedure named <b><tt>z</tt></b>XXX, for example,
1147dd7cddfSDavid du Colombier<b><tt>zfill</tt></b> and <b><tt>zarray</tt></b>.
1157dd7cddfSDavid du Colombier
1167dd7cddfSDavid du Colombier<p>
1177dd7cddfSDavid du ColombierFiles named <b><tt>i</tt></b>*<b><tt>.c</tt></b>, and *<b><tt>.h</tt></b>
1187dd7cddfSDavid du Colombierother than <b><tt>g</tt></b>*<b><tt>.h</tt></b>, are the rest of the
1197dd7cddfSDavid du Colombierinterpreter.  See the makefile for a little more information on how the
1207dd7cddfSDavid du Colombierfiles are divided functionally.
1217dd7cddfSDavid du Colombier
1227dd7cddfSDavid du Colombier<p>
1237dd7cddfSDavid du ColombierThe main loop of the PostScript interpreter is the <b><tt>interp</tt></b>
1247dd7cddfSDavid du Colombierprocedure in <b><tt>interp.c</tt></b>.  When the interpreter is reading
1257dd7cddfSDavid du Colombierfrom an input file, it calls the token scanner in
1267dd7cddfSDavid du Colombier<b><tt>iscan</tt></b>*<b><tt>.c</tt></b>.
1277dd7cddfSDavid du Colombier
1287dd7cddfSDavid du Colombier<p>
1297dd7cddfSDavid du Colombier<b><tt>idebug.c</tt></b> contains a lot of debugger-callable routines
1307dd7cddfSDavid du Colombieruseful for printing PostScript objects when debugging.
1317dd7cddfSDavid du Colombier
1327dd7cddfSDavid du Colombier<hr>
1337dd7cddfSDavid du Colombier
1343ff48bf5SDavid du Colombier<h2><a name="PDF_interpreter"></a>PDF interpreter</h2>
1357dd7cddfSDavid du Colombier
1367dd7cddfSDavid du Colombier<p>
1377dd7cddfSDavid du ColombierThe PDF interpreter is written entirely in PostScript.  Its main loop is
1387dd7cddfSDavid du Colombierthe <b><tt>.pdfrun</tt></b> procedure in <b><tt>pdf_base.ps</tt></b>.  When
1397dd7cddfSDavid du Colombierthe PDF interpreter is configured into the build, it redefines the
1407dd7cddfSDavid du Colombier"<b><tt>run</tt></b>" operator to test whether the file is a PDF file.
1417dd7cddfSDavid du ColombierThis redefinition is near the beginning of <b><tt>pdf_main.ps</tt></b>.
1427dd7cddfSDavid du Colombier
1437dd7cddfSDavid du Colombier<hr>
1447dd7cddfSDavid du Colombier
1453ff48bf5SDavid du Colombier<h2><a name="Graphics_library"></a>Graphics library</h2>
1467dd7cddfSDavid du Colombier
1477dd7cddfSDavid du Colombier<p>
1487dd7cddfSDavid du ColombierFiles beginning with <b><tt>gs</tt></b>, <b><tt>gx</tt></b>, or
1497dd7cddfSDavid du Colombier<b><tt>gz</tt></b> (both <b><tt>.c</tt></b> and <b><tt>.h</tt></b>), other
1507dd7cddfSDavid du Colombierthan <b><tt>gs.c</tt></b> and <b><tt>gserver.c</tt></b>, are the
1517dd7cddfSDavid du ColombierGhostscript library.  Files beginning with <b><tt>gdev</tt></b> are device
1527dd7cddfSDavid du Colombierdrivers or related code, also part of the library.  Other files beginning
1537dd7cddfSDavid du Colombierwith <b><tt>g</tt></b> are library files that don't fall neatly into either
1547dd7cddfSDavid du Colombierthe kernel or the driver category.
1557dd7cddfSDavid du Colombier
1567dd7cddfSDavid du Colombier<p>
1577dd7cddfSDavid du ColombierFiles named <b><tt>s</tt></b>*<b><tt>.c</tt></b> and
1587dd7cddfSDavid du Colombier<b><tt>s</tt></b>*<b><tt>.h</tt></b> are a flexible stream package,
1597dd7cddfSDavid du Colombierincluding the Level 2 PostScript "filters" supported by Ghostscript.  See
1607dd7cddfSDavid du Colombier<b><tt>stream.h</tt></b>, <b><tt>scommon.h</tt></b>, and
1617dd7cddfSDavid du Colombier<b><tt>strimpl.h</tt></b> for all the details.
1627dd7cddfSDavid du Colombier
1633ff48bf5SDavid du Colombier<h3><a name="Drivers"></a>Device drivers</h3>
1647dd7cddfSDavid du Colombier
1657dd7cddfSDavid du Colombier<p>
1667dd7cddfSDavid du ColombierThe interface between the graphics library and device drivers is the only
1677dd7cddfSDavid du Colombierreally well documented one in all of Ghostscript: see the
1687dd7cddfSDavid du Colombier<a href="Drivers.htm">documentation on drivers</a>.
1697dd7cddfSDavid du Colombier
1707dd7cddfSDavid du Colombier<p>
1717dd7cddfSDavid du ColombierIn addition to many real device and file format drivers listed in
1727dd7cddfSDavid du Colombier<b><tt>devs.mak</tt></b> and <b><tt>contrib.mak</tt></b>, a number of
1737dd7cddfSDavid du Colombierdrivers are used for internal purposes.  You can search
1747dd7cddfSDavid du Colombier<b><tt>lib.mak</tt></b> for files named
1757dd7cddfSDavid du Colombier<b><tt>gdev</tt></b>*<b><tt>.c</tt></b> to find almost all of them.
1767dd7cddfSDavid du Colombier
1777dd7cddfSDavid du Colombier<p>
1787dd7cddfSDavid du ColombierDrivers are divided into "printer" drivers, which support banding, and
1797dd7cddfSDavid du Colombiernon-printer drivers, which don't.  The decision whether banding is
1807dd7cddfSDavid du Colombierrequired is made (by default on the basis of how much memory is available)
1817dd7cddfSDavid du Colombierin the procedure <b><tt>gdev_prn_alloc</tt></b> in
1827dd7cddfSDavid du Colombier<b><tt>gdevprn.c</tt></b>: it implements this decision by filling the
1837dd7cddfSDavid du Colombiervirtual procedure table for the printer device in one of two different
1847dd7cddfSDavid du Colombierways.
1857dd7cddfSDavid du Colombier
1867dd7cddfSDavid du Colombier<p>
1877dd7cddfSDavid du ColombierA good simple "printer" (bandable) driver to read is
1887dd7cddfSDavid du Colombier<b><tt>gdevmiff.c</tt></b>: it's less than 100 lines, of which much is
1897dd7cddfSDavid du Colombierboilerplate.  There are no simple non-printer drivers that actually drive
1907dd7cddfSDavid du Colombierdevices: probably the simplest non-printer driver for reading is
1917dd7cddfSDavid du Colombier<b><tt>gdevm8.c</tt></b>, which implements 8-bit-deep devices that only
1927dd7cddfSDavid du Colombierstore the bits in memory.
1937dd7cddfSDavid du Colombier
1943ff48bf5SDavid du Colombier<h3><a name="Platform_specific_code"></a>Platform-specific code</h3>
1957dd7cddfSDavid du Colombier
1967dd7cddfSDavid du Colombier<p>
1977dd7cddfSDavid du ColombierThere are very few platform dependencies in Ghostscript.  Ghostscript deals
1987dd7cddfSDavid du Colombierwith them in three ways:
1997dd7cddfSDavid du Colombier
2007dd7cddfSDavid du Colombier<ul>
2017dd7cddfSDavid du Colombier<li>Files named *<b><tt>_.h</tt></b> substitute for the corresponding
2027dd7cddfSDavid du Colombier<b><tt>&lt;</tt></b>*<b><tt>.h&gt;</tt></b> file by adding conditionals
2037dd7cddfSDavid du Colombierthat provide a uniform set of system interfaces on all platforms.
2047dd7cddfSDavid du Colombier
2057dd7cddfSDavid du Colombier<li>The file <b><tt>arch.h</tt></b> contains a set of
2067dd7cddfSDavid du Colombiermechanically-discovered platform properties like byte order, size of
2077dd7cddfSDavid du Colombier<b><tt>int</tt></b>, etc.  These properties, <b>not</b> the names of
2087dd7cddfSDavid du Colombierspecific platforms, are used to select between different algorithms or
2097dd7cddfSDavid du Colombierparameters at compile time.
2107dd7cddfSDavid du Colombier
2117dd7cddfSDavid du Colombier<li>Files named <b><tt>gp</tt></b>*<b><tt>.h</tt></b> define interfaces
2127dd7cddfSDavid du Colombierthat are intended to be implemented differently on each platform, but whose
2137dd7cddfSDavid du Colombierspecification is common to all platforms.
2147dd7cddfSDavid du Colombier</ul>
2157dd7cddfSDavid du Colombier
2167dd7cddfSDavid du Colombier<p>
2177dd7cddfSDavid du ColombierThe platform-specific implementations of the
2187dd7cddfSDavid du Colombier<b><tt>gp</tt></b>*<b><tt>.h</tt></b> interfaces have names of the form
2197dd7cddfSDavid du Colombier"<b><tt>gp_</tt></b><em>{platform}</em><b><tt>.c</tt></b>, specifically
2207dd7cddfSDavid du Colombier(this list may be out of date):
2217dd7cddfSDavid du Colombier
2227dd7cddfSDavid du Colombier<blockquote><table cellpadding=0 cellspacing=0>
2237dd7cddfSDavid du Colombier<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Platform-specific interfaces</font><hr>
2247dd7cddfSDavid du Colombier<tr valign=bottom>
2257dd7cddfSDavid du Colombier	<th align=left>Routine
2267dd7cddfSDavid du Colombier	<td>&nbsp;&nbsp;&nbsp;&nbsp;
2277dd7cddfSDavid du Colombier	<th align=left>Platform
2287dd7cddfSDavid du Colombier<tr>	<td colspan=3><hr>
2297dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_dosfb.c</tt></b>
2307dd7cddfSDavid du Colombier	<td>&nbsp;
2317dd7cddfSDavid du Colombier	<td>DOS
2327dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_dosfs.c</tt></b>
2337dd7cddfSDavid du Colombier	<td>&nbsp;
2347dd7cddfSDavid du Colombier	<td>DOS and MS Windows
2357dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_itbc.c</tt></b>
2367dd7cddfSDavid du Colombier	<td>&nbsp;
2377dd7cddfSDavid du Colombier	<td>DOS, Borland compilers
2387dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_iwatc.c</tt></b>
2397dd7cddfSDavid du Colombier	<td>&nbsp;
2407dd7cddfSDavid du Colombier	<td>DOS, Watcom or Microsoft compiler
2417dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_msdos.c</tt></b>
2427dd7cddfSDavid du Colombier	<td>&nbsp;
2437dd7cddfSDavid du Colombier	<td>DOS and MS Windows
2447dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_ntfs.c</tt></b>
2457dd7cddfSDavid du Colombier	<td>&nbsp;
2467dd7cddfSDavid du Colombier	<td>MS-Windows Win32s and Windows NT
2477dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_os2.c</tt></b>
2487dd7cddfSDavid du Colombier	<td>&nbsp;
2497dd7cddfSDavid du Colombier	<td>OS/2
2507dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_os9.c</tt></b>
2517dd7cddfSDavid du Colombier	<td>&nbsp;
2527dd7cddfSDavid du Colombier	<td>OS-9
2537dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_unifs.c</tt></b>
2547dd7cddfSDavid du Colombier	<td>&nbsp;
2557dd7cddfSDavid du Colombier	<td>Unix, OS-9, and QNX
2567dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_unix.c</tt></b>
2577dd7cddfSDavid du Colombier	<td>&nbsp;
2587dd7cddfSDavid du Colombier	<td>Unix and QNX
2597dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_sysv.c</tt></b>
2607dd7cddfSDavid du Colombier	<td>&nbsp;
2617dd7cddfSDavid du Colombier	<td>System V Unix
2627dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_vms.c</tt></b>
2637dd7cddfSDavid du Colombier	<td>&nbsp;
2647dd7cddfSDavid du Colombier	<td>VMS
2657dd7cddfSDavid du Colombier<tr valign=top>	<td><b><tt>gp_win32.c</tt></b>
2667dd7cddfSDavid du Colombier	<td>&nbsp;
2677dd7cddfSDavid du Colombier	<td>MS-Windows Win32s and Windows NT
2687dd7cddfSDavid du Colombier</table></blockquote>
2697dd7cddfSDavid du Colombier
2707dd7cddfSDavid du Colombier<p>
2717dd7cddfSDavid du ColombierIf you are going to extend Ghostscript to new machines or operating
2727dd7cddfSDavid du Colombiersystems, check the *<b><tt>_.h</tt></b> files for <b><tt>ifdef</tt></b> on
2737dd7cddfSDavid du Colombierthings other than <b><tt>DEBUG</tt></b>.  You should probably plan to make
2747dd7cddfSDavid du Colombiera new makefile and a new <b><tt>gp_</tt></b>XXX<b><tt>.c</tt></b> file.
2757dd7cddfSDavid du Colombier
2767dd7cddfSDavid du Colombier<hr>
2777dd7cddfSDavid du Colombier
2783ff48bf5SDavid du Colombier<h2><a name="Makefiles"></a>Makefiles</h2>
2797dd7cddfSDavid du Colombier
2807dd7cddfSDavid du Colombier<p>
2817dd7cddfSDavid du ColombierThis section is only for advanced developers who need to integrate
2827dd7cddfSDavid du ColombierGhostscript into a larger program at build time.
2837dd7cddfSDavid du Colombier
2847dd7cddfSDavid du Colombier<p>
2857dd7cddfSDavid du ColombierNOTE: THIS SECTION IS INCOMPLETE.  IT WILL BE IMPROVED IN A LATER REVISION.
2867dd7cddfSDavid du Colombier
2877dd7cddfSDavid du Colombier<p>
2887dd7cddfSDavid du ColombierThe Ghostscript makefiles are meant to be organized according to the
2897dd7cddfSDavid du Colombierfollowing two principles:
2907dd7cddfSDavid du Colombier
2917dd7cddfSDavid du Colombier<ul>
2927dd7cddfSDavid du Colombier
2937dd7cddfSDavid du Colombier<li>All the parameters that vary from platform to platform appear in the
2947dd7cddfSDavid du Colombiertop-level makefile for a given platform.  ("Platform" = OS + compiler +
2957dd7cddfSDavid du Colombierchoice of interpreter vs. library)
2967dd7cddfSDavid du Colombier
2977dd7cddfSDavid du Colombier<li>All the rules and definitions that can meaningfully be shared among more
2987dd7cddfSDavid du Colombierthan 1 platform appear in a makefile that is "included" by a makefile
2997dd7cddfSDavid du Colombier(normally the top-level makefile) for those platforms.
3007dd7cddfSDavid du Colombier</ul>
3017dd7cddfSDavid du Colombier
3027dd7cddfSDavid du Colombier<p>
3037dd7cddfSDavid du ColombierThus, for example:
3047dd7cddfSDavid du Colombier
3057dd7cddfSDavid du Colombier<ul>
3067dd7cddfSDavid du Colombier
3077dd7cddfSDavid du Colombier<li>Rules and definitions shared by all builds are in
3087dd7cddfSDavid du Colombier<b><tt>gs.mak</tt></b>.
3097dd7cddfSDavid du Colombier
3107dd7cddfSDavid du Colombier<li>Rules and definitions specific to the library (on all platforms) are in
3117dd7cddfSDavid du Colombier<b><tt>lib.mak</tt></b>.  In principle this could be merged with
3127dd7cddfSDavid du Colombier<b><tt>gs.mak</tt></b>, but we wanted to leave open the possibility that
3137dd7cddfSDavid du Colombier<b><tt>gs.mak</tt></b> might be useful with hypothetical interpreter-only
3147dd7cddfSDavid du Colombierproducts.
3157dd7cddfSDavid du Colombier
3167dd7cddfSDavid du Colombier<li>Stuff specific to interpreters (on all platforms) is in
3177dd7cddfSDavid du Colombier<b><tt>int.mak</tt></b>.
3187dd7cddfSDavid du Colombier
3197dd7cddfSDavid du Colombier<li>Stuff specific to all Unix platforms should be in a single
3207dd7cddfSDavid du Colombier<b><tt>unix.mak</tt></b> file, but because <b><tt>make</tt></b> sometimes
3217dd7cddfSDavid du Colombiercares about the order of definitions, and because some of it is shared with
3227dd7cddfSDavid du ColombierDV/X, it got split between <b><tt>unix-aux.mak</tt></b>,
3237dd7cddfSDavid du Colombier<b><tt>unix-end.mak</tt></b>, <b><tt>unixhead.mak</tt></b>,
3247dd7cddfSDavid du Colombier<b><tt>unixinst.mak</tt></b>, and <b><tt>unixlink.mak</tt></b>.
3257dd7cddfSDavid du Colombier
3267dd7cddfSDavid du Colombier</ul>
3277dd7cddfSDavid du Colombier
3287dd7cddfSDavid du Colombier<p>
3297dd7cddfSDavid du ColombierFor MS-DOS and MS Windows builds, there should be:
3307dd7cddfSDavid du Colombier
3317dd7cddfSDavid du Colombier<ul>
3327dd7cddfSDavid du Colombier
3337dd7cddfSDavid du Colombier<li>A makefile for all MS OS (DOS or Windows) builds, for all
3347dd7cddfSDavid du Colombier        compilers and products.
3357dd7cddfSDavid du Colombier
3367dd7cddfSDavid du Colombier<li>Perhaps a makefile for all MS-DOS builds, for all compilers and
3377dd7cddfSDavid du Colombierproducts, although since Watcom is the only such compiler we're likely to
3387dd7cddfSDavid du Colombiersupport this may be overkill.
3397dd7cddfSDavid du Colombier
3407dd7cddfSDavid du Colombier<li>A makefile for all MS Windows builds, for all compilers and products.
3417dd7cddfSDavid du Colombier
3427dd7cddfSDavid du Colombier<li>A makefile for all Watcom builds (DOS or Windows), for all products.
3437dd7cddfSDavid du Colombier
3447dd7cddfSDavid du Colombier<li>A top-level makefile for the Watcom DOS interpreter product.
3457dd7cddfSDavid du Colombier
3467dd7cddfSDavid du Colombier<li>A top-level makefile for the Watcom Windows interpreter product.
3477dd7cddfSDavid du Colombier
3487dd7cddfSDavid du Colombier<li>A top-level makefile for the Watcom DOS library "product".
3497dd7cddfSDavid du Colombier
3507dd7cddfSDavid du Colombier<li>A top-level makefile for the Watcom Windows library "product".
3517dd7cddfSDavid du Colombier
3527dd7cddfSDavid du Colombier<li>A makefile for all Borland builds (DOS or Windows), for all
3537dd7cddfSDavid du Colombier        products.
3547dd7cddfSDavid du Colombier
3557dd7cddfSDavid du Colombier</ul>
3567dd7cddfSDavid du Colombier
3577dd7cddfSDavid du Colombier<p>
3587dd7cddfSDavid du Colombierand so on.
3597dd7cddfSDavid du Colombier
3607dd7cddfSDavid du Colombier<!-- [2.0 end contents] ==================================================== -->
3617dd7cddfSDavid du Colombier
3627dd7cddfSDavid du Colombier<!-- [3.0 begin visible trailer] =========================================== -->
3637dd7cddfSDavid du Colombier<hr>
3647dd7cddfSDavid du Colombier
3653ff48bf5SDavid du Colombier<p>
3663ff48bf5SDavid du Colombier<small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises.  All
3673ff48bf5SDavid du Colombierrights reserved.</small>
3687dd7cddfSDavid du Colombier
3697dd7cddfSDavid du Colombier<p>
370*593dc095SDavid du ColombierThis software is provided AS-IS with no warranty, either express or
371*593dc095SDavid du Colombierimplied.
372*593dc095SDavid du Colombier
373*593dc095SDavid du ColombierThis software is distributed under license and may not be copied,
374*593dc095SDavid du Colombiermodified or distributed except as expressly authorized under the terms
375*593dc095SDavid du Colombierof the license contained in the file LICENSE in this distribution.
376*593dc095SDavid du Colombier
377*593dc095SDavid du ColombierFor more information about licensing, please refer to
378*593dc095SDavid du Colombierhttp://www.ghostscript.com/licensing/. For information on
379*593dc095SDavid du Colombiercommercial licensing, go to http://www.artifex.com/licensing/ or
380*593dc095SDavid du Colombiercontact Artifex Software, Inc., 101 Lucas Valley Road #110,
381*593dc095SDavid du ColombierSan Rafael, CA  94903, U.S.A., +1(415)492-9861.
3827dd7cddfSDavid du Colombier
3833ff48bf5SDavid du Colombier<p>
384*593dc095SDavid du Colombier<small>Ghostscript version 8.53, 20 October 2005
3857dd7cddfSDavid du Colombier
3867dd7cddfSDavid du Colombier<!-- [3.0 end visible trailer] ============================================= -->
3877dd7cddfSDavid du Colombier
3887dd7cddfSDavid du Colombier</body>
3897dd7cddfSDavid du Colombier</html>
390