home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / gnu / gs-2.6.1.4-diffs.lha / src / diffs / gs-2.6.1.4.diffs
Text File  |  1994-07-12  |  331KB  |  11,099 lines

  1. diff -rc --new-file /src/baseline/gs-2.6.1.4/Makefile.in gs-2.6.1.4/Makefile.in
  2. *** /src/baseline/gs-2.6.1.4/Makefile.in    Thu Jan  1 00:00:00 1970
  3. --- gs-2.6.1.4/Makefile.in    Sat Jul  9 12:47:13 1994
  4. ***************
  5. *** 0 ****
  6. --- 1,1885 ----
  7. + # Copyright (C) 1989, 1992, 1993 Aladdin Enterprises.  All rights reserved.
  8. + #
  9. + # This file is part of Ghostscript.
  10. + #
  11. + # Ghostscript is distributed in the hope that it will be useful, but
  12. + # WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
  13. + # to anyone for the consequences of using it or for whether it serves any
  14. + # particular purpose or works at all, unless he says so in writing.  Refer
  15. + # to the Ghostscript General Public License for full details.
  16. + #
  17. + # Everyone is granted permission to copy, modify and redistribute
  18. + # Ghostscript, but only under the conditions described in the Ghostscript
  19. + # General Public License.  A copy of this license is supposed to have been
  20. + # given to you along with Ghostscript so you can know your rights and
  21. + # responsibilities.  It should be in a file named COPYING.  Among other
  22. + # things, the copyright notice and this notice must be preserved on all
  23. + # copies.
  24. + #### Start of system configuration section. ####
  25. + VPATH = @srcdir@
  26. + srcdir = @srcdir@
  27. + # Common prefix for machine-independent installed files.
  28. + prefix = /gnu
  29. + # Common prefix for machine-dependent installed files.
  30. + exec_prefix = $(prefix)
  31. + # Directory to install executables in.
  32. + bindir = $(exec_prefix)/bin
  33. + # Directory to install libraries in.
  34. + libdir = $(exec_prefix)/lib
  35. + # Directory to install the Info files in.
  36. + infodir = $(prefix)/info
  37. + # Directory to install the man page in.
  38. + mandir = $(prefix)/man/man$(manext)
  39. + # Number to put on the man page filename.
  40. + manext = 1
  41. + # Program to install executables.
  42. + INSTALL_PROGRAM = @INSTALL_PROGRAM@
  43. + # Program to install data like man pages.
  44. + INSTALL_DATA = @INSTALL_DATA@
  45. + # Generic install program.
  46. + INSTALL = @INSTALL@
  47. + CC = @CC@
  48. + #FPU_FLAG =-Dm68881
  49. + #CPU_FLAG =-Dm68030
  50. + DEFS = @DEFS@ $(FPU_FLAG) $(CPU_FLAG) -DUSG
  51. + CFLAGS = @CFLAGS@
  52. + LDFLAGS = @LDFLAGS@
  53. + LIBS = @LIBS@
  54. + #### End of system configuration section. ####
  55. + .c.o:
  56. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $< $(OUTPUT_OPTION)
  57. + # Define the default directories for the runtime
  58. + # initialization and font files.  Separate multiple directories with a ','.
  59. + datadir = $(prefix)/lib
  60. + gsdatadir = $(libdir)/ghostscript
  61. + gsfontdir = $(gsdatadir)/fonts
  62. + GS_LIB_DEFAULT=$(gsdatadir),$(gsfontdir)
  63. + # Define the name of the Ghostscript initialization file.
  64. + # (There is no reason to change this.)
  65. + GS_INIT=gs_init.ps
  66. + # Define the name of the executable file.
  67. + GS=gs
  68. + # Choose the language feature(s) to include.  See gs.mak for details.
  69. + FEATURE_DEVS=filter.dev dps.dev level2.dev
  70. + # Choose the device(s) to include.  See devs.mak for details.
  71. + DEVICE_DEVS=amiga_.dev amiga.dev amiga_low.dev amiga_high.dev amiga_super.dev
  72. + DEVICE_DEVS1=amiga_a2024.dev amiga_picassoii.dev amiga_printer.dev
  73. + DEVICE_DEVS2=amiga_ilbm.dev amiga_custom.dev
  74. + # Define the name of the makefile -- used in dependencies.
  75. + MAKEFILE=Makefile
  76. + # Define the ANSI-to-K&R dependency.  (gcc accepts ANSI syntax.)
  77. + AK=
  78. + # Define the platform name.  For a "stock" System V platform,
  79. + # use sysv_ instead of unix_.
  80. + PLATFORM=amiga
  81. + # Define the extensions for the object and executable files.
  82. + OBJ=o
  83. + XE=
  84. + # Define the source directory prefix, shell quote string, and shell names.
  85. + EXP=$(srcdir)/
  86. + QQ=\"
  87. + SHELL=/bin/sh
  88. + SH=$(SHELL)
  89. + SHP=$(SH) $(EXP)
  90. + #    GS - the name of the executable (without the extension, if any).
  91. + #    GS_LIB_DEFAULT - the default directory/ies for searching for the
  92. + #        initialization and font files at run time.
  93. + #    DEVICE_DEVS - the devices to include in the executable.
  94. + #        See devs.mak for details.
  95. + #    DEVICE_DEVS1...DEVICE_DEVS9 - additional devices, if the definition of
  96. + #        DEVICE_DEVS doesn't fit on one line.
  97. + #        See devs.mak for details.
  98. + #    FEATURE_DEVS - the optional features to include in the
  99. + #        executable.  Current features are:
  100. + #            dps - (partial) support for Display PostScript extensions:
  101. + #            see language.doc for details.
  102. + #            level2 - (partial) support for PostScript Level 2
  103. + #            extensions: see language.doc for details.
  104. + #            compfont - support for composite (type 0) fonts.
  105. + #            *** NOT IMPLEMENTED YET. ***
  106. + #            filter - support for Level 2 filters (other than eexec,
  107. + #            ASCIIHexEncode/Decode, NullEncode, PFBDecode,
  108. + #            and SubFileDecode, which are always included).
  109. + #            ccfonts - precompile fonts into C, and link them
  110. + #            with the executable.  In the standard makefiles,
  111. + #            this is only implemented for a very few fonts:
  112. + #            see fonts.doc for details.
  113. + # It is very unlikely that anyone would want to edit the remaining
  114. + #   symbols, but we describe them here for completeness:
  115. + #    GS_INIT - the name of the initialization file for Ghostscript,
  116. + #        normally gs_init.ps.
  117. + #    PLATFORM - a "device" name for the platform, so that platforms can
  118. + #        add various kinds of resources like devices and features.
  119. + #    QQ - a " preceded by whatever escape characters are needed to
  120. + #        persuade the shell to pass a " to a program (" on MS-DOS,
  121. + #        \" on Unix).
  122. + #    XE - the extension for executable files (e.g., null or .exe).
  123. + #    OBJ - the extension for relocatable object files (e.g., o or obj).
  124. + #    BEGINFILES - the list of files that `make begin' should delete.
  125. + #    CCBEGIN - the compilation command for `make begin', normally
  126. + #        $(CC) -c $(CFLAGS) $(DEFS) *.c.
  127. + #    CCC - the C invocation for normal compilation.
  128. + #    CCD - the C invocation for files that store into frame buffers or
  129. + #        device registers.  Needed because some optimizing compilers
  130. + #        will eliminate necessary stores.
  131. + #    CCCF - the C invocation for compiled fonts and other large,
  132. + #        self-contained data modules.  Needed because MS-DOS
  133. + #        requires using the 'huge' memory model for these.
  134. + #    CCINT - the C invocation for compiling the main interpreter module,
  135. + #        normally the same as CCC: this is needed because the
  136. + #        Borland compiler generates *worse* code for this module
  137. + #        (but only this module) when optimization (-O) is turned on.
  138. + #    AK - if source files must be converted from ANSI to K&R syntax,
  139. + #        this is ansi2knr$(XE); if not, it is null.
  140. + #        If a particular platform requires other utility programs
  141. + #        to be built, AK must include them too.
  142. + #    SHP - the prefix for invoking a shell script in the current directory
  143. + #        (null for MS-DOS, $(SH) ./ for Unix).
  144. + #    EXPP, EXP - the prefix for invoking an executable program in the
  145. + #        current directory (null for MS-DOS, ./ for Unix).
  146. + #    SH - the shell for scripts (null on MS-DOS, sh on Unix).
  147. + # The platform-specific makefiles must also include rules for creating
  148. + #   ansi2knr$(XE), genarch$(XE), and genconf$(XE) from the corresponding
  149. + #   .c files -- this is needed because Turbo C and Unix C treat the -o
  150. + #   switch slightly differently (Turbo C requires no following space,
  151. + #   Unix C requires a following space), and I haven't found a way to capture
  152. + #   the difference in a macro.
  153. + all default: $(GS)$(XE)
  154. + distclean realclean: clean
  155. +     rm -f $(MAKEFILE)
  156. + clean mostlyclean:
  157. +     rm -f *.$(OBJ) *.a core gmon.out
  158. +     rm -f *.dev *.d_* arch.h gconfig*.h o*.tr l*.tr
  159. +     rm -f t _temp_* _temp_*.* *.map *.sym
  160. +     rm -f ansi2knr$(XE) echogs$(XE) genarch$(XE) genconf$(XE)
  161. +     rm -f $(GS)$(XE) $(BEGINFILES)
  162. + # A rule to do a quick and dirty compilation attempt when first installing
  163. + # Ghostscript.  Many of the compilations will fail: follow this with 'make'.
  164. + begin:
  165. +     rm -f arch.h genarch$(XE) $(GS)$(XE) $(BEGINFILES)
  166. +     make arch.h
  167. +     - $(CCBEGIN)
  168. +     rm -f gconfig.$(OBJ) gdev*.$(OBJ) gp_*.$(OBJ) gsmisc.$(OBJ)
  169. +     rm -f iccfont.$(OBJ) iinit.$(OBJ) interp.$(OBJ) zfiledev.$(OBJ)
  170. + # Auxiliary programs
  171. + arch.h: genarch$(XE)
  172. +     genarch$(XE) arch.h
  173. + # Define the inter-dependencies of the .h files.
  174. + # Since not all versions of `make' defer expansion of macros,
  175. + # we must list these in bottom-to-top order.
  176. + # Generic files
  177. + arch_h=arch.h
  178. + std_h=std.h $(arch_h)
  179. + # Platform interfaces
  180. + gp_h=gp.h
  181. + gpcheck_h=gpcheck.h
  182. + # C library interfaces
  183. + # Because of variations in the "standard" header files between systems, and
  184. + # because we must include std.h before any file that includes sys/types.h,
  185. + # we define local include files named *_.h to substitute for <*.h>.
  186. + vmsmath_h=vmsmath.h
  187. + dos__h=dos_.h
  188. + ctype__h=ctype_.h $(std_h)
  189. + errno__h=errno_.h
  190. + malloc__h=malloc_.h $(std_h)
  191. + math__h=math_.h $(std_h) $(vmsmath_h)
  192. + memory__h=memory_.h $(std_h)
  193. + stat__h=stat_.h $(std_h)
  194. + stdio__h=stdio_.h $(std_h)
  195. + string__h=string_.h $(std_h)
  196. + time__h=time_.h $(std_h)
  197. + windows__h=windows_.h
  198. + # Miscellaneous
  199. + gdebug_h=gdebug.h
  200. + gsio_h=gsio.h
  201. + gstypes_h=gstypes.h
  202. + gs_h=gs.h $(stdio__h) $(gsio_h) $(gstypes_h)
  203. + gx_h=gx.h $(gs_h) $(gdebug_h)
  204. + gconfig_h=gconfig.h gsconfig.h
  205. + gserrors_h=gserrors.h
  206. + GX=$(AK) $(gx_h)
  207. + GXERR=$(GX) $(gserrors_h)
  208. + ###### Low-level facilities and utilities
  209. + ### Include files
  210. + gsccode_h=gsccode.h
  211. + gschar_h=gschar.h $(gsccode_h)
  212. + gscie_h=gscie.h
  213. + gscolor_h=gscolor.h
  214. + gscolor2_h=gscolor2.h
  215. + gscoord_h=gscoord.h
  216. + gscrypt1_h=gscrypt1.h
  217. + gscspace_h=gscspace.h
  218. + gsfont_h=gsfont.h
  219. + gsimage_h=gsimage.h
  220. + gsmatrix_h=gsmatrix.h
  221. + gspaint_h=gspaint.h
  222. + gspath_h=gspath.h
  223. + gsprops_h=gsprops.h
  224. + gsstate_h=gsstate.h $(gscolor_h)
  225. + gstype1_h=gstype1.h
  226. + gsuid_h=gsuid.h
  227. + gsutil_h=gsutil.h
  228. + gsxfont_h=gsxfont.h
  229. + gxarith_h=gxarith.h
  230. + gxbitmap_h=gxbitmap.h
  231. + gxcache_h=gxcache.h $(gsuid_h) $(gsxfont_h)
  232. + gxcdir_h=gxcdir.h
  233. + gxchar_h=gxchar.h $(gschar_h)
  234. + gxclist_h=gxclist.h
  235. + # gxcldev is out of order because it include gxclist.
  236. + gxcldev_h=gxcldev.h $(gxclist_h)
  237. + gxcpath_h=gxcpath.h
  238. + gxdevice_h=gxdevice.h $(gsmatrix_h) $(gsxfont_h) $(gxbitmap_h)
  239. + gxdevmem_h=gxdevmem.h
  240. + gxfdir_h=gxfdir.h $(gxcdir_h)
  241. + gxfixed_h=gxfixed.h
  242. + gxfont_h=gxfont.h $(gsfont_h) $(gsuid_h)
  243. + gxfrac_h=gxfrac.h
  244. + gximage_h=gximage.h $(gscspace_h) $(gsimage_h)
  245. + gxlum_h=gxlum.h
  246. + gxmatrix_h=gxmatrix.h $(gsmatrix_h)
  247. + gxop1_h=gxop1.h
  248. + gxpath_h=gxpath.h
  249. + gxrefct_h=gxrefct.h
  250. + gxtype1_h=gxtype1.h $(gscrypt1_h) $(gstype1_h)
  251. + gxxfont_h=gxxfont.h $(gsccode_h) $(gsmatrix_h) $(gsuid_h) $(gsxfont_h)
  252. + # gxcolor and gxfmap are out of order because they include other files.
  253. + gxcolor_h=gxcolor.h $(gxfrac_h) $(gsuid_h)
  254. + gxfmap_h=gxfmap.h $(gxfrac_h) $(gxrefct_h)
  255. + gzcolor_h=gzcolor.h $(gscolor_h) $(gxfmap_h) $(gxlum_h)
  256. + gzdevice_h=gzdevice.h $(gxdevice_h)
  257. + gzht_h=gzht.h
  258. + gzline_h=gzline.h
  259. + gzpath_h=gzpath.h $(gxpath_h)
  260. + gzstate_h=gzstate.h $(gsstate_h) $(gxfixed_h) $(gxmatrix_h)
  261. + ### Executable code
  262. + gp_nofb.$(OBJ): gp_nofb.c $(AK) \
  263. +   $(gx_h) $(gp_h) $(gxdevice_h)
  264. + gsutil.$(OBJ): gsutil.c $(AK) \
  265. +   $(std_h) $(gsprops_h) $(gsutil_h)
  266. + gxccache.$(OBJ): gxccache.c $(GXERR) $(gpcheck_h) \
  267. +   $(gxfixed_h) $(gxmatrix_h) $(gzdevice_h) $(gzcolor_h) \
  268. +   $(gxcpath_h) $(gxdevmem_h) $(gxfont_h) $(gxfdir_h) $(gxchar_h) \
  269. +   $(gxcache_h) $(gxxfont_h) $(gzstate_h) $(gzpath_h) \
  270. +   $(gscspace_h) $(gsimage_h)
  271. + gxccman.$(OBJ): gxccman.c $(GXERR) $(gpcheck_h) \
  272. +   $(gxfixed_h) $(gxmatrix_h) $(gzdevice_h) $(gzcolor_h) \
  273. +   $(gxcpath_h) $(gxdevmem_h) $(gxfont_h) $(gxfdir_h) $(gxchar_h) \
  274. +   $(gxcache_h) $(gxxfont_h) $(gzstate_h) $(gzpath_h)
  275. + gxclist.$(OBJ): gxclist.c $(GXERR) $(gpcheck_h) \
  276. +   $(gsmatrix_h) $(gxbitmap_h) $(gxcldev_h) $(gxdevice_h) $(gxdevmem_h)
  277. + gxclread.$(OBJ): gxclread.c $(GXERR) $(gpcheck_h) \
  278. +   $(gsmatrix_h) $(gxbitmap_h) $(gxcldev_h) $(gxdevice_h) $(gxdevmem_h)
  279. + gxcmap.$(OBJ): gxcmap.c $(GXERR) \
  280. +   $(gscspace_h) \
  281. +   $(gxcolor_h) $(gxdevice_h) $(gxfrac_h) $(gxlum_h) \
  282. +   $(gzcolor_h) $(gzstate_h)
  283. + gxcpath.$(OBJ): gxcpath.c $(GXERR) \
  284. +   $(gxdevice_h) $(gxfixed_h) $(gzcolor_h) $(gzpath_h) $(gxcpath_h)
  285. + gxdither.$(OBJ): gxdither.c $(GX) \
  286. +   $(gxfixed_h) $(gxlum_h) $(gxmatrix_h) $(gzstate_h) $(gzdevice_h) $(gzcolor_h) $(gzht_h)
  287. + gxdraw.$(OBJ): gxdraw.c $(GXERR) $(gpcheck_h) \
  288. +   $(gxfixed_h) $(gxmatrix_h) $(gxbitmap_h) $(gzcolor_h) $(gzdevice_h) $(gzstate_h)
  289. + gxfill.$(OBJ): gxfill.c $(GXERR) \
  290. +   $(gxfixed_h) $(gxmatrix_h) $(gxdevice_h) $(gzcolor_h) $(gzpath_h) $(gzstate_h) $(gxcpath_h)
  291. + gxhint1.$(OBJ): gxhint1.c $(GXERR) \
  292. +   $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) $(gxdevmem_h) $(gxchar_h) $(gxfont_h) $(gxtype1_h) \
  293. +   $(gzdevice_h) $(gzstate_h)
  294. + gxhint2.$(OBJ): gxhint2.c $(GXERR) \
  295. +   $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) $(gxdevmem_h) $(gxchar_h) $(gxfont_h) $(gxtype1_h) $(gxop1_h) \
  296. +   $(gzdevice_h) $(gzstate_h)
  297. + gxht.$(OBJ): gxht.c $(GXERR) \
  298. +   $(gxfixed_h) $(gxmatrix_h) $(gxbitmap_h) $(gzstate_h) $(gzcolor_h) $(gzdevice_h) $(gzht_h)
  299. + gxpath.$(OBJ): gxpath.c $(GXERR) \
  300. +   $(gxfixed_h) $(gzpath_h)
  301. + gxpath2.$(OBJ): gxpath2.c $(GXERR) \
  302. +   $(gxfixed_h) $(gxarith_h) $(gzpath_h)
  303. + gxpcopy.$(OBJ): gxpcopy.c $(GXERR) \
  304. +   $(gxfixed_h) $(gxarith_h) $(gzpath_h)
  305. + gxstroke.$(OBJ): gxstroke.c $(GXERR) $(gpcheck_h) \
  306. +   $(gscoord_h) $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) \
  307. +   $(gzstate_h) $(gzcolor_h) $(gzdevice_h) $(gzline_h) $(gzpath_h)
  308. + ###### High-level facilities
  309. + gschar.$(OBJ): gschar.c $(GXERR) \
  310. +   $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) $(gzdevice_h) $(gxdevmem_h) $(gxfont_h) $(gxchar_h) $(gxcache_h) $(gstype1_h) $(gspath_h) $(gzpath_h) $(gzcolor_h) $(gzstate_h)
  311. + gscolor.$(OBJ): gscolor.c $(GXERR) \
  312. +   $(gscspace_h) $(gxcolor_h) $(gxdevice_h) $(gxrefct_h) \
  313. +   $(gzstate_h) $(gzcolor_h)
  314. + gscoord.$(OBJ): gscoord.c $(GXERR) \
  315. +   $(gsccode_h) $(gxarith_h) $(gxfixed_h) $(gxfont_h) $(gxmatrix_h) \
  316. +   $(gzdevice_h) $(gzstate_h) $(gscoord_h)
  317. + gsdevice.$(OBJ): gsdevice.c $(GXERR) \
  318. +   $(gxarith_h) $(gsprops_h) $(gsutil_h) $(gxbitmap_h) $(gxdevmem_h) \
  319. +   $(gzstate_h) $(gzdevice_h)
  320. + gsfile.$(OBJ): gsfile.c $(GXERR) \
  321. +   $(gsmatrix_h) $(gxdevice_h) $(gxdevmem_h)
  322. + gsfont.$(OBJ): gsfont.c $(GXERR) \
  323. +   $(gxdevice_h) $(gxfixed_h) $(gxmatrix_h) $(gxfont_h) $(gxfdir_h) \
  324. +   $(gzstate_h)
  325. + gsht.$(OBJ): gsht.c $(GXERR) \
  326. +   $(gzht_h) $(gzstate_h)
  327. + gsimage.$(OBJ): gsimage.c $(GXERR) $(gpcheck_h) \
  328. +   $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) $(gspaint_h) \
  329. +   $(gzcolor_h) $(gzdevice_h) $(gzpath_h) $(gzstate_h) \
  330. +   $(gxcolor_h) $(gxcpath_h) $(gxdevmem_h) $(gximage_h)
  331. + gsimage1.$(OBJ): gsimage1.c $(GXERR) $(gpcheck_h) \
  332. +   $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) $(gscspace_h) $(gspaint_h) \
  333. +   $(gzcolor_h) $(gzdevice_h) $(gzpath_h) $(gzstate_h) \
  334. +   $(gxcolor_h) $(gxcpath_h) $(gxdevmem_h) $(gximage_h)
  335. + gsimage2.$(OBJ): gsimage2.c $(GXERR) $(gpcheck_h) \
  336. +   $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) $(gscspace_h) $(gspaint_h) \
  337. +   $(gzcolor_h) $(gzdevice_h) $(gzpath_h) $(gzstate_h) \
  338. +   $(gxcolor_h) $(gxcpath_h) $(gxdevmem_h) $(gximage_h)
  339. + gsimpath.$(OBJ): gsimpath.c $(GXERR) \
  340. +   $(gsmatrix_h) $(gsstate_h) $(gspath_h)
  341. + gsline.$(OBJ): gsline.c $(GXERR) \
  342. +   $(gxfixed_h) $(gxmatrix_h) $(gzstate_h) $(gzline_h)
  343. + gsmatrix.$(OBJ): gsmatrix.c $(GXERR) \
  344. +   $(gxfixed_h) $(gxarith_h) $(gxmatrix_h)
  345. + gsmisc.$(OBJ): gsmisc.c $(GX) $(errno__h) $(malloc__h) $(memory__h) $(MAKEFILE)
  346. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) -DUSE_ASM=0$(USE_ASM) $(srcdir)/gsmisc.c
  347. + gspaint.$(OBJ): gspaint.c $(GXERR) $(gpcheck_h) \
  348. +   $(gxfixed_h) $(gxmatrix_h) $(gspaint_h) $(gzpath_h) $(gzstate_h) $(gzdevice_h) $(gxcpath_h) $(gxdevmem_h) $(gximage_h)
  349. + gspath.$(OBJ): gspath.c $(GXERR) \
  350. +   $(gxfixed_h) $(gxmatrix_h) $(gxpath_h) $(gzstate_h)
  351. + gspath2.$(OBJ): gspath2.c $(GXERR) \
  352. +   $(gspath_h) $(gxfixed_h) $(gxmatrix_h) $(gzstate_h) $(gzpath_h) $(gzdevice_h)
  353. + gsstate.$(OBJ): gsstate.c $(GXERR) \
  354. +   $(gscie_h) $(gscolor2_h) $(gscspace_h) $(gxcolor_h) $(gxrefct_h) \
  355. +   $(gzstate_h) $(gzcolor_h) $(gzdevice_h) $(gzht_h) $(gzline_h) $(gzpath_h)
  356. + gstdev.$(OBJ): gstdev.c $(GXERR) \
  357. +   $(gxbitmap_h) $(gxdevice_h) $(gxfixed_h) $(gxmatrix_h)
  358. + gstype1.$(OBJ): gstype1.c $(GXERR) \
  359. +   $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) $(gxchar_h) $(gxdevmem_h) $(gxop1_h) $(gxtype1_h) \
  360. +   $(gzstate_h) $(gzdevice_h) $(gzpath_h)
  361. + ###### The internal devices
  362. + gdevmem_h=gdevmem.h
  363. + gdevemap.$(OBJ): gdevemap.c $(AK) $(std_h)
  364. + gdevmem1.$(OBJ): gdevmem1.c $(AK) \
  365. +   $(gx_h) $(gserrors_h) $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h)
  366. + gdevmem2.$(OBJ): gdevmem2.c $(AK) \
  367. +   $(gx_h) $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h)
  368. + gdevmem3.$(OBJ): gdevmem3.c $(AK) \
  369. +   $(gx_h) $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h)
  370. + ###### Files dependent on the installed devices, features, and platform.
  371. + # Generating gconfig.h also generates o*.tr and l*.tr.
  372. + # gconfig.h shouldn't have to depend on ALL_DEVS, but that would
  373. + # involve rewriting gsconfig to only save the device name, not the
  374. + # contents of the <device>.D_# files.
  375. + ALL_DEVS=$(FEATURE_DEVS) $(PLATFORM).dev \
  376. +   $(DEVICE_DEVS) $(DEVICE_DEVS1) \
  377. +   $(DEVICE_DEVS2) $(DEVICE_DEVS3) $(DEVICE_DEVS4) $(DEVICE_DEVS5)\
  378. +   $(DEVICE_DEVS6) $(DEVICE_DEVS7) $(DEVICE_DEVS8) $(DEVICE_DEVS9)
  379. + gconfig.h obj.tr objw.tr ld.tr lib.tr: \
  380. +   devs.mak $(MAKEFILE) echogs$(XE) genconf$(XE) $(ALL_DEVS)
  381. +     echogs -w t.cfg - $(FEATURE_DEVS) $(PLATFORM).dev
  382. +     echogs -a t.cfg - $(DEVICE_DEVS)
  383. +     echogs -a t.cfg - $(DEVICE_DEVS1)
  384. +     echogs -a t.cfg - $(DEVICE_DEVS2)
  385. +     echogs -a t.cfg - $(DEVICE_DEVS3)
  386. +     echogs -a t.cfg - $(DEVICE_DEVS4)
  387. +     echogs -a t.cfg - $(DEVICE_DEVS5)
  388. +     echogs -a t.cfg - $(DEVICE_DEVS6)
  389. +     echogs -a t.cfg - $(DEVICE_DEVS7)
  390. +     echogs -a t.cfg - $(DEVICE_DEVS8)
  391. +     echogs -a t.cfg - $(DEVICE_DEVS9)
  392. +     genconf @t.cfg -h gconfig.h -l lib.tr -o obj.tr -u ld.tr -w objw.tr
  393. +     rm t.cfg
  394. +     echogs -a gconfig.h -x 23 define GS_LIB_DEFAULT -x 2022 $(GS_LIB_DEFAULT) -x 22
  395. +     echogs -a gconfig.h -x 23 define GS_INIT -x 2022 $(GS_INIT) -x 22
  396. + gconfig.$(OBJ): gconfig.c $(AK) $(gconfig_h) $(MAKEFILE)
  397. + ###### On Unix, we pre-link all of the library except the back end.
  398. + ###### On MS-DOS, we have to do the whole thing at once.
  399. + LIBGS=gschar.$(OBJ) gscolor.$(OBJ) gscoord.$(OBJ) \
  400. +  gsdevice.$(OBJ) gsfile.$(OBJ) gsfont.$(OBJ) gsht.$(OBJ) \
  401. +  gsimage.$(OBJ) gsimage1.$(OBJ) gsimage2.$(OBJ) \
  402. +  gsimpath.$(OBJ) gsline.$(OBJ) gsmatrix.$(OBJ) gsmisc.$(OBJ) \
  403. +  gspaint.$(OBJ) gspath.$(OBJ) gspath2.$(OBJ) \
  404. +  gsstate.$(OBJ) gstdev.$(OBJ) gstype1.$(OBJ) gsutil.$(OBJ) \
  405. +  gxccache.$(OBJ) gxccman.$(OBJ) gxclist.$(OBJ) gxclread.$(OBJ) \
  406. +  gxcmap.$(OBJ) gxcpath.$(OBJ) \
  407. +  gxdither.$(OBJ) gxdraw.$(OBJ) gxfill.$(OBJ) \
  408. +  gxhint1.$(OBJ) gxhint2.$(OBJ) gxht.$(OBJ) \
  409. +  gxpath.$(OBJ) gxpath2.$(OBJ) gxpcopy.$(OBJ) gxstroke.$(OBJ) \
  410. +  gdevmem1.$(OBJ) gdevmem2.$(OBJ) gdevmem3.$(OBJ) gconfig.$(OBJ)
  411. + # ------------------------------ Interpreter ------------------------------ #
  412. + ###### Include files
  413. + alloc_h=alloc.h
  414. + astate_h=astate.h
  415. + ccfont_h=ccfont.h
  416. + dict_h=dict.h
  417. + dparam_h=dparam.h
  418. + dstack_h=dstack.h
  419. + errors_h=errors.h
  420. + estack_h=estack.h
  421. + filedev_h=filedev.h
  422. + files_h=files.h
  423. + font_h=font.h
  424. + ilevel_h=ilevel.h
  425. + iname_h=iname.h
  426. + iref_h=iref.h
  427. + iscan_h=iscan.h
  428. + ivmspace_h=ivmspace.h
  429. + iutil_h=iutil.h
  430. + main_h=main.h
  431. + opdef_h=opdef.h
  432. + ostack_h=ostack.h
  433. + overlay_h=overlay.h
  434. + packed_h=packed.h
  435. + save_h=save.h
  436. + scanchar_h=scanchar.h
  437. + sbits_h=sbits.h
  438. + shc_h=shc.h
  439. + state_h=state.h
  440. + store_h=store.h
  441. + stream_h=stream.h
  442. + # Nested include files
  443. + bfont_h=bfont.h $(font_h)
  444. + ghost_h=ghost.h $(gx_h) $(iref_h)
  445. + oper_h=oper.h $(gsutil_h) $(iutil_h) $(opdef_h) $(ostack_h)
  446. + scf_h=scf.h $(shc_h)
  447. + sdct_h=sdct.h $(shc_h)
  448. + # Include files for optional features
  449. + bnum_h=bnum.h
  450. + bseq_h=bseq.h
  451. + btoken_h=btoken.h
  452. + comp1_h=comp1.h $(ghost_h) $(oper_h) $(gserrors_h) $(gxfixed_h) $(gxop1_h)
  453. + gdevprn_h=gdevprn.h $(memory__h) $(string__h) $(gx_h) \
  454. +   $(gserrors_h) $(gsmatrix_h) $(gxdevice_h) $(gxdevmem_h) $(gxclist_h)
  455. + ###### Utilities
  456. + GH=$(AK) $(ghost_h)
  457. + ialloc.$(OBJ): ialloc.c $(AK) $(gx_h) $(alloc_h) $(astate_h) $(ivmspace_h)
  458. + iccfont.$(OBJ): iccfont.c $(GH) gconfigf.h \
  459. +   $(ghost_h) $(alloc_h) $(ccfont_h) $(dict_h) $(dstack_h) $(errors_h) \
  460. +   $(font_h) $(iutil_h) $(iname_h) $(oper_h) $(save_h) $(store_h)
  461. + idebug.$(OBJ): idebug.c $(GH) \
  462. +   $(iutil_h) $(dict_h) $(iname_h) $(ostack_h) $(opdef_h) $(packed_h) $(store_h)
  463. + idict.$(OBJ): idict.c $(GH) \
  464. +   $(alloc_h) $(errors_h) $(ivmspace_h) $(iname_h) $(packed_h) \
  465. +   $(save_h) $(store_h) $(iutil_h) $(dict_h) $(dstack_h)
  466. + idparam.$(OBJ): idparam.c $(GH) \
  467. +   $(gsmatrix_h) $(dict_h) $(dparam_h) $(errors_h) $(iutil_h)
  468. + iinit.$(OBJ): iinit.c $(GH) $(gconfig_h) \
  469. +   $(alloc_h) $(dict_h) $(dstack_h) $(errors_h) $(ilevel_h) $(iname_h) $(oper_h) $(store_h)
  470. + iname.$(OBJ): iname.c $(GH) $(alloc_h) $(errors_h) $(ivmspace_h) $(iname_h) $(store_h)
  471. + isave.$(OBJ): isave.c $(GH) $(alloc_h) $(astate_h) $(errors_h) $(iname_h) $(packed_h) $(save_h) $(store_h)
  472. + iscan.$(OBJ): iscan.c $(GH) $(ctype__h) \
  473. +   $(alloc_h) $(dict_h) $(dstack_h) $(errors_h) \
  474. +   $(ilevel_h) $(iutil_h) $(iscan_h) $(ivmspace_h) \
  475. +   $(iname_h) $(ostack_h) $(packed_h) $(store_h) $(stream_h) $(scanchar_h)
  476. + iutil.$(OBJ): iutil.c $(GH) \
  477. +   $(errors_h) $(alloc_h) $(dict_h) $(iutil_h) $(ivmspace_h) \
  478. +   $(iname_h) $(ostack_h) $(opdef_h) $(packed_h) $(store_h) \
  479. +   $(gsmatrix_h) $(gxdevice_h) $(gzcolor_h)
  480. + sfilter.$(OBJ): sfilter.c $(AK) $(stdio__h) \
  481. +   $(scanchar_h) $(stream_h) $(gscrypt1_h)
  482. + stream.$(OBJ): stream.c $(AK) $(stdio__h) $(memory__h) \
  483. +   $(gpcheck_h) $(scanchar_h) $(stream_h)
  484. + ###### Operators
  485. + OP=$(GH) $(errors_h) $(oper_h)
  486. + ### Non-graphics operators
  487. + zarith.$(OBJ): zarith.c $(OP) $(store_h)
  488. + zarray.$(OBJ): zarray.c $(OP) $(alloc_h) $(packed_h) $(store_h)
  489. + zcontrol.$(OBJ): zcontrol.c $(OP) $(estack_h) $(iutil_h) $(store_h)
  490. + zdict.$(OBJ): zdict.c $(OP) $(dict_h) $(dstack_h) $(iname_h) $(store_h)
  491. + zfile.$(OBJ): zfile.c $(OP) $(gp_h) \
  492. +   $(alloc_h) $(estack_h) $(filedev_h) $(files_h) $(ilevel_h) $(iutil_h) \
  493. +   $(save_h) $(stream_h) $(store_h)
  494. + zfiledev.$(OBJ): zfiledev.c $(OP) $(string__h) $(gp_h) $(gconfig_h) \
  495. +   $(filedev_h) $(files_h) $(stream_h)
  496. + zfileio.$(OBJ): zfileio.c $(OP) $(gp_h) \
  497. +   $(estack_h) $(files_h) $(iscan_h) $(store_h) $(stream_h) \
  498. +   $(gsmatrix_h) $(gxdevice_h) $(gxdevmem_h)
  499. + zfilter.$(OBJ): zfilter.c $(OP) $(alloc_h) $(stream_h)
  500. + zgeneric.$(OBJ): zgeneric.c $(OP) \
  501. +   $(dict_h) $(estack_h) $(ivmspace_h) $(iname_h) $(packed_h) $(store_h)
  502. + zmath.$(OBJ): zmath.c $(OP) $(store_h)
  503. + zmisc.$(OBJ): zmisc.c $(OP) $(gp_h) $(errno__h) $(memory__h) $(string__h) \
  504. +   $(alloc_h) $(dict_h) $(dstack_h) $(iname_h) $(ivmspace_h) $(packed_h) $(store_h) \
  505. +   $(gscrypt1_h)
  506. + zpacked.$(OBJ): zpacked.c $(OP) \
  507. +   $(alloc_h) $(dict_h) $(ivmspace_h) $(iname_h) $(packed_h) $(save_h) $(store_h)
  508. + zprops.$(OBJ): zprops.c $(OP) \
  509. +   $(alloc_h) $(dict_h) $(iname_h) $(state_h) $(store_h) \
  510. +   $(gsprops_h) $(gsmatrix_h) $(gxdevice_h) $(gsstate_h)
  511. + zrelbit.$(OBJ): zrelbit.c $(OP) $(store_h) $(dict_h)
  512. + zstack.$(OBJ): zstack.c $(OP) $(store_h)
  513. + zstring.$(OBJ): zstring.c $(OP) \
  514. +   $(alloc_h) $(iscan_h) $(iutil_h) $(iname_h) $(store_h) $(stream_h)
  515. + ztype.$(OBJ): ztype.c $(OP) \
  516. +   $(dict_h) $(iscan_h) $(iutil_h) $(iname_h) $(stream_h) $(store_h)
  517. + zvmem.$(OBJ): zvmem.c $(OP) $(alloc_h) $(dict_h) $(dstack_h) $(estack_h) $(save_h) $(state_h) $(store_h) \
  518. +   $(gsmatrix_h) $(gsstate_h)
  519. + ###### Graphics operators
  520. + zchar.$(OBJ): zchar.c $(OP) $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) \
  521. +   $(gschar_h) $(gxtype1_h) $(gxdevice_h) $(gxfont_h) $(gzpath_h) $(gzstate_h) \
  522. +   $(alloc_h) $(dict_h) $(font_h) $(estack_h) $(ilevel_h) $(iname_h) $(state_h) $(store_h)
  523. + zcolor.$(OBJ): zcolor.c $(OP) $(alloc_h) $(estack_h) $(gxfixed_h) $(gxmatrix_h) $(gzstate_h) $(gxdevice_h) $(gzcolor_h) $(iutil_h) $(state_h) $(store_h)
  524. + zdevice.$(OBJ): zdevice.c $(OP) $(alloc_h) $(state_h) $(gsmatrix_h) $(gsstate_h) $(gxdevice_h) $(store_h)
  525. + zfont.$(OBJ): zfont.c $(OP) \
  526. +   $(gsmatrix_h) $(gxdevice_h) $(gxfont_h) $(gxfdir_h) $(gxcache_h) \
  527. +   $(alloc_h) $(bfont_h) $(dict_h) $(iname_h) $(packed_h) $(save_h) $(state_h) $(store_h)
  528. + zfont1.$(OBJ): zfont1.c $(OP) $(gsmatrix_h) $(gxdevice_h) $(gschar_h) $(gxfixed_h) $(gxfont_h) \
  529. +   $(bfont_h) $(dict_h) $(dparam_h) $(iname_h) $(store_h)
  530. + zfont2.$(OBJ): zfont2.c $(OP) $(gsmatrix_h) $(gxdevice_h) $(gschar_h) $(gxfixed_h) $(gxfont_h) \
  531. +   $(alloc_h) $(bfont_h) $(dict_h) $(dparam_h) $(ilevel_h) $(iname_h) \
  532. +   $(packed_h) $(save_h) $(store_h)
  533. + zgstate.$(OBJ): zgstate.c $(OP) $(alloc_h) $(gsmatrix_h) $(gsstate_h) $(state_h) $(store_h)
  534. + zht.$(OBJ): zht.c $(OP) $(alloc_h) $(estack_h) $(gsmatrix_h) $(gsstate_h) $(state_h) $(store_h)
  535. + zmatrix.$(OBJ): zmatrix.c $(OP) $(gsmatrix_h) $(state_h) $(gscoord_h) $(store_h)
  536. + zpaint.$(OBJ): zpaint.c $(OP) \
  537. +   $(alloc_h) $(estack_h) $(ilevel_h) $(state_h) $(store_h) $(stream_h) \
  538. +   $(gsimage_h) $(gsmatrix_h) $(gspaint_h)
  539. + zpath.$(OBJ): zpath.c $(OP) $(gsmatrix_h) $(gspath_h) $(state_h) $(store_h)
  540. + zpath2.$(OBJ): zpath2.c $(OP) $(alloc_h) $(estack_h) $(gspath_h) $(state_h) $(store_h)
  541. + ###### Linking
  542. + INT=ialloc.$(OBJ) idebug.$(OBJ) idict.$(OBJ) idparam.$(OBJ) \
  543. +  iinit.$(OBJ) iname.$(OBJ) \
  544. +  interp.$(OBJ) isave.$(OBJ) iscan.$(OBJ) iutil.$(OBJ) \
  545. +  sfilter.$(OBJ) stream.$(OBJ) \
  546. +  zarith.$(OBJ) zarray.$(OBJ) zcontrol.$(OBJ) zdict.$(OBJ) \
  547. +  zfile.$(OBJ) zfiledev.$(OBJ) zfileio.$(OBJ) zfilter.$(OBJ) zgeneric.$(OBJ) \
  548. +  zmath.$(OBJ) zmisc.$(OBJ) zpacked.$(OBJ) zprops.$(OBJ) zrelbit.$(OBJ) \
  549. +  zstack.$(OBJ) zstring.$(OBJ) ztype.$(OBJ) zvmem.$(OBJ) \
  550. +  zchar.$(OBJ) zcolor.$(OBJ) zfont.$(OBJ) zfont1.$(OBJ) zfont2.$(OBJ) \
  551. +  zdevice.$(OBJ) zgstate.$(OBJ) zht.$(OBJ) zmatrix.$(OBJ) \
  552. +  zpaint.$(OBJ) zpath.$(OBJ) zpath2.$(OBJ)
  553. + # -------------------------- Optional features ---------------------------- #
  554. + ### Additions common to Display PostScript and Level 2
  555. + # We have to split up the module list because of limitations
  556. + # on the number of arguments to a DOS batch file.
  557. + dpsand2a_=gsdps1.$(OBJ) ibnum.$(OBJ) iscan2.$(OBJ)
  558. + dpsand2b_=zbseq.$(OBJ) zchar2.$(OBJ) zdps1.$(OBJ) zupath.$(OBJ) zvmem2.$(OBJ)
  559. + dpsand2_=$(dpsand2a_) $(dpsand2b_)
  560. + dpsand2.dev: $(dpsand2_) gssetmod gsaddmod
  561. +     $(SHP)gssetmod dpsand2 $(dpsand2a_)
  562. +     $(SHP)gsaddmod dpsand2 -obj $(dpsand2b_)
  563. +     $(SHP)gsaddmod dpsand2 -oper2 zbseq zchar2 zdps1 zupath zvmem2
  564. +     $(SHP)gsaddmod dpsand2 -ps gs_dps1
  565. + gsdps1.$(OBJ): gsdps1.c $(GXERR) $(gxfixed_h) $(gxmatrix_h) $(gzpath_h) $(gzstate_h)
  566. + ibnum.$(OBJ): ibnum.c $(GH) $(errors_h) $(stream_h) $(bnum_h) $(btoken_h)
  567. + iscan2.$(OBJ): iscan2.c $(GH) $(errors_h) \
  568. +   $(alloc_h) $(dict_h) $(dstack_h) $(iscan_h) $(iutil_h) $(ivmspace_h) \
  569. +   $(iname_h) $(ostack_h) $(save_h) $(store_h) $(stream_h) \
  570. +   $(bseq_h) $(btoken_h) $(bnum_h)
  571. + zbseq.$(OBJ): zbseq.c $(OP) $(save_h) $(store_h) $(stream_h) $(files_h) $(iname_h) $(bnum_h) $(btoken_h) $(bseq_h)
  572. + zchar2.$(OBJ): zchar2.c $(OP) $(gschar_h) $(gsmatrix_h) $(gxfixed_h) $(gxfont_h) \
  573. +   $(alloc_h) $(estack_h) $(font_h) $(iname_h) $(state_h) $(store_h) $(stream_h) $(bnum_h)
  574. + zdps1.$(OBJ): zdps1.c $(OP) $(gsmatrix_h) $(gspath_h) $(gsstate_h) \
  575. +   $(alloc_h) $(ivmspace_h) $(state_h) $(store_h) $(stream_h) $(bnum_h)
  576. + zupath.$(OBJ): zupath.c $(OP) \
  577. +   $(dict_h) $(dstack_h) $(iutil_h) $(state_h) $(store_h) $(stream_h) $(bnum_h) \
  578. +   $(gscoord_h) $(gsmatrix_h) $(gspaint_h) $(gspath_h) $(gsstate_h) \
  579. +   $(gxfixed_h) $(gxdevice_h) $(gxpath_h)
  580. + zvmem2.$(OBJ): zvmem2.c $(OP) \
  581. +   $(ivmspace_h) $(store_h)
  582. + ### Display PostScript
  583. + # We should include zcontext, but it isn't in good enough shape yet:
  584. + #    $(SHP)gsaddmod dps -oper2 zcontext
  585. + dps_=
  586. + dps.dev: dpsand2.dev $(dps_) gssetmod gsaddmod
  587. +     $(SHP)gssetmod dps $(dps_)
  588. +     $(SHP)gsaddmod dps -include dpsand2
  589. + zcontext.$(OBJ): zcontext.c $(OP) \
  590. +   $(alloc_h) $(dict_h) $(dstack_h) $(estack_h) $(state_h) $(store_h)
  591. + ### Composite font support
  592. + gschar0.$(OBJ): gschar0.c $(GXERR) \
  593. +   $(gxfixed_h) $(gxmatrix_h) $(gzdevice_h) $(gxdevmem_h) $(gxfont_h) $(gxchar_h) $(gzstate_h)
  594. + zfont0.$(OBJ): zfont0.c $(OP) $(gsmatrix_h) $(gxdevice_h) $(gxfont_h) \
  595. +   $(alloc_h) $(bfont_h) $(dict_h) $(iname_h) $(state_h) $(store_h)
  596. + compfont_=zchar2.$(OBJ) zfont0.$(OBJ) gschar0.$(OBJ)
  597. + compfont.dev: $(compfont_) gssetmod gsaddmod
  598. +     $(SHP)gssetmod compfont $(compfont_)
  599. +     $(SHP)gsaddmod compfont -oper zfont0 zchar2
  600. +     $(SHP)gsaddmod compfont -ps gs_type0
  601. + ### Level 2 additions
  602. + # We have to split up the module list because of limitations
  603. + # on the number of arguments to a DOS batch file.
  604. + level2a_=gscie.$(OBJ) gscolor2.$(OBJ) zcie.$(OBJ) zcolor2.$(OBJ)
  605. + level2b_=zcspace2.$(OBJ) zht2.$(OBJ) zimage2.$(OBJ) zmisc2.$(OBJ)
  606. + level2_=$(level2a_) $(level2b_)
  607. + level2.dev: compfont.dev dpsand2.dev filter.dev $(level2_) gssetmod gsaddmod
  608. +     $(SHP)gssetmod level2 $(level2a_)
  609. +     $(SHP)gsaddmod level2 -obj $(level2b_)
  610. +     $(SHP)gsaddmod level2 -include compfont dpsand2 filter
  611. +     $(SHP)gsaddmod level2 -oper zmisc2_level
  612. +     $(SHP)gsaddmod level2 -oper2 zcie zcolor2 zcspace2
  613. +     $(SHP)gsaddmod level2 -oper2 zht2 zimage2 zmisc2
  614. +     $(SHP)gsaddmod level2 -ps gs_lev2
  615. + gscie.$(OBJ): gscie.c $(GXERR) \
  616. +   $(gscspace_h) $(gscie_h) $(gscolor2_h) \
  617. +   $(gxarith_h) $(gxcolor_h) $(gxdevice_h) $(gxrefct_h) \
  618. +   $(gzcolor_h) $(gzstate_h)
  619. + gscolor2.$(OBJ): gscolor2.c $(GXERR) \
  620. +   $(gscie_h) $(gscolor2_h) $(gscspace_h) \
  621. +   $(gxcolor_h) $(gxdevice_h) $(gxfixed_h) $(gxmatrix_h) $(gxrefct_h) \
  622. +   $(gzcolor_h) $(gzstate_h)
  623. + zcie.$(OBJ): zcie.c $(OP) \
  624. +   $(gscspace_h) $(gscolor2_h) $(gscie_h) $(gxcolor_h) $(gxrefct_h) \
  625. +   $(alloc_h) $(dict_h) $(dparam_h) $(estack_h) $(save_h) $(state_h) $(store_h)
  626. + zcolor2.$(OBJ): zcolor2.c $(OP) \
  627. +   $(gscolor_h) $(gxcolor_h) $(gscolor2_h) $(gscspace_h) $(gsmatrix_h) \
  628. +   $(dict_h) $(dparam_h) $(iname_h) $(state_h) $(store_h)
  629. + zcspace2.$(OBJ): zcspace2.c $(OP) \
  630. +   $(gscolor_h) $(gxcolor_h) $(gscolor2_h) $(gscspace_h) $(gsmatrix_h) \
  631. +   $(dict_h) $(dparam_h) $(estack_h) $(iname_h) $(state_h) $(store_h)
  632. + zht2.$(OBJ): zht2.c $(OP) \
  633. +   $(dict_h) $(dparam_h) $(iname_h) $(state_h) $(store_h)
  634. + zimage2.$(OBJ): zimage2.c $(OP) \
  635. +   $(gscolor_h) $(gscolor2_h) $(gscspace_h) $(gsmatrix_h) $(gxcolor_h) \
  636. +   $(dict_h) $(dparam_h) $(ilevel_h) $(state_h)
  637. + zmisc2.$(OBJ): zmisc2.c $(OP) \
  638. +   $(gsfont_h) \
  639. +   $(dict_h) $(dparam_h) $(dstack_h) $(estack_h) $(ilevel_h) $(iname_h) $(store_h)
  640. + ### Filters other than the ones in sfilter.c
  641. + sbits.$(OBJ): sbits.c $(AK) $(stdio__h) $(sbits_h) $(stream_h)
  642. + scftab.$(OBJ): scftab.c $(AK) $(std_h) $(scf_h)
  643. + scfdtab.$(OBJ): scfdtab.c $(AK) $(std_h) $(scf_h)
  644. + scfd.$(OBJ): scfd.c $(AK) $(stdio__h) $(gdebug_h)\
  645. +   $(sbits_h) $(scf_h) $(stream_h)
  646. + scfe.$(OBJ): scfe.c $(AK) $(stdio__h) $(gdebug_h)\
  647. +   $(sbits_h) $(scf_h) $(stream_h)
  648. + sdctd.$(OBJ): sdctd.c $(AK) $(stdio__h) $(gdebug_h) $(stream_h)
  649. + sdcte.$(OBJ): sdcte.c $(AK) $(stdio__h) $(gdebug_h) $(stream_h)
  650. + sfilter2.$(OBJ): sfilter2.c $(AK) $(stdio__h) $(scanchar_h) $(stream_h)
  651. + slzwd.$(OBJ): slzwd.c $(AK) $(stdio__h) $(gdebug_h) $(stream_h)
  652. + slzwe.$(OBJ): slzwe.c $(AK) $(stdio__h) $(gdebug_h) $(stream_h)
  653. + zfilter2.$(OBJ): zfilter2.c $(OP) $(alloc_h) $(dict_h) $(dparam_h) $(sdct_h) $(stream_h)
  654. + # Because of size limits on the DOS command line,
  655. + # we have to break this up into two parts.
  656. + filter_1=zfilter2.$(OBJ) sfilter2.$(OBJ) sbits.$(OBJ)
  657. + filter_2=scfdtab.$(OBJ) scftab.$(OBJ) scfd.$(OBJ) scfe.$(OBJ) 
  658. + filter_3=sdctd.$(OBJ) sdcte.$(OBJ) slzwd.$(OBJ) slzwe.$(OBJ)
  659. + filter.dev: $(filter_1) $(filter_2) $(filter_3) gssetmod gsaddmod
  660. +     $(SHP)gssetmod filter $(filter_1)
  661. +     $(SHP)gsaddmod filter -obj $(filter_2)
  662. +     $(SHP)gsaddmod filter -obj $(filter_3)
  663. +     $(SHP)gsaddmod filter -oper zfilter2
  664. + ### Precompiled fonts.  See fonts.doc for more information.
  665. + CCFONT=$(OP) $(ccfont_h)
  666. + # List the fonts we are going to compile.
  667. + # Because of intrinsic limitations in `make', we have to list
  668. + # the object file names and the font names separately.
  669. + ccfonts1_=uglyr.$(OBJ)
  670. + ccfonts1=uglyr
  671. + ccfonts.dev: $(MAKEFILE) gs.mak iccfont.$(OBJ) gssetmod gsaddmod \
  672. +   $(ccfonts1_) $(ccfonts2_) $(ccfonts3_) $(ccfonts4_) $(ccfonts5_)
  673. +     $(SHP)gssetmod ccfonts iccfont.$(OBJ)
  674. +     $(SHP)gsaddmod ccfonts -obj $(ccfonts1_)
  675. +     $(SHP)gsaddmod ccfonts -obj $(ccfonts2_)
  676. +     $(SHP)gsaddmod ccfonts -obj $(ccfonts3_)
  677. +     $(SHP)gsaddmod ccfonts -obj $(ccfonts4_)
  678. +     $(SHP)gsaddmod ccfonts -obj $(ccfonts5_)
  679. +     $(SHP)gsaddmod ccfonts -oper ccfonts
  680. + gconfigf.h: $(MAKEFILE) gs.mak genconf$(XE) gssetmod gsaddmod
  681. +     $(SHP)gssetmod ccfonts_
  682. +     $(SHP)gsaddmod ccfonts_ -font $(ccfonts1)
  683. +     $(SHP)gsaddmod ccfonts_ -font $(ccfonts2)
  684. +     $(SHP)gsaddmod ccfonts_ -font $(ccfonts3)
  685. +     $(SHP)gsaddmod ccfonts_ -font $(ccfonts4)
  686. +     $(SHP)gsaddmod ccfonts_ -font $(ccfonts5)
  687. +     $(EXP)genconf ccfonts_.dev -f gconfigf.h
  688. + uglyr.$(OBJ): uglyr.c $(CCFONT)
  689. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/uglyr.c
  690. + ncrr.$(OBJ): ncrr.c $(CCFONT)
  691. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/ncrr.c
  692. + pagk.$(OBJ): pagk.c $(CCFONT)
  693. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/pagk.c
  694. + psyr.$(OBJ): psyr.c $(CCFONT)
  695. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/psyr.c
  696. + ptmr.$(OBJ): ptmr.c $(CCFONT)
  697. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/ptmr.c
  698. + pzdr.$(OBJ): pzdr.c $(CCFONT)
  699. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/pzdr.c
  700. + # ----------------------------- Main program ------------------------------ #
  701. + # Interpreter main program
  702. + gs.$(OBJ): gs.c $(GH) $(ctype__h) \
  703. +   $(gxdevice_h) $(gxdevmem_h) \
  704. +   $(alloc_h) $(errors_h) $(estack_h) $(files_h) $(iscan_h) $(main_h) $(ostack_h) $(store_h) $(stream_h)
  705. + gsmain.$(OBJ): gsmain.c $(GH) \
  706. +   $(gp_h) $(gsmatrix_h) $(gxdevice_h) $(gserrors_h) \
  707. +   $(estack_h) $(files_h) $(iscan_h) $(main_h) $(ostack_h) $(store_h)
  708. + interp.$(OBJ): interp.c $(GH) \
  709. +   $(errors_h) $(estack_h) $(iname_h) $(dict_h) $(dstack_h) $(iscan_h) $(oper_h) $(ostack_h) $(packed_h) $(save_h) $(store_h) $(stream_h)
  710. +     $(CC) -c -I. -I$(srcdir) $(CFLAGS) $(DEFS) $(srcdir)/interp.c
  711. + # It is possible to build Ghostscript with an arbitrary collection of
  712. + # device drivers, although some drivers are supported only on a subset
  713. + # of the target platforms.  The currently available drivers are:
  714. + # Displays:
  715. + #   MS-DOS EGA and VGA:
  716. + #    ega    EGA (640x350, 16-color)
  717. + #    vga    VGA (640x480, 16-color)
  718. + #   MS-DOS SuperVGA:
  719. + # +    atiw    ATI Wonder SuperVGA, 256-color modes
  720. + # +     atiw16  ATI Wonder SuperVGA in 800x600, 16-color mode
  721. + #    s3vga    SuperVGA with S3 86C911 chip (e.g., Diamond Stealth board)
  722. + #    tseng    SuperVGA using Tseng Labs ET3000/4000 chips, 256-color modes
  723. + #    tseng16  Tseng Labs SuperVGA in 800x600, 16-color mode (256K memory)
  724. + # +    tvga    Trident SuperVGA, 256-color modes
  725. + # +    tvga16    Trident SuperVGA in 800x600, 16-color mode (256K memory)
  726. + #   ****** NOTE: The vesa device does not work with the Watcom (32-bit MS-DOS)
  727. + #   ****** compiler or executable.
  728. + #    vesa    SuperVGA with VESA standard API driver
  729. + #   MS-DOS other:
  730. + #    bgi    Borland Graphics Interface (CGA)  [MS-DOS only]
  731. + # *    herc    Hercules Graphics display   [MS-DOS only]
  732. + #    mswin    Microsoft Windows 3.0, 3.1  [MS Windows only]
  733. + #    mswinprn  Microsoft Windows 3.0, 3.1 printer  [MS Windows only]
  734. + # *    pe    Private Eye display
  735. + #   Unix and VMS:
  736. + #   ****** NOTE: For direct frame buffer addressing under SCO Unix or Xenix,
  737. + #   ****** edit the definition of EGAVGA below.
  738. + # *    att3b1    AT&T 3b1/Unixpc monochrome display   [3b1 only]
  739. + # *    sonyfb    Sony Microsystems monochrome display   [Sony only]
  740. + # *    sunview  SunView window system   [SunOS only]
  741. + #    x11    X Windows version 11, release >=4   [Unix and VMS only]
  742. + # Printers:
  743. + # *    appledmp  Apple Dot Matrix Printer (should also work with Imagewriter)
  744. + #    bj10e    Canon BubbleJet BJ10e
  745. + # *    bj200    Canon BubbleJet BJ200
  746. + # *    cdeskjet  H-P DeskJet 500C with 1 bit/pixel color
  747. + # *    cdjcolor  H-P DeskJet 500C with 24 bit/pixel color and
  748. + #        high-quality color (Floyd-Steinberg) dithering
  749. + # *    cdjmono  H-P DeskJet 500C printing black only
  750. + # *    cdj500    H-P DeskJet 500C (same as cdjcolor)
  751. + # *    cdj550    H-P DeskJet 550C
  752. + # *    declj250  alternate DEC LJ250 driver
  753. + # +    deskjet  H-P DeskJet and DeskJet Plus
  754. + # *    dfaxhigh  DigiBoard, Inc.'s DigiFAX software format (high resolution)
  755. + # *    dfaxlow  DigiFAX low (normal) resolution
  756. + #    djet500  H-P DeskJet 500
  757. + # *    djet500c  H-P DeskJet 500C
  758. + #    epson    Epson-compatible dot matrix printers (9- or 24-pin)
  759. + # +    eps9high  Epson-compatible 9-pin, interleaved lines
  760. + #        (triple resolution)
  761. + # *    epsonc    Epson LQ-2550 and Fujitsu 3400/2400/1200 color printers
  762. + # *    escp2    Epson ESC/P 2 language printers, including Stylus 800
  763. + # +     ibmpro  IBM 9-pin Proprinter
  764. + # *    jetp3852  IBM Jetprinter ink-jet color printer (Model #3852)
  765. + # +    laserjet  H-P LaserJet
  766. + # *    la50    DEC LA50 printer
  767. + # *    la75    DEC LA75 printer
  768. + # *    lbp8    Canon LBP-8II laser printer
  769. + # *    ln03    DEC LN03 printer
  770. + # *    lj250    DEC LJ250 Companion color printer
  771. + # +    ljet2p    H-P LaserJet IId/IIp/III* with TIFF compression
  772. + # +    ljet3    H-P LaserJet III* with Delta Row compression
  773. + # +    ljet4    H-P LaserJet 4 (defaults to 600 dpi)
  774. + # +    ljetplus  H-P LaserJet Plus
  775. + # *    m8510    C.Itoh M8510 printer
  776. + # *    necp6    NEC P6/P6+/P60 printers at 360 x 360 DPI resolution
  777. + # *    nwp533  Sony Microsystems NWP533 laser printer   [Sony only]
  778. + # *    oki182    Okidata MicroLine 182
  779. + #    paintjet  H-P PaintJet color printer
  780. + # *    pj    alternate PaintJet XL driver 
  781. + # *    pjxl    H-P PaintJet XL color printer
  782. + # *    pjxl300  H-P PaintJet XL300 color printer
  783. + # *    r4081    Ricoh 4081 laser printer
  784. + # *    sparc    SPARCprinter
  785. + # *    t4693d2  Tektronix 4693d color printer, 2 bits per R/G/B component
  786. + # *    t4693d4  Tektronix 4693d color printer, 4 bits per R/G/B component
  787. + # *    t4693d8  Tektronix 4693d color printer, 8 bits per R/G/B component
  788. + # *    tek4696  Tektronix 4695/4696 inkjet plotter
  789. + # *    trufax    TruFax facsimile driver  [Unix only]
  790. + # File formats and others:
  791. + #    bit    A plain "bit bucket" device
  792. + #    bmpmono    Monochrome MS Windows .BMP file format
  793. + #    bmp16    4-bit (EGA/VGA) .BMP file format
  794. + #    bmp256    8-bit (256-color) .BMP file format
  795. + #    bmp16m    24-bit .BMP file format
  796. + #    gifmono    Monochrome GIF file format
  797. + #    gif8    8-bit color GIF file format
  798. + #    pcxmono    Monochrome PCX file format
  799. + #    pcxgray    8-bit gray scale PCX file format
  800. + #    pcx16    Older color PCX file format (EGA/VGA, 16-color)
  801. + #    pcx256    Newer color PCX file format (256-color)
  802. + #    pbm    Portable Bitmap (plain format)
  803. + #    pbmraw    Portable Bitmap (raw format)
  804. + #    pgm    Portable Graymap (plain format)
  805. + #    pgmraw    Portable Graymap (raw format)
  806. + #    ppm    Portable Pixmap (plain format)
  807. + #    ppmraw    Portable Pixmap (raw format)
  808. + # *    tiffg3    TIFF/F (G3 fax)
  809. + # User-contributed drivers marked with * require hardware or software
  810. + # that is not available to Aladdin Enterprises.  Please contact the
  811. + # original contributors, not Aladdin Enterprises, if you have questions.
  812. + # Contact information appears in the driver entry below.
  813. + #
  814. + # Drivers marked with a + are maintained by Aladdin Enterprises with
  815. + # the assistance of users, since Aladdin Enterprises doesn't have access to
  816. + # the hardware for these either.
  817. + # If you add drivers, it would be nice if you kept each list
  818. + # in alphabetical order.
  819. + # Each platform-specific makefile contains a line of the form
  820. + #    DEVICE_DEVS=<dev1>.dev ... <devn>.dev
  821. + # where dev1 ... devn are the devices to be included in the build.
  822. + # You may edit this line to select any desired set of devices.
  823. + # dev1 will be used as the default device (unless overridden from
  824. + # the command line with -sDEVICE=xxx, of course.)  If you can't fit all the
  825. + # devices on a single line, you may add lines defining
  826. + #    DEVICE_DEVS2=<dev21>.dev ... <dev2n>.dev
  827. + #    DEVICE_DEVS3=<dev31>.dev ... <dev3n>.dev
  828. + # etc. up to DEVICE_DEVS9.
  829. + # Don't use continuation lines, since this may break the MS-DOS command
  830. + # processor.
  831. + # ---------------------------- End of catalog ---------------------------- #
  832. + # If you want to add a new device driver, the examples below should be
  833. + # enough of a guide to the correct form for the makefile rules.
  834. + # All device drivers depend on the following:
  835. + GDEV=$(AK) echogs$(XE) $(gserrors_h) $(gx_h) $(gxdevice_h)
  836. + # Define the header files for device drivers.  Every header file used by
  837. + # more than one device driver must be listed here.
  838. + gdevpccm_h=gdevpccm.h
  839. + gdevpcfb_h=gdevpcfb.h $(dos__h)
  840. + gdevpcl_h=gdevpcl.h
  841. + gdevsvga_h=gdevsvga.h
  842. + gdevx_h=gdevx.h
  843. + ###### ------------------- MS-DOS display devices ------------------- ######
  844. + # There are really only three drivers: an EGA/VGA driver (4 bit-planes,
  845. + # plane-addressed), a SuperVGA driver (8 bit-planes, byte addressed),
  846. + # and a special driver for the S3 chip.
  847. + # To make A4 paper the default, change the compilation line from
  848. + #    $(CC) $(CFLAGS) $(DEFS) -c ...
  849. + # to
  850. + #    $(CC) $(CFLAGS) $(DEFS) -c -DA4
  851. + ### ----------------------- EGA and VGA displays ----------------------- ###
  852. + gdevegaa.$(OBJ): gdevegaa.asm
  853. + ETEST=ega.$(OBJ) $(ega_) gdevpcfb.$(OBJ) gdevegaa.$(OBJ)
  854. + ega.exe: $(ETEST) libc$(MM).tr
  855. +     $(COMPDIR)\tlink $(LCT) $(LO) $(LIBDIR)\c0$(MM) @ega.tr @libc$(MM).tr
  856. + ega.$(OBJ): ega.c $(GDEV)
  857. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) -v $(srcdir)/ega.c
  858. + # The shared MS-DOS makefile defines PCFBASM as either gdevegaa.$(OBJ)
  859. + # or an empty string.
  860. + # NOTE: for direct frame buffer addressing under SCO Unix or Xenix,
  861. + # change gdevevga to gdevsco in the following line.
  862. + EGAVGA=gdevevga.$(OBJ) gdevpcfb.$(OBJ) $(PCFBASM)
  863. + gdevevga.$(OBJ): gdevevga.c $(GDEV) $(gdevpcfb_h)
  864. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/gdevevga.c
  865. + gdevsco.$(OBJ): gdevsco.c $(GDEV) $(gdevpcfb_h)
  866. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/gdevsco.c
  867. + # Common code for MS-DOS and SCO.
  868. + gdevpcfb.$(OBJ): gdevpcfb.c $(GDEV) $(MAKEFILE) $(gdevpcfb_h)
  869. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) -DUSE_ASM=0$(USE_ASM) $(srcdir)/gdevpcfb.c
  870. + # The EGA/VGA family includes: EGA, VGA, and
  871. + # the ATI Wonder, Tseng ET3000/4000, and Trident SuperVGA in 16-color mode.
  872. + ega.dev: $(EGAVGA) gssetdev
  873. +     $(SHP)gssetdev ega $(EGAVGA)
  874. + vga.dev: $(EGAVGA) gssetdev
  875. +     $(SHP)gssetdev vga $(EGAVGA)
  876. + atiw16.dev: $(EGAVGA) gssetdev
  877. +     $(SHP)gssetdev atiw16 $(EGAVGA)
  878. + tseng16.dev: $(EGAVGA) gssetdev
  879. +     $(SHP)gssetdev tseng16 $(EGAVGA)
  880. + tvga16.dev: $(EGAVGA) gssetdev
  881. +     $(SHP)gssetdev tvga16 $(EGAVGA)
  882. + ### ------------------------- SuperVGA displays ------------------------ ###
  883. + SVGA=gdevsvga.$(OBJ) $(PCFBASM)
  884. + gdevsvga.$(OBJ): gdevsvga.c $(GDEV) $(MAKEFILE) \
  885. +   $(gdevpcfb_h) $(gdevsvga_h)
  886. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) -DUSE_ASM=0$(USE_ASM) $(srcdir)/gdevsvga.c
  887. + # The SuperVGA family includes: ATI Wonder, S3, Trident, Tseng ET3000/4000,
  888. + # and VESA.
  889. + atiw.dev: $(SVGA) gssetdev
  890. +     $(SHP)gssetdev atiw $(SVGA)
  891. + tseng.dev: $(SVGA) gssetdev
  892. +     $(SHP)gssetdev tseng $(SVGA)
  893. + tvga.dev: $(SVGA) gssetdev
  894. +     $(SHP)gssetdev tvga $(SVGA)
  895. + vesa.dev: $(SVGA) gssetdev
  896. +     $(SHP)gssetdev vesa $(SVGA)
  897. + # The S3 driver doesn't share much code with the others.
  898. + s3vga_=$(SVGA) gdevs3ga.$(OBJ)
  899. + s3vga.dev: $(s3vga_) gssetdev
  900. +     $(SHP)gssetdev s3vga $(s3vga_)
  901. + gdevs3ga.$(OBJ): gdevs3ga.c $(GDEV) $(MAKEFILE) $(gdevpcfb_h) $(gdevsvga_h)
  902. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/gdevs3ga.c
  903. + ### ------------ The BGI (Borland Graphics Interface) device ----------- ###
  904. + cgaf.$(OBJ): $(BGIDIR)\cga.bgi
  905. +     $(BGIDIR)\bgiobj /F $(BGIDIR)\cga
  906. + egavgaf.$(OBJ): $(BGIDIR)\egavga.bgi
  907. +     $(BGIDIR)\bgiobj /F $(BGIDIR)\egavga
  908. + # Include egavgaf.$(OBJ) for debugging only.
  909. + bgi_=gdevbgi.$(OBJ) cgaf.$(OBJ)
  910. + bgi.dev: $(bgi_) gssetdev gsaddmod
  911. +     $(SHP)gssetdev bgi $(bgi_)
  912. +     $(SHP)gsaddmod bgi -lib $(LIBDIR)\graphics
  913. + gdevbgi.$(OBJ): gdevbgi.c $(GDEV) $(MAKEFILE) $(gxxfont_h)
  914. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) -DBGI_LIB=$(QQ)$(BGIDIRSTR)$(QQ) $(srcdir)/gdevbgi.c
  915. + ### ------------------- The Hercules Graphics display ------------------- ###
  916. + herc_=gdevherc.$(OBJ)
  917. + herc.dev: $(herc_) gssetdev
  918. +     $(SHP)gssetdev herc $(herc_)
  919. + gdevherc.$(OBJ): gdevherc.c $(GDEV)
  920. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/gdevherc.c
  921. + ###### ------------------- The Private Eye display ------------------- ######
  922. + ### Note: this driver was contributed by a user:                          ###
  923. + ###   please contact narf@media-lab.media.mit.edu if you have questions.  ###
  924. + pe_=gdevpe.$(OBJ)
  925. + pe.dev: $(pe_) gssetdev
  926. +     $(SHP)gssetdev pe $(pe_)
  927. + gdevpe.$(OBJ): gdevpe.c $(GDEV)
  928. + ###### ----------------- The MS-Windows 3.n display ------------------ ######
  929. + gdevmswn_h=gdevmswn.h $(GDEV) gp_mswin.h
  930. + # Choose one of gdevwddb or gdevwdib here.
  931. + mswin_=gdevmswn.$(OBJ) gdevmsxf.$(OBJ) gdevwdib.$(OBJ) \
  932. +   gdevemap.$(OBJ) gdevpccm.$(OBJ)
  933. + mswin.dev: $(mswin_) gssetdev
  934. +     $(SHP)gssetdev mswin $(mswin_)
  935. + gdevmswn.$(OBJ): gdevmswn.c $(gdevmswn_h) $(gp_h) $(gpcheck_h) \
  936. +   $(gsprops_h) $(gdevpccm_h)
  937. + gdevmsxf.$(OBJ): gdevmsxf.c $(ctype__h) $(math__h) $(memory__h) \
  938. +   $(gdevmswn_h) $(gsutil_h) $(gxxfont_h)
  939. + # An implementation using a device-dependent bitmap.
  940. + gdevwddb.$(OBJ): gdevwddb.c $(gdevmswn_h)
  941. + # An implementation using a DIB filled by an image device.
  942. + gdevwdib.$(OBJ): gdevwdib.c $(dos__h) $(gdevmswn_h)
  943. + ###### ----------------- The MS-Windows 3.n printer ------------------ ######
  944. + mswinprn_=gdevwprn.$(OBJ) gdevmsxf.$(OBJ)
  945. + mswinprn.dev: $(mswinprn_) gssetdev
  946. +     $(SHP)gssetdev mswinprn $(mswinprn_)
  947. + gdevwprn.$(OBJ): gdevwprn.c $(gdevmswn_h) $(gp_h) $(gpcheck_h) \
  948. +   $(gsprops_h) $(gdevpccm_h)
  949. + ### ---------------- Amiga display/printer/file devices ---------------- ###
  950. + ### Note: this driver was contributed by a user: please contact          ###
  951. + ###       Olaf Barthel (olsen@sourcery.han.de) if you have questions.    ###
  952. + ###       He would also like to hear from anyone using the driver.       ###
  953. + ### Please consult the source code for additional documentation.         ###
  954. + amiga_=gdevamiga.$(OBJ)
  955. + amiga.dev: $(amiga_) gssetdev
  956. +     $(SHP)gssetdev amiga $(amiga_)
  957. + amiga_low.dev: $(amiga_) gssetdev
  958. +     $(SHP)gssetdev amiga_low $(amiga_)
  959. + amiga_high.dev: $(amiga_) gssetdev
  960. +     $(SHP)gssetdev amiga_high $(amiga_)
  961. + amiga_super.dev: $(amiga_) gssetdev
  962. +     $(SHP)gssetdev amiga_super $(amiga_)
  963. + amiga_a2024.dev: $(amiga_) gssetdev
  964. +     $(SHP)gssetdev amiga_a2024 $(amiga_)
  965. + amiga_picassoii.dev: $(amiga_) gssetdev
  966. +     $(SHP)gssetdev amiga_picassoii $(amiga_)
  967. + amiga_custom.dev: $(amiga_) gssetdev
  968. +     $(SHP)gssetdev amiga_custom $(amiga_)
  969. + amiga_printer.dev: $(amiga_) gssetdev
  970. +     $(SHP)gssetdev amiga_printer $(amiga_)
  971. + amiga_ilbm.dev: $(amiga_) gssetdev
  972. +     $(SHP)gssetdev amiga_ilbm $(amiga_)
  973. + gdevamiga.$(OBJ): gdevamiga.c $(GDEV) $(arch_h)
  974. + ###### ----------- The AT&T 3b1 Unixpc monochrome display ------------ ######
  975. + ### Note: this driver was contributed by a user: please contact           ###
  976. + ###       Andy Fyfe (andy@cs.caltech.edu) if you have questions.          ###
  977. + att3b1_=gdev3b1.$(OBJ)
  978. + att3b1.dev: $(att3b1_) gssetdev
  979. +     $(SHP)gssetdev att3b1 $(att3b1_)
  980. + gdev3b1.$(OBJ): gdev3b1.c
  981. + ###### --------------- Memory-buffered printer devices --------------- ######
  982. + # The dependency list for printers includes devs.mak because
  983. + # you can specify -DA4 to make A4 paper the default.
  984. + # See below under, e.g., gdevdjet.c.
  985. + PDEVH=$(GDEV) $(gdevprn_h) devs.mak
  986. + gdevprn.$(OBJ): gdevprn.c $(PDEVH) $(gp_h) $(gsprops_h)
  987. + ### ------------------- The Apple DMP printer device ------------------- ###
  988. + appledmp_=gdevadmp.$(OBJ) gdevprn.$(OBJ)
  989. + appledmp.dev: $(appledmp_) gssetdev
  990. +     $(SHP)gssetdev appledmp $(appledmp_)
  991. + ### ------------ The Canon BubbleJet BJ10e and BJ200 devices ------------ ###
  992. + bj10e_=gdevbj10.$(OBJ) gdevprn.$(OBJ)
  993. + bj10e.dev: $(bj10e_) gssetdev
  994. +     $(SHP)gssetdev bj10e $(bj10e_)
  995. + bj200.dev: $(bj10e_) gssetdev
  996. +     $(SHP)gssetdev bj200 $(bj10e_)
  997. + gdevbj10.$(OBJ): gdevbj10.c $(PDEVH)
  998. + ### -------------------------- The DigiFAX device ----------------------- ###
  999. + ###    This driver outputs images in a format suitable for use with       ###
  1000. + ###    DigiBoard, Inc.'s DigiFAX software.  Use -sDEVICE=dfaxhigh for     ###
  1001. + ###    high resolution output, -sDEVICE=dfaxlow for normal output.        ###
  1002. + ### Note: this driver was contributed by a user: please contact           ###
  1003. + ###       Rick Richardson (rick@digibd.com) if you have questions.        ###
  1004. + digifax_=gdevdfax.$(OBJ) gdevprn.$(OBJ)
  1005. + dfaxhigh.dev: $(digifax_) gssetdev
  1006. +     $(SHP)gssetdev dfaxhigh $(digifax_)
  1007. + dfaxlow.dev: $(digifax_) gssetdev
  1008. +     $(SHP)gssetdev dfaxlow $(digifax_)
  1009. + gdevdfax.$(OBJ): gdevdfax.c $(GDEV) $(gdevprn_h) gdevdfg3.h
  1010. + ### ----------- The H-P DeskJet and LaserJet printer devices ----------- ###
  1011. + ### These are essentially the same device.
  1012. + ### You can make A4 paper the default: see below.
  1013. + ### NOTE: printing at full resolution (300 DPI) requires a printer
  1014. + ###   with at least 1.5 Mb of memory.  150 DPI only requires .5 Mb.
  1015. + HPPCL=gdevprn.$(OBJ) gdevpcl.$(OBJ)
  1016. + HPMONO=gdevdjet.$(OBJ) $(HPPCL)
  1017. + gdevpcl.$(OBJ): gdevpcl.c $(PDEVH) $(gdevpcl_h)
  1018. + # To make A4 paper the default, change the second line below this to
  1019. + #    $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) -DA4 gdevdjet.c
  1020. + gdevdjet.$(OBJ): gdevdjet.c $(PDEVH) $(gdevpcl_h)
  1021. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/gdevdjet.c
  1022. + deskjet.dev: $(HPMONO) gssetdev
  1023. +     $(SHP)gssetdev deskjet $(HPMONO)
  1024. + djet500.dev: $(HPMONO) gssetdev
  1025. +     $(SHP)gssetdev djet500 $(HPMONO)
  1026. + laserjet.dev: $(HPMONO) gssetdev
  1027. +     $(SHP)gssetdev laserjet $(HPMONO)
  1028. + ljetplus.dev: $(HPMONO) gssetdev
  1029. +     $(SHP)gssetdev ljetplus $(HPMONO)
  1030. + ### Selecting ljet2p provides TIFF (mode 2) compression on LaserJet III,
  1031. + ### IIIp, IIId, IIIsi, IId, and IIp. 
  1032. + ljet2p.dev: $(HPMONO) gssetdev
  1033. +     $(SHP)gssetdev ljet2p $(HPMONO)
  1034. + ### Selecting ljet3 provides Delta Row (mode 3) compression on LaserJet III,
  1035. + ### IIIp, IIId, IIIsi.
  1036. + ljet3.dev: $(HPMONO) gssetdev
  1037. +     $(SHP)gssetdev ljet3 $(HPMONO)
  1038. + ### Selecting ljet4 also provides Delta Row compression on LaserJet IV series.
  1039. + ljet4.dev: $(HPMONO) gssetdev
  1040. +     $(SHP)gssetdev ljet4 $(HPMONO)
  1041. + ###- The H-P DeskJet 500C/550C and PaintJet family color printer devices -###
  1042. + ### Note: there are two different 500C drivers, both contributed by users.###
  1043. + ###   If you have questions about the djet500c driver,                    ###
  1044. + ###       please contact AKayser@et.tudelft.nl.                           ###
  1045. + ###   If you have questions about the cdj* drivers,                       ###
  1046. + ###       please contact g.cameron@biomed.abdn.ac.uk.                     ###
  1047. + cdeskjet_=gdevcdj.$(OBJ) $(HPPCL)
  1048. + cdeskjet.dev: $(cdeskjet_) gssetdev
  1049. +     $(SHP)gssetdev cdeskjet $(cdeskjet_)
  1050. + cdjcolor.dev: $(cdeskjet_) gssetdev
  1051. +     $(SHP)gssetdev cdjcolor $(cdeskjet_)
  1052. + cdjmono.dev: $(cdeskjet_) gssetdev
  1053. +     $(SHP)gssetdev cdjmono $(cdeskjet_)
  1054. + cdj500.dev: $(cdeskjet_) gssetdev
  1055. +     $(SHP)gssetdev cdj500 $(cdeskjet_)
  1056. + cdj550.dev: $(cdeskjet_) gssetdev
  1057. +     $(SHP)gssetdev cdj550 $(cdeskjet_)
  1058. + declj250.dev: $(cdeskjet_) gssetdev
  1059. +     $(SHP)gssetdev declj250 $(cdeskjet_)
  1060. + pj.dev: $(cdeskjet_) gssetdev
  1061. +     $(SHP)gssetdev pj $(cdeskjet_)
  1062. + pjxl.dev: $(cdeskjet_) gssetdev
  1063. +     $(SHP)gssetdev pjxl $(cdeskjet_)
  1064. + pjxl300.dev: $(cdeskjet_) gssetdev
  1065. +     $(SHP)gssetdev pjxl300 $(cdeskjet_)
  1066. + # NB: you can also customise the build if required, using -DA4 (for A4 paper)
  1067. + # and -DBitsPerPixel=<number> if you wish the default to be other than 24
  1068. + # for the generic drivers (cdj500, cdj550, pjxl300, pjtest, pjxltest).
  1069. + # E.g,. to make A4 paper the default, change the second line below this to
  1070. + #    $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) -DA4 gdevdjet.c
  1071. + gdevcdj.$(OBJ): gdevcdj.c $(PDEVH) $(gdevpcl_h)
  1072. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/gdevcdj.c
  1073. + djet500c_=gdevdjtc.$(OBJ) $(HPPCL)
  1074. + djet500c.dev: $(djet500c_) gssetdev
  1075. +     $(SHP)gssetdev djet500c $(djet500c_)
  1076. + gdevdjtc.$(OBJ): gdevdjtc.c $(PDEVH) $(gdevpcl_h)
  1077. + ### ----------------- The generic Epson printer device ----------------- ###
  1078. + epson_=gdevepsn.$(OBJ) gdevprn.$(OBJ)
  1079. + epson.dev: $(epson_) gssetdev
  1080. +     $(SHP)gssetdev epson $(epson_)
  1081. + eps9high.dev: $(epson_) gssetdev
  1082. +     $(SHP)gssetdev eps9high $(epson_)
  1083. + gdevepsn.$(OBJ): gdevepsn.c $(PDEVH)
  1084. + ### ----------------- The IBM Proprinter printer device ---------------- ###
  1085. + ibmpro.dev: $(epson_) gssetdev
  1086. +     $(SHP)gssetdev ibmpro $(epson_)
  1087. + ### -------------- The Epson LQ-2550 color printer device -------------- ###
  1088. + ### Note: this driver was contributed by users: please contact           ###
  1089. + ###       Dave St. Clair (dave@exlog.com) if you have questions.         ###
  1090. + epsonc_=gdevepsc.$(OBJ) gdevprn.$(OBJ)
  1091. + epsonc.dev: $(epsonc_) gssetdev
  1092. +     $(SHP)gssetdev epsonc $(epsonc_)
  1093. + gdevepsc.$(OBJ): gdevepsc.c $(PDEVH)
  1094. + ### -------------- The Epson ESC/P 2 language printer device ----------- ###
  1095. + ### Note: this driver was contributed by a user: if you have questions,  ###
  1096. + ###       please contact Richard Brown (rab@tauon.ph.unimelb.edu.au).    ###
  1097. + escp2_=gdevescp.$(OBJ) gdevprn.$(OBJ)
  1098. + escp2.dev: $(escp2_) gssetdev
  1099. +     $(SHP)gssetdev escp2 $(escp2_)
  1100. + gdevescp.$(OBJ): gdevescp.c $(PDEVH)
  1101. + ### ------------ The H-P PaintJet color printer device ----------------- ###
  1102. + ### Note: this driver also supports the DEC LJ250 color printer, which   ###
  1103. + ###       has a PaintJet-compatible mode, and the PaintJet XL.           ###
  1104. + ### If you have questions about the XL, please contact Rob Reiss         ###
  1105. + ###       (rob@moray.berkeley.edu).                                      ###
  1106. + PJET=gdevpjet.$(OBJ) $(HPPCL)
  1107. + gdevpjet.$(OBJ): gdevpjet.c $(PDEVH) $(gdevpcl_h)
  1108. + lj250.dev: $(PJET) gssetdev
  1109. +     $(SHP)gssetdev lj250 $(PJET)
  1110. + paintjet.dev: $(PJET) gssetdev
  1111. +     $(SHP)gssetdev paintjet $(PJET)
  1112. + pjetxl.dev: $(PJET) gssetdev
  1113. +     $(SHP)gssetdev pjetxl $(PJET)
  1114. + ### ------- The IBM 3852 JetPrinter color inkjet printer device -------- ###
  1115. + ### Note: this driver was contributed by users: please contact           ###
  1116. + ###       Kevin Gift (kgift@draper.com) if you have questions.           ###
  1117. + ### Note that the paper size that can be addressed by the graphics mode  ###
  1118. + ###   used in this driver is fixed at 7-1/2 inches wide (the printable   ###
  1119. + ###   width of the jetprinter itself.)                                   ###
  1120. + jetp3852_=gdev3852.$(OBJ) gdevprn.$(OBJ)
  1121. + jetp3852.dev: $(jetp3852_) gssetdev
  1122. +     $(SHP)gssetdev jetp3852 $(jetp3852_)
  1123. + gdevjetp.$(OBJ): gdevjetp.c $(PDEVH) $(gdevpcl_h)
  1124. + ### ----------------- The Canon LBP-8II printer device ----------------- ###
  1125. + ### Note: this driver was contributed by users: please contact           ###
  1126. + ###       Tom Quinn (trq@prg.oxford.ac.uk) if you have questions.        ###
  1127. + ### Note that the standard paper size for this driver is the European    ###
  1128. + ###   A4 size, not the American 8.5" x 11" size.                         ###
  1129. + lbp8_=gdevlbp8.$(OBJ) gdevprn.$(OBJ)
  1130. + lbp8.dev: $(lbp8_) gssetdev
  1131. +     $(SHP)gssetdev lbp8 $(lbp8_)
  1132. + gdevlbp8.$(OBJ): gdevlbp8.c $(PDEVH)
  1133. + ### -------------- The DEC LN03/LA50/LA75 printer devices -------------- ###
  1134. + ### Note: this driver was contributed by users: please contact           ###
  1135. + ###       Ulrich Mueller (ulm@vsnhd1.cern.ch) if you have questions.     ###
  1136. + ### For questions about LA50 and LA75: please contact                    ###
  1137. + ###       Ian MacPhedran (macphed@dvinci.USask.CA).                     ###
  1138. + ### For the LN03, you can make A4 paper the default: see below.          ###
  1139. + ln03_=gdevln03.$(OBJ) gdevprn.$(OBJ)
  1140. + ln03.dev: $(ln03_) gssetdev
  1141. +     $(SHP)gssetdev ln03 $(ln03_)
  1142. + la50.dev: $(ln03_) gssetdev
  1143. +     $(SHP)gssetdev la50 $(ln03_)
  1144. + la75.dev: $(ln03_) gssetdev
  1145. +     $(SHP)gssetdev la75 $(ln03_)
  1146. + # To make A4 paper the default, change the second line below this to
  1147. + #    $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) -DA4 gdevln03.c
  1148. + gdevln03.$(OBJ): gdevln03.c $(PDEVH)
  1149. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/gdevln03.c
  1150. + ### -------------- The C.Itoh M8510 printer device --------------------- ###
  1151. + ### Note: this driver was contributed by a user: please contact Bob      ###
  1152. + ###       Smith <bob@snuffy.penfield.ny.us> if you have questions.       ###
  1153. + m8510_=gdev8510.$(OBJ) gdevprn.$(OBJ)
  1154. + m8510.dev: $(m8510_) gssetdev
  1155. +     $(SHP)gssetdev m8510 $(m8510_)
  1156. + gdev8510.$(OBJ): gdev8510.c $(PDEVH)
  1157. + ### --------------------- The NEC P6 family devices -------------------- ###
  1158. + necp6_=gdevnp6.$(OBJ) gdevprn.$(OBJ)
  1159. + necp6.dev: $(necp6_) gssetdev
  1160. +     $(SHP)gssetdev necp6 $(necp6_)
  1161. + gdevnp6.$(OBJ): gdevnp6.c $(PDEVH)
  1162. + ### ----------------- The Okidata MicroLine 182 device ----------------- ###
  1163. + ### Note: this driver was contributed by a user: please contact          ###
  1164. + ###       Maarten Koning (smeg@bnr.ca) if you have questions.            ###
  1165. + oki182_=gdevo182.$(OBJ) gdevprn.$(OBJ)
  1166. + oki182.dev: $(oki182_) gssetdev
  1167. +     $(SHP)gssetdev oki182 $(oki182_)
  1168. + gdevo182.$(OBJ): gdevo182.c $(PDEVH)
  1169. + ### ------------- The Ricoh 4081 laser printer device ------------------ ###
  1170. + ### Note: this driver was contributed by users:                          ###
  1171. + ###       please contact kdw@oasis.icl.co.uk if you have questions.      ###
  1172. + r4081_=gdev4081.$(OBJ) gdevprn.$(OBJ)
  1173. + r4081.dev: $(r4081_) gssetdev
  1174. +     $(SHP)gssetdev r4081 $(r4081_)
  1175. + gdev4081.$(OBJ): gdev4081.c $(PDEVH)
  1176. + ###### ------------------------ Sony devices ------------------------ ######
  1177. + ### Note: these drivers were contributed by users: please contact        ###
  1178. + ###       Mike Smolenski (mike@intertech.com) if you have questions.     ###
  1179. + ### ------------------- Sony NeWS frame buffer device ------------------ ###
  1180. + sonyfb_=gdevsnfb.$(OBJ) gdevprn.$(OBJ)
  1181. + sonyfb.dev: $(sonyfb_) gssetdev
  1182. +     $(SHP)gssetdev sonyfb $(sonyfb_)
  1183. + gdevsnfb.$(OBJ): gdevsnfb.c $(PDEVH)
  1184. + ### -------------------- Sony NWP533 printer device -------------------- ###
  1185. + ### Note: this driver was contributed by a user: please contact Tero     ###
  1186. + ###       Kivinen (kivinen@joker.cs.hut.fi) if you have questions.       ###
  1187. + nwp533_=gdevn533.$(OBJ) gdevprn.$(OBJ)
  1188. + nwp533.dev: $(nwp533_) gssetdev
  1189. +     $(SHP)gssetdev nwp533 $(nwp533_)
  1190. + gdevn533.$(OBJ): gdevn533.c $(PDEVH)
  1191. + ### ------------------------- The SPARCprinter ------------------------- ###
  1192. + ### Note: this driver was contributed by users: please contact Martin    ###
  1193. + ###       Schulte (schulte@thp.uni-koeln.de) if you have questions.      ###
  1194. + ###       He would also like to hear from anyone using the driver.       ###
  1195. + ### Please consult the source code for additional documentation.         ###
  1196. + sparc_=gdevsppr.$(OBJ) gdevprn.$(OBJ)
  1197. + sparc.dev: $(sparc_) gssetdev
  1198. +     $(SHP)gssetdev sparc $(sparc_)
  1199. + gdevsppr.$(OBJ): gdevsppr.c $(PDEVH)
  1200. + ###### --------------------- The SunView device --------------------- ######
  1201. + ### Note: this driver is maintained by a user: if you have questions,    ###
  1202. + ###       please contact Andreas Stolcke (stolcke@icsi.berkeley.edu).    ###
  1203. + sunview_=gdevsun.$(OBJ)
  1204. + sunview.dev: $(sunview_) gssetdev gsaddmod
  1205. +     $(SHP)gssetdev sunview $(sunview_)
  1206. +     $(SHP)gsaddmod sunview -lib suntool sunwindow pixrect
  1207. + gdevsun.$(OBJ): gdevsun.c $(GDEV) $(arch_h)
  1208. + ### ----------------- Tektronix 4396d color printer -------------------- ###
  1209. + ### Note: this driver was contributed by a user: please contact          ###
  1210. + ###       Karl Hakimian (hakimian@haney.eecs.wsu.edu)                    ###
  1211. + ###       if you have questions.                                         ###
  1212. + t4693d_=gdev4693.$(OBJ) gdevprn.$(OBJ)
  1213. + t4693d2.dev: $(t4693d_) gssetdev
  1214. +     $(SHP)gssetdev t4693d2 $(t4693d_)
  1215. + t4693d4.dev: $(t4693d_) gssetdev
  1216. +     $(SHP)gssetdev t4693d4 $(t4693d_)
  1217. + t4693d8.dev: $(t4693d_) gssetdev
  1218. +     $(SHP)gssetdev t4693d8 $(t4693d_)
  1219. + gdev4693.$(OBJ): gdev4693.c $(GDEV)
  1220. + ### -------------------- Tektronix ink-jet printers -------------------- ###
  1221. + ### Note: this driver was contributed by a user: please contact          ###
  1222. + ###       Karsten Spang (spang@nbivax.nbi.dk) if you have questions.     ###
  1223. + tek4696_=gdevtknk.$(OBJ) gdevprn.$(OBJ)
  1224. + tek4696.dev: $(tek4696_) gssetdev
  1225. +     $(SHP)gssetdev tek4696 $(tek4696_)
  1226. + gdevtknk.$(OBJ): gdevtknk.c $(PDEVH)
  1227. + ### ----------------- The TruFax facsimile device ---------------------- ###
  1228. + ### Note: this driver was contributed by users: please contact           ###
  1229. + ###       Neil Ostroff (nao@maestro.bellcore.com) if you have questions. ###
  1230. + ### Note that the driver requires a file encode_l.o supplied by the      ###
  1231. + ###   makers of the TruFax product.                                      ###
  1232. + trufax_=gdevtrfx.$(OBJ) gdevprn.$(OBJ) encode_l.$(OBJ)
  1233. + trufax.dev: $(trufax_) gssetdev
  1234. +     $(SHP)gssetdev trufax $(trufax_)
  1235. + gdevtrfx.$(OBJ): gdevtrfx.c $(GDEV)
  1236. + ###### ----------------------- The X11 device ----------------------- ######
  1237. + # Aladdin Enterprises does not support Ghostview.  For more information
  1238. + # about Ghostview, please contact Tim Theisen (ghostview@cs.wisc.edu).
  1239. + x11_=gdevx.$(OBJ) gdevxini.$(OBJ) gdevxxf.$(OBJ) gdevemap.$(OBJ)
  1240. + x11.dev: $(x11_) gssetdev gsaddmod
  1241. +     $(SHP)gssetdev x11 $(x11_)
  1242. +     $(SHP)gsaddmod x11 -lib Xt X11 Xext
  1243. + # See the main makefile for the definition of XINCLUDE.
  1244. + GDEVX=$(GDEV) x_.h gdevx.h $(MAKEFILE)
  1245. + gdevx.$(OBJ): gdevx.c $(GDEVX) $(gsprops_h) $(gsutil_h)
  1246. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(XINCLUDE) $(srcdir)/gdevx.c
  1247. + gdevxini.$(OBJ): gdevxini.c $(GDEVX) $(ctype__h)
  1248. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(XINCLUDE) $(srcdir)/gdevxini.c
  1249. + gdevxxf.$(OBJ): gdevxxf.c $(GDEVX) $(gsutil_h) $(gxxfont_h)
  1250. +     $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(XINCLUDE) $(srcdir)/gdevxxf.c
  1251. + ### ---------------------- The bit bucket device ----------------------- ###
  1252. + bit_=gdevbit.$(OBJ) gdevprn.$(OBJ)
  1253. + bit.dev: $(bit_) gssetdev
  1254. +     $(SHP)gssetdev bit $(bit_)
  1255. + gdevbit.$(OBJ): gdevbit.c $(PDEVH)
  1256. + ###### ----------------------- PC file formats ---------------------- ######
  1257. + gdevpccm.$(OBJ): gdevpccm.c $(AK) \
  1258. +   $(gs_h) $(gsmatrix_h) $(gxdevice_h) $(gdevpccm_h)
  1259. + ### ------------------------- .BMP file formats ------------------------- ###
  1260. + bmp_=gdevbmp.$(OBJ) gdevpccm.$(OBJ) gdevprn.$(OBJ)
  1261. + gdevbmp.$(OBJ): gdevbmp.c $(PDEVH) $(gdevpccm_h)
  1262. + bmpmono.dev: $(bmp_) gssetdev
  1263. +     $(SHP)gssetdev bmpmono $(bmp_)
  1264. + bmp16.dev: $(bmp_) gssetdev
  1265. +     $(SHP)gssetdev bmp16 $(bmp_)
  1266. + bmp256.dev: $(bmp_) gssetdev
  1267. +     $(SHP)gssetdev bmp256 $(bmp_)
  1268. + bmp16m.dev: $(bmp_) gssetdev
  1269. +     $(SHP)gssetdev bmp16m $(bmp_)
  1270. + ### ------------------------- GIF file formats ------------------------- ###
  1271. + GIF=gdevgif.$(OBJ) gdevpccm.$(OBJ) gdevprn.$(OBJ)
  1272. + gdevgif.$(OBJ): gdevgif.c $(PDEVH) $(gdevpccm_h)
  1273. + gifmono.dev: $(GIF) gssetdev
  1274. +     $(SHP)gssetdev gifmono $(GIF)
  1275. + gif8.dev: $(GIF) gssetdev
  1276. +     $(SHP)gssetdev gif8 $(GIF)
  1277. + ### ------------------------- PCX file formats ------------------------- ###
  1278. + pcx_=gdevpcx.$(OBJ) gdevpccm.$(OBJ) gdevprn.$(OBJ)
  1279. + gdevpcx.$(OBJ): gdevpcx.c $(PDEVH) $(gdevpccm_h) $(gxlum_h)
  1280. + pcxmono.dev: $(pcx_) gssetdev
  1281. +     $(SHP)gssetdev pcxmono $(pcx_)
  1282. + pcxgray.dev: $(pcx_) gssetdev
  1283. +     $(SHP)gssetdev pcxgray $(pcx_)
  1284. + pcx16.dev: $(pcx_) gssetdev
  1285. +     $(SHP)gssetdev pcx16 $(pcx_)
  1286. + pcx256.dev: $(pcx_) gssetdev
  1287. +     $(SHP)gssetdev pcx256 $(pcx_)
  1288. + ###### ------------------- Portable Bitmap devices ------------------ ######
  1289. + ### For more information, see the pbm(5), pgm(5), and ppm(5) man pages.  ###
  1290. + pxm_=gdevpbm.$(OBJ) gdevprn.$(OBJ)
  1291. + gdevpbm.$(OBJ): gdevpbm.c $(PDEVH) $(gxlum_h)
  1292. + ### Portable Bitmap (PBM, plain or raw format, magic numbers "P1" or "P4")
  1293. + pbm.dev: $(pxm_) gssetdev
  1294. +     $(SHP)gssetdev pbm $(pxm_)
  1295. + pbmraw.dev: $(pxm_) gssetdev
  1296. +     $(SHP)gssetdev pbmraw $(pxm_)
  1297. + ### Portable Graymap (PGM, plain or raw format, magic numbers "P2" or "P5")
  1298. + pgm.dev: $(pxm_) gssetdev
  1299. +     $(SHP)gssetdev pgm $(pxm_)
  1300. + pgmraw.dev: $(pxm_) gssetdev
  1301. +     $(SHP)gssetdev pgmraw $(pxm_)
  1302. + ### Portable Pixmap (PPM, plain or raw format, magic numbers "P3" or "P6")
  1303. + ppm.dev: $(pxm_) gssetdev
  1304. +     $(SHP)gssetdev ppm $(pxm_)
  1305. + ppmraw.dev: $(pxm_) gssetdev
  1306. +     $(SHP)gssetdev ppmraw $(pxm_)
  1307. + ### -------------------------- TIFF/F device ---------------------------- ###
  1308. + ###    This driver outputs images in a TIFF format               ###
  1309. + ###    Use -sDEVICE=tiffg3 and                          ###
  1310. + ###      -r204x98 for low resolution output, or              ###
  1311. + ###      -r204x196 for high resolution output                  ###
  1312. + ###    Note also that 3 page sizes are understood: letter, A4, and B4      ###
  1313. + ### Note: this driver was contributed by a user: please contact           ###
  1314. + ###       Sam Leffler (sam@sgi.com) if you have questions.              ###
  1315. + tiffg3_=gdevtiff.$(OBJ) gdevprn.$(OBJ)
  1316. + tiffg3.dev: $(tiffg3_) gssetdev
  1317. +     $(SHP)gssetdev tiffg3 $(tiffg3_)
  1318. + gdevtiff.$(OBJ): gdevtiff.c $(GDEV) $(gdevprn_h) gdevdfg3.h gdevtiff.h
  1319. + #    Copyright (C) 1990, 1992, 1993 Aladdin Enterprises.  All rights reserved.
  1320. + #
  1321. + # This file is part of Ghostscript.
  1322. + #
  1323. + # Ghostscript is distributed in the hope that it will be useful, but
  1324. + # WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
  1325. + # to anyone for the consequences of using it or for whether it serves any
  1326. + # particular purpose or works at all, unless he says so in writing.  Refer
  1327. + # to the Ghostscript General Public License for full details.
  1328. + #
  1329. + # Everyone is granted permission to copy, modify and redistribute
  1330. + # Ghostscript, but only under the conditions described in the Ghostscript
  1331. + # General Public License.  A copy of this license is supposed to have been
  1332. + # given to you along with Ghostscript so you can know your rights and
  1333. + # responsibilities.  It should be in a file named COPYING.  Among other
  1334. + # things, the copyright notice and this notice must be preserved on all
  1335. + # copies.
  1336. + # Partial makefile for Ghostscript, common to all Unix configurations.
  1337. + # This is the last part of the makefile for Unix configurations.
  1338. + # Since Unix make doesn't have an 'include' facility, we concatenate
  1339. + # the various parts of the makefile together by brute force (in tar_cat).
  1340. + # The following prevents GNU make from constructing argument lists that
  1341. + # include all environment variables, which can easily be longer than
  1342. + # brain-damaged system V allows.
  1343. + .NOEXPORT:
  1344. + # -------------------------------- Library -------------------------------- #
  1345. + ## The Commodore Amiga
  1346. + amiga__=gp_nofb.$(OBJ) gp_amiga.$(OBJ) gdevpipe.$(OBJ)
  1347. + amiga_.dev: $(amiga__) gssetmod gsaddmod
  1348. +     $(SHP)gssetmod amiga_ $(amiga__)
  1349. +     $(SHP)gsaddmod amiga_ -fdev pipe
  1350. + gp_amiga.$(OBJ): gp_amiga.c $(AK) $(memory__h) $(string__h) $(gx_h) $(gp_h) \
  1351. + ## The Unix platforms
  1352. + # We have to include a test for the existence of sys/time.h,
  1353. + # because some System V platforms don't have it.
  1354. + # All reasonable Unix platforms.
  1355. + unix__=gp_nofb.$(OBJ) gp_unix.$(OBJ) gdevpipe.$(OBJ)
  1356. + unix_.dev: $(unix__) gssetmod gsaddmod
  1357. +     $(SHP)gssetmod unix_ $(unix__)
  1358. +     $(SHP)gsaddmod unix_ -fdev pipe
  1359. + gp_unix.$(OBJ): gp_unix.c $(AK) $(memory__h) $(string__h) $(gx_h) $(gp_h) \
  1360. +  $(gsutil_h) $(stat__h) $(time__h)
  1361. +     if ( test -f /gnu/include/sys/time.h ) then $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/gp_unix.c;\
  1362. +     else $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) -DNOSYSTIME $(srcdir)/gp_unix.c; fi
  1363. + gdevpipe.$(OBJ): gdevpipe.c $(AK) $(stdio__h) $(gstypes_h) \
  1364. +   $(filedev_h) $(stream_h)
  1365. + # Brain-damaged System V platforms.
  1366. + sysv__=gp_nofb.$(OBJ) gp_unix.$(OBJ) gp_sysv.$(OBJ)
  1367. + sysv_.dev: $(sysv__) gssetmod
  1368. +     $(SHP)gssetmod sysv_ $(sysv__)
  1369. + gp_sysv.$(OBJ): gp_sysv.c $(time__h) $(AK)
  1370. +     if ( test -f /gnu/include/sys/time.h ) then $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) $(srcdir)/gp_sysv.c;\
  1371. +     else $(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) -DNOSYSTIME $(srcdir)/gp_sysv.c; fi
  1372. + # -------------------------- Auxiliary programs --------------------------- #
  1373. + ansi2knr$(XE): ansi2knr.c $(stdio__h) $(string__h) $(malloc__h)
  1374. +     $(CC) -o ansi2knr$(XE) $(CFLAGS) $(srcdir)/ansi2knr.c
  1375. + echogs$(XE): echogs.c
  1376. +     $(CC) -o echogs$(XE) $(CFLAGS) $(srcdir)/echogs.c
  1377. + # On the RS/6000 (at least), compiling genarch.c with gcc with -O
  1378. + # produces a buggy executable.
  1379. + genarch$(XE): genarch.c
  1380. +     $(CC) -o genarch$(XE) $(srcdir)/genarch.c
  1381. + genconf$(XE): genconf.c
  1382. +     $(CC) -o genconf$(XE) $(srcdir)/genconf.c
  1383. + # ----------------------------- Main program ------------------------------ #
  1384. + BEGINFILES=
  1385. + CCBEGIN=$(CC) -c -I. -I$(srcdir) $(DEFS) $(CFLAGS) *.c
  1386. + # Interpreter main program
  1387. + GSAMIGA=gs.$(OBJ) gsmain.$(OBJ) $(INT) $(LIBGS)
  1388. + # The second call on echogs writes a \.  This is the only
  1389. + # way to do it that works with all flavors of shell!
  1390. + $(GS)$(XE): $(GSAMIGA) ld.tr echogs $(ALL_DEVS)
  1391. +     echogs -n - $(CC) $(LDFLAGS) $(XLIBDIRS) -o gs $(GSAMIGA) >_temp_
  1392. +     echogs -x 205c >>_temp_
  1393. +     cat ld.tr >>_temp_
  1394. +     echogs - $(EXTRALIBS) -lm >>_temp_
  1395. +     $(SH) <_temp_
  1396. + # Installation
  1397. + TAGS:
  1398. +     etags -t *.c *.h
  1399. + docdir=$(gsdatadir)/doc
  1400. + exdir=$(gsdatadir)/examples
  1401. + install: $(GS)
  1402. +     if [ -d $(bindir) ]; then true; else mkdir $(bindir); fi
  1403. +     if [ -d $(libdir) ]; then true; else mkdir $(libdir); fi
  1404. +     if [ -d $(gsdatadir) ]; then true; else mkdir $(gsdatadir); fi
  1405. +     if [ -d $(gsdatadir)/fonts ]; then true; else mkdir $(gsdatadir)/fonts; fi
  1406. +     if [ -d $(docdir) ]; then true; else mkdir $(docdir); fi
  1407. +     if [ -d $(exdir) ]; then true; else mkdir $(exdir); fi
  1408. +     for f in $(GS) ; do $(INSTALL_PROGRAM) $$f $(bindir)/$$f ; done
  1409. +     for f in gsbj gsdj gslj gslp gsnd bdftops font2c ps2ascii ps2epsi ; do $(INSTALL_PROGRAM) $(srcdir)/$$f $(bindir)/$$f ; done
  1410. +     for f in README gslp.ps gs_init.ps gs_dps1.ps gs_fonts.ps gs_lev2.ps gs_statd.ps gs_type0.ps gs_dbt_e.ps gs_sym_e.ps quit.ps Fontmap uglyr.gsf bdftops.ps decrypt.ps font2c.ps impath.ps landscap.ps level1.ps prfont.ps ps2ascii.ps ps2epsi.ps ps2image.ps pstoppm.ps showpage.ps type1ops.ps wrfont.ps ; do $(INSTALL_DATA) $(srcdir)/$$f $(gsdatadir)/$$f ; done
  1411. +     for f in NEWS ansi2knr.1 devices.doc drivers.doc fonts.doc gs.1 hershey.doc history.doc humor.doc language.doc lib.doc make.doc ps2epsi.doc psfiles.doc readme.doc use.doc xfonts.doc ; do $(INSTALL_DATA) $(srcdir)/$$f $(docdir)/$$f ; done
  1412. +     for f in chess.ps cheq.ps colorcir.ps golfer.ps escher.ps snowflak.ps tiger.ps ; do $(INSTALL_DATA) $(srcdir)/$$f $(exdir)/$$f ; done
  1413. + Makefile:    config.status $(srcdir)/Makefile.in
  1414. +         $(SHELL) config.status
  1415. diff -rc --new-file /src/baseline/gs-2.6.1.4/NEWS gs-2.6.1.4/NEWS
  1416. *** /src/baseline/gs-2.6.1.4/NEWS    Sat May 29 03:40:14 1993
  1417. --- gs-2.6.1.4/NEWS    Tue Feb 22 13:48:22 1994
  1418. ***************
  1419. *** 1062,1068 ****
  1420.   
  1421.   For Unix systems, changes the directories in GS_LIB_DEFAULT from
  1422.   `pwd` to $(gsdatadir), i.e., normally $(datadir)/ghostscript, where
  1423. ! datadir is normally /usr/local/lib.
  1424.   
  1425.   Adds a note in the header file to the effect that the X Windows
  1426.   driver expects to find header files in $(XINCLUDE)/X11, not in
  1427. --- 1062,1068 ----
  1428.   
  1429.   For Unix systems, changes the directories in GS_LIB_DEFAULT from
  1430.   `pwd` to $(gsdatadir), i.e., normally $(datadir)/ghostscript, where
  1431. ! datadir is normally /gnu/lib.
  1432.   
  1433.   Adds a note in the header file to the effect that the X Windows
  1434.   driver expects to find header files in $(XINCLUDE)/X11, not in
  1435. diff -rc --new-file /src/baseline/gs-2.6.1.4/Product-Info gs-2.6.1.4/Product-Info
  1436. *** /src/baseline/gs-2.6.1.4/Product-Info    Thu Jan  1 00:00:00 1970
  1437. --- gs-2.6.1.4/Product-Info    Tue Jul 12 17:24:11 1994
  1438. ***************
  1439. *** 0 ****
  1440. --- 1,26 ----
  1441. + .name
  1442. + ghostscript
  1443. + .fullname
  1444. + Ghostscript language interpreter and library
  1445. + .type
  1446. + Miscellaneous
  1447. + .short
  1448. + GNU postscript interpreter
  1449. + .description
  1450. + Ghostscript is the name of a set of software that provides an
  1451. + interpreter for the PostScript (TM) language, and a set of C
  1452. + procedures (the Ghostscript library) that implement the graphics
  1453. + capabilities that appear as primitive operations in the PostScript
  1454. + language.
  1455. + .version
  1456. + 2.6.1.4
  1457. + .author
  1458. + L. Peter Deutsch
  1459. + .requirements
  1460. + Amiga binaries require ixemul.library.
  1461. + .distribution
  1462. + Ghostscript General Public License
  1463. + .email
  1464. + ghost@aladdin.com
  1465. + .described-by
  1466. + Fred Fish (fnf@amigalib.com)
  1467. diff -rc --new-file /src/baseline/gs-2.6.1.4/amiga-gcc.mak gs-2.6.1.4/amiga-gcc.mak
  1468. *** /src/baseline/gs-2.6.1.4/amiga-gcc.mak    Thu Jan  1 00:00:00 1970
  1469. --- gs-2.6.1.4/amiga-gcc.mak    Tue Feb 22 14:57:45 1994
  1470. ***************
  1471. *** 0 ****
  1472. --- 1,2010 ----
  1473. + #    Copyright (C) 1989, 1992, 1993 Aladdin Enterprises.  All rights reserved.
  1474. + #
  1475. + # This file is part of Ghostscript.
  1476. + #
  1477. + # Ghostscript is distributed in the hope that it will be useful, but
  1478. + # WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
  1479. + # to anyone for the consequences of using it or for whether it serves any
  1480. + # particular purpose or works at all, unless he says so in writing.  Refer
  1481. + # to the Ghostscript General Public License for full details.
  1482. + #
  1483. + # Everyone is granted permission to copy, modify and redistribute
  1484. + # Ghostscript, but only under the conditions described in the Ghostscript
  1485. + # General Public License.  A copy of this license is supposed to have been
  1486. + # given to you along with Ghostscript so you can know your rights and
  1487. + # responsibilities.  It should be in a file named COPYING.  Among other
  1488. + # things, the copyright notice and this notice must be preserved on all
  1489. + # copies.
  1490. + # makefile for Ghostscript, Unix/gcc/X11 configuration.
  1491. + # Note: this makefile assumes you are using gcc in ANSI mode.
  1492. + # ------------------------------- Options ------------------------------- #
  1493. + ####### The following are the only parts of the file you should need to edit.
  1494. + # ------ Generic options ------ #
  1495. + # Define the installation commands and target directories for
  1496. + # executables and files.  Only relevant to `make install'.
  1497. + INSTALL = install -c
  1498. + INSTALL_PROGRAM = $(INSTALL) -m 775
  1499. + INSTALL_DATA = $(INSTALL) -m 664
  1500. + prefix = /gnu
  1501. + exec_prefix = $(prefix)
  1502. + bindir = $(exec_prefix)/bin
  1503. + datadir = $(prefix)/lib
  1504. + gsdatadir = $(datadir)/ghostscript
  1505. + # Define the default directory/ies for the runtime
  1506. + # initialization and font files.  Separate multiple directories with a ','.
  1507. + GS_LIB_DEFAULT=$(gsdatadir),$(gsdatadir)/fonts
  1508. + # Define the name of the Ghostscript initialization file.
  1509. + # (There is no reason to change this.)
  1510. + GS_INIT=gs_init.ps
  1511. + # Choose generic configuration options.
  1512. + # -DDEBUG
  1513. + #    includes debugging features (-Z switch) in the code.
  1514. + #      Code runs substantially slower even if no debugging switches
  1515. + #      are set.
  1516. + # -DNOPRIVATE
  1517. + #    makes private (static) procedures and variables public,
  1518. + #      so they are visible to the debugger and profiler.
  1519. + #      No execution time or space penalty.
  1520. + GENOPT=
  1521. + # Define the name of the executable file.
  1522. + GS=gs
  1523. + # ------ Platform-specific options ------ #
  1524. + # Define the name of the C compiler.
  1525. + CC=gcc
  1526. + # Define the other compilation flags.
  1527. + # Add -DBSD4_2 for 4.2bsd systems.
  1528. + # Add -DUSG (GNU convention) or -DSYSV for System V or DG/UX.
  1529. + # Add -DSYSV -D__SVR3 for SCO ODT, ISC Unix 2.2 or before,
  1530. + #   or any System III Unix, or System V release 3-or-older Unix.
  1531. + # Add -DSVR4 (not -DSYSV) for System V release 4.
  1532. + # XCFLAGS can be set from the command line.
  1533. + # We don't include -ansi, because this gets in the way of the platform-
  1534. + #   specific stuff that <math.h> typically needs; nevertheless, we expect
  1535. + #   gcc to accept ANSI-style function prototypes and function definitions.
  1536. + #FPU_FLAG =-Dm68881
  1537. + #CPU_FLAG =-Dm68030
  1538. + XCFLAGS = -O6 $(FPU_FLAG) $(CPU_FLAG)
  1539. + CFLAGS=-DUSG $(XCFLAGS)
  1540. + # Define platform flags for ld.
  1541. + # SunOS and some others want -X; Ultrix wants -x.
  1542. + # SunOS 4.n may need -Bstatic.
  1543. + # XLDFLAGS can be set from the command line.
  1544. + LDFLAGS=$(XLDFLAGS)
  1545. + # Define any extra libraries to link into the executable.
  1546. + # ISC Unix 2.2 wants -linet.
  1547. + # SCO Unix needs -lsocket if you aren't including the X11 driver.
  1548. + # (Libraries required by individual drivers are handled automatically.)
  1549. + EXTRALIBS=
  1550. + # Define the include switch(es) for the X11 header files.
  1551. + # This can be null if handled in some other way (e.g., the files are
  1552. + # in /gnu/include, or the directory is supplied by an environment variable).
  1553. + # Note that x_.h expects to find the header files in $(XINCLUDE)/X11,
  1554. + # not in $(XINCLUDE).
  1555. + #XINCLUDE=-I/gnu/X/include
  1556. + # Define the directory/ies for the X11 library files.
  1557. + # This can be null if these files are in the default linker search path.
  1558. + #XLIBDIRS=-L/gnu/X/lib
  1559. + # ------ Devices and features ------ #
  1560. + # Choose the language feature(s) to include.  See gs.mak for details.
  1561. + FEATURE_DEVS=filter.dev dps.dev level2.dev
  1562. + # Choose the device(s) to include.  See devs.mak for details.
  1563. + DEVICE_DEVS=amiga_.dev amiga.dev amiga_low.dev amiga_high.dev amiga_super.dev
  1564. + DEVICE_DEVS1=amiga_a2024.dev amiga_picassoii.dev amiga_printer.dev
  1565. + DEVICE_DEVS2=amiga_ilbm.dev amiga_custom.dev
  1566. + # ---------------------------- End of options --------------------------- #
  1567. + # Define the name of the makefile -- used in dependencies.
  1568. + MAKEFILE=amiga-gcc.mak
  1569. + # Define the ANSI-to-K&R dependency.  (gcc accepts ANSI syntax.)
  1570. + AK=
  1571. + # Define the compilation rules and flags.
  1572. + CCC=$(CC) $(CCFLAGS) -c
  1573. + # --------------------------- Generic makefile ---------------------------- #
  1574. + # The remainder of the makefile (unixhead.mak, gs.mak, devs.mak, unixtail.mak)
  1575. + # is generic.  tar_cat concatenates all these together.
  1576. + #    Copyright (C) 1990, 1991, 1993 Aladdin Enterprises.  All rights reserved.
  1577. + #
  1578. + # This file is part of Ghostscript.
  1579. + #
  1580. + # Ghostscript is distributed in the hope that it will be useful, but
  1581. + # WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
  1582. + # to anyone for the consequences of using it or for whether it serves any
  1583. + # particular purpose or works at all, unless he says so in writing.  Refer
  1584. + # to the Ghostscript General Public License for full details.
  1585. + #
  1586. + # Everyone is granted permission to copy, modify and redistribute
  1587. + # Ghostscript, but only under the conditions described in the Ghostscript
  1588. + # General Public License.  A copy of this license is supposed to have been
  1589. + # given to you along with Ghostscript so you can know your rights and
  1590. + # responsibilities.  It should be in a file named COPYING.  Among other
  1591. + # things, the copyright notice and this notice must be preserved on all
  1592. + # copies.
  1593. + # Partial makefile for Ghostscript, common to all Unix configurations.
  1594. + # This part of the makefile gets inserted after the compiler-specific part
  1595. + # (xxx-head.mak) and before gs.mak and devs.mak.
  1596. + # ----------------------------- Generic stuff ----------------------------- #
  1597. + # Define the platform name.  For a "stock" System V platform,
  1598. + # use sysv_ instead of unix_.
  1599. + PLATFORM=amiga
  1600. + # Define the extensions for the object and executable files.
  1601. + OBJ=o
  1602. + XE=
  1603. + # Define the current directory prefix, shell quote string, and shell names.
  1604. + EXP=
  1605. + QQ=\"
  1606. + SHELL=/bin/sh
  1607. + SH=$(SHELL)
  1608. + SHP=$(SH) $(EXP)
  1609. + # Define the compilation rules and flags.
  1610. + CCFLAGS=$(GENOPT) $(CFLAGS)
  1611. + .c.o: $(AK)
  1612. +     $(CCC) $*.c
  1613. + CCCF=$(CCC)
  1614. + CCD=$(CCC)
  1615. + CCINT=$(CCC)
  1616. + #    Copyright (C) 1989, 1992, 1993 Aladdin Enterprises.  All rights reserved.
  1617. + #
  1618. + # This file is part of Ghostscript.
  1619. + #
  1620. + # Ghostscript is distributed in the hope that it will be useful, but
  1621. + # WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
  1622. + # to anyone for the consequences of using it or for whether it serves any
  1623. + # particular purpose or works at all, unless he says so in writing.  Refer
  1624. + # to the Ghostscript General Public License for full details.
  1625. + #
  1626. + # Everyone is granted permission to copy, modify and redistribute
  1627. + # Ghostscript, but only under the conditions described in the Ghostscript
  1628. + # General Public License.  A copy of this license is supposed to have been
  1629. + # given to you along with Ghostscript so you can know your rights and
  1630. + # responsibilities.  It should be in a file named COPYING.  Among other
  1631. + # things, the copyright notice and this notice must be preserved on all
  1632. + # copies.
  1633. + # Generic makefile for Ghostscript.
  1634. + # The platform-specific makefiles `include' this file.
  1635. + # They define the following symbols:
  1636. + #    GS - the name of the executable (without the extension, if any).
  1637. + #    GS_LIB_DEFAULT - the default directory/ies for searching for the
  1638. + #        initialization and font files at run time.
  1639. + #    DEVICE_DEVS - the devices to include in the executable.
  1640. + #        See devs.mak for details.
  1641. + #    DEVICE_DEVS1...DEVICE_DEVS9 - additional devices, if the definition of
  1642. + #        DEVICE_DEVS doesn't fit on one line.
  1643. + #        See devs.mak for details.
  1644. + #    FEATURE_DEVS - the optional features to include in the
  1645. + #        executable.  Current features are:
  1646. + #            dps - (partial) support for Display PostScript extensions:
  1647. + #            see language.doc for details.
  1648. + #            level2 - (partial) support for PostScript Level 2
  1649. + #            extensions: see language.doc for details.
  1650. + #            compfont - support for composite (type 0) fonts.
  1651. + #            *** NOT IMPLEMENTED YET. ***
  1652. + #            filter - support for Level 2 filters (other than eexec,
  1653. + #            ASCIIHexEncode/Decode, NullEncode, PFBDecode,
  1654. + #            and SubFileDecode, which are always included).
  1655. + #            ccfonts - precompile fonts into C, and link them
  1656. + #            with the executable.  In the standard makefiles,
  1657. + #            this is only implemented for a very few fonts:
  1658. + #            see fonts.doc for details.
  1659. + # It is very unlikely that anyone would want to edit the remaining
  1660. + #   symbols, but we describe them here for completeness:
  1661. + #    GS_INIT - the name of the initialization file for Ghostscript,
  1662. + #        normally gs_init.ps.
  1663. + #    PLATFORM - a "device" name for the platform, so that platforms can
  1664. + #        add various kinds of resources like devices and features.
  1665. + #    QQ - a " preceded by whatever escape characters are needed to
  1666. + #        persuade the shell to pass a " to a program (" on MS-DOS,
  1667. + #        \" on Unix).
  1668. + #    XE - the extension for executable files (e.g., null or .exe).
  1669. + #    OBJ - the extension for relocatable object files (e.g., o or obj).
  1670. + #    BEGINFILES - the list of files that `make begin' should delete.
  1671. + #    CCBEGIN - the compilation command for `make begin', normally
  1672. + #        $(CCC) *.c.
  1673. + #    CCC - the C invocation for normal compilation.
  1674. + #    CCD - the C invocation for files that store into frame buffers or
  1675. + #        device registers.  Needed because some optimizing compilers
  1676. + #        will eliminate necessary stores.
  1677. + #    CCCF - the C invocation for compiled fonts and other large,
  1678. + #        self-contained data modules.  Needed because MS-DOS
  1679. + #        requires using the 'huge' memory model for these.
  1680. + #    CCINT - the C invocation for compiling the main interpreter module,
  1681. + #        normally the same as CCC: this is needed because the
  1682. + #        Borland compiler generates *worse* code for this module
  1683. + #        (but only this module) when optimization (-O) is turned on.
  1684. + #    AK - if source files must be converted from ANSI to K&R syntax,
  1685. + #        this is ansi2knr$(XE); if not, it is null.
  1686. + #        If a particular platform requires other utility programs
  1687. + #        to be built, AK must include them too.
  1688. + #    SHP - the prefix for invoking a shell script in the current directory
  1689. + #        (null for MS-DOS, $(SH) ./ for Unix).
  1690. + #    EXPP, EXP - the prefix for invoking an executable program in the
  1691. + #        current directory (null for MS-DOS, ./ for Unix).
  1692. + #    SH - the shell for scripts (null on MS-DOS, sh on Unix).
  1693. + # The platform-specific makefiles must also include rules for creating
  1694. + #   ansi2knr$(XE), genarch$(XE), and genconf$(XE) from the corresponding
  1695. + #   .c files -- this is needed because Turbo C and Unix C treat the -o
  1696. + #   switch slightly differently (Turbo C requires no following space,
  1697. + #   Unix C requires a following space), and I haven't found a way to capture
  1698. + #   the difference in a macro.
  1699. + all default: $(GS)$(XE)
  1700. + distclean realclean: clean
  1701. +     rm -f makefile
  1702. + clean mostlyclean:
  1703. +     rm -f *.$(OBJ) *.a core gmon.out
  1704. +     rm -f *.dev *.d_* arch.h gconfig*.h o*.tr l*.tr
  1705. +     rm -f t _temp_* _temp_*.* *.map *.sym
  1706. +     rm -f ansi2knr$(XE) echogs$(XE) genarch$(XE) genconf$(XE)
  1707. +     rm -f $(GS)$(XE) $(BEGINFILES)
  1708. + # A rule to do a quick and dirty compilation attempt when first installing
  1709. + # Ghostscript.  Many of the compilations will fail: follow this with 'make'.
  1710. + begin:
  1711. +     rm -f arch.h genarch$(XE) $(GS)$(XE) $(BEGINFILES)
  1712. +     make arch.h
  1713. +     - $(CCBEGIN)
  1714. +     rm -f gconfig.$(OBJ) gdev*.$(OBJ) gp_*.$(OBJ) gsmisc.$(OBJ)
  1715. +     rm -f iccfont.$(OBJ) iinit.$(OBJ) interp.$(OBJ) zfiledev.$(OBJ)
  1716. + # Auxiliary programs
  1717. + arch.h: genarch$(XE)
  1718. +     $(EXPP) $(EXP)genarch arch.h
  1719. + # -------------------------------- Library -------------------------------- #
  1720. + # Define the inter-dependencies of the .h files.
  1721. + # Since not all versions of `make' defer expansion of macros,
  1722. + # we must list these in bottom-to-top order.
  1723. + # Generic files
  1724. + arch_h=arch.h
  1725. + std_h=std.h $(arch_h)
  1726. + # Platform interfaces
  1727. + gp_h=gp.h
  1728. + gpcheck_h=gpcheck.h
  1729. + # C library interfaces
  1730. + # Because of variations in the "standard" header files between systems, and
  1731. + # because we must include std.h before any file that includes sys/types.h,
  1732. + # we define local include files named *_.h to substitute for <*.h>.
  1733. + vmsmath_h=vmsmath.h
  1734. + dos__h=dos_.h
  1735. + ctype__h=ctype_.h $(std_h)
  1736. + errno__h=errno_.h
  1737. + malloc__h=malloc_.h $(std_h)
  1738. + math__h=math_.h $(std_h) $(vmsmath_h)
  1739. + memory__h=memory_.h $(std_h)
  1740. + stat__h=stat_.h $(std_h)
  1741. + stdio__h=stdio_.h $(std_h)
  1742. + string__h=string_.h $(std_h)
  1743. + time__h=time_.h $(std_h)
  1744. + windows__h=windows_.h
  1745. + # Miscellaneous
  1746. + gdebug_h=gdebug.h
  1747. + gsio_h=gsio.h
  1748. + gstypes_h=gstypes.h
  1749. + gs_h=gs.h $(stdio__h) $(gsio_h) $(gstypes_h)
  1750. + gx_h=gx.h $(gs_h) $(gdebug_h)
  1751. + gconfig_h=gconfig.h gsconfig.h
  1752. + gserrors_h=gserrors.h
  1753. + GX=$(AK) $(gx_h)
  1754. + GXERR=$(GX) $(gserrors_h)
  1755. + ###### Low-level facilities and utilities
  1756. + ### Include files
  1757. + gsccode_h=gsccode.h
  1758. + gschar_h=gschar.h $(gsccode_h)
  1759. + gscie_h=gscie.h
  1760. + gscolor_h=gscolor.h
  1761. + gscolor2_h=gscolor2.h
  1762. + gscoord_h=gscoord.h
  1763. + gscrypt1_h=gscrypt1.h
  1764. + gscspace_h=gscspace.h
  1765. + gsfont_h=gsfont.h
  1766. + gsimage_h=gsimage.h
  1767. + gsmatrix_h=gsmatrix.h
  1768. + gspaint_h=gspaint.h
  1769. + gspath_h=gspath.h
  1770. + gsprops_h=gsprops.h
  1771. + gsstate_h=gsstate.h $(gscolor_h)
  1772. + gstype1_h=gstype1.h
  1773. + gsuid_h=gsuid.h
  1774. + gsutil_h=gsutil.h
  1775. + gsxfont_h=gsxfont.h
  1776. + gxarith_h=gxarith.h
  1777. + gxbitmap_h=gxbitmap.h
  1778. + gxcache_h=gxcache.h $(gsuid_h) $(gsxfont_h)
  1779. + gxcdir_h=gxcdir.h
  1780. + gxchar_h=gxchar.h $(gschar_h)
  1781. + gxclist_h=gxclist.h
  1782. + # gxcldev is out of order because it include gxclist.
  1783. + gxcldev_h=gxcldev.h $(gxclist_h)
  1784. + gxcpath_h=gxcpath.h
  1785. + gxdevice_h=gxdevice.h $(gsmatrix_h) $(gsxfont_h) $(gxbitmap_h)
  1786. + gxdevmem_h=gxdevmem.h
  1787. + gxfdir_h=gxfdir.h $(gxcdir_h)
  1788. + gxfixed_h=gxfixed.h
  1789. + gxfont_h=gxfont.h $(gsfont_h) $(gsuid_h)
  1790. + gxfrac_h=gxfrac.h
  1791. + gximage_h=gximage.h $(gscspace_h) $(gsimage_h)
  1792. + gxlum_h=gxlum.h
  1793. + gxmatrix_h=gxmatrix.h $(gsmatrix_h)
  1794. + gxop1_h=gxop1.h
  1795. + gxpath_h=gxpath.h
  1796. + gxrefct_h=gxrefct.h
  1797. + gxtype1_h=gxtype1.h $(gscrypt1_h) $(gstype1_h)
  1798. + gxxfont_h=gxxfont.h $(gsccode_h) $(gsmatrix_h) $(gsuid_h) $(gsxfont_h)
  1799. + # gxcolor and gxfmap are out of order because they include other files.
  1800. + gxcolor_h=gxcolor.h $(gxfrac_h) $(gsuid_h)
  1801. + gxfmap_h=gxfmap.h $(gxfrac_h) $(gxrefct_h)
  1802. + gzcolor_h=gzcolor.h $(gscolor_h) $(gxfmap_h) $(gxlum_h)
  1803. + gzdevice_h=gzdevice.h $(gxdevice_h)
  1804. + gzht_h=gzht.h
  1805. + gzline_h=gzline.h
  1806. + gzpath_h=gzpath.h $(gxpath_h)
  1807. + gzstate_h=gzstate.h $(gsstate_h) $(gxfixed_h) $(gxmatrix_h)
  1808. + ### Executable code
  1809. + gp_nofb.$(OBJ): gp_nofb.c $(AK) \
  1810. +   $(gx_h) $(gp_h) $(gxdevice_h)
  1811. + gsutil.$(OBJ): gsutil.c $(AK) \
  1812. +   $(std_h) $(gsprops_h) $(gsutil_h)
  1813. + gxccache.$(OBJ): gxccache.c $(GXERR) $(gpcheck_h) \
  1814. +   $(gxfixed_h) $(gxmatrix_h) $(gzdevice_h) $(gzcolor_h) \
  1815. +   $(gxcpath_h) $(gxdevmem_h) $(gxfont_h) $(gxfdir_h) $(gxchar_h) \
  1816. +   $(gxcache_h) $(gxxfont_h) $(gzstate_h) $(gzpath_h) \
  1817. +   $(gscspace_h) $(gsimage_h)
  1818. + gxccman.$(OBJ): gxccman.c $(GXERR) $(gpcheck_h) \
  1819. +   $(gxfixed_h) $(gxmatrix_h) $(gzdevice_h) $(gzcolor_h) \
  1820. +   $(gxcpath_h) $(gxdevmem_h) $(gxfont_h) $(gxfdir_h) $(gxchar_h) \
  1821. +   $(gxcache_h) $(gxxfont_h) $(gzstate_h) $(gzpath_h)
  1822. + gxclist.$(OBJ): gxclist.c $(GXERR) $(gpcheck_h) \
  1823. +   $(gsmatrix_h) $(gxbitmap_h) $(gxcldev_h) $(gxdevice_h) $(gxdevmem_h)
  1824. + gxclread.$(OBJ): gxclread.c $(GXERR) $(gpcheck_h) \
  1825. +   $(gsmatrix_h) $(gxbitmap_h) $(gxcldev_h) $(gxdevice_h) $(gxdevmem_h)
  1826. + gxcmap.$(OBJ): gxcmap.c $(GXERR) \
  1827. +   $(gscspace_h) \
  1828. +   $(gxcolor_h) $(gxdevice_h) $(gxfrac_h) $(gxlum_h) \
  1829. +   $(gzcolor_h) $(gzstate_h)
  1830. + gxcpath.$(OBJ): gxcpath.c $(GXERR) \
  1831. +   $(gxdevice_h) $(gxfixed_h) $(gzcolor_h) $(gzpath_h) $(gxcpath_h)
  1832. + gxdither.$(OBJ): gxdither.c $(GX) \
  1833. +   $(gxfixed_h) $(gxlum_h) $(gxmatrix_h) $(gzstate_h) $(gzdevice_h) $(gzcolor_h) $(gzht_h)
  1834. + gxdraw.$(OBJ): gxdraw.c $(GXERR) $(gpcheck_h) \
  1835. +   $(gxfixed_h) $(gxmatrix_h) $(gxbitmap_h) $(gzcolor_h) $(gzdevice_h) $(gzstate_h)
  1836. + gxfill.$(OBJ): gxfill.c $(GXERR) \
  1837. +   $(gxfixed_h) $(gxmatrix_h) $(gxdevice_h) $(gzcolor_h) $(gzpath_h) $(gzstate_h) $(gxcpath_h)
  1838. + gxhint1.$(OBJ): gxhint1.c $(GXERR) \
  1839. +   $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) $(gxdevmem_h) $(gxchar_h) $(gxfont_h) $(gxtype1_h) \
  1840. +   $(gzdevice_h) $(gzstate_h)
  1841. + gxhint2.$(OBJ): gxhint2.c $(GXERR) \
  1842. +   $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) $(gxdevmem_h) $(gxchar_h) $(gxfont_h) $(gxtype1_h) $(gxop1_h) \
  1843. +   $(gzdevice_h) $(gzstate_h)
  1844. + gxht.$(OBJ): gxht.c $(GXERR) \
  1845. +   $(gxfixed_h) $(gxmatrix_h) $(gxbitmap_h) $(gzstate_h) $(gzcolor_h) $(gzdevice_h) $(gzht_h)
  1846. + gxpath.$(OBJ): gxpath.c $(GXERR) \
  1847. +   $(gxfixed_h) $(gzpath_h)
  1848. + gxpath2.$(OBJ): gxpath2.c $(GXERR) \
  1849. +   $(gxfixed_h) $(gxarith_h) $(gzpath_h)
  1850. + gxpcopy.$(OBJ): gxpcopy.c $(GXERR) \
  1851. +   $(gxfixed_h) $(gxarith_h) $(gzpath_h)
  1852. + gxstroke.$(OBJ): gxstroke.c $(GXERR) $(gpcheck_h) \
  1853. +   $(gscoord_h) $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) \
  1854. +   $(gzstate_h) $(gzcolor_h) $(gzdevice_h) $(gzline_h) $(gzpath_h)
  1855. + ###### High-level facilities
  1856. + gschar.$(OBJ): gschar.c $(GXERR) \
  1857. +   $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) $(gzdevice_h) $(gxdevmem_h) $(gxfont_h) $(gxchar_h) $(gxcache_h) $(gstype1_h) $(gspath_h) $(gzpath_h) $(gzcolor_h) $(gzstate_h)
  1858. + gscolor.$(OBJ): gscolor.c $(GXERR) \
  1859. +   $(gscspace_h) $(gxcolor_h) $(gxdevice_h) $(gxrefct_h) \
  1860. +   $(gzstate_h) $(gzcolor_h)
  1861. + gscoord.$(OBJ): gscoord.c $(GXERR) \
  1862. +   $(gsccode_h) $(gxarith_h) $(gxfixed_h) $(gxfont_h) $(gxmatrix_h) \
  1863. +   $(gzdevice_h) $(gzstate_h) $(gscoord_h)
  1864. + gsdevice.$(OBJ): gsdevice.c $(GXERR) \
  1865. +   $(gxarith_h) $(gsprops_h) $(gsutil_h) $(gxbitmap_h) $(gxdevmem_h) \
  1866. +   $(gzstate_h) $(gzdevice_h)
  1867. + gsfile.$(OBJ): gsfile.c $(GXERR) \
  1868. +   $(gsmatrix_h) $(gxdevice_h) $(gxdevmem_h)
  1869. + gsfont.$(OBJ): gsfont.c $(GXERR) \
  1870. +   $(gxdevice_h) $(gxfixed_h) $(gxmatrix_h) $(gxfont_h) $(gxfdir_h) \
  1871. +   $(gzstate_h)
  1872. + gsht.$(OBJ): gsht.c $(GXERR) \
  1873. +   $(gzht_h) $(gzstate_h)
  1874. + gsimage.$(OBJ): gsimage.c $(GXERR) $(gpcheck_h) \
  1875. +   $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) $(gspaint_h) \
  1876. +   $(gzcolor_h) $(gzdevice_h) $(gzpath_h) $(gzstate_h) \
  1877. +   $(gxcolor_h) $(gxcpath_h) $(gxdevmem_h) $(gximage_h)
  1878. + gsimage1.$(OBJ): gsimage1.c $(GXERR) $(gpcheck_h) \
  1879. +   $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) $(gscspace_h) $(gspaint_h) \
  1880. +   $(gzcolor_h) $(gzdevice_h) $(gzpath_h) $(gzstate_h) \
  1881. +   $(gxcolor_h) $(gxcpath_h) $(gxdevmem_h) $(gximage_h)
  1882. + gsimage2.$(OBJ): gsimage2.c $(GXERR) $(gpcheck_h) \
  1883. +   $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) $(gscspace_h) $(gspaint_h) \
  1884. +   $(gzcolor_h) $(gzdevice_h) $(gzpath_h) $(gzstate_h) \
  1885. +   $(gxcolor_h) $(gxcpath_h) $(gxdevmem_h) $(gximage_h)
  1886. + gsimpath.$(OBJ): gsimpath.c $(GXERR) \
  1887. +   $(gsmatrix_h) $(gsstate_h) $(gspath_h)
  1888. + gsline.$(OBJ): gsline.c $(GXERR) \
  1889. +   $(gxfixed_h) $(gxmatrix_h) $(gzstate_h) $(gzline_h)
  1890. + gsmatrix.$(OBJ): gsmatrix.c $(GXERR) \
  1891. +   $(gxfixed_h) $(gxarith_h) $(gxmatrix_h)
  1892. + gsmisc.$(OBJ): gsmisc.c $(GX) $(errno__h) $(malloc__h) $(memory__h) $(MAKEFILE)
  1893. +     $(CCC) -DUSE_ASM=0$(USE_ASM) gsmisc.c
  1894. + gspaint.$(OBJ): gspaint.c $(GXERR) $(gpcheck_h) \
  1895. +   $(gxfixed_h) $(gxmatrix_h) $(gspaint_h) $(gzpath_h) $(gzstate_h) $(gzdevice_h) $(gxcpath_h) $(gxdevmem_h) $(gximage_h)
  1896. + gspath.$(OBJ): gspath.c $(GXERR) \
  1897. +   $(gxfixed_h) $(gxmatrix_h) $(gxpath_h) $(gzstate_h)
  1898. + gspath2.$(OBJ): gspath2.c $(GXERR) \
  1899. +   $(gspath_h) $(gxfixed_h) $(gxmatrix_h) $(gzstate_h) $(gzpath_h) $(gzdevice_h)
  1900. + gsstate.$(OBJ): gsstate.c $(GXERR) \
  1901. +   $(gscie_h) $(gscolor2_h) $(gscspace_h) $(gxcolor_h) $(gxrefct_h) \
  1902. +   $(gzstate_h) $(gzcolor_h) $(gzdevice_h) $(gzht_h) $(gzline_h) $(gzpath_h)
  1903. + gstdev.$(OBJ): gstdev.c $(GXERR) \
  1904. +   $(gxbitmap_h) $(gxdevice_h) $(gxfixed_h) $(gxmatrix_h)
  1905. + gstype1.$(OBJ): gstype1.c $(GXERR) \
  1906. +   $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) $(gxchar_h) $(gxdevmem_h) $(gxop1_h) $(gxtype1_h) \
  1907. +   $(gzstate_h) $(gzdevice_h) $(gzpath_h)
  1908. + ###### The internal devices
  1909. + gdevmem_h=gdevmem.h
  1910. + gdevemap.$(OBJ): gdevemap.c $(AK) $(std_h)
  1911. + gdevmem1.$(OBJ): gdevmem1.c $(AK) \
  1912. +   $(gx_h) $(gserrors_h) $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h)
  1913. + gdevmem2.$(OBJ): gdevmem2.c $(AK) \
  1914. +   $(gx_h) $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h)
  1915. + gdevmem3.$(OBJ): gdevmem3.c $(AK) \
  1916. +   $(gx_h) $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h)
  1917. + ###### Files dependent on the installed devices, features, and platform.
  1918. + # Generating gconfig.h also generates o*.tr and l*.tr.
  1919. + # gconfig.h shouldn't have to depend on ALL_DEVS, but that would
  1920. + # involve rewriting gsconfig to only save the device name, not the
  1921. + # contents of the <device>.D_# files.
  1922. + ALL_DEVS=$(FEATURE_DEVS) $(PLATFORM).dev \
  1923. +   $(DEVICE_DEVS) $(DEVICE_DEVS1) \
  1924. +   $(DEVICE_DEVS2) $(DEVICE_DEVS3) $(DEVICE_DEVS4) $(DEVICE_DEVS5)\
  1925. +   $(DEVICE_DEVS6) $(DEVICE_DEVS7) $(DEVICE_DEVS8) $(DEVICE_DEVS9)
  1926. + gconfig.h obj.tr objw.tr ld.tr lib.tr: \
  1927. +   devs.mak $(MAKEFILE) echogs$(XE) genconf$(XE) $(ALL_DEVS)
  1928. +     $(EXP)echogs -w t.cfg - $(FEATURE_DEVS) $(PLATFORM).dev
  1929. +     $(EXP)echogs -a t.cfg - $(DEVICE_DEVS)
  1930. +     $(EXP)echogs -a t.cfg - $(DEVICE_DEVS1)
  1931. +     $(EXP)echogs -a t.cfg - $(DEVICE_DEVS2)
  1932. +     $(EXP)echogs -a t.cfg - $(DEVICE_DEVS3)
  1933. +     $(EXP)echogs -a t.cfg - $(DEVICE_DEVS4)
  1934. +     $(EXP)echogs -a t.cfg - $(DEVICE_DEVS5)
  1935. +     $(EXP)echogs -a t.cfg - $(DEVICE_DEVS6)
  1936. +     $(EXP)echogs -a t.cfg - $(DEVICE_DEVS7)
  1937. +     $(EXP)echogs -a t.cfg - $(DEVICE_DEVS8)
  1938. +     $(EXP)echogs -a t.cfg - $(DEVICE_DEVS9)
  1939. +     $(EXP)genconf @t.cfg -h gconfig.h -l lib.tr -o obj.tr -u ld.tr -w objw.tr
  1940. +     rm t.cfg
  1941. +     $(EXP)echogs -a gconfig.h -x 23 define GS_LIB_DEFAULT -x 2022 $(GS_LIB_DEFAULT) -x 22
  1942. +     $(EXP)echogs -a gconfig.h -x 23 define GS_INIT -x 2022 $(GS_INIT) -x 22
  1943. + gconfig.$(OBJ): gconfig.c $(AK) $(gconfig_h) $(MAKEFILE)
  1944. + ###### On Unix, we pre-link all of the library except the back end.
  1945. + ###### On MS-DOS, we have to do the whole thing at once.
  1946. + LIBGS=gschar.$(OBJ) gscolor.$(OBJ) gscoord.$(OBJ) \
  1947. +  gsdevice.$(OBJ) gsfile.$(OBJ) gsfont.$(OBJ) gsht.$(OBJ) \
  1948. +  gsimage.$(OBJ) gsimage1.$(OBJ) gsimage2.$(OBJ) \
  1949. +  gsimpath.$(OBJ) gsline.$(OBJ) gsmatrix.$(OBJ) gsmisc.$(OBJ) \
  1950. +  gspaint.$(OBJ) gspath.$(OBJ) gspath2.$(OBJ) \
  1951. +  gsstate.$(OBJ) gstdev.$(OBJ) gstype1.$(OBJ) gsutil.$(OBJ) \
  1952. +  gxccache.$(OBJ) gxccman.$(OBJ) gxclist.$(OBJ) gxclread.$(OBJ) \
  1953. +  gxcmap.$(OBJ) gxcpath.$(OBJ) \
  1954. +  gxdither.$(OBJ) gxdraw.$(OBJ) gxfill.$(OBJ) \
  1955. +  gxhint1.$(OBJ) gxhint2.$(OBJ) gxht.$(OBJ) \
  1956. +  gxpath.$(OBJ) gxpath2.$(OBJ) gxpcopy.$(OBJ) gxstroke.$(OBJ) \
  1957. +  gdevmem1.$(OBJ) gdevmem2.$(OBJ) gdevmem3.$(OBJ) gconfig.$(OBJ)
  1958. + # ------------------------------ Interpreter ------------------------------ #
  1959. + ###### Include files
  1960. + alloc_h=alloc.h
  1961. + astate_h=astate.h
  1962. + ccfont_h=ccfont.h
  1963. + dict_h=dict.h
  1964. + dparam_h=dparam.h
  1965. + dstack_h=dstack.h
  1966. + errors_h=errors.h
  1967. + estack_h=estack.h
  1968. + filedev_h=filedev.h
  1969. + files_h=files.h
  1970. + font_h=font.h
  1971. + ilevel_h=ilevel.h
  1972. + iname_h=iname.h
  1973. + iref_h=iref.h
  1974. + iscan_h=iscan.h
  1975. + ivmspace_h=ivmspace.h
  1976. + iutil_h=iutil.h
  1977. + main_h=main.h
  1978. + opdef_h=opdef.h
  1979. + ostack_h=ostack.h
  1980. + overlay_h=overlay.h
  1981. + packed_h=packed.h
  1982. + save_h=save.h
  1983. + scanchar_h=scanchar.h
  1984. + sbits_h=sbits.h
  1985. + shc_h=shc.h
  1986. + state_h=state.h
  1987. + store_h=store.h
  1988. + stream_h=stream.h
  1989. + # Nested include files
  1990. + bfont_h=bfont.h $(font_h)
  1991. + ghost_h=ghost.h $(gx_h) $(iref_h)
  1992. + oper_h=oper.h $(gsutil_h) $(iutil_h) $(opdef_h) $(ostack_h)
  1993. + scf_h=scf.h $(shc_h)
  1994. + sdct_h=sdct.h $(shc_h)
  1995. + # Include files for optional features
  1996. + bnum_h=bnum.h
  1997. + bseq_h=bseq.h
  1998. + btoken_h=btoken.h
  1999. + comp1_h=comp1.h $(ghost_h) $(oper_h) $(gserrors_h) $(gxfixed_h) $(gxop1_h)
  2000. + gdevprn_h=gdevprn.h $(memory__h) $(string__h) $(gx_h) \
  2001. +   $(gserrors_h) $(gsmatrix_h) $(gxdevice_h) $(gxdevmem_h) $(gxclist_h)
  2002. + ###### Utilities
  2003. + GH=$(AK) $(ghost_h)
  2004. + ialloc.$(OBJ): ialloc.c $(AK) $(gx_h) $(alloc_h) $(astate_h) $(ivmspace_h)
  2005. + iccfont.$(OBJ): iccfont.c $(GH) gconfigf.h \
  2006. +   $(ghost_h) $(alloc_h) $(ccfont_h) $(dict_h) $(dstack_h) $(errors_h) \
  2007. +   $(font_h) $(iutil_h) $(iname_h) $(oper_h) $(save_h) $(store_h)
  2008. + idebug.$(OBJ): idebug.c $(GH) \
  2009. +   $(iutil_h) $(dict_h) $(iname_h) $(ostack_h) $(opdef_h) $(packed_h) $(store_h)
  2010. + idict.$(OBJ): idict.c $(GH) \
  2011. +   $(alloc_h) $(errors_h) $(ivmspace_h) $(iname_h) $(packed_h) \
  2012. +   $(save_h) $(store_h) $(iutil_h) $(dict_h) $(dstack_h)
  2013. + idparam.$(OBJ): idparam.c $(GH) \
  2014. +   $(gsmatrix_h) $(dict_h) $(dparam_h) $(errors_h) $(iutil_h)
  2015. + iinit.$(OBJ): iinit.c $(GH) $(gconfig_h) \
  2016. +   $(alloc_h) $(dict_h) $(dstack_h) $(errors_h) $(ilevel_h) $(iname_h) $(oper_h) $(store_h)
  2017. + iname.$(OBJ): iname.c $(GH) $(alloc_h) $(errors_h) $(ivmspace_h) $(iname_h) $(store_h)
  2018. + isave.$(OBJ): isave.c $(GH) $(alloc_h) $(astate_h) $(errors_h) $(iname_h) $(packed_h) $(save_h) $(store_h)
  2019. + iscan.$(OBJ): iscan.c $(GH) $(ctype__h) \
  2020. +   $(alloc_h) $(dict_h) $(dstack_h) $(errors_h) \
  2021. +   $(ilevel_h) $(iutil_h) $(iscan_h) $(ivmspace_h) \
  2022. +   $(iname_h) $(ostack_h) $(packed_h) $(store_h) $(stream_h) $(scanchar_h)
  2023. + iutil.$(OBJ): iutil.c $(GH) \
  2024. +   $(errors_h) $(alloc_h) $(dict_h) $(iutil_h) $(ivmspace_h) \
  2025. +   $(iname_h) $(ostack_h) $(opdef_h) $(packed_h) $(store_h) \
  2026. +   $(gsmatrix_h) $(gxdevice_h) $(gzcolor_h)
  2027. + sfilter.$(OBJ): sfilter.c $(AK) $(stdio__h) \
  2028. +   $(scanchar_h) $(stream_h) $(gscrypt1_h)
  2029. + stream.$(OBJ): stream.c $(AK) $(stdio__h) $(memory__h) \
  2030. +   $(gpcheck_h) $(scanchar_h) $(stream_h)
  2031. + ###### Operators
  2032. + OP=$(GH) $(errors_h) $(oper_h)
  2033. + ### Non-graphics operators
  2034. + zarith.$(OBJ): zarith.c $(OP) $(store_h)
  2035. + zarray.$(OBJ): zarray.c $(OP) $(alloc_h) $(packed_h) $(store_h)
  2036. + zcontrol.$(OBJ): zcontrol.c $(OP) $(estack_h) $(iutil_h) $(store_h)
  2037. + zdict.$(OBJ): zdict.c $(OP) $(dict_h) $(dstack_h) $(iname_h) $(store_h)
  2038. + zfile.$(OBJ): zfile.c $(OP) $(gp_h) \
  2039. +   $(alloc_h) $(estack_h) $(filedev_h) $(files_h) $(ilevel_h) $(iutil_h) \
  2040. +   $(save_h) $(stream_h) $(store_h)
  2041. + zfiledev.$(OBJ): zfiledev.c $(OP) $(string__h) $(gp_h) $(gconfig_h) \
  2042. +   $(filedev_h) $(files_h) $(stream_h)
  2043. + zfileio.$(OBJ): zfileio.c $(OP) $(gp_h) \
  2044. +   $(estack_h) $(files_h) $(iscan_h) $(store_h) $(stream_h) \
  2045. +   $(gsmatrix_h) $(gxdevice_h) $(gxdevmem_h)
  2046. + zfilter.$(OBJ): zfilter.c $(OP) $(alloc_h) $(stream_h)
  2047. + zgeneric.$(OBJ): zgeneric.c $(OP) \
  2048. +   $(dict_h) $(estack_h) $(ivmspace_h) $(iname_h) $(packed_h) $(store_h)
  2049. + zmath.$(OBJ): zmath.c $(OP) $(store_h)
  2050. + zmisc.$(OBJ): zmisc.c $(OP) $(gp_h) $(errno__h) $(memory__h) $(string__h) \
  2051. +   $(alloc_h) $(dict_h) $(dstack_h) $(iname_h) $(ivmspace_h) $(packed_h) $(store_h) \
  2052. +   $(gscrypt1_h)
  2053. + zpacked.$(OBJ): zpacked.c $(OP) \
  2054. +   $(alloc_h) $(dict_h) $(ivmspace_h) $(iname_h) $(packed_h) $(save_h) $(store_h)
  2055. + zprops.$(OBJ): zprops.c $(OP) \
  2056. +   $(alloc_h) $(dict_h) $(iname_h) $(state_h) $(store_h) \
  2057. +   $(gsprops_h) $(gsmatrix_h) $(gxdevice_h) $(gsstate_h)
  2058. + zrelbit.$(OBJ): zrelbit.c $(OP) $(store_h) $(dict_h)
  2059. + zstack.$(OBJ): zstack.c $(OP) $(store_h)
  2060. + zstring.$(OBJ): zstring.c $(OP) \
  2061. +   $(alloc_h) $(iscan_h) $(iutil_h) $(iname_h) $(store_h) $(stream_h)
  2062. + ztype.$(OBJ): ztype.c $(OP) \
  2063. +   $(dict_h) $(iscan_h) $(iutil_h) $(iname_h) $(stream_h) $(store_h)
  2064. + zvmem.$(OBJ): zvmem.c $(OP) $(alloc_h) $(dict_h) $(dstack_h) $(estack_h) $(save_h) $(state_h) $(store_h) \
  2065. +   $(gsmatrix_h) $(gsstate_h)
  2066. + ###### Graphics operators
  2067. + zchar.$(OBJ): zchar.c $(OP) $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) \
  2068. +   $(gschar_h) $(gxtype1_h) $(gxdevice_h) $(gxfont_h) $(gzpath_h) $(gzstate_h) \
  2069. +   $(alloc_h) $(dict_h) $(font_h) $(estack_h) $(ilevel_h) $(iname_h) $(state_h) $(store_h)
  2070. + zcolor.$(OBJ): zcolor.c $(OP) $(alloc_h) $(estack_h) $(gxfixed_h) $(gxmatrix_h) $(gzstate_h) $(gxdevice_h) $(gzcolor_h) $(iutil_h) $(state_h) $(store_h)
  2071. + zdevice.$(OBJ): zdevice.c $(OP) $(alloc_h) $(state_h) $(gsmatrix_h) $(gsstate_h) $(gxdevice_h) $(store_h)
  2072. + zfont.$(OBJ): zfont.c $(OP) \
  2073. +   $(gsmatrix_h) $(gxdevice_h) $(gxfont_h) $(gxfdir_h) $(gxcache_h) \
  2074. +   $(alloc_h) $(bfont_h) $(dict_h) $(iname_h) $(packed_h) $(save_h) $(state_h) $(store_h)
  2075. + zfont1.$(OBJ): zfont1.c $(OP) $(gsmatrix_h) $(gxdevice_h) $(gschar_h) $(gxfixed_h) $(gxfont_h) \
  2076. +   $(bfont_h) $(dict_h) $(dparam_h) $(iname_h) $(store_h)
  2077. + zfont2.$(OBJ): zfont2.c $(OP) $(gsmatrix_h) $(gxdevice_h) $(gschar_h) $(gxfixed_h) $(gxfont_h) \
  2078. +   $(alloc_h) $(bfont_h) $(dict_h) $(dparam_h) $(ilevel_h) $(iname_h) \
  2079. +   $(packed_h) $(save_h) $(store_h)
  2080. + zgstate.$(OBJ): zgstate.c $(OP) $(alloc_h) $(gsmatrix_h) $(gsstate_h) $(state_h) $(store_h)
  2081. + zht.$(OBJ): zht.c $(OP) $(alloc_h) $(estack_h) $(gsmatrix_h) $(gsstate_h) $(state_h) $(store_h)
  2082. + zmatrix.$(OBJ): zmatrix.c $(OP) $(gsmatrix_h) $(state_h) $(gscoord_h) $(store_h)
  2083. + zpaint.$(OBJ): zpaint.c $(OP) \
  2084. +   $(alloc_h) $(estack_h) $(ilevel_h) $(state_h) $(store_h) $(stream_h) \
  2085. +   $(gsimage_h) $(gsmatrix_h) $(gspaint_h)
  2086. + zpath.$(OBJ): zpath.c $(OP) $(gsmatrix_h) $(gspath_h) $(state_h) $(store_h)
  2087. + zpath2.$(OBJ): zpath2.c $(OP) $(alloc_h) $(estack_h) $(gspath_h) $(state_h) $(store_h)
  2088. + ###### Linking
  2089. + INT=ialloc.$(OBJ) idebug.$(OBJ) idict.$(OBJ) idparam.$(OBJ) \
  2090. +  iinit.$(OBJ) iname.$(OBJ) \
  2091. +  interp.$(OBJ) isave.$(OBJ) iscan.$(OBJ) iutil.$(OBJ) \
  2092. +  sfilter.$(OBJ) stream.$(OBJ) \
  2093. +  zarith.$(OBJ) zarray.$(OBJ) zcontrol.$(OBJ) zdict.$(OBJ) \
  2094. +  zfile.$(OBJ) zfiledev.$(OBJ) zfileio.$(OBJ) zfilter.$(OBJ) zgeneric.$(OBJ) \
  2095. +  zmath.$(OBJ) zmisc.$(OBJ) zpacked.$(OBJ) zprops.$(OBJ) zrelbit.$(OBJ) \
  2096. +  zstack.$(OBJ) zstring.$(OBJ) ztype.$(OBJ) zvmem.$(OBJ) \
  2097. +  zchar.$(OBJ) zcolor.$(OBJ) zfont.$(OBJ) zfont1.$(OBJ) zfont2.$(OBJ) \
  2098. +  zdevice.$(OBJ) zgstate.$(OBJ) zht.$(OBJ) zmatrix.$(OBJ) \
  2099. +  zpaint.$(OBJ) zpath.$(OBJ) zpath2.$(OBJ)
  2100. + # -------------------------- Optional features ---------------------------- #
  2101. + ### Additions common to Display PostScript and Level 2
  2102. + # We have to split up the module list because of limitations
  2103. + # on the number of arguments to a DOS batch file.
  2104. + dpsand2a_=gsdps1.$(OBJ) ibnum.$(OBJ) iscan2.$(OBJ)
  2105. + dpsand2b_=zbseq.$(OBJ) zchar2.$(OBJ) zdps1.$(OBJ) zupath.$(OBJ) zvmem2.$(OBJ)
  2106. + dpsand2_=$(dpsand2a_) $(dpsand2b_)
  2107. + dpsand2.dev: $(dpsand2_) gssetmod gsaddmod
  2108. +     $(SHP)gssetmod dpsand2 $(dpsand2a_)
  2109. +     $(SHP)gsaddmod dpsand2 -obj $(dpsand2b_)
  2110. +     $(SHP)gsaddmod dpsand2 -oper2 zbseq zchar2 zdps1 zupath zvmem2
  2111. +     $(SHP)gsaddmod dpsand2 -ps gs_dps1
  2112. + gsdps1.$(OBJ): gsdps1.c $(GXERR) $(gxfixed_h) $(gxmatrix_h) $(gzpath_h) $(gzstate_h)
  2113. + ibnum.$(OBJ): ibnum.c $(GH) $(errors_h) $(stream_h) $(bnum_h) $(btoken_h)
  2114. + iscan2.$(OBJ): iscan2.c $(GH) $(errors_h) \
  2115. +   $(alloc_h) $(dict_h) $(dstack_h) $(iscan_h) $(iutil_h) $(ivmspace_h) \
  2116. +   $(iname_h) $(ostack_h) $(save_h) $(store_h) $(stream_h) \
  2117. +   $(bseq_h) $(btoken_h) $(bnum_h)
  2118. + zbseq.$(OBJ): zbseq.c $(OP) $(save_h) $(store_h) $(stream_h) $(files_h) $(iname_h) $(bnum_h) $(btoken_h) $(bseq_h)
  2119. + zchar2.$(OBJ): zchar2.c $(OP) $(gschar_h) $(gsmatrix_h) $(gxfixed_h) $(gxfont_h) \
  2120. +   $(alloc_h) $(estack_h) $(font_h) $(iname_h) $(state_h) $(store_h) $(stream_h) $(bnum_h)
  2121. + zdps1.$(OBJ): zdps1.c $(OP) $(gsmatrix_h) $(gspath_h) $(gsstate_h) \
  2122. +   $(alloc_h) $(ivmspace_h) $(state_h) $(store_h) $(stream_h) $(bnum_h)
  2123. + zupath.$(OBJ): zupath.c $(OP) \
  2124. +   $(dict_h) $(dstack_h) $(iutil_h) $(state_h) $(store_h) $(stream_h) $(bnum_h) \
  2125. +   $(gscoord_h) $(gsmatrix_h) $(gspaint_h) $(gspath_h) $(gsstate_h) \
  2126. +   $(gxfixed_h) $(gxdevice_h) $(gxpath_h)
  2127. + zvmem2.$(OBJ): zvmem2.c $(OP) \
  2128. +   $(ivmspace_h) $(store_h)
  2129. + ### Display PostScript
  2130. + # We should include zcontext, but it isn't in good enough shape yet:
  2131. + #    $(SHP)gsaddmod dps -oper2 zcontext
  2132. + dps_=
  2133. + dps.dev: dpsand2.dev $(dps_) gssetmod gsaddmod
  2134. +     $(SHP)gssetmod dps $(dps_)
  2135. +     $(SHP)gsaddmod dps -include dpsand2
  2136. + zcontext.$(OBJ): zcontext.c $(OP) \
  2137. +   $(alloc_h) $(dict_h) $(dstack_h) $(estack_h) $(state_h) $(store_h)
  2138. + ### Composite font support
  2139. + gschar0.$(OBJ): gschar0.c $(GXERR) \
  2140. +   $(gxfixed_h) $(gxmatrix_h) $(gzdevice_h) $(gxdevmem_h) $(gxfont_h) $(gxchar_h) $(gzstate_h)
  2141. + zfont0.$(OBJ): zfont0.c $(OP) $(gsmatrix_h) $(gxdevice_h) $(gxfont_h) \
  2142. +   $(alloc_h) $(bfont_h) $(dict_h) $(iname_h) $(state_h) $(store_h)
  2143. + compfont_=zchar2.$(OBJ) zfont0.$(OBJ) gschar0.$(OBJ)
  2144. + compfont.dev: $(compfont_) gssetmod gsaddmod
  2145. +     $(SHP)gssetmod compfont $(compfont_)
  2146. +     $(SHP)gsaddmod compfont -oper zfont0 zchar2
  2147. +     $(SHP)gsaddmod compfont -ps gs_type0
  2148. + ### Level 2 additions
  2149. + # We have to split up the module list because of limitations
  2150. + # on the number of arguments to a DOS batch file.
  2151. + level2a_=gscie.$(OBJ) gscolor2.$(OBJ) zcie.$(OBJ) zcolor2.$(OBJ)
  2152. + level2b_=zcspace2.$(OBJ) zht2.$(OBJ) zimage2.$(OBJ) zmisc2.$(OBJ)
  2153. + level2_=$(level2a_) $(level2b_)
  2154. + level2.dev: compfont.dev dpsand2.dev filter.dev $(level2_) gssetmod gsaddmod
  2155. +     $(SHP)gssetmod level2 $(level2a_)
  2156. +     $(SHP)gsaddmod level2 -obj $(level2b_)
  2157. +     $(SHP)gsaddmod level2 -include compfont dpsand2 filter
  2158. +     $(SHP)gsaddmod level2 -oper zmisc2_level
  2159. +     $(SHP)gsaddmod level2 -oper2 zcie zcolor2 zcspace2
  2160. +     $(SHP)gsaddmod level2 -oper2 zht2 zimage2 zmisc2
  2161. +     $(SHP)gsaddmod level2 -ps gs_lev2
  2162. + gscie.$(OBJ): gscie.c $(GXERR) \
  2163. +   $(gscspace_h) $(gscie_h) $(gscolor2_h) \
  2164. +   $(gxarith_h) $(gxcolor_h) $(gxdevice_h) $(gxrefct_h) \
  2165. +   $(gzcolor_h) $(gzstate_h)
  2166. + gscolor2.$(OBJ): gscolor2.c $(GXERR) \
  2167. +   $(gscie_h) $(gscolor2_h) $(gscspace_h) \
  2168. +   $(gxcolor_h) $(gxdevice_h) $(gxfixed_h) $(gxmatrix_h) $(gxrefct_h) \
  2169. +   $(gzcolor_h) $(gzstate_h)
  2170. + zcie.$(OBJ): zcie.c $(OP) \
  2171. +   $(gscspace_h) $(gscolor2_h) $(gscie_h) $(gxcolor_h) $(gxrefct_h) \
  2172. +   $(alloc_h) $(dict_h) $(dparam_h) $(estack_h) $(save_h) $(state_h) $(store_h)
  2173. + zcolor2.$(OBJ): zcolor2.c $(OP) \
  2174. +   $(gscolor_h) $(gxcolor_h) $(gscolor2_h) $(gscspace_h) $(gsmatrix_h) \
  2175. +   $(dict_h) $(dparam_h) $(iname_h) $(state_h) $(store_h)
  2176. + zcspace2.$(OBJ): zcspace2.c $(OP) \
  2177. +   $(gscolor_h) $(gxcolor_h) $(gscolor2_h) $(gscspace_h) $(gsmatrix_h) \
  2178. +   $(dict_h) $(dparam_h) $(estack_h) $(iname_h) $(state_h) $(store_h)
  2179. + zht2.$(OBJ): zht2.c $(OP) \
  2180. +   $(dict_h) $(dparam_h) $(iname_h) $(state_h) $(store_h)
  2181. + zimage2.$(OBJ): zimage2.c $(OP) \
  2182. +   $(gscolor_h) $(gscolor2_h) $(gscspace_h) $(gsmatrix_h) $(gxcolor_h) \
  2183. +   $(dict_h) $(dparam_h) $(ilevel_h) $(state_h)
  2184. + zmisc2.$(OBJ): zmisc2.c $(OP) \
  2185. +   $(gsfont_h) \
  2186. +   $(dict_h) $(dparam_h) $(dstack_h) $(estack_h) $(ilevel_h) $(iname_h) $(store_h)
  2187. + ### Filters other than the ones in sfilter.c
  2188. + sbits.$(OBJ): sbits.c $(AK) $(stdio__h) $(sbits_h) $(stream_h)
  2189. + scftab.$(OBJ): scftab.c $(AK) $(std_h) $(scf_h)
  2190. + scfdtab.$(OBJ): scfdtab.c $(AK) $(std_h) $(scf_h)
  2191. + scfd.$(OBJ): scfd.c $(AK) $(stdio__h) $(gdebug_h)\
  2192. +   $(sbits_h) $(scf_h) $(stream_h)
  2193. + scfe.$(OBJ): scfe.c $(AK) $(stdio__h) $(gdebug_h)\
  2194. +   $(sbits_h) $(scf_h) $(stream_h)
  2195. + sdctd.$(OBJ): sdctd.c $(AK) $(stdio__h) $(gdebug_h) $(stream_h)
  2196. + sdcte.$(OBJ): sdcte.c $(AK) $(stdio__h) $(gdebug_h) $(stream_h)
  2197. + sfilter2.$(OBJ): sfilter2.c $(AK) $(stdio__h) $(scanchar_h) $(stream_h)
  2198. + slzwd.$(OBJ): slzwd.c $(AK) $(stdio__h) $(gdebug_h) $(stream_h)
  2199. + slzwe.$(OBJ): slzwe.c $(AK) $(stdio__h) $(gdebug_h) $(stream_h)
  2200. + zfilter2.$(OBJ): zfilter2.c $(OP) $(alloc_h) $(dict_h) $(dparam_h) $(sdct_h) $(stream_h)
  2201. + # Because of size limits on the DOS command line,
  2202. + # we have to break this up into two parts.
  2203. + filter_1=zfilter2.$(OBJ) sfilter2.$(OBJ) sbits.$(OBJ)
  2204. + filter_2=scfdtab.$(OBJ) scftab.$(OBJ) scfd.$(OBJ) scfe.$(OBJ) 
  2205. + filter_3=sdctd.$(OBJ) sdcte.$(OBJ) slzwd.$(OBJ) slzwe.$(OBJ)
  2206. + filter.dev: $(filter_1) $(filter_2) $(filter_3) gssetmod gsaddmod
  2207. +     $(SHP)gssetmod filter $(filter_1)
  2208. +     $(SHP)gsaddmod filter -obj $(filter_2)
  2209. +     $(SHP)gsaddmod filter -obj $(filter_3)
  2210. +     $(SHP)gsaddmod filter -oper zfilter2
  2211. + ### Precompiled fonts.  See fonts.doc for more information.
  2212. + CCFONT=$(OP) $(ccfont_h)
  2213. + # List the fonts we are going to compile.
  2214. + # Because of intrinsic limitations in `make', we have to list
  2215. + # the object file names and the font names separately.
  2216. + ccfonts1_=uglyr.$(OBJ)
  2217. + ccfonts1=uglyr
  2218. + ccfonts.dev: $(MAKEFILE) gs.mak iccfont.$(OBJ) gssetmod gsaddmod \
  2219. +   $(ccfonts1_) $(ccfonts2_) $(ccfonts3_) $(ccfonts4_) $(ccfonts5_)
  2220. +     $(SHP)gssetmod ccfonts iccfont.$(OBJ)
  2221. +     $(SHP)gsaddmod ccfonts -obj $(ccfonts1_)
  2222. +     $(SHP)gsaddmod ccfonts -obj $(ccfonts2_)
  2223. +     $(SHP)gsaddmod ccfonts -obj $(ccfonts3_)
  2224. +     $(SHP)gsaddmod ccfonts -obj $(ccfonts4_)
  2225. +     $(SHP)gsaddmod ccfonts -obj $(ccfonts5_)
  2226. +     $(SHP)gsaddmod ccfonts -oper ccfonts
  2227. + gconfigf.h: $(MAKEFILE) gs.mak genconf$(XE) gssetmod gsaddmod
  2228. +     $(SHP)gssetmod ccfonts_
  2229. +     $(SHP)gsaddmod ccfonts_ -font $(ccfonts1)
  2230. +     $(SHP)gsaddmod ccfonts_ -font $(ccfonts2)
  2231. +     $(SHP)gsaddmod ccfonts_ -font $(ccfonts3)
  2232. +     $(SHP)gsaddmod ccfonts_ -font $(ccfonts4)
  2233. +     $(SHP)gsaddmod ccfonts_ -font $(ccfonts5)
  2234. +     $(EXP)genconf ccfonts_.dev -f gconfigf.h
  2235. + uglyr.$(OBJ): uglyr.c $(CCFONT)
  2236. +     $(CCCF) uglyr.c
  2237. + ncrr.$(OBJ): ncrr.c $(CCFONT)
  2238. +     $(CCCF) ncrr.c
  2239. + pagk.$(OBJ): pagk.c $(CCFONT)
  2240. +     $(CCCF) pagk.c
  2241. + psyr.$(OBJ): psyr.c $(CCFONT)
  2242. +     $(CCCF) psyr.c
  2243. + ptmr.$(OBJ): ptmr.c $(CCFONT)
  2244. +     $(CCCF) ptmr.c
  2245. + pzdr.$(OBJ): pzdr.c $(CCFONT)
  2246. +     $(CCCF) pzdr.c
  2247. + # ----------------------------- Main program ------------------------------ #
  2248. + # Interpreter main program
  2249. + gs.$(OBJ): gs.c $(GH) $(ctype__h) \
  2250. +   $(gxdevice_h) $(gxdevmem_h) \
  2251. +   $(alloc_h) $(errors_h) $(estack_h) $(files_h) $(iscan_h) $(main_h) $(ostack_h) $(store_h) $(stream_h)
  2252. + gsmain.$(OBJ): gsmain.c $(GH) \
  2253. +   $(gp_h) $(gsmatrix_h) $(gxdevice_h) $(gserrors_h) \
  2254. +   $(estack_h) $(files_h) $(iscan_h) $(main_h) $(ostack_h) $(store_h)
  2255. + interp.$(OBJ): interp.c $(GH) \
  2256. +   $(errors_h) $(estack_h) $(iname_h) $(dict_h) $(dstack_h) $(iscan_h) $(oper_h) $(ostack_h) $(packed_h) $(save_h) $(store_h) $(stream_h)
  2257. +     $(CCINT) interp.c
  2258. + #    Copyright (C) 1989, 1992, 1993 Aladdin Enterprises.  All rights reserved.
  2259. + #
  2260. + # This file is part of Ghostscript.
  2261. + #
  2262. + # Ghostscript is distributed in the hope that it will be useful, but
  2263. + # WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
  2264. + # to anyone for the consequences of using it or for whether it serves any
  2265. + # particular purpose or works at all, unless he says so in writing.  Refer
  2266. + # to the Ghostscript General Public License for full details.
  2267. + #
  2268. + # Everyone is granted permission to copy, modify and redistribute
  2269. + # Ghostscript, but only under the conditions described in the Ghostscript
  2270. + # General Public License.  A copy of this license is supposed to have been
  2271. + # given to you along with Ghostscript so you can know your rights and
  2272. + # responsibilities.  It should be in a file named COPYING.  Among other
  2273. + # things, the copyright notice and this notice must be preserved on all
  2274. + # copies.
  2275. + # makefile for Ghostscript device drivers.
  2276. + # -------------------------------- Catalog ------------------------------- #
  2277. + # It is possible to build Ghostscript with an arbitrary collection of
  2278. + # device drivers, although some drivers are supported only on a subset
  2279. + # of the target platforms.  The currently available drivers are:
  2280. + # Displays:
  2281. + #   MS-DOS EGA and VGA:
  2282. + #    ega    EGA (640x350, 16-color)
  2283. + #    vga    VGA (640x480, 16-color)
  2284. + #   MS-DOS SuperVGA:
  2285. + # +    atiw    ATI Wonder SuperVGA, 256-color modes
  2286. + # +     atiw16  ATI Wonder SuperVGA in 800x600, 16-color mode
  2287. + #    s3vga    SuperVGA with S3 86C911 chip (e.g., Diamond Stealth board)
  2288. + #    tseng    SuperVGA using Tseng Labs ET3000/4000 chips, 256-color modes
  2289. + #    tseng16  Tseng Labs SuperVGA in 800x600, 16-color mode (256K memory)
  2290. + # +    tvga    Trident SuperVGA, 256-color modes
  2291. + # +    tvga16    Trident SuperVGA in 800x600, 16-color mode (256K memory)
  2292. + #   ****** NOTE: The vesa device does not work with the Watcom (32-bit MS-DOS)
  2293. + #   ****** compiler or executable.
  2294. + #    vesa    SuperVGA with VESA standard API driver
  2295. + #   MS-DOS other:
  2296. + #    bgi    Borland Graphics Interface (CGA)  [MS-DOS only]
  2297. + # *    herc    Hercules Graphics display   [MS-DOS only]
  2298. + #    mswin    Microsoft Windows 3.0, 3.1  [MS Windows only]
  2299. + #    mswinprn  Microsoft Windows 3.0, 3.1 printer  [MS Windows only]
  2300. + # *    pe    Private Eye display
  2301. + #   Unix and VMS:
  2302. + #   ****** NOTE: For direct frame buffer addressing under SCO Unix or Xenix,
  2303. + #   ****** edit the definition of EGAVGA below.
  2304. + # *    att3b1    AT&T 3b1/Unixpc monochrome display   [3b1 only]
  2305. + # *    sonyfb    Sony Microsystems monochrome display   [Sony only]
  2306. + # *    sunview  SunView window system   [SunOS only]
  2307. + #    x11    X Windows version 11, release >=4   [Unix and VMS only]
  2308. + # Printers:
  2309. + # *    appledmp  Apple Dot Matrix Printer (should also work with Imagewriter)
  2310. + #    bj10e    Canon BubbleJet BJ10e
  2311. + # *    bj200    Canon BubbleJet BJ200
  2312. + # *    cdeskjet  H-P DeskJet 500C with 1 bit/pixel color
  2313. + # *    cdjcolor  H-P DeskJet 500C with 24 bit/pixel color and
  2314. + #        high-quality color (Floyd-Steinberg) dithering
  2315. + # *    cdjmono  H-P DeskJet 500C printing black only
  2316. + # *    cdj500    H-P DeskJet 500C (same as cdjcolor)
  2317. + # *    cdj550    H-P DeskJet 550C
  2318. + # *    declj250  alternate DEC LJ250 driver
  2319. + # +    deskjet  H-P DeskJet and DeskJet Plus
  2320. + # *    dfaxhigh  DigiBoard, Inc.'s DigiFAX software format (high resolution)
  2321. + # *    dfaxlow  DigiFAX low (normal) resolution
  2322. + #    djet500  H-P DeskJet 500
  2323. + # *    djet500c  H-P DeskJet 500C
  2324. + #    epson    Epson-compatible dot matrix printers (9- or 24-pin)
  2325. + # +    eps9high  Epson-compatible 9-pin, interleaved lines
  2326. + #        (triple resolution)
  2327. + # *    epsonc    Epson LQ-2550 and Fujitsu 3400/2400/1200 color printers
  2328. + # *    escp2    Epson ESC/P 2 language printers, including Stylus 800
  2329. + # +     ibmpro  IBM 9-pin Proprinter
  2330. + # *    jetp3852  IBM Jetprinter ink-jet color printer (Model #3852)
  2331. + # +    laserjet  H-P LaserJet
  2332. + # *    la50    DEC LA50 printer
  2333. + # *    la75    DEC LA75 printer
  2334. + # *    lbp8    Canon LBP-8II laser printer
  2335. + # *    ln03    DEC LN03 printer
  2336. + # *    lj250    DEC LJ250 Companion color printer
  2337. + # +    ljet2p    H-P LaserJet IId/IIp/III* with TIFF compression
  2338. + # +    ljet3    H-P LaserJet III* with Delta Row compression
  2339. + # +    ljet4    H-P LaserJet 4 (defaults to 600 dpi)
  2340. + # +    ljetplus  H-P LaserJet Plus
  2341. + # *    m8510    C.Itoh M8510 printer
  2342. + # *    necp6    NEC P6/P6+/P60 printers at 360 x 360 DPI resolution
  2343. + # *    nwp533  Sony Microsystems NWP533 laser printer   [Sony only]
  2344. + # *    oki182    Okidata MicroLine 182
  2345. + #    paintjet  H-P PaintJet color printer
  2346. + # *    pj    alternate PaintJet XL driver 
  2347. + # *    pjxl    H-P PaintJet XL color printer
  2348. + # *    pjxl300  H-P PaintJet XL300 color printer
  2349. + # *    r4081    Ricoh 4081 laser printer
  2350. + # *    sparc    SPARCprinter
  2351. + # *    t4693d2  Tektronix 4693d color printer, 2 bits per R/G/B component
  2352. + # *    t4693d4  Tektronix 4693d color printer, 4 bits per R/G/B component
  2353. + # *    t4693d8  Tektronix 4693d color printer, 8 bits per R/G/B component
  2354. + # *    tek4696  Tektronix 4695/4696 inkjet plotter
  2355. + # *    trufax    TruFax facsimile driver  [Unix only]
  2356. + # File formats and others:
  2357. + #    bit    A plain "bit bucket" device
  2358. + #    bmpmono    Monochrome MS Windows .BMP file format
  2359. + #    bmp16    4-bit (EGA/VGA) .BMP file format
  2360. + #    bmp256    8-bit (256-color) .BMP file format
  2361. + #    bmp16m    24-bit .BMP file format
  2362. + #    gifmono    Monochrome GIF file format
  2363. + #    gif8    8-bit color GIF file format
  2364. + #    pcxmono    Monochrome PCX file format
  2365. + #    pcxgray    8-bit gray scale PCX file format
  2366. + #    pcx16    Older color PCX file format (EGA/VGA, 16-color)
  2367. + #    pcx256    Newer color PCX file format (256-color)
  2368. + #    pbm    Portable Bitmap (plain format)
  2369. + #    pbmraw    Portable Bitmap (raw format)
  2370. + #    pgm    Portable Graymap (plain format)
  2371. + #    pgmraw    Portable Graymap (raw format)
  2372. + #    ppm    Portable Pixmap (plain format)
  2373. + #    ppmraw    Portable Pixmap (raw format)
  2374. + # *    tiffg3    TIFF/F (G3 fax)
  2375. + # User-contributed drivers marked with * require hardware or software
  2376. + # that is not available to Aladdin Enterprises.  Please contact the
  2377. + # original contributors, not Aladdin Enterprises, if you have questions.
  2378. + # Contact information appears in the driver entry below.
  2379. + #
  2380. + # Drivers marked with a + are maintained by Aladdin Enterprises with
  2381. + # the assistance of users, since Aladdin Enterprises doesn't have access to
  2382. + # the hardware for these either.
  2383. + # If you add drivers, it would be nice if you kept each list
  2384. + # in alphabetical order.
  2385. + # Each platform-specific makefile contains a line of the form
  2386. + #    DEVICE_DEVS=<dev1>.dev ... <devn>.dev
  2387. + # where dev1 ... devn are the devices to be included in the build.
  2388. + # You may edit this line to select any desired set of devices.
  2389. + # dev1 will be used as the default device (unless overridden from
  2390. + # the command line with -sDEVICE=xxx, of course.)  If you can't fit all the
  2391. + # devices on a single line, you may add lines defining
  2392. + #    DEVICE_DEVS2=<dev21>.dev ... <dev2n>.dev
  2393. + #    DEVICE_DEVS3=<dev31>.dev ... <dev3n>.dev
  2394. + # etc. up to DEVICE_DEVS9.
  2395. + # Don't use continuation lines, since this may break the MS-DOS command
  2396. + # processor.
  2397. + # ---------------------------- End of catalog ---------------------------- #
  2398. + # If you want to add a new device driver, the examples below should be
  2399. + # enough of a guide to the correct form for the makefile rules.
  2400. + # All device drivers depend on the following:
  2401. + GDEV=$(AK) echogs$(XE) $(gserrors_h) $(gx_h) $(gxdevice_h)
  2402. + # Define the header files for device drivers.  Every header file used by
  2403. + # more than one device driver must be listed here.
  2404. + gdevpccm_h=gdevpccm.h
  2405. + gdevpcfb_h=gdevpcfb.h $(dos__h)
  2406. + gdevpcl_h=gdevpcl.h
  2407. + gdevsvga_h=gdevsvga.h
  2408. + gdevx_h=gdevx.h
  2409. + ###### ------------------- MS-DOS display devices ------------------- ######
  2410. + # There are really only three drivers: an EGA/VGA driver (4 bit-planes,
  2411. + # plane-addressed), a SuperVGA driver (8 bit-planes, byte addressed),
  2412. + # and a special driver for the S3 chip.
  2413. + # To make A4 paper the default, change the compilation line from
  2414. + #    $(CCD) ...
  2415. + # to
  2416. + #    $(CCD) -DA4
  2417. + ### ----------------------- EGA and VGA displays ----------------------- ###
  2418. + gdevegaa.$(OBJ): gdevegaa.asm
  2419. + ETEST=ega.$(OBJ) $(ega_) gdevpcfb.$(OBJ) gdevegaa.$(OBJ)
  2420. + ega.exe: $(ETEST) libc$(MM).tr
  2421. +     $(COMPDIR)\tlink $(LCT) $(LO) $(LIBDIR)\c0$(MM) @ega.tr @libc$(MM).tr
  2422. + ega.$(OBJ): ega.c $(GDEV)
  2423. +     $(CCC) -v ega.c
  2424. + # The shared MS-DOS makefile defines PCFBASM as either gdevegaa.$(OBJ)
  2425. + # or an empty string.
  2426. + # NOTE: for direct frame buffer addressing under SCO Unix or Xenix,
  2427. + # change gdevevga to gdevsco in the following line.
  2428. + EGAVGA=gdevevga.$(OBJ) gdevpcfb.$(OBJ) $(PCFBASM)
  2429. + gdevevga.$(OBJ): gdevevga.c $(GDEV) $(gdevpcfb_h)
  2430. +     $(CCD) gdevevga.c
  2431. + gdevsco.$(OBJ): gdevsco.c $(GDEV) $(gdevpcfb_h)
  2432. +     $(CCD) gdevsco.c
  2433. + # Common code for MS-DOS and SCO.
  2434. + gdevpcfb.$(OBJ): gdevpcfb.c $(GDEV) $(MAKEFILE) $(gdevpcfb_h)
  2435. +     $(CCD) -DUSE_ASM=0$(USE_ASM) gdevpcfb.c
  2436. + # The EGA/VGA family includes: EGA, VGA, and
  2437. + # the ATI Wonder, Tseng ET3000/4000, and Trident SuperVGA in 16-color mode.
  2438. + ega.dev: $(EGAVGA) gssetdev
  2439. +     $(SHP)gssetdev ega $(EGAVGA)
  2440. + vga.dev: $(EGAVGA) gssetdev
  2441. +     $(SHP)gssetdev vga $(EGAVGA)
  2442. + atiw16.dev: $(EGAVGA) gssetdev
  2443. +     $(SHP)gssetdev atiw16 $(EGAVGA)
  2444. + tseng16.dev: $(EGAVGA) gssetdev
  2445. +     $(SHP)gssetdev tseng16 $(EGAVGA)
  2446. + tvga16.dev: $(EGAVGA) gssetdev
  2447. +     $(SHP)gssetdev tvga16 $(EGAVGA)
  2448. + ### ------------------------- SuperVGA displays ------------------------ ###
  2449. + SVGA=gdevsvga.$(OBJ) $(PCFBASM)
  2450. + gdevsvga.$(OBJ): gdevsvga.c $(GDEV) $(MAKEFILE) \
  2451. +   $(gdevpcfb_h) $(gdevsvga_h)
  2452. +     $(CCD) -DUSE_ASM=0$(USE_ASM) gdevsvga.c
  2453. + # The SuperVGA family includes: ATI Wonder, S3, Trident, Tseng ET3000/4000,
  2454. + # and VESA.
  2455. + atiw.dev: $(SVGA) gssetdev
  2456. +     $(SHP)gssetdev atiw $(SVGA)
  2457. + tseng.dev: $(SVGA) gssetdev
  2458. +     $(SHP)gssetdev tseng $(SVGA)
  2459. + tvga.dev: $(SVGA) gssetdev
  2460. +     $(SHP)gssetdev tvga $(SVGA)
  2461. + vesa.dev: $(SVGA) gssetdev
  2462. +     $(SHP)gssetdev vesa $(SVGA)
  2463. + # The S3 driver doesn't share much code with the others.
  2464. + s3vga_=$(SVGA) gdevs3ga.$(OBJ)
  2465. + s3vga.dev: $(s3vga_) gssetdev
  2466. +     $(SHP)gssetdev s3vga $(s3vga_)
  2467. + gdevs3ga.$(OBJ): gdevs3ga.c $(GDEV) $(MAKEFILE) $(gdevpcfb_h) $(gdevsvga_h)
  2468. +     $(CCD) gdevs3ga.c
  2469. + ### ------------ The BGI (Borland Graphics Interface) device ----------- ###
  2470. + cgaf.$(OBJ): $(BGIDIR)\cga.bgi
  2471. +     $(BGIDIR)\bgiobj /F $(BGIDIR)\cga
  2472. + egavgaf.$(OBJ): $(BGIDIR)\egavga.bgi
  2473. +     $(BGIDIR)\bgiobj /F $(BGIDIR)\egavga
  2474. + # Include egavgaf.$(OBJ) for debugging only.
  2475. + bgi_=gdevbgi.$(OBJ) cgaf.$(OBJ)
  2476. + bgi.dev: $(bgi_) gssetdev gsaddmod
  2477. +     $(SHP)gssetdev bgi $(bgi_)
  2478. +     $(SHP)gsaddmod bgi -lib $(LIBDIR)\graphics
  2479. + gdevbgi.$(OBJ): gdevbgi.c $(GDEV) $(MAKEFILE) $(gxxfont_h)
  2480. +     $(CCC) -DBGI_LIB=$(QQ)$(BGIDIRSTR)$(QQ) gdevbgi.c
  2481. + ### ------------------- The Hercules Graphics display ------------------- ###
  2482. + herc_=gdevherc.$(OBJ)
  2483. + herc.dev: $(herc_) gssetdev
  2484. +     $(SHP)gssetdev herc $(herc_)
  2485. + gdevherc.$(OBJ): gdevherc.c $(GDEV)
  2486. +     $(CCC) gdevherc.c
  2487. + ###### ------------------- The Private Eye display ------------------- ######
  2488. + ### Note: this driver was contributed by a user:                          ###
  2489. + ###   please contact narf@media-lab.media.mit.edu if you have questions.  ###
  2490. + pe_=gdevpe.$(OBJ)
  2491. + pe.dev: $(pe_) gssetdev
  2492. +     $(SHP)gssetdev pe $(pe_)
  2493. + gdevpe.$(OBJ): gdevpe.c $(GDEV)
  2494. + ###### ----------------- The MS-Windows 3.n display ------------------ ######
  2495. + gdevmswn_h=gdevmswn.h $(GDEV) gp_mswin.h
  2496. + # Choose one of gdevwddb or gdevwdib here.
  2497. + mswin_=gdevmswn.$(OBJ) gdevmsxf.$(OBJ) gdevwdib.$(OBJ) \
  2498. +   gdevemap.$(OBJ) gdevpccm.$(OBJ)
  2499. + mswin.dev: $(mswin_) gssetdev
  2500. +     $(SHP)gssetdev mswin $(mswin_)
  2501. + gdevmswn.$(OBJ): gdevmswn.c $(gdevmswn_h) $(gp_h) $(gpcheck_h) \
  2502. +   $(gsprops_h) $(gdevpccm_h)
  2503. + gdevmsxf.$(OBJ): gdevmsxf.c $(ctype__h) $(math__h) $(memory__h) \
  2504. +   $(gdevmswn_h) $(gsutil_h) $(gxxfont_h)
  2505. + # An implementation using a device-dependent bitmap.
  2506. + gdevwddb.$(OBJ): gdevwddb.c $(gdevmswn_h)
  2507. + # An implementation using a DIB filled by an image device.
  2508. + gdevwdib.$(OBJ): gdevwdib.c $(dos__h) $(gdevmswn_h)
  2509. + ###### ----------------- The MS-Windows 3.n printer ------------------ ######
  2510. + mswinprn_=gdevwprn.$(OBJ) gdevmsxf.$(OBJ)
  2511. + mswinprn.dev: $(mswinprn_) gssetdev
  2512. +     $(SHP)gssetdev mswinprn $(mswinprn_)
  2513. + gdevwprn.$(OBJ): gdevwprn.c $(gdevmswn_h) $(gp_h) $(gpcheck_h) \
  2514. +   $(gsprops_h) $(gdevpccm_h)
  2515. + ### ---------------- Amiga display/printer/file devices ---------------- ###
  2516. + ### Note: this driver was contributed by a user: please contact          ###
  2517. + ###       Olaf Barthel (olsen@sourcery.han.de) if you have questions.    ###
  2518. + ###       He would also like to hear from anyone using the driver.       ###
  2519. + ### Please consult the source code for additional documentation.         ###
  2520. + amiga_=gdevamiga.$(OBJ)
  2521. + amiga.dev: $(amiga_) gssetdev
  2522. +     $(SHP)gssetdev amiga $(amiga_)
  2523. + amiga_low.dev: $(amiga_) gssetdev
  2524. +     $(SHP)gssetdev amiga_low $(amiga_)
  2525. + amiga_high.dev: $(amiga_) gssetdev
  2526. +     $(SHP)gssetdev amiga_high $(amiga_)
  2527. + amiga_super.dev: $(amiga_) gssetdev
  2528. +     $(SHP)gssetdev amiga_super $(amiga_)
  2529. + amiga_a2024.dev: $(amiga_) gssetdev
  2530. +     $(SHP)gssetdev amiga_a2024 $(amiga_)
  2531. + amiga_picassoii.dev: $(amiga_) gssetdev
  2532. +     $(SHP)gssetdev amiga_picassoii $(amiga_)
  2533. + amiga_custom.dev: $(amiga_) gssetdev
  2534. +     $(SHP)gssetdev amiga_custom $(amiga_)
  2535. + amiga_printer.dev: $(amiga_) gssetdev
  2536. +     $(SHP)gssetdev amiga_printer $(amiga_)
  2537. + amiga_ilbm.dev: $(amiga_) gssetdev
  2538. +     $(SHP)gssetdev amiga_ilbm $(amiga_)
  2539. + gdevamiga.$(OBJ): gdevamiga.c $(GDEV) $(arch_h)
  2540. + ###### ----------- The AT&T 3b1 Unixpc monochrome display ------------ ######
  2541. + ### Note: this driver was contributed by a user: please contact           ###
  2542. + ###       Andy Fyfe (andy@cs.caltech.edu) if you have questions.          ###
  2543. + att3b1_=gdev3b1.$(OBJ)
  2544. + att3b1.dev: $(att3b1_) gssetdev
  2545. +     $(SHP)gssetdev att3b1 $(att3b1_)
  2546. + gdev3b1.$(OBJ): gdev3b1.c
  2547. + ###### --------------- Memory-buffered printer devices --------------- ######
  2548. + # The dependency list for printers includes devs.mak because
  2549. + # you can specify -DA4 to make A4 paper the default.
  2550. + # See below under, e.g., gdevdjet.c.
  2551. + PDEVH=$(GDEV) $(gdevprn_h) devs.mak
  2552. + gdevprn.$(OBJ): gdevprn.c $(PDEVH) $(gp_h) $(gsprops_h)
  2553. + ### ------------------- The Apple DMP printer device ------------------- ###
  2554. + appledmp_=gdevadmp.$(OBJ) gdevprn.$(OBJ)
  2555. + appledmp.dev: $(appledmp_) gssetdev
  2556. +     $(SHP)gssetdev appledmp $(appledmp_)
  2557. + ### ------------ The Canon BubbleJet BJ10e and BJ200 devices ------------ ###
  2558. + bj10e_=gdevbj10.$(OBJ) gdevprn.$(OBJ)
  2559. + bj10e.dev: $(bj10e_) gssetdev
  2560. +     $(SHP)gssetdev bj10e $(bj10e_)
  2561. + bj200.dev: $(bj10e_) gssetdev
  2562. +     $(SHP)gssetdev bj200 $(bj10e_)
  2563. + gdevbj10.$(OBJ): gdevbj10.c $(PDEVH)
  2564. + ### -------------------------- The DigiFAX device ----------------------- ###
  2565. + ###    This driver outputs images in a format suitable for use with       ###
  2566. + ###    DigiBoard, Inc.'s DigiFAX software.  Use -sDEVICE=dfaxhigh for     ###
  2567. + ###    high resolution output, -sDEVICE=dfaxlow for normal output.        ###
  2568. + ### Note: this driver was contributed by a user: please contact           ###
  2569. + ###       Rick Richardson (rick@digibd.com) if you have questions.        ###
  2570. + digifax_=gdevdfax.$(OBJ) gdevprn.$(OBJ)
  2571. + dfaxhigh.dev: $(digifax_) gssetdev
  2572. +     $(SHP)gssetdev dfaxhigh $(digifax_)
  2573. + dfaxlow.dev: $(digifax_) gssetdev
  2574. +     $(SHP)gssetdev dfaxlow $(digifax_)
  2575. + gdevdfax.$(OBJ): gdevdfax.c $(GDEV) $(gdevprn_h) gdevdfg3.h
  2576. + ### ----------- The H-P DeskJet and LaserJet printer devices ----------- ###
  2577. + ### These are essentially the same device.
  2578. + ### You can make A4 paper the default: see below.
  2579. + ### NOTE: printing at full resolution (300 DPI) requires a printer
  2580. + ###   with at least 1.5 Mb of memory.  150 DPI only requires .5 Mb.
  2581. + HPPCL=gdevprn.$(OBJ) gdevpcl.$(OBJ)
  2582. + HPMONO=gdevdjet.$(OBJ) $(HPPCL)
  2583. + gdevpcl.$(OBJ): gdevpcl.c $(PDEVH) $(gdevpcl_h)
  2584. + # To make A4 paper the default, change the second line below this to
  2585. + #    $(CCC) -DA4 gdevdjet.c
  2586. + gdevdjet.$(OBJ): gdevdjet.c $(PDEVH) $(gdevpcl_h)
  2587. +     $(CCC) gdevdjet.c
  2588. + deskjet.dev: $(HPMONO) gssetdev
  2589. +     $(SHP)gssetdev deskjet $(HPMONO)
  2590. + djet500.dev: $(HPMONO) gssetdev
  2591. +     $(SHP)gssetdev djet500 $(HPMONO)
  2592. + laserjet.dev: $(HPMONO) gssetdev
  2593. +     $(SHP)gssetdev laserjet $(HPMONO)
  2594. + ljetplus.dev: $(HPMONO) gssetdev
  2595. +     $(SHP)gssetdev ljetplus $(HPMONO)
  2596. + ### Selecting ljet2p provides TIFF (mode 2) compression on LaserJet III,
  2597. + ### IIIp, IIId, IIIsi, IId, and IIp. 
  2598. + ljet2p.dev: $(HPMONO) gssetdev
  2599. +     $(SHP)gssetdev ljet2p $(HPMONO)
  2600. + ### Selecting ljet3 provides Delta Row (mode 3) compression on LaserJet III,
  2601. + ### IIIp, IIId, IIIsi.
  2602. + ljet3.dev: $(HPMONO) gssetdev
  2603. +     $(SHP)gssetdev ljet3 $(HPMONO)
  2604. + ### Selecting ljet4 also provides Delta Row compression on LaserJet IV series.
  2605. + ljet4.dev: $(HPMONO) gssetdev
  2606. +     $(SHP)gssetdev ljet4 $(HPMONO)
  2607. + ###- The H-P DeskJet 500C/550C and PaintJet family color printer devices -###
  2608. + ### Note: there are two different 500C drivers, both contributed by users.###
  2609. + ###   If you have questions about the djet500c driver,                    ###
  2610. + ###       please contact AKayser@et.tudelft.nl.                           ###
  2611. + ###   If you have questions about the cdj* drivers,                       ###
  2612. + ###       please contact g.cameron@biomed.abdn.ac.uk.                     ###
  2613. + cdeskjet_=gdevcdj.$(OBJ) $(HPPCL)
  2614. + cdeskjet.dev: $(cdeskjet_) gssetdev
  2615. +     $(SHP)gssetdev cdeskjet $(cdeskjet_)
  2616. + cdjcolor.dev: $(cdeskjet_) gssetdev
  2617. +     $(SHP)gssetdev cdjcolor $(cdeskjet_)
  2618. + cdjmono.dev: $(cdeskjet_) gssetdev
  2619. +     $(SHP)gssetdev cdjmono $(cdeskjet_)
  2620. + cdj500.dev: $(cdeskjet_) gssetdev
  2621. +     $(SHP)gssetdev cdj500 $(cdeskjet_)
  2622. + cdj550.dev: $(cdeskjet_) gssetdev
  2623. +     $(SHP)gssetdev cdj550 $(cdeskjet_)
  2624. + declj250.dev: $(cdeskjet_) gssetdev
  2625. +     $(SHP)gssetdev declj250 $(cdeskjet_)
  2626. + pj.dev: $(cdeskjet_) gssetdev
  2627. +     $(SHP)gssetdev pj $(cdeskjet_)
  2628. + pjxl.dev: $(cdeskjet_) gssetdev
  2629. +     $(SHP)gssetdev pjxl $(cdeskjet_)
  2630. + pjxl300.dev: $(cdeskjet_) gssetdev
  2631. +     $(SHP)gssetdev pjxl300 $(cdeskjet_)
  2632. + # NB: you can also customise the build if required, using -DA4 (for A4 paper)
  2633. + # and -DBitsPerPixel=<number> if you wish the default to be other than 24
  2634. + # for the generic drivers (cdj500, cdj550, pjxl300, pjtest, pjxltest).
  2635. + # E.g,. to make A4 paper the default, change the second line below this to
  2636. + #    $(CCC) -DA4 gdevdjet.c
  2637. + gdevcdj.$(OBJ): gdevcdj.c $(PDEVH) $(gdevpcl_h)
  2638. +     $(CCC) gdevcdj.c
  2639. + djet500c_=gdevdjtc.$(OBJ) $(HPPCL)
  2640. + djet500c.dev: $(djet500c_) gssetdev
  2641. +     $(SHP)gssetdev djet500c $(djet500c_)
  2642. + gdevdjtc.$(OBJ): gdevdjtc.c $(PDEVH) $(gdevpcl_h)
  2643. + ### ----------------- The generic Epson printer device ----------------- ###
  2644. + epson_=gdevepsn.$(OBJ) gdevprn.$(OBJ)
  2645. + epson.dev: $(epson_) gssetdev
  2646. +     $(SHP)gssetdev epson $(epson_)
  2647. + eps9high.dev: $(epson_) gssetdev
  2648. +     $(SHP)gssetdev eps9high $(epson_)
  2649. + gdevepsn.$(OBJ): gdevepsn.c $(PDEVH)
  2650. + ### ----------------- The IBM Proprinter printer device ---------------- ###
  2651. + ibmpro.dev: $(epson_) gssetdev
  2652. +     $(SHP)gssetdev ibmpro $(epson_)
  2653. + ### -------------- The Epson LQ-2550 color printer device -------------- ###
  2654. + ### Note: this driver was contributed by users: please contact           ###
  2655. + ###       Dave St. Clair (dave@exlog.com) if you have questions.         ###
  2656. + epsonc_=gdevepsc.$(OBJ) gdevprn.$(OBJ)
  2657. + epsonc.dev: $(epsonc_) gssetdev
  2658. +     $(SHP)gssetdev epsonc $(epsonc_)
  2659. + gdevepsc.$(OBJ): gdevepsc.c $(PDEVH)
  2660. + ### -------------- The Epson ESC/P 2 language printer device ----------- ###
  2661. + ### Note: this driver was contributed by a user: if you have questions,  ###
  2662. + ###       please contact Richard Brown (rab@tauon.ph.unimelb.edu.au).    ###
  2663. + escp2_=gdevescp.$(OBJ) gdevprn.$(OBJ)
  2664. + escp2.dev: $(escp2_) gssetdev
  2665. +     $(SHP)gssetdev escp2 $(escp2_)
  2666. + gdevescp.$(OBJ): gdevescp.c $(PDEVH)
  2667. + ### ------------ The H-P PaintJet color printer device ----------------- ###
  2668. + ### Note: this driver also supports the DEC LJ250 color printer, which   ###
  2669. + ###       has a PaintJet-compatible mode, and the PaintJet XL.           ###
  2670. + ### If you have questions about the XL, please contact Rob Reiss         ###
  2671. + ###       (rob@moray.berkeley.edu).                                      ###
  2672. + PJET=gdevpjet.$(OBJ) $(HPPCL)
  2673. + gdevpjet.$(OBJ): gdevpjet.c $(PDEVH) $(gdevpcl_h)
  2674. + lj250.dev: $(PJET) gssetdev
  2675. +     $(SHP)gssetdev lj250 $(PJET)
  2676. + paintjet.dev: $(PJET) gssetdev
  2677. +     $(SHP)gssetdev paintjet $(PJET)
  2678. + pjetxl.dev: $(PJET) gssetdev
  2679. +     $(SHP)gssetdev pjetxl $(PJET)
  2680. + ### ------- The IBM 3852 JetPrinter color inkjet printer device -------- ###
  2681. + ### Note: this driver was contributed by users: please contact           ###
  2682. + ###       Kevin Gift (kgift@draper.com) if you have questions.           ###
  2683. + ### Note that the paper size that can be addressed by the graphics mode  ###
  2684. + ###   used in this driver is fixed at 7-1/2 inches wide (the printable   ###
  2685. + ###   width of the jetprinter itself.)                                   ###
  2686. + jetp3852_=gdev3852.$(OBJ) gdevprn.$(OBJ)
  2687. + jetp3852.dev: $(jetp3852_) gssetdev
  2688. +     $(SHP)gssetdev jetp3852 $(jetp3852_)
  2689. + gdevjetp.$(OBJ): gdevjetp.c $(PDEVH) $(gdevpcl_h)
  2690. + ### ----------------- The Canon LBP-8II printer device ----------------- ###
  2691. + ### Note: this driver was contributed by users: please contact           ###
  2692. + ###       Tom Quinn (trq@prg.oxford.ac.uk) if you have questions.        ###
  2693. + ### Note that the standard paper size for this driver is the European    ###
  2694. + ###   A4 size, not the American 8.5" x 11" size.                         ###
  2695. + lbp8_=gdevlbp8.$(OBJ) gdevprn.$(OBJ)
  2696. + lbp8.dev: $(lbp8_) gssetdev
  2697. +     $(SHP)gssetdev lbp8 $(lbp8_)
  2698. + gdevlbp8.$(OBJ): gdevlbp8.c $(PDEVH)
  2699. + ### -------------- The DEC LN03/LA50/LA75 printer devices -------------- ###
  2700. + ### Note: this driver was contributed by users: please contact           ###
  2701. + ###       Ulrich Mueller (ulm@vsnhd1.cern.ch) if you have questions.     ###
  2702. + ### For questions about LA50 and LA75: please contact                    ###
  2703. + ###       Ian MacPhedran (macphed@dvinci.USask.CA).                     ###
  2704. + ### For the LN03, you can make A4 paper the default: see below.          ###
  2705. + ln03_=gdevln03.$(OBJ) gdevprn.$(OBJ)
  2706. + ln03.dev: $(ln03_) gssetdev
  2707. +     $(SHP)gssetdev ln03 $(ln03_)
  2708. + la50.dev: $(ln03_) gssetdev
  2709. +     $(SHP)gssetdev la50 $(ln03_)
  2710. + la75.dev: $(ln03_) gssetdev
  2711. +     $(SHP)gssetdev la75 $(ln03_)
  2712. + # To make A4 paper the default, change the second line below this to
  2713. + #    $(CCC) -DA4 gdevln03.c
  2714. + gdevln03.$(OBJ): gdevln03.c $(PDEVH)
  2715. +     $(CCC) gdevln03.c
  2716. + ### -------------- The C.Itoh M8510 printer device --------------------- ###
  2717. + ### Note: this driver was contributed by a user: please contact Bob      ###
  2718. + ###       Smith <bob@snuffy.penfield.ny.us> if you have questions.       ###
  2719. + m8510_=gdev8510.$(OBJ) gdevprn.$(OBJ)
  2720. + m8510.dev: $(m8510_) gssetdev
  2721. +     $(SHP)gssetdev m8510 $(m8510_)
  2722. + gdev8510.$(OBJ): gdev8510.c $(PDEVH)
  2723. + ### --------------------- The NEC P6 family devices -------------------- ###
  2724. + necp6_=gdevnp6.$(OBJ) gdevprn.$(OBJ)
  2725. + necp6.dev: $(necp6_) gssetdev
  2726. +     $(SHP)gssetdev necp6 $(necp6_)
  2727. + gdevnp6.$(OBJ): gdevnp6.c $(PDEVH)
  2728. + ### ----------------- The Okidata MicroLine 182 device ----------------- ###
  2729. + ### Note: this driver was contributed by a user: please contact          ###
  2730. + ###       Maarten Koning (smeg@bnr.ca) if you have questions.            ###
  2731. + oki182_=gdevo182.$(OBJ) gdevprn.$(OBJ)
  2732. + oki182.dev: $(oki182_) gssetdev
  2733. +     $(SHP)gssetdev oki182 $(oki182_)
  2734. + gdevo182.$(OBJ): gdevo182.c $(PDEVH)
  2735. + ### ------------- The Ricoh 4081 laser printer device ------------------ ###
  2736. + ### Note: this driver was contributed by users:                          ###
  2737. + ###       please contact kdw@oasis.icl.co.uk if you have questions.      ###
  2738. + r4081_=gdev4081.$(OBJ) gdevprn.$(OBJ)
  2739. + r4081.dev: $(r4081_) gssetdev
  2740. +     $(SHP)gssetdev r4081 $(r4081_)
  2741. + gdev4081.$(OBJ): gdev4081.c $(PDEVH)
  2742. + ###### ------------------------ Sony devices ------------------------ ######
  2743. + ### Note: these drivers were contributed by users: please contact        ###
  2744. + ###       Mike Smolenski (mike@intertech.com) if you have questions.     ###
  2745. + ### ------------------- Sony NeWS frame buffer device ------------------ ###
  2746. + sonyfb_=gdevsnfb.$(OBJ) gdevprn.$(OBJ)
  2747. + sonyfb.dev: $(sonyfb_) gssetdev
  2748. +     $(SHP)gssetdev sonyfb $(sonyfb_)
  2749. + gdevsnfb.$(OBJ): gdevsnfb.c $(PDEVH)
  2750. + ### -------------------- Sony NWP533 printer device -------------------- ###
  2751. + ### Note: this driver was contributed by a user: please contact Tero     ###
  2752. + ###       Kivinen (kivinen@joker.cs.hut.fi) if you have questions.       ###
  2753. + nwp533_=gdevn533.$(OBJ) gdevprn.$(OBJ)
  2754. + nwp533.dev: $(nwp533_) gssetdev
  2755. +     $(SHP)gssetdev nwp533 $(nwp533_)
  2756. + gdevn533.$(OBJ): gdevn533.c $(PDEVH)
  2757. + ### ------------------------- The SPARCprinter ------------------------- ###
  2758. + ### Note: this driver was contributed by users: please contact Martin    ###
  2759. + ###       Schulte (schulte@thp.uni-koeln.de) if you have questions.      ###
  2760. + ###       He would also like to hear from anyone using the driver.       ###
  2761. + ### Please consult the source code for additional documentation.         ###
  2762. + sparc_=gdevsppr.$(OBJ) gdevprn.$(OBJ)
  2763. + sparc.dev: $(sparc_) gssetdev
  2764. +     $(SHP)gssetdev sparc $(sparc_)
  2765. + gdevsppr.$(OBJ): gdevsppr.c $(PDEVH)
  2766. + ###### --------------------- The SunView device --------------------- ######
  2767. + ### Note: this driver is maintained by a user: if you have questions,    ###
  2768. + ###       please contact Andreas Stolcke (stolcke@icsi.berkeley.edu).    ###
  2769. + sunview_=gdevsun.$(OBJ)
  2770. + sunview.dev: $(sunview_) gssetdev gsaddmod
  2771. +     $(SHP)gssetdev sunview $(sunview_)
  2772. +     $(SHP)gsaddmod sunview -lib suntool sunwindow pixrect
  2773. + gdevsun.$(OBJ): gdevsun.c $(GDEV) $(arch_h)
  2774. + ### ----------------- Tektronix 4396d color printer -------------------- ###
  2775. + ### Note: this driver was contributed by a user: please contact          ###
  2776. + ###       Karl Hakimian (hakimian@haney.eecs.wsu.edu)                    ###
  2777. + ###       if you have questions.                                         ###
  2778. + t4693d_=gdev4693.$(OBJ) gdevprn.$(OBJ)
  2779. + t4693d2.dev: $(t4693d_) gssetdev
  2780. +     $(SHP)gssetdev t4693d2 $(t4693d_)
  2781. + t4693d4.dev: $(t4693d_) gssetdev
  2782. +     $(SHP)gssetdev t4693d4 $(t4693d_)
  2783. + t4693d8.dev: $(t4693d_) gssetdev
  2784. +     $(SHP)gssetdev t4693d8 $(t4693d_)
  2785. + gdev4693.$(OBJ): gdev4693.c $(GDEV)
  2786. + ### -------------------- Tektronix ink-jet printers -------------------- ###
  2787. + ### Note: this driver was contributed by a user: please contact          ###
  2788. + ###       Karsten Spang (spang@nbivax.nbi.dk) if you have questions.     ###
  2789. + tek4696_=gdevtknk.$(OBJ) gdevprn.$(OBJ)
  2790. + tek4696.dev: $(tek4696_) gssetdev
  2791. +     $(SHP)gssetdev tek4696 $(tek4696_)
  2792. + gdevtknk.$(OBJ): gdevtknk.c $(PDEVH)
  2793. + ### ----------------- The TruFax facsimile device ---------------------- ###
  2794. + ### Note: this driver was contributed by users: please contact           ###
  2795. + ###       Neil Ostroff (nao@maestro.bellcore.com) if you have questions. ###
  2796. + ### Note that the driver requires a file encode_l.o supplied by the      ###
  2797. + ###   makers of the TruFax product.                                      ###
  2798. + trufax_=gdevtrfx.$(OBJ) gdevprn.$(OBJ) encode_l.$(OBJ)
  2799. + trufax.dev: $(trufax_) gssetdev
  2800. +     $(SHP)gssetdev trufax $(trufax_)
  2801. + gdevtrfx.$(OBJ): gdevtrfx.c $(GDEV)
  2802. + ###### ----------------------- The X11 device ----------------------- ######
  2803. + # Aladdin Enterprises does not support Ghostview.  For more information
  2804. + # about Ghostview, please contact Tim Theisen (ghostview@cs.wisc.edu).
  2805. + x11_=gdevx.$(OBJ) gdevxini.$(OBJ) gdevxxf.$(OBJ) gdevemap.$(OBJ)
  2806. + x11.dev: $(x11_) gssetdev gsaddmod
  2807. +     $(SHP)gssetdev x11 $(x11_)
  2808. +     $(SHP)gsaddmod x11 -lib Xt X11 Xext
  2809. + # See the main makefile for the definition of XINCLUDE.
  2810. + GDEVX=$(GDEV) x_.h gdevx.h $(MAKEFILE)
  2811. + gdevx.$(OBJ): gdevx.c $(GDEVX) $(gsprops_h) $(gsutil_h)
  2812. +     $(CCC) $(XINCLUDE) gdevx.c
  2813. + gdevxini.$(OBJ): gdevxini.c $(GDEVX) $(ctype__h)
  2814. +     $(CCC) $(XINCLUDE) gdevxini.c
  2815. + gdevxxf.$(OBJ): gdevxxf.c $(GDEVX) $(gsutil_h) $(gxxfont_h)
  2816. +     $(CCC) $(XINCLUDE) gdevxxf.c
  2817. + ### ---------------------- The bit bucket device ----------------------- ###
  2818. + bit_=gdevbit.$(OBJ) gdevprn.$(OBJ)
  2819. + bit.dev: $(bit_) gssetdev
  2820. +     $(SHP)gssetdev bit $(bit_)
  2821. + gdevbit.$(OBJ): gdevbit.c $(PDEVH)
  2822. + ###### ----------------------- PC file formats ---------------------- ######
  2823. + gdevpccm.$(OBJ): gdevpccm.c $(AK) \
  2824. +   $(gs_h) $(gsmatrix_h) $(gxdevice_h) $(gdevpccm_h)
  2825. + ### ------------------------- .BMP file formats ------------------------- ###
  2826. + bmp_=gdevbmp.$(OBJ) gdevpccm.$(OBJ) gdevprn.$(OBJ)
  2827. + gdevbmp.$(OBJ): gdevbmp.c $(PDEVH) $(gdevpccm_h)
  2828. + bmpmono.dev: $(bmp_) gssetdev
  2829. +     $(SHP)gssetdev bmpmono $(bmp_)
  2830. + bmp16.dev: $(bmp_) gssetdev
  2831. +     $(SHP)gssetdev bmp16 $(bmp_)
  2832. + bmp256.dev: $(bmp_) gssetdev
  2833. +     $(SHP)gssetdev bmp256 $(bmp_)
  2834. + bmp16m.dev: $(bmp_) gssetdev
  2835. +     $(SHP)gssetdev bmp16m $(bmp_)
  2836. + ### ------------------------- GIF file formats ------------------------- ###
  2837. + GIF=gdevgif.$(OBJ) gdevpccm.$(OBJ) gdevprn.$(OBJ)
  2838. + gdevgif.$(OBJ): gdevgif.c $(PDEVH) $(gdevpccm_h)
  2839. + gifmono.dev: $(GIF) gssetdev
  2840. +     $(SHP)gssetdev gifmono $(GIF)
  2841. + gif8.dev: $(GIF) gssetdev
  2842. +     $(SHP)gssetdev gif8 $(GIF)
  2843. + ### ------------------------- PCX file formats ------------------------- ###
  2844. + pcx_=gdevpcx.$(OBJ) gdevpccm.$(OBJ) gdevprn.$(OBJ)
  2845. + gdevpcx.$(OBJ): gdevpcx.c $(PDEVH) $(gdevpccm_h) $(gxlum_h)
  2846. + pcxmono.dev: $(pcx_) gssetdev
  2847. +     $(SHP)gssetdev pcxmono $(pcx_)
  2848. + pcxgray.dev: $(pcx_) gssetdev
  2849. +     $(SHP)gssetdev pcxgray $(pcx_)
  2850. + pcx16.dev: $(pcx_) gssetdev
  2851. +     $(SHP)gssetdev pcx16 $(pcx_)
  2852. + pcx256.dev: $(pcx_) gssetdev
  2853. +     $(SHP)gssetdev pcx256 $(pcx_)
  2854. + ###### ------------------- Portable Bitmap devices ------------------ ######
  2855. + ### For more information, see the pbm(5), pgm(5), and ppm(5) man pages.  ###
  2856. + pxm_=gdevpbm.$(OBJ) gdevprn.$(OBJ)
  2857. + gdevpbm.$(OBJ): gdevpbm.c $(PDEVH) $(gxlum_h)
  2858. + ### Portable Bitmap (PBM, plain or raw format, magic numbers "P1" or "P4")
  2859. + pbm.dev: $(pxm_) gssetdev
  2860. +     $(SHP)gssetdev pbm $(pxm_)
  2861. + pbmraw.dev: $(pxm_) gssetdev
  2862. +     $(SHP)gssetdev pbmraw $(pxm_)
  2863. + ### Portable Graymap (PGM, plain or raw format, magic numbers "P2" or "P5")
  2864. + pgm.dev: $(pxm_) gssetdev
  2865. +     $(SHP)gssetdev pgm $(pxm_)
  2866. + pgmraw.dev: $(pxm_) gssetdev
  2867. +     $(SHP)gssetdev pgmraw $(pxm_)
  2868. + ### Portable Pixmap (PPM, plain or raw format, magic numbers "P3" or "P6")
  2869. + ppm.dev: $(pxm_) gssetdev
  2870. +     $(SHP)gssetdev ppm $(pxm_)
  2871. + ppmraw.dev: $(pxm_) gssetdev
  2872. +     $(SHP)gssetdev ppmraw $(pxm_)
  2873. + ### -------------------------- TIFF/F device ---------------------------- ###
  2874. + ###    This driver outputs images in a TIFF format               ###
  2875. + ###    Use -sDEVICE=tiffg3 and                          ###
  2876. + ###      -r204x98 for low resolution output, or              ###
  2877. + ###      -r204x196 for high resolution output                  ###
  2878. + ###    Note also that 3 page sizes are understood: letter, A4, and B4      ###
  2879. + ### Note: this driver was contributed by a user: please contact           ###
  2880. + ###       Sam Leffler (sam@sgi.com) if you have questions.              ###
  2881. + tiffg3_=gdevtiff.$(OBJ) gdevprn.$(OBJ)
  2882. + tiffg3.dev: $(tiffg3_) gssetdev
  2883. +     $(SHP)gssetdev tiffg3 $(tiffg3_)
  2884. + gdevtiff.$(OBJ): gdevtiff.c $(GDEV) $(gdevprn_h) gdevdfg3.h gdevtiff.h
  2885. + #    Copyright (C) 1990, 1992, 1993 Aladdin Enterprises.  All rights reserved.
  2886. + #
  2887. + # This file is part of Ghostscript.
  2888. + #
  2889. + # Ghostscript is distributed in the hope that it will be useful, but
  2890. + # WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
  2891. + # to anyone for the consequences of using it or for whether it serves any
  2892. + # particular purpose or works at all, unless he says so in writing.  Refer
  2893. + # to the Ghostscript General Public License for full details.
  2894. + #
  2895. + # Everyone is granted permission to copy, modify and redistribute
  2896. + # Ghostscript, but only under the conditions described in the Ghostscript
  2897. + # General Public License.  A copy of this license is supposed to have been
  2898. + # given to you along with Ghostscript so you can know your rights and
  2899. + # responsibilities.  It should be in a file named COPYING.  Among other
  2900. + # things, the copyright notice and this notice must be preserved on all
  2901. + # copies.
  2902. + # Partial makefile for Ghostscript, common to all Unix configurations.
  2903. + # This is the last part of the makefile for Unix configurations.
  2904. + # Since Unix make doesn't have an 'include' facility, we concatenate
  2905. + # the various parts of the makefile together by brute force (in tar_cat).
  2906. + # The following prevents GNU make from constructing argument lists that
  2907. + # include all environment variables, which can easily be longer than
  2908. + # brain-damaged system V allows.
  2909. + .NOEXPORT:
  2910. + # -------------------------------- Library -------------------------------- #
  2911. + ## The Commodore Amiga
  2912. + amiga__=gp_nofb.$(OBJ) gp_amiga.$(OBJ) gdevpipe.$(OBJ)
  2913. + amiga_.dev: $(amiga__) gssetmod gsaddmod
  2914. +     $(SHP)gssetmod amiga_ $(amiga__)
  2915. +     $(SHP)gsaddmod amiga_ -fdev pipe
  2916. + gp_amiga.$(OBJ): gp_amiga.c $(AK) $(memory__h) $(string__h) $(gx_h) $(gp_h) \
  2917. + ## The Unix platforms
  2918. + # We have to include a test for the existence of sys/time.h,
  2919. + # because some System V platforms don't have it.
  2920. + # All reasonable Unix platforms.
  2921. + unix__=gp_nofb.$(OBJ) gp_unix.$(OBJ) gdevpipe.$(OBJ)
  2922. + unix_.dev: $(unix__) gssetmod gsaddmod
  2923. +     $(SHP)gssetmod unix_ $(unix__)
  2924. +     $(SHP)gsaddmod unix_ -fdev pipe
  2925. + gp_unix.$(OBJ): gp_unix.c $(AK) $(memory__h) $(string__h) $(gx_h) $(gp_h) \
  2926. +  $(gsutil_h) $(stat__h) $(time__h)
  2927. +     if ( test -f /gnu/include/sys/time.h ) then $(CCC) gp_unix.c;\
  2928. +     else $(CCC) -DNOSYSTIME gp_unix.c; fi
  2929. + gdevpipe.$(OBJ): gdevpipe.c $(AK) $(stdio__h) $(gstypes_h) \
  2930. +   $(filedev_h) $(stream_h)
  2931. + # Brain-damaged System V platforms.
  2932. + sysv__=gp_nofb.$(OBJ) gp_unix.$(OBJ) gp_sysv.$(OBJ)
  2933. + sysv_.dev: $(sysv__) gssetmod
  2934. +     $(SHP)gssetmod sysv_ $(sysv__)
  2935. + gp_sysv.$(OBJ): gp_sysv.c $(time__h) $(AK)
  2936. +     if ( test -f /gnu/include/sys/time.h ) then $(CCC) gp_sysv.c;\
  2937. +     else $(CCC) -DNOSYSTIME gp_sysv.c; fi
  2938. + # -------------------------- Auxiliary programs --------------------------- #
  2939. + ansi2knr$(XE): ansi2knr.c $(stdio__h) $(string__h) $(malloc__h)
  2940. +     $(CC) -o ansi2knr$(XE) $(CFLAGS) ansi2knr.c
  2941. + echogs$(XE): echogs.c
  2942. +     $(CC) -o echogs$(XE) $(CFLAGS) echogs.c
  2943. + # On the RS/6000 (at least), compiling genarch.c with gcc with -O
  2944. + # produces a buggy executable.
  2945. + genarch$(XE): genarch.c
  2946. +     $(CC) -o genarch$(XE) genarch.c
  2947. + genconf$(XE): genconf.c
  2948. +     $(CC) -o genconf$(XE) genconf.c
  2949. + # ----------------------------- Main program ------------------------------ #
  2950. + BEGINFILES=
  2951. + CCBEGIN=$(CCC) *.c
  2952. + # Interpreter main program
  2953. + GSAMIGA=gs.$(OBJ) gsmain.$(OBJ) $(INT) $(LIBGS)
  2954. + # The second call on echogs writes a \.  This is the only
  2955. + # way to do it that works with all flavors of shell!
  2956. + $(GS)$(XE): $(GSAMIGA) ld.tr echogs $(ALL_DEVS)
  2957. +     ./echogs -n - $(CC) $(LDFLAGS) $(XLIBDIRS) -o gs $(GSAMIGA) >_temp_
  2958. +     ./echogs -x 205c >>_temp_
  2959. +     cat ld.tr >>_temp_
  2960. +     ./echogs - $(EXTRALIBS) -lm >>_temp_
  2961. +     $(SH) <_temp_
  2962. + # Installation
  2963. + TAGS:
  2964. +     etags -t *.c *.h
  2965. + docdir=$(gsdatadir)/doc
  2966. + exdir=$(gsdatadir)/examples
  2967. + install: $(GS)
  2968. +     if [ -d $(bindir) ]; then true; else mkdir $(bindir); fi
  2969. +     if [ -d $(datadir) ]; then true; else mkdir $(datadir); fi
  2970. +     if [ -d $(gsdatadir) ]; then true; else mkdir $(gsdatadir); fi
  2971. +     if [ -d $(gsdatadir)/fonts ]; then true; else mkdir $(gsdatadir)/fonts; fi
  2972. +     if [ -d $(docdir) ]; then true; else mkdir $(docdir); fi
  2973. +     if [ -d $(exdir) ]; then true; else mkdir $(exdir); fi
  2974. +     for f in $(GS) gsbj gsdj gslj gslp gsnd bdftops font2c ps2ascii ps2epsi ; do $(INSTALL_PROGRAM) $$f $(bindir)/$$f ; done
  2975. +     for f in README gslp.ps gs_init.ps gs_dps1.ps gs_fonts.ps gs_lev2.ps gs_statd.ps gs_type0.ps gs_dbt_e.ps gs_sym_e.ps quit.ps Fontmap uglyr.gsf bdftops.ps decrypt.ps font2c.ps impath.ps landscap.ps level1.ps prfont.ps ps2ascii.ps ps2epsi.ps ps2image.ps pstoppm.ps showpage.ps type1ops.ps wrfont.ps ; do $(INSTALL_DATA) $$f $(gsdatadir)/$$f ; done
  2976. +     for f in NEWS ansi2knr.1 devices.doc drivers.doc fonts.doc gs.1 hershey.doc history.doc humor.doc language.doc lib.doc make.doc ps2epsi.doc psfiles.doc readme.doc use.doc xfonts.doc ; do $(INSTALL_DATA) $$f $(docdir)/$$f ; done
  2977. +     for f in chess.ps cheq.ps colorcir.ps golfer.ps escher.ps snowflak.ps tiger.ps ; do $(INSTALL_DATA) $$f $(exdir)/$$f ; done
  2978. diff -rc --new-file /src/baseline/gs-2.6.1.4/amiga.doc gs-2.6.1.4/amiga.doc
  2979. *** /src/baseline/gs-2.6.1.4/amiga.doc    Thu Jan  1 00:00:00 1970
  2980. --- gs-2.6.1.4/amiga.doc    Wed Feb  2 13:38:30 1994
  2981. ***************
  2982. *** 0 ****
  2983. --- 1,318 ----
  2984. + GNU Ghostscript 2.6.1 Amiga port, revised 29 January 1994
  2985. + =========================================================
  2986. + This port requires:
  2987. + - An  Amiga  equipped  with  an '020 CPU or any successor CPU model and and
  2988. +   Kickstart 2.04 or higher.
  2989. + - Approx. 4.7 MBytes of hard disk space available.
  2990. + - A  minimum  of 1 MByte of chip memory, depending on what you will want to
  2991. +   do  with  the  interpreter.  Printer output requires at least 2 MBytes of
  2992. +   contiguous memory (any memory, not necessarily chip memory).
  2993. + - ixemul.library and a bunch of Postscript/Ghostscript fonts.
  2994. + New features in the revised v2.6.1 release
  2995. + ------------------------------------------
  2996. + By  public  request  I have recompiled the program to use the built-in math
  2997. + library,  so  you  no  longer need an FPU to run the program. I also took a
  2998. + closer  look  at  the  code  which  tries  to  determine  the  printer page
  2999. + resolution:  you  will  no  longer  have  trouble  with  printers featuring
  3000. + built-in  paper  tractors.  I  tried all printer drivers to be found on the
  3001. + Workbench  disk  to  make  sure the printer support code really works. Good
  3002. + luck!  Some  small  bugs  were  ironed  out and I also took the time to add
  3003. + support  for  another  two  display  drivers  (the  Picasso II driver which
  3004. + requires  the  Picasso  monitor  driver  v2.14  to  work  correctly and the
  3005. + `custom' driver which requires asl.library v38 to be installed). The entire
  3006. + program was recompiled using GCC 2.4.5.
  3007. + New Amiga features in release v2.6.1
  3008. + ------------------------------------
  3009. + The  v2.6.0 port used to implement only monochrome drivers, the v2.6.1 port
  3010. + supports  colour  output on most devices, exceptions where noted. You don't
  3011. + need  a  special  brand  of graphics hardware expansion, colour output will
  3012. + work  on  any  Amiga  model, provided there is enough memory available. All
  3013. + devices capable of doing colour output will reduce the number of colours to
  3014. + be displayed if in dire need of memory. As for the display oriented devices
  3015. + this will go mostly unnoticed as the Ghostscript halftoning algorithms will
  3016. + compensate  for  any  colour reductions. However, printer output quality is
  3017. + very likely to suffer from colour reduction. So, watch out!
  3018. +    As  the display oriented devices start up in colour output mode, black &
  3019. + white  rendering  may  be slightly slowed. The printer device is configured
  3020. + according  to  the  Preferences  settings;  `Black  & white' will result in
  3021. + monochrome  output,  `Grayscale  1'  and  `Grayscale  2'  will also produce
  3022. + monochrome  output  but will internally use a true colour representation of
  3023. + the  page,  so  does  `Color'. Please note that `true colour' refers to the
  3024. + Amiga  12  bit colour model, at this time of writing 24 bit colour printing
  3025. + is not yet implemented.
  3026. +    The  default  output  device  (a  super-bitmap  window  to opened on the
  3027. + default  public  screen,  such  as  Workbench)  will  take advantage of the
  3028. + Kickstart  3.0  pen  sharing  feature  if  enough  colours  (eight or more)
  3029. + are available.
  3030. + The v2.6.0 port used to rely on printer drivers to initialize their maximum
  3031. + page  size  information  upon startup. Several users reported problems with
  3032. + certain  drivers  which  would  make  this information available only after
  3033. + having  been  asked  to do so. The v2.6.1 port now follows the programmers'
  3034. + guidelines  how  to determine the maximum page size closely. The driver may
  3035. + still  complain  if  configured for `Grayscale 1', `Grayscale 2' or `Color'
  3036. + output  and  there  is  not  enough  memory  available  for  the page to be
  3037. + displayed.
  3038. + Installation
  3039. + ------------
  3040. + Enter  the  command  line interpreter, Create a directory on your hard disk
  3041. + drive,  label  it "ghostscript". Let's assume that the fully qualified name
  3042. + of  this  directory  will  be  "Work:ghostscript". Enter this directory and
  3043. + unpack  the  archive  "gs-2.6.1-amiga.lha".  This will create the directory
  3044. + "doc" which contains the Ghostscript documentation files, and the directory
  3045. + "examples" which is to hold some Postscript example files. To add the fonts
  3046. + from  the  Ghostscript distribution (not included in this release) create a
  3047. + directory  called  "Fonts" in the directory "Work:ghostscript" and copy all
  3048. + the  font files into it. You also need the `ixemul.library' included in the
  3049. + Amiga GCC distribution which should be copied to the `Libs:' directory. Now
  3050. + edit your `S:User-Startup' file, adding the following lines:
  3051. +    Assign ghostscript: "Work:ghostscript"
  3052. +    Path ghostscript: add
  3053. + Save the file back to disk and reboot your machine.
  3054. + Running the interpreter
  3055. + -----------------------
  3056. + Enter  the  command  line  interpreter,  type  "gs"  and  press return. The
  3057. + interpreter   will  be  loaded  and  will  try  to  initialize  itself.  If
  3058. + successfully initialized, a window should have been opened on the Workbench
  3059. + screen. The Shell window now should display the following text:
  3060. +    Initializing... done.
  3061. +    Ghostscript 2.6.1 (5/28/93)
  3062. +    Copyright (C) 1990-1993 Aladdin Enterprises, Menlo Park, CA.
  3063. +      All rights reserved.
  3064. +    Ghostscript comes with NO WARRANTY: see the file COPYING for details.
  3065. +    GS>
  3066. + At  the  command  prompt,  enter "(ghostscript:examples/golfer.ps) run" and
  3067. + press  return.  Click  on  the `Zoom' button in the top right corner of the
  3068. + window  to  bring it to full screen size, move the scrollers and watch what
  3069. + will  happen. When rendering is finished, the Shell window will display the
  3070. + following text:
  3071. +    >>showpage, press <return> to continue<<
  3072. + Press  return  to  erase  the  contents  of the window and to continue. The
  3073. + interpreter  will  be  in  interactive  mode  again, enter "quit" and press
  3074. + return to end this session.
  3075. + For  more  information  refer to the documentation in the "ghostscript:doc"
  3076. + drawer.
  3077. + How to print a document
  3078. + -----------------------
  3079. + As the corresponding Ghostscript device will always keep the entire page in
  3080. + memory  the  printer need not be capable of strip-printing. The bad news is
  3081. + that  the  entire page will consume *a lot* of memory. This Amiga port will
  3082. + keep  the page in any public memory area, so it will not necessarily eat up
  3083. + precious chip memory. This should make it possible to print pages on Amigas
  3084. + with  only  1  MByte of chip memory or less, provided enough fast memory is
  3085. + available.
  3086. + Enter  the  command  line interpreter, type "gs -sDEVICE=amiga_printer" and
  3087. + press  return.  This  will  invoke  the  Ghostscript  interpreter  with the
  3088. + "amiga_printer"  device  driver  selected  as  the startup device. When the
  3089. + command prompt appears, enter "(ghostscript:examples/butterfly.ps) run" and
  3090. + press return. The rendered image will be sent to the printer. When printing
  3091. + is finished, press return and enter "quit" to end this session.
  3092. + Note:  unless you want Ghostscript to prompt you to press return after each
  3093. + page  is  printed and ejected you should include "-dNOPAUSE" on the command
  3094. + line.
  3095. + Available device drivers
  3096. + ------------------------
  3097. + This port implements the following nine device drivers:
  3098. +    amiga
  3099. +       (This is the default output device)
  3100. +       Rendering  takes  place  in a super-bitmap window to be opened on the
  3101. +       Workbench  screen.  This  window  contains  scroller  handles to move
  3102. +       around in the bitmap. Usually, the bitmap will be four times as large
  3103. +       as the screen the window opens upon.
  3104. +    amiga_low
  3105. +       Renders into a low-resolution custom screen.
  3106. +    amiga_high
  3107. +       Renders into a high-resolution custom screen.
  3108. +    amiga_super
  3109. +       Renders into a super-high-resolution custom screen.
  3110. +    amiga_a2024¹
  3111. +       Renders into an A2024 resolution custom screen.
  3112. +    amiga_picassoii
  3113. +       Renders  into  a Picasso  II custom  screen (note: a plain  Intuition
  3114. +       custom screen  will be opened, this  driver will not directly  access
  3115. +       the  Picasso II  hardware).  The  Picasso  monitor  driver  v2.14  is
  3116. +       required for this driver to work.
  3117. +    amiga_custom
  3118. +       Unlike   the  other  display  drivers  which  will  open  screens  in
  3119. +       predefined  resolutions  and modes the `amiga_custom' driver will let
  3120. +       you select the display mode to use. On first invocation of the driver
  3121. +       a  screen mode requester will be opened for you to select the display
  3122. +       mode  to use. The name of the display mode selected will be stored in
  3123. +       a local environment variable called "GSCUSTOMMODE". The next time you
  3124. +       run  the  GhostScript  interpreter  with  the  `amiga_custom'  device
  3125. +       selected   the   device   will  try  to  read  the  contents  of  the
  3126. +       "GSCUSTOMMODE"  variable.  The list of screen display modes available
  3127. +       will  be scanned for a mode which name matches the variable. Wildcard
  3128. +       patterns  are  supported,  so  setting "GSCUSTOMMODE" to "#?lowres#?"
  3129. +       will  match  any  screen display mode with the string "lowres" in it,
  3130. +       such  as "NTSC:LowRes", "PAL:LowRes", etc. If you wish, you could set
  3131. +       the  global  environment  variable  "GSCUSTOMMODE" to a special value
  3132. +       which the `amiga_custom' device will always use. Please note that the
  3133. +       screen  mode  requester  will  only  be  opened if no local or global
  3134. +       environment variable "GSCUSTOMMODE" is defined.
  3135. +    amiga_printer
  3136. +       Outputs  pages  on  the  currently  configured  preferences  printer.
  3137. +       Respects density and resolution settings. Requires a lot of memory to
  3138. +       run.
  3139. +    amiga_ilbm¹
  3140. +       Will prompt for a file name to save the current page contents to. The
  3141. +       page  will  be  saved  as  a standard IFF-ILBM picture, including DPI
  3142. +       information,   suitable   for  postprocessing  using  standard  image
  3143. +       processing and editing software.
  3144. +    ¹) Monochrome output only
  3145. + Properties
  3146. + ----------
  3147. + With  Ghostscript  2.6.1 one can specify several driver specific options on
  3148. + the  command  line.  As  for  the Amiga drivers, they support the following
  3149. + properties:
  3150. + - PageWidth and PageHeight
  3151. +   The  dimensions  of  the  page  to  render  into.  The physical page size
  3152. +   Ghostscript  will  use  for  rendering is limited by these dimensions. On
  3153. +   startup  The Amiga drivers will default to a page size roughly equivalent
  3154. +   to A4 unless different dimensions are specified. The size definitions may
  3155. +   include  measuring  units  (e.g. "-sPageWidth=21cm"), the following units
  3156. +   are  supported: pt (points, the default if no unit is given), pc (picas),
  3157. +   in  (inches),  cm  (centimeters), mm (millimeters), dd (didôt points), cc
  3158. +   (ciceros).
  3159. + - OutputFile
  3160. +   The  amiga_ilbm device pays attention to this property, which it will use
  3161. +   to  construct  the  output  file  names for pages to be saved with. Thus,
  3162. +   `-sOutputFile="ram:page"'    yields    the   files   "ram:page0001.ilbm",
  3163. +   "ram:page0002.ilbm", etc.
  3164. + Not all devices will pay attention to DPI page resolutions.
  3165. + Installing fonts
  3166. + ----------------
  3167. + The   Ghostscript  distribution  includes  a  number  of  public-domain  or
  3168. + otherwise  freely  distributable  fonts.  However, these are mostly of poor
  3169. + quality.  In  order  to  install  a  new  font  or to replace a font with a
  3170. + different one, the following steps are required:
  3171. + 1. The  font  must  be  converted  to  Ghostscript format. For font files in
  3172. +    BDF-format  (such  as  the  fonts included in the X-Windows distribution)
  3173. +    this  requires  processing  with  the  "bdftops"  script  file (syntax is
  3174. +    "bdftops <Source file> <Destination file>"). Fonts in standard ASCII text
  3175. +    format (".PFA" format) or packed binary file format (".PFB" format), such
  3176. +    as  most  Adobe-Type-1  hinted outline fonts to be purchased from various
  3177. +    vendors, need  not  be converted as this is the native format Ghostscript
  3178. +    expects.
  3179. + 2. Copy  the resulting output file to the "ghostscript:fonts" drawer, choose
  3180. +    a   suitable   name   (see   the   file  "ghostscript:fontmap"  for  more
  3181. +    information).
  3182. + 3. Edit  the  file "ghostscript:fontmap" to include the font which will make
  3183. +    it visible to the interpreter. Read this file carefully as it gives basic
  3184. +    hints  how  to  name  a  font file and how to edit the corresponding font
  3185. +    entry.
  3186. + The Workbench window
  3187. + --------------------
  3188. + The  default output device (the Workbench window) can be controlled both by
  3189. + mouse and by keyboard:
  3190. +    Cursor  keys  will  move the currently visible area of the page, holding
  3191. +    down  a  Shift  or  Control  key will increase the size of the scrolling
  3192. +    steps.
  3193. +    Control+C  and  Escape  will  send the interpreter a signal to terminate
  3194. +    processing, so does clicking the window close button.
  3195. + By  default  the  page  size  will  always  be  four  times as large as the
  3196. + currently visible portion of the Workbench screen, see the section entitled
  3197. + "Page sizes and resolutions" for more information.
  3198. + Troubleshooting
  3199. + ---------------
  3200. + This  interpreter  implementation  requires a lot of chip memory to run. In
  3201. + order  to  assure that enough memory will be available, close any Workbench
  3202. + drawers  or  Shell  windows  which  are  not necessarily require to run the
  3203. + interpreter.
  3204. + Most  Postscript  documents  use  hard-coded  document page sizes, i.e. the
  3205. + output  page  size  will not be scaled to fit the currently set output page
  3206. + size.  In  these  cases  you may want to make use of the Postscript "scale"
  3207. + operator. Say, you wish to preview the file "butterfly.ps" in just half its
  3208. + size.  Enter  "0.5  dup  scale" and press return, now enter "(butterfly.ps)
  3209. + run"  and  press return; et voilà: the butterfly will be rendered just half
  3210. + as large as usual.
  3211. + Some  documents,  such  as  "porsche.ps",  contain no "showpage" command to
  3212. + finish  the  batch  job.  In this case, type "showpage" and press return or
  3213. + enter "erasepage" and press return to clear the page.
  3214. + About the Amiga port
  3215. + --------------------
  3216. + This  port  is  based  on  Ghostscript  2.6.1. It was implemented using GCC
  3217. + 2.4.5,  so  you  will  have  to refer to the file "COPYING" for copying and
  3218. + licensing information.
  3219. +                       This Amiga port was created by:
  3220. +                            Olaf `Olsen' Barthel
  3221. +                              Brabeckstrasse 35
  3222. +                              D-30559 Hannover
  3223. +                         Federal Republic of Germany
  3224. +                        eMail: olsen@sourcery.han.de
  3225. + The source code is included in the "amiga-src" drawer.
  3226. diff -rc --new-file /src/baseline/gs-2.6.1.4/bdftops gs-2.6.1.4/bdftops
  3227. *** /src/baseline/gs-2.6.1.4/bdftops    Tue Oct 22 03:12:14 1991
  3228. --- gs-2.6.1.4/bdftops    Thu Jan 27 21:39:12 1994
  3229. ***************
  3230. *** 1 ****
  3231. ! gs -q -dNODISPLAY -- bdftops.ps $*
  3232. --- 1,4 ----
  3233. ! .key ARGS/F
  3234. ! .bra {
  3235. ! .ket }
  3236. ! gs -q -dNODISPLAY -- bdftops.ps {ARGS}
  3237. diff -rc --new-file /src/baseline/gs-2.6.1.4/configure gs-2.6.1.4/configure
  3238. *** /src/baseline/gs-2.6.1.4/configure    Thu Jan  1 00:00:00 1970
  3239. --- gs-2.6.1.4/configure    Sun May  1 17:33:33 1994
  3240. ***************
  3241. *** 0 ****
  3242. --- 1,623 ----
  3243. + #!/bin/sh
  3244. + # Guess values for system-dependent variables and create Makefiles.
  3245. + # Generated automatically using autoconf version 1.9 
  3246. + # Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
  3247. + # This configure script is free software; you can redistribute it and/or
  3248. + # modify it under the terms of the GNU General Public License as published
  3249. + # by the Free Software Foundation; either version 2, or (at your option)
  3250. + # any later version.
  3251. + # This script is distributed in the hope that it will be useful, but
  3252. + # WITHOUT ANY WARRANTY; without even the implied warranty of
  3253. + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
  3254. + # Public License for more details.
  3255. + # You should have received a copy of the GNU General Public License
  3256. + # along with this program; if not, write to the Free Software
  3257. + # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  3258. + # Save the original args to write them into config.status later.
  3259. + configure_args="$*"
  3260. + # Only options that might do something get documented.
  3261. + ac_usage="Usage: configure [options] [host]
  3262. + Options: [defaults in brackets after descriptions]
  3263. + --build=BUILD        configure for building on BUILD [BUILD=HOST]
  3264. + --disable-FEATURE    do not include FEATURE (same as --enable-FEATURE=no)
  3265. + --enable-FEATURE[=ARG]    include FEATURE [ARG=yes]
  3266. + --exec-prefix=PREFIX    install host dependent files in PREFIX [/usr/local]
  3267. + --help            print this message
  3268. + --host=HOST        configure for HOST [guessed]
  3269. + --prefix=PREFIX        install host independent files in PREFIX [/usr/local]
  3270. + --quiet, --silent    do not print \`checking for...' messages
  3271. + --srcdir=DIR        find the sources in DIR [configure dir or ..]
  3272. + --target=TARGET        configure for TARGET [TARGET=HOST]
  3273. + --verbose        print results of checks
  3274. + --version        print the version of autoconf that created configure
  3275. + --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  3276. + --without-PACKAGE    do not use PACKAGE (same as --with-PACKAGE=no)
  3277. + --x-includes=DIR    X include files are in DIR
  3278. + --x-libraries=DIR    X library files are in DIR"
  3279. + # Initialize some variables set by options.
  3280. + # The variables have the same names as the options, with
  3281. + # dashes changed to underlines.
  3282. + build=NONE
  3283. + exec_prefix=
  3284. + host=NONE
  3285. + no_create=
  3286. + nonopt=NONE
  3287. + norecursion=
  3288. + prefix=
  3289. + program_prefix=
  3290. + program_suffix=
  3291. + program_transform_name=
  3292. + silent=
  3293. + srcdir=
  3294. + target=NONE
  3295. + verbose=
  3296. + x_includes=
  3297. + x_libraries=
  3298. + ac_prev=
  3299. + for ac_option
  3300. + do
  3301. +   # If the previous option needs an argument, assign it.
  3302. +   if test -n "$ac_prev"; then
  3303. +     eval "$ac_prev=\$ac_option"
  3304. +     ac_prev=
  3305. +     continue
  3306. +   fi
  3307. +   # Accept (but ignore some of) the important Cygnus configure
  3308. +   # options, so we can diagnose typos.
  3309. +   case "$ac_option" in
  3310. +   -*=*) ac_optarg=`/bin/echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  3311. +   *) ac_optarg= ;;
  3312. +   esac
  3313. +   case "$ac_option" in
  3314. +   -build | --build | --buil | --bui | --bu | --b)
  3315. +     ac_prev=build ;;
  3316. +   -build=* | --build=* | --buil=* | --bui=* | --bu=* | --b=*)
  3317. +     build="$ac_optarg" ;;
  3318. +   -disable-* | --disable-*)
  3319. +     ac_feature=`/bin/echo $ac_option|sed -e 's/-*disable-//'`
  3320. +     # Reject names that aren't valid shell variable names.
  3321. +     if test -n "`/bin/echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
  3322. +       /bin/echo "configure: $ac_feature: invalid feature name" >&2; exit 1
  3323. +     fi
  3324. +     ac_feature=`/bin/echo $ac_feature| sed 's/-/_/g'`
  3325. +     eval "enable_${ac_feature}=no" ;;
  3326. +   -enable-* | --enable-*)
  3327. +     ac_feature=`/bin/echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
  3328. +     # Reject names that aren't valid shell variable names.
  3329. +     if test -n "`/bin/echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
  3330. +       /bin/echo "configure: $ac_feature: invalid feature name" >&2; exit 1
  3331. +     fi
  3332. +     ac_feature=`/bin/echo $ac_feature| sed 's/-/_/g'`
  3333. +     case "$ac_option" in
  3334. +       *=*) ;;
  3335. +       *) ac_optarg=yes ;;
  3336. +     esac
  3337. +     eval "enable_${ac_feature}='$ac_optarg'" ;;
  3338. +   # For backward compatibility, recognize -exec-prefix and --exec_prefix.
  3339. +   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
  3340. +   | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  3341. +   | --exec | --exe | --ex)
  3342. +     ac_prev=exec_prefix ;;
  3343. +   -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
  3344. +   | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
  3345. +   | --exec=* | --exe=* | --ex=*)
  3346. +     exec_prefix="$ac_optarg" ;;
  3347. +   -gas | --gas | --ga | --g)
  3348. +     with_gas=yes ;; # Obsolete; use --with-gas.
  3349. +   -help | --help | --hel | --he)
  3350. +     cat << EOF
  3351. + $ac_usage
  3352. + EOF
  3353. +     exit 0 ;;
  3354. +   -host | --host | --hos | --ho)
  3355. +     ac_prev=host ;;
  3356. +   -host=* | --host=* | --hos=* | --ho=*)
  3357. +     host="$ac_optarg" ;;
  3358. +   -nfp | --nfp | --nf)
  3359. +     with_fp=no ;; # Obsolete; use --without-fp.
  3360. +   -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  3361. +   | --no-cr | --no-c)
  3362. +     no_create=yes ;;
  3363. +   -norecursion | --norecursion | --norecursio | --norecursi \
  3364. +   | --norecurs | --norecur | --norecu | --norec | --nore | --nor)
  3365. +     norecursion=yes ;;
  3366. +   -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
  3367. +     ac_prev=prefix ;;
  3368. +   -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
  3369. +     prefix="$ac_optarg" ;;
  3370. +   -program-prefix | --program-prefix | --program-prefi | --program-pref \
  3371. +   | --program-pre | --program-pr | --program-p)
  3372. +     ac_prev=program_prefix ;;
  3373. +   -program-prefix=* | --program-prefix=* | --program-prefi=* \
  3374. +   | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
  3375. +     program_prefix="$ac_optarg" ;;
  3376. +   -program-suffix | --program-suffix | --program-suffi | --program-suff \
  3377. +   | --program-suf | --program-su | --program-s)
  3378. +     ac_prev=program_suffix ;;
  3379. +   -program-suffix=* | --program-suffix=* | --program-suffi=* \
  3380. +   | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
  3381. +     program_suffix="$ac_optarg" ;;
  3382. +   -program-transform-name | --program-transform-name \
  3383. +   | --program-transform-nam | --program-transform-na \
  3384. +   | --program-transform-n | --program-transform- \
  3385. +   | --program-transform | --program-transfor \
  3386. +   | --program-transfo | --program-transf \
  3387. +   | --program-trans | --program-tran \
  3388. +   | --progr-tra | --program-tr | --program-t)
  3389. +     ac_prev=program_transform_name ;;
  3390. +   -program-transform-name=* | --program-transform-name=* \
  3391. +   | --program-transform-nam=* | --program-transform-na=* \
  3392. +   | --program-transform-n=* | --program-transform-=* \
  3393. +   | --program-transform=* | --program-transfor=* \
  3394. +   | --program-transfo=* | --program-transf=* \
  3395. +   | --program-trans=* | --program-tran=* \
  3396. +   | --progr-tra=* | --program-tr=* | --program-t=*)
  3397. +     program_transform_name="$ac_optarg" ;;
  3398. +   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  3399. +   | -silent | --silent | --silen | --sile | --sil)
  3400. +     silent=yes ;;
  3401. +   -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
  3402. +     ac_prev=srcdir ;;
  3403. +   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
  3404. +     srcdir="$ac_optarg" ;;
  3405. +   -target | --target | --targe | --targ | --tar | --ta | --t)
  3406. +     ac_prev=target ;;
  3407. +   -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
  3408. +     target="$ac_optarg" ;;
  3409. +   -v | -verbose | --verbose | --verbos | --verbo | --verb)
  3410. +     verbose=yes ;;
  3411. +   -version | --version | --versio | --versi | --vers)
  3412. +     /bin/echo "configure generated by autoconf version 1.9"
  3413. +     exit 0 ;;
  3414. +   -with-* | --with-*)
  3415. +     ac_package=`/bin/echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
  3416. +     # Reject names that aren't valid shell variable names.
  3417. +     if test -n "`/bin/echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
  3418. +       /bin/echo "configure: $ac_package: invalid package name" >&2; exit 1
  3419. +     fi
  3420. +     ac_package=`/bin/echo $ac_package| sed 's/-/_/g'`
  3421. +     case "$ac_option" in
  3422. +       *=*) ;;
  3423. +       *) ac_optarg=yes ;;
  3424. +     esac
  3425. +     eval "with_${ac_package}='$ac_optarg'" ;;
  3426. +   -without-* | --without-*)
  3427. +     ac_package=`/bin/echo $ac_option|sed -e 's/-*without-//'`
  3428. +     # Reject names that aren't valid shell variable names.
  3429. +     if test -n "`/bin/echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
  3430. +       /bin/echo "configure: $ac_package: invalid package name" >&2; exit 1
  3431. +     fi
  3432. +     ac_package=`/bin/echo $ac_package| sed 's/-/_/g'`
  3433. +     eval "with_${ac_package}=no" ;;
  3434. +   --x) with_x=yes ;; # Obsolete; use --with-x.
  3435. +   -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
  3436. +   | --x-incl | --x-inc | --x-in | --x-i)
  3437. +     ac_prev=x_includes ;;
  3438. +   -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
  3439. +   | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
  3440. +     x_includes="$ac_optarg" ;;
  3441. +   -x-libraries | --x-libraries | --x-librarie | --x-librari \
  3442. +   | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
  3443. +     ac_prev=x_libraries ;;
  3444. +   -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
  3445. +   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
  3446. +     x_libraries="$ac_optarg" ;;
  3447. +   -*) /bin/echo "configure: $ac_option: invalid option; use --help to show usage" >&2; exit 1
  3448. +     ;;
  3449. +   *) 
  3450. +     if test -n "`/bin/echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
  3451. +       /bin/echo "configure: warning: $ac_option: invalid host type" >&2
  3452. +     fi
  3453. +     if test "x$nonopt" != xNONE; then
  3454. +       /bin/echo "configure: can only configure for one host and one target at a time" >&2; exit 1
  3455. +     fi
  3456. +     nonopt="$ac_option"
  3457. +     ;;
  3458. +   esac
  3459. + done
  3460. + if test -n "$ac_prev"; then
  3461. +   /bin/echo "configure: missing argument to --`/bin/echo $ac_prev | sed 's/_/-/g'`" >&2; exit 1
  3462. + fi
  3463. + trap 'rm -fr conftest* confdefs* core $ac_clean_files; exit 1' 1 2 15
  3464. + trap 'rm -fr confdefs* $ac_clean_files' 0
  3465. + # Save the original args if we used an alternate arg parser.
  3466. + ac_configure_temp="${configure_args-$*}"
  3467. + # Strip out --no-create and --norecursion so they don't pile up.
  3468. + configure_args=
  3469. + for ac_arg in $ac_configure_temp; do
  3470. +   case "$ac_arg" in
  3471. +   -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  3472. +   | --no-cr | --no-c) ;;
  3473. +   -norecursion | --norecursion | --norecursio | --norecursi \
  3474. +   | --norecurs | --norecur | --norecu | --norec | --nore | --nor) ;;
  3475. +   *) configure_args="$configure_args $ac_arg" ;;
  3476. +   esac
  3477. + done
  3478. + # NLS nuisances.
  3479. + # These must not be set unconditionally because not all systems understand
  3480. + # e.g. LANG=C (notably SCO).
  3481. + if test "${LC_ALL+set}" = 'set'; then LC_ALL=C; export LC_ALL; fi
  3482. + if test "${LANG+set}"   = 'set'; then LANG=C;   export LANG;   fi
  3483. + # confdefs.h avoids OS command line length limits that DEFS can exceed.
  3484. + rm -rf conftest* confdefs.h
  3485. + # AIX cpp loses on an empty file, so make sure it contains at least a newline.
  3486. + /bin/echo > confdefs.h
  3487. + # A filename unique to this package, relative to the directory that
  3488. + # configure is in, which we can look for to find out if srcdir is correct.
  3489. + ac_unique_file=gs.h
  3490. + # Find the source files, if location was not specified.
  3491. + if test -z "$srcdir"; then
  3492. +   ac_srcdir_defaulted=yes
  3493. +   # Try the directory containing this script, then `..'.
  3494. +   ac_prog=$0
  3495. +   ac_confdir=`/bin/echo $ac_prog|sed 's%/[^/][^/]*$%%'`
  3496. +   test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
  3497. +   srcdir=$ac_confdir
  3498. +   if test ! -r $srcdir/$ac_unique_file; then
  3499. +     srcdir=..
  3500. +   fi
  3501. + fi
  3502. + if test ! -r $srcdir/$ac_unique_file; then
  3503. +   if test x$ac_srcdir_defaulted = xyes; then
  3504. +     /bin/echo "configure: can not find sources in ${ac_confdir} or .." >&2; exit 1
  3505. +   else
  3506. +     /bin/echo "configure: can not find sources in ${srcdir}" >&2; exit 1
  3507. +   fi
  3508. + fi
  3509. + ac_ext=c
  3510. + ac_cpp='${CPP} $CFLAGS'
  3511. + ac_compile='${CC-cc} $CFLAGS $LDFLAGS conftest.${ac_ext} -o conftest $LIBS >/dev/null 2>&1'
  3512. + # We want these before the checks, so the checks can modify their values.
  3513. + test -z "$CFLAGS" && CFLAGS= auto_cflags=1
  3514. + test -z "$LDFLAGS" && LDFLAGS=
  3515. + if test -z "$CC"; then
  3516. +   # Extract the first word of `gcc', so it can be a program name with args.
  3517. +   set ac_dummy gcc; ac_word=$2
  3518. +   test -n "$silent" || /bin/echo "checking for $ac_word"
  3519. +   IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
  3520. +   for ac_dir in $PATH; do
  3521. +     test -z "$ac_dir" && ac_dir=.
  3522. +     if test -f $ac_dir/$ac_word; then
  3523. +       CC="gcc"
  3524. +       break
  3525. +     fi
  3526. +   done
  3527. +   IFS="$ac_save_ifs"
  3528. + fi
  3529. + test -z "$CC" && CC="cc"
  3530. + test -n "$CC" && test -n "$verbose" && /bin/echo "    setting CC to $CC"
  3531. + # Find out if we are using GNU C, under whatever name.
  3532. + cat > conftest.c <<EOF
  3533. + #ifdef __GNUC__
  3534. +   yes
  3535. + #endif
  3536. + EOF
  3537. + ${CC-cc} -E conftest.c > conftest.out 2>&1
  3538. + if egrep yes conftest.out >/dev/null 2>&1; then
  3539. +   GCC=1 # For later tests.
  3540. + fi
  3541. + rm -f conftest*
  3542. + # If we're using gcc and the user hasn't specified CFLAGS, add -O to CFLAGS.
  3543. + test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O2"
  3544. + test -n "$silent" || /bin/echo "checking how to run the C preprocessor"
  3545. + if test -z "$CPP"; then
  3546. +   # This must be in double quotes, not single quotes, because CPP may get
  3547. +   # substituted into the Makefile and ``${CC-cc}'' will simply confuse
  3548. +   # make.  It must be expanded now.
  3549. +   CPP="${CC-cc} -E"
  3550. +   cat > conftest.${ac_ext} <<EOF
  3551. + #include "confdefs.h"
  3552. + #include <stdio.h>
  3553. + Syntax Error
  3554. + EOF
  3555. + # Some shells (Coherent) do redirections in the wrong order, so need
  3556. + # the parens.
  3557. + ac_err=`eval "($ac_cpp conftest.${ac_ext} >/dev/null) 2>&1"`
  3558. + if test -z "$ac_err"; then
  3559. +   :
  3560. + else
  3561. +   rm -rf conftest*
  3562. +   CPP="${CC-cc} -E -traditional-cpp"
  3563. +   cat > conftest.${ac_ext} <<EOF
  3564. + #include "confdefs.h"
  3565. + #include <stdio.h>
  3566. + Syntax Error
  3567. + EOF
  3568. + # Some shells (Coherent) do redirections in the wrong order, so need
  3569. + # the parens.
  3570. + ac_err=`eval "($ac_cpp conftest.${ac_ext} >/dev/null) 2>&1"`
  3571. + if test -z "$ac_err"; then
  3572. +   :
  3573. + else
  3574. +   rm -rf conftest*
  3575. +   CPP=/lib/cpp
  3576. + fi
  3577. + rm -f conftest*
  3578. + fi
  3579. + rm -f conftest*
  3580. + fi
  3581. + test -n "$verbose" && /bin/echo "    setting CPP to $CPP"
  3582. + if test -n "$GCC"; then
  3583. +   test -n "$silent" || /bin/echo "checking whether -traditional is needed"
  3584. +   ac_pattern="Autoconf.*'x'"
  3585. +   ac_prog='#include <sgtty.h>
  3586. + Autoconf TIOCGETP'
  3587. +   cat > conftest.${ac_ext} <<EOF
  3588. + #include "confdefs.h"
  3589. + $ac_prog
  3590. + EOF
  3591. + eval "$ac_cpp conftest.${ac_ext} > conftest.out 2>&1"
  3592. + if egrep "$ac_pattern" conftest.out >/dev/null 2>&1; then
  3593. +   rm -rf conftest*
  3594. +   ac_need_trad=1
  3595. + fi
  3596. + rm -f conftest*
  3597. +   if test -z "$ac_need_trad"; then
  3598. +     ac_prog='#include <termio.h>
  3599. + Autoconf TCGETA'
  3600. +     cat > conftest.${ac_ext} <<EOF
  3601. + #include "confdefs.h"
  3602. + $ac_prog
  3603. + EOF
  3604. + eval "$ac_cpp conftest.${ac_ext} > conftest.out 2>&1"
  3605. + if egrep "$ac_pattern" conftest.out >/dev/null 2>&1; then
  3606. +   rm -rf conftest*
  3607. +   ac_need_trad=1
  3608. + fi
  3609. + rm -f conftest*
  3610. +   fi
  3611. +   test -n "$ac_need_trad" && CC="$CC -traditional"
  3612. + fi
  3613. + # Make sure to not get the incompatible SysV /etc/install and
  3614. + # /usr/sbin/install, which might be in PATH before a BSD-like install,
  3615. + # or the SunOS /usr/etc/install directory, or the AIX /bin/install,
  3616. + # or the AFS install, which mishandles nonexistent args, or
  3617. + # /usr/ucb/install on SVR4, which tries to use the nonexistent group
  3618. + # `staff', or /sbin/install on IRIX which has incompatible command-line
  3619. + # syntax.  Sigh.
  3620. + #
  3621. + #     On most BSDish systems install is in /usr/bin, not /usr/ucb
  3622. + #     anyway.
  3623. + # This turns out not to be true, so the mere pathname isn't an indication
  3624. + # of whether the program works.  What we really need is a set of tests for
  3625. + # the install program to see if it actually works in all the required ways.
  3626. + #
  3627. + # Avoid using ./install, which might have been erroneously created
  3628. + # by make from ./install.sh.
  3629. + if test "z${INSTALL}" = "z" ; then
  3630. +   test -n "$silent" || /bin/echo "checking for a BSD compatible install"
  3631. +   IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
  3632. +   for ac_dir in $PATH; do
  3633. +     case "$ac_dir" in
  3634. +     ''|.|/gnu/etc|/sbin|/usr/sbin|/usr/etc|/usr/afsws/bin|/usr/ucb) ;;
  3635. +     *)
  3636. +       # OSF1 and SCO ODT 3.0 have their own names for install.
  3637. +       for ac_prog in installbsd scoinst install; do
  3638. +         if test -f $ac_dir/$ac_prog; then
  3639. +       if test $ac_prog = install &&
  3640. +             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
  3641. +         # AIX install.  It has an incompatible calling convention.
  3642. +         # OSF/1 installbsd also uses dspmsg, but is usable.
  3643. +         :
  3644. +       else
  3645. +         INSTALL="$ac_dir/$ac_prog -c"
  3646. +         INSTALL_PROGRAM='${INSTALL}'
  3647. +         INSTALL_DATA='${INSTALL} -m 644'
  3648. +         break 2
  3649. +       fi
  3650. +     fi
  3651. +       done
  3652. +       ;;
  3653. +     esac
  3654. +   done
  3655. +   IFS="$ac_save_ifs"
  3656. + fi
  3657. + if test -z "$INSTALL"; then
  3658. +   if test -f ${srcdir}/install.sh; then
  3659. +     # As a last resort, use the slow shell script.
  3660. +     INSTALL='@top_srcdir@/install.sh -c'
  3661. +   else
  3662. +     /bin/echo "configure: warning: ${srcdir}/install.sh not found; using cp" >&2
  3663. +     INSTALL=cp
  3664. +   fi
  3665. + fi
  3666. + test -n "$verbose" && /bin/echo "    setting INSTALL to $INSTALL"
  3667. + # Use test -z because SunOS4 sh mishandles ${INSTALL_PROGRAM-'${INSTALL}'}.
  3668. + # It thinks the first close brace ends the variable substitution.
  3669. + test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
  3670. + test -n "$verbose" && /bin/echo "    setting INSTALL_PROGRAM to $INSTALL_PROGRAM"
  3671. + test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL}'
  3672. + test -n "$verbose" && /bin/echo "    setting INSTALL_DATA to $INSTALL_DATA"
  3673. + # Set default prefixes.
  3674. + if test -n "$prefix"; then
  3675. +   test -z "$exec_prefix" && exec_prefix='${prefix}' # Let make expand it.
  3676. +   ac_prsub="s%^prefix\\([     ]*\\)=\\([     ]*\\).*$%prefix\\1=\\2$prefix%"
  3677. + fi
  3678. + if test -n "$exec_prefix"; then
  3679. +   ac_prsub="$ac_prsub
  3680. + s%^exec_prefix\\([     ]*\\)=\\([     ]*\\).*$%exec_prefix\\1=\\2$exec_prefix%"
  3681. + fi
  3682. + # Any assignment to VPATH causes Sun make to only execute
  3683. + # the first set of double-colon rules, so remove it if not needed.
  3684. + # If there is a colon in the path, we need to keep it.
  3685. + if test "x$srcdir" = x.; then
  3686. +   ac_vpsub='/^[     ]*VPATH[     ]*=[^:]*$/d'
  3687. + fi
  3688. + # Quote sed substitution magic chars in DEFS.
  3689. + cat >conftest.def <<EOF
  3690. + $DEFS
  3691. + EOF
  3692. + ac_escape_ampersand_and_backslash='s%[&\\]%\\&%g'
  3693. + DEFS=`sed "$ac_escape_ampersand_and_backslash" <conftest.def`
  3694. + rm -f conftest.def
  3695. + # Substitute for predefined variables.
  3696. + trap 'rm -f config.status; exit 1' 1 2 15
  3697. + /bin/echo creating config.status
  3698. + rm -f config.status
  3699. + cat > config.status <<EOF
  3700. + #!/bin/sh
  3701. + # Generated automatically by configure.
  3702. + # Run this file to recreate the current configuration.
  3703. + # This directory was configured as follows,
  3704. + # on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  3705. + #
  3706. + # $0 $configure_args
  3707. + ac_cs_usage="Usage: config.status [--recheck] [--version] [--help]"
  3708. + for ac_option
  3709. + do
  3710. +   case "\$ac_option" in
  3711. +   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
  3712. +     /bin/echo running \${CONFIG_SHELL-/bin/sh} $0 $configure_args --no-create
  3713. +     exec \${CONFIG_SHELL-/bin/sh} $0 $configure_args --no-create ;;
  3714. +   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
  3715. +     /bin/echo "config.status generated by autoconf version 1.9"
  3716. +     exit 0 ;;
  3717. +   -help | --help | --hel | --he | --h)
  3718. +     /bin/echo "\$ac_cs_usage"; exit 0 ;;
  3719. +   *) /bin/echo "\$ac_cs_usage"; exit 1 ;;
  3720. +   esac
  3721. + done
  3722. + trap 'rm -f Makefile; exit 1' 1 2 15
  3723. + CC='$CC'
  3724. + CFLAGS='$CFLAGS'
  3725. + LDFLAGS='$LDFLAGS'
  3726. + CPP='$CPP'
  3727. + INSTALL='$INSTALL'
  3728. + INSTALL_PROGRAM='$INSTALL_PROGRAM'
  3729. + INSTALL_DATA='$INSTALL_DATA'
  3730. + LIBS='$LIBS'
  3731. + srcdir='$srcdir'
  3732. + top_srcdir='$top_srcdir'
  3733. + prefix='$prefix'
  3734. + exec_prefix='$exec_prefix'
  3735. + DEFS='$DEFS'
  3736. + ac_prsub='$ac_prsub'
  3737. + ac_vpsub='$ac_vpsub'
  3738. + extrasub='$extrasub'
  3739. + EOF
  3740. + cat >> config.status <<\EOF
  3741. + ac_given_srcdir=$srcdir
  3742. + CONFIG_FILES=${CONFIG_FILES-"Makefile"}
  3743. + for ac_file in .. ${CONFIG_FILES}; do if test "x$ac_file" != x..; then
  3744. +   # Remove last slash and all that follows it.  Not all systems have dirname.
  3745. +   ac_dir=`/bin/echo $ac_file|sed 's%/[^/][^/]*$%%'`
  3746. +   if test "$ac_dir" != "$ac_file"; then
  3747. +     # The file is in a subdirectory.
  3748. +     test ! -d "$ac_dir" && mkdir "$ac_dir"
  3749. +     ac_dir_suffix="/$ac_dir"
  3750. +   else
  3751. +     ac_dir_suffix=
  3752. +   fi
  3753. +   # A "../" for each directory in $ac_dir_suffix.
  3754. +   ac_dots=`/bin/echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
  3755. +   case "$ac_given_srcdir" in
  3756. +   .)  srcdir=.; top_srcdir="$ac_dots." ;;
  3757. +   /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
  3758. +   *) # Relative path.
  3759. +     srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
  3760. +     top_srcdir="$ac_dots$ac_given_srcdir" ;;
  3761. +   esac
  3762. +   /bin/echo creating "$ac_file"
  3763. +   rm -f "$ac_file"
  3764. +   comment_str="Generated automatically from `/bin/echo $ac_file|sed 's|.*/||'`.in by configure."
  3765. +   case "$ac_file" in
  3766. +     *.c | *.h | *.C | *.cc | *.m )  /bin/echo "/* $comment_str */" > "$ac_file" ;;
  3767. +     * )          /bin/echo "# $comment_str"     > "$ac_file" ;;
  3768. +   esac
  3769. +   sed -e "
  3770. + $ac_prsub
  3771. + $ac_vpsub
  3772. + $extrasub
  3773. + s%@CC@%$CC%g
  3774. + s%@CFLAGS@%$CFLAGS%g
  3775. + s%@LDFLAGS@%$LDFLAGS%g
  3776. + s%@CPP@%$CPP%g
  3777. + s%@INSTALL@%$INSTALL%g
  3778. + s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
  3779. + s%@INSTALL_DATA@%$INSTALL_DATA%g
  3780. + s%@LIBS@%$LIBS%g
  3781. + s%@srcdir@%$srcdir%g
  3782. + s%@top_srcdir@%$top_srcdir%g
  3783. + s%@prefix@%$prefix%g
  3784. + s%@exec_prefix@%$exec_prefix%g
  3785. + s%@DEFS@%$DEFS%
  3786. + " $ac_given_srcdir/${ac_file}.in >> $ac_file
  3787. + fi; done
  3788. + exit 0
  3789. + EOF
  3790. + chmod +x config.status
  3791. + test -n "$no_create" || ${CONFIG_SHELL-/bin/sh} config.status
  3792. diff -rc --new-file /src/baseline/gs-2.6.1.4/configure.in gs-2.6.1.4/configure.in
  3793. *** /src/baseline/gs-2.6.1.4/configure.in    Thu Jan  1 00:00:00 1970
  3794. --- gs-2.6.1.4/configure.in    Sun May  1 17:33:33 1994
  3795. ***************
  3796. *** 0 ****
  3797. --- 1,20 ----
  3798. + dnl Process this file with autoconf to produce a configure script.
  3799. + AC_INIT(gs.h)
  3800. + # We want these before the checks, so the checks can modify their values.
  3801. + test -z "$CFLAGS" && CFLAGS= auto_cflags=1
  3802. + test -z "$LDFLAGS" && LDFLAGS=
  3803. + AC_PROG_CC
  3804. + # If we're using gcc and the user hasn't specified CFLAGS, add -O to CFLAGS.
  3805. + test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O2"
  3806. + AC_SUBST(CFLAGS)dnl
  3807. + AC_SUBST(LDFLAGS)dnl
  3808. + AC_PROG_CPP
  3809. + AC_GCC_TRADITIONAL
  3810. + AC_PROG_INSTALL
  3811. + AC_OUTPUT(Makefile)
  3812. diff -rc --new-file /src/baseline/gs-2.6.1.4/font2c gs-2.6.1.4/font2c
  3813. *** /src/baseline/gs-2.6.1.4/font2c    Tue Feb 25 06:24:34 1992
  3814. --- gs-2.6.1.4/font2c    Thu Jan 27 21:39:30 1994
  3815. ***************
  3816. *** 1 ****
  3817. ! gs -q -dNODISPLAY -dWRITESYSTEMDICT -- font2c.ps $*
  3818. --- 1,4 ----
  3819. ! .key ARGS/F
  3820. ! .bra {
  3821. ! .ket }
  3822. ! gs -q -dNODISPLAY -dWRITESYSTEMDICT -- font2c.ps {ARGS}
  3823. diff -rc --new-file /src/baseline/gs-2.6.1.4/gdevamiga.c gs-2.6.1.4/gdevamiga.c
  3824. *** /src/baseline/gs-2.6.1.4/gdevamiga.c    Thu Jan  1 00:00:00 1970
  3825. --- gs-2.6.1.4/gdevamiga.c    Wed Feb  2 13:21:04 1994
  3826. ***************
  3827. *** 0 ****
  3828. --- 1,5537 ----
  3829. + /* Copyright (C) 1992 Aladdin Enterprises.  All rights reserved.
  3830. +    Distributed by Free Software Foundation, Inc.
  3831. + This file is part of Ghostscript.
  3832. + Ghostscript is distributed in the hope that it will be useful, but
  3833. + WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
  3834. + to anyone for the consequences of using it or for whether it serves any
  3835. + particular purpose or works at all, unless he says so in writing.  Refer
  3836. + to the Ghostscript General Public License for full details.
  3837. + Everyone is granted permission to copy, modify and redistribute
  3838. + Ghostscript, but only under the conditions described in the Ghostscript
  3839. + General Public License.  A copy of this license is supposed to have been
  3840. + given to you along with Ghostscript so you can know your rights and
  3841. + responsibilities.  It should be in a file named COPYING.  Among other
  3842. + things, the copyright notice and this notice must be preserved on all
  3843. + copies.  */
  3844. + /* gdevamiga.c */
  3845. + /* Amiga driver for Ghostscript library, requires Kickstart 2.04 or higher */
  3846. + /* Written by Olaf `Olsen' Barthel, last change 29 January 1994
  3847. +  *
  3848. +  * My address:   Olaf Barthel
  3849. +  *               Brabeckstrasse 35
  3850. +  *             D-30559 Hannover
  3851. +  *
  3852. +  *      eMail:   olsen@sourcery.han.de
  3853. +  */
  3854. + #define CheckIO foo123
  3855. + #define ushort foo
  3856. + #include <intuition/intuitionbase.h>
  3857. + #include <intuition/gadgetclass.h>
  3858. + #include <intuition/imageclass.h>
  3859. + #include <intuition/icclass.h>
  3860. + #include <graphics/displayinfo.h>
  3861. + #include <libraries/iffparse.h>
  3862. + #include <graphics/gfxbase.h>
  3863. + #include <devices/printer.h>
  3864. + #include <devices/prtbase.h>
  3865. + #include <devices/prtgfx.h>
  3866. + #include <libraries/asl.h>
  3867. + #include <exec/memory.h>
  3868. + #include <clib/macros.h>
  3869. + #include <dos/dostags.h>
  3870. + #include <dos/rdargs.h>
  3871. + #include <dos/var.h>
  3872. + #include <dos/dos.h>
  3873. + #include <clib/intuition_protos.h>
  3874. + #include <clib/graphics_protos.h>
  3875. + #include <clib/iffparse_protos.h>
  3876. + #include <clib/utility_protos.h>
  3877. + #include <clib/layers_protos.h>
  3878. + #include <clib/exec_protos.h>
  3879. + #include <clib/dos_protos.h>
  3880. + #include <clib/asl_protos.h>
  3881. + /*
  3882. + #include <inline/stubs.h>
  3883. + #include <inline/iffparse.h>
  3884. + #include <inline/utility.h>
  3885. + #include <inline/exec.h>
  3886. + #include <inline/dos.h>
  3887. + */
  3888. + #include <string.h>
  3889. + #include <signal.h>
  3890. + #undef ushort
  3891. + #undef CheckIO
  3892. + struct IORequest *CheckIO(struct IORequest *);
  3893. + #include "gx.h"        /* for gx_bitmap; includes std.h */
  3894. + #include "gsmatrix.h"    /* needed for gxdevice.h */
  3895. + #include "gxdevice.h"
  3896. + #include "gserrors.h"
  3897. + #include "gsprops.h"
  3898. +     /* Here is how to select a default page size format:
  3899. +      *
  3900. +      * Either enter include a line such as
  3901. +      *
  3902. +      *   #define AMIGA_PAGE_A4 1
  3903. +      *
  3904. +      * Somewhere above in this module, or edit the makefile
  3905. +      * to feature the option
  3906. +      *
  3907. +      *   -dAMIGA_PAGE_A4
  3908. +      *
  3909. +      * among the device specific flags. Available default page
  3910. +      * size formats are:
  3911. +      *
  3912. +      *   AMIGA_PAGE_A4         European A4 page size (default)
  3913. +      *   AMIGA_PAGE_A3         European A3 page size
  3914. +      *   AMIGA_PAGE_LETTER     US letter page size
  3915. +      *   AMIGA_PAGE_LEGAL      US legal page size
  3916. +      *   AMIGA_PAGE_LEDGER     US ledger paper size
  3917. +      *   AMIGA_PAGE_TABLOID    US tabloid paper size
  3918. +      */
  3919. +     /* Select the default paper size if none specified. */
  3920. + #if !defined(AMIGA_PAGE_A4) && !defined(AMIGA_PAGE_A3) && !defined(AMIGA_PAGE_LETTER) && !defined(AMIGA_PAGE_LEGAL) && !defined(AMIGA_PAGE_LEDGER) && !defined(AMIGA_PAGE_TABLOID)
  3921. + /*#define AMIGA_PAGE_A4 1*/
  3922. + #define AMIGA_PAGE_A3 1
  3923. + #endif    /* PAGE SIZE */
  3924. +     /* A4 page size (in inches!) */
  3925. + #ifdef AMIGA_PAGE_A4
  3926. + #define DEFAULT_WIDTH        8.2
  3927. + #define DEFAULT_HEIGHT        11.6
  3928. + #endif    /* AMIGA_PAGE_A4 */
  3929. +     /* A3 page size */
  3930. + #ifdef AMIGA_PAGE_A3
  3931. + #define DEFAULT_WIDTH        11.6
  3932. + #define DEFAULT_HEIGHT        16.5
  3933. + #endif    /* AMIGA_PAGE_A4 */
  3934. +     /* US letter page size */
  3935. + #ifdef AMIGA_PAGE_LETTER
  3936. + #define DEFAULT_WIDTH        8.5
  3937. + #define DEFAULT_HEIGHT        11.0
  3938. + #endif    /* AMIGA_PAGE_LETTER */
  3939. +     /* US legal page size */
  3940. + #ifdef AMIGA_PAGE_LEGAL
  3941. + #define DEFAULT_WIDTH        8.5
  3942. + #define DEFAULT_HEIGHT        14.0
  3943. + #endif    /* AMIGA_PAGE_LEGAL */
  3944. +     /* US ledger page size */
  3945. + #ifdef AMIGA_PAGE_LEDGER
  3946. + #define DEFAULT_WIDTH        16.0
  3947. + #define DEFAULT_HEIGHT        11.0
  3948. + #endif    /* AMIGA_PAGE_LEDGER */
  3949. +     /* US tabloid page size */
  3950. + #ifdef AMIGA_PAGE_TABLOID
  3951. + #define DEFAULT_WIDTH        11.0
  3952. + #define DEFAULT_HEIGHT        17.0
  3953. + #endif    /* AMIGA_PAGE_LEDGER */
  3954. +     /* Default output file name. */
  3955. + #define DEFAULT_FILENAME    "gs_page"
  3956. +     /* Turn a byte into a 24 bit colour value. */
  3957. + #define SPREAD(i)    ((ULONG)(i) << 24 | (ULONG)(i) << 16 | (ULONG)(i) << 8 | (i))
  3958. +     /* Scroller gadget IDs. */
  3959. + enum    {    VERTICAL_SCROLLER,    HORIZONTAL_SCROLLER,
  3960. +         UP_ARROW,        DOWN_ARROW,
  3961. +         LEFT_ARROW,        RIGHT_ARROW,
  3962. +         GADGET_COUNT };
  3963. +     /* Scroller arrow IDs. */
  3964. + enum    {    UP_IMAGE,        DOWN_IMAGE,
  3965. +         LEFT_IMAGE,        RIGHT_IMAGE,
  3966. +         IMAGE_COUNT };
  3967. +     /* Codes for the MoveAround() routine. */
  3968. + enum    {    MOVE_MIN,MOVE_FAR_DOWN,MOVE_DOWN,MOVE_UP,MOVE_FAR_UP,MOVE_MAX };
  3969. +     /* Some handy bit masks. */
  3970. + #define SIG_KILL    SIGBREAKF_CTRL_C
  3971. + #define SIG_HANDSHAKE    SIGF_SINGLE
  3972. +     /* Static dimensions of scroller arrows. */
  3973. + #define ARROW_WIDTH    16
  3974. + #define ARROW_HEIGHT    11
  3975. +     /* The `Help' key raw code. */
  3976. + #define HELP_CODE    95
  3977. +     /* Minimum window inner area dimension. */
  3978. + #define MINIMUM_WIDTH    64
  3979. + #define MINIMUM_HEIGHT    32
  3980. +     /* Handy superbitmap window macros. */
  3981. + #define LAYERXOFFSET(w)    ((w) -> RPort -> Layer -> Scroll_X)
  3982. + #define LAYERYOFFSET(w)    ((w) -> RPort -> Layer -> Scroll_Y)
  3983. +     /* User input to listen to. */
  3984. + #define IDCMP_FLAGS    (IDCMP_IDCMPUPDATE | IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_MOUSEMOVE | IDCMP_NEWSIZE | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_RAWKEY)
  3985. +     /* Chunk IDs. */
  3986. + #define ID_ILBM        MAKE_ID('I','L','B','M')
  3987. + #define ID_BMHD        MAKE_ID('B','M','H','D')
  3988. + #define ID_CMAP        MAKE_ID('C','M','A','P')
  3989. + #define ID_CAMG        MAKE_ID('C','A','M','G')
  3990. + #define ID_ANNO        MAKE_ID('A','N','N','O')
  3991. + #define ID_DPI        MAKE_ID('D','P','I',' ')
  3992. + #define ID_BODY        MAKE_ID('B','O','D','Y')
  3993. +     /* Chunk contents definitions. */
  3994. + typedef struct
  3995. + {
  3996. +     UWORD        w,h;            /* raster width & height in pixels */
  3997. +     WORD        x,y;            /* position for this image */
  3998. +     UBYTE        nPlanes;        /* # source bitplanes */
  3999. +     UBYTE        masking;        /* masking technique */
  4000. +     UBYTE        compression;        /* compression algoithm */
  4001. +     UBYTE        pad1;            /* UNUSED.  For consistency, put 0 here.*/
  4002. +     UWORD        transparentColor;    /* transparent "color number" */
  4003. +     UBYTE        xAspect,yAspect;    /* aspect ratio, a rational number x/y */
  4004. +     WORD        pageWidth,pageHeight;    /* source "page" size in pixels */
  4005. + } BitMapHeader;
  4006. + typedef struct
  4007. + {
  4008. +     UWORD        dpi_x;
  4009. +     UWORD        dpi_y;
  4010. + } DPIHeader;
  4011. +     /* Packer modes. */
  4012. + #define DUMP        0
  4013. + #define RUN        1
  4014. +     /* Minimum data run size, maximum data run size and maximum cache size. */
  4015. + #define MINRUN        3
  4016. + #define MAXRUN        128
  4017. + #define MAXDAT        128
  4018. +     /* This module actually implements four different Amiga based
  4019. +      * devices. As the rendering operations are all the same,
  4020. +      * one single device definition is sufficient.
  4021. +      */
  4022. + typedef struct gx_device_amiga
  4023. + {
  4024. +     gx_device_common;
  4025. +     struct Screen    *screen;    /* Any screen */
  4026. +     struct Window    *window;    /* Some window to be opened on the Workbench screen */
  4027. +     LONG         super_width,    /* Superbitmap width */
  4028. +              super_height;    /* Superbitmap height */
  4029. +     struct BitMap    *super_bitmap;    /* Window superbitmap area */
  4030. +     struct Gadget    **gadget;    /* Scroller gadgets */
  4031. +     struct Image    **image;    /* Scroller arrow images */
  4032. +     struct Task    *dispatcher;    /* Slider dispatch task */
  4033. +     struct Process    *main;        /* Main program */
  4034. +     struct RastPort    *rport;        /* Rendering area */
  4035. +     struct IODRPReq *printer;    /* Printer interface data */
  4036. +     struct MsgPort    *port;        /* Printer io data */
  4037. +     struct ColorMap    *colormap;    /* A black/white colour map */
  4038. +     struct BitMap    *bitmap;    /* Rendering bitmap data */
  4039. +     PLANEPTR     bitplane;    /* Rendering raster */
  4040. +     gx_color_index     last_pen;    /* The last colour set */
  4041. +     float         page_width,    /* The page width */
  4042. +              page_height;    /* The page height */
  4043. +     char         file_name[256];/* The output file name */
  4044. +     int         page_count;    /* The page number counter */
  4045. +     int         cube_size;    /* Colour cube size, 0 for b/w */
  4046. +     struct RastPort    *temp_rport;    /* Temporary raster port for pixmap imaging. */
  4047. +     UBYTE        *temp_array;    /* Temporary colour manipulation array. */
  4048. +     LONG        *pens;
  4049. + } gx_device_amiga;
  4050. +     /* Function prototypes */
  4051. + VOID            set_mono_device(gx_device_amiga *dev);
  4052. + VOID            set_colour_device(gx_device_amiga *dev,int cube_size,LONG *pens);
  4053. + VOID            set_colour_printer_device(gx_device_amiga *dev,LONG CubeSize);
  4054. + VOID            DeleteBitMap(struct BitMap *BitMap,BOOL Private);
  4055. + struct BitMap *        CreateBitMap(LONG Width,LONG Height,LONG Depth,ULONG Flags,struct BitMap *Friend,BOOL Private);
  4056. + VOID            DeleteTempRPort(struct RastPort *Temp);
  4057. + struct RastPort *    CreateTempRPort(struct RastPort *Source);
  4058. + LONG            Euclid(LONG a,LONG b);
  4059. + BYTE *            PutDump(register BYTE *Destination,register LONG Count);
  4060. + BYTE *            PutRun(register BYTE *Destination,LONG Count,WORD Char);
  4061. + LONG            PackRow(PLANEPTR *SourcePtr,register BYTE *Destination,LONG RowSize);
  4062. + BOOL            PutBODY(struct IFFHandle *Handle,struct BitMap *BitMap);
  4063. + BOOL            PutANNO(struct IFFHandle *Handle);
  4064. + BOOL            PutCAMG(struct IFFHandle *Handle);
  4065. + BOOL            PutCMAP(struct IFFHandle *Handle);
  4066. + BOOL            PutDPI(struct IFFHandle *Handle,UWORD X_DPI,UWORD Y_DPI);
  4067. + BOOL            PutBMHD(struct IFFHandle *Handle,LONG Width,LONG Height,UWORD X_DPI,UWORD Y_DPI);
  4068. + BOOL            SaveBitMap(STRPTR Name,struct BitMap *BitMap,LONG Width,LONG Height,UWORD X_DPI,UWORD Y_DPI);
  4069. + float            GetInches(STRPTR Buffer);
  4070. + VOID            DispatchTask(VOID);
  4071. + VOID            DeleteScrollers(gx_device *dev);
  4072. + BOOL            CreateScrollers(gx_device *dev,struct Screen *Screen);
  4073. + VOID            WindowResize(gx_device *dev);
  4074. + VOID            WindowUpdate(struct Gadget *Gadget,gx_device *dev);
  4075. + VOID            MoveAround(struct Gadget *Gadget,LONG How,gx_device *dev);
  4076. + VOID            DispatchSuperWindow(gx_device *dev);
  4077. + void            devcleanup(VOID);
  4078. + gx_color_index        amiga_map_rgb_color(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue);
  4079. + int            amiga_map_color_rgb(gx_device *dev,gx_color_index color,gx_color_value rgb[3]);
  4080. + LONG *            AllocatePens(struct ViewPort *VPort,LONG CubeSize);
  4081. + int            amiga_open_default(gx_device *dev);
  4082. + int            amiga_open_low(gx_device *dev);
  4083. + int            amiga_open_high(gx_device *dev);
  4084. + int            amiga_open_super(gx_device *dev);
  4085. + int            amiga_open_a2024(gx_device *dev);
  4086. + int            amiga_open_picassoii(gx_device *dev);
  4087. + int            amiga_open_custom(gx_device *dev);
  4088. + int            amiga_open_printer(gx_device *dev);
  4089. + int            amiga_output_page_printer(gx_device *dev,int num_copies,int flush);
  4090. + int            amiga_close_printer(gx_device *dev);
  4091. + int            amiga_get_bits(gx_device *dev,int y,byte *str,byte **actual_data);
  4092. + int            amiga_open(gx_device *dev,ULONG Mode);
  4093. + int            amiga_output_page(gx_device *dev,int num_copies,int flush);
  4094. + int            amiga_close(gx_device *dev);
  4095. + int            amiga_fill_rectangle(gx_device *dev,int x,int y,int w,int h,gx_color_index color);
  4096. + int            amiga_copy_mono(gx_device *dev,const UBYTE *base,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h,gx_color_index zero,gx_color_index one);
  4097. + int            amiga_copy_color(gx_device *dev,const UBYTE *base,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h);
  4098. + int            amiga_draw_line(gx_device *dev,int x0,int y0,int x1,int y1,gx_color_index color);
  4099. + int            amiga_copy_mono_raw(gx_device *dev,const UBYTE *base,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h,gx_color_index zero,gx_color_index one);
  4100. + int            amiga_copy_color_raw(gx_device *dev,const UBYTE *base,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h);
  4101. + int            amiga_fill_rectangle_raw(gx_device *dev,int x,int y,int w,int h,gx_color_index color);
  4102. + int            amiga_draw_line_raw(gx_device *dev,int x,int y,int x1,int y1,gx_color_index color);
  4103. + int            amiga_open_ilbm(gx_device *dev);
  4104. + int            amiga_output_page_ilbm(gx_device *dev,int num_copies,int flush);
  4105. + int            amiga_close_ilbm(gx_device *dev);
  4106. + int            amiga_get_props(gx_device *dev,gs_prop_item *plist);
  4107. + int            amiga_put_props(gx_device *dev,gs_prop_item *plist,int count);
  4108. + gx_color_index        amiga_color_map_rgb_color(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue);
  4109. + int            amiga_color_map_color_rgb(gx_device *dev,gx_color_index color,gx_color_value rgb[3]);
  4110. + gx_color_index        amiga_color_map_rgb_color_pen(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue);
  4111. + int            amiga_color_map_color_rgb_pen(gx_device *dev,gx_color_index color,gx_color_value rgb[3]);
  4112. + int            amiga_copy_color8(gx_device *dev,const UBYTE *base,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h);
  4113. + int            amiga_copy_mono_raw_color(gx_device *dev,const UBYTE *base,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h,gx_color_index zero,gx_color_index one);
  4114. + int            amiga_copy_color_raw_color16(gx_device *dev,const UBYTE *data,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h);
  4115. + int            amiga_fill_rectangle_raw_color(gx_device *dev,int x,int y,int w,int h,gx_color_index color);
  4116. + int            amiga_draw_line_raw_color(gx_device *dev,int x,int y,int x1,int y1,gx_color_index color);
  4117. +     /* External reference to some libraries, required for version checking, etc. */
  4118. + extern struct GfxBase *GfxBase;
  4119. + extern struct Library *AslBase;
  4120. +     /* Number of packed bytes and pack buffer. */
  4121. + LONG    PackedBytes;
  4122. + BYTE    Buffer[MAXDAT + 1];
  4123. +     /* Bit masks. */
  4124. + STATIC UBYTE    shift[8] = { 128, 64, 32, 16,  8,  4,  2,  1 },
  4125. +         masks[8] = { 127,191,223,239,247,251,253,254 };
  4126. +     /* Device routine jump tables */
  4127. + STATIC gx_device_procs amiga_default_procs =
  4128. + {
  4129. +     amiga_open_default,
  4130. +     gx_default_get_initial_matrix,
  4131. +     gx_default_sync_output,
  4132. +     amiga_output_page,
  4133. +     amiga_close,
  4134. +     amiga_map_rgb_color,
  4135. +     amiga_map_color_rgb,
  4136. +     amiga_fill_rectangle,
  4137. +     gx_default_tile_rectangle,
  4138. +     amiga_copy_mono,
  4139. +     amiga_copy_color,
  4140. +     amiga_draw_line,
  4141. +     gx_default_get_bits,
  4142. +     amiga_get_props,
  4143. +     amiga_put_props
  4144. + };
  4145. + STATIC gx_device_procs amiga_low_procs =
  4146. + {
  4147. +     amiga_open_low,
  4148. +     gx_default_get_initial_matrix,
  4149. +     gx_default_sync_output,
  4150. +     amiga_output_page,
  4151. +     amiga_close,
  4152. +     amiga_map_rgb_color,
  4153. +     amiga_map_color_rgb,
  4154. +     amiga_fill_rectangle,
  4155. +     gx_default_tile_rectangle,
  4156. +     amiga_copy_mono,
  4157. +     amiga_copy_color,
  4158. +     amiga_draw_line,
  4159. +     gx_default_get_bits,
  4160. +     amiga_get_props,
  4161. +     amiga_put_props
  4162. + };
  4163. + STATIC gx_device_procs amiga_high_procs =
  4164. + {
  4165. +     amiga_open_high,
  4166. +     gx_default_get_initial_matrix,
  4167. +     gx_default_sync_output,
  4168. +     amiga_output_page,
  4169. +     amiga_close,
  4170. +     amiga_map_rgb_color,
  4171. +     amiga_map_color_rgb,
  4172. +     amiga_fill_rectangle,
  4173. +     gx_default_tile_rectangle,
  4174. +     amiga_copy_mono,
  4175. +     amiga_copy_color,
  4176. +     amiga_draw_line,
  4177. +     gx_default_get_bits,
  4178. +     amiga_get_props,
  4179. +     amiga_put_props
  4180. + };
  4181. + STATIC gx_device_procs amiga_super_procs =
  4182. + {
  4183. +     amiga_open_super,
  4184. +     gx_default_get_initial_matrix,
  4185. +     gx_default_sync_output,
  4186. +     amiga_output_page,
  4187. +     amiga_close,
  4188. +     amiga_map_rgb_color,
  4189. +     amiga_map_color_rgb,
  4190. +     amiga_fill_rectangle,
  4191. +     gx_default_tile_rectangle,
  4192. +     amiga_copy_mono,
  4193. +     amiga_copy_color,
  4194. +     amiga_draw_line,
  4195. +     gx_default_get_bits,
  4196. +     amiga_get_props,
  4197. +     amiga_put_props
  4198. + };
  4199. + STATIC gx_device_procs amiga_a2024_procs =
  4200. + {
  4201. +     amiga_open_a2024,
  4202. +     gx_default_get_initial_matrix,
  4203. +     gx_default_sync_output,
  4204. +     amiga_output_page,
  4205. +     amiga_close,
  4206. +     amiga_map_rgb_color,
  4207. +     amiga_map_color_rgb,
  4208. +     amiga_fill_rectangle,
  4209. +     gx_default_tile_rectangle,
  4210. +     amiga_copy_mono,
  4211. +     amiga_copy_color,
  4212. +     amiga_draw_line,
  4213. +     gx_default_get_bits,
  4214. +     amiga_get_props,
  4215. +     amiga_put_props
  4216. + };
  4217. + STATIC gx_device_procs amiga_picassoii_procs =
  4218. + {
  4219. +     amiga_open_picassoii,
  4220. +     gx_default_get_initial_matrix,
  4221. +     gx_default_sync_output,
  4222. +     amiga_output_page,
  4223. +     amiga_close,
  4224. +     amiga_map_rgb_color,
  4225. +     amiga_map_color_rgb,
  4226. +     amiga_fill_rectangle,
  4227. +     gx_default_tile_rectangle,
  4228. +     amiga_copy_mono,
  4229. +     amiga_copy_color,
  4230. +     amiga_draw_line,
  4231. +     gx_default_get_bits,
  4232. +     amiga_get_props,
  4233. +     amiga_put_props
  4234. + };
  4235. + STATIC gx_device_procs amiga_custom_procs =
  4236. + {
  4237. +     amiga_open_custom,
  4238. +     gx_default_get_initial_matrix,
  4239. +     gx_default_sync_output,
  4240. +     amiga_output_page,
  4241. +     amiga_close,
  4242. +     amiga_map_rgb_color,
  4243. +     amiga_map_color_rgb,
  4244. +     amiga_fill_rectangle,
  4245. +     gx_default_tile_rectangle,
  4246. +     amiga_copy_mono,
  4247. +     amiga_copy_color,
  4248. +     amiga_draw_line,
  4249. +     gx_default_get_bits,
  4250. +     amiga_get_props,
  4251. +     amiga_put_props
  4252. + };
  4253. + STATIC gx_device_procs amiga_printer_procs =
  4254. + {
  4255. +     amiga_open_printer,
  4256. +     gx_default_get_initial_matrix,
  4257. +     gx_default_sync_output,
  4258. +     amiga_output_page_printer,
  4259. +     amiga_close_printer,
  4260. +     amiga_map_rgb_color,
  4261. +     amiga_map_color_rgb,
  4262. +     amiga_fill_rectangle_raw,
  4263. +     gx_default_tile_rectangle,
  4264. +     amiga_copy_mono_raw,
  4265. +     amiga_copy_color_raw,
  4266. +     amiga_draw_line_raw,
  4267. +     amiga_get_bits,
  4268. +     amiga_get_props,
  4269. +     amiga_put_props
  4270. + };
  4271. + STATIC gx_device_procs amiga_ilbm_procs =
  4272. + {
  4273. +     amiga_open_ilbm,
  4274. +     gx_default_get_initial_matrix,
  4275. +     gx_default_sync_output,
  4276. +     amiga_output_page_ilbm,
  4277. +     amiga_close_ilbm,
  4278. +     amiga_map_rgb_color,
  4279. +     amiga_map_color_rgb,
  4280. +     amiga_fill_rectangle_raw,
  4281. +     gx_default_tile_rectangle,
  4282. +     amiga_copy_mono_raw,
  4283. +     amiga_copy_color_raw,
  4284. +     amiga_draw_line_raw,
  4285. +     amiga_get_bits,
  4286. +     amiga_get_props,
  4287. +     amiga_put_props
  4288. + };
  4289. +     /* Default device: opens a window on the Workbench screen and renders into it */
  4290. + gx_device_amiga gs_amiga_device =
  4291. + {
  4292. +     sizeof(gx_device_amiga),    /* params_size */
  4293. +     &amiga_default_procs,        /* procs */
  4294. +     "amiga",            /* dname */
  4295. +     0, 0,                /* width, height */
  4296. +     72.27, 72.27,            /* xdpi, ydpi */
  4297. +     no_margins,            /* margins */
  4298. +     dci_black_and_white,        /* color info */
  4299. +     0,                /* is_open */
  4300. +     NULL,                /* screen */
  4301. +     NULL,                /* window */
  4302. +     0,                /* super_width */
  4303. +     0,                /* super_height */
  4304. +     NULL,                /* super_bitmap */
  4305. +     NULL,                /* gadget */
  4306. +     NULL,                /* image */
  4307. +     NULL,                /* dispatcher */
  4308. +     NULL,                /* main */
  4309. +     NULL,                /* rport */
  4310. +     NULL,                /* printer */
  4311. +     NULL,                /* port */
  4312. +     NULL,                /* colormap */
  4313. +     NULL,                /* bitmap */
  4314. +     NULL,                /* bitplane */
  4315. +     1,                /* last_pen */
  4316. +     DEFAULT_WIDTH,            /* page width */
  4317. +     DEFAULT_HEIGHT,            /* page height */
  4318. +     DEFAULT_FILENAME,        /* output file */
  4319. +     1,                /* page counter */
  4320. +     0,                /* cube_size */
  4321. +     NULL,                /* temp_rport */
  4322. +     NULL,                /* temp_array */
  4323. +     NULL                /* pens */
  4324. + };
  4325. +     /* Low resolution device: opens a lores custom screen and renders into it */
  4326. + gx_device_amiga gs_amiga_low_device =
  4327. + {
  4328. +     sizeof(gx_device_amiga),    /* params_size */
  4329. +     &amiga_low_procs,        /* procs */
  4330. +     "amiga_low",            /* dname */
  4331. +     0, 0,                /* width, height */
  4332. +     72.27, 72.27,            /* xdpi, ydpi */
  4333. +     no_margins,            /* margins */
  4334. +     dci_black_and_white,        /* color info */
  4335. +     0,                /* is_open */
  4336. +     NULL,                /* screen */
  4337. +     NULL,                /* window */
  4338. +     0,                /* super_width */
  4339. +     0,                /* super_height */
  4340. +     NULL,                /* super_bitmap */
  4341. +     NULL,                /* gadget */
  4342. +     NULL,                /* image */
  4343. +     NULL,                /* dispatcher */
  4344. +     NULL,                /* main */
  4345. +     NULL,                /* rport */
  4346. +     NULL,                /* printer */
  4347. +     NULL,                /* port */
  4348. +     NULL,                /* colormap */
  4349. +     NULL,                /* bitmap */
  4350. +     NULL,                /* bitplane */
  4351. +     1,                /* last_pen */
  4352. +     DEFAULT_WIDTH,            /* page width */
  4353. +     DEFAULT_HEIGHT,            /* page height */
  4354. +     DEFAULT_FILENAME,        /* output file */
  4355. +     1,                /* page counter */
  4356. +     0,                /* cube_size */
  4357. +     NULL,                /* temp_rport */
  4358. +     NULL,                /* temp_array */
  4359. +     NULL                /* pens */
  4360. + };
  4361. +     /* High resolution device: opens a highres-interlaced custom screen */
  4362. + gx_device_amiga gs_amiga_high_device =
  4363. + {
  4364. +     sizeof(gx_device_amiga),    /* params_size */
  4365. +     &amiga_high_procs,        /* procs */
  4366. +     "amiga_high",            /* dname */
  4367. +     0, 0,                /* width, height */
  4368. +     72.27, 72.27,            /* xdpi, ydpi */
  4369. +     no_margins,            /* margins */
  4370. +     dci_black_and_white,        /* color info */
  4371. +     0,                /* is_open */
  4372. +     NULL,                /* screen */
  4373. +     NULL,                /* window */
  4374. +     0,                /* super_width */
  4375. +     0,                /* super_height */
  4376. +     NULL,                /* super_bitmap */
  4377. +     NULL,                /* gadget */
  4378. +     NULL,                /* image */
  4379. +     NULL,                /* dispatcher */
  4380. +     NULL,                /* main */
  4381. +     NULL,                /* rport */
  4382. +     NULL,                /* printer */
  4383. +     NULL,                /* port */
  4384. +     NULL,                /* colormap */
  4385. +     NULL,                /* bitmap */
  4386. +     NULL,                /* bitplane */
  4387. +     1,                /* last_pen */
  4388. +     DEFAULT_WIDTH,            /* page width */
  4389. +     DEFAULT_HEIGHT,            /* page height */
  4390. +     DEFAULT_FILENAME,        /* output file */
  4391. +     1,                /* page counter */
  4392. +     0,                /* cube_size */
  4393. +     NULL,                /* temp_rport */
  4394. +     NULL,                /* temp_array */
  4395. +     NULL                /* pens */
  4396. + };
  4397. +     /* Super high resolution device: opens a super-highres-interlaced custom screen */
  4398. + gx_device_amiga gs_amiga_super_device =
  4399. + {
  4400. +     sizeof(gx_device_amiga),    /* params_size */
  4401. +     &amiga_super_procs,        /* procs */
  4402. +     "amiga_super",            /* dname */
  4403. +     0, 0,                /* width, height */
  4404. +     72.27, 72.27,            /* xdpi, ydpi */
  4405. +     no_margins,            /* margins */
  4406. +     dci_black_and_white,        /* color info */
  4407. +     0,                /* is_open */
  4408. +     NULL,                /* screen */
  4409. +     NULL,                /* window */
  4410. +     0,                /* super_width */
  4411. +     0,                /* super_height */
  4412. +     NULL,                /* super_bitmap */
  4413. +     NULL,                /* gadget */
  4414. +     NULL,                /* image */
  4415. +     NULL,                /* dispatcher */
  4416. +     NULL,                /* main */
  4417. +     NULL,                /* rport */
  4418. +     NULL,                /* printer */
  4419. +     NULL,                /* port */
  4420. +     NULL,                /* colormap */
  4421. +     NULL,                /* bitmap */
  4422. +     NULL,                /* bitplane */
  4423. +     1,                /* last_pen */
  4424. +     DEFAULT_WIDTH,            /* page width */
  4425. +     DEFAULT_HEIGHT,            /* page height */
  4426. +     DEFAULT_FILENAME,        /* output file */
  4427. +     1,                /* page counter */
  4428. +     0,                /* cube_size */
  4429. +     NULL,                /* temp_rport */
  4430. +     NULL,                /* temp_array */
  4431. +     NULL                /* pens */
  4432. + };
  4433. +     /* A2024 device: opens an A2024 custom screen */
  4434. + gx_device_amiga gs_amiga_a2024_device =
  4435. + {
  4436. +     sizeof(gx_device_amiga),    /* params_size */
  4437. +     &amiga_a2024_procs,        /* procs */
  4438. +     "amiga_a2024",            /* dname */
  4439. +     0, 0,                /* width, height */
  4440. +     72.27, 72.27,            /* xdpi, ydpi */
  4441. +     no_margins,            /* margins */
  4442. +     dci_black_and_white,        /* color info */
  4443. +     0,                /* is_open */
  4444. +     NULL,                /* screen */
  4445. +     NULL,                /* window */
  4446. +     0,                /* super_width */
  4447. +     0,                /* super_height */
  4448. +     NULL,                /* super_bitmap */
  4449. +     NULL,                /* gadget */
  4450. +     NULL,                /* image */
  4451. +     NULL,                /* dispatcher */
  4452. +     NULL,                /* main */
  4453. +     NULL,                /* rport */
  4454. +     NULL,                /* printer */
  4455. +     NULL,                /* port */
  4456. +     NULL,                /* colormap */
  4457. +     NULL,                /* bitmap */
  4458. +     NULL,                /* bitplane */
  4459. +     1,                /* last_pen */
  4460. +     DEFAULT_WIDTH,            /* page width */
  4461. +     DEFAULT_HEIGHT,            /* page height */
  4462. +     DEFAULT_FILENAME,        /* output file */
  4463. +     1,                /* page counter */
  4464. +     0,                /* cube_size */
  4465. +     NULL,                /* temp_rport */
  4466. +     NULL,                /* temp_array */
  4467. +     NULL                /* pens */
  4468. + };
  4469. +     /* Picasso II device: opens a Picasso II custom screen */
  4470. + gx_device_amiga gs_amiga_picassoii_device =
  4471. + {
  4472. +     sizeof(gx_device_amiga),    /* params_size */
  4473. +     &amiga_picassoii_procs,        /* procs */
  4474. +     "amiga_picassoii",        /* dname */
  4475. +     0, 0,                /* width, height */
  4476. +     72.27, 72.27,            /* xdpi, ydpi */
  4477. +     no_margins,            /* margins */
  4478. +     dci_black_and_white,        /* color info */
  4479. +     0,                /* is_open */
  4480. +     NULL,                /* screen */
  4481. +     NULL,                /* window */
  4482. +     0,                /* super_width */
  4483. +     0,                /* super_height */
  4484. +     NULL,                /* super_bitmap */
  4485. +     NULL,                /* gadget */
  4486. +     NULL,                /* image */
  4487. +     NULL,                /* dispatcher */
  4488. +     NULL,                /* main */
  4489. +     NULL,                /* rport */
  4490. +     NULL,                /* printer */
  4491. +     NULL,                /* port */
  4492. +     NULL,                /* colormap */
  4493. +     NULL,                /* bitmap */
  4494. +     NULL,                /* bitplane */
  4495. +     1,                /* last_pen */
  4496. +     DEFAULT_WIDTH,            /* page width */
  4497. +     DEFAULT_HEIGHT,            /* page height */
  4498. +     DEFAULT_FILENAME,        /* output file */
  4499. +     1,                /* page counter */
  4500. +     0,                /* cube_size */
  4501. +     NULL,                /* temp_rport */
  4502. +     NULL,                /* temp_array */
  4503. +     NULL                /* pens */
  4504. + };
  4505. +     /* Custom device: opens a custom screen, will ask for screen mode or check env variable. */
  4506. + gx_device_amiga gs_amiga_custom_device =
  4507. + {
  4508. +     sizeof(gx_device_amiga),    /* params_size */
  4509. +     &amiga_custom_procs,        /* procs */
  4510. +     "amiga_custom",            /* dname */
  4511. +     0, 0,                /* width, height */
  4512. +     72.27, 72.27,            /* xdpi, ydpi */
  4513. +     no_margins,            /* margins */
  4514. +     dci_black_and_white,        /* color info */
  4515. +     0,                /* is_open */
  4516. +     NULL,                /* screen */
  4517. +     NULL,                /* window */
  4518. +     0,                /* super_width */
  4519. +     0,                /* super_height */
  4520. +     NULL,                /* super_bitmap */
  4521. +     NULL,                /* gadget */
  4522. +     NULL,                /* image */
  4523. +     NULL,                /* dispatcher */
  4524. +     NULL,                /* main */
  4525. +     NULL,                /* rport */
  4526. +     NULL,                /* printer */
  4527. +     NULL,                /* port */
  4528. +     NULL,                /* colormap */
  4529. +     NULL,                /* bitmap */
  4530. +     NULL,                /* bitplane */
  4531. +     1,                /* last_pen */
  4532. +     DEFAULT_WIDTH,            /* page width */
  4533. +     DEFAULT_HEIGHT,            /* page height */
  4534. +     DEFAULT_FILENAME,        /* output file */
  4535. +     1,                /* page counter */
  4536. +     0,                /* cube_size */
  4537. +     NULL,                /* temp_rport */
  4538. +     NULL,                /* temp_array */
  4539. +     NULL                /* pens */
  4540. + };
  4541. +     /* Printer device: renders the imagery and sends it to the printer */
  4542. + gx_device_amiga gs_amiga_printer_device =
  4543. + {
  4544. +     sizeof(gx_device_amiga),    /* params_size */
  4545. +     &amiga_printer_procs,        /* procs */
  4546. +     "amiga_printer",        /* dname */
  4547. +     0, 0,                /* width, height */
  4548. +     72.27, 72.27,            /* xdpi, ydpi */
  4549. +     no_margins,            /* margins */
  4550. +     dci_black_and_white,        /* color info */
  4551. +     0,                /* is_open */
  4552. +     NULL,                /* screen */
  4553. +     NULL,                /* window */
  4554. +     0,                /* super_width */
  4555. +     0,                /* super_height */
  4556. +     NULL,                /* super_bitmap */
  4557. +     NULL,                /* gadget */
  4558. +     NULL,                /* image */
  4559. +     NULL,                /* dispatcher */
  4560. +     NULL,                /* main */
  4561. +     NULL,                /* rport */
  4562. +     NULL,                /* printer */
  4563. +     NULL,                /* port */
  4564. +     NULL,                /* colormap */
  4565. +     NULL,                /* bitmap */
  4566. +     NULL,                /* bitplane */
  4567. +     1,                /* last_pen */
  4568. +     DEFAULT_WIDTH,            /* page width */
  4569. +     DEFAULT_HEIGHT,            /* page height */
  4570. +     DEFAULT_FILENAME,        /* output file */
  4571. +     1,                /* page counter */
  4572. +     0,                /* cube_size */
  4573. +     NULL,                /* temp_rport */
  4574. +     NULL,                /* temp_array */
  4575. +     NULL                /* pens */
  4576. + };
  4577. +     /* ILBM device: renders the imagery and saves it to an IFF-ILBM file. */
  4578. + gx_device_amiga gs_amiga_ilbm_device =
  4579. + {
  4580. +     sizeof(gx_device_amiga),    /* params_size */
  4581. +     &amiga_ilbm_procs,        /* procs */
  4582. +     "amiga_ilbm",            /* dname */
  4583. +     0, 0,                /* width, height */
  4584. +     72.27, 72.27,            /* xdpi, ydpi */
  4585. +     no_margins,            /* margins */
  4586. +     dci_black_and_white,        /* color info */
  4587. +     0,                /* is_open */
  4588. +     NULL,                /* screen */
  4589. +     NULL,                /* window */
  4590. +     0,                /* super_width */
  4591. +     0,                /* super_height */
  4592. +     NULL,                /* super_bitmap */
  4593. +     NULL,                /* gadget */
  4594. +     NULL,                /* image */
  4595. +     NULL,                /* dispatcher */
  4596. +     NULL,                /* main */
  4597. +     NULL,                /* rport */
  4598. +     NULL,                /* printer */
  4599. +     NULL,                /* port */
  4600. +     NULL,                /* colormap */
  4601. +     NULL,                /* bitmap */
  4602. +     NULL,                /* bitplane */
  4603. +     1,                /* last_pen */
  4604. +     DEFAULT_WIDTH,            /* page width */
  4605. +     DEFAULT_HEIGHT,            /* page height */
  4606. +     DEFAULT_FILENAME,        /* output file */
  4607. +     1,                /* page counter */
  4608. +     0,                /* cube_size */
  4609. +     NULL,                /* temp_rport */
  4610. +     NULL,                /* temp_array */
  4611. +     NULL                /* pens */
  4612. + };
  4613. +     /* Dark (black) and light (white) rendering colours; the default device
  4614. +      * determines the actual colours to be used by looking into the screen
  4615. +      * colour lookup table, the other device drivers leave these values
  4616. +      * untouched.
  4617. +      */
  4618. + STATIC UBYTE    DarkPen        = 0,
  4619. +         LightPen    = 1;
  4620. +     /* Cheap, but effective ;-) */
  4621. + #define xdev ((gx_device_amiga *)dev)
  4622. +     /* set_mono_device(gx_device_amiga *dev,int cube_size,LONG *pens):
  4623. +      *
  4624. +      *    Reconfigure a device for monochrome output.
  4625. +      */
  4626. + VOID
  4627. + set_mono_device(gx_device_amiga *dev)
  4628. + {
  4629. +     xdev -> color_info . depth        = 1;
  4630. +     xdev -> color_info . num_components    = 1;
  4631. +     xdev -> color_info . max_gray        = 1;
  4632. +     xdev -> color_info . max_rgb        = 0;
  4633. +     xdev -> color_info . dither_gray    = 2;
  4634. +     xdev -> color_info . dither_rgb        = 0;
  4635. +     xdev -> procs -> copy_color        = amiga_copy_color;
  4636. +     xdev -> procs -> map_rgb_color        = amiga_map_rgb_color;
  4637. +     xdev -> procs -> map_color_rgb        = amiga_map_color_rgb;
  4638. +     xdev -> cube_size            = 0;
  4639. + }
  4640. +     /* set_colour_device(gx_device_amiga *dev,int cube_size,LONG *pens):
  4641. +      *
  4642. +      *    Reconfigure a device for colour output.
  4643. +      */
  4644. + VOID
  4645. + set_colour_device(gx_device_amiga *dev,int cube_size,LONG *pens)
  4646. + {
  4647. +     xdev -> color_info . depth        = 8;
  4648. +     xdev -> color_info . num_components    = 3;
  4649. +     xdev -> color_info . max_gray        = cube_size - 1;
  4650. +     xdev -> color_info . max_rgb        = cube_size - 1;
  4651. +     xdev -> color_info . dither_gray    = cube_size;
  4652. +     xdev -> color_info . dither_rgb        = cube_size;
  4653. +     xdev -> procs -> copy_color        = amiga_copy_color8;
  4654. +         /* Any colours to be remapped? */
  4655. +     if(pens)
  4656. +     {
  4657. +         xdev -> procs -> map_rgb_color    = amiga_color_map_rgb_color_pen;
  4658. +         xdev -> procs -> map_color_rgb    = amiga_color_map_color_rgb_pen;
  4659. +         xdev -> pens            = pens;
  4660. +     }
  4661. +     else
  4662. +     {
  4663. +         xdev -> procs -> map_rgb_color    = amiga_color_map_rgb_color;
  4664. +         xdev -> procs -> map_color_rgb    = amiga_color_map_color_rgb;
  4665. +     }
  4666. +         /* Remember the size of the RGB cube. */
  4667. +     xdev -> cube_size            = cube_size;
  4668. + }
  4669. +     /* set_colour_printer_device(gx_device_amiga *dev,LONG CubeSize):
  4670. +      *
  4671. +      *    Configure the printer device for colour output.
  4672. +      */
  4673. + VOID
  4674. + set_colour_printer_device(gx_device_amiga *dev,LONG CubeSize)
  4675. + {
  4676. +     xdev -> color_info . depth        = 16;
  4677. +     xdev -> color_info . num_components    = 3;
  4678. +     xdev -> color_info . max_gray        = CubeSize - 1;
  4679. +     xdev -> color_info . max_rgb        = CubeSize - 1;
  4680. +     xdev -> color_info . dither_gray    = CubeSize;
  4681. +     xdev -> color_info . dither_rgb        = CubeSize;
  4682. +     xdev -> procs -> fill_rectangle        = amiga_fill_rectangle_raw_color;
  4683. +     xdev -> procs -> copy_mono        = amiga_copy_mono_raw_color;
  4684. +     xdev -> procs -> copy_color        = amiga_copy_color_raw_color16;
  4685. +     xdev -> procs -> draw_line        = amiga_draw_line_raw_color;
  4686. +     xdev -> procs -> get_bits        = gx_default_get_bits;
  4687. +     xdev -> procs -> map_rgb_color        = amiga_color_map_rgb_color;
  4688. +     xdev -> procs -> map_color_rgb        = amiga_color_map_color_rgb;
  4689. +     xdev -> cube_size            = CubeSize;
  4690. + }
  4691. +     /* DeleteBitMap(struct BitMap *BitMap,BOOL Private):
  4692. +      *
  4693. +      *    Free memory associated with a custom rendering bitmap.
  4694. +      */
  4695. + VOID
  4696. + DeleteBitMap(struct BitMap *BitMap,BOOL Private)
  4697. + {
  4698. +     if(GfxBase -> LibNode . lib_Version >= 39 && !Private)
  4699. +         FreeBitMap(BitMap);
  4700. +     else
  4701. +     {
  4702. +         LONG i;
  4703. +         for(i = 0 ; i < BitMap -> Depth ; i++)
  4704. +         {
  4705. +             if(BitMap -> Planes[i])
  4706. +                 FreeVec(BitMap -> Planes[i]);
  4707. +         }
  4708. +         FreeVec(BitMap);
  4709. +     }
  4710. + }
  4711. +     /* CreateBitMap(LONG Width,LONG Height,LONG Depth,ULONG Flags,struct BitMap *Friend,BOOL Private):
  4712. +      *
  4713. +      *    Create a custom rendering bitmap.
  4714. +      */
  4715. + struct BitMap *
  4716. + CreateBitMap(LONG Width,LONG Height,LONG Depth,ULONG Flags,struct BitMap *Friend,BOOL Private)
  4717. + {
  4718. +     if(GfxBase -> LibNode . lib_Version >= 39 && !Private)
  4719. +         return(AllocBitMap(Width,Height,Depth,Flags,Friend));
  4720. +     else
  4721. +     {
  4722. +         struct BitMap    *BitMap;
  4723. +         LONG         Plus;
  4724. +         ULONG         MemType;
  4725. +             /* Bitmap structure needs to be padded if more
  4726. +              * than the standard eight bitplanes are to be
  4727. +              * allocated.
  4728. +              */
  4729. +         if(Depth > 8)
  4730. +             Plus = (Depth - 8) * sizeof(PLANEPTR);
  4731. +         else
  4732. +             Plus = 0;
  4733. +         if(Private)
  4734. +             MemType = MEMF_ANY;
  4735. +         else
  4736. +             MemType = MEMF_CHIP;
  4737. +         if(BitMap = (struct BitMap *)AllocVec(sizeof(struct BitMap) + Plus,MEMF_ANY | MEMF_CLEAR))
  4738. +         {
  4739. +             LONG i,PageSize;
  4740. +             InitBitMap(BitMap,Depth,Width,Height);
  4741. +             PageSize = BitMap -> BytesPerRow * BitMap -> Rows;
  4742. +             for(i = 0 ; i < BitMap -> Depth ; i++)
  4743. +             {
  4744. +                 if(!(BitMap -> Planes[i] = (PLANEPTR)AllocVec(PageSize,MemType)))
  4745. +                 {
  4746. +                     LONG j;
  4747. +                     for(j = 0 ; j < i ; j++)
  4748. +                         FreeVec(BitMap -> Planes[j]);
  4749. +                     FreeVec(BitMap);
  4750. +                     return(NULL);
  4751. +                 }
  4752. +             }
  4753. +             return(BitMap);
  4754. +         }
  4755. +     }
  4756. + }
  4757. +     /* DeleteTempRPort(struct RastPort *Temp):
  4758. +      *
  4759. +      *    Free memory associated with a temporary raster port.
  4760. +      */
  4761. + VOID
  4762. + DeleteTempRPort(struct RastPort *Temp)
  4763. + {
  4764. +     DeleteBitMap(Temp -> BitMap,FALSE);
  4765. +     FreeVec(Temp);
  4766. + }
  4767. +     /* CreateTempRPort(struct RastPort *Source):
  4768. +      *
  4769. +      *    Allocate memory for temporary raster port (one line high).
  4770. +      */
  4771. + struct RastPort *
  4772. + CreateTempRPort(struct RastPort *Source)
  4773. + {
  4774. +     struct RastPort *Temp;
  4775. +     if(Temp = (struct RastPort *)AllocVec(sizeof(struct RastPort),MEMF_ANY))
  4776. +     {
  4777. +         LONG Width,Depth;
  4778. +         CopyMem(Source,Temp,sizeof(struct RastPort));
  4779. +         Temp -> Layer = NULL;
  4780. +         if(GfxBase -> LibNode . lib_Version >= 39)
  4781. +         {
  4782. +             Width    = GetBitMapAttr(Source -> BitMap,BMA_WIDTH);
  4783. +             Depth    = GetBitMapAttr(Source -> BitMap,BMA_DEPTH);
  4784. +         }
  4785. +         else
  4786. +         {
  4787. +             Width    = Source -> BitMap -> BytesPerRow * 8;
  4788. +             Depth    = Source -> BitMap -> Depth;
  4789. +         }
  4790. +         if(Temp -> BitMap = CreateBitMap(Width,1,Depth,NULL,Source -> BitMap,FALSE))
  4791. +             return(Temp);
  4792. +         else
  4793. +             FreeVec(Temp);
  4794. +     }
  4795. +     return(NULL);
  4796. + }
  4797. +     /* Euclid(LONG a,LONG b):
  4798. +      *
  4799. +      *    Compute the greatest common divisor of two integers.
  4800. +      */
  4801. + LONG
  4802. + Euclid(LONG a,LONG b)
  4803. + {
  4804. +     do
  4805. +     {
  4806. +         if(a < b)
  4807. +         {
  4808. +             LONG t;
  4809. +             t = a;
  4810. +             a = b;
  4811. +             b = t;
  4812. +         }
  4813. +         a = a % b;
  4814. +     }
  4815. +     while(a);
  4816. +     return(b);
  4817. + }
  4818. +     /* PutDump(register BYTE *Destination,register LONG Count):
  4819. +      *
  4820. +      *    Store a byte dump.
  4821. +      */
  4822. + BYTE *
  4823. + PutDump(register BYTE *Destination,register LONG Count)
  4824. + {
  4825. +     register BYTE *Source = Buffer;
  4826. +     *Destination++     = Count - 1;
  4827. +      PackedBytes    += Count + 1;
  4828. +     while(Count--)
  4829. +         *Destination++ = *Source++;
  4830. +     return(Destination);
  4831. + }
  4832. +     /* PutRun(register BYTE *Destination,LONG Count,WORD Char):
  4833. +      *
  4834. +      *    Store a byte run.
  4835. +      */
  4836. + BYTE *
  4837. + PutRun(register BYTE *Destination,LONG Count,WORD Char)
  4838. + {
  4839. +     *Destination++     = -(Count - 1);
  4840. +     *Destination++     = Char;
  4841. +      PackedBytes    += 2; 
  4842. +     return(Destination);
  4843. + }
  4844. +     /* PackRow(PLANEPTR *SourcePtr,register BYTE *Destination,LONG RowSize):
  4845. +      *
  4846. +      *    Pack a raster line using the CmpByteRun1 algorithm.
  4847. +      */
  4848. + LONG
  4849. + PackRow(PLANEPTR *SourcePtr,register BYTE *Destination,LONG RowSize)
  4850. + {
  4851. +     register BYTE *Source = *SourcePtr;
  4852. +     WORD    Buffered    = 1,
  4853. +         RunStart    = 0;
  4854. +     BYTE    Mode        = DUMP,
  4855. +         LastChar,
  4856. +         Char;
  4857. +     PackedBytes = 0;
  4858. +     Buffer[0] = LastChar = Char = *Source++;
  4859. +     RowSize--;
  4860. +     while(RowSize--)
  4861. +     {
  4862. +         Buffer[Buffered++] = Char = *Source++;
  4863. +         if(Mode)
  4864. +         {
  4865. +             if((Char != LastChar) || (Buffered - RunStart > MAXRUN))
  4866. +             {
  4867. +                 Destination    = PutRun(Destination,Buffered - 1 - RunStart,LastChar);
  4868. +                 Buffer[0]    = Char;
  4869. +                 Buffered    = 1;
  4870. +                 RunStart    = 0;
  4871. +                 Mode        = DUMP;
  4872. +             }
  4873. +         }
  4874. +         else
  4875. +         {
  4876. +             if(Buffered > MAXDAT)
  4877. +             {
  4878. +                 Destination    = PutDump(Destination,Buffered - 1);
  4879. +                 Buffer[0]    = Char;
  4880. +                 Buffered    = 1;
  4881. +                 RunStart    = 0;
  4882. +             }
  4883. +             else
  4884. +             {
  4885. +                 if(Char == LastChar)
  4886. +                 {
  4887. +                     if(Buffered - RunStart >= MINRUN)
  4888. +                     {
  4889. +                         if(RunStart)
  4890. +                             Destination = PutDump(Destination,RunStart);
  4891. +                         Mode = RUN;
  4892. +                     }
  4893. +                     else
  4894. +                     {
  4895. +                         if(!RunStart)
  4896. +                             Mode = RUN;
  4897. +                     }
  4898. +                 }
  4899. +                 else
  4900. +                     RunStart = Buffered - 1;
  4901. +             }
  4902. +         }
  4903. +         LastChar = Char;
  4904. +     }
  4905. +     if(Mode)
  4906. +         PutRun(Destination,Buffered - RunStart,LastChar);
  4907. +     else
  4908. +         PutDump(Destination,Buffered);
  4909. +     *SourcePtr = Source;
  4910. +     return(PackedBytes);
  4911. + }
  4912. +     /* PutBODY(struct IFFHandle *Handle,struct BitMap *BitMap):
  4913. +      *
  4914. +      *    Store a bitmap in a BODY chunk.
  4915. +      */
  4916. + BOOL
  4917. + PutBODY(struct IFFHandle *Handle,struct BitMap *BitMap)
  4918. + {
  4919. +     PLANEPTR    *Planes;
  4920. +     BYTE        *PackBuffer;
  4921. +     BOOL         Success = FALSE;
  4922. +     LONG         PackedBytes,
  4923. +              i,j;
  4924. +         /* Allocate the bitplane information. */
  4925. +     if(Planes = (PLANEPTR *)AllocVec(BitMap -> Depth * sizeof(PLANEPTR *),MEMF_ANY | MEMF_CLEAR))
  4926. +     {
  4927. +             /* Allocate the compression buffer. */
  4928. +         if(PackBuffer = (BYTE *)AllocVec(BitMap -> BytesPerRow * 2,MEMF_ANY))
  4929. +         {
  4930. +                 /* Copy the planes over. */
  4931. +             for(i = 0 ; i < BitMap -> Depth ; i++)
  4932. +                 Planes[i] = BitMap -> Planes[i];
  4933. +             if(!PushChunk(Handle,0,ID_BODY,IFFSIZE_UNKNOWN))
  4934. +             {
  4935. +                 Success = TRUE;
  4936. +                     /* Run down the rows. */
  4937. +                 for(i = 0 ; Success && i < BitMap -> Rows ; i++)
  4938. +                 {
  4939. +                     for(j = 0 ; Success && j < BitMap -> Depth ; j++)
  4940. +                     {
  4941. +                             /* Pack the data. */
  4942. +                         PackedBytes = PackRow(&Planes[j],PackBuffer,BitMap -> BytesPerRow);
  4943. +                             /* Write it to disk. */
  4944. +                         if(WriteChunkRecords(Handle,PackBuffer,PackedBytes,1) != 1)
  4945. +                             Success = FALSE;
  4946. +                     }
  4947. +                 }
  4948. +                 if(PopChunk(Handle))
  4949. +                     Success = FALSE;
  4950. +             }
  4951. +             FreeVec(PackBuffer);
  4952. +         }
  4953. +         FreeVec(Planes);
  4954. +     }
  4955. +     return(Success);
  4956. + }
  4957. +     /* PutANNO(struct IFFHandle *Handle):
  4958. +      *
  4959. +      *    Store annotation chunk.
  4960. +      */
  4961. + BOOL
  4962. + PutANNO(struct IFFHandle *Handle)
  4963. + {
  4964. +     STATIC STRPTR Note = "Rendered by GNU Ghostscript 2.6.0";
  4965. +     if(!PushChunk(Handle,0,ID_ANNO,strlen(Note)))
  4966. +     {
  4967. +         if(WriteChunkRecords(Handle,Note,strlen(Note),1) == 1)
  4968. +         {
  4969. +             if(!PopChunk(Handle))
  4970. +                 return(TRUE);
  4971. +         }
  4972. +     }
  4973. +     return(FALSE);
  4974. + }
  4975. +     /* PutCAMG(struct IFFHandle *Handle):
  4976. +      *
  4977. +      *    Store display mode chunk.
  4978. +      */
  4979. + BOOL
  4980. + PutCAMG(struct IFFHandle *Handle)
  4981. + {
  4982. +     ULONG ViewModes = HIRESLACE_KEY;
  4983. +     if(!PushChunk(Handle,0,ID_CAMG,sizeof(ULONG)))
  4984. +     {
  4985. +         if(WriteChunkRecords(Handle,&ViewModes,sizeof(ULONG),1) == 1)
  4986. +         {
  4987. +             if(!PopChunk(Handle))
  4988. +                 return(TRUE);
  4989. +         }
  4990. +     }
  4991. +     return(FALSE);
  4992. + }
  4993. +     /* PutCMAP(struct IFFHandle *Handle):
  4994. +      *
  4995. +      *    Store colour map chunk.
  4996. +      */
  4997. + BOOL
  4998. + PutCMAP(struct IFFHandle *Handle)
  4999. + {
  5000. +     STATIC UBYTE Colours[2][3] =
  5001. +     {
  5002. +         0x00,0x00,0x00,
  5003. +         0xFF,0xFF,0xFF
  5004. +     };
  5005. +     if(!PushChunk(Handle,0,ID_CMAP,sizeof(Colours)))
  5006. +     {
  5007. +         if(WriteChunkRecords(Handle,Colours,2,3) == 3)
  5008. +         {
  5009. +             if(!PopChunk(Handle))
  5010. +                 return(TRUE);
  5011. +         }
  5012. +     }
  5013. +     return(FALSE);
  5014. + }
  5015. +     /* PutDPI(struct IFFHandle *Handle,UWORD X_DPI,UWORD Y_DPI):
  5016. +      *
  5017. +      *    Store DPI chunk.
  5018. +      */
  5019. + BOOL
  5020. + PutDPI(struct IFFHandle *Handle,UWORD X_DPI,UWORD Y_DPI)
  5021. + {
  5022. +     DPIHeader Header;
  5023. +     Header . dpi_x = X_DPI;
  5024. +     Header . dpi_y = Y_DPI;
  5025. +     if(!PushChunk(Handle,0,ID_DPI,sizeof(Header)))
  5026. +     {
  5027. +         if(WriteChunkRecords(Handle,&Header,sizeof(Header),1) == 1)
  5028. +         {
  5029. +             if(!PopChunk(Handle))
  5030. +                 return(TRUE);
  5031. +         }
  5032. +     }
  5033. +     return(FALSE);
  5034. + }
  5035. +     /* PutBMHD(struct IFFHandle *Handle,LONG Width,LONG Height,UWORD X_DPI,UWORD Y_DPI):
  5036. +      *
  5037. +      *    Store BMHD chunk.
  5038. +      */
  5039. + BOOL
  5040. + PutBMHD(struct IFFHandle *Handle,LONG Width,LONG Height,UWORD X_DPI,UWORD Y_DPI)
  5041. + {
  5042. +         /* Valid parameters? */
  5043. +     if(X_DPI > 0 && Y_DPI > 0 && Width > 0 && Height > 0)
  5044. +     {
  5045. +         BitMapHeader    Header;
  5046. +         UWORD        gcd;
  5047. +             /* So we can store neat & small
  5048. +              * aspect ration values.
  5049. +              */
  5050. +         gcd = Euclid(X_DPI,Y_DPI);
  5051. +         Header . w            = Width;
  5052. +         Header . h            = Height;
  5053. +         Header . pageWidth        = Width;
  5054. +         Header . pageHeight        = Height;
  5055. +         Header . x            = 0;
  5056. +         Header . y            = 0;
  5057. +         Header . nPlanes        = 1;
  5058. +         Header . masking        = 0;
  5059. +         Header . compression        = 1;
  5060. +         Header . pad1            = 0;
  5061. +         Header . transparentColor    = 0;
  5062. +         Header . xAspect        = X_DPI / gcd;
  5063. +         Header . yAspect        = Y_DPI / gcd;
  5064. +         if(!PushChunk(Handle,0,ID_BMHD,sizeof(Header)))
  5065. +         {
  5066. +             if(WriteChunkRecords(Handle,&Header,sizeof(Header),1) == 1)
  5067. +             {
  5068. +                 if(!PopChunk(Handle))
  5069. +                     return(TRUE);
  5070. +             }
  5071. +         }
  5072. +     }
  5073. +     return(FALSE);
  5074. + }
  5075. +     /* SaveBitMap(STRPTR Name,struct BitMap *BitMap,LONG Width,LONG Height,UWORD X_DPI,UWORD Y_DPI):
  5076. +      *
  5077. +      *    Store a bitmap in an IFF-ILBM file.
  5078. +      */
  5079. + BOOL
  5080. + SaveBitMap(STRPTR Name,struct BitMap *BitMap,LONG Width,LONG Height,UWORD X_DPI,UWORD Y_DPI)
  5081. + {
  5082. +     struct IFFHandle    *Handle;
  5083. +     BOOL             Success = FALSE;
  5084. +     if(Handle = AllocIFF())
  5085. +     {
  5086. +         if(Handle -> iff_Stream = Open(Name,MODE_NEWFILE))
  5087. +         {
  5088. +             InitIFFasDOS(Handle);
  5089. +             if(!OpenIFF(Handle,IFFF_WRITE))
  5090. +             {
  5091. +                 if(!PushChunk(Handle,ID_ILBM,ID_FORM,IFFSIZE_UNKNOWN))
  5092. +                 {
  5093. +                     if(PutBMHD(Handle,Width,Height,X_DPI,Y_DPI))
  5094. +                     {
  5095. +                         if(PutANNO(Handle))
  5096. +                         {
  5097. +                             if(PutCMAP(Handle))
  5098. +                             {
  5099. +                                 if(PutCAMG(Handle))
  5100. +                                 {
  5101. +                                     if(PutDPI(Handle,X_DPI,Y_DPI))
  5102. +                                     {
  5103. +                                         if(PutBODY(Handle,BitMap))
  5104. +                                             Success = TRUE;
  5105. +                                     }
  5106. +                                 }
  5107. +                             }
  5108. +                         }
  5109. +                     }
  5110. +                     if(PopChunk(Handle))
  5111. +                         Success = FALSE;
  5112. +                 }
  5113. +                 CloseIFF(Handle);
  5114. +             }
  5115. +             Close(Handle -> iff_Stream);
  5116. +             if(!Success)
  5117. +                 DeleteFile(Name);
  5118. +         }
  5119. +         FreeIFF(Handle);
  5120. +     }
  5121. +     return(Success);
  5122. + }
  5123. +     /* GetInches(STRPTR Buffer):
  5124. +      *
  5125. +      *    Turn a parameter string into a number representing
  5126. +      *    a certain number of inches.
  5127. +      */
  5128. + float
  5129. + GetInches(STRPTR Buffer)
  5130. + {
  5131. +     STATIC struct { STRPTR Unit; float Factor; } Units[7] =
  5132. +     {
  5133. +         "pt",    1.0,            /* Point */
  5134. +         "pc",    12.0,            /* Pica */
  5135. +         "in",    72.72,            /* Inch */
  5136. +         "cm",    72.72 / 2.54,        /* Centimeter */
  5137. +         "mm",    727.2 / 2.54,        /* Millimeter */
  5138. +         "dd",    1157.0 / 1238.0,    /* Didot point */
  5139. +         "cc",    1157.0 / 103.0        /* Cicero */
  5140. +     };
  5141. +     UBYTE    Temp[40];
  5142. +     float    Value;
  5143. +     LONG    i;
  5144. +     i = 0;
  5145. +         /* Strip the numeric part. */
  5146. +     while((Buffer[i] >= '0' && Buffer[i] <= '9') || Buffer[i] == '.' || Buffer[i] == '+' || Buffer[i] == '-' || Buffer[i] == 'e')
  5147. +     {
  5148. +         Temp[i] = Buffer[i];
  5149. +         i++;
  5150. +     }
  5151. +         /* Provide null-termination. */
  5152. +     Temp[i] = 0;
  5153. +         /* atof() appears to be broken in ixemul.library 39.45. */
  5154. +     sscanf(Temp,"%f",&Value);
  5155. +     Buffer += i;
  5156. +         /* Which measuring unit? */
  5157. +     for(i = 0 ; i < 7 ; i++)
  5158. +     {
  5159. +             /* Return the result in inches. */
  5160. +         if(!Stricmp(Buffer,Units[i] . Unit))
  5161. +             return(Value * Units[i] . Factor / 72.27);
  5162. +     }
  5163. +         /* Return the result in inches. */
  5164. +     return(Value / 72.27);
  5165. + }
  5166. +     /* DispatchTask():
  5167. +      *
  5168. +      *    Asynchronous window message dispatcher.
  5169. +      */
  5170. + VOID
  5171. + DispatchTask()
  5172. + {
  5173. +     struct Task    *me;
  5174. +     gx_device    *dev;
  5175. +         /* Set up global data area base register. */
  5176. +     ix_geta4();
  5177. +         /* Who am I? */
  5178. +     me = FindTask(NULL);
  5179. +         /* Wait for wakeup call. */
  5180. +     Wait(SIG_HANDSHAKE);
  5181. +         /* Obtain device pointer. */
  5182. +     dev = me -> tc_UserData;
  5183. +         /* Enable user input. */
  5184. +     if(ModifyIDCMP(xdev -> window,IDCMP_FLAGS))
  5185. +     {
  5186. +         ULONG    Mask = 1 << xdev -> window -> UserPort -> mp_SigBit,
  5187. +             Set;
  5188. +         BOOL    Done = FALSE;
  5189. +             /* Fill in the dispatcher entry. */
  5190. +         xdev -> dispatcher = me;
  5191. +             /* Ring back. */
  5192. +         Signal((struct Task *)xdev -> main,SIG_HANDSHAKE);
  5193. +             /* Wait for input... */
  5194. +         do
  5195. +         {
  5196. +             Set = Wait(Mask | SIG_KILL);
  5197. +             if(Set & Mask)
  5198. +                 DispatchSuperWindow(dev);
  5199. +             if(Set & SIG_KILL)
  5200. +                 Done = TRUE;
  5201. +         }
  5202. +         while(!Done);
  5203. +             /* Disable user input. */
  5204. +         ModifyIDCMP(xdev -> window,NULL);
  5205. +     }
  5206. +         /* Disable task switching. */
  5207. +     Forbid();
  5208. +         /* Clear the dispatcher entry. */
  5209. +     xdev -> dispatcher = NULL;
  5210. +         /* Signal the main process that we are done. */
  5211. +     Signal((struct Task *)xdev -> main,SIG_HANDSHAKE);
  5212. +         /* Remove ourselves. */
  5213. +     RemTask(NULL);
  5214. + }
  5215. +     /* DeleteScrollers(gx_device *dev):
  5216. +      *
  5217. +      *    Delete the window border scrollers.
  5218. +      */
  5219. + VOID
  5220. + DeleteScrollers(gx_device *dev)
  5221. + {
  5222. +     if(xdev -> gadget)
  5223. +     {
  5224. +         if(xdev -> gadget[HORIZONTAL_SCROLLER])
  5225. +             DisposeObject(xdev -> gadget[HORIZONTAL_SCROLLER]);
  5226. +         if(xdev -> gadget[VERTICAL_SCROLLER])
  5227. +             DisposeObject(xdev -> gadget[VERTICAL_SCROLLER]);
  5228. +         if(xdev -> gadget[UP_ARROW])
  5229. +             DisposeObject(xdev -> gadget[UP_ARROW]);
  5230. +         if(xdev -> gadget[DOWN_ARROW])
  5231. +             DisposeObject(xdev -> gadget[DOWN_ARROW]);
  5232. +         if(xdev -> gadget[LEFT_ARROW])
  5233. +             DisposeObject(xdev -> gadget[LEFT_ARROW]);
  5234. +         if(xdev -> gadget[RIGHT_ARROW])
  5235. +             DisposeObject(xdev -> gadget[RIGHT_ARROW]);
  5236. +         FreeVec(xdev -> gadget);
  5237. +         xdev -> gadget = NULL;
  5238. +     }
  5239. +     if(xdev -> image)
  5240. +     {
  5241. +         if(xdev -> image[UP_IMAGE])
  5242. +             DisposeObject(xdev -> image[UP_IMAGE]);
  5243. +         if(xdev -> image[DOWN_IMAGE])
  5244. +             DisposeObject(xdev -> image[DOWN_IMAGE]);
  5245. +         if(xdev -> image[LEFT_IMAGE])
  5246. +             DisposeObject(xdev -> image[LEFT_IMAGE]);
  5247. +         if(xdev -> image[RIGHT_IMAGE])
  5248. +             DisposeObject(xdev -> image[RIGHT_IMAGE]);
  5249. +         FreeVec(xdev -> image);
  5250. +         xdev -> image = NULL;
  5251. +     }
  5252. + }
  5253. +     /* CreateScrollers(gx_device *dev,struct Screen *Screen):
  5254. +      *
  5255. +      *    Create the window border scroller handles.
  5256. +      */
  5257. + BOOL
  5258. + CreateScrollers(gx_device *dev,struct Screen *Screen)
  5259. + {
  5260. +     BOOL Result = FALSE;
  5261. +     if(xdev -> gadget = (struct Gadget **)AllocVec(sizeof(struct Gadget *) * GADGET_COUNT,MEMF_ANY | MEMF_CLEAR | MEMF_PUBLIC))
  5262. +     {
  5263. +         if(xdev -> image = (struct Image **)AllocVec(sizeof(struct Image *) * IMAGE_COUNT,MEMF_ANY | MEMF_CLEAR | MEMF_PUBLIC))
  5264. +         {
  5265. +             struct DrawInfo *DrawInfo;
  5266. +             if(DrawInfo = GetScreenDrawInfo(Screen))
  5267. +             {
  5268. +                 LONG    SizeWidth,
  5269. +                     SizeHeight;
  5270. +                 UWORD    SizeType;
  5271. +                 if(Screen -> Flags & SCREENHIRES)
  5272. +                 {
  5273. +                     SizeWidth    = 18;
  5274. +                     SizeHeight    = 10;
  5275. +                     SizeType    = SYSISIZE_MEDRES;
  5276. +                 }
  5277. +                 else
  5278. +                 {
  5279. +                     SizeWidth    = 13;
  5280. +                     SizeHeight    = 11;
  5281. +                     SizeType    = SYSISIZE_LOWRES;
  5282. +                 }
  5283. +                 if(xdev -> image[UP_IMAGE] = (struct Image *)NewObject(NULL,"sysiclass",
  5284. +                     SYSIA_Size,    SizeType,
  5285. +                     SYSIA_Which,    UPIMAGE,
  5286. +                     SYSIA_DrawInfo,    DrawInfo,
  5287. +                 TAG_DONE))
  5288. +                 {
  5289. +                     if(xdev -> image[DOWN_IMAGE] = (struct Image *)NewObject(NULL,"sysiclass",
  5290. +                         SYSIA_Size,    SizeType,
  5291. +                         SYSIA_Which,    DOWNIMAGE,
  5292. +                         SYSIA_DrawInfo,    DrawInfo,
  5293. +                     TAG_DONE))
  5294. +                     {
  5295. +                         if(xdev -> image[LEFT_IMAGE] = (struct Image *)NewObject(NULL,"sysiclass",
  5296. +                             SYSIA_Size,    SizeType,
  5297. +                             SYSIA_Which,    LEFTIMAGE,
  5298. +                             SYSIA_DrawInfo,    DrawInfo,
  5299. +                         TAG_DONE))
  5300. +                         {
  5301. +                             if(xdev -> image[RIGHT_IMAGE] = (struct Image *)NewObject(NULL,"sysiclass",
  5302. +                                 SYSIA_Size,    SizeType,
  5303. +                                 SYSIA_Which,    RIGHTIMAGE,
  5304. +                                 SYSIA_DrawInfo,    DrawInfo,
  5305. +                             TAG_DONE))
  5306. +                             {
  5307. +                                 if(xdev -> gadget[VERTICAL_SCROLLER] = NewObject(NULL,"propgclass",
  5308. +                                     GA_ID,        VERTICAL_SCROLLER,
  5309. +                                     GA_Top,        Screen -> WBorTop + Screen -> Font -> ta_YSize + 2,
  5310. +                                     GA_RelHeight,    -(Screen -> WBorTop + Screen -> Font -> ta_YSize + 2 + SizeHeight + 1 + 2 * ARROW_HEIGHT),
  5311. +                                     GA_Width,    SizeWidth - 8,
  5312. +                                     GA_RelRight,    -(SizeWidth - 5),
  5313. +                                     GA_GZZGadget,    TRUE,
  5314. +                                     GA_Immediate,    TRUE,
  5315. +                                     GA_FollowMouse,    TRUE,
  5316. +                                     GA_RelVerify,    TRUE,
  5317. +                                     GA_RightBorder,    TRUE,
  5318. +                                     PGA_Freedom,    FREEVERT,
  5319. +                                     PGA_NewLook,    TRUE,
  5320. +                                     PGA_Borderless,    TRUE,
  5321. +                                     PGA_Visible,    1,
  5322. +                                     PGA_Total,    1,
  5323. +                                 TAG_DONE))
  5324. +                                 {
  5325. +                                     if(xdev -> gadget[HORIZONTAL_SCROLLER] = NewObject(NULL,"propgclass",
  5326. +                                         GA_ID,        HORIZONTAL_SCROLLER,
  5327. +                                         GA_Previous,    xdev -> gadget[VERTICAL_SCROLLER],
  5328. +                                         GA_Height,    SizeHeight - 4,
  5329. +                                         GA_RelBottom,    -(SizeHeight - 4 + 1),
  5330. +                                         GA_Left,    4,
  5331. +                                         GA_RelWidth,    -(2 + SizeWidth + 4 + 2 * ARROW_WIDTH),
  5332. +                                         GA_GZZGadget,    TRUE,
  5333. +                                         GA_Immediate,    TRUE,
  5334. +                                         GA_FollowMouse,    TRUE,
  5335. +                                         GA_RelVerify,    TRUE,
  5336. +                                         GA_BottomBorder,TRUE,
  5337. +                                         PGA_Freedom,    FREEHORIZ,
  5338. +                                         PGA_NewLook,    TRUE,
  5339. +                                         PGA_Borderless,    TRUE,
  5340. +                                         PGA_Visible,    1,
  5341. +                                         PGA_Total,    1,
  5342. +                                     TAG_DONE))
  5343. +                                     {
  5344. +                                         STATIC struct TagItem ArrowMappings[] = { GA_ID, GA_ID, TAG_END };
  5345. +                                         if(xdev -> gadget[UP_ARROW] = NewObject(NULL,"buttongclass",
  5346. +                                             GA_ID,        UP_ARROW,
  5347. +                                             GA_Previous,    xdev -> gadget[HORIZONTAL_SCROLLER],
  5348. +                                             GA_GZZGadget,    TRUE,
  5349. +                                             GA_Image,    xdev -> image[UP_IMAGE],
  5350. +                                             GA_RelRight,    -(SizeWidth - 1),
  5351. +                                             GA_RelBottom,    -(SizeHeight - 1 + 2 * ARROW_HEIGHT),
  5352. +                                             GA_Height,    ARROW_HEIGHT,
  5353. +                                             GA_Width,    SizeWidth,
  5354. +                                             GA_Immediate,    TRUE,
  5355. +                                             GA_RelVerify,    TRUE,
  5356. +                                             GA_RightBorder,    TRUE,
  5357. +                                             ICA_TARGET,    ICTARGET_IDCMP,
  5358. +                                             ICA_MAP,    ArrowMappings,
  5359. +                                         TAG_DONE))
  5360. +                                         {
  5361. +                                             if(xdev -> gadget[DOWN_ARROW] = NewObject(NULL,"buttongclass",
  5362. +                                                 GA_ID,        DOWN_ARROW,
  5363. +                                                 GA_Previous,    xdev -> gadget[UP_ARROW],
  5364. +                                                 GA_GZZGadget,    TRUE,
  5365. +                                                 GA_Image,    xdev -> image[DOWN_IMAGE],
  5366. +                                                 GA_RelRight,    -(SizeWidth - 1),
  5367. +                                                 GA_RelBottom,    -(SizeHeight - 1 + ARROW_HEIGHT),
  5368. +                                                 GA_Height,    ARROW_HEIGHT,
  5369. +                                                 GA_Width,    SizeWidth,
  5370. +                                                 GA_Immediate,    TRUE,
  5371. +                                                 GA_RelVerify,    TRUE,
  5372. +                                                 GA_RightBorder,    TRUE,
  5373. +                                                 ICA_TARGET,    ICTARGET_IDCMP,
  5374. +                                                 ICA_MAP,    ArrowMappings,
  5375. +                                             TAG_DONE))
  5376. +                                             {
  5377. +                                                 if(xdev -> gadget[LEFT_ARROW] = NewObject(NULL,"buttongclass",
  5378. +                                                     GA_ID,        LEFT_ARROW,
  5379. +                                                     GA_Previous,    xdev -> gadget[DOWN_ARROW],
  5380. +                                                     GA_GZZGadget,    TRUE,
  5381. +                                                     GA_Image,    xdev -> image[LEFT_IMAGE],
  5382. +                                                     GA_RelRight,    -(SizeWidth - 1 + 2 * ARROW_WIDTH),
  5383. +                                                     GA_RelBottom,    -(SizeHeight - 1),
  5384. +                                                     GA_Height,    SizeHeight,
  5385. +                                                     GA_Width,    ARROW_WIDTH,
  5386. +                                                     GA_Immediate,    TRUE,
  5387. +                                                     GA_RelVerify,    TRUE,
  5388. +                                                     GA_BottomBorder,TRUE,
  5389. +                                                     ICA_TARGET,    ICTARGET_IDCMP,
  5390. +                                                     ICA_MAP,    ArrowMappings,
  5391. +                                                 TAG_DONE))
  5392. +                                                 {
  5393. +                                                     if(xdev -> gadget[RIGHT_ARROW] = NewObject(NULL,"buttongclass",
  5394. +                                                         GA_ID,        RIGHT_ARROW,
  5395. +                                                         GA_Previous,    xdev -> gadget[LEFT_ARROW],
  5396. +                                                         GA_GZZGadget,    TRUE,
  5397. +                                                         GA_Image,    xdev -> image[RIGHT_IMAGE],
  5398. +                                                         GA_RelRight,    -(SizeWidth - 1 + ARROW_WIDTH),
  5399. +                                                         GA_RelBottom,    -(SizeHeight - 1),
  5400. +                                                         GA_Height,    SizeHeight,
  5401. +                                                         GA_Width,    ARROW_WIDTH,
  5402. +                                                         GA_Immediate,    TRUE,
  5403. +                                                         GA_RelVerify,    TRUE,
  5404. +                                                         GA_BottomBorder,TRUE,
  5405. +                                                         ICA_TARGET,    ICTARGET_IDCMP,
  5406. +                                                         ICA_MAP,    ArrowMappings,
  5407. +                                                     TAG_DONE))
  5408. +                                                         Result = TRUE;
  5409. +                                                 }
  5410. +                                             }
  5411. +                                         }
  5412. +                                     }
  5413. +                                 }
  5414. +                             }
  5415. +                         }
  5416. +                     }
  5417. +                 }
  5418. +                 FreeScreenDrawInfo(Screen,DrawInfo);
  5419. +             }
  5420. +         }
  5421. +     }
  5422. +     return(Result);
  5423. + }
  5424. +     /* WindowResize(gx_device *dev):
  5425. +      *
  5426. +      *    Update the slider sizes and positions after the window
  5427. +      *    was resized.
  5428. +      */
  5429. + VOID
  5430. + WindowResize(gx_device *dev)
  5431. + {
  5432. +     LONG    DeltaX,
  5433. +         DeltaY,
  5434. +         Temp;
  5435. +         /* Query the current horizontal slider position. */
  5436. +     if((Temp = LAYERXOFFSET(xdev -> window) + xdev -> window -> GZZWidth) > xdev -> super_width)
  5437. +         DeltaX = xdev -> super_width - Temp;
  5438. +     else
  5439. +         DeltaX = 0;
  5440. +         /* Query the current vertical slider position. */
  5441. +     if((Temp = LAYERYOFFSET(xdev -> window) + xdev -> window -> GZZHeight) > xdev -> super_height)
  5442. +         DeltaY = xdev -> super_height - Temp;
  5443. +     else
  5444. +         DeltaY = 0;
  5445. +         /* Move the currently displayed window area around. */
  5446. +     if(DeltaX || DeltaY)
  5447. +         ScrollLayer(NULL,xdev -> window -> RPort -> Layer,DeltaX,DeltaY);
  5448. +         /* Update the new horizontal slider position and size. */
  5449. +     SetGadgetAttrs(xdev -> gadget[HORIZONTAL_SCROLLER],xdev -> window,NULL,
  5450. +         PGA_Top,    LAYERXOFFSET(xdev -> window),
  5451. +         PGA_Visible,    xdev -> window -> GZZWidth,
  5452. +         PGA_Total,    xdev -> super_width,
  5453. +     TAG_DONE);
  5454. +         /* Update the new vertical slider position and size. */
  5455. +     SetGadgetAttrs(xdev -> gadget[VERTICAL_SCROLLER],xdev -> window,NULL,
  5456. +         PGA_Top,    LAYERYOFFSET(xdev -> window),
  5457. +         PGA_Visible,    xdev -> window -> GZZHeight,
  5458. +         PGA_Total,    xdev -> super_height,
  5459. +     TAG_DONE);
  5460. + }
  5461. +     /* WindowUpdate(struct Gadget *Gadget,gx_device *dev):
  5462. +      *
  5463. +      *    Move the currently visible portion of the
  5464. +      *    window according to the current slider
  5465. +      *    position.
  5466. +      */
  5467. + VOID
  5468. + WindowUpdate(struct Gadget *Gadget,gx_device *dev)
  5469. + {
  5470. +     LONG Storage;
  5471. +     switch(Gadget -> GadgetID)
  5472. +     {
  5473. +         case HORIZONTAL_SCROLLER:
  5474. +             if(GetAttr(PGA_Top,Gadget,&Storage))
  5475. +                 ScrollLayer(NULL,xdev -> window -> RPort -> Layer,Storage - LAYERXOFFSET(xdev -> window),0);
  5476. +             break;
  5477. +         case VERTICAL_SCROLLER:
  5478. +             if(GetAttr(PGA_Top,Gadget,&Storage))
  5479. +                 ScrollLayer(NULL,xdev -> window -> RPort -> Layer,0,Storage - LAYERYOFFSET(xdev -> window));
  5480. +             break;
  5481. +     }
  5482. + }
  5483. +     /* MoveAround(struct Gadget *Gadget,int How,gx_device *dev):
  5484. +      *
  5485. +      *    Move the currently visible window area according to
  5486. +      *    user input.
  5487. +      */
  5488. + VOID
  5489. + MoveAround(struct Gadget *Gadget,LONG How,gx_device *dev)
  5490. + {
  5491. +     LONG Storage;
  5492. +     if(GetAttr(PGA_Top,Gadget,&Storage))
  5493. +     {
  5494. +         LONG Max;
  5495. +         switch(Gadget -> GadgetID)
  5496. +         {
  5497. +             case HORIZONTAL_SCROLLER:
  5498. +                 Max = xdev -> super_width - xdev -> window -> GZZWidth;
  5499. +                 break;
  5500. +             case VERTICAL_SCROLLER:
  5501. +                 Max = xdev -> super_height - xdev -> window -> GZZHeight;
  5502. +                 break;
  5503. +         }
  5504. +         switch(How)
  5505. +         {
  5506. +             case MOVE_MIN:
  5507. +                 Storage = 0;
  5508. +                 break;
  5509. +             case MOVE_MAX:
  5510. +                 Storage = Max;
  5511. +                 break;
  5512. +             case MOVE_DOWN:
  5513. +                 if(Storage > xdev -> super_height / 100)
  5514. +                     Storage -= xdev -> super_height / 100;
  5515. +                 else
  5516. +                     Storage = 0;
  5517. +                 break;
  5518. +             case MOVE_FAR_DOWN:
  5519. +                 if(Storage > xdev -> super_height / 10)
  5520. +                     Storage -= xdev -> super_height / 10;
  5521. +                 else
  5522. +                     Storage = 0;
  5523. +                 break;
  5524. +             case MOVE_FAR_UP:
  5525. +                 if(Storage + xdev -> super_width / 10 < Max)
  5526. +                     Storage += xdev -> super_width / 10;
  5527. +                 else
  5528. +                     Storage = Max;
  5529. +                 break;
  5530. +             case MOVE_UP:
  5531. +                 if(Storage + xdev -> super_width / 100 < Max)
  5532. +                     Storage += xdev -> super_width / 100;
  5533. +                 else
  5534. +                     Storage = Max;
  5535. +                 break;
  5536. +         }
  5537. +         switch(Gadget -> GadgetID)
  5538. +         {
  5539. +             case HORIZONTAL_SCROLLER:
  5540. +                 if(LAYERXOFFSET(xdev -> window) != Storage)
  5541. +                 {
  5542. +                     ScrollLayer(NULL,xdev -> window -> RPort -> Layer,Storage - LAYERXOFFSET(xdev -> window),0);
  5543. +                     SetGadgetAttrs(Gadget,xdev -> window,NULL,
  5544. +                         PGA_Top,Storage,
  5545. +                     TAG_DONE);
  5546. +                 }
  5547. +                 break;
  5548. +             case VERTICAL_SCROLLER:
  5549. +                 if(LAYERYOFFSET(xdev -> window) != Storage)
  5550. +                 {
  5551. +                     ScrollLayer(NULL,xdev -> window -> RPort -> Layer,0,Storage - LAYERYOFFSET(xdev -> window));
  5552. +                     SetGadgetAttrs(Gadget,xdev -> window,NULL,
  5553. +                         PGA_Top,Storage,
  5554. +                     TAG_DONE);
  5555. +                 }
  5556. +                 break;
  5557. +         }
  5558. +     }
  5559. + }
  5560. +     /* DispatchSuperWindow(gx_device *dev):
  5561. +      *
  5562. +      *    Dispatch user window input.
  5563. +      */
  5564. + VOID
  5565. + DispatchSuperWindow(gx_device *dev)
  5566. + {
  5567. +     STATIC struct Gadget    *CurrentGadget = NULL;
  5568. +     struct IntuiMessage    *IntuiMessage;
  5569. +     ULONG             MsgClass,
  5570. +                  MsgCode,
  5571. +                  MsgQualifier;
  5572. +     struct Gadget        *MsgGadget;
  5573. +     while(IntuiMessage = (struct IntuiMessage *)GetMsg(xdev -> window -> UserPort))
  5574. +     {
  5575. +         MsgClass    = IntuiMessage -> Class;
  5576. +         MsgCode        = IntuiMessage -> Code;
  5577. +         MsgQualifier    = IntuiMessage -> Qualifier;
  5578. +         MsgGadget    = IntuiMessage -> IAddress;
  5579. +         ReplyMsg((struct Message *)IntuiMessage);
  5580. +         switch(MsgClass)
  5581. +         {
  5582. +             case IDCMP_VANILLAKEY:
  5583. +                 if(MsgCode == '\033' || MsgCode == '\003')
  5584. +                     Signal((struct Task *)xdev -> main,SIG_KILL);
  5585. +                 break;
  5586. +             case IDCMP_RAWKEY:
  5587. +                 switch(MsgCode)
  5588. +                 {
  5589. +                     case HELP_CODE:
  5590. +                         DisplayBeep(xdev -> window -> WScreen);
  5591. +                         break;
  5592. +                     case CURSORUP:
  5593. +                         if(MsgQualifier & IEQUALIFIER_CONTROL)
  5594. +                             MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_MIN,dev);
  5595. +                         else
  5596. +                         {
  5597. +                             if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
  5598. +                                 MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_FAR_DOWN,dev);
  5599. +                             else
  5600. +                                 MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_DOWN,dev);
  5601. +                         }
  5602. +                         break;
  5603. +                     case CURSORLEFT:
  5604. +                         if(MsgQualifier & IEQUALIFIER_CONTROL)
  5605. +                             MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_MIN,dev);
  5606. +                         else
  5607. +                         {
  5608. +                             if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
  5609. +                                 MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_FAR_DOWN,dev);
  5610. +                             else
  5611. +                                 MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_DOWN,dev);
  5612. +                         }
  5613. +                         break;
  5614. +                     case CURSORRIGHT:
  5615. +                         if(MsgQualifier & IEQUALIFIER_CONTROL)
  5616. +                             MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_MAX,dev);
  5617. +                         else
  5618. +                         {
  5619. +                             if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
  5620. +                                 MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_FAR_UP,dev);
  5621. +                             else
  5622. +                                 MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_UP,dev);
  5623. +                         }
  5624. +                         break;
  5625. +                     case CURSORDOWN:
  5626. +                         if(MsgQualifier & IEQUALIFIER_CONTROL)
  5627. +                             MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_MAX,dev);
  5628. +                         else
  5629. +                         {
  5630. +                             if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
  5631. +                                 MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_FAR_UP,dev);
  5632. +                             else
  5633. +                                 MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_UP,dev);
  5634. +                         }
  5635. +                         break;
  5636. +                     default:
  5637. +                         break;
  5638. +                 }
  5639. +                 break;
  5640. +             case IDCMP_CLOSEWINDOW:
  5641. +                 Signal((struct Task *)xdev -> main,SIG_KILL);
  5642. +                 break;
  5643. +             case IDCMP_GADGETDOWN:
  5644. +                 CurrentGadget = MsgGadget;
  5645. +                 WindowUpdate(MsgGadget,dev);
  5646. +                 break;
  5647. +             case IDCMP_GADGETUP:
  5648. +                 CurrentGadget = NULL;
  5649. +                 WindowUpdate(MsgGadget,dev);
  5650. +                 break;
  5651. +             case IDCMP_MOUSEMOVE:
  5652. +                 if(CurrentGadget)
  5653. +                     WindowUpdate(CurrentGadget,dev);
  5654. +                 break;
  5655. +             case IDCMP_IDCMPUPDATE:
  5656. +                 switch(GetTagData(GA_ID,0,(struct TagItem *)MsgGadget))
  5657. +                 {
  5658. +                     case UP_ARROW:
  5659. +                         MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_DOWN,dev);
  5660. +                         break;
  5661. +                     case DOWN_ARROW:
  5662. +                         MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_UP,dev);
  5663. +                         break;
  5664. +                     case LEFT_ARROW:
  5665. +                         MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_DOWN,dev);
  5666. +                         break;
  5667. +                     case RIGHT_ARROW:
  5668. +                         MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_UP,dev);
  5669. +                         break;
  5670. +                     default:
  5671. +                         break;
  5672. +                 }
  5673. +                 break;
  5674. +             case IDCMP_NEWSIZE:
  5675. +                 WindowResize(dev);
  5676. +                 break;
  5677. +             default:
  5678. +                 break;
  5679. +         }
  5680. +     }
  5681. + }
  5682. +     /* Simple routine to call the cleanup routine of a device,
  5683. +      * all devices are smart enough to handle shutdown in
  5684. +      * case they have not been opened yet.
  5685. +      */
  5686. + STATIC void __inline
  5687. + close_device(gx_device_amiga *dev)
  5688. + {
  5689. +     (*xdev -> procs -> close_device)((gx_device *)dev);
  5690. + }
  5691. +     /* devcleanup():
  5692. +      *
  5693. +      *    Clean up all devices, free all resources.
  5694. +      */
  5695. + void
  5696. + devcleanup()
  5697. + {
  5698. +     close_device(&gs_amiga_device);
  5699. +     close_device(&gs_amiga_low_device);
  5700. +     close_device(&gs_amiga_high_device);
  5701. +     close_device(&gs_amiga_super_device);
  5702. +     close_device(&gs_amiga_a2024_device);
  5703. +     close_device(&gs_amiga_picassoii_device);
  5704. +     close_device(&gs_amiga_custom_device);
  5705. +     close_device(&gs_amiga_printer_device);
  5706. +     close_device(&gs_amiga_ilbm_device);
  5707. + }
  5708. +     /* amiga_set_pen(gx_device *dev,gx_color_index color):
  5709. +      *
  5710. +      *    Sets the rendering pen and remembers the current
  5711. +      *    settings.
  5712. +      */
  5713. + STATIC VOID __inline
  5714. + amiga_set_pen(gx_device *dev,gx_color_index color)
  5715. + {
  5716. +     if(xdev -> last_pen != color)
  5717. +         SetAPen(xdev -> rport,xdev -> last_pen = color);
  5718. + }
  5719. +     /* amiga_map_rgb_color(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue):
  5720. +      *
  5721. +      *    Map a colour either to the black or the light rendering pen.
  5722. +      */
  5723. + gx_color_index
  5724. + amiga_map_rgb_color(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue)
  5725. + {
  5726. +     if((red | green | blue) > gx_max_color_value / 2)
  5727. +         return(LightPen);
  5728. +     else
  5729. +         return(DarkPen);
  5730. + }
  5731. +     /* amiga_map_color_rgb(gx_device *dev,gx_color_index color,gx_color_value rgb[3]):
  5732. +      *
  5733. +      *    Map the light/dark rendering pen to RGB values.
  5734. +      */
  5735. + int
  5736. + amiga_map_color_rgb(gx_device *dev,gx_color_index color,gx_color_value rgb[3])
  5737. + {
  5738. +     int i;
  5739. +     if(color == LightPen)
  5740. +     {
  5741. +         for(i = 0 ; i < 3 ; i++)
  5742. +             rgb[i] = gx_max_color_value;
  5743. +     }
  5744. +     else
  5745. +     {
  5746. +         for(i = 0 ; i < 3 ; i++)
  5747. +             rgb[i] = 0;
  5748. +     }
  5749. +     return(0);
  5750. + }
  5751. +     /* AllocatePens(struct ViewPort *VPort,LONG CubeSize):
  5752. +      *
  5753. +      *    Allocate shareable viewport pens.
  5754. +      */
  5755. + LONG *
  5756. + AllocatePens(struct ViewPort *VPort,LONG CubeSize)
  5757. + {
  5758. +     if(GfxBase -> LibNode . lib_Version >= 39)
  5759. +     {
  5760. +         LONG Total = CubeSize * CubeSize * CubeSize,*Pens;
  5761. +         if(Pens = (LONG *)AllocVec(sizeof(LONG) * Total,MEMF_ANY))
  5762. +         {
  5763. +             LONG i,r,g,b,max = CubeSize - 1;
  5764. +             for(i = 0 ; i < Total ; i++)
  5765. +                 Pens[i] = -1;
  5766. +             i = 0;
  5767. +             for(r = 0 ; r < CubeSize ; r++)
  5768. +             {
  5769. +                 for(g = 0 ; g < CubeSize ; g++)
  5770. +                 {
  5771. +                     for(b = 0 ; b < CubeSize ; b++)
  5772. +                     {
  5773. +                         if((Pens[i++] = ObtainBestPen(VPort -> ColorMap,SPREAD((255 * r) / max),SPREAD((255 * g) / max),SPREAD((255 * b) / max),
  5774. +                             OBP_FailIfBad,    TRUE,
  5775. +                             OBP_Precision,    PRECISION_IMAGE,
  5776. +                         TAG_DONE)) == -1)
  5777. +                         {
  5778. +                             FreeVec(Pens);
  5779. +                             return(NULL);
  5780. +                         }
  5781. +                     }
  5782. +                 }
  5783. +             }
  5784. +             return(Pens);
  5785. +         }
  5786. +     }
  5787. +     return(NULL);
  5788. + }
  5789. +     /* amiga_open_default(gx_device *dev):
  5790. +      *
  5791. +      *    Open the default device, i.e. a window on the Workbench screen.
  5792. +      */
  5793. + int
  5794. + amiga_open_default(gx_device *dev)
  5795. + {
  5796. +     struct Screen *DefaultScreen;
  5797. +         /* Get a lock on the default public screen. */
  5798. +     if(DefaultScreen = LockPubScreen(NULL))
  5799. +     {
  5800. +         struct DisplayInfo    DisplayInfo;
  5801. +         ULONG             Mode;
  5802. +             /* Get the default public screen display mode. */
  5803. +         Mode = GetVPModeID(&DefaultScreen -> ViewPort);
  5804. +             /* Inquire display mode information. */
  5805. +         if(GetDisplayInfoData(NULL,(APTR)&DisplayInfo,sizeof(struct DisplayInfo),DTAG_DISP,Mode))
  5806. +         {
  5807. +             LONG    ScreenWidth,
  5808. +                 ScreenHeight;
  5809. +             LONG    i;
  5810. +             float    Width,
  5811. +                 Height;
  5812. +             LONG    Depth;
  5813. +             if(GfxBase -> LibNode . lib_Version >= 39)
  5814. +                 Depth = GetBitMapAttr(DefaultScreen -> RastPort . BitMap,BMA_DEPTH);
  5815. +             else
  5816. +                 Depth = DefaultScreen -> RastPort . BitMap -> Depth;
  5817. +                 /* Determine screen view dimensions. */
  5818. +             if(DefaultScreen -> ViewPort . ColorMap -> cm_vpe)
  5819. +             {
  5820. +                 struct ViewPortExtra *Extra = DefaultScreen -> ViewPort . ColorMap -> cm_vpe;
  5821. +                 ScreenWidth    = Extra -> DisplayClip . MaxX - Extra -> DisplayClip . MinX + 1;
  5822. +                 ScreenHeight    = Extra -> DisplayClip . MaxY - Extra -> DisplayClip . MinY + 1;
  5823. +             }
  5824. +             else
  5825. +             {
  5826. +                 struct ViewPortExtra *Extra;
  5827. +                 if(Extra = (struct ViewPortExtra *)GfxLookUp(&DefaultScreen -> ViewPort))
  5828. +                 {
  5829. +                     ScreenWidth    = Extra -> DisplayClip . MaxX - Extra -> DisplayClip . MinX + 1;
  5830. +                     ScreenHeight    = Extra -> DisplayClip . MaxY - Extra -> DisplayClip . MinY + 1;
  5831. +                 }
  5832. +                 else
  5833. +                 {
  5834. +                     ScreenWidth    = DefaultScreen -> Width;
  5835. +                     ScreenHeight    = DefaultScreen -> Height;
  5836. +                 }
  5837. +             }
  5838. +                 /* Use the best guess, we will take the standard
  5839. +                  * low resolution x-dpi value and scale it by
  5840. +                  * the pixel speed.
  5841. +                  */
  5842. +             if(DisplayInfo . PixelSpeed)
  5843. +             {
  5844. +                 xdev -> x_pixels_per_inch = (35.0 * 140.0) / (float)DisplayInfo . PixelSpeed;
  5845. +                 xdev -> y_pixels_per_inch = (xdev -> x_pixels_per_inch * (float)DisplayInfo . Resolution . x) / (float)DisplayInfo . Resolution . y;
  5846. +             }
  5847. +             else
  5848. +             {
  5849. +                 xdev -> x_pixels_per_inch = 72.27;
  5850. +                 xdev -> y_pixels_per_inch = 72.27;
  5851. +             }
  5852. +             if(xdev -> width > 0 && xdev -> height > 0)
  5853. +             {
  5854. +                 xdev -> super_width    = xdev -> width;
  5855. +                 xdev -> super_height    = xdev -> height;
  5856. +             }
  5857. +             else
  5858. +             {
  5859. +                 if(xdev -> page_width > 0.0)
  5860. +                     xdev -> super_width = (LONG)(xdev -> page_width * xdev -> x_pixels_per_inch);
  5861. +                 else
  5862. +                     xdev -> super_width = 640;
  5863. +                 if(xdev -> page_height > 0.0)
  5864. +                     xdev -> super_height = (LONG)(xdev -> page_height * xdev -> y_pixels_per_inch);
  5865. +                 else
  5866. +                     xdev -> super_height = 512;
  5867. +             }
  5868. +                 /* Allocate a bitmap ready to be used for
  5869. +                  * rendering.
  5870. +                  */
  5871. +             if(xdev -> super_bitmap = CreateBitMap(xdev -> super_width,xdev -> super_height,Depth,BMF_DISPLAYABLE,DefaultScreen -> RastPort . BitMap,FALSE))
  5872. +             {
  5873. +                     /* Clear the bitplanes. */
  5874. +                 BltBitMap(xdev -> super_bitmap,0,0,xdev -> super_bitmap,0,0,xdev -> super_width,xdev -> super_height,0x00,(1 << xdev -> super_bitmap -> Depth) - 1,NULL);
  5875. +                     /* Create the scroller handles. */
  5876. +                 if(CreateScrollers(dev,DefaultScreen))
  5877. +                 {
  5878. +                     struct IBox ZoomBox;
  5879. +                         /* Set up the window alternate
  5880. +                          * position.
  5881. +                          */
  5882. +                     ZoomBox . Left        = 0;
  5883. +                     ZoomBox . Top        = DefaultScreen -> BarHeight + 1;
  5884. +                     ZoomBox . Width        = ScreenWidth;
  5885. +                     ZoomBox . Height    = ScreenHeight - ZoomBox . Top;
  5886. +                         /* Eventually, open the display window. */
  5887. +                     if(xdev -> window = OpenWindowTags(NULL,
  5888. +                         WA_InnerWidth,        MIN(DefaultScreen -> Width / 2,xdev -> super_width),
  5889. +                         WA_InnerHeight,        MIN(DefaultScreen -> Height / 2,xdev -> super_height),
  5890. +                         WA_CloseGadget,        TRUE,
  5891. +                         WA_DepthGadget,        TRUE,
  5892. +                         WA_SizeGadget,        TRUE,
  5893. +                         WA_SizeBRight,        TRUE,
  5894. +                         WA_SizeBBottom,        TRUE,
  5895. +                         WA_Zoom,        &ZoomBox,
  5896. +                         WA_DragBar,        TRUE,
  5897. +                         WA_NoCareRefresh,    TRUE,
  5898. +                         WA_GimmeZeroZero,    TRUE,
  5899. +                         WA_RMBTrap,        TRUE,
  5900. +                         WA_SuperBitMap,        xdev -> super_bitmap,
  5901. +                         WA_Gadgets,        xdev -> gadget[VERTICAL_SCROLLER],
  5902. +                         WA_CustomScreen,    DefaultScreen,
  5903. +                         WA_Title,        "Ghostscript Amiga output window",
  5904. +                     TAG_DONE))
  5905. +                     {
  5906. +                         if(xdev -> temp_rport = CreateTempRPort(xdev -> window -> RPort))
  5907. +                         {
  5908. +                             if(xdev -> temp_array = (UBYTE *)AllocVec((xdev -> window -> WScreen -> Width + 15) & ~15,MEMF_ANY))
  5909. +                             {
  5910. +                                 struct Task *Task;
  5911. +                                     /* Bring the window dispatcher task
  5912. +                                      * to life...
  5913. +                                      */
  5914. +                                 if(Task = (struct Task *)CreateTask("Ghostscript window dispatcher",5,DispatchTask,8192))
  5915. +                                 {
  5916. +                                     const sigset_t trapped = sigmask(SIGINT);
  5917. +                                         /* Cheap... */
  5918. +                                     Task -> tc_UserData = dev;
  5919. +                                         /* Who's calling? */
  5920. +                                     xdev -> main = (struct Process *)FindTask(NULL);
  5921. +                                         /* Don't let anybody interrupt us! */
  5922. +                                     sigprocmask(SIG_BLOCK,&trapped,NULL);
  5923. +                                     Forbid();
  5924. +                                         /* Wake it up. */
  5925. +                                     Signal(Task,SIG_HANDSHAKE);
  5926. +                                         /* Clear the handshake bit. */
  5927. +                                     SetSignal(0,SIG_HANDSHAKE);
  5928. +                                         /* Wait for the report. */
  5929. +                                     Wait(SIG_HANDSHAKE);
  5930. +                                     Permit();
  5931. +                                         /* Get the result. */
  5932. +                                     Task = xdev -> dispatcher;
  5933. +                                         /* Unblock signals. */
  5934. +                                     sigprocmask(SIG_UNBLOCK,&trapped,NULL);
  5935. +                                 }
  5936. +                                     /* Did we succeed in creating
  5937. +                                      * the dispatcher task?
  5938. +                                      */
  5939. +                                 if(Task)
  5940. +                                 {
  5941. +                                     UWORD    MaxValue    = 0,
  5942. +                                         MinValue    = 15000,
  5943. +                                         Value,
  5944. +                                         R,G,B;
  5945. +                                         /* Set the window limits. */
  5946. +                                     WindowLimits(xdev -> window,xdev -> window -> BorderLeft + MINIMUM_WIDTH + xdev -> window -> BorderRight,xdev -> window -> BorderTop + MINIMUM_HEIGHT + xdev -> window -> BorderBottom,xdev -> window -> BorderLeft + xdev -> super_width + xdev -> window -> BorderRight,xdev -> window -> BorderTop + xdev -> super_height + xdev -> window -> BorderBottom);
  5947. +                                         /* Update the sliders. */
  5948. +                                     WindowResize(dev);
  5949. +                                         /* Look for the darkest and the lightest screen colours. */
  5950. +                                     for(i = 0 ; i < MIN(xdev -> window -> WScreen -> ViewPort . ColorMap -> Count,(1 << Depth)) ; i++)
  5951. +                                     {
  5952. +                                         Value = GetRGB4(xdev -> window -> WScreen -> ViewPort . ColorMap,i);
  5953. +                                         R = (Value >> 8) & 0xF;
  5954. +                                         G = (Value >> 4) & 0xF;
  5955. +                                         B =  Value       & 0xF;
  5956. +                                             /* Luminance conversion included */
  5957. +                                         Value = R * 299 + G * 588 + B * 113;
  5958. +                                         if(Value > MaxValue)
  5959. +                                         {
  5960. +                                             MaxValue = Value;
  5961. +                                             LightPen = i;
  5962. +                                         }
  5963. +                                         if(Value < MinValue)
  5964. +                                         {
  5965. +                                             MinValue = Value;
  5966. +                                             DarkPen = i;
  5967. +                                         }
  5968. +                                     }
  5969. +                                         /* Fill in the rest. */
  5970. +                                     xdev -> width    = xdev -> super_width;
  5971. +                                     xdev -> height    = xdev -> super_height;
  5972. +                                     xdev -> rport    = xdev -> window -> RPort;
  5973. +                                         /* Does the display support
  5974. +                                          * at least eight colours?
  5975. +                                          */
  5976. +                                     if(Depth >= 3)
  5977. +                                     {
  5978. +                                         LONG cube_size,max;
  5979. +                                             /* Set up a fitting colour cube. */
  5980. +                                         for(cube_size = 6 ; cube_size >= 2 ; cube_size--)
  5981. +                                         {
  5982. +                                             if((max = cube_size * cube_size * cube_size) <= 1 << Depth)
  5983. +                                                 break;
  5984. +                                         }
  5985. +                                             /* Got enough colours? */
  5986. +                                         if(cube_size != 1)
  5987. +                                         {
  5988. +                                             LONG *Pens;
  5989. +                                                 /* Try to grab the cube colours,
  5990. +                                                  * making a colour display.
  5991. +                                                  */
  5992. +                                             if(Pens = AllocatePens(&xdev -> window -> WScreen -> ViewPort,cube_size))
  5993. +                                                 set_colour_device((gx_device_amiga *)dev,cube_size,Pens);
  5994. +                                         }
  5995. +                                     }
  5996. +                                     SetBPen(xdev -> rport,0);
  5997. +                                     SetDrMd(xdev -> rport,JAM2);
  5998. +                                     amiga_set_pen(dev,DarkPen);
  5999. +                                     UnlockPubScreen(NULL,DefaultScreen);
  6000. +                                     return(0);
  6001. +                                 }
  6002. +                                 else
  6003. +                                     perror("Ghostscript: failed to create dispatcher task");
  6004. +                             }
  6005. +                             else
  6006. +                                 perror("Ghostscript: failed to create temporary line buffer.");
  6007. +                         }
  6008. +                         else
  6009. +                             perror("Ghostscript: failed to create temporary raster port");
  6010. +                     }
  6011. +                     else
  6012. +                         perror("Ghostscript: failed to open window");
  6013. +                 }
  6014. +                 else
  6015. +                     perror("Ghostscript: failed to allocate scrollers");
  6016. +             }
  6017. +             else
  6018. +                 perror("Ghostscript: failed to allocate bitmap");
  6019. +         }
  6020. +         else
  6021. +             perror("Ghostscript: failed to get display mode information");
  6022. +         UnlockPubScreen(NULL,DefaultScreen);
  6023. +     }
  6024. +     else
  6025. +         perror("Ghostscript: failed to lock default public screen");
  6026. +     return(-1);
  6027. + }
  6028. +     /* amiga_open_low(gx_device *dev):
  6029. +      *
  6030. +      *    Open the low resolution device.
  6031. +      */
  6032. + int
  6033. + amiga_open_low(gx_device *dev)
  6034. + {
  6035. +     return(amiga_open(dev,LORES_KEY));
  6036. + }
  6037. +     /* amiga_open_high(gx_device *dev):
  6038. +      *
  6039. +      *    Open the high resolution device.
  6040. +      */
  6041. + int
  6042. + amiga_open_high(gx_device *dev)
  6043. + {
  6044. +     return(amiga_open(dev,HIRESLACE_KEY));
  6045. + }
  6046. +     /* amiga_open_super(gx_device *dev):
  6047. +      *
  6048. +      *    Open the super high resolution device.
  6049. +      */
  6050. + int
  6051. + amiga_open_super(gx_device *dev)
  6052. + {
  6053. +         /* Fall back to the default if not available. */
  6054. +     if(ModeNotAvailable(SUPERLACE_KEY))
  6055. +         return(amiga_open_high(dev));
  6056. +     else
  6057. +         return(amiga_open(dev,SUPERLACE_KEY));
  6058. + }
  6059. +     /* amiga_open_a2024(gx_device *dev):
  6060. +      *
  6061. +      *    Open the A2024 device.
  6062. +      */
  6063. + int
  6064. + amiga_open_a2024(gx_device *dev)
  6065. + {
  6066. +         /* Fall back to the default if not available. */
  6067. +     if(ModeNotAvailable(A2024TENHERTZ_KEY))
  6068. +         return(amiga_open_super(dev));
  6069. +     else
  6070. +         return(amiga_open(dev,A2024TENHERTZ_KEY));
  6071. + }
  6072. +     /* amiga_open_picassoii(gx_device *dev):
  6073. +      *
  6074. +      *    Open the Picasso II device.
  6075. +      */
  6076. + int
  6077. + amiga_open_picassoii(gx_device *dev)
  6078. + {
  6079. +         /* Fall back to the default if not available. */
  6080. +     if(ModeNotAvailable(0x40020002))
  6081. +         return(amiga_open_super(dev));
  6082. +     else
  6083. +         return(amiga_open(dev,0x40020002));
  6084. + }
  6085. + int
  6086. + amiga_open_custom(gx_device *dev)
  6087. + {
  6088. +     UBYTE    Buffer[256];
  6089. +     ULONG    ScreenID    = INVALID_ID;
  6090. +     BOOL    DontTouch    = FALSE;
  6091. +         /* First step: check for an environment variable to give
  6092. +          *             the name of the display mode to use.
  6093. +          */
  6094. +     if(GetVar("GSCUSTOMMODE",Buffer,256,NULL) != -1)
  6095. +     {
  6096. +         UBYTE PatternBuffer[516];
  6097. +             /* Set up the search pattern. */
  6098. +         if(ParsePatternNoCase(Buffer,PatternBuffer,516) >= 0)
  6099. +         {
  6100. +             ULONG CurrentID = INVALID_ID,ID;
  6101. +                 /* Scan the entire list. */
  6102. +             while((CurrentID = NextDisplayInfo(CurrentID)) != INVALID_ID)
  6103. +             {
  6104. +                     /* Valid mode? */
  6105. +                 if(!ModeNotAvailable(CurrentID))
  6106. +                 {
  6107. +                     struct NameInfo    NameInfo;
  6108. +                         /* Get the name information. */
  6109. +                     if(GetDisplayInfoData(NULL,&NameInfo,sizeof(struct NameInfo),DTAG_NAME,CurrentID))
  6110. +                     {
  6111. +                             /* Does the mode name match the pattern given? */
  6112. +                         if(MatchPatternNoCase(PatternBuffer,NameInfo . Name))
  6113. +                         {
  6114. +                             ScreenID = CurrentID;
  6115. +                                 /* Don't overwrite the variable contents. */
  6116. +                             DontTouch = TRUE;
  6117. +                             break;
  6118. +                         }
  6119. +                     }
  6120. +                 }
  6121. +             }
  6122. +         }
  6123. +     }
  6124. +     if(ScreenID == INVALID_ID && AslBase)
  6125. +     {
  6126. +         struct ScreenModeRequester *ScreenModeRequester;
  6127. +         if(ScreenModeRequester = (struct ScreenModeRequester *)AllocAslRequestTags(ASL_ScreenModeRequest,TAG_DONE))
  6128. +         {
  6129. +             if(AslRequestTags(ScreenModeRequester,
  6130. +                 ASLSM_TitleText,    "Select GhostScript screen display mode",
  6131. +                 ASLSM_MinDepth,        1,
  6132. +                 ASLSM_MaxDepth,        8,
  6133. +             TAG_DONE))
  6134. +                 ScreenID = ScreenModeRequester -> sm_DisplayID;
  6135. +             FreeAslRequest(ScreenModeRequester);
  6136. +         }
  6137. +     }
  6138. +         /* Fall back to the default if not available. */
  6139. +     if(ModeNotAvailable(ScreenID))
  6140. +         return(amiga_open_default(dev));
  6141. +     else
  6142. +     {
  6143. +         int result = amiga_open(dev,ScreenID);
  6144. +             /* If successful store the name of the
  6145. +              * screen mode selected.
  6146. +              */
  6147. +         if(!result && !DontTouch)
  6148. +         {
  6149. +             struct NameInfo    NameInfo;
  6150. +             if(GetDisplayInfoData(NULL,&NameInfo,sizeof(struct NameInfo),DTAG_NAME,ScreenID))
  6151. +                 SetVar("GSCUSTOMMODE",NameInfo . Name,-1,NULL);
  6152. +         }
  6153. +         return(result);
  6154. +     }
  6155. + }
  6156. +     /* amiga_open_printer(gx_device *dev):
  6157. +      *
  6158. +      *    Open the printer device.
  6159. +      */
  6160. + int
  6161. + amiga_open_printer(gx_device *dev)
  6162. + {
  6163. +     if(xdev -> port = CreateMsgPort())
  6164. +     {
  6165. +         if(xdev -> printer = (struct IODRPReq *)CreateIORequest(xdev -> port,sizeof(struct IODRPReq)))
  6166. +         {
  6167. +             if(!OpenDevice("printer.device",0,(struct IORequest *)xdev -> printer,0))
  6168. +             {
  6169. +                 if(xdev -> rport = (struct RastPort *)AllocVec(sizeof(struct RastPort),MEMF_ANY))
  6170. +                 {
  6171. +                     const sigset_t    trapped = sigmask(SIGINT);
  6172. +                     struct BitMap    DummyBitMap;
  6173. +                     UWORD        DummyLine[12];
  6174. +                     InitRastPort(xdev -> rport);
  6175. +                         /* Cook up a dummy bitmap to keep
  6176. +                          * `smart' drivers from complaining.
  6177. +                          */
  6178. +                     InitBitMap(&DummyBitMap,12,16,16);
  6179. +                     DummyBitMap . Planes[0] = (PLANEPTR)&DummyLine;
  6180. +                     xdev -> rport -> BitMap = &DummyBitMap;
  6181. +                         /* Query page size requirements. */
  6182. +                     xdev -> printer -> io_Command    = PRD_DUMPRPORT;
  6183. +                     xdev -> printer -> io_RastPort    = xdev -> rport;
  6184. +                     xdev -> printer -> io_SrcWidth    = 16;
  6185. +                     xdev -> printer -> io_SrcHeight    = 16;
  6186. +                     xdev -> printer -> io_Modes    = LORES_KEY;
  6187. +                     xdev -> printer -> io_Special    |= SPECIAL_FULLCOLS | SPECIAL_FULLROWS | SPECIAL_NOPRINT;
  6188. +                         /* Don't let them stop us now! */
  6189. +                     sigprocmask(SIG_BLOCK,&trapped,NULL);
  6190. +                         /* Ask for it... */
  6191. +                     if(!DoIO((struct IORequest *)xdev -> printer))
  6192. +                     {
  6193. +                         struct PrinterExtendedData    *PED;
  6194. +                         struct PrinterData        *PD;
  6195. +                         struct Preferences        *Prefs;
  6196. +                         LONG                 Depth,
  6197. +                                          NumColours,
  6198. +                                          CubeSize;
  6199. +                         LONG                 PageWidth,
  6200. +                                          PageHeight;
  6201. +                             /* Unblock ^C signal. */
  6202. +                         sigprocmask(SIG_UNBLOCK,&trapped,NULL);
  6203. +                         xdev -> printer -> io_Special &= ~(SPECIAL_FULLCOLS | SPECIAL_FULLROWS | SPECIAL_NOPRINT);
  6204. +                             /* Get the printer internal data. */
  6205. +                         PD    = (struct PrinterData *)xdev -> printer -> io_Device;
  6206. +                         PED    = &PD -> pd_SegmentData -> ps_PED;
  6207. +                         Prefs    = &PD -> pd_Preferences;
  6208. +                             /* Calculate the printer page size. */
  6209. +                         PageWidth    = PED -> ped_XDotsInch * (Prefs -> PrintRightMargin - Prefs -> PrintLeftMargin + 1);
  6210. +                         PageHeight    = PED -> ped_YDotsInch * Prefs -> PaperLength;
  6211. +                         switch(Prefs -> PrintPitch)
  6212. +                         {
  6213. +                             case PICA:
  6214. +                                 PageWidth /= 10;
  6215. +                                 break;
  6216. +                             case ELITE:
  6217. +                                 PageWidth /= 12;
  6218. +                                 break;
  6219. +                             case FINE:
  6220. +                                 PageWidth /= 15;
  6221. +                                 break;
  6222. +                         }
  6223. +                         switch(Prefs -> PrintSpacing)
  6224. +                         {
  6225. +                             case SIX_LPI:
  6226. +                                 PageHeight /= 6;
  6227. +                                 break;
  6228. +                             case EIGHT_LPI:
  6229. +                                 PageHeight /= 8;
  6230. +                                 break;
  6231. +                         }
  6232. +                         if(PageWidth > PED -> ped_MaxXDots)
  6233. +                             PageWidth = PED -> ped_MaxXDots;
  6234. +                         if(PageHeight > PED -> ped_MaxYDots && PED -> ped_MaxYDots)
  6235. +                             PageHeight = PED -> ped_MaxYDots;
  6236. +                             /* Set up the default colour values. */
  6237. +                         if(Prefs -> PrintShade == SHADE_BW)
  6238. +                         {
  6239. +                             Depth        = 1;
  6240. +                             NumColours    = 2;
  6241. +                             CubeSize    = 0;
  6242. +                         }
  6243. +                         else
  6244. +                         {
  6245. +                             Depth        = 12;
  6246. +                             NumColours    = 4096;
  6247. +                             CubeSize    = 16;
  6248. +                         }
  6249. +                             /* Get the page size */
  6250. +                         if(xdev -> width > 0 && xdev -> height > 0)
  6251. +                         {
  6252. +                             if(PageWidth < xdev -> width)
  6253. +                                 xdev -> width = PageWidth;
  6254. +                             if(PageHeight < xdev -> height)
  6255. +                                 xdev -> height = PageHeight;
  6256. +                         }
  6257. +                         else
  6258. +                         {
  6259. +                             xdev -> width    = PageWidth;
  6260. +                             xdev -> height    = PageHeight;
  6261. +                         }
  6262. +                             /* Get the DPI values */
  6263. +                         xdev -> x_pixels_per_inch    = (float)PED -> ped_XDotsInch;
  6264. +                         xdev -> y_pixels_per_inch    = (float)PED -> ped_YDotsInch;
  6265. +                             /* Try to allocate a suitable bitmap.
  6266. +                              * If an allocation fails, rescale the
  6267. +                              * colour cube and bitmap depth and
  6268. +                              * retry. Minimum are eight colours.
  6269. +                              */
  6270. +                         do
  6271. +                         {
  6272. +                                 /* Try to allocate the raster... */
  6273. +                             if(!(xdev -> bitmap = CreateBitMap(xdev -> width,xdev -> height,Depth,NULL,NULL,TRUE)))
  6274. +                             {
  6275. +                                     /* Any chance to rescale the cube? */
  6276. +                                 if(Depth < 2)
  6277. +                                     break;
  6278. +                                 else
  6279. +                                 {
  6280. +                                         /* One plane less... */
  6281. +                                     Depth--;
  6282. +                                         /* Rescale the cube. */
  6283. +                                     while(CubeSize >= 2)
  6284. +                                     {
  6285. +                                         if((NumColours = CubeSize * CubeSize * CubeSize) <= (1 << Depth))
  6286. +                                             break;
  6287. +                                         else
  6288. +                                             CubeSize--;
  6289. +                                     }
  6290. +                                         /* Less than eight colours? */
  6291. +                                     if(CubeSize < 2)
  6292. +                                         break;
  6293. +                                 }
  6294. +                             }
  6295. +                         }
  6296. +                         while(!xdev -> bitmap);
  6297. +                             /* Got the bitmap? */
  6298. +                         if(xdev -> bitmap)
  6299. +                         {
  6300. +                                 /* Allocate a suitable colour map. */
  6301. +                             if(xdev -> colormap = GetColorMap(NumColours))
  6302. +                             {
  6303. +                                     /* Black & white only? */
  6304. +                                 if(NumColours == 2)
  6305. +                                 {
  6306. +                                     SetRGB4CM(xdev -> colormap,0,0x0,0x0,0x0);
  6307. +                                     SetRGB4CM(xdev -> colormap,1,0xF,0xF,0xF);
  6308. +                                 }
  6309. +                                 else
  6310. +                                 {
  6311. +                                     LONG i = 0,r,g,b,max = CubeSize - 1;
  6312. +                                         /* Fill in the colour cube. */
  6313. +                                     for(r = 0 ; r < CubeSize ; r++)
  6314. +                                     {
  6315. +                                         for(g = 0 ; g < CubeSize ; g++)
  6316. +                                         {
  6317. +                                             for(b = 0 ; b < CubeSize ; b++)
  6318. +                                                 SetRGB4CM(xdev -> colormap,i++,(15 * r) / max,(15 * g) / max,(15 * b) / max);
  6319. +                                         }
  6320. +                                     }
  6321. +                                     set_colour_printer_device((gx_device_amiga *)dev,CubeSize);
  6322. +                                 }
  6323. +                                 xdev -> printer -> io_ColorMap    = xdev -> colormap;
  6324. +                                 xdev -> rport -> BitMap        = xdev -> bitmap;
  6325. +                                 return(0);
  6326. +                             }
  6327. +                             else
  6328. +                                 perror("Ghostscript: failed to allocate colour map");
  6329. +                         }
  6330. +                         else
  6331. +                         {
  6332. +                             char buffer[256];
  6333. +                             sprintf(buffer,"Ghostscript: failed to allocate raster (wanted %ld, largest %ld)",(xdev -> width + 15) / 8 * xdev -> height * Depth,AvailMem(MEMF_ANY | MEMF_LARGEST));
  6334. +                             perror(buffer);
  6335. +                         }
  6336. +                     }
  6337. +                     else
  6338. +                     {
  6339. +                         char buffer[256];
  6340. +                         sigprocmask(SIG_UNBLOCK,&trapped,NULL);
  6341. +                         sprintf(buffer,"Ghostscript: failed to query printer page size (error code #%ld)",xdev -> printer -> io_Error);
  6342. +                         perror(buffer);
  6343. +                     }
  6344. +                 }
  6345. +                 else
  6346. +                     perror("Ghostscript: failed to allocate raster port");
  6347. +             }
  6348. +             else
  6349. +             {
  6350. +                 char buffer[256];
  6351. +                 sprintf(buffer,"Ghostscript: failed to open printer.device (error code #%ld)",xdev -> printer -> io_Error);
  6352. +                 perror(buffer);
  6353. +             }
  6354. +         }
  6355. +         else
  6356. +             perror("Ghostscript: failed to allocate device driver");
  6357. +     }
  6358. +     else
  6359. +         perror("Ghostscript: failed to create io port");
  6360. +     return(-1);
  6361. + }
  6362. +     /* amiga_output_page_printer(gx_device *dev,int,int):
  6363. +      *
  6364. +      *    Send a bitmap to the printer.
  6365. +      */
  6366. + int
  6367. + amiga_output_page_printer(gx_device *dev,int num_copies,int flush)
  6368. + {
  6369. +     const sigset_t trapped = sigmask(SIGINT);
  6370. +     int result,i;
  6371. +     ULONG Signals;
  6372. +     xdev -> printer -> io_Command    = PRD_DUMPRPORT;
  6373. +     xdev -> printer -> io_SrcWidth    = xdev -> width;
  6374. +     xdev -> printer -> io_SrcHeight    = xdev -> height;
  6375. +     xdev -> printer -> io_DestCols    = xdev -> width;
  6376. +     xdev -> printer -> io_DestRows    = xdev -> height;
  6377. +         /* We cannot possibly allow being interrupted in the middle
  6378. +          * of a raster dump!
  6379. +          */
  6380. +     sigprocmask(SIG_BLOCK,&trapped,NULL);
  6381. +     for(i = 0 ; i < num_copies ; i++)
  6382. +     {
  6383. +         SetSignal(0,SIGBREAKF_CTRL_C | (1L << xdev -> port -> mp_SigBit));
  6384. +         SendIO((struct IORequest *)xdev -> printer);
  6385. +         Signals = Wait(SIGBREAKF_CTRL_C | (1L << xdev -> port -> mp_SigBit));
  6386. +         if(Signals & SIGBREAKF_CTRL_C)
  6387. +         {
  6388. +             char buffer[256];
  6389. +             if(!CheckIO((struct IORequest *)xdev -> printer))
  6390. +                 AbortIO((struct IORequest *)xdev -> printer);
  6391. +             WaitIO((struct IORequest *)xdev -> printer);
  6392. +             sprintf(buffer,"Ghostscript: printing aborted");
  6393. +             perror(buffer);
  6394. +             result = -1;
  6395. +             sigprocmask(SIG_UNBLOCK,&trapped,NULL);
  6396. +             break;
  6397. +         }
  6398. +         if(Signals & (1L << xdev -> port -> mp_SigBit))
  6399. +         {
  6400. +             if(WaitIO((struct IORequest *)xdev -> printer))
  6401. +             {
  6402. +                 char buffer[256];
  6403. +                 sprintf(buffer,"Ghostscript: failed to print raster (error code #%ld)",xdev -> printer -> io_Error);
  6404. +                 perror(buffer);
  6405. +                 result = -1;
  6406. +                 sigprocmask(SIG_UNBLOCK,&trapped,NULL);
  6407. +                 break;
  6408. +             }
  6409. +             else
  6410. +                 result = 0;
  6411. +         }
  6412. +     }
  6413. +     sigprocmask(SIG_UNBLOCK,&trapped,NULL);
  6414. +     return(result);
  6415. + }
  6416. +     /* amiga_close_printer(gx_device *dev):
  6417. +      *
  6418. +      *    Close the printer driver.
  6419. +      */
  6420. + int
  6421. + amiga_close_printer(gx_device *dev)
  6422. + {
  6423. +     if(xdev -> bitmap)
  6424. +     {
  6425. +         DeleteBitMap(xdev -> bitmap,TRUE);
  6426. +         xdev -> bitmap = NULL;
  6427. +     }
  6428. +     if(xdev -> rport)
  6429. +     {
  6430. +         FreeVec(xdev -> rport);
  6431. +         xdev -> rport = NULL;
  6432. +     }
  6433. +     if(xdev -> colormap)
  6434. +     {
  6435. +         FreeColorMap(xdev -> colormap);
  6436. +         xdev -> colormap = NULL;
  6437. +     }
  6438. +     if(xdev -> printer)
  6439. +     {
  6440. +         if(xdev -> printer -> io_Device)
  6441. +             CloseDevice((struct IORequest *)xdev -> printer);
  6442. +         DeleteIORequest(xdev -> printer);
  6443. +         xdev -> printer = NULL;
  6444. +     }
  6445. +     if(xdev -> port)
  6446. +     {
  6447. +         DeleteMsgPort(xdev -> port);
  6448. +         xdev -> port = NULL;
  6449. +     }
  6450. +     xdev -> width = xdev -> height = 0;
  6451. + /*    xdev -> x_pixels_per_inch = x_pixels_per_inch = 72.72;*/
  6452. +     return(0);
  6453. + }
  6454. +     /* amiga_get_bits(gx_device *dev,int y,byte *str,byte **actual_data):
  6455. +      *
  6456. +      *    Read the raster bits into a buffer.
  6457. +      */
  6458. + int
  6459. + amiga_get_bits(gx_device *dev,int y,byte *str,byte **actual_data)
  6460. + {
  6461. +     if(y < 0 || y > xdev -> height)
  6462. +         return(-1);
  6463. +     else
  6464. +     {
  6465. +         if(actual_data)
  6466. +             *actual_data = (byte *)(xdev -> bitmap -> Planes[0] + xdev -> bitmap -> BytesPerRow * y);
  6467. +         else
  6468. +             memcpy(str,xdev -> bitmap -> Planes[0] + xdev -> bitmap -> BytesPerRow * y,xdev -> bitmap -> BytesPerRow);
  6469. +         return(0);
  6470. +     }
  6471. + }
  6472. +     /* amiga_open(gx_device *dev,ULONG Mode):
  6473. +      *
  6474. +      *    Open a custom screen.
  6475. +      */
  6476. + int
  6477. + amiga_open(gx_device *dev,ULONG Mode)
  6478. + {
  6479. +     struct DisplayInfo    DisplayInfo;
  6480. +     struct DimensionInfo    DimensionInfo;
  6481. +         /* Get the display dimensions. */
  6482. +     if(GetDisplayInfoData(NULL,(APTR)&DisplayInfo,sizeof(struct DisplayInfo),DTAG_DISP,Mode) && GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_DIMS,Mode))
  6483. +     {
  6484. +             /* Two shades only, black & white */
  6485. +         STATIC struct ColorSpec Colours[] =
  6486. +         {
  6487. +              0,    0x0000, 0x0000, 0x0000,
  6488. +              1,    0xFFFF, 0xFFFF, 0xFFFF,
  6489. +             -1
  6490. +         };
  6491. +         float    Width,
  6492. +             Height;
  6493. +         LONG    i,cube_size,max;
  6494. +         LONG    ScreenWidth,
  6495. +             ScreenHeight,
  6496. +             ScreenDepth;
  6497. +             /* Start up with a maximum depth display. */
  6498. +         ScreenDepth = DimensionInfo . MaxDepth;
  6499. +             /* Check to see whether we will be able to
  6500. +              * build a colour display or not.
  6501. +              */
  6502. +         for(cube_size = 6 ; cube_size >= 2 ; cube_size--)
  6503. +         {
  6504. +             if((max = cube_size * cube_size * cube_size) <= 1 << ScreenDepth)
  6505. +                 break;
  6506. +         }
  6507. +             /* Got enough colours? */
  6508. +         if(cube_size != 1)
  6509. +             set_colour_device((gx_device_amiga *)dev,cube_size,NULL);
  6510. +         else
  6511. +         {
  6512. +             ScreenDepth = 1;
  6513. +             set_mono_device((gx_device_amiga *)dev);
  6514. +         }
  6515. +         if(xdev -> width > 0 && xdev -> height > 0)
  6516. +         {
  6517. +             Width    = xdev -> width;
  6518. +             Height    = xdev -> height;
  6519. +         }
  6520. +         else
  6521. +         {
  6522. +             if(xdev -> page_width > 0.0)
  6523. +                 Width = xdev -> page_width;
  6524. +             else
  6525. +                 Width = 0.0;
  6526. +             if(xdev -> page_height > 0.0)
  6527. +                 Height = xdev -> page_height;
  6528. +             else
  6529. +                 Height = 0.0;
  6530. +         }
  6531. +             /* Use the best guess, we will take the standard
  6532. +              * low resolution x-dpi value and scale it by
  6533. +              * the pixel speed.
  6534. +              */
  6535. +         if(DisplayInfo . PixelSpeed)
  6536. +         {
  6537. +             xdev -> x_pixels_per_inch = (35.0 * 140.0) / (float)DisplayInfo . PixelSpeed;
  6538. +             xdev -> y_pixels_per_inch = (xdev -> x_pixels_per_inch * (float)DisplayInfo . Resolution . x) / (float)DisplayInfo . Resolution . y;
  6539. +         }
  6540. +         else
  6541. +         {
  6542. +             xdev -> x_pixels_per_inch = 72.27;
  6543. +             xdev -> y_pixels_per_inch = 72.27;
  6544. +         }
  6545. +         if(Width > 0.0)
  6546. +             ScreenWidth = (LONG)(Width * xdev -> x_pixels_per_inch);
  6547. +         else
  6548. +             ScreenWidth = 0;
  6549. +         if(Height > 0.0)
  6550. +             ScreenHeight = (LONG)(Height * xdev -> y_pixels_per_inch);
  6551. +         else
  6552. +             ScreenHeight = 0;
  6553. +         if(ScreenWidth < DimensionInfo . MinRasterWidth || ScreenWidth > DimensionInfo . MaxRasterWidth)
  6554. +             ScreenWidth = 0;
  6555. +         if(ScreenHeight < DimensionInfo . MinRasterHeight || ScreenHeight > DimensionInfo . MaxRasterHeight)
  6556. +             ScreenHeight = 0;
  6557. +             /* Try to open a custom screen; if this fails, try to
  6558. +              * rescale the colour cube and retry.
  6559. +              */
  6560. +         do
  6561. +         {
  6562. +             if(!(xdev -> screen = OpenScreenTags(NULL,
  6563. +                 SA_Depth,    ScreenDepth,
  6564. +                 SA_Overscan,    OSCAN_TEXT,
  6565. +                 SA_Quiet,    TRUE,
  6566. +                 SA_Behind,    TRUE,
  6567. +                 SA_DisplayID,    Mode,
  6568. +                 SA_Colors,    Colours,
  6569. +                 SA_AutoScroll,    TRUE,
  6570. +                 SA_ShowTitle,    FALSE,
  6571. +                 SA_Title,    "Ghostscript Amiga output screen",
  6572. +                 ScreenWidth  > 0 ? SA_Width  : TAG_IGNORE,    ScreenWidth,
  6573. +                 ScreenHeight > 0 ? SA_Height : TAG_IGNORE,    ScreenHeight,
  6574. +             TAG_DONE)))
  6575. +             {
  6576. +                 if(ScreenDepth < 2)
  6577. +                     break;
  6578. +                 else
  6579. +                 {
  6580. +                     ScreenDepth--;
  6581. +                         /* Check to see whether we will be able to
  6582. +                          * build a colour display or not.
  6583. +                          */
  6584. +                     while(cube_size >= 2)
  6585. +                     {
  6586. +                         if((max = cube_size * cube_size * cube_size) <= 1 << ScreenDepth)
  6587. +                             break;
  6588. +                         else
  6589. +                             cube_size--;
  6590. +                     }
  6591. +                         /* Got enough colours? */
  6592. +                     if(cube_size == 1 || ScreenDepth == 1)
  6593. +                     {
  6594. +                             /* Obviously not. */
  6595. +                         ScreenDepth = 1;
  6596. +                         set_mono_device((gx_device_amiga *)dev);
  6597. +                     }
  6598. +                 }
  6599. +             }
  6600. +         }
  6601. +         while(!xdev -> screen);
  6602. +             /* Did we succeed in opening the screen? */
  6603. +         if(xdev -> screen)
  6604. +         {
  6605. +             if(xdev -> window = OpenWindowTags(NULL,
  6606. +                 WA_Left,    0,
  6607. +                 WA_Top,        0,
  6608. +                 WA_Width,    xdev -> screen -> Width,
  6609. +                 WA_Height,    xdev -> screen -> Height,
  6610. +                 WA_Backdrop,    TRUE,
  6611. +                 WA_RMBTrap,    TRUE,
  6612. +                 WA_Borderless,    TRUE,
  6613. +                 WA_CustomScreen,xdev -> screen,
  6614. +             TAG_DONE))
  6615. +             {
  6616. +                 xdev -> rport    = xdev -> window -> RPort;
  6617. +                 xdev -> width    = xdev -> screen -> Width;
  6618. +                 xdev -> height    = xdev -> screen -> Height;
  6619. +             }
  6620. +             else
  6621. +             {
  6622. +                 xdev -> rport    = &xdev -> screen -> RastPort;
  6623. +                 xdev -> width    = xdev -> screen -> Width;
  6624. +                 xdev -> height    = xdev -> screen -> Height;
  6625. +             }
  6626. +                 /* Establish defaults. */
  6627. +             DarkPen        = 0;
  6628. +             LightPen    = 1;
  6629. +             SetBPen(xdev -> rport,0);
  6630. +             SetDrMd(xdev -> rport,JAM2);
  6631. +                 /* Create the temporary drawing area. */
  6632. +             if(xdev -> temp_rport = CreateTempRPort(xdev -> rport))
  6633. +             {
  6634. +                 if(xdev -> temp_array = (UBYTE *)AllocVec((xdev -> screen -> Width + 15) & ~15,MEMF_ANY))
  6635. +                 {
  6636. +                         /* Colour output enabled? */
  6637. +                     if(xdev -> cube_size > 0)
  6638. +                     {
  6639. +                         LONG r,g,b,max = xdev -> cube_size - 1;
  6640. +                         i = 0;
  6641. +                             /* Build a suitable colour map. */
  6642. +                         if(GfxBase -> LibNode . lib_Version >= 39)
  6643. +                         {
  6644. +                             for(r = 0 ; r < xdev -> cube_size ; r++)
  6645. +                             {
  6646. +                                 for(g = 0 ; g < xdev -> cube_size ; g++)
  6647. +                                 {
  6648. +                                     for(b = 0 ; b < xdev -> cube_size ; b++)
  6649. +                                         SetRGB32(&xdev -> screen -> ViewPort,i++,SPREAD((255 * r) / max),SPREAD((255 * g) / max),SPREAD((255 * b) / max));
  6650. +                                 }
  6651. +                             }
  6652. +                         }
  6653. +                         else
  6654. +                         {
  6655. +                             for(r = 0 ; r < xdev -> cube_size ; r++)
  6656. +                             {
  6657. +                                 for(g = 0 ; g < xdev -> cube_size ; g++)
  6658. +                                 {
  6659. +                                     for(b = 0 ; b < xdev -> cube_size ; b++)
  6660. +                                         SetRGB4(&xdev -> screen -> ViewPort,i++,(15 * r) / max,(15 * g) / max,(15 * b) / max);
  6661. +                                 }
  6662. +                             }
  6663. +                         }
  6664. +                     }
  6665. +                 }
  6666. +                 else
  6667. +                 {
  6668. +                     perror("Ghostscript: failed to allocate temporary line");
  6669. +                     return(-1);
  6670. +                 }
  6671. +             }
  6672. +             else
  6673. +             {
  6674. +                 perror("Ghostscript: failed to allocate temporary raster");
  6675. +                 return(-1);
  6676. +             }
  6677. +             amiga_set_pen(dev,DarkPen);
  6678. +             return(0);
  6679. +         }
  6680. +         else
  6681. +             perror("Ghostscript: failed to open screen");
  6682. +     }
  6683. +     else
  6684. +         perror("Ghostscript: failed to get display mode information");
  6685. +     return(-1);
  6686. + }
  6687. +     /* amiga_output_page(gx_device *dev,int,int):
  6688. +      *
  6689. +      *    Page is not `buffered', just bring screen/window
  6690. +      *    to the front.
  6691. +      */
  6692. + int
  6693. + amiga_output_page(gx_device *dev,int num_copies,int flush)
  6694. + {
  6695. +     if(xdev -> screen)
  6696. +         ScreenToFront(xdev -> screen);
  6697. +     else
  6698. +     {
  6699. +         if(xdev -> window)
  6700. +             WindowToFront(xdev -> window);
  6701. +     }
  6702. +     return(0);
  6703. + }
  6704. +     /* amiga_close(gx_device *dev):
  6705. +      *
  6706. +      *    Close the screen and free associated resources.
  6707. +      */
  6708. + int
  6709. + amiga_close(gx_device *dev)
  6710. + {
  6711. +     if(xdev -> dispatcher)
  6712. +     {
  6713. +         const sigset_t trapped = sigmask(SIGINT);
  6714. +         sigprocmask(SIG_BLOCK,&trapped,NULL);
  6715. +         Forbid();
  6716. +         Signal(xdev -> dispatcher,SIG_KILL);
  6717. +         SetSignal(0,SIG_HANDSHAKE);
  6718. +         Wait(SIG_HANDSHAKE);
  6719. +         Permit();
  6720. +         sigprocmask(SIG_UNBLOCK,&trapped,NULL);
  6721. +     }
  6722. +     if(xdev -> temp_array)
  6723. +     {
  6724. +         FreeVec(xdev -> temp_array);
  6725. +         xdev -> temp_array = NULL;
  6726. +     }
  6727. +     if(xdev -> pens)
  6728. +     {
  6729. +         LONG i;
  6730. +         for(i = 0 ; i < xdev -> cube_size * xdev -> cube_size * xdev -> cube_size ; i++)
  6731. +         {
  6732. +             if(xdev -> pens[i] != -1)
  6733. +                 ReleasePen(xdev -> window -> WScreen -> ViewPort . ColorMap,xdev -> pens[i]);
  6734. +         }
  6735. +         FreeVec(xdev -> pens);
  6736. +         xdev -> pens = NULL;
  6737. +     }
  6738. +     if(xdev -> temp_rport)
  6739. +     {
  6740. +         DeleteTempRPort(xdev -> temp_rport);
  6741. +         xdev -> temp_rport = NULL;
  6742. +     }
  6743. +     if(xdev -> window)
  6744. +     {
  6745. +         CloseWindow(xdev -> window);
  6746. +         xdev -> window = NULL;
  6747. +     }
  6748. +     DeleteScrollers(dev);
  6749. +     if(xdev -> super_bitmap)
  6750. +     {
  6751. +         DeleteBitMap(xdev -> super_bitmap,FALSE);
  6752. +         xdev -> super_bitmap = NULL;
  6753. +     }
  6754. +     if(xdev -> screen)
  6755. +     {
  6756. +         CloseScreen(xdev -> screen);
  6757. +         xdev -> screen = NULL;
  6758. +     }
  6759. +     xdev -> width = xdev -> height = 0;
  6760. + /*    xdev -> x_pixels_per_inch = x_pixels_per_inch = 72.72;*/
  6761. +     return(0);
  6762. + }
  6763. +     /* amiga_fill_rectangle(gx_device *dev,int x,int y,int w,int h,gx_color_index color):
  6764. +      *
  6765. +      *    Fill a rectangle with a given colour. This one is simple as it can
  6766. +      *    be done with the Amiga graphics primitives.
  6767. +      */
  6768. + int
  6769. + amiga_fill_rectangle(gx_device *dev,int x,int y,int w,int h,gx_color_index color)
  6770. + {
  6771. +     if(x < 0 || x > xdev -> width - w || y < 0 || y > xdev -> height - h)
  6772. +         return(-1);
  6773. +     else
  6774. +     {
  6775. +         if(w > 0 && h > 0 && color != gx_no_color_index)
  6776. +         {
  6777. +             amiga_set_pen(dev,color);
  6778. +             RectFill(xdev -> rport,x,y,x + w - 1,y + h - 1);
  6779. +         }
  6780. +         return(0);
  6781. +     }
  6782. + }
  6783. +     /* amiga_copy_mono():
  6784. +      *
  6785. +      *    Copy a monochrome image. This operation requires a bit of work as
  6786. +      *    we cannot simply blit the image into the bitmap.
  6787. +      */
  6788. + int
  6789. + amiga_copy_mono(gx_device *dev,const UBYTE *base,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h,gx_color_index zero,gx_color_index one)
  6790. + {
  6791. +     if(y < 0 || x < 0 || w < 0 || h < 0)
  6792. +         return(-1);
  6793. +     else
  6794. +     {
  6795. +         if(w > 0 && h > 0)
  6796. +         {
  6797. +             LONG i,j;
  6798. +             if(zero == gx_no_color_index)
  6799. +             {
  6800. +                 if(one != gx_no_color_index)
  6801. +                 {
  6802. +                     do
  6803. +                     {
  6804. +                         ReadPixelLine8(xdev -> rport,x,y,w,xdev -> temp_array,xdev -> temp_rport);
  6805. +                         for(i = sourcex, j = 0 ; i < sourcex + w ; i++, j++)
  6806. +                         {
  6807. +                             if(base[i >> 3] & shift[i & 7])
  6808. +                                 xdev -> temp_array[j] = one;
  6809. +                         }
  6810. +                         WritePixelLine8(xdev -> rport,x,y,w,xdev -> temp_array,xdev -> temp_rport);
  6811. +                         base += raster;
  6812. +                         y++;
  6813. +                     }
  6814. +                     while(--h);
  6815. +                 }
  6816. +             }
  6817. +             else
  6818. +             {
  6819. +                 if(one == gx_no_color_index)
  6820. +                 {
  6821. +                     do
  6822. +                     {
  6823. +                         ReadPixelLine8(xdev -> rport,x,y,w,xdev -> temp_array,xdev -> temp_rport);
  6824. +                         for(i = sourcex, j = 0 ; i < w + sourcex ; i++, j++)
  6825. +                         {
  6826. +                             if(!(base[i >> 3] & shift[i & 7]))
  6827. +                                 xdev -> temp_array[j] = zero;
  6828. +                         }
  6829. +                         WritePixelLine8(xdev -> rport,x,y,w,xdev -> temp_array,xdev -> temp_rport);
  6830. +                         base += raster;
  6831. +                         y++;
  6832. +                     }
  6833. +                     while(--h);
  6834. +                 }
  6835. +                 else
  6836. +                 {
  6837. +                     do
  6838. +                     {
  6839. +                         for(i = sourcex, j = 0 ; i < w + sourcex ; i++, j++)
  6840. +                         {
  6841. +                             if(base[i >> 3] & shift[i & 7])
  6842. +                                 xdev -> temp_array[j] = one;
  6843. +                             else
  6844. +                                 xdev -> temp_array[j] = zero;
  6845. +                         }
  6846. +                         WritePixelLine8(xdev -> rport,x,y,w,xdev -> temp_array,xdev -> temp_rport);
  6847. +                         base += raster;
  6848. +                         y++;
  6849. +                     }
  6850. +                     while(--h);
  6851. +                 }
  6852. +             }
  6853. +         }
  6854. +         return(0);
  6855. +     }
  6856. + }
  6857. +     /* amiga_copy_color():
  6858. +      *
  6859. +      *    Copy a color image (oh well...). This is just the same as the
  6860. +      *    copy_mono() routine.
  6861. +      */
  6862. + int
  6863. + amiga_copy_color(gx_device *dev,const UBYTE *base,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h)
  6864. + {
  6865. +     if(y < 0 || x < 0 || w < 0 || h < 0)
  6866. +         return(-1);
  6867. +     else
  6868. +     {
  6869. +         if(w > 0 && h > 0)
  6870. +         {
  6871. +             LONG i,j;
  6872. +             do
  6873. +             {
  6874. +                 for(i = sourcex, j = 0 ; i < w + sourcex ; i++, j++)
  6875. +                 {
  6876. +                     if(base[i >> 3] & shift[i & 7])
  6877. +                         xdev -> temp_array[j] = DarkPen;
  6878. +                     else
  6879. +                         xdev -> temp_array[j] = LightPen;
  6880. +                 }
  6881. +                 WritePixelLine8(xdev -> rport,x,y,w,xdev -> temp_array,xdev -> temp_rport);
  6882. +                 base += raster;
  6883. +                 y++;
  6884. +             }
  6885. +             while(--h);
  6886. +         }
  6887. +         return(0);
  6888. +     }
  6889. + }
  6890. +     /* amiga_draw_line(gx_device *dev,int x0,int y0,int x1,int y1,gx_color_index color):
  6891. +      *
  6892. +      *    Draw a line between two points. This one is easy as it can be done
  6893. +      *    with the Amiga graphics primitives, the only glitch is having to reset
  6894. +      *    the last dot to its original colour.
  6895. +      */
  6896. + int
  6897. + amiga_draw_line(gx_device *dev,int x0,int y0,int x1,int y1,gx_color_index color)
  6898. + {
  6899. +     if(color != gx_no_color_index && (x0 != x1 || y0 != y1))
  6900. +     {
  6901. +         LONG pen;
  6902. +         pen = ReadPixel(xdev -> rport,x1,y1);
  6903. +         amiga_set_pen(dev,color);
  6904. +         Move(xdev -> rport,x0,y0);
  6905. +         Draw(xdev -> rport,x1,y1);
  6906. +         if(pen == color)
  6907. +         {
  6908. +             amiga_set_pen(dev,pen);
  6909. +             WritePixel(xdev -> rport,x1,y1);
  6910. +         }
  6911. +     }
  6912. +     return(0);
  6913. + }
  6914. +     /* amiga_copy_mono_raw():
  6915. +      *
  6916. +      *    Copy a monochrome image to a bitmap. Just watch the
  6917. +      *    astounding number of case switches.
  6918. +      */
  6919. + int
  6920. + amiga_copy_mono_raw(gx_device *dev,const UBYTE *base,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h,gx_color_index zero,gx_color_index one)
  6921. + {
  6922. +     if(y < 0 || x < 0 || w < 0 || h < 0)
  6923. +         return(-1);
  6924. +     else
  6925. +     {
  6926. +         if(w > 0 && h > 0)
  6927. +         {
  6928. +             LONG i,j,modulo = xdev -> rport -> BitMap -> BytesPerRow;
  6929. +             UBYTE *line;
  6930. +             w += sourcex;
  6931. +             line = xdev -> rport -> BitMap -> Planes[0] + y * xdev -> rport -> BitMap -> BytesPerRow;
  6932. +             if(zero == gx_no_color_index)
  6933. +             {
  6934. +                 if(one != gx_no_color_index)
  6935. +                 {
  6936. +                     if(one)
  6937. +                     {
  6938. +                         do
  6939. +                         {
  6940. +                             for(i = sourcex, j = x ; i < w ; i++, j++)
  6941. +                             {
  6942. +                                 if(base[i >> 3] & shift[i & 7])
  6943. +                                     line[j >> 3] |= shift[j & 7];
  6944. +                             }
  6945. +                             base += raster;
  6946. +                             line += modulo;
  6947. +                         }
  6948. +                         while(--h);
  6949. +                     }
  6950. +                     else
  6951. +                     {
  6952. +                         do
  6953. +                         {
  6954. +                             for(i = sourcex, j = x ; i < w ; i++, j++)
  6955. +                             {
  6956. +                                 if(base[i >> 3] & shift[i & 7])
  6957. +                                     line[j >> 3] &= masks[j & 7];
  6958. +                             }
  6959. +                             base += raster;
  6960. +                             line += modulo;
  6961. +                         }
  6962. +                         while(--h);
  6963. +                     }
  6964. +                 }
  6965. +             }
  6966. +             else
  6967. +             {
  6968. +                 if(one == gx_no_color_index)
  6969. +                 {
  6970. +                     if(zero)
  6971. +                     {
  6972. +                         do
  6973. +                         {
  6974. +                             for(i = sourcex, j = x ; i < w ; i++, j++)
  6975. +                             {
  6976. +                                 if(!(base[i >> 3] & shift[i & 7]))
  6977. +                                     line[j >> 3] |= shift[j & 7];
  6978. +                             }
  6979. +                             base += raster;
  6980. +                             line += modulo;
  6981. +                         }
  6982. +                         while(--h);
  6983. +                     }
  6984. +                     else
  6985. +                     {
  6986. +                         do
  6987. +                         {
  6988. +                             for(i = sourcex, j = x ; i < w ; i++, j++)
  6989. +                             {
  6990. +                                 if(!(base[i >> 3] & shift[i & 7]))
  6991. +                                     line[j >> 3] &= masks[j & 7];
  6992. +                             }
  6993. +                             base += raster;
  6994. +                             line += modulo;
  6995. +                         }
  6996. +                         while(--h);
  6997. +                     }
  6998. +                 }
  6999. +                 else
  7000. +                 {
  7001. +                     if(one)
  7002. +                     {
  7003. +                         do
  7004. +                         {
  7005. +                             for(i = sourcex, j = x ; i < w ; i++, j++)
  7006. +                             {
  7007. +                                 if(base[i >> 3] & shift[i & 7])
  7008. +                                     line[j >> 3] |= shift[j & 7];
  7009. +                                 else
  7010. +                                     line[j >> 3] &= masks[j & 7];
  7011. +                             }
  7012. +                             base += raster;
  7013. +                             line += modulo;
  7014. +                         }
  7015. +                         while(--h);
  7016. +                     }
  7017. +                     else
  7018. +                     {
  7019. +                         do
  7020. +                         {
  7021. +                             for(i = sourcex, j = x ; i < w ; i++, j++)
  7022. +                             {
  7023. +                                 if(base[i >> 3] & shift[i & 7])
  7024. +                                     line[j >> 3] &= masks[j & 7];
  7025. +                                 else
  7026. +                                     line[j >> 3] |= shift[j & 7];
  7027. +                             }
  7028. +                             base += raster;
  7029. +                             line += modulo;
  7030. +                         }
  7031. +                         while(--h);
  7032. +                     }
  7033. +                 }
  7034. +             }
  7035. +         }
  7036. +         return(0);
  7037. +     }
  7038. + }
  7039. +     /* amiga_copy_color_raw():
  7040. +      *
  7041. +      *    Copy a color image (oh well...). This is just the same as the
  7042. +      *    copy_mono() routine.
  7043. +      */
  7044. + int
  7045. + amiga_copy_color_raw(gx_device *dev,const UBYTE *base,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h)
  7046. + {
  7047. +     if(y < 0 || x < 0 || w < 0 || h < 0)
  7048. +         return(-1);
  7049. +     else
  7050. +     {
  7051. +         if(w > 0 && h > 0)
  7052. +         {
  7053. +             LONG i,j,modulo = xdev -> rport -> BitMap -> BytesPerRow;
  7054. +             UBYTE *line;
  7055. +             line = xdev -> rport -> BitMap -> Planes[0] + y * xdev -> rport -> BitMap -> BytesPerRow;
  7056. +             w += sourcex;
  7057. +             do
  7058. +             {
  7059. +                 for(i = sourcex, j = x ; i < w ; i++, j++)
  7060. +                 {
  7061. +                     if(base[i >> 3] & shift[i & 7])
  7062. +                         line[j >> 3] |= shift[j & 7];
  7063. +                     else
  7064. +                         line[j >> 3] &= masks[j & 7];
  7065. +                 }
  7066. +                 base += raster;
  7067. +                 line += modulo;
  7068. +             }
  7069. +             while(--h);
  7070. +         }
  7071. +         return(0);
  7072. +     }
  7073. + }
  7074. +     /* amiga_fill_rectangle_raw():
  7075. +      *
  7076. +      *    Fill a rectangular area in a bitmap.
  7077. +      */
  7078. + int
  7079. + amiga_fill_rectangle_raw(gx_device *dev,int x,int y,int w,int h,gx_color_index color)
  7080. + {
  7081. +     if(x < 0 || x > xdev -> width - w || y < 0 || y > xdev -> height - h)
  7082. +         return(-1);
  7083. +     else
  7084. +     {
  7085. +         if(w > 0 && h > 0 && color != gx_no_color_index)
  7086. +         {
  7087. +             UBYTE *line,startmask,endmask;
  7088. +             LONG right,mid,modulo = xdev -> rport -> BitMap -> BytesPerRow;
  7089. +             right    = x + w;
  7090. +             mid    = (right >> 3) - (x >> 3);
  7091. +             line    = xdev -> rport -> BitMap -> Planes[0] + y * xdev -> rport -> BitMap -> BytesPerRow + (x >> 3);
  7092. +             x    &= 7;
  7093. +             right    &= 7;
  7094. +             if(color)
  7095. +             {
  7096. +                 startmask    = 0xFF >> x;
  7097. +                 endmask        = ~(0xFF >> right);
  7098. +                 if(mid)
  7099. +                 {
  7100. +                     UBYTE *ptr;
  7101. +                     int i;
  7102. +                     do
  7103. +                     {
  7104. +                         ptr = line;
  7105. +                         *ptr++ |= startmask;
  7106. +                         i = mid;
  7107. +                         while(--i > 0)
  7108. +                             *ptr++ = 0xFF;
  7109. +                         *ptr |= endmask;
  7110. +                         line += modulo;
  7111. +                     }
  7112. +                     while(--h);
  7113. +                 }
  7114. +                 else
  7115. +                 {
  7116. +                     startmask &= endmask;
  7117. +                     do
  7118. +                     {
  7119. +                         *line |= startmask;
  7120. +                         line += modulo;
  7121. +                     }
  7122. +                     while(--h);
  7123. +                 }
  7124. +             }
  7125. +             else
  7126. +             {
  7127. +                 startmask    = ~(0xFF >> x);
  7128. +                 endmask        = 0xFF >> right;
  7129. +                 if(mid)
  7130. +                 {
  7131. +                     UBYTE *ptr;
  7132. +                     LONG i;
  7133. +                     do
  7134. +                     {
  7135. +                         ptr = line;
  7136. +                         *ptr++ &= startmask;
  7137. +                         i = mid;
  7138. +                         while(--i > 0)
  7139. +                             *ptr++ = 0x00;
  7140. +                         *ptr &= endmask;
  7141. +                         line += modulo;
  7142. +                     }
  7143. +                     while(--h);
  7144. +                 }
  7145. +                 else
  7146. +                 {
  7147. +                     startmask |= endmask;
  7148. +                     do
  7149. +                     {
  7150. +                         *line &= startmask;
  7151. +                         line += modulo;
  7152. +                     }
  7153. +                     while(--h);
  7154. +                 }
  7155. +             }
  7156. +         }
  7157. +         return(0);
  7158. +     }
  7159. + }
  7160. +     /* amiga_draw_line_raw():
  7161. +      *
  7162. +      *    Draw a hair line, your basic DDA algorithm;
  7163. +      *    keep your fingers crossed.
  7164. +      */
  7165. + int
  7166. + amiga_draw_line_raw(gx_device *dev,int x,int y,int x1,int y1,gx_color_index color)
  7167. + {
  7168. +     if(color != gx_no_color_index && (x != x1 || y != y1))
  7169. +     {
  7170. +         short xstep,ystep,dx,dy,diff,modulo;
  7171. +         UBYTE *line,*plane,pen;
  7172. +         LONG last;
  7173. +         modulo    = xdev -> rport -> BitMap -> BytesPerRow;
  7174. +         plane    = xdev -> rport -> BitMap -> Planes[0];
  7175. +         line    = &plane[y1 * modulo];
  7176. +         last    = y1;
  7177. +         pen    = line[x1 >> 3] & (x1 & 7);
  7178. +         dx = x1 - x;
  7179. +         dy = y1 - y;
  7180. +         if(dx < 0)
  7181. +         {
  7182. +             dx = -dx;
  7183. +             dy = -dy;
  7184. +             x = x1;
  7185. +             y = y1;
  7186. +         }
  7187. +         if(y != last)
  7188. +             line = &plane[(last = y) * modulo];
  7189. +         if(color)
  7190. +         {
  7191. +             line[x >> 3] |= shift[x & 7];
  7192. +             xstep = ystep = 0;
  7193. +             if(dy < 0)
  7194. +             {
  7195. +                 if(dx > -dy)
  7196. +                 {
  7197. +                     diff = -dx / 2;
  7198. +                     do
  7199. +                     {
  7200. +                         xstep++;
  7201. +                         if(diff > 0)
  7202. +                         {
  7203. +                             ystep--;
  7204. +                             diff = diff - dy - dx;
  7205. +                         }
  7206. +                         else
  7207. +                             diff -= dy;
  7208. +                         {
  7209. +                             LONG x1 = x + xstep,y1 = y + ystep;
  7210. +                             if(y1 != last)
  7211. +                                 line = &plane[(last = y1) * modulo];
  7212. +                             line[x1 >> 3] |= shift[x1 & 7];
  7213. +                         }
  7214. +                     }
  7215. +                     while(xstep < dx);
  7216. +                 }
  7217. +                 else
  7218. +                 {
  7219. +                     if(dx == -dy)
  7220. +                         diff = 0;
  7221. +                     else
  7222. +                         diff = -dy / 2;
  7223. +                     do
  7224. +                     {
  7225. +                         ystep--;
  7226. +                         if(diff > 0)
  7227. +                             diff -= dx;
  7228. +                         else
  7229. +                         {
  7230. +                             xstep++;
  7231. +                             diff = diff - dy - dx;
  7232. +                         }
  7233. +                         {
  7234. +                             LONG x1 = x + xstep,y1 = y + ystep;
  7235. +                             if(y1 != last)
  7236. +                                 line = &plane[(last = y1) * modulo];
  7237. +                             line[x1 >> 3] |= shift[x1 & 7];
  7238. +                         }
  7239. +                     }
  7240. +                     while(ystep > dy);
  7241. +                 }
  7242. +             }
  7243. +             else
  7244. +             {
  7245. +                 if(dx > dy)
  7246. +                 {
  7247. +                     diff = -dx / 2;
  7248. +                     do
  7249. +                     {
  7250. +                         xstep++;
  7251. +                         if(diff > 0)
  7252. +                         {
  7253. +                             ystep++;
  7254. +                             diff = diff + dy - dx;
  7255. +                         }
  7256. +                         else
  7257. +                             diff += dy;
  7258. +                         {
  7259. +                             LONG x1 = x + xstep,y1 = y + ystep;
  7260. +                             if(y1 != last)
  7261. +                                 line = &plane[(last = y1) * modulo];
  7262. +                             line[x1 >> 3] |= shift[x1 & 7];
  7263. +                         }
  7264. +                     }
  7265. +                     while(xstep < dx);
  7266. +                 }
  7267. +                 else
  7268. +                 {
  7269. +                     if(dx == dy)
  7270. +                         diff = 0;
  7271. +                     else
  7272. +                         diff = dy / 2;
  7273. +                     do
  7274. +                     {
  7275. +                         ystep++;
  7276. +                         if(diff > 0)
  7277. +                             diff -= dx;
  7278. +                         else
  7279. +                         {
  7280. +                             xstep++;
  7281. +                             diff = diff + dy - dx;
  7282. +                         }
  7283. +                         {
  7284. +                             LONG x1 = x + xstep,y1 = y + ystep;
  7285. +                             if(y1 != last)
  7286. +                                 line = &plane[(last = y1) * modulo];
  7287. +                             line[x1 >> 3] |= shift[x1 & 7];
  7288. +                         }
  7289. +                     }
  7290. +                     while(ystep < dy);
  7291. +                 }
  7292. +             }
  7293. +             if(!pen)
  7294. +             {
  7295. +                 if(y1 != last)
  7296. +                     line = &plane[(last = y1) * modulo];
  7297. +                 line[x1 >> 3] &= masks[x1 & 7];
  7298. +             }
  7299. +         }
  7300. +         else
  7301. +         {
  7302. +             line[x >> 3] &= masks[x & 7];
  7303. +             xstep = ystep = 0;
  7304. +             if(dy < 0)
  7305. +             {
  7306. +                 if(dx > -dy)
  7307. +                 {
  7308. +                     diff = -dx / 2;
  7309. +                     do
  7310. +                     {
  7311. +                         xstep++;
  7312. +                         if(diff > 0)
  7313. +                         {
  7314. +                             ystep--;
  7315. +                             diff = diff - dy - dx;
  7316. +                         }
  7317. +                         else
  7318. +                             diff -= dy;
  7319. +                         {
  7320. +                             LONG x1 = x + xstep,y1 = y + ystep;
  7321. +                             if(y1 != last)
  7322. +                                 line = &plane[(last = y1) * modulo];
  7323. +                             line[x1 >> 3] &= masks[x1 & 7];
  7324. +                         }
  7325. +                     }
  7326. +                     while(xstep < dx);
  7327. +                 }
  7328. +                 else
  7329. +                 {
  7330. +                     if(dx == -dy)
  7331. +                         diff = 0;
  7332. +                     else
  7333. +                         diff = -dy / 2;
  7334. +                     do
  7335. +                     {
  7336. +                         ystep--;
  7337. +                         if(diff > 0)
  7338. +                             diff -= dx;
  7339. +                         else
  7340. +                         {
  7341. +                             xstep++;
  7342. +                             diff = diff - dy - dx;
  7343. +                         }
  7344. +                         {
  7345. +                             LONG x1 = x + xstep,y1 = y + ystep;
  7346. +                             if(y1 != last)
  7347. +                                 line = &plane[(last = y1) * modulo];
  7348. +                             line[x1 >> 3] &= masks[x1 & 7];
  7349. +                         }
  7350. +                     }
  7351. +                     while(ystep > dy);
  7352. +                 }
  7353. +             }
  7354. +             else
  7355. +             {
  7356. +                 if(dx > dy)
  7357. +                 {
  7358. +                     diff = -dx / 2;
  7359. +                     do
  7360. +                     {
  7361. +                         xstep++;
  7362. +                         if(diff > 0)
  7363. +                         {
  7364. +                             ystep++;
  7365. +                             diff = diff + dy - dx;
  7366. +                         }
  7367. +                         else
  7368. +                             diff += dy;
  7369. +                         {
  7370. +                             LONG x1 = x + xstep,y1 = y + ystep;
  7371. +                             if(y1 != last)
  7372. +                                 line = &plane[(last = y1) * modulo];
  7373. +                             line[x1 >> 3] &= masks[x1 & 7];
  7374. +                         }
  7375. +                     }
  7376. +                     while(xstep < dx);
  7377. +                 }
  7378. +                 else
  7379. +                 {
  7380. +                     if(dx == dy)
  7381. +                         diff = 0;
  7382. +                     else
  7383. +                         diff =  dy / 2;
  7384. +                     do
  7385. +                     {
  7386. +                         ystep++;
  7387. +                         if(diff > 0)
  7388. +                             diff -= dx;
  7389. +                         else
  7390. +                         {
  7391. +                             xstep++;
  7392. +                             diff = diff + dy - dx;
  7393. +                         }
  7394. +                         {
  7395. +                             LONG x1 = x + xstep,y1 = y + ystep;
  7396. +                             if(y1 != last)
  7397. +                                 line = &plane[(last = y1) * modulo];
  7398. +                             line[x1 >> 3] &= masks[x1 & 7];
  7399. +                         }
  7400. +                     }
  7401. +                     while(ystep < dy);
  7402. +                 }
  7403. +             }
  7404. +             if(pen)
  7405. +             {
  7406. +                 if(y1 != last)
  7407. +                     line = &plane[(last = y1) * modulo];
  7408. +                 line[x1 >> 3] |= pen;
  7409. +             }
  7410. +         }
  7411. +     }
  7412. +     return(0);
  7413. + }
  7414. +     /* amiga_open_ilbm(gx_device *dev):
  7415. +      *
  7416. +      *    Open the ilbm device.
  7417. +      */
  7418. + int
  7419. + amiga_open_ilbm(gx_device *dev)
  7420. + {
  7421. +     if(xdev -> width <= 0 || xdev -> height <= 0)
  7422. +     {
  7423. +         if(xdev -> page_width > 0.0)
  7424. +             xdev -> width = (int)(xdev -> x_pixels_per_inch * xdev -> page_width);
  7425. +         else
  7426. +             xdev -> width = 640;
  7427. +         if(xdev -> page_height > 0.0)
  7428. +             xdev -> height = (int)(xdev -> y_pixels_per_inch * xdev -> page_height);
  7429. +         else
  7430. +             xdev -> height = 512;
  7431. +     }
  7432. +     if(xdev -> rport = (struct RastPort *)AllocVec(sizeof(struct RastPort),MEMF_ANY))
  7433. +     {
  7434. +         InitRastPort(xdev -> rport);
  7435. +         if(xdev -> bitmap = (struct BitMap *)AllocVec(sizeof(struct BitMap),MEMF_ANY))
  7436. +         {
  7437. +             InitBitMap(xdev -> bitmap,1,xdev -> width,xdev -> height);
  7438. +             if(xdev -> bitplane = AllocVec(xdev -> bitmap -> Rows * xdev -> bitmap -> BytesPerRow,MEMF_ANY | MEMF_CLEAR))
  7439. +             {
  7440. +                 xdev -> bitmap -> Planes[0]    = xdev -> bitplane;
  7441. +                 xdev -> rport -> BitMap        = xdev -> bitmap;
  7442. +                 xdev -> page_count        = 1;
  7443. +                 DarkPen        = 0;
  7444. +                 LightPen    = 1;
  7445. +                 return(0);
  7446. +             }
  7447. +             else
  7448. +             {
  7449. +                 char buffer[256];
  7450. +                 sprintf(buffer,"Ghostscript: failed to allocate raster (wanted %ld, largest %ld)",xdev -> bitmap -> Rows * xdev -> bitmap -> BytesPerRow,AvailMem(MEMF_ANY | MEMF_LARGEST));
  7451. +                 perror(buffer);
  7452. +             }
  7453. +         }
  7454. +         else
  7455. +             perror("Ghostscript: failed to allocate bitmap");
  7456. +     }
  7457. +     else
  7458. +         perror("Ghostscript: failed to allocate raster port");
  7459. +     return(-1);
  7460. + }
  7461. +     /* amiga_output_page_ilbm(gx_device *dev,int,int):
  7462. +      *
  7463. +      *    Send a bitmap to an IFF-ILBM file.
  7464. +      */
  7465. + int
  7466. + amiga_output_page_ilbm(gx_device *dev,int num_copies,int flush)
  7467. + {
  7468. +     const sigset_t trapped = sigmask(SIGINT);
  7469. +     char buffer[270];
  7470. +     LONG result = -1;
  7471. +     sprintf(buffer,"%s_%04d.ilbm",xdev -> file_name,xdev -> page_count);
  7472. +     fprintf(stdout,"\n\033[ASaving page Nº%d to \"%s\"...\033[K",xdev -> page_count,buffer);
  7473. +     fflush(stdout);
  7474. +     sigprocmask(SIG_BLOCK,&trapped,NULL);
  7475. +     if(SaveBitMap(buffer,xdev -> bitmap,xdev -> width,xdev -> height,(UWORD)xdev -> x_pixels_per_inch,xdev -> y_pixels_per_inch))
  7476. +     {
  7477. +         fprintf(stdout,"\n\033[APage saved to file \"%s\".\033[K\n",buffer);
  7478. +         result = 0;
  7479. +         xdev -> page_count;
  7480. +     }
  7481. +     else
  7482. +         perror("\n\033[AGhostscript: error saving page\033[K");
  7483. +     sigprocmask(SIG_UNBLOCK,&trapped,NULL);
  7484. +     return(result);
  7485. + }
  7486. +     /* amiga_close_ilbm(gx_device *dev):
  7487. +      *
  7488. +      *    Close the ilbm driver.
  7489. +      */
  7490. + int
  7491. + amiga_close_ilbm(gx_device *dev)
  7492. + {
  7493. +     if(xdev -> bitplane)
  7494. +     {
  7495. +         FreeVec(xdev -> bitplane);
  7496. +         xdev -> bitplane = NULL;
  7497. +     }
  7498. +     if(xdev -> bitmap)
  7499. +     {
  7500. +         FreeVec(xdev -> bitmap);
  7501. +         xdev -> bitmap = NULL;
  7502. +     }
  7503. +     if(xdev -> rport)
  7504. +     {
  7505. +         FreeVec(xdev -> rport);
  7506. +         xdev -> rport = NULL;
  7507. +     }
  7508. +     xdev -> width = xdev -> height = 0;
  7509. + /*    xdev -> x_pixels_per_inch = x_pixels_per_inch = 72.72;*/
  7510. +     return(0);
  7511. + }
  7512. + private const gs_prop_item props_amiga[] =
  7513. + {
  7514. +     prop_def("PageWidth",    prt_string),
  7515. +     prop_def("PageHeight",    prt_string),
  7516. +     prop_def("OutputFile",    prt_string)
  7517. + };
  7518. + int
  7519. + amiga_get_props(gx_device *dev,gs_prop_item *plist)
  7520. + {
  7521. +     int start = gx_default_get_props(dev,plist);
  7522. +     if(plist != 0)
  7523. +     {
  7524. +         gs_prop_item *pi = plist + start;
  7525. +         memcpy(pi,props_amiga,sizeof(props_amiga));
  7526. +         pi[0] . value .a.p.s    = "";
  7527. +         pi[0] . value .a.size    = -1;
  7528. +         pi[1] . value .a.p.s    = "";
  7529. +         pi[1] . value .a.size    = -1;
  7530. +         pi[2] . value .a.p.s    = "";
  7531. +         pi[2] . value .a.size    = -1;
  7532. +     }
  7533. +     return(start + (sizeof(props_amiga) / sizeof(gs_prop_item)));
  7534. + }
  7535. + int
  7536. + amiga_put_props(gx_device *dev,gs_prop_item *plist,int count)
  7537. + {
  7538. +     gs_prop_item *known[3];
  7539. +     LONG code = 0;
  7540. +     props_extract(plist,count,props_amiga,3,known,0);
  7541. +     if((code = gx_default_put_props(dev,plist,count)) < 0)
  7542. +         return(code);
  7543. +     else
  7544. +     {
  7545. +         if(known[0] != 0)
  7546. +         {
  7547. +             gs_prop_item *pn = known[0];
  7548. +             LONG size = pn -> value . a . size;
  7549. +             char temp[256];
  7550. +             if(size >= 256)
  7551. +             {
  7552. +                 pn -> status = pv_limitcheck;
  7553. +                 code = gs_error_limitcheck;
  7554. +             }
  7555. +             else
  7556. +             {
  7557. +                 memcpy(temp,pn -> value . a . p . s,size);
  7558. +                 temp[size] = 0;
  7559. +                 xdev -> page_width = GetInches(temp);
  7560. +                 if(xdev -> page_width <= 0.0)
  7561. +                 {
  7562. +                     xdev -> page_width = 0.0;
  7563. +                     pn -> status = pv_limitcheck;
  7564. +                     code = gs_error_limitcheck;
  7565. +                 }
  7566. +                 else
  7567. +                 {
  7568. +                     if(code == 0)
  7569. +                         code = 1;
  7570. +                 }
  7571. +             }
  7572. +         }
  7573. +         if(known[1] != 0)
  7574. +         {
  7575. +             gs_prop_item *pn = known[1];
  7576. +             LONG size = pn -> value . a . size;
  7577. +             char temp[256];
  7578. +             if(size >= 256)
  7579. +             {
  7580. +                 pn -> status = pv_limitcheck;
  7581. +                 code = gs_error_limitcheck;
  7582. +             }
  7583. +             else
  7584. +             {
  7585. +                 memcpy(temp,pn -> value . a . p . s,size);
  7586. +                 temp[size] = 0;
  7587. +                 xdev -> page_height = GetInches(temp);
  7588. +                 if(xdev -> page_height <= 0.0)
  7589. +                 {
  7590. +                     xdev -> page_height = 0.0;
  7591. +                     pn -> status = pv_limitcheck;
  7592. +                     code = gs_error_limitcheck;
  7593. +                 }
  7594. +                 else
  7595. +                 {
  7596. +                     if(code == 0)
  7597. +                         code = 1;
  7598. +                 }
  7599. +             }
  7600. +         }
  7601. +         if(known[2] != 0)
  7602. +         {
  7603. +             gs_prop_item *pn = known[2];
  7604. +             LONG size = pn -> value . a . size;
  7605. +             if(size >= 256)
  7606. +             {
  7607. +                 pn -> status = pv_limitcheck;
  7608. +                 code = gs_error_limitcheck;
  7609. +             }
  7610. +             else
  7611. +             {
  7612. +                 memcpy(xdev -> file_name,pn -> value . a . p . s,size);
  7613. +                 xdev -> file_name[size] = 0;
  7614. +             }
  7615. +         }
  7616. +         if(code < 0)
  7617. +             return_error(code);
  7618. +         if(xdev -> is_open && code)
  7619. +         {
  7620. +             LONG ccode = gs_closedevice(dev);
  7621. +             if(ccode < 0)
  7622. +                 return(ccode);
  7623. +         }
  7624. +         return(code);
  7625. +     }
  7626. + }
  7627. +     /* amiga_color_map_rgb_color(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue):
  7628. +      *
  7629. +      *    Turn an RGB colour into a pen index.
  7630. +      */
  7631. + gx_color_index
  7632. + amiga_color_map_rgb_color(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue)
  7633. + {
  7634. +     LONG max = xdev -> cube_size - 1,r,g,b;
  7635. +     r = (max * red)   / gx_max_color_value;
  7636. +     g = (max * green) / gx_max_color_value;
  7637. +     b = (max * blue)  / gx_max_color_value;
  7638. +     return((r * xdev -> cube_size + g) * xdev -> cube_size + b);
  7639. + }
  7640. +     /* amiga_color_map_color_rgb(gx_device *dev,gx_color_index color,gx_color_value rgb[3]):
  7641. +      *
  7642. +      *    Turn a pen index into RGB colour values.
  7643. +      */
  7644. + int
  7645. + amiga_color_map_color_rgb(gx_device *dev,gx_color_index color,gx_color_value rgb[3])
  7646. + {
  7647. +     LONG i,value,max = xdev -> cube_size - 1;
  7648. +     for(i = 2 ; i >= 0 ; i--)
  7649. +     {
  7650. +         value = color % xdev -> cube_size;
  7651. +         rgb[i] = (gx_max_color_value * value) / max;
  7652. +         color /= xdev -> cube_size;
  7653. +     }
  7654. +     return(0);
  7655. + }
  7656. +     /* amiga_color_map_rgb_color_pen(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue):
  7657. +      *
  7658. +      *    Turn an RGB colour into a pen index; this routine takes remapped
  7659. +      *    pens into account.
  7660. +      */
  7661. + gx_color_index
  7662. + amiga_color_map_rgb_color_pen(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue)
  7663. + {
  7664. +     LONG max = xdev -> cube_size - 1,r,g,b;
  7665. +     r = (max * red)   / gx_max_color_value;
  7666. +     g = (max * green) / gx_max_color_value;
  7667. +     b = (max * blue)  / gx_max_color_value;
  7668. +     return(xdev -> pens[(r * xdev -> cube_size + g) * xdev -> cube_size + b]);
  7669. + }
  7670. +     /* amiga_color_map_color_rgb_pen(gx_device *dev,gx_color_index color,gx_color_value rgb[3]):
  7671. +      *
  7672. +      *    Turn a pen index into RGB colour values; this routine takes remapped
  7673. +      *    pens into account.
  7674. +      */
  7675. + int
  7676. + amiga_color_map_color_rgb_pen(gx_device *dev,gx_color_index color,gx_color_value rgb[3])
  7677. + {
  7678. +     LONG i,value,max = xdev -> cube_size - 1;
  7679. +         /* Find the matching pen... */
  7680. +     for(i = 0 ; i < xdev -> cube_size * xdev -> cube_size * xdev -> cube_size ; i++)
  7681. +     {
  7682. +         if(xdev -> pens[i] == color)
  7683. +         {
  7684. +             color = i;
  7685. +             break;
  7686. +         }
  7687. +     }
  7688. +     for(i = 2 ; i >= 0 ; i--)
  7689. +     {
  7690. +         value = color % xdev -> cube_size;
  7691. +         rgb[i] = (gx_max_color_value * value) / max;
  7692. +         color /= xdev -> cube_size;
  7693. +     }
  7694. +     return(0);
  7695. + }
  7696. +     /* amiga_copy_color8():
  7697. +      *
  7698. +      *    Copy a color image, the source is guaranteed to consist of
  7699. +      *    one byte per colour.
  7700. +      */
  7701. + int
  7702. + amiga_copy_color8(gx_device *dev,const UBYTE *base,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h)
  7703. + {
  7704. +     if(y < 0 || x < 0 || w < 0 || h < 0)
  7705. +         return(-1);
  7706. +     else
  7707. +     {
  7708. +         if(w > 0 && h > 0)
  7709. +         {
  7710. +             base += sourcex;
  7711. +             if(w > xdev -> width)
  7712. +                 w = xdev -> width;
  7713. +             do
  7714. +             {
  7715. +                 
  7716. +                 CopyMem((UBYTE *)base,xdev -> temp_array,w);
  7717. +                 WritePixelLine8(xdev -> rport,x,y++,w,xdev -> temp_array,xdev -> temp_rport);
  7718. +                 base += raster;
  7719. +             }
  7720. +             while(--h);
  7721. +         }
  7722. +         return(0);
  7723. +     }
  7724. + }
  7725. +     /* amiga_copy_mono_raw_color():
  7726. +      *
  7727. +      *    Copy a monochrome image to a bitmap.
  7728. +      */
  7729. + int
  7730. + amiga_copy_mono_raw_color(gx_device *dev,const UBYTE *base,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h,gx_color_index zero,gx_color_index one)
  7731. + {
  7732. +     if(y < 0 || x < 0 || w < 0 || h < 0)
  7733. +         return(-1);
  7734. +     else
  7735. +     {
  7736. +         if(w > 0 && h > 0 && zero != gx_no_color_index && one != gx_no_color_index)
  7737. +         {
  7738. +             PLANEPTR line[12];
  7739. +             LONG i,j,k,modulo = xdev -> rport -> BitMap -> BytesPerRow,depth = xdev -> rport -> BitMap -> Depth;
  7740. +             for(i = 0 ; i < depth ; i++)
  7741. +                 line[i] = xdev -> rport -> BitMap -> Planes[i] + y * modulo;
  7742. +             w += sourcex;
  7743. +             if(zero == gx_no_color_index)
  7744. +             {
  7745. +                 do
  7746. +                 {
  7747. +                     for(i = sourcex, j = x ; i < w ; i++, j++)
  7748. +                     {
  7749. +                         if(base[i >> 3] & shift[i & 7])
  7750. +                         {
  7751. +                             for(k = 0 ; k < depth ; k++)
  7752. +                             {
  7753. +                                 if(one & (1 << k))
  7754. +                                     line[k][j >> 3] |= shift[j & 7];
  7755. +                                 else
  7756. +                                     line[k][j >> 3] &= masks[j & 7];
  7757. +                             }
  7758. +                         }
  7759. +                     }
  7760. +                     base += raster;
  7761. +                     for(k = 0 ; k < depth ; k++)
  7762. +                         line[k] += modulo;
  7763. +                 }
  7764. +                 while(--h);
  7765. +             }
  7766. +             else
  7767. +             {
  7768. +                 if(one == gx_no_color_index)
  7769. +                 {
  7770. +                     do
  7771. +                     {
  7772. +                         for(i = sourcex, j = x ; i < w ; i++, j++)
  7773. +                         {
  7774. +                             if(base[i >> 3] & shift[i & 7])
  7775. +                             {
  7776. +                                 for(k = 0 ; k < depth ; k++)
  7777. +                                 {
  7778. +                                     if(zero & (1 << k))
  7779. +                                         line[k][j >> 3] |= shift[j & 7];
  7780. +                                     else
  7781. +                                         line[k][j >> 3] &= masks[j & 7];
  7782. +                                 }
  7783. +                             }
  7784. +                         }
  7785. +                         base += raster;
  7786. +                         for(k = 0 ; k < depth ; k++)
  7787. +                             line[k] += modulo;
  7788. +                     }
  7789. +                     while(--h);
  7790. +                 }
  7791. +                 else
  7792. +                 {
  7793. +                     do
  7794. +                     {
  7795. +                         for(i = sourcex, j = x ; i < w ; i++, j++)
  7796. +                         {
  7797. +                             if(base[i >> 3] & shift[i & 7])
  7798. +                             {
  7799. +                                 for(k = 0 ; k < depth ; k++)
  7800. +                                 {
  7801. +                                     if(one & (1 << k))
  7802. +                                         line[k][j >> 3] |= shift[j & 7];
  7803. +                                     else
  7804. +                                         line[k][j >> 3] &= masks[j & 7];
  7805. +                                 }
  7806. +                             }
  7807. +                             else
  7808. +                             {
  7809. +                                 for(k = 0 ; k < depth ; k++)
  7810. +                                 {
  7811. +                                     if(zero & (1 << k))
  7812. +                                         line[k][j >> 3] |= shift[j & 7];
  7813. +                                     else
  7814. +                                         line[k][j >> 3] &= masks[j & 7];
  7815. +                                 }
  7816. +                             }
  7817. +                         }
  7818. +                         base += raster;
  7819. +                         for(k = 0 ; k < depth ; k++)
  7820. +                             line[k] += modulo;
  7821. +                     }
  7822. +                     while(--h);
  7823. +                 }
  7824. +             }
  7825. +         }
  7826. +         return(0);
  7827. +     }
  7828. + }
  7829. +     /* amiga_copy_color_raw_color16():
  7830. +      *
  7831. +      *    Copy a color image, the source data is guaranteed to consist
  7832. +      *    of one word per colour.
  7833. +      */
  7834. + int
  7835. + amiga_copy_color_raw_color16(gx_device *dev,const UBYTE *data,int sourcex,int raster,gx_bitmap_id id,int x,int y,int w,int h)
  7836. + {
  7837. +     if(y < 0 || x < 0 || w < 0 || h < 0)
  7838. +         return(-1);
  7839. +     else
  7840. +     {
  7841. +         if(w > 0 && h > 0)
  7842. +         {
  7843. +             PLANEPTR line[12];
  7844. +             LONG i,j,k,modulo = xdev -> rport -> BitMap -> BytesPerRow,depth = xdev -> rport -> BitMap -> Depth;
  7845. +             UWORD *base = (UWORD *)data;
  7846. +             for(i = 0 ; i < depth ; i++)
  7847. +                 line[i] = xdev -> rport -> BitMap -> Planes[i] + y * modulo;
  7848. +             w += sourcex;
  7849. +             raster /= 2;
  7850. +             do
  7851. +             {
  7852. +                 for(i = sourcex, j = x ; i < w ; i++, j++)
  7853. +                 {
  7854. +                     for(k = 0 ; k < depth ; k++)
  7855. +                     {
  7856. +                         if(base[i] & (1 << k))
  7857. +                             line[k][j >> 3] |= shift[j & 7];
  7858. +                         else
  7859. +                             line[k][j >> 3] &= masks[j & 7];
  7860. +                     }
  7861. +                 }
  7862. +                 base += raster;
  7863. +                 for(k = 0 ; k < depth ; k++)
  7864. +                     line[k] += modulo;
  7865. +             }
  7866. +             while(--h);
  7867. +         }
  7868. +         return(0);
  7869. +     }
  7870. + }
  7871. +     /* amiga_fill_rectangle_raw_color():
  7872. +      *
  7873. +      *    Fill a rectangular area in a bitmap.
  7874. +      */
  7875. + int
  7876. + amiga_fill_rectangle_raw_color(gx_device *dev,int x,int y,int w,int h,gx_color_index color)
  7877. + {
  7878. +     if(x < 0 || x > xdev -> width - w || y < 0 || y > xdev -> height - h)
  7879. +         return(-1);
  7880. +     else
  7881. +     {
  7882. +         if(w > 0 && h > 0 && color != gx_no_color_index)
  7883. +         {
  7884. +             PLANEPTR line[12];
  7885. +             LONG i,j,right,mid,modulo = xdev -> rport -> BitMap -> BytesPerRow,depth = xdev -> rport -> BitMap -> Depth;
  7886. +             for(i = 0 ; i < depth ; i++)
  7887. +                 line[i] = xdev -> rport -> BitMap -> Planes[i] + y * modulo + (x >> 3);
  7888. +             right    = x + w;
  7889. +             mid    = (right >> 3) - (x >> 3);
  7890. +             x    &= 7;
  7891. +             right    &= 7;
  7892. +             if(mid)
  7893. +             {
  7894. +                 UBYTE *ptr;
  7895. +                 do
  7896. +                 {
  7897. +                     for(j = 0 ; j < depth ; j++)
  7898. +                     {
  7899. +                         ptr = line[j];
  7900. +                         i = mid;
  7901. +                         if(color & (1 << j))
  7902. +                         {
  7903. +                             *ptr++ |= 0xFF >> x;
  7904. +                             while(--i > 0)
  7905. +                                 *ptr++ = 0xFF;
  7906. +                             *ptr |= ~(0xFF >> right);
  7907. +                         }
  7908. +                         else
  7909. +                         {
  7910. +                             *ptr++ &= ~(0xFF >> x);
  7911. +                             while(--i > 0)
  7912. +                                 *ptr++ = 0x00;
  7913. +                             *ptr &= 0xFF >> right;
  7914. +                         }
  7915. +                         line[j] += modulo;
  7916. +                     }
  7917. +                 }
  7918. +                 while(--h);
  7919. +             }
  7920. +             else
  7921. +             {
  7922. +                 UBYTE    one_mask    = (0xFF >> x) & ~(0xFF >> right),
  7923. +                     zero_mask    = ~(0xFF >> x) | (0xFF >> right);
  7924. +                 do
  7925. +                 {
  7926. +                     for(j = 0 ; j < depth ; j++)
  7927. +                     {
  7928. +                         if(color & (1 << j))
  7929. +                             *line[j] |= one_mask;
  7930. +                         else
  7931. +                             *line[j] &= zero_mask;
  7932. +                         line[j] += modulo;
  7933. +                     }
  7934. +                 }
  7935. +                 while(--h);
  7936. +             }
  7937. +         }
  7938. +         return(0);
  7939. +     }
  7940. + }
  7941. +     /* amiga_draw_line_raw_color():
  7942. +      *
  7943. +      *    Draw a hair line, your basic DDA algorithm;
  7944. +      *    keep your fingers crossed.
  7945. +      */
  7946. + int
  7947. + amiga_draw_line_raw_color(gx_device *dev,int x,int y,int x1,int y1,gx_color_index color)
  7948. + {
  7949. +     if(color != gx_no_color_index && (x != x1 || y != y1))
  7950. +     {
  7951. +         LONG xstep,ystep,dx,dy,diff,modulo;
  7952. +         UBYTE *line,*plane,pen;
  7953. +         LONG last,i,orig_x = x,orig_y = y;
  7954. +         modulo = xdev -> rport -> BitMap -> BytesPerRow;
  7955. +         for(i = 0 ; i < xdev -> rport -> BitMap -> Depth ; i++)
  7956. +         {
  7957. +             plane    = xdev -> rport -> BitMap -> Planes[i];
  7958. +             line    = &plane[y1 * modulo];
  7959. +             last    = y1;
  7960. +             pen    = line[x1 >> 3] & (x1 & 7);
  7961. +             x    = orig_x;
  7962. +             y    = orig_y;
  7963. +             dx = x1 - x;
  7964. +             dy = y1 - y;
  7965. +             if(dx < 0)
  7966. +             {
  7967. +                 dx = -dx;
  7968. +                 dy = -dy;
  7969. +                 x = x1;
  7970. +                 y = y1;
  7971. +             }
  7972. +             if(y != last)
  7973. +                 line = &plane[(last = y) * modulo];
  7974. +             if(color & (1 << i))
  7975. +             {
  7976. +                 line[x >> 3] |= shift[x & 7];
  7977. +                 xstep = ystep = 0;
  7978. +                 if(dy < 0)
  7979. +                 {
  7980. +                     if(dx > -dy)
  7981. +                     {
  7982. +                         diff = -dx / 2;
  7983. +                         do
  7984. +                         {
  7985. +                             xstep++;
  7986. +                             if(diff > 0)
  7987. +                             {
  7988. +                                 ystep--;
  7989. +                                 diff = diff - dy - dx;
  7990. +                             }
  7991. +                             else
  7992. +                                 diff -= dy;
  7993. +                             {
  7994. +                                 LONG x1 = x + xstep,y1 = y + ystep;
  7995. +                                 if(y1 != last)
  7996. +                                     line = &plane[(last = y1) * modulo];
  7997. +                                 line[x1 >> 3] |= shift[x1 & 7];
  7998. +                             }
  7999. +                         }
  8000. +                         while(xstep < dx);
  8001. +                     }
  8002. +                     else
  8003. +                     {
  8004. +                         if(dx == -dy)
  8005. +                             diff = 0;
  8006. +                         else
  8007. +                             diff = -dy / 2;
  8008. +                         do
  8009. +                         {
  8010. +                             ystep--;
  8011. +                             if(diff > 0)
  8012. +                                 diff -= dx;
  8013. +                             else
  8014. +                             {
  8015. +                                 xstep++;
  8016. +                                 diff = diff - dy - dx;
  8017. +                             }
  8018. +                             {
  8019. +                                 LONG x1 = x + xstep,y1 = y + ystep;
  8020. +                                 if(y1 != last)
  8021. +                                     line = &plane[(last = y1) * modulo];
  8022. +                                 line[x1 >> 3] |= shift[x1 & 7];
  8023. +                             }
  8024. +                         }
  8025. +                         while(ystep > dy);
  8026. +                     }
  8027. +                 }
  8028. +                 else
  8029. +                 {
  8030. +                     if(dx > dy)
  8031. +                     {
  8032. +                         diff = -dx / 2;
  8033. +                         do
  8034. +                         {
  8035. +                             xstep++;
  8036. +                             if(diff > 0)
  8037. +                             {
  8038. +                                 ystep++;
  8039. +                                 diff = diff + dy - dx;
  8040. +                             }
  8041. +                             else
  8042. +                                 diff += dy;
  8043. +                             {
  8044. +                                 LONG x1 = x + xstep,y1 = y + ystep;
  8045. +                                 if(y1 != last)
  8046. +                                     line = &plane[(last = y1) * modulo];
  8047. +                                 line[x1 >> 3] |= shift[x1 & 7];
  8048. +                             }
  8049. +                         }
  8050. +                         while(xstep < dx);
  8051. +                     }
  8052. +                     else
  8053. +                     {
  8054. +                         if(dx == dy)
  8055. +                             diff = 0;
  8056. +                         else
  8057. +                             diff = dy / 2;
  8058. +                         do
  8059. +                         {
  8060. +                             ystep++;
  8061. +                             if(diff > 0)
  8062. +                                 diff -= dx;
  8063. +                             else
  8064. +                             {
  8065. +                                 xstep++;
  8066. +                                 diff = diff + dy - dx;
  8067. +                             }
  8068. +                             {
  8069. +                                 LONG x1 = x + xstep,y1 = y + ystep;
  8070. +                                 if(y1 != last)
  8071. +                                     line = &plane[(last = y1) * modulo];
  8072. +                                 line[x1 >> 3] |= shift[x1 & 7];
  8073. +                             }
  8074. +                         }
  8075. +                         while(ystep < dy);
  8076. +                     }
  8077. +                 }
  8078. +                 if(!pen)
  8079. +                 {
  8080. +                     if(y1 != last)
  8081. +                         line = &plane[(last = y1) * modulo];
  8082. +                     line[x1 >> 3] &= masks[x1 & 7];
  8083. +                 }
  8084. +             }
  8085. +             else
  8086. +             {
  8087. +                 line[x >> 3] &= masks[x & 7];
  8088. +                 xstep = ystep = 0;
  8089. +                 if(dy < 0)
  8090. +                 {
  8091. +                     if(dx > -dy)
  8092. +                     {
  8093. +                         diff = -dx / 2;
  8094. +                         do
  8095. +                         {
  8096. +                             xstep++;
  8097. +                             if(diff > 0)
  8098. +                             {
  8099. +                                 ystep--;
  8100. +                                 diff = diff - dy - dx;
  8101. +                             }
  8102. +                             else
  8103. +                                 diff -= dy;
  8104. +                             {
  8105. +                                 LONG x1 = x + xstep,y1 = y + ystep;
  8106. +                                 if(y1 != last)
  8107. +                                     line = &plane[(last = y1) * modulo];
  8108. +                                 line[x1 >> 3] &= masks[x1 & 7];
  8109. +                             }
  8110. +                         }
  8111. +                         while(xstep < dx);
  8112. +                     }
  8113. +                     else
  8114. +                     {
  8115. +                         if(dx == -dy)
  8116. +                             diff = 0;
  8117. +                         else
  8118. +                             diff = -dy / 2;
  8119. +                         do
  8120. +                         {
  8121. +                             ystep--;
  8122. +                             if(diff > 0)
  8123. +                                 diff -= dx;
  8124. +                             else
  8125. +                             {
  8126. +                                 xstep++;
  8127. +                                 diff = diff - dy - dx;
  8128. +                             }
  8129. +                             {
  8130. +                                 LONG x1 = x + xstep,y1 = y + ystep;
  8131. +                                 if(y1 != last)
  8132. +                                     line = &plane[(last = y1) * modulo];
  8133. +                                 line[x1 >> 3] &= masks[x1 & 7];
  8134. +                             }
  8135. +                         }
  8136. +                         while(ystep > dy);
  8137. +                     }
  8138. +                 }
  8139. +                 else
  8140. +                 {
  8141. +                     if(dx > dy)
  8142. +                     {
  8143. +                         diff = -dx / 2;
  8144. +                         do
  8145. +                         {
  8146. +                             xstep++;
  8147. +                             if(diff > 0)
  8148. +                             {
  8149. +                                 ystep++;
  8150. +                                 diff = diff + dy - dx;
  8151. +                             }
  8152. +                             else
  8153. +                                 diff += dy;
  8154. +                             {
  8155. +                                 LONG x1 = x + xstep,y1 = y + ystep;
  8156. +                                 if(y1 != last)
  8157. +                                     line = &plane[(last = y1) * modulo];
  8158. +                                 line[x1 >> 3] &= masks[x1 & 7];
  8159. +                             }
  8160. +                         }
  8161. +                         while(xstep < dx);
  8162. +                     }
  8163. +                     else
  8164. +                     {
  8165. +                         if(dx == dy)
  8166. +                             diff = 0;
  8167. +                         else
  8168. +                             diff =  dy / 2;
  8169. +                         do
  8170. +                         {
  8171. +                             ystep++;
  8172. +                             if(diff > 0)
  8173. +                                 diff -= dx;
  8174. +                             else
  8175. +                             {
  8176. +                                 xstep++;
  8177. +                                 diff = diff + dy - dx;
  8178. +                             }
  8179. +                             {
  8180. +                                 LONG x1 = x + xstep,y1 = y + ystep;
  8181. +                                 if(y1 != last)
  8182. +                                     line = &plane[(last = y1) * modulo];
  8183. +                                 line[x1 >> 3] &= masks[x1 & 7];
  8184. +                             }
  8185. +                         }
  8186. +                         while(ystep < dy);
  8187. +                     }
  8188. +                 }
  8189. +                 if(pen)
  8190. +                 {
  8191. +                     if(y1 != last)
  8192. +                         line = &plane[(last = y1) * modulo];
  8193. +                     line[x1 >> 3] |= pen;
  8194. +                 }
  8195. +             }
  8196. +         }
  8197. +     }
  8198. +     return(0);
  8199. + }
  8200. diff -rc --new-file /src/baseline/gs-2.6.1.4/gp_amiga.c gs-2.6.1.4/gp_amiga.c
  8201. *** /src/baseline/gs-2.6.1.4/gp_amiga.c    Thu Jan  1 00:00:00 1970
  8202. --- gs-2.6.1.4/gp_amiga.c    Sat Jan 29 15:11:38 1994
  8203. ***************
  8204. *** 0 ****
  8205. --- 1,346 ----
  8206. + /* Copyright (C) 1989, 1990, 1991 Aladdin Enterprises.  All rights reserved.
  8207. +    Distributed by Free Software Foundation, Inc.
  8208. + This file is part of Ghostscript.
  8209. + Ghostscript is distributed in the hope that it will be useful, but
  8210. + WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
  8211. + to anyone for the consequences of using it or for whether it serves any
  8212. + particular purpose or works at all, unless he says so in writing.  Refer
  8213. + to the Ghostscript General Public License for full details.
  8214. + Everyone is granted permission to copy, modify and redistribute
  8215. + Ghostscript, but only under the conditions described in the Ghostscript
  8216. + General Public License.  A copy of this license is supposed to have been
  8217. + given to you along with Ghostscript so you can know your rights and
  8218. + responsibilities.  It should be in a file named COPYING.  Among other
  8219. + things, the copyright notice and this notice must be preserved on all
  8220. + copies.  */
  8221. + /* gp_amiga.c */
  8222. + /* Amiga specific routines for Ghostscript */
  8223. + #define timeval foo1
  8224. + #define ushort foo2
  8225. + #include <intuition/intuitionbase.h>
  8226. + #include <graphics/gfxbase.h>
  8227. + #include <dos/dosextens.h>
  8228. + #include <clib/exec_protos.h>
  8229. + #include <clib/dos_protos.h>
  8230. + /*
  8231. + #include <inline/exec.h>
  8232. + #include <inline/dos.h>
  8233. + */
  8234. + #include <signal.h>
  8235. + #undef ushort
  8236. + #undef timeval
  8237. + /* gp_amiga.c */
  8238. + /* Amiga-specific routines for Ghostscript */
  8239. + #include "memory_.h"
  8240. + #include "string_.h"
  8241. + #include "gx.h"
  8242. + #include "gp.h"
  8243. + #include "stat_.h"
  8244. + #include "time_.h"
  8245. + struct IntuitionBase    *IntuitionBase;
  8246. + struct GfxBase        *GfxBase;
  8247. + struct Library        *LayersBase,
  8248. +             *IFFParseBase,
  8249. +             *AslBase,
  8250. +             *UtilityBase;
  8251. + /* Nothing happens here */
  8252. + void
  8253. + gs_amiga_init()
  8254. + {
  8255. + }
  8256. + void
  8257. + gp_exit(int exit_status, int code)
  8258. + {
  8259. + }
  8260. + /* Cleanup routine, as called by atexit() trap */
  8261. + void
  8262. + cleanup()
  8263. + {
  8264. +     extern void devcleanup();
  8265. +     devcleanup();
  8266. +     if(IFFParseBase)
  8267. +     {
  8268. +         CloseLibrary(IFFParseBase);
  8269. +         IFFParseBase = NULL;
  8270. +     }
  8271. +     if(AslBase)
  8272. +     {
  8273. +         CloseLibrary(AslBase);
  8274. +         AslBase = NULL;
  8275. +     }
  8276. +     if(UtilityBase)
  8277. +     {
  8278. +         CloseLibrary(UtilityBase);
  8279. +         UtilityBase = NULL;
  8280. +     }
  8281. +     if(LayersBase)
  8282. +     {
  8283. +         CloseLibrary(LayersBase);
  8284. +         LayersBase = NULL;
  8285. +     }
  8286. +     if(GfxBase)
  8287. +     {
  8288. +         CloseLibrary((struct Library *)GfxBase);
  8289. +         GfxBase = NULL;
  8290. +     }
  8291. +     if(IntuitionBase)
  8292. +     {
  8293. +         CloseLibrary((struct Library *)IntuitionBase);
  8294. +         IntuitionBase = NULL;
  8295. +     }
  8296. + }
  8297. + void
  8298. + signal_handler(int signal)
  8299. + {
  8300. +     fprintf(stderr,"*** BREAK: Ghostscript\a\n");
  8301. +     exit(1);
  8302. + }
  8303. + /* Do platform-dependent initialization */
  8304. + void
  8305. + gp_init()
  8306. + {
  8307. +     atexit(cleanup);
  8308. +     signal(SIGINT,signal_handler);
  8309. +     if(!(IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",37)))
  8310. +     {
  8311. +         perror("Ghostscript: cannot open intuition.library v37");
  8312. +         exit(20);
  8313. +     }
  8314. +     if(!(GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",37)))
  8315. +     {
  8316. +         perror("Ghostscript: cannot open graphics.library v37");
  8317. +         exit(20);
  8318. +     }
  8319. +     if(!(LayersBase = OpenLibrary("layers.library",37)))
  8320. +     {
  8321. +         perror("Ghostscript: cannot open layers.library v37");
  8322. +         exit(20);
  8323. +     }
  8324. +     if(!(UtilityBase = OpenLibrary("utility.library",37)))
  8325. +     {
  8326. +         perror("Ghostscript: cannot open utility.library v37");
  8327. +         exit(20);
  8328. +     }
  8329. +     if(!(IFFParseBase = OpenLibrary("iffparse.library",37)))
  8330. +     {
  8331. +         perror("Ghostscript: cannot open iffparse.library v37");
  8332. +         exit(20);
  8333. +     }
  8334. +     AslBase = OpenLibrary("asl.library",38);
  8335. + }
  8336. + /* Read the current date (in days since Jan. 1, 1980) */
  8337. + /* and time (in milliseconds since midnight). */
  8338. + void
  8339. + gp_get_clock(long *pdt)
  8340. + {
  8341. +     struct DateStamp Date;
  8342. +     DateStamp(&Date);
  8343. +     pdt[0] = Date . ds_Days + 2 * 365;
  8344. +     pdt[1] = (Date . ds_Minute * 60 + Date . ds_Tick / TICKS_PER_SECOND) * 1000;
  8345. + }
  8346. + /* ------ Printer accessing ------ */
  8347. + /* Open a connection to a printer.  A null file name means use the */
  8348. + /* standard printer connected to the machine, if any. */
  8349. + /* "|command" opens an output pipe. */
  8350. + /* Return NULL if the connection could not be opened. */
  8351. + FILE *
  8352. + gp_open_printer(char *fname, int binary_mode)
  8353. + {    return
  8354. +       (strlen(fname) == 0 ?
  8355. +        gp_open_scratch_file(gp_scratch_file_name_prefix, fname, "w") :
  8356. +        fname[0] == '|' ?
  8357. +        popen(fname + 1, "w") :
  8358. +        fopen(fname, "w"));
  8359. + }
  8360. + /* Close the connection to the printer. */
  8361. + void
  8362. + gp_close_printer(FILE *pfile, const char *fname)
  8363. + {    if ( fname[0] == '|' )
  8364. +         pclose(pfile);
  8365. +     else
  8366. +         fclose(pfile);
  8367. + }
  8368. + /* ------ File name syntax ------ */
  8369. + /* Define the character used for separating file names in a list. */
  8370. + const char gp_file_name_list_separator = ',';
  8371. + /* Define the default scratch file name template. */
  8372. + const char gp_scratch_file_name_prefix[] = "T:gs_";
  8373. + /* Define the string to be concatenated with the file mode */
  8374. + /* for opening files without end-of-line conversion. */
  8375. + const char gp_fmode_binary_suffix[] = "b";
  8376. + /* Define the file modes for binary reading or writing. */
  8377. + const char gp_fmode_rb[] = "r";
  8378. + const char gp_fmode_wb[] = "w";
  8379. + /* Create and open a scratch file with a given name prefix. */
  8380. + /* Write the actual file name at fname. */
  8381. + FILE *
  8382. + gp_open_scratch_file(const char *prefix, char *fname, const char *mode)
  8383. + {
  8384. +     strcpy(fname,prefix);
  8385. +     /* Prevent trailing X's in path from being converted by mktemp. */
  8386. +     if ( *fname != 0 && fname[strlen(fname) - 1] == 'X' )
  8387. +         strcat(fname, "-");
  8388. +     strcat(fname, "XXXXXX");
  8389. +     mktemp(fname);
  8390. +     return fopen(fname, mode);
  8391. + }
  8392. + /* Answer whether a file name contains a directory/device specification, */
  8393. + /* i.e. is absolute (not directory- or device-relative). */
  8394. + int
  8395. + gp_file_name_is_absolute(const char *fname, uint len)
  8396. + {
  8397. +     int i;
  8398. +     for(i = 0 ; i < len ; i++)
  8399. +     {
  8400. +         if(fname[i] == ':')
  8401. +             return(1);
  8402. +     }
  8403. +     return(0);
  8404. + }
  8405. + /* Answer the string to be used for combining a directory/device prefix */
  8406. + /* with a base file name.  The file name is known to not be absolute. */
  8407. + const char *
  8408. + gp_file_name_concat_string(const char *prefix, uint plen, const char *fname, uint len)
  8409. + {
  8410. +     if(plen > 0 && (prefix[plen - 1] == '/' || prefix[plen - 1] == ':'))
  8411. +         return("");
  8412. +     else
  8413. +         return("/");
  8414. + }
  8415. + /* ------ File operations ------ */
  8416. + /* If the file given by fname exists, fill in its status and return 1; */
  8417. + /* otherwise return 0. */
  8418. + int
  8419. + gp_file_status(const char *fname, file_status *pstatus)
  8420. + {    struct stat sbuf;
  8421. +     /* The RS/6000 prototype for stat doesn't include const, */
  8422. +     /* so we have to explicitly remove the const modifier. */
  8423. +     if ( stat((char *)fname, &sbuf) < 0 ) return 0;
  8424. +     pstatus->size_pages = stat_blocks(&sbuf);    /* st_blocks is */
  8425. +                     /* missing on some systems, */
  8426. +                     /* see stat_.h */
  8427. +     pstatus->size_bytes = sbuf.st_size;
  8428. +     pstatus->time_referenced = sbuf.st_mtime;
  8429. +     pstatus->time_created = sbuf.st_ctime;
  8430. +     return 1;
  8431. + }
  8432. + /* ------ File enumeration ------ */
  8433. + /****** THIS IS NOT SUPPORTED ON UNIX SYSTEMS. ******/
  8434. + /* Amazingly enough, there is no standard Unix library routine */
  8435. + /* for enumerating the files matching a pattern, */
  8436. + /* or even for enumerating (conveniently) the files in a directory. */
  8437. + struct file_enum_s {
  8438. +     char *pattern;
  8439. +     int first_time;
  8440. +     const gs_memory_procs *mprocs;
  8441. + };
  8442. + /* Initialize an enumeration.  NEEDS WORK ON HANDLING * ? \. */
  8443. + file_enum *
  8444. + gp_enumerate_files_init(const char *pat, uint patlen,
  8445. +   const gs_memory_procs *mprocs)
  8446. + {    file_enum *pfen = (file_enum *)(*mprocs->alloc)(1, sizeof(file_enum), "gp_enumerate_files");
  8447. +     char *pattern;
  8448. +     if ( pfen == 0 ) return 0;
  8449. +     pattern = (*mprocs->alloc)(patlen + 1, 1,
  8450. +                 "gp_enumerate_files(pattern)");
  8451. +     if ( pattern == 0 ) return 0;
  8452. +     memcpy(pattern, pat, patlen);
  8453. +     pattern[patlen] = 0;
  8454. +     pfen->pattern = pattern;
  8455. +     pfen->mprocs = mprocs;
  8456. +     pfen->first_time = 1;
  8457. +     return pfen;
  8458. + }
  8459. + /* Enumerate the next file. */
  8460. + /* PUNT: JUST RETURN THE PATTERN. */
  8461. + uint
  8462. + gp_enumerate_files_next(file_enum *pfen, char *ptr, uint maxlen)
  8463. + {    if ( pfen->first_time )
  8464. +     {    char *pattern = pfen->pattern;
  8465. +         uint len = strlen(pattern);
  8466. +         pfen->first_time = 0;
  8467. +         if ( len > maxlen )
  8468. +             return maxlen + 1;
  8469. +         strcpy(ptr, pattern);
  8470. +         return len;
  8471. +     }
  8472. +     return -1;
  8473. + }
  8474. + /* Clean up the file enumeration. */
  8475. + void
  8476. + gp_enumerate_files_close(file_enum *pfen)
  8477. + {    const gs_memory_procs *mprocs = pfen->mprocs;
  8478. +     (*mprocs->free)(pfen->pattern, strlen(pfen->pattern) + 1, 1,
  8479. +             "gp_enumerate_files_close(pattern)");
  8480. +     (*mprocs->free)((char *)pfen, 1, sizeof(file_enum),
  8481. +             "gp_enumerate_files_close");
  8482. + }
  8483. diff -rc --new-file /src/baseline/gs-2.6.1.4/gs.1 gs-2.6.1.4/gs.1
  8484. *** /src/baseline/gs-2.6.1.4/gs.1    Wed May 19 06:41:20 1993
  8485. --- gs-2.6.1.4/gs.1    Tue Feb 22 13:49:34 1994
  8486. ***************
  8487. *** 154,160 ****
  8488.   3.
  8489.   The directory/ies specified by the GS_LIB_DEFAULT macro in the
  8490.   Ghostscript makefile (which has been set to
  8491. ! "/usr/local/lib/ghostscript:/usr/local/lib/ghostscript/fonts").
  8492.   .PP
  8493.   Each of these (GS_LIB_DEFAULT, GS_LIB, and \-I parameter) may be either
  8494.   a single directory, or a list of directories separated by a `:'.
  8495. --- 154,160 ----
  8496.   3.
  8497.   The directory/ies specified by the GS_LIB_DEFAULT macro in the
  8498.   Ghostscript makefile (which has been set to
  8499. ! "/gnu/lib/ghostscript:/gnu/lib/ghostscript/fonts").
  8500.   .PP
  8501.   Each of these (GS_LIB_DEFAULT, GS_LIB, and \-I parameter) may be either
  8502.   a single directory, or a list of directories separated by a `:'.
  8503. ***************
  8504. *** 320,335 ****
  8505.   device, as described above.
  8506.   .SH FILES
  8507.   .TP 
  8508. ! .B /usr/local/lib/ghostscript/*
  8509.   Startup-files, utilities, and basic font definitions.
  8510.   .TP 
  8511. ! .B /usr/local/lib/ghostscript/fonts/*
  8512.   Additional font definitions.
  8513.   .TP
  8514. ! .B /usr/local/lib/ghostscript/examples/*
  8515.   Demo Ghostscript files.
  8516.   .TP
  8517. ! .B /usr/local/lib/doc/ghostscript/doc/*
  8518.   Assorted document files.
  8519.   .SH "SEE ALSO"
  8520.   The various Ghostscript document files (above).
  8521. --- 320,335 ----
  8522.   device, as described above.
  8523.   .SH FILES
  8524.   .TP 
  8525. ! .B /gnu/lib/ghostscript/*
  8526.   Startup-files, utilities, and basic font definitions.
  8527.   .TP 
  8528. ! .B /gnu/lib/ghostscript/fonts/*
  8529.   Additional font definitions.
  8530.   .TP
  8531. ! .B /gnu/lib/ghostscript/examples/*
  8532.   Demo Ghostscript files.
  8533.   .TP
  8534. ! .B /gnu/lib/doc/ghostscript/doc/*
  8535.   Assorted document files.
  8536.   .SH "SEE ALSO"
  8537.   The various Ghostscript document files (above).
  8538. diff -rc --new-file /src/baseline/gs-2.6.1.4/gsaddmod gs-2.6.1.4/gsaddmod
  8539. *** /src/baseline/gs-2.6.1.4/gsaddmod    Sun May 16 02:55:00 1993
  8540. --- gs-2.6.1.4/gsaddmod    Sun Jan 30 12:28:23 1994
  8541. ***************
  8542. *** 1,3 ****
  8543.   export m; m=$1
  8544.   shift
  8545. ! echo $* >>${m}.dev
  8546. --- 1,4 ----
  8547.   export m; m=$1
  8548.   shift
  8549. ! # The builtin echo in pdksh is not up to this task.
  8550. ! /bin/echo $* >>${m}.dev
  8551. diff -rc --new-file /src/baseline/gs-2.6.1.4/gsnd gs-2.6.1.4/gsnd
  8552. *** /src/baseline/gs-2.6.1.4/gsnd    Mon Feb  8 05:50:18 1993
  8553. --- gs-2.6.1.4/gsnd    Thu Jan 27 21:39:59 1994
  8554. ***************
  8555. *** 1 ****
  8556. ! gs -DNODISPLAY $*
  8557. --- 1,4 ----
  8558. ! .key ARGS/F
  8559. ! .bra {
  8560. ! .ket }
  8561. ! gs -DNODISPLAY {ARGS}
  8562. diff -rc --new-file /src/baseline/gs-2.6.1.4/gssetdev gs-2.6.1.4/gssetdev
  8563. *** /src/baseline/gs-2.6.1.4/gssetdev    Sun May 16 02:56:28 1993
  8564. --- gs-2.6.1.4/gssetdev    Sun Jan 30 12:28:27 1994
  8565. ***************
  8566. *** 1,3 ****
  8567.   export m; m=$1
  8568.   shift
  8569. ! echo -dev ${m} -obj $* >${m}.dev
  8570. --- 1,4 ----
  8571.   export m; m=$1
  8572.   shift
  8573. ! # The builtin echo in pdksh is not up to this task.
  8574. ! /bin/echo -dev ${m} -obj $* >${m}.dev
  8575. diff -rc --new-file /src/baseline/gs-2.6.1.4/gssetmod gs-2.6.1.4/gssetmod
  8576. *** /src/baseline/gs-2.6.1.4/gssetmod    Sun May 16 02:56:14 1993
  8577. --- gs-2.6.1.4/gssetmod    Sun Jan 30 12:28:32 1994
  8578. ***************
  8579. *** 1,3 ****
  8580.   export m; m=$1
  8581.   shift
  8582. ! echo -obj $* >${m}.dev
  8583. --- 1,4 ----
  8584.   export m; m=$1
  8585.   shift
  8586. ! # The builtin echo in pdksh is not up to this task.
  8587. ! /bin/echo -obj $* >${m}.dev
  8588. diff -rc --new-file /src/baseline/gs-2.6.1.4/make.doc gs-2.6.1.4/make.doc
  8589. *** /src/baseline/gs-2.6.1.4/make.doc    Fri May 28 18:57:00 1993
  8590. --- gs-2.6.1.4/make.doc    Tue Feb 22 13:50:59 1994
  8591. ***************
  8592. *** 82,88 ****
  8593.   follows:
  8594.   
  8595.       - GS_LIB_DEFAULT: on Unix systems, /usr/local/lib/ghostscript
  8596. ! and /usr/local/lib/ghostscript/fonts; on MS-DOS systems, C:\GS.
  8597.   
  8598.       - TDEBUG: no debugging code included in the build.
  8599.   
  8600. --- 82,89 ----
  8601.   follows:
  8602.   
  8603.       - GS_LIB_DEFAULT: on Unix systems, /usr/local/lib/ghostscript
  8604. ! and /usr/local/lib/ghostscript/fonts; on MS-DOS systems, C:\GS; on AmigaDOS
  8605. ! systems, /gnu (aka gnu:)
  8606.   
  8607.       - TDEBUG: no debugging code included in the build.
  8608.   
  8609. diff -rc --new-file /src/baseline/gs-2.6.1.4/ps2ascii gs-2.6.1.4/ps2ascii
  8610. *** /src/baseline/gs-2.6.1.4/ps2ascii    Tue Jul 12 00:42:24 1994
  8611. --- gs-2.6.1.4/ps2ascii    Thu Jan 27 21:41:23 1994
  8612. ***************
  8613. *** 1,13 ****
  8614. ! #!/bin/sh -f
  8615. ! # Extract ASCII text from a PostScript file.  Usage:
  8616. ! #    ps2ascii [infile.ps [outfile.txt]]
  8617. ! # If outfile is omitted, output goes to stdout.
  8618. ! # If both infile and outfile are omitted, ps2ascii acts as a filter,
  8619. ! # reading from stdin and writing on stdout.
  8620. ! if ( test $# -eq 0 ) then
  8621. !     gs -q -dNODISPLAY -dNOBIND -dWRITESYSTEMDICT -dSIMPLE ps2ascii.ps - quit.ps
  8622. ! elif ( test $# -eq 1 ) then
  8623. !     gs -q -dNODISPLAY -dNOBIND -dWRITESYSTEMDICT -dSIMPLE ps2ascii.ps $1 quit.ps
  8624. ! else
  8625. !     gs -q -dNODISPLAY -dNOBIND -dWRITESYSTEMDICT -dSIMPLE ps2ascii.ps $1 quit.ps >$2
  8626. ! fi
  8627. --- 1,4 ----
  8628. ! .key IN/A,OUT/A
  8629. ! .bra {
  8630. ! .ket }
  8631. ! gs -q -dNODISPLAY -dNOBIND -dWRITESYSTEMDICT -dSIMPLE gs_2asc.ps {IN} quit.ps >{OUT}
  8632. diff -rc --new-file /src/baseline/gs-2.6.1.4/ps2epsi gs-2.6.1.4/ps2epsi
  8633. *** /src/baseline/gs-2.6.1.4/ps2epsi    Fri May  7 14:39:56 1993
  8634. --- gs-2.6.1.4/ps2epsi    Thu Jan 27 21:41:46 1994
  8635. ***************
  8636. *** 1,52 ****
  8637. ! #!/bin/sh
  8638.   
  8639. ! LOCALPATH=/usr/local/bin
  8640. ! PATH=/bin:/usr/bin:/usr/ucb\:$LOCALPATH\
  8641.   
  8642. ! export PATH outfile
  8643.   
  8644. ! if [ $# -lt 1 -o $# -gt 2 ]; then
  8645. !     echo "Usage: pstoepsi file.ps [file.epsi]" 1>&2
  8646. !     exit 1
  8647. ! fi
  8648.   
  8649. ! infile=$1
  8650. ! if [ $# -eq 1 ]
  8651. ! then
  8652. !     case "${infile}" in
  8653. !       *.ps)        base=`basename ${infile} .ps` ;;
  8654. !       *.cps)    base=`basename ${infile} .cps` ;;
  8655. !       *.eps)    base=`basename ${infile} .eps` ;;
  8656. !       *.epsf)    base=`basename ${infile} .epsf` ;;
  8657. !       *)        base=`basename ${infile}` ;;
  8658. !     esac
  8659. !     outfile=${base}.epsi
  8660. ! else
  8661. !     outfile=$2
  8662. ! fi
  8663. ! gs -q -dNOPAUSE -dNODISPLAY ps2epsi.ps < ${infile} 1>&2
  8664. ! (
  8665. ! cat << BEGINEPS
  8666. ! /InitDictCount countdictstack def
  8667. ! gsave
  8668. ! save
  8669. ! mark
  8670. ! newpath
  8671. ! /showpage {} def
  8672. ! BEGINEPS
  8673. ! cat ${infile}
  8674. ! cat << ENDEPS
  8675. ! countdictstack InitDictCount sub { end } repeat
  8676. ! cleartomark
  8677. ! restore
  8678. ! grestore
  8679. ! ENDEPS
  8680. ! ) >> ${outfile}
  8681. ! exit 0
  8682. --- 1,12 ----
  8683. ! .key IN/A,OUT/A
  8684. ! .bra [
  8685. ! .ket ]
  8686.   
  8687. ! gs -q -dNOPAUSE -dNODISPLAY ps2epsi.ps < [IN]
  8688.   
  8689. ! Echo "/InitDictCount countdictstack def gsave save mark newpath" >> [OUT]
  8690.   
  8691. ! type [OUT] >> [IN]
  8692.   
  8693. ! Echo "countdictstack InitDictCount sub { end } repeat" >> [OUT]
  8694. ! Echo "cleartomark restore grestore" >> [OUT]
  8695. diff -rc --new-file /src/baseline/gs-2.6.1.4/use.doc gs-2.6.1.4/use.doc
  8696. *** /src/baseline/gs-2.6.1.4/use.doc    Tue Jul 12 00:43:21 1994
  8697. --- gs-2.6.1.4/use.doc    Tue Feb 22 13:51:42 1994
  8698. ***************
  8699. *** 106,114 ****
  8700.   
  8701.   Installing Ghostscript on a Unix system requires compiling it first.
  8702.   The name of the executable is gs.  The makefile installs all the
  8703. ! files, except the fonts, in /usr/local or various subdirectories
  8704.   thereof.  The fonts should be installed in
  8705. ! /usr/local/lib/ghostscript/fonts.  Consult the makefile for more
  8706.   details.
  8707.   
  8708.   ********
  8709. --- 106,114 ----
  8710.   
  8711.   Installing Ghostscript on a Unix system requires compiling it first.
  8712.   The name of the executable is gs.  The makefile installs all the
  8713. ! files, except the fonts, in /gnu or various subdirectories
  8714.   thereof.  The fonts should be installed in
  8715. ! /gnu/lib/ghostscript/fonts.  Consult the makefile for more
  8716.   details.
  8717.   
  8718.   ********
  8719.