home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-02-22 | 230.9 KB | 8,521 lines |
- diff -rc --new-file ghostscript-2.6.1-fsf/NEWS ghostscript-2.6.1-amiga/NEWS
- *** ghostscript-2.6.1-fsf/NEWS Sat May 29 07:40:14 1993
- --- ghostscript-2.6.1-amiga/NEWS Tue Feb 22 13:48:22 1994
- ***************
- *** 1062,1068 ****
-
- For Unix systems, changes the directories in GS_LIB_DEFAULT from
- `pwd` to $(gsdatadir), i.e., normally $(datadir)/ghostscript, where
- ! datadir is normally /usr/local/lib.
-
- Adds a note in the header file to the effect that the X Windows
- driver expects to find header files in $(XINCLUDE)/X11, not in
- --- 1062,1068 ----
-
- For Unix systems, changes the directories in GS_LIB_DEFAULT from
- `pwd` to $(gsdatadir), i.e., normally $(datadir)/ghostscript, where
- ! datadir is normally /gnu/lib.
-
- Adds a note in the header file to the effect that the X Windows
- driver expects to find header files in $(XINCLUDE)/X11, not in
- diff -rc --new-file ghostscript-2.6.1-fsf/amiga-gcc.mak ghostscript-2.6.1-amiga/amiga-gcc.mak
- *** ghostscript-2.6.1-fsf/amiga-gcc.mak Thu Jan 1 00:00:00 1970
- --- ghostscript-2.6.1-amiga/amiga-gcc.mak Tue Feb 22 14:57:45 1994
- ***************
- *** 0 ****
- --- 1,2010 ----
- + # Copyright (C) 1989, 1992, 1993 Aladdin Enterprises. All rights reserved.
- + #
- + # This file is part of Ghostscript.
- + #
- + # Ghostscript is distributed in the hope that it will be useful, but
- + # WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
- + # to anyone for the consequences of using it or for whether it serves any
- + # particular purpose or works at all, unless he says so in writing. Refer
- + # to the Ghostscript General Public License for full details.
- + #
- + # Everyone is granted permission to copy, modify and redistribute
- + # Ghostscript, but only under the conditions described in the Ghostscript
- + # General Public License. A copy of this license is supposed to have been
- + # given to you along with Ghostscript so you can know your rights and
- + # responsibilities. It should be in a file named COPYING. Among other
- + # things, the copyright notice and this notice must be preserved on all
- + # copies.
- +
- + # makefile for Ghostscript, Unix/gcc/X11 configuration.
- + # Note: this makefile assumes you are using gcc in ANSI mode.
- +
- + # ------------------------------- Options ------------------------------- #
- +
- + ####### The following are the only parts of the file you should need to edit.
- +
- + # ------ Generic options ------ #
- +
- + # Define the installation commands and target directories for
- + # executables and files. Only relevant to `make install'.
- +
- + INSTALL = install -c
- + INSTALL_PROGRAM = $(INSTALL) -m 775
- + INSTALL_DATA = $(INSTALL) -m 664
- +
- + prefix = /gnu
- + exec_prefix = $(prefix)
- + bindir = $(exec_prefix)/bin
- + datadir = $(prefix)/lib
- + gsdatadir = $(datadir)/ghostscript
- +
- + # Define the default directory/ies for the runtime
- + # initialization and font files. Separate multiple directories with a ','.
- +
- + GS_LIB_DEFAULT=$(gsdatadir),$(gsdatadir)/fonts
- +
- + # Define the name of the Ghostscript initialization file.
- + # (There is no reason to change this.)
- +
- + GS_INIT=gs_init.ps
- +
- + # Choose generic configuration options.
- +
- + # -DDEBUG
- + # includes debugging features (-Z switch) in the code.
- + # Code runs substantially slower even if no debugging switches
- + # are set.
- + # -DNOPRIVATE
- + # makes private (static) procedures and variables public,
- + # so they are visible to the debugger and profiler.
- + # No execution time or space penalty.
- +
- + GENOPT=
- +
- + # Define the name of the executable file.
- +
- + GS=gs
- +
- + # ------ Platform-specific options ------ #
- +
- + # Define the name of the C compiler.
- +
- + CC=gcc
- +
- + # Define the other compilation flags.
- + # Add -DBSD4_2 for 4.2bsd systems.
- + # Add -DUSG (GNU convention) or -DSYSV for System V or DG/UX.
- + # Add -DSYSV -D__SVR3 for SCO ODT, ISC Unix 2.2 or before,
- + # or any System III Unix, or System V release 3-or-older Unix.
- + # Add -DSVR4 (not -DSYSV) for System V release 4.
- + # XCFLAGS can be set from the command line.
- + # We don't include -ansi, because this gets in the way of the platform-
- + # specific stuff that <math.h> typically needs; nevertheless, we expect
- + # gcc to accept ANSI-style function prototypes and function definitions.
- +
- + #FPU_FLAG =-Dm68881
- + #CPU_FLAG =-Dm68030
- + XCFLAGS = -O6 $(FPU_FLAG) $(CPU_FLAG)
- + CFLAGS=-DUSG $(XCFLAGS)
- +
- + # Define platform flags for ld.
- + # SunOS and some others want -X; Ultrix wants -x.
- + # SunOS 4.n may need -Bstatic.
- + # XLDFLAGS can be set from the command line.
- +
- + LDFLAGS=$(XLDFLAGS)
- +
- + # Define any extra libraries to link into the executable.
- + # ISC Unix 2.2 wants -linet.
- + # SCO Unix needs -lsocket if you aren't including the X11 driver.
- + # (Libraries required by individual drivers are handled automatically.)
- +
- + EXTRALIBS=
- +
- + # Define the include switch(es) for the X11 header files.
- + # This can be null if handled in some other way (e.g., the files are
- + # in /gnu/include, or the directory is supplied by an environment variable).
- + # Note that x_.h expects to find the header files in $(XINCLUDE)/X11,
- + # not in $(XINCLUDE).
- +
- + #XINCLUDE=-I/gnu/X/include
- +
- + # Define the directory/ies for the X11 library files.
- + # This can be null if these files are in the default linker search path.
- +
- + #XLIBDIRS=-L/gnu/X/lib
- +
- + # ------ Devices and features ------ #
- +
- + # Choose the language feature(s) to include. See gs.mak for details.
- +
- + FEATURE_DEVS=filter.dev dps.dev level2.dev
- +
- + # Choose the device(s) to include. See devs.mak for details.
- +
- + DEVICE_DEVS=amiga_.dev amiga.dev amiga_low.dev amiga_high.dev amiga_super.dev
- + DEVICE_DEVS1=amiga_a2024.dev amiga_picassoii.dev amiga_printer.dev
- + DEVICE_DEVS2=amiga_ilbm.dev amiga_custom.dev
- +
- + # ---------------------------- End of options --------------------------- #
- +
- + # Define the name of the makefile -- used in dependencies.
- +
- + MAKEFILE=amiga-gcc.mak
- +
- + # Define the ANSI-to-K&R dependency. (gcc accepts ANSI syntax.)
- +
- + AK=
- +
- + # Define the compilation rules and flags.
- +
- + CCC=$(CC) $(CCFLAGS) -c
- +
- + # --------------------------- Generic makefile ---------------------------- #
- +
- + # The remainder of the makefile (unixhead.mak, gs.mak, devs.mak, unixtail.mak)
- + # is generic. tar_cat concatenates all these together.
- + # Copyright (C) 1990, 1991, 1993 Aladdin Enterprises. All rights reserved.
- + #
- + # This file is part of Ghostscript.
- + #
- + # Ghostscript is distributed in the hope that it will be useful, but
- + # WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
- + # to anyone for the consequences of using it or for whether it serves any
- + # particular purpose or works at all, unless he says so in writing. Refer
- + # to the Ghostscript General Public License for full details.
- + #
- + # Everyone is granted permission to copy, modify and redistribute
- + # Ghostscript, but only under the conditions described in the Ghostscript
- + # General Public License. A copy of this license is supposed to have been
- + # given to you along with Ghostscript so you can know your rights and
- + # responsibilities. It should be in a file named COPYING. Among other
- + # things, the copyright notice and this notice must be preserved on all
- + # copies.
- +
- + # Partial makefile for Ghostscript, common to all Unix configurations.
- +
- + # This part of the makefile gets inserted after the compiler-specific part
- + # (xxx-head.mak) and before gs.mak and devs.mak.
- +
- + # ----------------------------- Generic stuff ----------------------------- #
- +
- + # Define the platform name. For a "stock" System V platform,
- + # use sysv_ instead of unix_.
- +
- + PLATFORM=amiga
- +
- + # Define the extensions for the object and executable files.
- +
- + OBJ=o
- + XE=
- +
- + # Define the current directory prefix, shell quote string, and shell names.
- +
- + EXP=
- + QQ=\"
- + SHELL=/bin/sh
- + SH=$(SHELL)
- + SHP=$(SH) $(EXP)
- +
- + # Define the compilation rules and flags.
- +
- + CCFLAGS=$(GENOPT) $(CFLAGS)
- +
- + .c.o: $(AK)
- + $(CCC) $*.c
- +
- + CCCF=$(CCC)
- + CCD=$(CCC)
- + CCINT=$(CCC)
- + # Copyright (C) 1989, 1992, 1993 Aladdin Enterprises. All rights reserved.
- + #
- + # This file is part of Ghostscript.
- + #
- + # Ghostscript is distributed in the hope that it will be useful, but
- + # WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
- + # to anyone for the consequences of using it or for whether it serves any
- + # particular purpose or works at all, unless he says so in writing. Refer
- + # to the Ghostscript General Public License for full details.
- + #
- + # Everyone is granted permission to copy, modify and redistribute
- + # Ghostscript, but only under the conditions described in the Ghostscript
- + # General Public License. A copy of this license is supposed to have been
- + # given to you along with Ghostscript so you can know your rights and
- + # responsibilities. It should be in a file named COPYING. Among other
- + # things, the copyright notice and this notice must be preserved on all
- + # copies.
- +
- + # Generic makefile for Ghostscript.
- + # The platform-specific makefiles `include' this file.
- + # They define the following symbols:
- + # GS - the name of the executable (without the extension, if any).
- + # GS_LIB_DEFAULT - the default directory/ies for searching for the
- + # initialization and font files at run time.
- + # DEVICE_DEVS - the devices to include in the executable.
- + # See devs.mak for details.
- + # DEVICE_DEVS1...DEVICE_DEVS9 - additional devices, if the definition of
- + # DEVICE_DEVS doesn't fit on one line.
- + # See devs.mak for details.
- + # FEATURE_DEVS - the optional features to include in the
- + # executable. Current features are:
- + # dps - (partial) support for Display PostScript extensions:
- + # see language.doc for details.
- + # level2 - (partial) support for PostScript Level 2
- + # extensions: see language.doc for details.
- + # compfont - support for composite (type 0) fonts.
- + # *** NOT IMPLEMENTED YET. ***
- + # filter - support for Level 2 filters (other than eexec,
- + # ASCIIHexEncode/Decode, NullEncode, PFBDecode,
- + # and SubFileDecode, which are always included).
- + # ccfonts - precompile fonts into C, and link them
- + # with the executable. In the standard makefiles,
- + # this is only implemented for a very few fonts:
- + # see fonts.doc for details.
- + # It is very unlikely that anyone would want to edit the remaining
- + # symbols, but we describe them here for completeness:
- + # GS_INIT - the name of the initialization file for Ghostscript,
- + # normally gs_init.ps.
- + # PLATFORM - a "device" name for the platform, so that platforms can
- + # add various kinds of resources like devices and features.
- + # QQ - a " preceded by whatever escape characters are needed to
- + # persuade the shell to pass a " to a program (" on MS-DOS,
- + # \" on Unix).
- + # XE - the extension for executable files (e.g., null or .exe).
- + # OBJ - the extension for relocatable object files (e.g., o or obj).
- + # BEGINFILES - the list of files that `make begin' should delete.
- + # CCBEGIN - the compilation command for `make begin', normally
- + # $(CCC) *.c.
- + # CCC - the C invocation for normal compilation.
- + # CCD - the C invocation for files that store into frame buffers or
- + # device registers. Needed because some optimizing compilers
- + # will eliminate necessary stores.
- + # CCCF - the C invocation for compiled fonts and other large,
- + # self-contained data modules. Needed because MS-DOS
- + # requires using the 'huge' memory model for these.
- + # CCINT - the C invocation for compiling the main interpreter module,
- + # normally the same as CCC: this is needed because the
- + # Borland compiler generates *worse* code for this module
- + # (but only this module) when optimization (-O) is turned on.
- + # AK - if source files must be converted from ANSI to K&R syntax,
- + # this is ansi2knr$(XE); if not, it is null.
- + # If a particular platform requires other utility programs
- + # to be built, AK must include them too.
- + # SHP - the prefix for invoking a shell script in the current directory
- + # (null for MS-DOS, $(SH) ./ for Unix).
- + # EXPP, EXP - the prefix for invoking an executable program in the
- + # current directory (null for MS-DOS, ./ for Unix).
- + # SH - the shell for scripts (null on MS-DOS, sh on Unix).
- + # The platform-specific makefiles must also include rules for creating
- + # ansi2knr$(XE), genarch$(XE), and genconf$(XE) from the corresponding
- + # .c files -- this is needed because Turbo C and Unix C treat the -o
- + # switch slightly differently (Turbo C requires no following space,
- + # Unix C requires a following space), and I haven't found a way to capture
- + # the difference in a macro.
- +
- + all default: $(GS)$(XE)
- +
- + distclean realclean: clean
- + rm -f makefile
- +
- + clean mostlyclean:
- + rm -f *.$(OBJ) *.a core gmon.out
- + rm -f *.dev *.d_* arch.h gconfig*.h o*.tr l*.tr
- + rm -f t _temp_* _temp_*.* *.map *.sym
- + rm -f ansi2knr$(XE) echogs$(XE) genarch$(XE) genconf$(XE)
- + rm -f $(GS)$(XE) $(BEGINFILES)
- +
- + # A rule to do a quick and dirty compilation attempt when first installing
- + # Ghostscript. Many of the compilations will fail: follow this with 'make'.
- +
- + begin:
- + rm -f arch.h genarch$(XE) $(GS)$(XE) $(BEGINFILES)
- + make arch.h
- + - $(CCBEGIN)
- + rm -f gconfig.$(OBJ) gdev*.$(OBJ) gp_*.$(OBJ) gsmisc.$(OBJ)
- + rm -f iccfont.$(OBJ) iinit.$(OBJ) interp.$(OBJ) zfiledev.$(OBJ)
- +
- + # Auxiliary programs
- +
- + arch.h: genarch$(XE)
- + $(EXPP) $(EXP)genarch arch.h
- +
- + # -------------------------------- Library -------------------------------- #
- +
- + # Define the inter-dependencies of the .h files.
- + # Since not all versions of `make' defer expansion of macros,
- + # we must list these in bottom-to-top order.
- +
- + # Generic files
- +
- + arch_h=arch.h
- + std_h=std.h $(arch_h)
- +
- + # Platform interfaces
- +
- + gp_h=gp.h
- + gpcheck_h=gpcheck.h
- +
- + # C library interfaces
- +
- + # Because of variations in the "standard" header files between systems, and
- + # because we must include std.h before any file that includes sys/types.h,
- + # we define local include files named *_.h to substitute for <*.h>.
- +
- + vmsmath_h=vmsmath.h
- +
- + dos__h=dos_.h
- + ctype__h=ctype_.h $(std_h)
- + errno__h=errno_.h
- + malloc__h=malloc_.h $(std_h)
- + math__h=math_.h $(std_h) $(vmsmath_h)
- + memory__h=memory_.h $(std_h)
- + stat__h=stat_.h $(std_h)
- + stdio__h=stdio_.h $(std_h)
- + string__h=string_.h $(std_h)
- + time__h=time_.h $(std_h)
- + windows__h=windows_.h
- +
- + # Miscellaneous
- +
- + gdebug_h=gdebug.h
- + gsio_h=gsio.h
- + gstypes_h=gstypes.h
- + gs_h=gs.h $(stdio__h) $(gsio_h) $(gstypes_h)
- + gx_h=gx.h $(gs_h) $(gdebug_h)
- + gconfig_h=gconfig.h gsconfig.h
- + gserrors_h=gserrors.h
- +
- + GX=$(AK) $(gx_h)
- + GXERR=$(GX) $(gserrors_h)
- +
- + ###### Low-level facilities and utilities
- +
- + ### Include files
- +
- + gsccode_h=gsccode.h
- + gschar_h=gschar.h $(gsccode_h)
- + gscie_h=gscie.h
- + gscolor_h=gscolor.h
- + gscolor2_h=gscolor2.h
- + gscoord_h=gscoord.h
- + gscrypt1_h=gscrypt1.h
- + gscspace_h=gscspace.h
- + gsfont_h=gsfont.h
- + gsimage_h=gsimage.h
- + gsmatrix_h=gsmatrix.h
- + gspaint_h=gspaint.h
- + gspath_h=gspath.h
- + gsprops_h=gsprops.h
- + gsstate_h=gsstate.h $(gscolor_h)
- + gstype1_h=gstype1.h
- + gsuid_h=gsuid.h
- + gsutil_h=gsutil.h
- + gsxfont_h=gsxfont.h
- +
- + gxarith_h=gxarith.h
- + gxbitmap_h=gxbitmap.h
- + gxcache_h=gxcache.h $(gsuid_h) $(gsxfont_h)
- + gxcdir_h=gxcdir.h
- + gxchar_h=gxchar.h $(gschar_h)
- + gxclist_h=gxclist.h
- + # gxcldev is out of order because it include gxclist.
- + gxcldev_h=gxcldev.h $(gxclist_h)
- + gxcpath_h=gxcpath.h
- + gxdevice_h=gxdevice.h $(gsmatrix_h) $(gsxfont_h) $(gxbitmap_h)
- + gxdevmem_h=gxdevmem.h
- + gxfdir_h=gxfdir.h $(gxcdir_h)
- + gxfixed_h=gxfixed.h
- + gxfont_h=gxfont.h $(gsfont_h) $(gsuid_h)
- + gxfrac_h=gxfrac.h
- + gximage_h=gximage.h $(gscspace_h) $(gsimage_h)
- + gxlum_h=gxlum.h
- + gxmatrix_h=gxmatrix.h $(gsmatrix_h)
- + gxop1_h=gxop1.h
- + gxpath_h=gxpath.h
- + gxrefct_h=gxrefct.h
- + gxtype1_h=gxtype1.h $(gscrypt1_h) $(gstype1_h)
- + gxxfont_h=gxxfont.h $(gsccode_h) $(gsmatrix_h) $(gsuid_h) $(gsxfont_h)
- + # gxcolor and gxfmap are out of order because they include other files.
- + gxcolor_h=gxcolor.h $(gxfrac_h) $(gsuid_h)
- + gxfmap_h=gxfmap.h $(gxfrac_h) $(gxrefct_h)
- +
- + gzcolor_h=gzcolor.h $(gscolor_h) $(gxfmap_h) $(gxlum_h)
- + gzdevice_h=gzdevice.h $(gxdevice_h)
- + gzht_h=gzht.h
- + gzline_h=gzline.h
- + gzpath_h=gzpath.h $(gxpath_h)
- + gzstate_h=gzstate.h $(gsstate_h) $(gxfixed_h) $(gxmatrix_h)
- +
- + ### Executable code
- +
- + gp_nofb.$(OBJ): gp_nofb.c $(AK) \
- + $(gx_h) $(gp_h) $(gxdevice_h)
- +
- + gsutil.$(OBJ): gsutil.c $(AK) \
- + $(std_h) $(gsprops_h) $(gsutil_h)
- +
- + gxccache.$(OBJ): gxccache.c $(GXERR) $(gpcheck_h) \
- + $(gxfixed_h) $(gxmatrix_h) $(gzdevice_h) $(gzcolor_h) \
- + $(gxcpath_h) $(gxdevmem_h) $(gxfont_h) $(gxfdir_h) $(gxchar_h) \
- + $(gxcache_h) $(gxxfont_h) $(gzstate_h) $(gzpath_h) \
- + $(gscspace_h) $(gsimage_h)
- +
- + gxccman.$(OBJ): gxccman.c $(GXERR) $(gpcheck_h) \
- + $(gxfixed_h) $(gxmatrix_h) $(gzdevice_h) $(gzcolor_h) \
- + $(gxcpath_h) $(gxdevmem_h) $(gxfont_h) $(gxfdir_h) $(gxchar_h) \
- + $(gxcache_h) $(gxxfont_h) $(gzstate_h) $(gzpath_h)
- +
- + gxclist.$(OBJ): gxclist.c $(GXERR) $(gpcheck_h) \
- + $(gsmatrix_h) $(gxbitmap_h) $(gxcldev_h) $(gxdevice_h) $(gxdevmem_h)
- +
- + gxclread.$(OBJ): gxclread.c $(GXERR) $(gpcheck_h) \
- + $(gsmatrix_h) $(gxbitmap_h) $(gxcldev_h) $(gxdevice_h) $(gxdevmem_h)
- +
- + gxcmap.$(OBJ): gxcmap.c $(GXERR) \
- + $(gscspace_h) \
- + $(gxcolor_h) $(gxdevice_h) $(gxfrac_h) $(gxlum_h) \
- + $(gzcolor_h) $(gzstate_h)
- +
- + gxcpath.$(OBJ): gxcpath.c $(GXERR) \
- + $(gxdevice_h) $(gxfixed_h) $(gzcolor_h) $(gzpath_h) $(gxcpath_h)
- +
- + gxdither.$(OBJ): gxdither.c $(GX) \
- + $(gxfixed_h) $(gxlum_h) $(gxmatrix_h) $(gzstate_h) $(gzdevice_h) $(gzcolor_h) $(gzht_h)
- +
- + gxdraw.$(OBJ): gxdraw.c $(GXERR) $(gpcheck_h) \
- + $(gxfixed_h) $(gxmatrix_h) $(gxbitmap_h) $(gzcolor_h) $(gzdevice_h) $(gzstate_h)
- +
- + gxfill.$(OBJ): gxfill.c $(GXERR) \
- + $(gxfixed_h) $(gxmatrix_h) $(gxdevice_h) $(gzcolor_h) $(gzpath_h) $(gzstate_h) $(gxcpath_h)
- +
- + gxhint1.$(OBJ): gxhint1.c $(GXERR) \
- + $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) $(gxdevmem_h) $(gxchar_h) $(gxfont_h) $(gxtype1_h) \
- + $(gzdevice_h) $(gzstate_h)
- +
- + gxhint2.$(OBJ): gxhint2.c $(GXERR) \
- + $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) $(gxdevmem_h) $(gxchar_h) $(gxfont_h) $(gxtype1_h) $(gxop1_h) \
- + $(gzdevice_h) $(gzstate_h)
- +
- + gxht.$(OBJ): gxht.c $(GXERR) \
- + $(gxfixed_h) $(gxmatrix_h) $(gxbitmap_h) $(gzstate_h) $(gzcolor_h) $(gzdevice_h) $(gzht_h)
- +
- + gxpath.$(OBJ): gxpath.c $(GXERR) \
- + $(gxfixed_h) $(gzpath_h)
- +
- + gxpath2.$(OBJ): gxpath2.c $(GXERR) \
- + $(gxfixed_h) $(gxarith_h) $(gzpath_h)
- +
- + gxpcopy.$(OBJ): gxpcopy.c $(GXERR) \
- + $(gxfixed_h) $(gxarith_h) $(gzpath_h)
- +
- + gxstroke.$(OBJ): gxstroke.c $(GXERR) $(gpcheck_h) \
- + $(gscoord_h) $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) \
- + $(gzstate_h) $(gzcolor_h) $(gzdevice_h) $(gzline_h) $(gzpath_h)
- +
- + ###### High-level facilities
- +
- + gschar.$(OBJ): gschar.c $(GXERR) \
- + $(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)
- +
- + gscolor.$(OBJ): gscolor.c $(GXERR) \
- + $(gscspace_h) $(gxcolor_h) $(gxdevice_h) $(gxrefct_h) \
- + $(gzstate_h) $(gzcolor_h)
- +
- + gscoord.$(OBJ): gscoord.c $(GXERR) \
- + $(gsccode_h) $(gxarith_h) $(gxfixed_h) $(gxfont_h) $(gxmatrix_h) \
- + $(gzdevice_h) $(gzstate_h) $(gscoord_h)
- +
- + gsdevice.$(OBJ): gsdevice.c $(GXERR) \
- + $(gxarith_h) $(gsprops_h) $(gsutil_h) $(gxbitmap_h) $(gxdevmem_h) \
- + $(gzstate_h) $(gzdevice_h)
- +
- + gsfile.$(OBJ): gsfile.c $(GXERR) \
- + $(gsmatrix_h) $(gxdevice_h) $(gxdevmem_h)
- +
- + gsfont.$(OBJ): gsfont.c $(GXERR) \
- + $(gxdevice_h) $(gxfixed_h) $(gxmatrix_h) $(gxfont_h) $(gxfdir_h) \
- + $(gzstate_h)
- +
- + gsht.$(OBJ): gsht.c $(GXERR) \
- + $(gzht_h) $(gzstate_h)
- +
- + gsimage.$(OBJ): gsimage.c $(GXERR) $(gpcheck_h) \
- + $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) $(gspaint_h) \
- + $(gzcolor_h) $(gzdevice_h) $(gzpath_h) $(gzstate_h) \
- + $(gxcolor_h) $(gxcpath_h) $(gxdevmem_h) $(gximage_h)
- +
- + gsimage1.$(OBJ): gsimage1.c $(GXERR) $(gpcheck_h) \
- + $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) $(gscspace_h) $(gspaint_h) \
- + $(gzcolor_h) $(gzdevice_h) $(gzpath_h) $(gzstate_h) \
- + $(gxcolor_h) $(gxcpath_h) $(gxdevmem_h) $(gximage_h)
- +
- + gsimage2.$(OBJ): gsimage2.c $(GXERR) $(gpcheck_h) \
- + $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) $(gscspace_h) $(gspaint_h) \
- + $(gzcolor_h) $(gzdevice_h) $(gzpath_h) $(gzstate_h) \
- + $(gxcolor_h) $(gxcpath_h) $(gxdevmem_h) $(gximage_h)
- +
- + gsimpath.$(OBJ): gsimpath.c $(GXERR) \
- + $(gsmatrix_h) $(gsstate_h) $(gspath_h)
- +
- + gsline.$(OBJ): gsline.c $(GXERR) \
- + $(gxfixed_h) $(gxmatrix_h) $(gzstate_h) $(gzline_h)
- +
- + gsmatrix.$(OBJ): gsmatrix.c $(GXERR) \
- + $(gxfixed_h) $(gxarith_h) $(gxmatrix_h)
- +
- + gsmisc.$(OBJ): gsmisc.c $(GX) $(errno__h) $(malloc__h) $(memory__h) $(MAKEFILE)
- + $(CCC) -DUSE_ASM=0$(USE_ASM) gsmisc.c
- +
- + gspaint.$(OBJ): gspaint.c $(GXERR) $(gpcheck_h) \
- + $(gxfixed_h) $(gxmatrix_h) $(gspaint_h) $(gzpath_h) $(gzstate_h) $(gzdevice_h) $(gxcpath_h) $(gxdevmem_h) $(gximage_h)
- +
- + gspath.$(OBJ): gspath.c $(GXERR) \
- + $(gxfixed_h) $(gxmatrix_h) $(gxpath_h) $(gzstate_h)
- +
- + gspath2.$(OBJ): gspath2.c $(GXERR) \
- + $(gspath_h) $(gxfixed_h) $(gxmatrix_h) $(gzstate_h) $(gzpath_h) $(gzdevice_h)
- +
- + gsstate.$(OBJ): gsstate.c $(GXERR) \
- + $(gscie_h) $(gscolor2_h) $(gscspace_h) $(gxcolor_h) $(gxrefct_h) \
- + $(gzstate_h) $(gzcolor_h) $(gzdevice_h) $(gzht_h) $(gzline_h) $(gzpath_h)
- +
- + gstdev.$(OBJ): gstdev.c $(GXERR) \
- + $(gxbitmap_h) $(gxdevice_h) $(gxfixed_h) $(gxmatrix_h)
- +
- + gstype1.$(OBJ): gstype1.c $(GXERR) \
- + $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) $(gxchar_h) $(gxdevmem_h) $(gxop1_h) $(gxtype1_h) \
- + $(gzstate_h) $(gzdevice_h) $(gzpath_h)
- +
- + ###### The internal devices
- +
- + gdevmem_h=gdevmem.h
- +
- + gdevemap.$(OBJ): gdevemap.c $(AK) $(std_h)
- +
- + gdevmem1.$(OBJ): gdevmem1.c $(AK) \
- + $(gx_h) $(gserrors_h) $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h)
- +
- + gdevmem2.$(OBJ): gdevmem2.c $(AK) \
- + $(gx_h) $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h)
- +
- + gdevmem3.$(OBJ): gdevmem3.c $(AK) \
- + $(gx_h) $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h)
- +
- + ###### Files dependent on the installed devices, features, and platform.
- + # Generating gconfig.h also generates o*.tr and l*.tr.
- +
- + # gconfig.h shouldn't have to depend on ALL_DEVS, but that would
- + # involve rewriting gsconfig to only save the device name, not the
- + # contents of the <device>.D_# files.
- +
- + ALL_DEVS=$(FEATURE_DEVS) $(PLATFORM).dev \
- + $(DEVICE_DEVS) $(DEVICE_DEVS1) \
- + $(DEVICE_DEVS2) $(DEVICE_DEVS3) $(DEVICE_DEVS4) $(DEVICE_DEVS5)\
- + $(DEVICE_DEVS6) $(DEVICE_DEVS7) $(DEVICE_DEVS8) $(DEVICE_DEVS9)
- +
- + gconfig.h obj.tr objw.tr ld.tr lib.tr: \
- + devs.mak $(MAKEFILE) echogs$(XE) genconf$(XE) $(ALL_DEVS)
- + $(EXP)echogs -w t.cfg - $(FEATURE_DEVS) $(PLATFORM).dev
- + $(EXP)echogs -a t.cfg - $(DEVICE_DEVS)
- + $(EXP)echogs -a t.cfg - $(DEVICE_DEVS1)
- + $(EXP)echogs -a t.cfg - $(DEVICE_DEVS2)
- + $(EXP)echogs -a t.cfg - $(DEVICE_DEVS3)
- + $(EXP)echogs -a t.cfg - $(DEVICE_DEVS4)
- + $(EXP)echogs -a t.cfg - $(DEVICE_DEVS5)
- + $(EXP)echogs -a t.cfg - $(DEVICE_DEVS6)
- + $(EXP)echogs -a t.cfg - $(DEVICE_DEVS7)
- + $(EXP)echogs -a t.cfg - $(DEVICE_DEVS8)
- + $(EXP)echogs -a t.cfg - $(DEVICE_DEVS9)
- + $(EXP)genconf @t.cfg -h gconfig.h -l lib.tr -o obj.tr -u ld.tr -w objw.tr
- + rm t.cfg
- + $(EXP)echogs -a gconfig.h -x 23 define GS_LIB_DEFAULT -x 2022 $(GS_LIB_DEFAULT) -x 22
- + $(EXP)echogs -a gconfig.h -x 23 define GS_INIT -x 2022 $(GS_INIT) -x 22
- +
- + gconfig.$(OBJ): gconfig.c $(AK) $(gconfig_h) $(MAKEFILE)
- +
- + ###### On Unix, we pre-link all of the library except the back end.
- + ###### On MS-DOS, we have to do the whole thing at once.
- +
- + LIBGS=gschar.$(OBJ) gscolor.$(OBJ) gscoord.$(OBJ) \
- + gsdevice.$(OBJ) gsfile.$(OBJ) gsfont.$(OBJ) gsht.$(OBJ) \
- + gsimage.$(OBJ) gsimage1.$(OBJ) gsimage2.$(OBJ) \
- + gsimpath.$(OBJ) gsline.$(OBJ) gsmatrix.$(OBJ) gsmisc.$(OBJ) \
- + gspaint.$(OBJ) gspath.$(OBJ) gspath2.$(OBJ) \
- + gsstate.$(OBJ) gstdev.$(OBJ) gstype1.$(OBJ) gsutil.$(OBJ) \
- + gxccache.$(OBJ) gxccman.$(OBJ) gxclist.$(OBJ) gxclread.$(OBJ) \
- + gxcmap.$(OBJ) gxcpath.$(OBJ) \
- + gxdither.$(OBJ) gxdraw.$(OBJ) gxfill.$(OBJ) \
- + gxhint1.$(OBJ) gxhint2.$(OBJ) gxht.$(OBJ) \
- + gxpath.$(OBJ) gxpath2.$(OBJ) gxpcopy.$(OBJ) gxstroke.$(OBJ) \
- + gdevmem1.$(OBJ) gdevmem2.$(OBJ) gdevmem3.$(OBJ) gconfig.$(OBJ)
- +
- + # ------------------------------ Interpreter ------------------------------ #
- +
- + ###### Include files
- +
- + alloc_h=alloc.h
- + astate_h=astate.h
- + ccfont_h=ccfont.h
- + dict_h=dict.h
- + dparam_h=dparam.h
- + dstack_h=dstack.h
- + errors_h=errors.h
- + estack_h=estack.h
- + filedev_h=filedev.h
- + files_h=files.h
- + font_h=font.h
- + ilevel_h=ilevel.h
- + iname_h=iname.h
- + iref_h=iref.h
- + iscan_h=iscan.h
- + ivmspace_h=ivmspace.h
- + iutil_h=iutil.h
- + main_h=main.h
- + opdef_h=opdef.h
- + ostack_h=ostack.h
- + overlay_h=overlay.h
- + packed_h=packed.h
- + save_h=save.h
- + scanchar_h=scanchar.h
- + sbits_h=sbits.h
- + shc_h=shc.h
- + state_h=state.h
- + store_h=store.h
- + stream_h=stream.h
- + # Nested include files
- + bfont_h=bfont.h $(font_h)
- + ghost_h=ghost.h $(gx_h) $(iref_h)
- + oper_h=oper.h $(gsutil_h) $(iutil_h) $(opdef_h) $(ostack_h)
- + scf_h=scf.h $(shc_h)
- + sdct_h=sdct.h $(shc_h)
- + # Include files for optional features
- + bnum_h=bnum.h
- + bseq_h=bseq.h
- + btoken_h=btoken.h
- +
- + comp1_h=comp1.h $(ghost_h) $(oper_h) $(gserrors_h) $(gxfixed_h) $(gxop1_h)
- +
- + gdevprn_h=gdevprn.h $(memory__h) $(string__h) $(gx_h) \
- + $(gserrors_h) $(gsmatrix_h) $(gxdevice_h) $(gxdevmem_h) $(gxclist_h)
- +
- + ###### Utilities
- +
- + GH=$(AK) $(ghost_h)
- +
- + ialloc.$(OBJ): ialloc.c $(AK) $(gx_h) $(alloc_h) $(astate_h) $(ivmspace_h)
- +
- + iccfont.$(OBJ): iccfont.c $(GH) gconfigf.h \
- + $(ghost_h) $(alloc_h) $(ccfont_h) $(dict_h) $(dstack_h) $(errors_h) \
- + $(font_h) $(iutil_h) $(iname_h) $(oper_h) $(save_h) $(store_h)
- +
- + idebug.$(OBJ): idebug.c $(GH) \
- + $(iutil_h) $(dict_h) $(iname_h) $(ostack_h) $(opdef_h) $(packed_h) $(store_h)
- +
- + idict.$(OBJ): idict.c $(GH) \
- + $(alloc_h) $(errors_h) $(ivmspace_h) $(iname_h) $(packed_h) \
- + $(save_h) $(store_h) $(iutil_h) $(dict_h) $(dstack_h)
- +
- + idparam.$(OBJ): idparam.c $(GH) \
- + $(gsmatrix_h) $(dict_h) $(dparam_h) $(errors_h) $(iutil_h)
- +
- + iinit.$(OBJ): iinit.c $(GH) $(gconfig_h) \
- + $(alloc_h) $(dict_h) $(dstack_h) $(errors_h) $(ilevel_h) $(iname_h) $(oper_h) $(store_h)
- +
- + iname.$(OBJ): iname.c $(GH) $(alloc_h) $(errors_h) $(ivmspace_h) $(iname_h) $(store_h)
- +
- + isave.$(OBJ): isave.c $(GH) $(alloc_h) $(astate_h) $(errors_h) $(iname_h) $(packed_h) $(save_h) $(store_h)
- +
- + iscan.$(OBJ): iscan.c $(GH) $(ctype__h) \
- + $(alloc_h) $(dict_h) $(dstack_h) $(errors_h) \
- + $(ilevel_h) $(iutil_h) $(iscan_h) $(ivmspace_h) \
- + $(iname_h) $(ostack_h) $(packed_h) $(store_h) $(stream_h) $(scanchar_h)
- +
- + iutil.$(OBJ): iutil.c $(GH) \
- + $(errors_h) $(alloc_h) $(dict_h) $(iutil_h) $(ivmspace_h) \
- + $(iname_h) $(ostack_h) $(opdef_h) $(packed_h) $(store_h) \
- + $(gsmatrix_h) $(gxdevice_h) $(gzcolor_h)
- +
- + sfilter.$(OBJ): sfilter.c $(AK) $(stdio__h) \
- + $(scanchar_h) $(stream_h) $(gscrypt1_h)
- +
- + stream.$(OBJ): stream.c $(AK) $(stdio__h) $(memory__h) \
- + $(gpcheck_h) $(scanchar_h) $(stream_h)
- +
- + ###### Operators
- +
- + OP=$(GH) $(errors_h) $(oper_h)
- +
- + ### Non-graphics operators
- +
- + zarith.$(OBJ): zarith.c $(OP) $(store_h)
- +
- + zarray.$(OBJ): zarray.c $(OP) $(alloc_h) $(packed_h) $(store_h)
- +
- + zcontrol.$(OBJ): zcontrol.c $(OP) $(estack_h) $(iutil_h) $(store_h)
- +
- + zdict.$(OBJ): zdict.c $(OP) $(dict_h) $(dstack_h) $(iname_h) $(store_h)
- +
- + zfile.$(OBJ): zfile.c $(OP) $(gp_h) \
- + $(alloc_h) $(estack_h) $(filedev_h) $(files_h) $(ilevel_h) $(iutil_h) \
- + $(save_h) $(stream_h) $(store_h)
- +
- + zfiledev.$(OBJ): zfiledev.c $(OP) $(string__h) $(gp_h) $(gconfig_h) \
- + $(filedev_h) $(files_h) $(stream_h)
- +
- + zfileio.$(OBJ): zfileio.c $(OP) $(gp_h) \
- + $(estack_h) $(files_h) $(iscan_h) $(store_h) $(stream_h) \
- + $(gsmatrix_h) $(gxdevice_h) $(gxdevmem_h)
- +
- + zfilter.$(OBJ): zfilter.c $(OP) $(alloc_h) $(stream_h)
- +
- + zgeneric.$(OBJ): zgeneric.c $(OP) \
- + $(dict_h) $(estack_h) $(ivmspace_h) $(iname_h) $(packed_h) $(store_h)
- +
- + zmath.$(OBJ): zmath.c $(OP) $(store_h)
- +
- + zmisc.$(OBJ): zmisc.c $(OP) $(gp_h) $(errno__h) $(memory__h) $(string__h) \
- + $(alloc_h) $(dict_h) $(dstack_h) $(iname_h) $(ivmspace_h) $(packed_h) $(store_h) \
- + $(gscrypt1_h)
- +
- + zpacked.$(OBJ): zpacked.c $(OP) \
- + $(alloc_h) $(dict_h) $(ivmspace_h) $(iname_h) $(packed_h) $(save_h) $(store_h)
- +
- + zprops.$(OBJ): zprops.c $(OP) \
- + $(alloc_h) $(dict_h) $(iname_h) $(state_h) $(store_h) \
- + $(gsprops_h) $(gsmatrix_h) $(gxdevice_h) $(gsstate_h)
- +
- + zrelbit.$(OBJ): zrelbit.c $(OP) $(store_h) $(dict_h)
- +
- + zstack.$(OBJ): zstack.c $(OP) $(store_h)
- +
- + zstring.$(OBJ): zstring.c $(OP) \
- + $(alloc_h) $(iscan_h) $(iutil_h) $(iname_h) $(store_h) $(stream_h)
- +
- + ztype.$(OBJ): ztype.c $(OP) \
- + $(dict_h) $(iscan_h) $(iutil_h) $(iname_h) $(stream_h) $(store_h)
- +
- + zvmem.$(OBJ): zvmem.c $(OP) $(alloc_h) $(dict_h) $(dstack_h) $(estack_h) $(save_h) $(state_h) $(store_h) \
- + $(gsmatrix_h) $(gsstate_h)
- +
- + ###### Graphics operators
- +
- + zchar.$(OBJ): zchar.c $(OP) $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) \
- + $(gschar_h) $(gxtype1_h) $(gxdevice_h) $(gxfont_h) $(gzpath_h) $(gzstate_h) \
- + $(alloc_h) $(dict_h) $(font_h) $(estack_h) $(ilevel_h) $(iname_h) $(state_h) $(store_h)
- +
- + 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)
- +
- + zdevice.$(OBJ): zdevice.c $(OP) $(alloc_h) $(state_h) $(gsmatrix_h) $(gsstate_h) $(gxdevice_h) $(store_h)
- +
- + zfont.$(OBJ): zfont.c $(OP) \
- + $(gsmatrix_h) $(gxdevice_h) $(gxfont_h) $(gxfdir_h) $(gxcache_h) \
- + $(alloc_h) $(bfont_h) $(dict_h) $(iname_h) $(packed_h) $(save_h) $(state_h) $(store_h)
- +
- + zfont1.$(OBJ): zfont1.c $(OP) $(gsmatrix_h) $(gxdevice_h) $(gschar_h) $(gxfixed_h) $(gxfont_h) \
- + $(bfont_h) $(dict_h) $(dparam_h) $(iname_h) $(store_h)
- +
- + zfont2.$(OBJ): zfont2.c $(OP) $(gsmatrix_h) $(gxdevice_h) $(gschar_h) $(gxfixed_h) $(gxfont_h) \
- + $(alloc_h) $(bfont_h) $(dict_h) $(dparam_h) $(ilevel_h) $(iname_h) \
- + $(packed_h) $(save_h) $(store_h)
- +
- + zgstate.$(OBJ): zgstate.c $(OP) $(alloc_h) $(gsmatrix_h) $(gsstate_h) $(state_h) $(store_h)
- +
- + zht.$(OBJ): zht.c $(OP) $(alloc_h) $(estack_h) $(gsmatrix_h) $(gsstate_h) $(state_h) $(store_h)
- +
- + zmatrix.$(OBJ): zmatrix.c $(OP) $(gsmatrix_h) $(state_h) $(gscoord_h) $(store_h)
- +
- + zpaint.$(OBJ): zpaint.c $(OP) \
- + $(alloc_h) $(estack_h) $(ilevel_h) $(state_h) $(store_h) $(stream_h) \
- + $(gsimage_h) $(gsmatrix_h) $(gspaint_h)
- +
- + zpath.$(OBJ): zpath.c $(OP) $(gsmatrix_h) $(gspath_h) $(state_h) $(store_h)
- +
- + zpath2.$(OBJ): zpath2.c $(OP) $(alloc_h) $(estack_h) $(gspath_h) $(state_h) $(store_h)
- +
- + ###### Linking
- +
- + INT=ialloc.$(OBJ) idebug.$(OBJ) idict.$(OBJ) idparam.$(OBJ) \
- + iinit.$(OBJ) iname.$(OBJ) \
- + interp.$(OBJ) isave.$(OBJ) iscan.$(OBJ) iutil.$(OBJ) \
- + sfilter.$(OBJ) stream.$(OBJ) \
- + zarith.$(OBJ) zarray.$(OBJ) zcontrol.$(OBJ) zdict.$(OBJ) \
- + zfile.$(OBJ) zfiledev.$(OBJ) zfileio.$(OBJ) zfilter.$(OBJ) zgeneric.$(OBJ) \
- + zmath.$(OBJ) zmisc.$(OBJ) zpacked.$(OBJ) zprops.$(OBJ) zrelbit.$(OBJ) \
- + zstack.$(OBJ) zstring.$(OBJ) ztype.$(OBJ) zvmem.$(OBJ) \
- + zchar.$(OBJ) zcolor.$(OBJ) zfont.$(OBJ) zfont1.$(OBJ) zfont2.$(OBJ) \
- + zdevice.$(OBJ) zgstate.$(OBJ) zht.$(OBJ) zmatrix.$(OBJ) \
- + zpaint.$(OBJ) zpath.$(OBJ) zpath2.$(OBJ)
- +
- + # -------------------------- Optional features ---------------------------- #
- +
- + ### Additions common to Display PostScript and Level 2
- +
- + # We have to split up the module list because of limitations
- + # on the number of arguments to a DOS batch file.
- + dpsand2a_=gsdps1.$(OBJ) ibnum.$(OBJ) iscan2.$(OBJ)
- + dpsand2b_=zbseq.$(OBJ) zchar2.$(OBJ) zdps1.$(OBJ) zupath.$(OBJ) zvmem2.$(OBJ)
- + dpsand2_=$(dpsand2a_) $(dpsand2b_)
- + dpsand2.dev: $(dpsand2_) gssetmod gsaddmod
- + $(SHP)gssetmod dpsand2 $(dpsand2a_)
- + $(SHP)gsaddmod dpsand2 -obj $(dpsand2b_)
- + $(SHP)gsaddmod dpsand2 -oper2 zbseq zchar2 zdps1 zupath zvmem2
- + $(SHP)gsaddmod dpsand2 -ps gs_dps1
- +
- + gsdps1.$(OBJ): gsdps1.c $(GXERR) $(gxfixed_h) $(gxmatrix_h) $(gzpath_h) $(gzstate_h)
- +
- + ibnum.$(OBJ): ibnum.c $(GH) $(errors_h) $(stream_h) $(bnum_h) $(btoken_h)
- +
- + iscan2.$(OBJ): iscan2.c $(GH) $(errors_h) \
- + $(alloc_h) $(dict_h) $(dstack_h) $(iscan_h) $(iutil_h) $(ivmspace_h) \
- + $(iname_h) $(ostack_h) $(save_h) $(store_h) $(stream_h) \
- + $(bseq_h) $(btoken_h) $(bnum_h)
- +
- + zbseq.$(OBJ): zbseq.c $(OP) $(save_h) $(store_h) $(stream_h) $(files_h) $(iname_h) $(bnum_h) $(btoken_h) $(bseq_h)
- +
- + zchar2.$(OBJ): zchar2.c $(OP) $(gschar_h) $(gsmatrix_h) $(gxfixed_h) $(gxfont_h) \
- + $(alloc_h) $(estack_h) $(font_h) $(iname_h) $(state_h) $(store_h) $(stream_h) $(bnum_h)
- +
- + zdps1.$(OBJ): zdps1.c $(OP) $(gsmatrix_h) $(gspath_h) $(gsstate_h) \
- + $(alloc_h) $(ivmspace_h) $(state_h) $(store_h) $(stream_h) $(bnum_h)
- +
- + zupath.$(OBJ): zupath.c $(OP) \
- + $(dict_h) $(dstack_h) $(iutil_h) $(state_h) $(store_h) $(stream_h) $(bnum_h) \
- + $(gscoord_h) $(gsmatrix_h) $(gspaint_h) $(gspath_h) $(gsstate_h) \
- + $(gxfixed_h) $(gxdevice_h) $(gxpath_h)
- +
- + zvmem2.$(OBJ): zvmem2.c $(OP) \
- + $(ivmspace_h) $(store_h)
- +
- + ### Display PostScript
- + # We should include zcontext, but it isn't in good enough shape yet:
- + # $(SHP)gsaddmod dps -oper2 zcontext
- +
- + dps_=
- + dps.dev: dpsand2.dev $(dps_) gssetmod gsaddmod
- + $(SHP)gssetmod dps $(dps_)
- + $(SHP)gsaddmod dps -include dpsand2
- +
- + zcontext.$(OBJ): zcontext.c $(OP) \
- + $(alloc_h) $(dict_h) $(dstack_h) $(estack_h) $(state_h) $(store_h)
- +
- + ### Composite font support
- +
- + gschar0.$(OBJ): gschar0.c $(GXERR) \
- + $(gxfixed_h) $(gxmatrix_h) $(gzdevice_h) $(gxdevmem_h) $(gxfont_h) $(gxchar_h) $(gzstate_h)
- +
- + zfont0.$(OBJ): zfont0.c $(OP) $(gsmatrix_h) $(gxdevice_h) $(gxfont_h) \
- + $(alloc_h) $(bfont_h) $(dict_h) $(iname_h) $(state_h) $(store_h)
- +
- + compfont_=zchar2.$(OBJ) zfont0.$(OBJ) gschar0.$(OBJ)
- + compfont.dev: $(compfont_) gssetmod gsaddmod
- + $(SHP)gssetmod compfont $(compfont_)
- + $(SHP)gsaddmod compfont -oper zfont0 zchar2
- + $(SHP)gsaddmod compfont -ps gs_type0
- +
- + ### Level 2 additions
- +
- + # We have to split up the module list because of limitations
- + # on the number of arguments to a DOS batch file.
- + level2a_=gscie.$(OBJ) gscolor2.$(OBJ) zcie.$(OBJ) zcolor2.$(OBJ)
- + level2b_=zcspace2.$(OBJ) zht2.$(OBJ) zimage2.$(OBJ) zmisc2.$(OBJ)
- + level2_=$(level2a_) $(level2b_)
- + level2.dev: compfont.dev dpsand2.dev filter.dev $(level2_) gssetmod gsaddmod
- + $(SHP)gssetmod level2 $(level2a_)
- + $(SHP)gsaddmod level2 -obj $(level2b_)
- + $(SHP)gsaddmod level2 -include compfont dpsand2 filter
- + $(SHP)gsaddmod level2 -oper zmisc2_level
- + $(SHP)gsaddmod level2 -oper2 zcie zcolor2 zcspace2
- + $(SHP)gsaddmod level2 -oper2 zht2 zimage2 zmisc2
- + $(SHP)gsaddmod level2 -ps gs_lev2
- +
- + gscie.$(OBJ): gscie.c $(GXERR) \
- + $(gscspace_h) $(gscie_h) $(gscolor2_h) \
- + $(gxarith_h) $(gxcolor_h) $(gxdevice_h) $(gxrefct_h) \
- + $(gzcolor_h) $(gzstate_h)
- +
- + gscolor2.$(OBJ): gscolor2.c $(GXERR) \
- + $(gscie_h) $(gscolor2_h) $(gscspace_h) \
- + $(gxcolor_h) $(gxdevice_h) $(gxfixed_h) $(gxmatrix_h) $(gxrefct_h) \
- + $(gzcolor_h) $(gzstate_h)
- +
- + zcie.$(OBJ): zcie.c $(OP) \
- + $(gscspace_h) $(gscolor2_h) $(gscie_h) $(gxcolor_h) $(gxrefct_h) \
- + $(alloc_h) $(dict_h) $(dparam_h) $(estack_h) $(save_h) $(state_h) $(store_h)
- +
- + zcolor2.$(OBJ): zcolor2.c $(OP) \
- + $(gscolor_h) $(gxcolor_h) $(gscolor2_h) $(gscspace_h) $(gsmatrix_h) \
- + $(dict_h) $(dparam_h) $(iname_h) $(state_h) $(store_h)
- +
- + zcspace2.$(OBJ): zcspace2.c $(OP) \
- + $(gscolor_h) $(gxcolor_h) $(gscolor2_h) $(gscspace_h) $(gsmatrix_h) \
- + $(dict_h) $(dparam_h) $(estack_h) $(iname_h) $(state_h) $(store_h)
- +
- + zht2.$(OBJ): zht2.c $(OP) \
- + $(dict_h) $(dparam_h) $(iname_h) $(state_h) $(store_h)
- +
- + zimage2.$(OBJ): zimage2.c $(OP) \
- + $(gscolor_h) $(gscolor2_h) $(gscspace_h) $(gsmatrix_h) $(gxcolor_h) \
- + $(dict_h) $(dparam_h) $(ilevel_h) $(state_h)
- +
- + zmisc2.$(OBJ): zmisc2.c $(OP) \
- + $(gsfont_h) \
- + $(dict_h) $(dparam_h) $(dstack_h) $(estack_h) $(ilevel_h) $(iname_h) $(store_h)
- +
- + ### Filters other than the ones in sfilter.c
- +
- + sbits.$(OBJ): sbits.c $(AK) $(stdio__h) $(sbits_h) $(stream_h)
- +
- + scftab.$(OBJ): scftab.c $(AK) $(std_h) $(scf_h)
- +
- + scfdtab.$(OBJ): scfdtab.c $(AK) $(std_h) $(scf_h)
- +
- + scfd.$(OBJ): scfd.c $(AK) $(stdio__h) $(gdebug_h)\
- + $(sbits_h) $(scf_h) $(stream_h)
- +
- + scfe.$(OBJ): scfe.c $(AK) $(stdio__h) $(gdebug_h)\
- + $(sbits_h) $(scf_h) $(stream_h)
- +
- + sdctd.$(OBJ): sdctd.c $(AK) $(stdio__h) $(gdebug_h) $(stream_h)
- +
- + sdcte.$(OBJ): sdcte.c $(AK) $(stdio__h) $(gdebug_h) $(stream_h)
- +
- + sfilter2.$(OBJ): sfilter2.c $(AK) $(stdio__h) $(scanchar_h) $(stream_h)
- +
- + slzwd.$(OBJ): slzwd.c $(AK) $(stdio__h) $(gdebug_h) $(stream_h)
- +
- + slzwe.$(OBJ): slzwe.c $(AK) $(stdio__h) $(gdebug_h) $(stream_h)
- +
- + zfilter2.$(OBJ): zfilter2.c $(OP) $(alloc_h) $(dict_h) $(dparam_h) $(sdct_h) $(stream_h)
- +
- + # Because of size limits on the DOS command line,
- + # we have to break this up into two parts.
- + filter_1=zfilter2.$(OBJ) sfilter2.$(OBJ) sbits.$(OBJ)
- + filter_2=scfdtab.$(OBJ) scftab.$(OBJ) scfd.$(OBJ) scfe.$(OBJ)
- + filter_3=sdctd.$(OBJ) sdcte.$(OBJ) slzwd.$(OBJ) slzwe.$(OBJ)
- + filter.dev: $(filter_1) $(filter_2) $(filter_3) gssetmod gsaddmod
- + $(SHP)gssetmod filter $(filter_1)
- + $(SHP)gsaddmod filter -obj $(filter_2)
- + $(SHP)gsaddmod filter -obj $(filter_3)
- + $(SHP)gsaddmod filter -oper zfilter2
- +
- + ### Precompiled fonts. See fonts.doc for more information.
- +
- + CCFONT=$(OP) $(ccfont_h)
- +
- + # List the fonts we are going to compile.
- + # Because of intrinsic limitations in `make', we have to list
- + # the object file names and the font names separately.
- + ccfonts1_=uglyr.$(OBJ)
- + ccfonts1=uglyr
- +
- + ccfonts.dev: $(MAKEFILE) gs.mak iccfont.$(OBJ) gssetmod gsaddmod \
- + $(ccfonts1_) $(ccfonts2_) $(ccfonts3_) $(ccfonts4_) $(ccfonts5_)
- + $(SHP)gssetmod ccfonts iccfont.$(OBJ)
- + $(SHP)gsaddmod ccfonts -obj $(ccfonts1_)
- + $(SHP)gsaddmod ccfonts -obj $(ccfonts2_)
- + $(SHP)gsaddmod ccfonts -obj $(ccfonts3_)
- + $(SHP)gsaddmod ccfonts -obj $(ccfonts4_)
- + $(SHP)gsaddmod ccfonts -obj $(ccfonts5_)
- + $(SHP)gsaddmod ccfonts -oper ccfonts
- +
- + gconfigf.h: $(MAKEFILE) gs.mak genconf$(XE) gssetmod gsaddmod
- + $(SHP)gssetmod ccfonts_
- + $(SHP)gsaddmod ccfonts_ -font $(ccfonts1)
- + $(SHP)gsaddmod ccfonts_ -font $(ccfonts2)
- + $(SHP)gsaddmod ccfonts_ -font $(ccfonts3)
- + $(SHP)gsaddmod ccfonts_ -font $(ccfonts4)
- + $(SHP)gsaddmod ccfonts_ -font $(ccfonts5)
- + $(EXP)genconf ccfonts_.dev -f gconfigf.h
- +
- + uglyr.$(OBJ): uglyr.c $(CCFONT)
- + $(CCCF) uglyr.c
- +
- + ncrr.$(OBJ): ncrr.c $(CCFONT)
- + $(CCCF) ncrr.c
- +
- + pagk.$(OBJ): pagk.c $(CCFONT)
- + $(CCCF) pagk.c
- +
- + psyr.$(OBJ): psyr.c $(CCFONT)
- + $(CCCF) psyr.c
- +
- + ptmr.$(OBJ): ptmr.c $(CCFONT)
- + $(CCCF) ptmr.c
- +
- + pzdr.$(OBJ): pzdr.c $(CCFONT)
- + $(CCCF) pzdr.c
- +
- + # ----------------------------- Main program ------------------------------ #
- +
- + # Interpreter main program
- +
- + gs.$(OBJ): gs.c $(GH) $(ctype__h) \
- + $(gxdevice_h) $(gxdevmem_h) \
- + $(alloc_h) $(errors_h) $(estack_h) $(files_h) $(iscan_h) $(main_h) $(ostack_h) $(store_h) $(stream_h)
- +
- + gsmain.$(OBJ): gsmain.c $(GH) \
- + $(gp_h) $(gsmatrix_h) $(gxdevice_h) $(gserrors_h) \
- + $(estack_h) $(files_h) $(iscan_h) $(main_h) $(ostack_h) $(store_h)
- +
- + interp.$(OBJ): interp.c $(GH) \
- + $(errors_h) $(estack_h) $(iname_h) $(dict_h) $(dstack_h) $(iscan_h) $(oper_h) $(ostack_h) $(packed_h) $(save_h) $(store_h) $(stream_h)
- + $(CCINT) interp.c
- + # Copyright (C) 1989, 1992, 1993 Aladdin Enterprises. All rights reserved.
- + #
- + # This file is part of Ghostscript.
- + #
- + # Ghostscript is distributed in the hope that it will be useful, but
- + # WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
- + # to anyone for the consequences of using it or for whether it serves any
- + # particular purpose or works at all, unless he says so in writing. Refer
- + # to the Ghostscript General Public License for full details.
- + #
- + # Everyone is granted permission to copy, modify and redistribute
- + # Ghostscript, but only under the conditions described in the Ghostscript
- + # General Public License. A copy of this license is supposed to have been
- + # given to you along with Ghostscript so you can know your rights and
- + # responsibilities. It should be in a file named COPYING. Among other
- + # things, the copyright notice and this notice must be preserved on all
- + # copies.
- +
- + # makefile for Ghostscript device drivers.
- +
- + # -------------------------------- Catalog ------------------------------- #
- +
- + # It is possible to build Ghostscript with an arbitrary collection of
- + # device drivers, although some drivers are supported only on a subset
- + # of the target platforms. The currently available drivers are:
- +
- + # Displays:
- + # MS-DOS EGA and VGA:
- + # ega EGA (640x350, 16-color)
- + # vga VGA (640x480, 16-color)
- + # MS-DOS SuperVGA:
- + # + atiw ATI Wonder SuperVGA, 256-color modes
- + # + atiw16 ATI Wonder SuperVGA in 800x600, 16-color mode
- + # s3vga SuperVGA with S3 86C911 chip (e.g., Diamond Stealth board)
- + # tseng SuperVGA using Tseng Labs ET3000/4000 chips, 256-color modes
- + # tseng16 Tseng Labs SuperVGA in 800x600, 16-color mode (256K memory)
- + # + tvga Trident SuperVGA, 256-color modes
- + # + tvga16 Trident SuperVGA in 800x600, 16-color mode (256K memory)
- + # ****** NOTE: The vesa device does not work with the Watcom (32-bit MS-DOS)
- + # ****** compiler or executable.
- + # vesa SuperVGA with VESA standard API driver
- + # MS-DOS other:
- + # bgi Borland Graphics Interface (CGA) [MS-DOS only]
- + # * herc Hercules Graphics display [MS-DOS only]
- + # mswin Microsoft Windows 3.0, 3.1 [MS Windows only]
- + # mswinprn Microsoft Windows 3.0, 3.1 printer [MS Windows only]
- + # * pe Private Eye display
- + # Unix and VMS:
- + # ****** NOTE: For direct frame buffer addressing under SCO Unix or Xenix,
- + # ****** edit the definition of EGAVGA below.
- + # * att3b1 AT&T 3b1/Unixpc monochrome display [3b1 only]
- + # * sonyfb Sony Microsystems monochrome display [Sony only]
- + # * sunview SunView window system [SunOS only]
- + # x11 X Windows version 11, release >=4 [Unix and VMS only]
- + # Printers:
- + # * appledmp Apple Dot Matrix Printer (should also work with Imagewriter)
- + # bj10e Canon BubbleJet BJ10e
- + # * bj200 Canon BubbleJet BJ200
- + # * cdeskjet H-P DeskJet 500C with 1 bit/pixel color
- + # * cdjcolor H-P DeskJet 500C with 24 bit/pixel color and
- + # high-quality color (Floyd-Steinberg) dithering
- + # * cdjmono H-P DeskJet 500C printing black only
- + # * cdj500 H-P DeskJet 500C (same as cdjcolor)
- + # * cdj550 H-P DeskJet 550C
- + # * declj250 alternate DEC LJ250 driver
- + # + deskjet H-P DeskJet and DeskJet Plus
- + # * dfaxhigh DigiBoard, Inc.'s DigiFAX software format (high resolution)
- + # * dfaxlow DigiFAX low (normal) resolution
- + # djet500 H-P DeskJet 500
- + # * djet500c H-P DeskJet 500C
- + # epson Epson-compatible dot matrix printers (9- or 24-pin)
- + # + eps9high Epson-compatible 9-pin, interleaved lines
- + # (triple resolution)
- + # * epsonc Epson LQ-2550 and Fujitsu 3400/2400/1200 color printers
- + # * escp2 Epson ESC/P 2 language printers, including Stylus 800
- + # + ibmpro IBM 9-pin Proprinter
- + # * jetp3852 IBM Jetprinter ink-jet color printer (Model #3852)
- + # + laserjet H-P LaserJet
- + # * la50 DEC LA50 printer
- + # * la75 DEC LA75 printer
- + # * lbp8 Canon LBP-8II laser printer
- + # * ln03 DEC LN03 printer
- + # * lj250 DEC LJ250 Companion color printer
- + # + ljet2p H-P LaserJet IId/IIp/III* with TIFF compression
- + # + ljet3 H-P LaserJet III* with Delta Row compression
- + # + ljet4 H-P LaserJet 4 (defaults to 600 dpi)
- + # + ljetplus H-P LaserJet Plus
- + # * m8510 C.Itoh M8510 printer
- + # * necp6 NEC P6/P6+/P60 printers at 360 x 360 DPI resolution
- + # * nwp533 Sony Microsystems NWP533 laser printer [Sony only]
- + # * oki182 Okidata MicroLine 182
- + # paintjet H-P PaintJet color printer
- + # * pj alternate PaintJet XL driver
- + # * pjxl H-P PaintJet XL color printer
- + # * pjxl300 H-P PaintJet XL300 color printer
- + # * r4081 Ricoh 4081 laser printer
- + # * sparc SPARCprinter
- + # * t4693d2 Tektronix 4693d color printer, 2 bits per R/G/B component
- + # * t4693d4 Tektronix 4693d color printer, 4 bits per R/G/B component
- + # * t4693d8 Tektronix 4693d color printer, 8 bits per R/G/B component
- + # * tek4696 Tektronix 4695/4696 inkjet plotter
- + # * trufax TruFax facsimile driver [Unix only]
- + # File formats and others:
- + # bit A plain "bit bucket" device
- + # bmpmono Monochrome MS Windows .BMP file format
- + # bmp16 4-bit (EGA/VGA) .BMP file format
- + # bmp256 8-bit (256-color) .BMP file format
- + # bmp16m 24-bit .BMP file format
- + # gifmono Monochrome GIF file format
- + # gif8 8-bit color GIF file format
- + # pcxmono Monochrome PCX file format
- + # pcxgray 8-bit gray scale PCX file format
- + # pcx16 Older color PCX file format (EGA/VGA, 16-color)
- + # pcx256 Newer color PCX file format (256-color)
- + # pbm Portable Bitmap (plain format)
- + # pbmraw Portable Bitmap (raw format)
- + # pgm Portable Graymap (plain format)
- + # pgmraw Portable Graymap (raw format)
- + # ppm Portable Pixmap (plain format)
- + # ppmraw Portable Pixmap (raw format)
- + # * tiffg3 TIFF/F (G3 fax)
- +
- + # User-contributed drivers marked with * require hardware or software
- + # that is not available to Aladdin Enterprises. Please contact the
- + # original contributors, not Aladdin Enterprises, if you have questions.
- + # Contact information appears in the driver entry below.
- + #
- + # Drivers marked with a + are maintained by Aladdin Enterprises with
- + # the assistance of users, since Aladdin Enterprises doesn't have access to
- + # the hardware for these either.
- +
- + # If you add drivers, it would be nice if you kept each list
- + # in alphabetical order.
- +
- + # Each platform-specific makefile contains a line of the form
- + # DEVICE_DEVS=<dev1>.dev ... <devn>.dev
- + # where dev1 ... devn are the devices to be included in the build.
- + # You may edit this line to select any desired set of devices.
- + # dev1 will be used as the default device (unless overridden from
- + # the command line with -sDEVICE=xxx, of course.) If you can't fit all the
- + # devices on a single line, you may add lines defining
- + # DEVICE_DEVS2=<dev21>.dev ... <dev2n>.dev
- + # DEVICE_DEVS3=<dev31>.dev ... <dev3n>.dev
- + # etc. up to DEVICE_DEVS9.
- + # Don't use continuation lines, since this may break the MS-DOS command
- + # processor.
- +
- + # ---------------------------- End of catalog ---------------------------- #
- +
- + # If you want to add a new device driver, the examples below should be
- + # enough of a guide to the correct form for the makefile rules.
- +
- + # All device drivers depend on the following:
- + GDEV=$(AK) echogs$(XE) $(gserrors_h) $(gx_h) $(gxdevice_h)
- +
- + # Define the header files for device drivers. Every header file used by
- + # more than one device driver must be listed here.
- + gdevpccm_h=gdevpccm.h
- + gdevpcfb_h=gdevpcfb.h $(dos__h)
- + gdevpcl_h=gdevpcl.h
- + gdevsvga_h=gdevsvga.h
- + gdevx_h=gdevx.h
- +
- + ###### ------------------- MS-DOS display devices ------------------- ######
- +
- + # There are really only three drivers: an EGA/VGA driver (4 bit-planes,
- + # plane-addressed), a SuperVGA driver (8 bit-planes, byte addressed),
- + # and a special driver for the S3 chip.
- + # To make A4 paper the default, change the compilation line from
- + # $(CCD) ...
- + # to
- + # $(CCD) -DA4
- +
- + ### ----------------------- EGA and VGA displays ----------------------- ###
- +
- + gdevegaa.$(OBJ): gdevegaa.asm
- +
- + ETEST=ega.$(OBJ) $(ega_) gdevpcfb.$(OBJ) gdevegaa.$(OBJ)
- + ega.exe: $(ETEST) libc$(MM).tr
- + $(COMPDIR)\tlink $(LCT) $(LO) $(LIBDIR)\c0$(MM) @ega.tr @libc$(MM).tr
- +
- + ega.$(OBJ): ega.c $(GDEV)
- + $(CCC) -v ega.c
- +
- + # The shared MS-DOS makefile defines PCFBASM as either gdevegaa.$(OBJ)
- + # or an empty string.
- +
- + # NOTE: for direct frame buffer addressing under SCO Unix or Xenix,
- + # change gdevevga to gdevsco in the following line.
- + EGAVGA=gdevevga.$(OBJ) gdevpcfb.$(OBJ) $(PCFBASM)
- +
- + gdevevga.$(OBJ): gdevevga.c $(GDEV) $(gdevpcfb_h)
- + $(CCD) gdevevga.c
- +
- + gdevsco.$(OBJ): gdevsco.c $(GDEV) $(gdevpcfb_h)
- + $(CCD) gdevsco.c
- +
- + # Common code for MS-DOS and SCO.
- + gdevpcfb.$(OBJ): gdevpcfb.c $(GDEV) $(MAKEFILE) $(gdevpcfb_h)
- + $(CCD) -DUSE_ASM=0$(USE_ASM) gdevpcfb.c
- +
- + # The EGA/VGA family includes: EGA, VGA, and
- + # the ATI Wonder, Tseng ET3000/4000, and Trident SuperVGA in 16-color mode.
- +
- + ega.dev: $(EGAVGA) gssetdev
- + $(SHP)gssetdev ega $(EGAVGA)
- +
- + vga.dev: $(EGAVGA) gssetdev
- + $(SHP)gssetdev vga $(EGAVGA)
- +
- + atiw16.dev: $(EGAVGA) gssetdev
- + $(SHP)gssetdev atiw16 $(EGAVGA)
- +
- + tseng16.dev: $(EGAVGA) gssetdev
- + $(SHP)gssetdev tseng16 $(EGAVGA)
- +
- + tvga16.dev: $(EGAVGA) gssetdev
- + $(SHP)gssetdev tvga16 $(EGAVGA)
- +
- + ### ------------------------- SuperVGA displays ------------------------ ###
- +
- + SVGA=gdevsvga.$(OBJ) $(PCFBASM)
- +
- + gdevsvga.$(OBJ): gdevsvga.c $(GDEV) $(MAKEFILE) \
- + $(gdevpcfb_h) $(gdevsvga_h)
- + $(CCD) -DUSE_ASM=0$(USE_ASM) gdevsvga.c
- +
- + # The SuperVGA family includes: ATI Wonder, S3, Trident, Tseng ET3000/4000,
- + # and VESA.
- +
- + atiw.dev: $(SVGA) gssetdev
- + $(SHP)gssetdev atiw $(SVGA)
- +
- + tseng.dev: $(SVGA) gssetdev
- + $(SHP)gssetdev tseng $(SVGA)
- +
- + tvga.dev: $(SVGA) gssetdev
- + $(SHP)gssetdev tvga $(SVGA)
- +
- + vesa.dev: $(SVGA) gssetdev
- + $(SHP)gssetdev vesa $(SVGA)
- +
- + # The S3 driver doesn't share much code with the others.
- +
- + s3vga_=$(SVGA) gdevs3ga.$(OBJ)
- + s3vga.dev: $(s3vga_) gssetdev
- + $(SHP)gssetdev s3vga $(s3vga_)
- +
- + gdevs3ga.$(OBJ): gdevs3ga.c $(GDEV) $(MAKEFILE) $(gdevpcfb_h) $(gdevsvga_h)
- + $(CCD) gdevs3ga.c
- +
- + ### ------------ The BGI (Borland Graphics Interface) device ----------- ###
- +
- + cgaf.$(OBJ): $(BGIDIR)\cga.bgi
- + $(BGIDIR)\bgiobj /F $(BGIDIR)\cga
- +
- + egavgaf.$(OBJ): $(BGIDIR)\egavga.bgi
- + $(BGIDIR)\bgiobj /F $(BGIDIR)\egavga
- +
- + # Include egavgaf.$(OBJ) for debugging only.
- + bgi_=gdevbgi.$(OBJ) cgaf.$(OBJ)
- + bgi.dev: $(bgi_) gssetdev gsaddmod
- + $(SHP)gssetdev bgi $(bgi_)
- + $(SHP)gsaddmod bgi -lib $(LIBDIR)\graphics
- +
- + gdevbgi.$(OBJ): gdevbgi.c $(GDEV) $(MAKEFILE) $(gxxfont_h)
- + $(CCC) -DBGI_LIB=$(QQ)$(BGIDIRSTR)$(QQ) gdevbgi.c
- +
- + ### ------------------- The Hercules Graphics display ------------------- ###
- +
- + herc_=gdevherc.$(OBJ)
- + herc.dev: $(herc_) gssetdev
- + $(SHP)gssetdev herc $(herc_)
- +
- + gdevherc.$(OBJ): gdevherc.c $(GDEV)
- + $(CCC) gdevherc.c
- +
- + ###### ------------------- The Private Eye display ------------------- ######
- + ### Note: this driver was contributed by a user: ###
- + ### please contact narf@media-lab.media.mit.edu if you have questions. ###
- +
- + pe_=gdevpe.$(OBJ)
- + pe.dev: $(pe_) gssetdev
- + $(SHP)gssetdev pe $(pe_)
- +
- + gdevpe.$(OBJ): gdevpe.c $(GDEV)
- +
- + ###### ----------------- The MS-Windows 3.n display ------------------ ######
- +
- + gdevmswn_h=gdevmswn.h $(GDEV) gp_mswin.h
- +
- + # Choose one of gdevwddb or gdevwdib here.
- + mswin_=gdevmswn.$(OBJ) gdevmsxf.$(OBJ) gdevwdib.$(OBJ) \
- + gdevemap.$(OBJ) gdevpccm.$(OBJ)
- + mswin.dev: $(mswin_) gssetdev
- + $(SHP)gssetdev mswin $(mswin_)
- +
- + gdevmswn.$(OBJ): gdevmswn.c $(gdevmswn_h) $(gp_h) $(gpcheck_h) \
- + $(gsprops_h) $(gdevpccm_h)
- +
- + gdevmsxf.$(OBJ): gdevmsxf.c $(ctype__h) $(math__h) $(memory__h) \
- + $(gdevmswn_h) $(gsutil_h) $(gxxfont_h)
- +
- + # An implementation using a device-dependent bitmap.
- + gdevwddb.$(OBJ): gdevwddb.c $(gdevmswn_h)
- +
- + # An implementation using a DIB filled by an image device.
- + gdevwdib.$(OBJ): gdevwdib.c $(dos__h) $(gdevmswn_h)
- +
- + ###### ----------------- The MS-Windows 3.n printer ------------------ ######
- +
- + mswinprn_=gdevwprn.$(OBJ) gdevmsxf.$(OBJ)
- + mswinprn.dev: $(mswinprn_) gssetdev
- + $(SHP)gssetdev mswinprn $(mswinprn_)
- +
- + gdevwprn.$(OBJ): gdevwprn.c $(gdevmswn_h) $(gp_h) $(gpcheck_h) \
- + $(gsprops_h) $(gdevpccm_h)
- +
- + ### ---------------- Amiga display/printer/file devices ---------------- ###
- + ### Note: this driver was contributed by a user: please contact ###
- + ### Olaf Barthel (olsen@sourcery.han.de) if you have questions. ###
- + ### He would also like to hear from anyone using the driver. ###
- + ### Please consult the source code for additional documentation. ###
- +
- + amiga_=gdevamiga.$(OBJ)
- +
- + amiga.dev: $(amiga_) gssetdev
- + $(SHP)gssetdev amiga $(amiga_)
- +
- + amiga_low.dev: $(amiga_) gssetdev
- + $(SHP)gssetdev amiga_low $(amiga_)
- +
- + amiga_high.dev: $(amiga_) gssetdev
- + $(SHP)gssetdev amiga_high $(amiga_)
- +
- + amiga_super.dev: $(amiga_) gssetdev
- + $(SHP)gssetdev amiga_super $(amiga_)
- +
- + amiga_a2024.dev: $(amiga_) gssetdev
- + $(SHP)gssetdev amiga_a2024 $(amiga_)
- +
- + amiga_picassoii.dev: $(amiga_) gssetdev
- + $(SHP)gssetdev amiga_picassoii $(amiga_)
- +
- + amiga_custom.dev: $(amiga_) gssetdev
- + $(SHP)gssetdev amiga_custom $(amiga_)
- +
- + amiga_printer.dev: $(amiga_) gssetdev
- + $(SHP)gssetdev amiga_printer $(amiga_)
- +
- + amiga_ilbm.dev: $(amiga_) gssetdev
- + $(SHP)gssetdev amiga_ilbm $(amiga_)
- +
- + gdevamiga.$(OBJ): gdevamiga.c $(GDEV) $(arch_h)
- +
- + ###### ----------- The AT&T 3b1 Unixpc monochrome display ------------ ######
- + ### Note: this driver was contributed by a user: please contact ###
- + ### Andy Fyfe (andy@cs.caltech.edu) if you have questions. ###
- +
- + att3b1_=gdev3b1.$(OBJ)
- + att3b1.dev: $(att3b1_) gssetdev
- + $(SHP)gssetdev att3b1 $(att3b1_)
- +
- + gdev3b1.$(OBJ): gdev3b1.c
- +
- + ###### --------------- Memory-buffered printer devices --------------- ######
- +
- + # The dependency list for printers includes devs.mak because
- + # you can specify -DA4 to make A4 paper the default.
- + # See below under, e.g., gdevdjet.c.
- + PDEVH=$(GDEV) $(gdevprn_h) devs.mak
- +
- + gdevprn.$(OBJ): gdevprn.c $(PDEVH) $(gp_h) $(gsprops_h)
- +
- + ### ------------------- The Apple DMP printer device ------------------- ###
- +
- + appledmp_=gdevadmp.$(OBJ) gdevprn.$(OBJ)
- +
- + appledmp.dev: $(appledmp_) gssetdev
- + $(SHP)gssetdev appledmp $(appledmp_)
- +
- + ### ------------ The Canon BubbleJet BJ10e and BJ200 devices ------------ ###
- +
- + bj10e_=gdevbj10.$(OBJ) gdevprn.$(OBJ)
- +
- + bj10e.dev: $(bj10e_) gssetdev
- + $(SHP)gssetdev bj10e $(bj10e_)
- +
- + bj200.dev: $(bj10e_) gssetdev
- + $(SHP)gssetdev bj200 $(bj10e_)
- +
- + gdevbj10.$(OBJ): gdevbj10.c $(PDEVH)
- +
- + ### -------------------------- The DigiFAX device ----------------------- ###
- + ### This driver outputs images in a format suitable for use with ###
- + ### DigiBoard, Inc.'s DigiFAX software. Use -sDEVICE=dfaxhigh for ###
- + ### high resolution output, -sDEVICE=dfaxlow for normal output. ###
- + ### Note: this driver was contributed by a user: please contact ###
- + ### Rick Richardson (rick@digibd.com) if you have questions. ###
- +
- + digifax_=gdevdfax.$(OBJ) gdevprn.$(OBJ)
- + dfaxhigh.dev: $(digifax_) gssetdev
- + $(SHP)gssetdev dfaxhigh $(digifax_)
- +
- + dfaxlow.dev: $(digifax_) gssetdev
- + $(SHP)gssetdev dfaxlow $(digifax_)
- +
- + gdevdfax.$(OBJ): gdevdfax.c $(GDEV) $(gdevprn_h) gdevdfg3.h
- +
- + ### ----------- The H-P DeskJet and LaserJet printer devices ----------- ###
- +
- + ### These are essentially the same device.
- + ### You can make A4 paper the default: see below.
- + ### NOTE: printing at full resolution (300 DPI) requires a printer
- + ### with at least 1.5 Mb of memory. 150 DPI only requires .5 Mb.
- +
- + HPPCL=gdevprn.$(OBJ) gdevpcl.$(OBJ)
- + HPMONO=gdevdjet.$(OBJ) $(HPPCL)
- +
- + gdevpcl.$(OBJ): gdevpcl.c $(PDEVH) $(gdevpcl_h)
- +
- + # To make A4 paper the default, change the second line below this to
- + # $(CCC) -DA4 gdevdjet.c
- + gdevdjet.$(OBJ): gdevdjet.c $(PDEVH) $(gdevpcl_h)
- + $(CCC) gdevdjet.c
- +
- + deskjet.dev: $(HPMONO) gssetdev
- + $(SHP)gssetdev deskjet $(HPMONO)
- +
- + djet500.dev: $(HPMONO) gssetdev
- + $(SHP)gssetdev djet500 $(HPMONO)
- +
- + laserjet.dev: $(HPMONO) gssetdev
- + $(SHP)gssetdev laserjet $(HPMONO)
- +
- + ljetplus.dev: $(HPMONO) gssetdev
- + $(SHP)gssetdev ljetplus $(HPMONO)
- +
- + ### Selecting ljet2p provides TIFF (mode 2) compression on LaserJet III,
- + ### IIIp, IIId, IIIsi, IId, and IIp.
- +
- + ljet2p.dev: $(HPMONO) gssetdev
- + $(SHP)gssetdev ljet2p $(HPMONO)
- +
- + ### Selecting ljet3 provides Delta Row (mode 3) compression on LaserJet III,
- + ### IIIp, IIId, IIIsi.
- +
- + ljet3.dev: $(HPMONO) gssetdev
- + $(SHP)gssetdev ljet3 $(HPMONO)
- +
- + ### Selecting ljet4 also provides Delta Row compression on LaserJet IV series.
- +
- + ljet4.dev: $(HPMONO) gssetdev
- + $(SHP)gssetdev ljet4 $(HPMONO)
- +
- + ###- The H-P DeskJet 500C/550C and PaintJet family color printer devices -###
- + ### Note: there are two different 500C drivers, both contributed by users.###
- + ### If you have questions about the djet500c driver, ###
- + ### please contact AKayser@et.tudelft.nl. ###
- + ### If you have questions about the cdj* drivers, ###
- + ### please contact g.cameron@biomed.abdn.ac.uk. ###
- +
- + cdeskjet_=gdevcdj.$(OBJ) $(HPPCL)
- +
- + cdeskjet.dev: $(cdeskjet_) gssetdev
- + $(SHP)gssetdev cdeskjet $(cdeskjet_)
- +
- + cdjcolor.dev: $(cdeskjet_) gssetdev
- + $(SHP)gssetdev cdjcolor $(cdeskjet_)
- +
- + cdjmono.dev: $(cdeskjet_) gssetdev
- + $(SHP)gssetdev cdjmono $(cdeskjet_)
- +
- + cdj500.dev: $(cdeskjet_) gssetdev
- + $(SHP)gssetdev cdj500 $(cdeskjet_)
- +
- + cdj550.dev: $(cdeskjet_) gssetdev
- + $(SHP)gssetdev cdj550 $(cdeskjet_)
- +
- + declj250.dev: $(cdeskjet_) gssetdev
- + $(SHP)gssetdev declj250 $(cdeskjet_)
- +
- + pj.dev: $(cdeskjet_) gssetdev
- + $(SHP)gssetdev pj $(cdeskjet_)
- +
- + pjxl.dev: $(cdeskjet_) gssetdev
- + $(SHP)gssetdev pjxl $(cdeskjet_)
- +
- + pjxl300.dev: $(cdeskjet_) gssetdev
- + $(SHP)gssetdev pjxl300 $(cdeskjet_)
- +
- + # NB: you can also customise the build if required, using -DA4 (for A4 paper)
- + # and -DBitsPerPixel=<number> if you wish the default to be other than 24
- + # for the generic drivers (cdj500, cdj550, pjxl300, pjtest, pjxltest).
- + # E.g,. to make A4 paper the default, change the second line below this to
- + # $(CCC) -DA4 gdevdjet.c
- + gdevcdj.$(OBJ): gdevcdj.c $(PDEVH) $(gdevpcl_h)
- + $(CCC) gdevcdj.c
- +
- + djet500c_=gdevdjtc.$(OBJ) $(HPPCL)
- + djet500c.dev: $(djet500c_) gssetdev
- + $(SHP)gssetdev djet500c $(djet500c_)
- +
- + gdevdjtc.$(OBJ): gdevdjtc.c $(PDEVH) $(gdevpcl_h)
- +
- + ### ----------------- The generic Epson printer device ----------------- ###
- +
- + epson_=gdevepsn.$(OBJ) gdevprn.$(OBJ)
- +
- + epson.dev: $(epson_) gssetdev
- + $(SHP)gssetdev epson $(epson_)
- +
- + eps9high.dev: $(epson_) gssetdev
- + $(SHP)gssetdev eps9high $(epson_)
- +
- + gdevepsn.$(OBJ): gdevepsn.c $(PDEVH)
- +
- + ### ----------------- The IBM Proprinter printer device ---------------- ###
- +
- + ibmpro.dev: $(epson_) gssetdev
- + $(SHP)gssetdev ibmpro $(epson_)
- +
- + ### -------------- The Epson LQ-2550 color printer device -------------- ###
- + ### Note: this driver was contributed by users: please contact ###
- + ### Dave St. Clair (dave@exlog.com) if you have questions. ###
- +
- + epsonc_=gdevepsc.$(OBJ) gdevprn.$(OBJ)
- + epsonc.dev: $(epsonc_) gssetdev
- + $(SHP)gssetdev epsonc $(epsonc_)
- +
- + gdevepsc.$(OBJ): gdevepsc.c $(PDEVH)
- +
- + ### -------------- The Epson ESC/P 2 language printer device ----------- ###
- + ### Note: this driver was contributed by a user: if you have questions, ###
- + ### please contact Richard Brown (rab@tauon.ph.unimelb.edu.au). ###
- +
- + escp2_=gdevescp.$(OBJ) gdevprn.$(OBJ)
- + escp2.dev: $(escp2_) gssetdev
- + $(SHP)gssetdev escp2 $(escp2_)
- +
- + gdevescp.$(OBJ): gdevescp.c $(PDEVH)
- +
- + ### ------------ The H-P PaintJet color printer device ----------------- ###
- + ### Note: this driver also supports the DEC LJ250 color printer, which ###
- + ### has a PaintJet-compatible mode, and the PaintJet XL. ###
- + ### If you have questions about the XL, please contact Rob Reiss ###
- + ### (rob@moray.berkeley.edu). ###
- +
- + PJET=gdevpjet.$(OBJ) $(HPPCL)
- +
- + gdevpjet.$(OBJ): gdevpjet.c $(PDEVH) $(gdevpcl_h)
- +
- + lj250.dev: $(PJET) gssetdev
- + $(SHP)gssetdev lj250 $(PJET)
- +
- + paintjet.dev: $(PJET) gssetdev
- + $(SHP)gssetdev paintjet $(PJET)
- +
- + pjetxl.dev: $(PJET) gssetdev
- + $(SHP)gssetdev pjetxl $(PJET)
- +
- + ### ------- The IBM 3852 JetPrinter color inkjet printer device -------- ###
- + ### Note: this driver was contributed by users: please contact ###
- + ### Kevin Gift (kgift@draper.com) if you have questions. ###
- + ### Note that the paper size that can be addressed by the graphics mode ###
- + ### used in this driver is fixed at 7-1/2 inches wide (the printable ###
- + ### width of the jetprinter itself.) ###
- +
- + jetp3852_=gdev3852.$(OBJ) gdevprn.$(OBJ)
- + jetp3852.dev: $(jetp3852_) gssetdev
- + $(SHP)gssetdev jetp3852 $(jetp3852_)
- +
- + gdevjetp.$(OBJ): gdevjetp.c $(PDEVH) $(gdevpcl_h)
- +
- + ### ----------------- The Canon LBP-8II printer device ----------------- ###
- + ### Note: this driver was contributed by users: please contact ###
- + ### Tom Quinn (trq@prg.oxford.ac.uk) if you have questions. ###
- + ### Note that the standard paper size for this driver is the European ###
- + ### A4 size, not the American 8.5" x 11" size. ###
- +
- + lbp8_=gdevlbp8.$(OBJ) gdevprn.$(OBJ)
- + lbp8.dev: $(lbp8_) gssetdev
- + $(SHP)gssetdev lbp8 $(lbp8_)
- +
- + gdevlbp8.$(OBJ): gdevlbp8.c $(PDEVH)
- +
- + ### -------------- The DEC LN03/LA50/LA75 printer devices -------------- ###
- + ### Note: this driver was contributed by users: please contact ###
- + ### Ulrich Mueller (ulm@vsnhd1.cern.ch) if you have questions. ###
- + ### For questions about LA50 and LA75: please contact ###
- + ### Ian MacPhedran (macphed@dvinci.USask.CA). ###
- + ### For the LN03, you can make A4 paper the default: see below. ###
- +
- + ln03_=gdevln03.$(OBJ) gdevprn.$(OBJ)
- + ln03.dev: $(ln03_) gssetdev
- + $(SHP)gssetdev ln03 $(ln03_)
- +
- + la50.dev: $(ln03_) gssetdev
- + $(SHP)gssetdev la50 $(ln03_)
- +
- + la75.dev: $(ln03_) gssetdev
- + $(SHP)gssetdev la75 $(ln03_)
- +
- + # To make A4 paper the default, change the second line below this to
- + # $(CCC) -DA4 gdevln03.c
- + gdevln03.$(OBJ): gdevln03.c $(PDEVH)
- + $(CCC) gdevln03.c
- +
- + ### -------------- The C.Itoh M8510 printer device --------------------- ###
- + ### Note: this driver was contributed by a user: please contact Bob ###
- + ### Smith <bob@snuffy.penfield.ny.us> if you have questions. ###
- +
- + m8510_=gdev8510.$(OBJ) gdevprn.$(OBJ)
- + m8510.dev: $(m8510_) gssetdev
- + $(SHP)gssetdev m8510 $(m8510_)
- +
- + gdev8510.$(OBJ): gdev8510.c $(PDEVH)
- +
- + ### --------------------- The NEC P6 family devices -------------------- ###
- +
- + necp6_=gdevnp6.$(OBJ) gdevprn.$(OBJ)
- + necp6.dev: $(necp6_) gssetdev
- + $(SHP)gssetdev necp6 $(necp6_)
- +
- + gdevnp6.$(OBJ): gdevnp6.c $(PDEVH)
- +
- + ### ----------------- The Okidata MicroLine 182 device ----------------- ###
- + ### Note: this driver was contributed by a user: please contact ###
- + ### Maarten Koning (smeg@bnr.ca) if you have questions. ###
- +
- + oki182_=gdevo182.$(OBJ) gdevprn.$(OBJ)
- + oki182.dev: $(oki182_) gssetdev
- + $(SHP)gssetdev oki182 $(oki182_)
- +
- + gdevo182.$(OBJ): gdevo182.c $(PDEVH)
- +
- + ### ------------- The Ricoh 4081 laser printer device ------------------ ###
- + ### Note: this driver was contributed by users: ###
- + ### please contact kdw@oasis.icl.co.uk if you have questions. ###
- +
- + r4081_=gdev4081.$(OBJ) gdevprn.$(OBJ)
- + r4081.dev: $(r4081_) gssetdev
- + $(SHP)gssetdev r4081 $(r4081_)
- +
- + gdev4081.$(OBJ): gdev4081.c $(PDEVH)
- +
- + ###### ------------------------ Sony devices ------------------------ ######
- + ### Note: these drivers were contributed by users: please contact ###
- + ### Mike Smolenski (mike@intertech.com) if you have questions. ###
- +
- + ### ------------------- Sony NeWS frame buffer device ------------------ ###
- +
- + sonyfb_=gdevsnfb.$(OBJ) gdevprn.$(OBJ)
- + sonyfb.dev: $(sonyfb_) gssetdev
- + $(SHP)gssetdev sonyfb $(sonyfb_)
- +
- + gdevsnfb.$(OBJ): gdevsnfb.c $(PDEVH)
- +
- + ### -------------------- Sony NWP533 printer device -------------------- ###
- + ### Note: this driver was contributed by a user: please contact Tero ###
- + ### Kivinen (kivinen@joker.cs.hut.fi) if you have questions. ###
- +
- + nwp533_=gdevn533.$(OBJ) gdevprn.$(OBJ)
- + nwp533.dev: $(nwp533_) gssetdev
- + $(SHP)gssetdev nwp533 $(nwp533_)
- +
- + gdevn533.$(OBJ): gdevn533.c $(PDEVH)
- +
- + ### ------------------------- The SPARCprinter ------------------------- ###
- + ### Note: this driver was contributed by users: please contact Martin ###
- + ### Schulte (schulte@thp.uni-koeln.de) if you have questions. ###
- + ### He would also like to hear from anyone using the driver. ###
- + ### Please consult the source code for additional documentation. ###
- +
- + sparc_=gdevsppr.$(OBJ) gdevprn.$(OBJ)
- + sparc.dev: $(sparc_) gssetdev
- + $(SHP)gssetdev sparc $(sparc_)
- +
- + gdevsppr.$(OBJ): gdevsppr.c $(PDEVH)
- +
- + ###### --------------------- The SunView device --------------------- ######
- + ### Note: this driver is maintained by a user: if you have questions, ###
- + ### please contact Andreas Stolcke (stolcke@icsi.berkeley.edu). ###
- +
- + sunview_=gdevsun.$(OBJ)
- + sunview.dev: $(sunview_) gssetdev gsaddmod
- + $(SHP)gssetdev sunview $(sunview_)
- + $(SHP)gsaddmod sunview -lib suntool sunwindow pixrect
- +
- + gdevsun.$(OBJ): gdevsun.c $(GDEV) $(arch_h)
- +
- + ### ----------------- Tektronix 4396d color printer -------------------- ###
- + ### Note: this driver was contributed by a user: please contact ###
- + ### Karl Hakimian (hakimian@haney.eecs.wsu.edu) ###
- + ### if you have questions. ###
- +
- + t4693d_=gdev4693.$(OBJ) gdevprn.$(OBJ)
- + t4693d2.dev: $(t4693d_) gssetdev
- + $(SHP)gssetdev t4693d2 $(t4693d_)
- +
- + t4693d4.dev: $(t4693d_) gssetdev
- + $(SHP)gssetdev t4693d4 $(t4693d_)
- +
- + t4693d8.dev: $(t4693d_) gssetdev
- + $(SHP)gssetdev t4693d8 $(t4693d_)
- +
- + gdev4693.$(OBJ): gdev4693.c $(GDEV)
- +
- + ### -------------------- Tektronix ink-jet printers -------------------- ###
- + ### Note: this driver was contributed by a user: please contact ###
- + ### Karsten Spang (spang@nbivax.nbi.dk) if you have questions. ###
- +
- + tek4696_=gdevtknk.$(OBJ) gdevprn.$(OBJ)
- + tek4696.dev: $(tek4696_) gssetdev
- + $(SHP)gssetdev tek4696 $(tek4696_)
- +
- + gdevtknk.$(OBJ): gdevtknk.c $(PDEVH)
- +
- + ### ----------------- The TruFax facsimile device ---------------------- ###
- + ### Note: this driver was contributed by users: please contact ###
- + ### Neil Ostroff (nao@maestro.bellcore.com) if you have questions. ###
- + ### Note that the driver requires a file encode_l.o supplied by the ###
- + ### makers of the TruFax product. ###
- +
- + trufax_=gdevtrfx.$(OBJ) gdevprn.$(OBJ) encode_l.$(OBJ)
- + trufax.dev: $(trufax_) gssetdev
- + $(SHP)gssetdev trufax $(trufax_)
- +
- + gdevtrfx.$(OBJ): gdevtrfx.c $(GDEV)
- +
- + ###### ----------------------- The X11 device ----------------------- ######
- +
- + # Aladdin Enterprises does not support Ghostview. For more information
- + # about Ghostview, please contact Tim Theisen (ghostview@cs.wisc.edu).
- +
- + x11_=gdevx.$(OBJ) gdevxini.$(OBJ) gdevxxf.$(OBJ) gdevemap.$(OBJ)
- + x11.dev: $(x11_) gssetdev gsaddmod
- + $(SHP)gssetdev x11 $(x11_)
- + $(SHP)gsaddmod x11 -lib Xt X11 Xext
- +
- + # See the main makefile for the definition of XINCLUDE.
- + GDEVX=$(GDEV) x_.h gdevx.h $(MAKEFILE)
- + gdevx.$(OBJ): gdevx.c $(GDEVX) $(gsprops_h) $(gsutil_h)
- + $(CCC) $(XINCLUDE) gdevx.c
- +
- + gdevxini.$(OBJ): gdevxini.c $(GDEVX) $(ctype__h)
- + $(CCC) $(XINCLUDE) gdevxini.c
- +
- + gdevxxf.$(OBJ): gdevxxf.c $(GDEVX) $(gsutil_h) $(gxxfont_h)
- + $(CCC) $(XINCLUDE) gdevxxf.c
- +
- + ### ---------------------- The bit bucket device ----------------------- ###
- +
- + bit_=gdevbit.$(OBJ) gdevprn.$(OBJ)
- + bit.dev: $(bit_) gssetdev
- + $(SHP)gssetdev bit $(bit_)
- +
- + gdevbit.$(OBJ): gdevbit.c $(PDEVH)
- +
- + ###### ----------------------- PC file formats ---------------------- ######
- +
- + gdevpccm.$(OBJ): gdevpccm.c $(AK) \
- + $(gs_h) $(gsmatrix_h) $(gxdevice_h) $(gdevpccm_h)
- +
- + ### ------------------------- .BMP file formats ------------------------- ###
- +
- + bmp_=gdevbmp.$(OBJ) gdevpccm.$(OBJ) gdevprn.$(OBJ)
- +
- + gdevbmp.$(OBJ): gdevbmp.c $(PDEVH) $(gdevpccm_h)
- +
- + bmpmono.dev: $(bmp_) gssetdev
- + $(SHP)gssetdev bmpmono $(bmp_)
- +
- + bmp16.dev: $(bmp_) gssetdev
- + $(SHP)gssetdev bmp16 $(bmp_)
- +
- + bmp256.dev: $(bmp_) gssetdev
- + $(SHP)gssetdev bmp256 $(bmp_)
- +
- + bmp16m.dev: $(bmp_) gssetdev
- + $(SHP)gssetdev bmp16m $(bmp_)
- +
- + ### ------------------------- GIF file formats ------------------------- ###
- +
- + GIF=gdevgif.$(OBJ) gdevpccm.$(OBJ) gdevprn.$(OBJ)
- +
- + gdevgif.$(OBJ): gdevgif.c $(PDEVH) $(gdevpccm_h)
- +
- + gifmono.dev: $(GIF) gssetdev
- + $(SHP)gssetdev gifmono $(GIF)
- +
- + gif8.dev: $(GIF) gssetdev
- + $(SHP)gssetdev gif8 $(GIF)
- +
- + ### ------------------------- PCX file formats ------------------------- ###
- +
- + pcx_=gdevpcx.$(OBJ) gdevpccm.$(OBJ) gdevprn.$(OBJ)
- +
- + gdevpcx.$(OBJ): gdevpcx.c $(PDEVH) $(gdevpccm_h) $(gxlum_h)
- +
- + pcxmono.dev: $(pcx_) gssetdev
- + $(SHP)gssetdev pcxmono $(pcx_)
- +
- + pcxgray.dev: $(pcx_) gssetdev
- + $(SHP)gssetdev pcxgray $(pcx_)
- +
- + pcx16.dev: $(pcx_) gssetdev
- + $(SHP)gssetdev pcx16 $(pcx_)
- +
- + pcx256.dev: $(pcx_) gssetdev
- + $(SHP)gssetdev pcx256 $(pcx_)
- +
- + ###### ------------------- Portable Bitmap devices ------------------ ######
- + ### For more information, see the pbm(5), pgm(5), and ppm(5) man pages. ###
- +
- + pxm_=gdevpbm.$(OBJ) gdevprn.$(OBJ)
- +
- + gdevpbm.$(OBJ): gdevpbm.c $(PDEVH) $(gxlum_h)
- +
- + ### Portable Bitmap (PBM, plain or raw format, magic numbers "P1" or "P4")
- +
- + pbm.dev: $(pxm_) gssetdev
- + $(SHP)gssetdev pbm $(pxm_)
- +
- + pbmraw.dev: $(pxm_) gssetdev
- + $(SHP)gssetdev pbmraw $(pxm_)
- +
- + ### Portable Graymap (PGM, plain or raw format, magic numbers "P2" or "P5")
- +
- + pgm.dev: $(pxm_) gssetdev
- + $(SHP)gssetdev pgm $(pxm_)
- +
- + pgmraw.dev: $(pxm_) gssetdev
- + $(SHP)gssetdev pgmraw $(pxm_)
- +
- + ### Portable Pixmap (PPM, plain or raw format, magic numbers "P3" or "P6")
- +
- + ppm.dev: $(pxm_) gssetdev
- + $(SHP)gssetdev ppm $(pxm_)
- +
- + ppmraw.dev: $(pxm_) gssetdev
- + $(SHP)gssetdev ppmraw $(pxm_)
- +
- + ### -------------------------- TIFF/F device ---------------------------- ###
- + ### This driver outputs images in a TIFF format ###
- + ### Use -sDEVICE=tiffg3 and ###
- + ### -r204x98 for low resolution output, or ###
- + ### -r204x196 for high resolution output ###
- + ### Note also that 3 page sizes are understood: letter, A4, and B4 ###
- + ### Note: this driver was contributed by a user: please contact ###
- + ### Sam Leffler (sam@sgi.com) if you have questions. ###
- +
- + tiffg3_=gdevtiff.$(OBJ) gdevprn.$(OBJ)
- + tiffg3.dev: $(tiffg3_) gssetdev
- + $(SHP)gssetdev tiffg3 $(tiffg3_)
- + gdevtiff.$(OBJ): gdevtiff.c $(GDEV) $(gdevprn_h) gdevdfg3.h gdevtiff.h
- + # Copyright (C) 1990, 1992, 1993 Aladdin Enterprises. All rights reserved.
- + #
- + # This file is part of Ghostscript.
- + #
- + # Ghostscript is distributed in the hope that it will be useful, but
- + # WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
- + # to anyone for the consequences of using it or for whether it serves any
- + # particular purpose or works at all, unless he says so in writing. Refer
- + # to the Ghostscript General Public License for full details.
- + #
- + # Everyone is granted permission to copy, modify and redistribute
- + # Ghostscript, but only under the conditions described in the Ghostscript
- + # General Public License. A copy of this license is supposed to have been
- + # given to you along with Ghostscript so you can know your rights and
- + # responsibilities. It should be in a file named COPYING. Among other
- + # things, the copyright notice and this notice must be preserved on all
- + # copies.
- +
- + # Partial makefile for Ghostscript, common to all Unix configurations.
- +
- + # This is the last part of the makefile for Unix configurations.
- + # Since Unix make doesn't have an 'include' facility, we concatenate
- + # the various parts of the makefile together by brute force (in tar_cat).
- +
- + # The following prevents GNU make from constructing argument lists that
- + # include all environment variables, which can easily be longer than
- + # brain-damaged system V allows.
- +
- + .NOEXPORT:
- +
- + # -------------------------------- Library -------------------------------- #
- +
- + ## The Commodore Amiga
- +
- + amiga__=gp_nofb.$(OBJ) gp_amiga.$(OBJ) gdevpipe.$(OBJ)
- + amiga_.dev: $(amiga__) gssetmod gsaddmod
- + $(SHP)gssetmod amiga_ $(amiga__)
- + $(SHP)gsaddmod amiga_ -fdev pipe
- +
- + gp_amiga.$(OBJ): gp_amiga.c $(AK) $(memory__h) $(string__h) $(gx_h) $(gp_h) \
- +
- + ## The Unix platforms
- +
- + # We have to include a test for the existence of sys/time.h,
- + # because some System V platforms don't have it.
- +
- + # All reasonable Unix platforms.
- + unix__=gp_nofb.$(OBJ) gp_unix.$(OBJ) gdevpipe.$(OBJ)
- + unix_.dev: $(unix__) gssetmod gsaddmod
- + $(SHP)gssetmod unix_ $(unix__)
- + $(SHP)gsaddmod unix_ -fdev pipe
- +
- + gp_unix.$(OBJ): gp_unix.c $(AK) $(memory__h) $(string__h) $(gx_h) $(gp_h) \
- + $(gsutil_h) $(stat__h) $(time__h)
- + if ( test -f /gnu/include/sys/time.h ) then $(CCC) gp_unix.c;\
- + else $(CCC) -DNOSYSTIME gp_unix.c; fi
- +
- + gdevpipe.$(OBJ): gdevpipe.c $(AK) $(stdio__h) $(gstypes_h) \
- + $(filedev_h) $(stream_h)
- +
- + # Brain-damaged System V platforms.
- + sysv__=gp_nofb.$(OBJ) gp_unix.$(OBJ) gp_sysv.$(OBJ)
- + sysv_.dev: $(sysv__) gssetmod
- + $(SHP)gssetmod sysv_ $(sysv__)
- +
- + gp_sysv.$(OBJ): gp_sysv.c $(time__h) $(AK)
- + if ( test -f /gnu/include/sys/time.h ) then $(CCC) gp_sysv.c;\
- + else $(CCC) -DNOSYSTIME gp_sysv.c; fi
- +
- + # -------------------------- Auxiliary programs --------------------------- #
- +
- + ansi2knr$(XE): ansi2knr.c $(stdio__h) $(string__h) $(malloc__h)
- + $(CC) -o ansi2knr$(XE) $(CFLAGS) ansi2knr.c
- +
- + echogs$(XE): echogs.c
- + $(CC) -o echogs$(XE) $(CFLAGS) echogs.c
- +
- + # On the RS/6000 (at least), compiling genarch.c with gcc with -O
- + # produces a buggy executable.
- + genarch$(XE): genarch.c
- + $(CC) -o genarch$(XE) genarch.c
- +
- + genconf$(XE): genconf.c
- + $(CC) -o genconf$(XE) genconf.c
- +
- + # ----------------------------- Main program ------------------------------ #
- +
- + BEGINFILES=
- + CCBEGIN=$(CCC) *.c
- +
- + # Interpreter main program
- +
- + GSAMIGA=gs.$(OBJ) gsmain.$(OBJ) $(INT) $(LIBGS)
- +
- + # The second call on echogs writes a \. This is the only
- + # way to do it that works with all flavors of shell!
- + $(GS)$(XE): $(GSAMIGA) ld.tr echogs $(ALL_DEVS)
- + ./echogs -n - $(CC) $(LDFLAGS) $(XLIBDIRS) -o gs $(GSAMIGA) >_temp_
- + ./echogs -x 205c >>_temp_
- + cat ld.tr >>_temp_
- + ./echogs - $(EXTRALIBS) -lm >>_temp_
- + $(SH) <_temp_
- +
- + # Installation
- +
- + TAGS:
- + etags -t *.c *.h
- +
- + docdir=$(gsdatadir)/doc
- + exdir=$(gsdatadir)/examples
- +
- + install: $(GS)
- + if [ -d $(bindir) ]; then true; else mkdir $(bindir); fi
- + if [ -d $(datadir) ]; then true; else mkdir $(datadir); fi
- + if [ -d $(gsdatadir) ]; then true; else mkdir $(gsdatadir); fi
- + if [ -d $(gsdatadir)/fonts ]; then true; else mkdir $(gsdatadir)/fonts; fi
- + if [ -d $(docdir) ]; then true; else mkdir $(docdir); fi
- + if [ -d $(exdir) ]; then true; else mkdir $(exdir); fi
- + for f in $(GS) gsbj gsdj gslj gslp gsnd bdftops font2c ps2ascii ps2epsi ; do $(INSTALL_PROGRAM) $$f $(bindir)/$$f ; done
- + 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
- + 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
- + for f in chess.ps cheq.ps colorcir.ps golfer.ps escher.ps snowflak.ps tiger.ps ; do $(INSTALL_DATA) $$f $(exdir)/$$f ; done
- diff -rc --new-file ghostscript-2.6.1-fsf/amiga.doc ghostscript-2.6.1-amiga/amiga.doc
- *** ghostscript-2.6.1-fsf/amiga.doc Thu Jan 1 00:00:00 1970
- --- ghostscript-2.6.1-amiga/amiga.doc Wed Feb 2 13:38:30 1994
- ***************
- *** 0 ****
- --- 1,318 ----
- + GNU Ghostscript 2.6.1 Amiga port, revised 29 January 1994
- + =========================================================
- + This port requires:
- +
- + - An Amiga equipped with an '020 CPU or any successor CPU model and and
- + Kickstart 2.04 or higher.
- +
- + - Approx. 4.7 MBytes of hard disk space available.
- +
- + - A minimum of 1 MByte of chip memory, depending on what you will want to
- + do with the interpreter. Printer output requires at least 2 MBytes of
- + contiguous memory (any memory, not necessarily chip memory).
- +
- + - ixemul.library and a bunch of Postscript/Ghostscript fonts.
- +
- +
- + New features in the revised v2.6.1 release
- + ------------------------------------------
- + By public request I have recompiled the program to use the built-in math
- + library, so you no longer need an FPU to run the program. I also took a
- + closer look at the code which tries to determine the printer page
- + resolution: you will no longer have trouble with printers featuring
- + built-in paper tractors. I tried all printer drivers to be found on the
- + Workbench disk to make sure the printer support code really works. Good
- + luck! Some small bugs were ironed out and I also took the time to add
- + support for another two display drivers (the Picasso II driver which
- + requires the Picasso monitor driver v2.14 to work correctly and the
- + `custom' driver which requires asl.library v38 to be installed). The entire
- + program was recompiled using GCC 2.4.5.
- +
- +
- + New Amiga features in release v2.6.1
- + ------------------------------------
- + The v2.6.0 port used to implement only monochrome drivers, the v2.6.1 port
- + supports colour output on most devices, exceptions where noted. You don't
- + need a special brand of graphics hardware expansion, colour output will
- + work on any Amiga model, provided there is enough memory available. All
- + devices capable of doing colour output will reduce the number of colours to
- + be displayed if in dire need of memory. As for the display oriented devices
- + this will go mostly unnoticed as the Ghostscript halftoning algorithms will
- + compensate for any colour reductions. However, printer output quality is
- + very likely to suffer from colour reduction. So, watch out!
- + As the display oriented devices start up in colour output mode, black &
- + white rendering may be slightly slowed. The printer device is configured
- + according to the Preferences settings; `Black & white' will result in
- + monochrome output, `Grayscale 1' and `Grayscale 2' will also produce
- + monochrome output but will internally use a true colour representation of
- + the page, so does `Color'. Please note that `true colour' refers to the
- + Amiga 12 bit colour model, at this time of writing 24 bit colour printing
- + is not yet implemented.
- + The default output device (a super-bitmap window to opened on the
- + default public screen, such as Workbench) will take advantage of the
- + Kickstart 3.0 pen sharing feature if enough colours (eight or more)
- + are available.
- +
- + The v2.6.0 port used to rely on printer drivers to initialize their maximum
- + page size information upon startup. Several users reported problems with
- + certain drivers which would make this information available only after
- + having been asked to do so. The v2.6.1 port now follows the programmers'
- + guidelines how to determine the maximum page size closely. The driver may
- + still complain if configured for `Grayscale 1', `Grayscale 2' or `Color'
- + output and there is not enough memory available for the page to be
- + displayed.
- +
- +
- + Installation
- + ------------
- + Enter the command line interpreter, Create a directory on your hard disk
- + drive, label it "ghostscript". Let's assume that the fully qualified name
- + of this directory will be "Work:ghostscript". Enter this directory and
- + unpack the archive "gs-2.6.1-amiga.lha". This will create the directory
- + "doc" which contains the Ghostscript documentation files, and the directory
- + "examples" which is to hold some Postscript example files. To add the fonts
- + from the Ghostscript distribution (not included in this release) create a
- + directory called "Fonts" in the directory "Work:ghostscript" and copy all
- + the font files into it. You also need the `ixemul.library' included in the
- + Amiga GCC distribution which should be copied to the `Libs:' directory. Now
- + edit your `S:User-Startup' file, adding the following lines:
- +
- + Assign ghostscript: "Work:ghostscript"
- + Path ghostscript: add
- +
- + Save the file back to disk and reboot your machine.
- +
- +
- + Running the interpreter
- + -----------------------
- + Enter the command line interpreter, type "gs" and press return. The
- + interpreter will be loaded and will try to initialize itself. If
- + successfully initialized, a window should have been opened on the Workbench
- + screen. The Shell window now should display the following text:
- +
- + Initializing... done.
- + Ghostscript 2.6.1 (5/28/93)
- + Copyright (C) 1990-1993 Aladdin Enterprises, Menlo Park, CA.
- + All rights reserved.
- + Ghostscript comes with NO WARRANTY: see the file COPYING for details.
- + GS>
- +
- + At the command prompt, enter "(ghostscript:examples/golfer.ps) run" and
- + press return. Click on the `Zoom' button in the top right corner of the
- + window to bring it to full screen size, move the scrollers and watch what
- + will happen. When rendering is finished, the Shell window will display the
- + following text:
- +
- + >>showpage, press <return> to continue<<
- +
- + Press return to erase the contents of the window and to continue. The
- + interpreter will be in interactive mode again, enter "quit" and press
- + return to end this session.
- +
- + For more information refer to the documentation in the "ghostscript:doc"
- + drawer.
- +
- +
- + How to print a document
- + -----------------------
- + As the corresponding Ghostscript device will always keep the entire page in
- + memory the printer need not be capable of strip-printing. The bad news is
- + that the entire page will consume *a lot* of memory. This Amiga port will
- + keep the page in any public memory area, so it will not necessarily eat up
- + precious chip memory. This should make it possible to print pages on Amigas
- + with only 1 MByte of chip memory or less, provided enough fast memory is
- + available.
- +
- + Enter the command line interpreter, type "gs -sDEVICE=amiga_printer" and
- + press return. This will invoke the Ghostscript interpreter with the
- + "amiga_printer" device driver selected as the startup device. When the
- + command prompt appears, enter "(ghostscript:examples/butterfly.ps) run" and
- + press return. The rendered image will be sent to the printer. When printing
- + is finished, press return and enter "quit" to end this session.
- +
- + Note: unless you want Ghostscript to prompt you to press return after each
- + page is printed and ejected you should include "-dNOPAUSE" on the command
- + line.
- +
- +
- + Available device drivers
- + ------------------------
- + This port implements the following nine device drivers:
- +
- + amiga
- +
- + (This is the default output device)
- +
- + Rendering takes place in a super-bitmap window to be opened on the
- + Workbench screen. This window contains scroller handles to move
- + around in the bitmap. Usually, the bitmap will be four times as large
- + as the screen the window opens upon.
- +
- + amiga_low
- +
- + Renders into a low-resolution custom screen.
- +
- + amiga_high
- +
- + Renders into a high-resolution custom screen.
- +
- + amiga_super
- +
- + Renders into a super-high-resolution custom screen.
- +
- + amiga_a2024¹
- +
- + Renders into an A2024 resolution custom screen.
- +
- + amiga_picassoii
- +
- + Renders into a Picasso II custom screen (note: a plain Intuition
- + custom screen will be opened, this driver will not directly access
- + the Picasso II hardware). The Picasso monitor driver v2.14 is
- + required for this driver to work.
- +
- + amiga_custom
- +
- + Unlike the other display drivers which will open screens in
- + predefined resolutions and modes the `amiga_custom' driver will let
- + you select the display mode to use. On first invocation of the driver
- + a screen mode requester will be opened for you to select the display
- + mode to use. The name of the display mode selected will be stored in
- + a local environment variable called "GSCUSTOMMODE". The next time you
- + run the GhostScript interpreter with the `amiga_custom' device
- + selected the device will try to read the contents of the
- + "GSCUSTOMMODE" variable. The list of screen display modes available
- + will be scanned for a mode which name matches the variable. Wildcard
- + patterns are supported, so setting "GSCUSTOMMODE" to "#?lowres#?"
- + will match any screen display mode with the string "lowres" in it,
- + such as "NTSC:LowRes", "PAL:LowRes", etc. If you wish, you could set
- + the global environment variable "GSCUSTOMMODE" to a special value
- + which the `amiga_custom' device will always use. Please note that the
- + screen mode requester will only be opened if no local or global
- + environment variable "GSCUSTOMMODE" is defined.
- +
- + amiga_printer
- +
- + Outputs pages on the currently configured preferences printer.
- + Respects density and resolution settings. Requires a lot of memory to
- + run.
- +
- + amiga_ilbm¹
- +
- + Will prompt for a file name to save the current page contents to. The
- + page will be saved as a standard IFF-ILBM picture, including DPI
- + information, suitable for postprocessing using standard image
- + processing and editing software.
- +
- +
- + ¹) Monochrome output only
- +
- +
- + Properties
- + ----------
- + With Ghostscript 2.6.1 one can specify several driver specific options on
- + the command line. As for the Amiga drivers, they support the following
- + properties:
- +
- + - PageWidth and PageHeight
- +
- + The dimensions of the page to render into. The physical page size
- + Ghostscript will use for rendering is limited by these dimensions. On
- + startup The Amiga drivers will default to a page size roughly equivalent
- + to A4 unless different dimensions are specified. The size definitions may
- + include measuring units (e.g. "-sPageWidth=21cm"), the following units
- + are supported: pt (points, the default if no unit is given), pc (picas),
- + in (inches), cm (centimeters), mm (millimeters), dd (didôt points), cc
- + (ciceros).
- +
- + - OutputFile
- +
- + The amiga_ilbm device pays attention to this property, which it will use
- + to construct the output file names for pages to be saved with. Thus,
- + `-sOutputFile="ram:page"' yields the files "ram:page0001.ilbm",
- + "ram:page0002.ilbm", etc.
- +
- +
- + Not all devices will pay attention to DPI page resolutions.
- +
- +
- + Installing fonts
- + ----------------
- + The Ghostscript distribution includes a number of public-domain or
- + otherwise freely distributable fonts. However, these are mostly of poor
- + quality. In order to install a new font or to replace a font with a
- + different one, the following steps are required:
- +
- + 1. The font must be converted to Ghostscript format. For font files in
- + BDF-format (such as the fonts included in the X-Windows distribution)
- + this requires processing with the "bdftops" script file (syntax is
- + "bdftops <Source file> <Destination file>"). Fonts in standard ASCII text
- + format (".PFA" format) or packed binary file format (".PFB" format), such
- + as most Adobe-Type-1 hinted outline fonts to be purchased from various
- + vendors, need not be converted as this is the native format Ghostscript
- + expects.
- +
- + 2. Copy the resulting output file to the "ghostscript:fonts" drawer, choose
- + a suitable name (see the file "ghostscript:fontmap" for more
- + information).
- +
- + 3. Edit the file "ghostscript:fontmap" to include the font which will make
- + it visible to the interpreter. Read this file carefully as it gives basic
- + hints how to name a font file and how to edit the corresponding font
- + entry.
- +
- +
- + The Workbench window
- + --------------------
- + The default output device (the Workbench window) can be controlled both by
- + mouse and by keyboard:
- +
- + Cursor keys will move the currently visible area of the page, holding
- + down a Shift or Control key will increase the size of the scrolling
- + steps.
- +
- + Control+C and Escape will send the interpreter a signal to terminate
- + processing, so does clicking the window close button.
- +
- + By default the page size will always be four times as large as the
- + currently visible portion of the Workbench screen, see the section entitled
- + "Page sizes and resolutions" for more information.
- +
- +
- + Troubleshooting
- + ---------------
- + This interpreter implementation requires a lot of chip memory to run. In
- + order to assure that enough memory will be available, close any Workbench
- + drawers or Shell windows which are not necessarily require to run the
- + interpreter.
- +
- + Most Postscript documents use hard-coded document page sizes, i.e. the
- + output page size will not be scaled to fit the currently set output page
- + size. In these cases you may want to make use of the Postscript "scale"
- + operator. Say, you wish to preview the file "butterfly.ps" in just half its
- + size. Enter "0.5 dup scale" and press return, now enter "(butterfly.ps)
- + run" and press return; et voilà : the butterfly will be rendered just half
- + as large as usual.
- +
- + Some documents, such as "porsche.ps", contain no "showpage" command to
- + finish the batch job. In this case, type "showpage" and press return or
- + enter "erasepage" and press return to clear the page.
- +
- +
- + About the Amiga port
- + --------------------
- + This port is based on Ghostscript 2.6.1. It was implemented using GCC
- + 2.4.5, so you will have to refer to the file "COPYING" for copying and
- + licensing information.
- +
- + This Amiga port was created by:
- +
- + Olaf `Olsen' Barthel
- + Brabeckstrasse 35
- + D-30559 Hannover
- +
- + Federal Republic of Germany
- +
- + eMail: olsen@sourcery.han.de
- +
- + The source code is included in the "amiga-src" drawer.
- diff -rc --new-file ghostscript-2.6.1-fsf/bdftops ghostscript-2.6.1-amiga/bdftops
- *** ghostscript-2.6.1-fsf/bdftops Tue Oct 22 07:12:14 1991
- --- ghostscript-2.6.1-amiga/bdftops Thu Jan 27 21:39:12 1994
- ***************
- *** 1 ****
- ! gs -q -dNODISPLAY -- bdftops.ps $*
- --- 1,4 ----
- ! .key ARGS/F
- ! .bra {
- ! .ket }
- ! gs -q -dNODISPLAY -- bdftops.ps {ARGS}
- diff -rc --new-file ghostscript-2.6.1-fsf/font2c ghostscript-2.6.1-amiga/font2c
- *** ghostscript-2.6.1-fsf/font2c Tue Feb 25 10:24:34 1992
- --- ghostscript-2.6.1-amiga/font2c Thu Jan 27 21:39:30 1994
- ***************
- *** 1 ****
- ! gs -q -dNODISPLAY -dWRITESYSTEMDICT -- font2c.ps $*
- --- 1,4 ----
- ! .key ARGS/F
- ! .bra {
- ! .ket }
- ! gs -q -dNODISPLAY -dWRITESYSTEMDICT -- font2c.ps {ARGS}
- diff -rc --new-file ghostscript-2.6.1-fsf/gdevamiga.c ghostscript-2.6.1-amiga/gdevamiga.c
- *** ghostscript-2.6.1-fsf/gdevamiga.c Thu Jan 1 00:00:00 1970
- --- ghostscript-2.6.1-amiga/gdevamiga.c Wed Feb 2 13:21:04 1994
- ***************
- *** 0 ****
- --- 1,5537 ----
- + /* Copyright (C) 1992 Aladdin Enterprises. All rights reserved.
- + Distributed by Free Software Foundation, Inc.
- +
- + This file is part of Ghostscript.
- +
- + Ghostscript is distributed in the hope that it will be useful, but
- + WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
- + to anyone for the consequences of using it or for whether it serves any
- + particular purpose or works at all, unless he says so in writing. Refer
- + to the Ghostscript General Public License for full details.
- +
- + Everyone is granted permission to copy, modify and redistribute
- + Ghostscript, but only under the conditions described in the Ghostscript
- + General Public License. A copy of this license is supposed to have been
- + given to you along with Ghostscript so you can know your rights and
- + responsibilities. It should be in a file named COPYING. Among other
- + things, the copyright notice and this notice must be preserved on all
- + copies. */
- +
- + /* gdevamiga.c */
- + /* Amiga driver for Ghostscript library, requires Kickstart 2.04 or higher */
- +
- + /* Written by Olaf `Olsen' Barthel, last change 29 January 1994
- + *
- + * My address: Olaf Barthel
- + * Brabeckstrasse 35
- + * D-30559 Hannover
- + *
- + * eMail: olsen@sourcery.han.de
- + */
- +
- + #define CheckIO foo123
- + #define ushort foo
- +
- + #include <intuition/intuitionbase.h>
- + #include <intuition/gadgetclass.h>
- + #include <intuition/imageclass.h>
- + #include <intuition/icclass.h>
- + #include <graphics/displayinfo.h>
- + #include <libraries/iffparse.h>
- + #include <graphics/gfxbase.h>
- + #include <devices/printer.h>
- + #include <devices/prtbase.h>
- + #include <devices/prtgfx.h>
- + #include <libraries/asl.h>
- + #include <exec/memory.h>
- + #include <clib/macros.h>
- + #include <dos/dostags.h>
- + #include <dos/rdargs.h>
- + #include <dos/var.h>
- + #include <dos/dos.h>
- +
- + #include <clib/intuition_protos.h>
- + #include <clib/graphics_protos.h>
- + #include <clib/iffparse_protos.h>
- + #include <clib/utility_protos.h>
- + #include <clib/layers_protos.h>
- + #include <clib/exec_protos.h>
- + #include <clib/dos_protos.h>
- + #include <clib/asl_protos.h>
- +
- + /*
- + #include <inline/stubs.h>
- + #include <inline/iffparse.h>
- + #include <inline/utility.h>
- + #include <inline/exec.h>
- + #include <inline/dos.h>
- + */
- +
- + #include <string.h>
- + #include <signal.h>
- +
- + #undef ushort
- + #undef CheckIO
- +
- + struct IORequest *CheckIO(struct IORequest *);
- +
- + #include "gx.h" /* for gx_bitmap; includes std.h */
- + #include "gsmatrix.h" /* needed for gxdevice.h */
- + #include "gxdevice.h"
- + #include "gserrors.h"
- + #include "gsprops.h"
- +
- + /* Here is how to select a default page size format:
- + *
- + * Either enter include a line such as
- + *
- + * #define AMIGA_PAGE_A4 1
- + *
- + * Somewhere above in this module, or edit the makefile
- + * to feature the option
- + *
- + * -dAMIGA_PAGE_A4
- + *
- + * among the device specific flags. Available default page
- + * size formats are:
- + *
- + * AMIGA_PAGE_A4 European A4 page size (default)
- + * AMIGA_PAGE_A3 European A3 page size
- + * AMIGA_PAGE_LETTER US letter page size
- + * AMIGA_PAGE_LEGAL US legal page size
- + * AMIGA_PAGE_LEDGER US ledger paper size
- + * AMIGA_PAGE_TABLOID US tabloid paper size
- + */
- +
- + /* Select the default paper size if none specified. */
- +
- + #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)
- + /*#define AMIGA_PAGE_A4 1*/
- + #define AMIGA_PAGE_A3 1
- + #endif /* PAGE SIZE */
- +
- + /* A4 page size (in inches!) */
- +
- + #ifdef AMIGA_PAGE_A4
- + #define DEFAULT_WIDTH 8.2
- + #define DEFAULT_HEIGHT 11.6
- + #endif /* AMIGA_PAGE_A4 */
- +
- + /* A3 page size */
- +
- + #ifdef AMIGA_PAGE_A3
- + #define DEFAULT_WIDTH 11.6
- + #define DEFAULT_HEIGHT 16.5
- + #endif /* AMIGA_PAGE_A4 */
- +
- + /* US letter page size */
- +
- + #ifdef AMIGA_PAGE_LETTER
- + #define DEFAULT_WIDTH 8.5
- + #define DEFAULT_HEIGHT 11.0
- + #endif /* AMIGA_PAGE_LETTER */
- +
- + /* US legal page size */
- +
- + #ifdef AMIGA_PAGE_LEGAL
- + #define DEFAULT_WIDTH 8.5
- + #define DEFAULT_HEIGHT 14.0
- + #endif /* AMIGA_PAGE_LEGAL */
- +
- + /* US ledger page size */
- +
- + #ifdef AMIGA_PAGE_LEDGER
- + #define DEFAULT_WIDTH 16.0
- + #define DEFAULT_HEIGHT 11.0
- + #endif /* AMIGA_PAGE_LEDGER */
- +
- + /* US tabloid page size */
- +
- + #ifdef AMIGA_PAGE_TABLOID
- + #define DEFAULT_WIDTH 11.0
- + #define DEFAULT_HEIGHT 17.0
- + #endif /* AMIGA_PAGE_LEDGER */
- +
- + /* Default output file name. */
- +
- + #define DEFAULT_FILENAME "gs_page"
- +
- + /* Turn a byte into a 24 bit colour value. */
- +
- + #define SPREAD(i) ((ULONG)(i) << 24 | (ULONG)(i) << 16 | (ULONG)(i) << 8 | (i))
- +
- + /* Scroller gadget IDs. */
- +
- + enum { VERTICAL_SCROLLER, HORIZONTAL_SCROLLER,
- + UP_ARROW, DOWN_ARROW,
- + LEFT_ARROW, RIGHT_ARROW,
- +
- + GADGET_COUNT };
- +
- + /* Scroller arrow IDs. */
- +
- + enum { UP_IMAGE, DOWN_IMAGE,
- + LEFT_IMAGE, RIGHT_IMAGE,
- +
- + IMAGE_COUNT };
- +
- + /* Codes for the MoveAround() routine. */
- +
- + enum { MOVE_MIN,MOVE_FAR_DOWN,MOVE_DOWN,MOVE_UP,MOVE_FAR_UP,MOVE_MAX };
- +
- + /* Some handy bit masks. */
- +
- + #define SIG_KILL SIGBREAKF_CTRL_C
- + #define SIG_HANDSHAKE SIGF_SINGLE
- +
- + /* Static dimensions of scroller arrows. */
- +
- + #define ARROW_WIDTH 16
- + #define ARROW_HEIGHT 11
- +
- + /* The `Help' key raw code. */
- +
- + #define HELP_CODE 95
- +
- + /* Minimum window inner area dimension. */
- +
- + #define MINIMUM_WIDTH 64
- + #define MINIMUM_HEIGHT 32
- +
- + /* Handy superbitmap window macros. */
- +
- + #define LAYERXOFFSET(w) ((w) -> RPort -> Layer -> Scroll_X)
- + #define LAYERYOFFSET(w) ((w) -> RPort -> Layer -> Scroll_Y)
- +
- + /* User input to listen to. */
- +
- + #define IDCMP_FLAGS (IDCMP_IDCMPUPDATE | IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_MOUSEMOVE | IDCMP_NEWSIZE | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_RAWKEY)
- +
- + /* Chunk IDs. */
- +
- + #define ID_ILBM MAKE_ID('I','L','B','M')
- + #define ID_BMHD MAKE_ID('B','M','H','D')
- + #define ID_CMAP MAKE_ID('C','M','A','P')
- + #define ID_CAMG MAKE_ID('C','A','M','G')
- + #define ID_ANNO MAKE_ID('A','N','N','O')
- + #define ID_DPI MAKE_ID('D','P','I',' ')
- + #define ID_BODY MAKE_ID('B','O','D','Y')
- +
- + /* Chunk contents definitions. */
- +
- + typedef struct
- + {
- + UWORD w,h; /* raster width & height in pixels */
- + WORD x,y; /* position for this image */
- + UBYTE nPlanes; /* # source bitplanes */
- + UBYTE masking; /* masking technique */
- + UBYTE compression; /* compression algoithm */
- + UBYTE pad1; /* UNUSED. For consistency, put 0 here.*/
- + UWORD transparentColor; /* transparent "color number" */
- + UBYTE xAspect,yAspect; /* aspect ratio, a rational number x/y */
- + WORD pageWidth,pageHeight; /* source "page" size in pixels */
- + } BitMapHeader;
- +
- + typedef struct
- + {
- + UWORD dpi_x;
- + UWORD dpi_y;
- + } DPIHeader;
- +
- + /* Packer modes. */
- +
- + #define DUMP 0
- + #define RUN 1
- +
- + /* Minimum data run size, maximum data run size and maximum cache size. */
- +
- + #define MINRUN 3
- + #define MAXRUN 128
- + #define MAXDAT 128
- +
- + /* This module actually implements four different Amiga based
- + * devices. As the rendering operations are all the same,
- + * one single device definition is sufficient.
- + */
- +
- + typedef struct gx_device_amiga
- + {
- + gx_device_common;
- +
- + struct Screen *screen; /* Any screen */
- + struct Window *window; /* Some window to be opened on the Workbench screen */
- +
- + LONG super_width, /* Superbitmap width */
- + super_height; /* Superbitmap height */
- +
- + struct BitMap *super_bitmap; /* Window superbitmap area */
- + struct Gadget **gadget; /* Scroller gadgets */
- + struct Image **image; /* Scroller arrow images */
- +
- + struct Task *dispatcher; /* Slider dispatch task */
- + struct Process *main; /* Main program */
- +
- + struct RastPort *rport; /* Rendering area */
- +
- + struct IODRPReq *printer; /* Printer interface data */
- + struct MsgPort *port; /* Printer io data */
- +
- + struct ColorMap *colormap; /* A black/white colour map */
- + struct BitMap *bitmap; /* Rendering bitmap data */
- + PLANEPTR bitplane; /* Rendering raster */
- +
- + gx_color_index last_pen; /* The last colour set */
- +
- + float page_width, /* The page width */
- + page_height; /* The page height */
- + char file_name[256];/* The output file name */
- + int page_count; /* The page number counter */
- +
- + int cube_size; /* Colour cube size, 0 for b/w */
- + struct RastPort *temp_rport; /* Temporary raster port for pixmap imaging. */
- + UBYTE *temp_array; /* Temporary colour manipulation array. */
- + LONG *pens;
- + } gx_device_amiga;
- +
- + /* Function prototypes */
- +
- + VOID set_mono_device(gx_device_amiga *dev);
- + VOID set_colour_device(gx_device_amiga *dev,int cube_size,LONG *pens);
- + VOID set_colour_printer_device(gx_device_amiga *dev,LONG CubeSize);
- + VOID DeleteBitMap(struct BitMap *BitMap,BOOL Private);
- + struct BitMap * CreateBitMap(LONG Width,LONG Height,LONG Depth,ULONG Flags,struct BitMap *Friend,BOOL Private);
- + VOID DeleteTempRPort(struct RastPort *Temp);
- + struct RastPort * CreateTempRPort(struct RastPort *Source);
- + LONG Euclid(LONG a,LONG b);
- + BYTE * PutDump(register BYTE *Destination,register LONG Count);
- + BYTE * PutRun(register BYTE *Destination,LONG Count,WORD Char);
- + LONG PackRow(PLANEPTR *SourcePtr,register BYTE *Destination,LONG RowSize);
- + BOOL PutBODY(struct IFFHandle *Handle,struct BitMap *BitMap);
- + BOOL PutANNO(struct IFFHandle *Handle);
- + BOOL PutCAMG(struct IFFHandle *Handle);
- + BOOL PutCMAP(struct IFFHandle *Handle);
- + BOOL PutDPI(struct IFFHandle *Handle,UWORD X_DPI,UWORD Y_DPI);
- + BOOL PutBMHD(struct IFFHandle *Handle,LONG Width,LONG Height,UWORD X_DPI,UWORD Y_DPI);
- + BOOL SaveBitMap(STRPTR Name,struct BitMap *BitMap,LONG Width,LONG Height,UWORD X_DPI,UWORD Y_DPI);
- + float GetInches(STRPTR Buffer);
- + VOID DispatchTask(VOID);
- + VOID DeleteScrollers(gx_device *dev);
- + BOOL CreateScrollers(gx_device *dev,struct Screen *Screen);
- + VOID WindowResize(gx_device *dev);
- + VOID WindowUpdate(struct Gadget *Gadget,gx_device *dev);
- + VOID MoveAround(struct Gadget *Gadget,LONG How,gx_device *dev);
- + VOID DispatchSuperWindow(gx_device *dev);
- + void devcleanup(VOID);
- + gx_color_index amiga_map_rgb_color(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue);
- + int amiga_map_color_rgb(gx_device *dev,gx_color_index color,gx_color_value rgb[3]);
- + LONG * AllocatePens(struct ViewPort *VPort,LONG CubeSize);
- + int amiga_open_default(gx_device *dev);
- + int amiga_open_low(gx_device *dev);
- + int amiga_open_high(gx_device *dev);
- + int amiga_open_super(gx_device *dev);
- + int amiga_open_a2024(gx_device *dev);
- + int amiga_open_picassoii(gx_device *dev);
- + int amiga_open_custom(gx_device *dev);
- + int amiga_open_printer(gx_device *dev);
- + int amiga_output_page_printer(gx_device *dev,int num_copies,int flush);
- + int amiga_close_printer(gx_device *dev);
- + int amiga_get_bits(gx_device *dev,int y,byte *str,byte **actual_data);
- + int amiga_open(gx_device *dev,ULONG Mode);
- + int amiga_output_page(gx_device *dev,int num_copies,int flush);
- + int amiga_close(gx_device *dev);
- + int amiga_fill_rectangle(gx_device *dev,int x,int y,int w,int h,gx_color_index color);
- + 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);
- + 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);
- + int amiga_draw_line(gx_device *dev,int x0,int y0,int x1,int y1,gx_color_index color);
- + 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);
- + 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);
- + int amiga_fill_rectangle_raw(gx_device *dev,int x,int y,int w,int h,gx_color_index color);
- + int amiga_draw_line_raw(gx_device *dev,int x,int y,int x1,int y1,gx_color_index color);
- + int amiga_open_ilbm(gx_device *dev);
- + int amiga_output_page_ilbm(gx_device *dev,int num_copies,int flush);
- + int amiga_close_ilbm(gx_device *dev);
- + int amiga_get_props(gx_device *dev,gs_prop_item *plist);
- + int amiga_put_props(gx_device *dev,gs_prop_item *plist,int count);
- + gx_color_index amiga_color_map_rgb_color(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue);
- + int amiga_color_map_color_rgb(gx_device *dev,gx_color_index color,gx_color_value rgb[3]);
- + gx_color_index amiga_color_map_rgb_color_pen(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue);
- + int amiga_color_map_color_rgb_pen(gx_device *dev,gx_color_index color,gx_color_value rgb[3]);
- + 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);
- + 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);
- + 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);
- + int amiga_fill_rectangle_raw_color(gx_device *dev,int x,int y,int w,int h,gx_color_index color);
- + int amiga_draw_line_raw_color(gx_device *dev,int x,int y,int x1,int y1,gx_color_index color);
- +
- + /* External reference to some libraries, required for version checking, etc. */
- +
- + extern struct GfxBase *GfxBase;
- + extern struct Library *AslBase;
- +
- + /* Number of packed bytes and pack buffer. */
- +
- + LONG PackedBytes;
- + BYTE Buffer[MAXDAT + 1];
- +
- + /* Bit masks. */
- +
- + STATIC UBYTE shift[8] = { 128, 64, 32, 16, 8, 4, 2, 1 },
- + masks[8] = { 127,191,223,239,247,251,253,254 };
- +
- + /* Device routine jump tables */
- +
- + STATIC gx_device_procs amiga_default_procs =
- + {
- + amiga_open_default,
- + gx_default_get_initial_matrix,
- + gx_default_sync_output,
- + amiga_output_page,
- + amiga_close,
- + amiga_map_rgb_color,
- + amiga_map_color_rgb,
- + amiga_fill_rectangle,
- + gx_default_tile_rectangle,
- + amiga_copy_mono,
- + amiga_copy_color,
- + amiga_draw_line,
- + gx_default_get_bits,
- + amiga_get_props,
- + amiga_put_props
- + };
- +
- + STATIC gx_device_procs amiga_low_procs =
- + {
- + amiga_open_low,
- + gx_default_get_initial_matrix,
- + gx_default_sync_output,
- + amiga_output_page,
- + amiga_close,
- + amiga_map_rgb_color,
- + amiga_map_color_rgb,
- + amiga_fill_rectangle,
- + gx_default_tile_rectangle,
- + amiga_copy_mono,
- + amiga_copy_color,
- + amiga_draw_line,
- + gx_default_get_bits,
- + amiga_get_props,
- + amiga_put_props
- + };
- +
- + STATIC gx_device_procs amiga_high_procs =
- + {
- + amiga_open_high,
- + gx_default_get_initial_matrix,
- + gx_default_sync_output,
- + amiga_output_page,
- + amiga_close,
- + amiga_map_rgb_color,
- + amiga_map_color_rgb,
- + amiga_fill_rectangle,
- + gx_default_tile_rectangle,
- + amiga_copy_mono,
- + amiga_copy_color,
- + amiga_draw_line,
- + gx_default_get_bits,
- + amiga_get_props,
- + amiga_put_props
- + };
- +
- + STATIC gx_device_procs amiga_super_procs =
- + {
- + amiga_open_super,
- + gx_default_get_initial_matrix,
- + gx_default_sync_output,
- + amiga_output_page,
- + amiga_close,
- + amiga_map_rgb_color,
- + amiga_map_color_rgb,
- + amiga_fill_rectangle,
- + gx_default_tile_rectangle,
- + amiga_copy_mono,
- + amiga_copy_color,
- + amiga_draw_line,
- + gx_default_get_bits,
- + amiga_get_props,
- + amiga_put_props
- + };
- +
- + STATIC gx_device_procs amiga_a2024_procs =
- + {
- + amiga_open_a2024,
- + gx_default_get_initial_matrix,
- + gx_default_sync_output,
- + amiga_output_page,
- + amiga_close,
- + amiga_map_rgb_color,
- + amiga_map_color_rgb,
- + amiga_fill_rectangle,
- + gx_default_tile_rectangle,
- + amiga_copy_mono,
- + amiga_copy_color,
- + amiga_draw_line,
- + gx_default_get_bits,
- + amiga_get_props,
- + amiga_put_props
- + };
- +
- + STATIC gx_device_procs amiga_picassoii_procs =
- + {
- + amiga_open_picassoii,
- + gx_default_get_initial_matrix,
- + gx_default_sync_output,
- + amiga_output_page,
- + amiga_close,
- + amiga_map_rgb_color,
- + amiga_map_color_rgb,
- + amiga_fill_rectangle,
- + gx_default_tile_rectangle,
- + amiga_copy_mono,
- + amiga_copy_color,
- + amiga_draw_line,
- + gx_default_get_bits,
- + amiga_get_props,
- + amiga_put_props
- + };
- +
- + STATIC gx_device_procs amiga_custom_procs =
- + {
- + amiga_open_custom,
- + gx_default_get_initial_matrix,
- + gx_default_sync_output,
- + amiga_output_page,
- + amiga_close,
- + amiga_map_rgb_color,
- + amiga_map_color_rgb,
- + amiga_fill_rectangle,
- + gx_default_tile_rectangle,
- + amiga_copy_mono,
- + amiga_copy_color,
- + amiga_draw_line,
- + gx_default_get_bits,
- + amiga_get_props,
- + amiga_put_props
- + };
- +
- + STATIC gx_device_procs amiga_printer_procs =
- + {
- + amiga_open_printer,
- + gx_default_get_initial_matrix,
- + gx_default_sync_output,
- + amiga_output_page_printer,
- + amiga_close_printer,
- + amiga_map_rgb_color,
- + amiga_map_color_rgb,
- + amiga_fill_rectangle_raw,
- + gx_default_tile_rectangle,
- + amiga_copy_mono_raw,
- + amiga_copy_color_raw,
- + amiga_draw_line_raw,
- + amiga_get_bits,
- + amiga_get_props,
- + amiga_put_props
- + };
- +
- + STATIC gx_device_procs amiga_ilbm_procs =
- + {
- + amiga_open_ilbm,
- + gx_default_get_initial_matrix,
- + gx_default_sync_output,
- + amiga_output_page_ilbm,
- + amiga_close_ilbm,
- + amiga_map_rgb_color,
- + amiga_map_color_rgb,
- + amiga_fill_rectangle_raw,
- + gx_default_tile_rectangle,
- + amiga_copy_mono_raw,
- + amiga_copy_color_raw,
- + amiga_draw_line_raw,
- + amiga_get_bits,
- + amiga_get_props,
- + amiga_put_props
- + };
- +
- + /* Default device: opens a window on the Workbench screen and renders into it */
- +
- + gx_device_amiga gs_amiga_device =
- + {
- + sizeof(gx_device_amiga), /* params_size */
- + &amiga_default_procs, /* procs */
- + "amiga", /* dname */
- + 0, 0, /* width, height */
- + 72.27, 72.27, /* xdpi, ydpi */
- + no_margins, /* margins */
- + dci_black_and_white, /* color info */
- + 0, /* is_open */
- +
- + NULL, /* screen */
- + NULL, /* window */
- +
- + 0, /* super_width */
- + 0, /* super_height */
- + NULL, /* super_bitmap */
- + NULL, /* gadget */
- + NULL, /* image */
- +
- + NULL, /* dispatcher */
- + NULL, /* main */
- +
- + NULL, /* rport */
- +
- + NULL, /* printer */
- + NULL, /* port */
- + NULL, /* colormap */
- + NULL, /* bitmap */
- + NULL, /* bitplane */
- +
- + 1, /* last_pen */
- +
- + DEFAULT_WIDTH, /* page width */
- + DEFAULT_HEIGHT, /* page height */
- + DEFAULT_FILENAME, /* output file */
- + 1, /* page counter */
- +
- + 0, /* cube_size */
- + NULL, /* temp_rport */
- + NULL, /* temp_array */
- + NULL /* pens */
- + };
- +
- + /* Low resolution device: opens a lores custom screen and renders into it */
- +
- + gx_device_amiga gs_amiga_low_device =
- + {
- + sizeof(gx_device_amiga), /* params_size */
- + &amiga_low_procs, /* procs */
- + "amiga_low", /* dname */
- + 0, 0, /* width, height */
- + 72.27, 72.27, /* xdpi, ydpi */
- + no_margins, /* margins */
- + dci_black_and_white, /* color info */
- + 0, /* is_open */
- +
- + NULL, /* screen */
- + NULL, /* window */
- +
- + 0, /* super_width */
- + 0, /* super_height */
- + NULL, /* super_bitmap */
- + NULL, /* gadget */
- + NULL, /* image */
- +
- + NULL, /* dispatcher */
- + NULL, /* main */
- +
- + NULL, /* rport */
- +
- + NULL, /* printer */
- + NULL, /* port */
- + NULL, /* colormap */
- + NULL, /* bitmap */
- + NULL, /* bitplane */
- +
- + 1, /* last_pen */
- +
- + DEFAULT_WIDTH, /* page width */
- + DEFAULT_HEIGHT, /* page height */
- + DEFAULT_FILENAME, /* output file */
- + 1, /* page counter */
- +
- + 0, /* cube_size */
- + NULL, /* temp_rport */
- + NULL, /* temp_array */
- + NULL /* pens */
- + };
- +
- + /* High resolution device: opens a highres-interlaced custom screen */
- +
- + gx_device_amiga gs_amiga_high_device =
- + {
- + sizeof(gx_device_amiga), /* params_size */
- + &amiga_high_procs, /* procs */
- + "amiga_high", /* dname */
- + 0, 0, /* width, height */
- + 72.27, 72.27, /* xdpi, ydpi */
- + no_margins, /* margins */
- + dci_black_and_white, /* color info */
- + 0, /* is_open */
- +
- + NULL, /* screen */
- + NULL, /* window */
- +
- + 0, /* super_width */
- + 0, /* super_height */
- + NULL, /* super_bitmap */
- + NULL, /* gadget */
- + NULL, /* image */
- +
- + NULL, /* dispatcher */
- + NULL, /* main */
- +
- + NULL, /* rport */
- +
- + NULL, /* printer */
- + NULL, /* port */
- + NULL, /* colormap */
- + NULL, /* bitmap */
- + NULL, /* bitplane */
- +
- + 1, /* last_pen */
- +
- + DEFAULT_WIDTH, /* page width */
- + DEFAULT_HEIGHT, /* page height */
- + DEFAULT_FILENAME, /* output file */
- + 1, /* page counter */
- +
- + 0, /* cube_size */
- + NULL, /* temp_rport */
- + NULL, /* temp_array */
- + NULL /* pens */
- + };
- +
- + /* Super high resolution device: opens a super-highres-interlaced custom screen */
- +
- + gx_device_amiga gs_amiga_super_device =
- + {
- + sizeof(gx_device_amiga), /* params_size */
- + &amiga_super_procs, /* procs */
- + "amiga_super", /* dname */
- + 0, 0, /* width, height */
- + 72.27, 72.27, /* xdpi, ydpi */
- + no_margins, /* margins */
- + dci_black_and_white, /* color info */
- + 0, /* is_open */
- +
- + NULL, /* screen */
- + NULL, /* window */
- +
- + 0, /* super_width */
- + 0, /* super_height */
- + NULL, /* super_bitmap */
- + NULL, /* gadget */
- + NULL, /* image */
- +
- + NULL, /* dispatcher */
- + NULL, /* main */
- +
- + NULL, /* rport */
- +
- + NULL, /* printer */
- + NULL, /* port */
- + NULL, /* colormap */
- + NULL, /* bitmap */
- + NULL, /* bitplane */
- +
- + 1, /* last_pen */
- +
- + DEFAULT_WIDTH, /* page width */
- + DEFAULT_HEIGHT, /* page height */
- + DEFAULT_FILENAME, /* output file */
- + 1, /* page counter */
- +
- + 0, /* cube_size */
- + NULL, /* temp_rport */
- + NULL, /* temp_array */
- + NULL /* pens */
- + };
- +
- + /* A2024 device: opens an A2024 custom screen */
- +
- + gx_device_amiga gs_amiga_a2024_device =
- + {
- + sizeof(gx_device_amiga), /* params_size */
- + &amiga_a2024_procs, /* procs */
- + "amiga_a2024", /* dname */
- + 0, 0, /* width, height */
- + 72.27, 72.27, /* xdpi, ydpi */
- + no_margins, /* margins */
- + dci_black_and_white, /* color info */
- + 0, /* is_open */
- +
- + NULL, /* screen */
- + NULL, /* window */
- +
- + 0, /* super_width */
- + 0, /* super_height */
- + NULL, /* super_bitmap */
- + NULL, /* gadget */
- + NULL, /* image */
- +
- + NULL, /* dispatcher */
- + NULL, /* main */
- +
- + NULL, /* rport */
- +
- + NULL, /* printer */
- + NULL, /* port */
- + NULL, /* colormap */
- + NULL, /* bitmap */
- + NULL, /* bitplane */
- +
- + 1, /* last_pen */
- +
- + DEFAULT_WIDTH, /* page width */
- + DEFAULT_HEIGHT, /* page height */
- + DEFAULT_FILENAME, /* output file */
- + 1, /* page counter */
- +
- + 0, /* cube_size */
- + NULL, /* temp_rport */
- + NULL, /* temp_array */
- + NULL /* pens */
- + };
- +
- + /* Picasso II device: opens a Picasso II custom screen */
- +
- + gx_device_amiga gs_amiga_picassoii_device =
- + {
- + sizeof(gx_device_amiga), /* params_size */
- + &amiga_picassoii_procs, /* procs */
- + "amiga_picassoii", /* dname */
- + 0, 0, /* width, height */
- + 72.27, 72.27, /* xdpi, ydpi */
- + no_margins, /* margins */
- + dci_black_and_white, /* color info */
- + 0, /* is_open */
- +
- + NULL, /* screen */
- + NULL, /* window */
- +
- + 0, /* super_width */
- + 0, /* super_height */
- + NULL, /* super_bitmap */
- + NULL, /* gadget */
- + NULL, /* image */
- +
- + NULL, /* dispatcher */
- + NULL, /* main */
- +
- + NULL, /* rport */
- +
- + NULL, /* printer */
- + NULL, /* port */
- + NULL, /* colormap */
- + NULL, /* bitmap */
- + NULL, /* bitplane */
- +
- + 1, /* last_pen */
- +
- + DEFAULT_WIDTH, /* page width */
- + DEFAULT_HEIGHT, /* page height */
- + DEFAULT_FILENAME, /* output file */
- + 1, /* page counter */
- +
- + 0, /* cube_size */
- + NULL, /* temp_rport */
- + NULL, /* temp_array */
- + NULL /* pens */
- + };
- +
- + /* Custom device: opens a custom screen, will ask for screen mode or check env variable. */
- +
- + gx_device_amiga gs_amiga_custom_device =
- + {
- + sizeof(gx_device_amiga), /* params_size */
- + &amiga_custom_procs, /* procs */
- + "amiga_custom", /* dname */
- + 0, 0, /* width, height */
- + 72.27, 72.27, /* xdpi, ydpi */
- + no_margins, /* margins */
- + dci_black_and_white, /* color info */
- + 0, /* is_open */
- +
- + NULL, /* screen */
- + NULL, /* window */
- +
- + 0, /* super_width */
- + 0, /* super_height */
- + NULL, /* super_bitmap */
- + NULL, /* gadget */
- + NULL, /* image */
- +
- + NULL, /* dispatcher */
- + NULL, /* main */
- +
- + NULL, /* rport */
- +
- + NULL, /* printer */
- + NULL, /* port */
- + NULL, /* colormap */
- + NULL, /* bitmap */
- + NULL, /* bitplane */
- +
- + 1, /* last_pen */
- +
- + DEFAULT_WIDTH, /* page width */
- + DEFAULT_HEIGHT, /* page height */
- + DEFAULT_FILENAME, /* output file */
- + 1, /* page counter */
- +
- + 0, /* cube_size */
- + NULL, /* temp_rport */
- + NULL, /* temp_array */
- + NULL /* pens */
- + };
- +
- + /* Printer device: renders the imagery and sends it to the printer */
- +
- + gx_device_amiga gs_amiga_printer_device =
- + {
- + sizeof(gx_device_amiga), /* params_size */
- + &amiga_printer_procs, /* procs */
- + "amiga_printer", /* dname */
- + 0, 0, /* width, height */
- + 72.27, 72.27, /* xdpi, ydpi */
- + no_margins, /* margins */
- + dci_black_and_white, /* color info */
- + 0, /* is_open */
- +
- + NULL, /* screen */
- + NULL, /* window */
- +
- + 0, /* super_width */
- + 0, /* super_height */
- + NULL, /* super_bitmap */
- + NULL, /* gadget */
- + NULL, /* image */
- +
- + NULL, /* dispatcher */
- + NULL, /* main */
- +
- + NULL, /* rport */
- +
- + NULL, /* printer */
- + NULL, /* port */
- + NULL, /* colormap */
- + NULL, /* bitmap */
- + NULL, /* bitplane */
- +
- + 1, /* last_pen */
- +
- + DEFAULT_WIDTH, /* page width */
- + DEFAULT_HEIGHT, /* page height */
- + DEFAULT_FILENAME, /* output file */
- + 1, /* page counter */
- +
- + 0, /* cube_size */
- + NULL, /* temp_rport */
- + NULL, /* temp_array */
- + NULL /* pens */
- + };
- +
- + /* ILBM device: renders the imagery and saves it to an IFF-ILBM file. */
- +
- + gx_device_amiga gs_amiga_ilbm_device =
- + {
- + sizeof(gx_device_amiga), /* params_size */
- + &amiga_ilbm_procs, /* procs */
- + "amiga_ilbm", /* dname */
- + 0, 0, /* width, height */
- + 72.27, 72.27, /* xdpi, ydpi */
- + no_margins, /* margins */
- + dci_black_and_white, /* color info */
- + 0, /* is_open */
- +
- + NULL, /* screen */
- + NULL, /* window */
- +
- + 0, /* super_width */
- + 0, /* super_height */
- + NULL, /* super_bitmap */
- + NULL, /* gadget */
- + NULL, /* image */
- +
- + NULL, /* dispatcher */
- + NULL, /* main */
- +
- + NULL, /* rport */
- +
- + NULL, /* printer */
- + NULL, /* port */
- + NULL, /* colormap */
- + NULL, /* bitmap */
- + NULL, /* bitplane */
- +
- + 1, /* last_pen */
- +
- + DEFAULT_WIDTH, /* page width */
- + DEFAULT_HEIGHT, /* page height */
- + DEFAULT_FILENAME, /* output file */
- + 1, /* page counter */
- +
- + 0, /* cube_size */
- + NULL, /* temp_rport */
- + NULL, /* temp_array */
- + NULL /* pens */
- + };
- +
- + /* Dark (black) and light (white) rendering colours; the default device
- + * determines the actual colours to be used by looking into the screen
- + * colour lookup table, the other device drivers leave these values
- + * untouched.
- + */
- +
- + STATIC UBYTE DarkPen = 0,
- + LightPen = 1;
- +
- + /* Cheap, but effective ;-) */
- +
- + #define xdev ((gx_device_amiga *)dev)
- +
- + /* set_mono_device(gx_device_amiga *dev,int cube_size,LONG *pens):
- + *
- + * Reconfigure a device for monochrome output.
- + */
- +
- + VOID
- + set_mono_device(gx_device_amiga *dev)
- + {
- + xdev -> color_info . depth = 1;
- + xdev -> color_info . num_components = 1;
- + xdev -> color_info . max_gray = 1;
- + xdev -> color_info . max_rgb = 0;
- + xdev -> color_info . dither_gray = 2;
- + xdev -> color_info . dither_rgb = 0;
- +
- + xdev -> procs -> copy_color = amiga_copy_color;
- + xdev -> procs -> map_rgb_color = amiga_map_rgb_color;
- + xdev -> procs -> map_color_rgb = amiga_map_color_rgb;
- +
- + xdev -> cube_size = 0;
- + }
- +
- + /* set_colour_device(gx_device_amiga *dev,int cube_size,LONG *pens):
- + *
- + * Reconfigure a device for colour output.
- + */
- +
- + VOID
- + set_colour_device(gx_device_amiga *dev,int cube_size,LONG *pens)
- + {
- + xdev -> color_info . depth = 8;
- + xdev -> color_info . num_components = 3;
- + xdev -> color_info . max_gray = cube_size - 1;
- + xdev -> color_info . max_rgb = cube_size - 1;
- + xdev -> color_info . dither_gray = cube_size;
- + xdev -> color_info . dither_rgb = cube_size;
- +
- + xdev -> procs -> copy_color = amiga_copy_color8;
- +
- + /* Any colours to be remapped? */
- +
- + if(pens)
- + {
- + xdev -> procs -> map_rgb_color = amiga_color_map_rgb_color_pen;
- + xdev -> procs -> map_color_rgb = amiga_color_map_color_rgb_pen;
- + xdev -> pens = pens;
- + }
- + else
- + {
- + xdev -> procs -> map_rgb_color = amiga_color_map_rgb_color;
- + xdev -> procs -> map_color_rgb = amiga_color_map_color_rgb;
- + }
- +
- + /* Remember the size of the RGB cube. */
- +
- + xdev -> cube_size = cube_size;
- + }
- +
- + /* set_colour_printer_device(gx_device_amiga *dev,LONG CubeSize):
- + *
- + * Configure the printer device for colour output.
- + */
- +
- + VOID
- + set_colour_printer_device(gx_device_amiga *dev,LONG CubeSize)
- + {
- + xdev -> color_info . depth = 16;
- + xdev -> color_info . num_components = 3;
- + xdev -> color_info . max_gray = CubeSize - 1;
- + xdev -> color_info . max_rgb = CubeSize - 1;
- + xdev -> color_info . dither_gray = CubeSize;
- + xdev -> color_info . dither_rgb = CubeSize;
- +
- + xdev -> procs -> fill_rectangle = amiga_fill_rectangle_raw_color;
- + xdev -> procs -> copy_mono = amiga_copy_mono_raw_color;
- + xdev -> procs -> copy_color = amiga_copy_color_raw_color16;
- + xdev -> procs -> draw_line = amiga_draw_line_raw_color;
- + xdev -> procs -> get_bits = gx_default_get_bits;
- + xdev -> procs -> map_rgb_color = amiga_color_map_rgb_color;
- + xdev -> procs -> map_color_rgb = amiga_color_map_color_rgb;
- + xdev -> cube_size = CubeSize;
- + }
- +
- + /* DeleteBitMap(struct BitMap *BitMap,BOOL Private):
- + *
- + * Free memory associated with a custom rendering bitmap.
- + */
- +
- + VOID
- + DeleteBitMap(struct BitMap *BitMap,BOOL Private)
- + {
- + if(GfxBase -> LibNode . lib_Version >= 39 && !Private)
- + FreeBitMap(BitMap);
- + else
- + {
- + LONG i;
- +
- + for(i = 0 ; i < BitMap -> Depth ; i++)
- + {
- + if(BitMap -> Planes[i])
- + FreeVec(BitMap -> Planes[i]);
- + }
- +
- + FreeVec(BitMap);
- + }
- + }
- +
- + /* CreateBitMap(LONG Width,LONG Height,LONG Depth,ULONG Flags,struct BitMap *Friend,BOOL Private):
- + *
- + * Create a custom rendering bitmap.
- + */
- +
- + struct BitMap *
- + CreateBitMap(LONG Width,LONG Height,LONG Depth,ULONG Flags,struct BitMap *Friend,BOOL Private)
- + {
- + if(GfxBase -> LibNode . lib_Version >= 39 && !Private)
- + return(AllocBitMap(Width,Height,Depth,Flags,Friend));
- + else
- + {
- + struct BitMap *BitMap;
- + LONG Plus;
- + ULONG MemType;
- +
- + /* Bitmap structure needs to be padded if more
- + * than the standard eight bitplanes are to be
- + * allocated.
- + */
- +
- + if(Depth > 8)
- + Plus = (Depth - 8) * sizeof(PLANEPTR);
- + else
- + Plus = 0;
- +
- + if(Private)
- + MemType = MEMF_ANY;
- + else
- + MemType = MEMF_CHIP;
- +
- + if(BitMap = (struct BitMap *)AllocVec(sizeof(struct BitMap) + Plus,MEMF_ANY | MEMF_CLEAR))
- + {
- + LONG i,PageSize;
- +
- + InitBitMap(BitMap,Depth,Width,Height);
- +
- + PageSize = BitMap -> BytesPerRow * BitMap -> Rows;
- +
- + for(i = 0 ; i < BitMap -> Depth ; i++)
- + {
- + if(!(BitMap -> Planes[i] = (PLANEPTR)AllocVec(PageSize,MemType)))
- + {
- + LONG j;
- +
- + for(j = 0 ; j < i ; j++)
- + FreeVec(BitMap -> Planes[j]);
- +
- + FreeVec(BitMap);
- +
- + return(NULL);
- + }
- + }
- +
- + return(BitMap);
- + }
- + }
- + }
- +
- + /* DeleteTempRPort(struct RastPort *Temp):
- + *
- + * Free memory associated with a temporary raster port.
- + */
- +
- + VOID
- + DeleteTempRPort(struct RastPort *Temp)
- + {
- + DeleteBitMap(Temp -> BitMap,FALSE);
- +
- + FreeVec(Temp);
- + }
- +
- + /* CreateTempRPort(struct RastPort *Source):
- + *
- + * Allocate memory for temporary raster port (one line high).
- + */
- +
- + struct RastPort *
- + CreateTempRPort(struct RastPort *Source)
- + {
- + struct RastPort *Temp;
- +
- + if(Temp = (struct RastPort *)AllocVec(sizeof(struct RastPort),MEMF_ANY))
- + {
- + LONG Width,Depth;
- +
- + CopyMem(Source,Temp,sizeof(struct RastPort));
- +
- + Temp -> Layer = NULL;
- +
- + if(GfxBase -> LibNode . lib_Version >= 39)
- + {
- + Width = GetBitMapAttr(Source -> BitMap,BMA_WIDTH);
- + Depth = GetBitMapAttr(Source -> BitMap,BMA_DEPTH);
- + }
- + else
- + {
- + Width = Source -> BitMap -> BytesPerRow * 8;
- + Depth = Source -> BitMap -> Depth;
- + }
- +
- + if(Temp -> BitMap = CreateBitMap(Width,1,Depth,NULL,Source -> BitMap,FALSE))
- + return(Temp);
- + else
- + FreeVec(Temp);
- + }
- +
- + return(NULL);
- + }
- +
- + /* Euclid(LONG a,LONG b):
- + *
- + * Compute the greatest common divisor of two integers.
- + */
- +
- + LONG
- + Euclid(LONG a,LONG b)
- + {
- + do
- + {
- + if(a < b)
- + {
- + LONG t;
- +
- + t = a;
- + a = b;
- + b = t;
- + }
- +
- + a = a % b;
- + }
- + while(a);
- +
- + return(b);
- + }
- +
- + /* PutDump(register BYTE *Destination,register LONG Count):
- + *
- + * Store a byte dump.
- + */
- +
- + BYTE *
- + PutDump(register BYTE *Destination,register LONG Count)
- + {
- + register BYTE *Source = Buffer;
- +
- + *Destination++ = Count - 1;
- + PackedBytes += Count + 1;
- +
- + while(Count--)
- + *Destination++ = *Source++;
- +
- + return(Destination);
- + }
- +
- + /* PutRun(register BYTE *Destination,LONG Count,WORD Char):
- + *
- + * Store a byte run.
- + */
- +
- + BYTE *
- + PutRun(register BYTE *Destination,LONG Count,WORD Char)
- + {
- + *Destination++ = -(Count - 1);
- + *Destination++ = Char;
- + PackedBytes += 2;
- +
- + return(Destination);
- + }
- +
- + /* PackRow(PLANEPTR *SourcePtr,register BYTE *Destination,LONG RowSize):
- + *
- + * Pack a raster line using the CmpByteRun1 algorithm.
- + */
- +
- + LONG
- + PackRow(PLANEPTR *SourcePtr,register BYTE *Destination,LONG RowSize)
- + {
- + register BYTE *Source = *SourcePtr;
- +
- + WORD Buffered = 1,
- + RunStart = 0;
- + BYTE Mode = DUMP,
- + LastChar,
- + Char;
- +
- + PackedBytes = 0;
- +
- + Buffer[0] = LastChar = Char = *Source++;
- +
- + RowSize--;
- +
- + while(RowSize--)
- + {
- + Buffer[Buffered++] = Char = *Source++;
- +
- + if(Mode)
- + {
- + if((Char != LastChar) || (Buffered - RunStart > MAXRUN))
- + {
- + Destination = PutRun(Destination,Buffered - 1 - RunStart,LastChar);
- + Buffer[0] = Char;
- + Buffered = 1;
- + RunStart = 0;
- + Mode = DUMP;
- + }
- + }
- + else
- + {
- + if(Buffered > MAXDAT)
- + {
- + Destination = PutDump(Destination,Buffered - 1);
- + Buffer[0] = Char;
- + Buffered = 1;
- + RunStart = 0;
- + }
- + else
- + {
- + if(Char == LastChar)
- + {
- + if(Buffered - RunStart >= MINRUN)
- + {
- + if(RunStart)
- + Destination = PutDump(Destination,RunStart);
- +
- + Mode = RUN;
- + }
- + else
- + {
- + if(!RunStart)
- + Mode = RUN;
- + }
- + }
- + else
- + RunStart = Buffered - 1;
- + }
- + }
- +
- + LastChar = Char;
- + }
- +
- + if(Mode)
- + PutRun(Destination,Buffered - RunStart,LastChar);
- + else
- + PutDump(Destination,Buffered);
- +
- + *SourcePtr = Source;
- +
- + return(PackedBytes);
- + }
- +
- + /* PutBODY(struct IFFHandle *Handle,struct BitMap *BitMap):
- + *
- + * Store a bitmap in a BODY chunk.
- + */
- +
- + BOOL
- + PutBODY(struct IFFHandle *Handle,struct BitMap *BitMap)
- + {
- + PLANEPTR *Planes;
- + BYTE *PackBuffer;
- + BOOL Success = FALSE;
- + LONG PackedBytes,
- + i,j;
- +
- + /* Allocate the bitplane information. */
- +
- + if(Planes = (PLANEPTR *)AllocVec(BitMap -> Depth * sizeof(PLANEPTR *),MEMF_ANY | MEMF_CLEAR))
- + {
- + /* Allocate the compression buffer. */
- +
- + if(PackBuffer = (BYTE *)AllocVec(BitMap -> BytesPerRow * 2,MEMF_ANY))
- + {
- + /* Copy the planes over. */
- +
- + for(i = 0 ; i < BitMap -> Depth ; i++)
- + Planes[i] = BitMap -> Planes[i];
- +
- + if(!PushChunk(Handle,0,ID_BODY,IFFSIZE_UNKNOWN))
- + {
- + Success = TRUE;
- +
- + /* Run down the rows. */
- +
- + for(i = 0 ; Success && i < BitMap -> Rows ; i++)
- + {
- + for(j = 0 ; Success && j < BitMap -> Depth ; j++)
- + {
- + /* Pack the data. */
- +
- + PackedBytes = PackRow(&Planes[j],PackBuffer,BitMap -> BytesPerRow);
- +
- + /* Write it to disk. */
- +
- + if(WriteChunkRecords(Handle,PackBuffer,PackedBytes,1) != 1)
- + Success = FALSE;
- + }
- + }
- +
- + if(PopChunk(Handle))
- + Success = FALSE;
- + }
- +
- + FreeVec(PackBuffer);
- + }
- +
- + FreeVec(Planes);
- + }
- +
- + return(Success);
- + }
- +
- + /* PutANNO(struct IFFHandle *Handle):
- + *
- + * Store annotation chunk.
- + */
- +
- + BOOL
- + PutANNO(struct IFFHandle *Handle)
- + {
- + STATIC STRPTR Note = "Rendered by GNU Ghostscript 2.6.0";
- +
- + if(!PushChunk(Handle,0,ID_ANNO,strlen(Note)))
- + {
- + if(WriteChunkRecords(Handle,Note,strlen(Note),1) == 1)
- + {
- + if(!PopChunk(Handle))
- + return(TRUE);
- + }
- + }
- +
- + return(FALSE);
- + }
- +
- + /* PutCAMG(struct IFFHandle *Handle):
- + *
- + * Store display mode chunk.
- + */
- +
- + BOOL
- + PutCAMG(struct IFFHandle *Handle)
- + {
- + ULONG ViewModes = HIRESLACE_KEY;
- +
- + if(!PushChunk(Handle,0,ID_CAMG,sizeof(ULONG)))
- + {
- + if(WriteChunkRecords(Handle,&ViewModes,sizeof(ULONG),1) == 1)
- + {
- + if(!PopChunk(Handle))
- + return(TRUE);
- + }
- + }
- +
- + return(FALSE);
- + }
- +
- + /* PutCMAP(struct IFFHandle *Handle):
- + *
- + * Store colour map chunk.
- + */
- +
- + BOOL
- + PutCMAP(struct IFFHandle *Handle)
- + {
- + STATIC UBYTE Colours[2][3] =
- + {
- + 0x00,0x00,0x00,
- + 0xFF,0xFF,0xFF
- + };
- +
- + if(!PushChunk(Handle,0,ID_CMAP,sizeof(Colours)))
- + {
- + if(WriteChunkRecords(Handle,Colours,2,3) == 3)
- + {
- + if(!PopChunk(Handle))
- + return(TRUE);
- + }
- + }
- +
- + return(FALSE);
- + }
- +
- + /* PutDPI(struct IFFHandle *Handle,UWORD X_DPI,UWORD Y_DPI):
- + *
- + * Store DPI chunk.
- + */
- +
- + BOOL
- + PutDPI(struct IFFHandle *Handle,UWORD X_DPI,UWORD Y_DPI)
- + {
- + DPIHeader Header;
- +
- + Header . dpi_x = X_DPI;
- + Header . dpi_y = Y_DPI;
- +
- + if(!PushChunk(Handle,0,ID_DPI,sizeof(Header)))
- + {
- + if(WriteChunkRecords(Handle,&Header,sizeof(Header),1) == 1)
- + {
- + if(!PopChunk(Handle))
- + return(TRUE);
- + }
- + }
- +
- + return(FALSE);
- + }
- +
- + /* PutBMHD(struct IFFHandle *Handle,LONG Width,LONG Height,UWORD X_DPI,UWORD Y_DPI):
- + *
- + * Store BMHD chunk.
- + */
- +
- + BOOL
- + PutBMHD(struct IFFHandle *Handle,LONG Width,LONG Height,UWORD X_DPI,UWORD Y_DPI)
- + {
- + /* Valid parameters? */
- +
- + if(X_DPI > 0 && Y_DPI > 0 && Width > 0 && Height > 0)
- + {
- + BitMapHeader Header;
- + UWORD gcd;
- +
- + /* So we can store neat & small
- + * aspect ration values.
- + */
- +
- + gcd = Euclid(X_DPI,Y_DPI);
- +
- + Header . w = Width;
- + Header . h = Height;
- + Header . pageWidth = Width;
- + Header . pageHeight = Height;
- + Header . x = 0;
- + Header . y = 0;
- + Header . nPlanes = 1;
- + Header . masking = 0;
- + Header . compression = 1;
- + Header . pad1 = 0;
- + Header . transparentColor = 0;
- + Header . xAspect = X_DPI / gcd;
- + Header . yAspect = Y_DPI / gcd;
- +
- + if(!PushChunk(Handle,0,ID_BMHD,sizeof(Header)))
- + {
- + if(WriteChunkRecords(Handle,&Header,sizeof(Header),1) == 1)
- + {
- + if(!PopChunk(Handle))
- + return(TRUE);
- + }
- + }
- + }
- +
- + return(FALSE);
- + }
- +
- + /* SaveBitMap(STRPTR Name,struct BitMap *BitMap,LONG Width,LONG Height,UWORD X_DPI,UWORD Y_DPI):
- + *
- + * Store a bitmap in an IFF-ILBM file.
- + */
- +
- + BOOL
- + SaveBitMap(STRPTR Name,struct BitMap *BitMap,LONG Width,LONG Height,UWORD X_DPI,UWORD Y_DPI)
- + {
- + struct IFFHandle *Handle;
- + BOOL Success = FALSE;
- +
- + if(Handle = AllocIFF())
- + {
- + if(Handle -> iff_Stream = Open(Name,MODE_NEWFILE))
- + {
- + InitIFFasDOS(Handle);
- +
- + if(!OpenIFF(Handle,IFFF_WRITE))
- + {
- + if(!PushChunk(Handle,ID_ILBM,ID_FORM,IFFSIZE_UNKNOWN))
- + {
- + if(PutBMHD(Handle,Width,Height,X_DPI,Y_DPI))
- + {
- + if(PutANNO(Handle))
- + {
- + if(PutCMAP(Handle))
- + {
- + if(PutCAMG(Handle))
- + {
- + if(PutDPI(Handle,X_DPI,Y_DPI))
- + {
- + if(PutBODY(Handle,BitMap))
- + Success = TRUE;
- + }
- + }
- + }
- + }
- + }
- +
- + if(PopChunk(Handle))
- + Success = FALSE;
- + }
- +
- + CloseIFF(Handle);
- + }
- +
- + Close(Handle -> iff_Stream);
- +
- + if(!Success)
- + DeleteFile(Name);
- + }
- +
- + FreeIFF(Handle);
- + }
- +
- + return(Success);
- + }
- +
- + /* GetInches(STRPTR Buffer):
- + *
- + * Turn a parameter string into a number representing
- + * a certain number of inches.
- + */
- +
- + float
- + GetInches(STRPTR Buffer)
- + {
- + STATIC struct { STRPTR Unit; float Factor; } Units[7] =
- + {
- + "pt", 1.0, /* Point */
- + "pc", 12.0, /* Pica */
- + "in", 72.72, /* Inch */
- + "cm", 72.72 / 2.54, /* Centimeter */
- + "mm", 727.2 / 2.54, /* Millimeter */
- + "dd", 1157.0 / 1238.0, /* Didot point */
- + "cc", 1157.0 / 103.0 /* Cicero */
- + };
- +
- + UBYTE Temp[40];
- + float Value;
- + LONG i;
- +
- + i = 0;
- +
- + /* Strip the numeric part. */
- +
- + while((Buffer[i] >= '0' && Buffer[i] <= '9') || Buffer[i] == '.' || Buffer[i] == '+' || Buffer[i] == '-' || Buffer[i] == 'e')
- + {
- + Temp[i] = Buffer[i];
- +
- + i++;
- + }
- +
- + /* Provide null-termination. */
- +
- + Temp[i] = 0;
- +
- + /* atof() appears to be broken in ixemul.library 39.45. */
- +
- + sscanf(Temp,"%f",&Value);
- +
- + Buffer += i;
- +
- + /* Which measuring unit? */
- +
- + for(i = 0 ; i < 7 ; i++)
- + {
- + /* Return the result in inches. */
- +
- + if(!Stricmp(Buffer,Units[i] . Unit))
- + return(Value * Units[i] . Factor / 72.27);
- + }
- +
- + /* Return the result in inches. */
- +
- + return(Value / 72.27);
- + }
- +
- + /* DispatchTask():
- + *
- + * Asynchronous window message dispatcher.
- + */
- +
- + VOID
- + DispatchTask()
- + {
- + struct Task *me;
- + gx_device *dev;
- +
- + /* Set up global data area base register. */
- +
- + ix_geta4();
- +
- + /* Who am I? */
- +
- + me = FindTask(NULL);
- +
- + /* Wait for wakeup call. */
- +
- + Wait(SIG_HANDSHAKE);
- +
- + /* Obtain device pointer. */
- +
- + dev = me -> tc_UserData;
- +
- + /* Enable user input. */
- +
- + if(ModifyIDCMP(xdev -> window,IDCMP_FLAGS))
- + {
- + ULONG Mask = 1 << xdev -> window -> UserPort -> mp_SigBit,
- + Set;
- + BOOL Done = FALSE;
- +
- + /* Fill in the dispatcher entry. */
- +
- + xdev -> dispatcher = me;
- +
- + /* Ring back. */
- +
- + Signal((struct Task *)xdev -> main,SIG_HANDSHAKE);
- +
- + /* Wait for input... */
- +
- + do
- + {
- + Set = Wait(Mask | SIG_KILL);
- +
- + if(Set & Mask)
- + DispatchSuperWindow(dev);
- +
- + if(Set & SIG_KILL)
- + Done = TRUE;
- + }
- + while(!Done);
- +
- + /* Disable user input. */
- +
- + ModifyIDCMP(xdev -> window,NULL);
- + }
- +
- + /* Disable task switching. */
- +
- + Forbid();
- +
- + /* Clear the dispatcher entry. */
- +
- + xdev -> dispatcher = NULL;
- +
- + /* Signal the main process that we are done. */
- +
- + Signal((struct Task *)xdev -> main,SIG_HANDSHAKE);
- +
- + /* Remove ourselves. */
- +
- + RemTask(NULL);
- + }
- +
- + /* DeleteScrollers(gx_device *dev):
- + *
- + * Delete the window border scrollers.
- + */
- +
- + VOID
- + DeleteScrollers(gx_device *dev)
- + {
- + if(xdev -> gadget)
- + {
- + if(xdev -> gadget[HORIZONTAL_SCROLLER])
- + DisposeObject(xdev -> gadget[HORIZONTAL_SCROLLER]);
- +
- + if(xdev -> gadget[VERTICAL_SCROLLER])
- + DisposeObject(xdev -> gadget[VERTICAL_SCROLLER]);
- +
- + if(xdev -> gadget[UP_ARROW])
- + DisposeObject(xdev -> gadget[UP_ARROW]);
- +
- + if(xdev -> gadget[DOWN_ARROW])
- + DisposeObject(xdev -> gadget[DOWN_ARROW]);
- +
- + if(xdev -> gadget[LEFT_ARROW])
- + DisposeObject(xdev -> gadget[LEFT_ARROW]);
- +
- + if(xdev -> gadget[RIGHT_ARROW])
- + DisposeObject(xdev -> gadget[RIGHT_ARROW]);
- +
- + FreeVec(xdev -> gadget);
- +
- + xdev -> gadget = NULL;
- + }
- +
- + if(xdev -> image)
- + {
- + if(xdev -> image[UP_IMAGE])
- + DisposeObject(xdev -> image[UP_IMAGE]);
- +
- + if(xdev -> image[DOWN_IMAGE])
- + DisposeObject(xdev -> image[DOWN_IMAGE]);
- +
- + if(xdev -> image[LEFT_IMAGE])
- + DisposeObject(xdev -> image[LEFT_IMAGE]);
- +
- + if(xdev -> image[RIGHT_IMAGE])
- + DisposeObject(xdev -> image[RIGHT_IMAGE]);
- +
- + FreeVec(xdev -> image);
- +
- + xdev -> image = NULL;
- + }
- + }
- +
- + /* CreateScrollers(gx_device *dev,struct Screen *Screen):
- + *
- + * Create the window border scroller handles.
- + */
- +
- + BOOL
- + CreateScrollers(gx_device *dev,struct Screen *Screen)
- + {
- + BOOL Result = FALSE;
- +
- + if(xdev -> gadget = (struct Gadget **)AllocVec(sizeof(struct Gadget *) * GADGET_COUNT,MEMF_ANY | MEMF_CLEAR | MEMF_PUBLIC))
- + {
- + if(xdev -> image = (struct Image **)AllocVec(sizeof(struct Image *) * IMAGE_COUNT,MEMF_ANY | MEMF_CLEAR | MEMF_PUBLIC))
- + {
- + struct DrawInfo *DrawInfo;
- +
- + if(DrawInfo = GetScreenDrawInfo(Screen))
- + {
- + LONG SizeWidth,
- + SizeHeight;
- + UWORD SizeType;
- +
- + if(Screen -> Flags & SCREENHIRES)
- + {
- + SizeWidth = 18;
- + SizeHeight = 10;
- +
- + SizeType = SYSISIZE_MEDRES;
- + }
- + else
- + {
- + SizeWidth = 13;
- + SizeHeight = 11;
- +
- + SizeType = SYSISIZE_LOWRES;
- + }
- +
- + if(xdev -> image[UP_IMAGE] = (struct Image *)NewObject(NULL,"sysiclass",
- + SYSIA_Size, SizeType,
- + SYSIA_Which, UPIMAGE,
- + SYSIA_DrawInfo, DrawInfo,
- + TAG_DONE))
- + {
- + if(xdev -> image[DOWN_IMAGE] = (struct Image *)NewObject(NULL,"sysiclass",
- + SYSIA_Size, SizeType,
- + SYSIA_Which, DOWNIMAGE,
- + SYSIA_DrawInfo, DrawInfo,
- + TAG_DONE))
- + {
- + if(xdev -> image[LEFT_IMAGE] = (struct Image *)NewObject(NULL,"sysiclass",
- + SYSIA_Size, SizeType,
- + SYSIA_Which, LEFTIMAGE,
- + SYSIA_DrawInfo, DrawInfo,
- + TAG_DONE))
- + {
- + if(xdev -> image[RIGHT_IMAGE] = (struct Image *)NewObject(NULL,"sysiclass",
- + SYSIA_Size, SizeType,
- + SYSIA_Which, RIGHTIMAGE,
- + SYSIA_DrawInfo, DrawInfo,
- + TAG_DONE))
- + {
- + if(xdev -> gadget[VERTICAL_SCROLLER] = NewObject(NULL,"propgclass",
- + GA_ID, VERTICAL_SCROLLER,
- +
- + GA_Top, Screen -> WBorTop + Screen -> Font -> ta_YSize + 2,
- + GA_RelHeight, -(Screen -> WBorTop + Screen -> Font -> ta_YSize + 2 + SizeHeight + 1 + 2 * ARROW_HEIGHT),
- + GA_Width, SizeWidth - 8,
- + GA_RelRight, -(SizeWidth - 5),
- +
- + GA_GZZGadget, TRUE,
- + GA_Immediate, TRUE,
- + GA_FollowMouse, TRUE,
- + GA_RelVerify, TRUE,
- + GA_RightBorder, TRUE,
- +
- + PGA_Freedom, FREEVERT,
- + PGA_NewLook, TRUE,
- + PGA_Borderless, TRUE,
- +
- + PGA_Visible, 1,
- + PGA_Total, 1,
- + TAG_DONE))
- + {
- + if(xdev -> gadget[HORIZONTAL_SCROLLER] = NewObject(NULL,"propgclass",
- + GA_ID, HORIZONTAL_SCROLLER,
- + GA_Previous, xdev -> gadget[VERTICAL_SCROLLER],
- +
- + GA_Height, SizeHeight - 4,
- + GA_RelBottom, -(SizeHeight - 4 + 1),
- + GA_Left, 4,
- + GA_RelWidth, -(2 + SizeWidth + 4 + 2 * ARROW_WIDTH),
- +
- + GA_GZZGadget, TRUE,
- + GA_Immediate, TRUE,
- + GA_FollowMouse, TRUE,
- + GA_RelVerify, TRUE,
- + GA_BottomBorder,TRUE,
- +
- + PGA_Freedom, FREEHORIZ,
- + PGA_NewLook, TRUE,
- + PGA_Borderless, TRUE,
- +
- + PGA_Visible, 1,
- + PGA_Total, 1,
- + TAG_DONE))
- + {
- + STATIC struct TagItem ArrowMappings[] = { GA_ID, GA_ID, TAG_END };
- +
- + if(xdev -> gadget[UP_ARROW] = NewObject(NULL,"buttongclass",
- + GA_ID, UP_ARROW,
- + GA_Previous, xdev -> gadget[HORIZONTAL_SCROLLER],
- +
- + GA_GZZGadget, TRUE,
- + GA_Image, xdev -> image[UP_IMAGE],
- + GA_RelRight, -(SizeWidth - 1),
- + GA_RelBottom, -(SizeHeight - 1 + 2 * ARROW_HEIGHT),
- + GA_Height, ARROW_HEIGHT,
- + GA_Width, SizeWidth,
- + GA_Immediate, TRUE,
- + GA_RelVerify, TRUE,
- + GA_RightBorder, TRUE,
- +
- + ICA_TARGET, ICTARGET_IDCMP,
- + ICA_MAP, ArrowMappings,
- + TAG_DONE))
- + {
- + if(xdev -> gadget[DOWN_ARROW] = NewObject(NULL,"buttongclass",
- + GA_ID, DOWN_ARROW,
- + GA_Previous, xdev -> gadget[UP_ARROW],
- +
- + GA_GZZGadget, TRUE,
- + GA_Image, xdev -> image[DOWN_IMAGE],
- + GA_RelRight, -(SizeWidth - 1),
- + GA_RelBottom, -(SizeHeight - 1 + ARROW_HEIGHT),
- + GA_Height, ARROW_HEIGHT,
- + GA_Width, SizeWidth,
- + GA_Immediate, TRUE,
- + GA_RelVerify, TRUE,
- + GA_RightBorder, TRUE,
- +
- + ICA_TARGET, ICTARGET_IDCMP,
- + ICA_MAP, ArrowMappings,
- + TAG_DONE))
- + {
- + if(xdev -> gadget[LEFT_ARROW] = NewObject(NULL,"buttongclass",
- + GA_ID, LEFT_ARROW,
- + GA_Previous, xdev -> gadget[DOWN_ARROW],
- +
- + GA_GZZGadget, TRUE,
- + GA_Image, xdev -> image[LEFT_IMAGE],
- + GA_RelRight, -(SizeWidth - 1 + 2 * ARROW_WIDTH),
- + GA_RelBottom, -(SizeHeight - 1),
- + GA_Height, SizeHeight,
- + GA_Width, ARROW_WIDTH,
- + GA_Immediate, TRUE,
- + GA_RelVerify, TRUE,
- + GA_BottomBorder,TRUE,
- +
- + ICA_TARGET, ICTARGET_IDCMP,
- + ICA_MAP, ArrowMappings,
- + TAG_DONE))
- + {
- + if(xdev -> gadget[RIGHT_ARROW] = NewObject(NULL,"buttongclass",
- + GA_ID, RIGHT_ARROW,
- + GA_Previous, xdev -> gadget[LEFT_ARROW],
- +
- + GA_GZZGadget, TRUE,
- + GA_Image, xdev -> image[RIGHT_IMAGE],
- + GA_RelRight, -(SizeWidth - 1 + ARROW_WIDTH),
- + GA_RelBottom, -(SizeHeight - 1),
- + GA_Height, SizeHeight,
- + GA_Width, ARROW_WIDTH,
- + GA_Immediate, TRUE,
- + GA_RelVerify, TRUE,
- + GA_BottomBorder,TRUE,
- +
- + ICA_TARGET, ICTARGET_IDCMP,
- + ICA_MAP, ArrowMappings,
- + TAG_DONE))
- + Result = TRUE;
- + }
- + }
- + }
- + }
- + }
- + }
- + }
- + }
- + }
- +
- + FreeScreenDrawInfo(Screen,DrawInfo);
- + }
- + }
- + }
- +
- + return(Result);
- + }
- +
- + /* WindowResize(gx_device *dev):
- + *
- + * Update the slider sizes and positions after the window
- + * was resized.
- + */
- +
- + VOID
- + WindowResize(gx_device *dev)
- + {
- + LONG DeltaX,
- + DeltaY,
- + Temp;
- +
- + /* Query the current horizontal slider position. */
- +
- + if((Temp = LAYERXOFFSET(xdev -> window) + xdev -> window -> GZZWidth) > xdev -> super_width)
- + DeltaX = xdev -> super_width - Temp;
- + else
- + DeltaX = 0;
- +
- + /* Query the current vertical slider position. */
- +
- + if((Temp = LAYERYOFFSET(xdev -> window) + xdev -> window -> GZZHeight) > xdev -> super_height)
- + DeltaY = xdev -> super_height - Temp;
- + else
- + DeltaY = 0;
- +
- + /* Move the currently displayed window area around. */
- +
- + if(DeltaX || DeltaY)
- + ScrollLayer(NULL,xdev -> window -> RPort -> Layer,DeltaX,DeltaY);
- +
- + /* Update the new horizontal slider position and size. */
- +
- + SetGadgetAttrs(xdev -> gadget[HORIZONTAL_SCROLLER],xdev -> window,NULL,
- + PGA_Top, LAYERXOFFSET(xdev -> window),
- + PGA_Visible, xdev -> window -> GZZWidth,
- + PGA_Total, xdev -> super_width,
- + TAG_DONE);
- +
- + /* Update the new vertical slider position and size. */
- +
- + SetGadgetAttrs(xdev -> gadget[VERTICAL_SCROLLER],xdev -> window,NULL,
- + PGA_Top, LAYERYOFFSET(xdev -> window),
- + PGA_Visible, xdev -> window -> GZZHeight,
- + PGA_Total, xdev -> super_height,
- + TAG_DONE);
- + }
- +
- + /* WindowUpdate(struct Gadget *Gadget,gx_device *dev):
- + *
- + * Move the currently visible portion of the
- + * window according to the current slider
- + * position.
- + */
- +
- + VOID
- + WindowUpdate(struct Gadget *Gadget,gx_device *dev)
- + {
- + LONG Storage;
- +
- + switch(Gadget -> GadgetID)
- + {
- + case HORIZONTAL_SCROLLER:
- +
- + if(GetAttr(PGA_Top,Gadget,&Storage))
- + ScrollLayer(NULL,xdev -> window -> RPort -> Layer,Storage - LAYERXOFFSET(xdev -> window),0);
- +
- + break;
- +
- + case VERTICAL_SCROLLER:
- +
- + if(GetAttr(PGA_Top,Gadget,&Storage))
- + ScrollLayer(NULL,xdev -> window -> RPort -> Layer,0,Storage - LAYERYOFFSET(xdev -> window));
- +
- + break;
- + }
- + }
- +
- + /* MoveAround(struct Gadget *Gadget,int How,gx_device *dev):
- + *
- + * Move the currently visible window area according to
- + * user input.
- + */
- +
- + VOID
- + MoveAround(struct Gadget *Gadget,LONG How,gx_device *dev)
- + {
- + LONG Storage;
- +
- + if(GetAttr(PGA_Top,Gadget,&Storage))
- + {
- + LONG Max;
- +
- + switch(Gadget -> GadgetID)
- + {
- + case HORIZONTAL_SCROLLER:
- +
- + Max = xdev -> super_width - xdev -> window -> GZZWidth;
- + break;
- +
- + case VERTICAL_SCROLLER:
- +
- + Max = xdev -> super_height - xdev -> window -> GZZHeight;
- + break;
- + }
- +
- + switch(How)
- + {
- + case MOVE_MIN:
- +
- + Storage = 0;
- + break;
- +
- + case MOVE_MAX:
- +
- + Storage = Max;
- + break;
- +
- + case MOVE_DOWN:
- +
- + if(Storage > xdev -> super_height / 100)
- + Storage -= xdev -> super_height / 100;
- + else
- + Storage = 0;
- +
- + break;
- +
- + case MOVE_FAR_DOWN:
- +
- + if(Storage > xdev -> super_height / 10)
- + Storage -= xdev -> super_height / 10;
- + else
- + Storage = 0;
- +
- + break;
- +
- + case MOVE_FAR_UP:
- +
- + if(Storage + xdev -> super_width / 10 < Max)
- + Storage += xdev -> super_width / 10;
- + else
- + Storage = Max;
- +
- + break;
- +
- + case MOVE_UP:
- +
- + if(Storage + xdev -> super_width / 100 < Max)
- + Storage += xdev -> super_width / 100;
- + else
- + Storage = Max;
- +
- + break;
- + }
- +
- + switch(Gadget -> GadgetID)
- + {
- + case HORIZONTAL_SCROLLER:
- +
- + if(LAYERXOFFSET(xdev -> window) != Storage)
- + {
- + ScrollLayer(NULL,xdev -> window -> RPort -> Layer,Storage - LAYERXOFFSET(xdev -> window),0);
- +
- + SetGadgetAttrs(Gadget,xdev -> window,NULL,
- + PGA_Top,Storage,
- + TAG_DONE);
- + }
- +
- + break;
- +
- + case VERTICAL_SCROLLER:
- +
- + if(LAYERYOFFSET(xdev -> window) != Storage)
- + {
- + ScrollLayer(NULL,xdev -> window -> RPort -> Layer,0,Storage - LAYERYOFFSET(xdev -> window));
- +
- + SetGadgetAttrs(Gadget,xdev -> window,NULL,
- + PGA_Top,Storage,
- + TAG_DONE);
- + }
- +
- + break;
- + }
- + }
- + }
- +
- + /* DispatchSuperWindow(gx_device *dev):
- + *
- + * Dispatch user window input.
- + */
- +
- + VOID
- + DispatchSuperWindow(gx_device *dev)
- + {
- + STATIC struct Gadget *CurrentGadget = NULL;
- +
- + struct IntuiMessage *IntuiMessage;
- + ULONG MsgClass,
- + MsgCode,
- + MsgQualifier;
- + struct Gadget *MsgGadget;
- +
- + while(IntuiMessage = (struct IntuiMessage *)GetMsg(xdev -> window -> UserPort))
- + {
- + MsgClass = IntuiMessage -> Class;
- + MsgCode = IntuiMessage -> Code;
- + MsgQualifier = IntuiMessage -> Qualifier;
- + MsgGadget = IntuiMessage -> IAddress;
- +
- + ReplyMsg((struct Message *)IntuiMessage);
- +
- + switch(MsgClass)
- + {
- + case IDCMP_VANILLAKEY:
- +
- + if(MsgCode == '\033' || MsgCode == '\003')
- + Signal((struct Task *)xdev -> main,SIG_KILL);
- +
- + break;
- +
- + case IDCMP_RAWKEY:
- +
- + switch(MsgCode)
- + {
- + case HELP_CODE:
- +
- + DisplayBeep(xdev -> window -> WScreen);
- +
- + break;
- +
- + case CURSORUP:
- +
- + if(MsgQualifier & IEQUALIFIER_CONTROL)
- + MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_MIN,dev);
- + else
- + {
- + if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
- + MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_FAR_DOWN,dev);
- + else
- + MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_DOWN,dev);
- + }
- +
- + break;
- +
- + case CURSORLEFT:
- +
- + if(MsgQualifier & IEQUALIFIER_CONTROL)
- + MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_MIN,dev);
- + else
- + {
- + if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
- + MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_FAR_DOWN,dev);
- + else
- + MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_DOWN,dev);
- + }
- +
- + break;
- +
- + case CURSORRIGHT:
- +
- + if(MsgQualifier & IEQUALIFIER_CONTROL)
- + MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_MAX,dev);
- + else
- + {
- + if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
- + MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_FAR_UP,dev);
- + else
- + MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_UP,dev);
- + }
- +
- + break;
- +
- + case CURSORDOWN:
- +
- + if(MsgQualifier & IEQUALIFIER_CONTROL)
- + MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_MAX,dev);
- + else
- + {
- + if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
- + MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_FAR_UP,dev);
- + else
- + MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_UP,dev);
- + }
- +
- + break;
- +
- + default:
- +
- + break;
- + }
- +
- + break;
- +
- + case IDCMP_CLOSEWINDOW:
- +
- + Signal((struct Task *)xdev -> main,SIG_KILL);
- +
- + break;
- +
- + case IDCMP_GADGETDOWN:
- +
- + CurrentGadget = MsgGadget;
- +
- + WindowUpdate(MsgGadget,dev);
- +
- + break;
- +
- + case IDCMP_GADGETUP:
- +
- + CurrentGadget = NULL;
- +
- + WindowUpdate(MsgGadget,dev);
- +
- + break;
- +
- + case IDCMP_MOUSEMOVE:
- +
- + if(CurrentGadget)
- + WindowUpdate(CurrentGadget,dev);
- +
- + break;
- +
- + case IDCMP_IDCMPUPDATE:
- +
- + switch(GetTagData(GA_ID,0,(struct TagItem *)MsgGadget))
- + {
- + case UP_ARROW:
- +
- + MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_DOWN,dev);
- + break;
- +
- + case DOWN_ARROW:
- +
- + MoveAround(xdev -> gadget[VERTICAL_SCROLLER],MOVE_UP,dev);
- + break;
- +
- + case LEFT_ARROW:
- +
- + MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_DOWN,dev);
- + break;
- +
- + case RIGHT_ARROW:
- +
- + MoveAround(xdev -> gadget[HORIZONTAL_SCROLLER],MOVE_UP,dev);
- + break;
- +
- + default:
- +
- + break;
- + }
- +
- + break;
- +
- + case IDCMP_NEWSIZE:
- +
- + WindowResize(dev);
- +
- + break;
- +
- + default:
- +
- + break;
- + }
- + }
- + }
- +
- + /* Simple routine to call the cleanup routine of a device,
- + * all devices are smart enough to handle shutdown in
- + * case they have not been opened yet.
- + */
- +
- + STATIC void __inline
- + close_device(gx_device_amiga *dev)
- + {
- + (*xdev -> procs -> close_device)((gx_device *)dev);
- + }
- +
- + /* devcleanup():
- + *
- + * Clean up all devices, free all resources.
- + */
- +
- + void
- + devcleanup()
- + {
- + close_device(&gs_amiga_device);
- + close_device(&gs_amiga_low_device);
- + close_device(&gs_amiga_high_device);
- + close_device(&gs_amiga_super_device);
- + close_device(&gs_amiga_a2024_device);
- + close_device(&gs_amiga_picassoii_device);
- + close_device(&gs_amiga_custom_device);
- + close_device(&gs_amiga_printer_device);
- + close_device(&gs_amiga_ilbm_device);
- + }
- +
- + /* amiga_set_pen(gx_device *dev,gx_color_index color):
- + *
- + * Sets the rendering pen and remembers the current
- + * settings.
- + */
- +
- + STATIC VOID __inline
- + amiga_set_pen(gx_device *dev,gx_color_index color)
- + {
- + if(xdev -> last_pen != color)
- + SetAPen(xdev -> rport,xdev -> last_pen = color);
- + }
- +
- + /* amiga_map_rgb_color(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue):
- + *
- + * Map a colour either to the black or the light rendering pen.
- + */
- +
- + gx_color_index
- + amiga_map_rgb_color(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue)
- + {
- + if((red | green | blue) > gx_max_color_value / 2)
- + return(LightPen);
- + else
- + return(DarkPen);
- + }
- +
- + /* amiga_map_color_rgb(gx_device *dev,gx_color_index color,gx_color_value rgb[3]):
- + *
- + * Map the light/dark rendering pen to RGB values.
- + */
- +
- + int
- + amiga_map_color_rgb(gx_device *dev,gx_color_index color,gx_color_value rgb[3])
- + {
- + int i;
- +
- + if(color == LightPen)
- + {
- + for(i = 0 ; i < 3 ; i++)
- + rgb[i] = gx_max_color_value;
- + }
- + else
- + {
- + for(i = 0 ; i < 3 ; i++)
- + rgb[i] = 0;
- + }
- +
- + return(0);
- + }
- +
- + /* AllocatePens(struct ViewPort *VPort,LONG CubeSize):
- + *
- + * Allocate shareable viewport pens.
- + */
- +
- + LONG *
- + AllocatePens(struct ViewPort *VPort,LONG CubeSize)
- + {
- + if(GfxBase -> LibNode . lib_Version >= 39)
- + {
- + LONG Total = CubeSize * CubeSize * CubeSize,*Pens;
- +
- + if(Pens = (LONG *)AllocVec(sizeof(LONG) * Total,MEMF_ANY))
- + {
- + LONG i,r,g,b,max = CubeSize - 1;
- +
- + for(i = 0 ; i < Total ; i++)
- + Pens[i] = -1;
- +
- + i = 0;
- +
- + for(r = 0 ; r < CubeSize ; r++)
- + {
- + for(g = 0 ; g < CubeSize ; g++)
- + {
- + for(b = 0 ; b < CubeSize ; b++)
- + {
- + if((Pens[i++] = ObtainBestPen(VPort -> ColorMap,SPREAD((255 * r) / max),SPREAD((255 * g) / max),SPREAD((255 * b) / max),
- + OBP_FailIfBad, TRUE,
- + OBP_Precision, PRECISION_IMAGE,
- + TAG_DONE)) == -1)
- + {
- + FreeVec(Pens);
- +
- + return(NULL);
- + }
- + }
- + }
- + }
- +
- + return(Pens);
- + }
- + }
- +
- + return(NULL);
- + }
- +
- + /* amiga_open_default(gx_device *dev):
- + *
- + * Open the default device, i.e. a window on the Workbench screen.
- + */
- +
- + int
- + amiga_open_default(gx_device *dev)
- + {
- + struct Screen *DefaultScreen;
- +
- + /* Get a lock on the default public screen. */
- +
- + if(DefaultScreen = LockPubScreen(NULL))
- + {
- + struct DisplayInfo DisplayInfo;
- + ULONG Mode;
- +
- + /* Get the default public screen display mode. */
- +
- + Mode = GetVPModeID(&DefaultScreen -> ViewPort);
- +
- + /* Inquire display mode information. */
- +
- + if(GetDisplayInfoData(NULL,(APTR)&DisplayInfo,sizeof(struct DisplayInfo),DTAG_DISP,Mode))
- + {
- + LONG ScreenWidth,
- + ScreenHeight;
- + LONG i;
- + float Width,
- + Height;
- + LONG Depth;
- +
- + if(GfxBase -> LibNode . lib_Version >= 39)
- + Depth = GetBitMapAttr(DefaultScreen -> RastPort . BitMap,BMA_DEPTH);
- + else
- + Depth = DefaultScreen -> RastPort . BitMap -> Depth;
- +
- + /* Determine screen view dimensions. */
- +
- + if(DefaultScreen -> ViewPort . ColorMap -> cm_vpe)
- + {
- + struct ViewPortExtra *Extra = DefaultScreen -> ViewPort . ColorMap -> cm_vpe;
- +
- + ScreenWidth = Extra -> DisplayClip . MaxX - Extra -> DisplayClip . MinX + 1;
- + ScreenHeight = Extra -> DisplayClip . MaxY - Extra -> DisplayClip . MinY + 1;
- + }
- + else
- + {
- + struct ViewPortExtra *Extra;
- +
- + if(Extra = (struct ViewPortExtra *)GfxLookUp(&DefaultScreen -> ViewPort))
- + {
- + ScreenWidth = Extra -> DisplayClip . MaxX - Extra -> DisplayClip . MinX + 1;
- + ScreenHeight = Extra -> DisplayClip . MaxY - Extra -> DisplayClip . MinY + 1;
- + }
- + else
- + {
- + ScreenWidth = DefaultScreen -> Width;
- + ScreenHeight = DefaultScreen -> Height;
- + }
- + }
- +
- + /* Use the best guess, we will take the standard
- + * low resolution x-dpi value and scale it by
- + * the pixel speed.
- + */
- +
- + if(DisplayInfo . PixelSpeed)
- + {
- + xdev -> x_pixels_per_inch = (35.0 * 140.0) / (float)DisplayInfo . PixelSpeed;
- + xdev -> y_pixels_per_inch = (xdev -> x_pixels_per_inch * (float)DisplayInfo . Resolution . x) / (float)DisplayInfo . Resolution . y;
- + }
- + else
- + {
- + xdev -> x_pixels_per_inch = 72.27;
- + xdev -> y_pixels_per_inch = 72.27;
- + }
- +
- + if(xdev -> width > 0 && xdev -> height > 0)
- + {
- + xdev -> super_width = xdev -> width;
- + xdev -> super_height = xdev -> height;
- + }
- + else
- + {
- + if(xdev -> page_width > 0.0)
- + xdev -> super_width = (LONG)(xdev -> page_width * xdev -> x_pixels_per_inch);
- + else
- + xdev -> super_width = 640;
- +
- + if(xdev -> page_height > 0.0)
- + xdev -> super_height = (LONG)(xdev -> page_height * xdev -> y_pixels_per_inch);
- + else
- + xdev -> super_height = 512;
- + }
- +
- + /* Allocate a bitmap ready to be used for
- + * rendering.
- + */
- +
- + if(xdev -> super_bitmap = CreateBitMap(xdev -> super_width,xdev -> super_height,Depth,BMF_DISPLAYABLE,DefaultScreen -> RastPort . BitMap,FALSE))
- + {
- + /* Clear the bitplanes. */
- +
- + 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);
- +
- + /* Create the scroller handles. */
- +
- + if(CreateScrollers(dev,DefaultScreen))
- + {
- + struct IBox ZoomBox;
- +
- + /* Set up the window alternate
- + * position.
- + */
- +
- + ZoomBox . Left = 0;
- + ZoomBox . Top = DefaultScreen -> BarHeight + 1;
- + ZoomBox . Width = ScreenWidth;
- + ZoomBox . Height = ScreenHeight - ZoomBox . Top;
- +
- + /* Eventually, open the display window. */
- +
- + if(xdev -> window = OpenWindowTags(NULL,
- + WA_InnerWidth, MIN(DefaultScreen -> Width / 2,xdev -> super_width),
- + WA_InnerHeight, MIN(DefaultScreen -> Height / 2,xdev -> super_height),
- + WA_CloseGadget, TRUE,
- + WA_DepthGadget, TRUE,
- + WA_SizeGadget, TRUE,
- + WA_SizeBRight, TRUE,
- + WA_SizeBBottom, TRUE,
- + WA_Zoom, &ZoomBox,
- + WA_DragBar, TRUE,
- + WA_NoCareRefresh, TRUE,
- + WA_GimmeZeroZero, TRUE,
- + WA_RMBTrap, TRUE,
- + WA_SuperBitMap, xdev -> super_bitmap,
- + WA_Gadgets, xdev -> gadget[VERTICAL_SCROLLER],
- + WA_CustomScreen, DefaultScreen,
- + WA_Title, "Ghostscript Amiga output window",
- + TAG_DONE))
- + {
- + if(xdev -> temp_rport = CreateTempRPort(xdev -> window -> RPort))
- + {
- + if(xdev -> temp_array = (UBYTE *)AllocVec((xdev -> window -> WScreen -> Width + 15) & ~15,MEMF_ANY))
- + {
- + struct Task *Task;
- +
- + /* Bring the window dispatcher task
- + * to life...
- + */
- +
- + if(Task = (struct Task *)CreateTask("Ghostscript window dispatcher",5,DispatchTask,8192))
- + {
- + const sigset_t trapped = sigmask(SIGINT);
- +
- + /* Cheap... */
- +
- + Task -> tc_UserData = dev;
- +
- + /* Who's calling? */
- +
- + xdev -> main = (struct Process *)FindTask(NULL);
- +
- + /* Don't let anybody interrupt us! */
- +
- + sigprocmask(SIG_BLOCK,&trapped,NULL);
- +
- + Forbid();
- +
- + /* Wake it up. */
- +
- + Signal(Task,SIG_HANDSHAKE);
- +
- + /* Clear the handshake bit. */
- +
- + SetSignal(0,SIG_HANDSHAKE);
- +
- + /* Wait for the report. */
- +
- + Wait(SIG_HANDSHAKE);
- +
- + Permit();
- +
- + /* Get the result. */
- +
- + Task = xdev -> dispatcher;
- +
- + /* Unblock signals. */
- +
- + sigprocmask(SIG_UNBLOCK,&trapped,NULL);
- + }
- +
- + /* Did we succeed in creating
- + * the dispatcher task?
- + */
- +
- + if(Task)
- + {
- + UWORD MaxValue = 0,
- + MinValue = 15000,
- + Value,
- + R,G,B;
- +
- + /* Set the window limits. */
- +
- + 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);
- +
- + /* Update the sliders. */
- +
- + WindowResize(dev);
- +
- + /* Look for the darkest and the lightest screen colours. */
- +
- + for(i = 0 ; i < MIN(xdev -> window -> WScreen -> ViewPort . ColorMap -> Count,(1 << Depth)) ; i++)
- + {
- + Value = GetRGB4(xdev -> window -> WScreen -> ViewPort . ColorMap,i);
- +
- + R = (Value >> 8) & 0xF;
- + G = (Value >> 4) & 0xF;
- + B = Value & 0xF;
- +
- + /* Luminance conversion included */
- +
- + Value = R * 299 + G * 588 + B * 113;
- +
- + if(Value > MaxValue)
- + {
- + MaxValue = Value;
- +
- + LightPen = i;
- + }
- +
- + if(Value < MinValue)
- + {
- + MinValue = Value;
- +
- + DarkPen = i;
- + }
- + }
- +
- + /* Fill in the rest. */
- +
- + xdev -> width = xdev -> super_width;
- + xdev -> height = xdev -> super_height;
- + xdev -> rport = xdev -> window -> RPort;
- +
- + /* Does the display support
- + * at least eight colours?
- + */
- +
- + if(Depth >= 3)
- + {
- + LONG cube_size,max;
- +
- + /* Set up a fitting colour cube. */
- +
- + for(cube_size = 6 ; cube_size >= 2 ; cube_size--)
- + {
- + if((max = cube_size * cube_size * cube_size) <= 1 << Depth)
- + break;
- + }
- +
- + /* Got enough colours? */
- +
- + if(cube_size != 1)
- + {
- + LONG *Pens;
- +
- + /* Try to grab the cube colours,
- + * making a colour display.
- + */
- +
- + if(Pens = AllocatePens(&xdev -> window -> WScreen -> ViewPort,cube_size))
- + set_colour_device((gx_device_amiga *)dev,cube_size,Pens);
- + }
- + }
- +
- + SetBPen(xdev -> rport,0);
- + SetDrMd(xdev -> rport,JAM2);
- +
- + amiga_set_pen(dev,DarkPen);
- +
- + UnlockPubScreen(NULL,DefaultScreen);
- +
- + return(0);
- + }
- + else
- + perror("Ghostscript: failed to create dispatcher task");
- + }
- + else
- + perror("Ghostscript: failed to create temporary line buffer.");
- + }
- + else
- + perror("Ghostscript: failed to create temporary raster port");
- + }
- + else
- + perror("Ghostscript: failed to open window");
- + }
- + else
- + perror("Ghostscript: failed to allocate scrollers");
- + }
- + else
- + perror("Ghostscript: failed to allocate bitmap");
- + }
- + else
- + perror("Ghostscript: failed to get display mode information");
- +
- + UnlockPubScreen(NULL,DefaultScreen);
- + }
- + else
- + perror("Ghostscript: failed to lock default public screen");
- +
- + return(-1);
- + }
- +
- + /* amiga_open_low(gx_device *dev):
- + *
- + * Open the low resolution device.
- + */
- +
- + int
- + amiga_open_low(gx_device *dev)
- + {
- + return(amiga_open(dev,LORES_KEY));
- + }
- +
- + /* amiga_open_high(gx_device *dev):
- + *
- + * Open the high resolution device.
- + */
- +
- + int
- + amiga_open_high(gx_device *dev)
- + {
- + return(amiga_open(dev,HIRESLACE_KEY));
- + }
- +
- + /* amiga_open_super(gx_device *dev):
- + *
- + * Open the super high resolution device.
- + */
- +
- + int
- + amiga_open_super(gx_device *dev)
- + {
- + /* Fall back to the default if not available. */
- +
- + if(ModeNotAvailable(SUPERLACE_KEY))
- + return(amiga_open_high(dev));
- + else
- + return(amiga_open(dev,SUPERLACE_KEY));
- + }
- +
- + /* amiga_open_a2024(gx_device *dev):
- + *
- + * Open the A2024 device.
- + */
- +
- + int
- + amiga_open_a2024(gx_device *dev)
- + {
- + /* Fall back to the default if not available. */
- +
- + if(ModeNotAvailable(A2024TENHERTZ_KEY))
- + return(amiga_open_super(dev));
- + else
- + return(amiga_open(dev,A2024TENHERTZ_KEY));
- + }
- +
- + /* amiga_open_picassoii(gx_device *dev):
- + *
- + * Open the Picasso II device.
- + */
- +
- + int
- + amiga_open_picassoii(gx_device *dev)
- + {
- + /* Fall back to the default if not available. */
- +
- + if(ModeNotAvailable(0x40020002))
- + return(amiga_open_super(dev));
- + else
- + return(amiga_open(dev,0x40020002));
- + }
- +
- + int
- + amiga_open_custom(gx_device *dev)
- + {
- + UBYTE Buffer[256];
- + ULONG ScreenID = INVALID_ID;
- + BOOL DontTouch = FALSE;
- +
- + /* First step: check for an environment variable to give
- + * the name of the display mode to use.
- + */
- +
- + if(GetVar("GSCUSTOMMODE",Buffer,256,NULL) != -1)
- + {
- + UBYTE PatternBuffer[516];
- +
- + /* Set up the search pattern. */
- +
- + if(ParsePatternNoCase(Buffer,PatternBuffer,516) >= 0)
- + {
- + ULONG CurrentID = INVALID_ID,ID;
- +
- + /* Scan the entire list. */
- +
- + while((CurrentID = NextDisplayInfo(CurrentID)) != INVALID_ID)
- + {
- + /* Valid mode? */
- +
- + if(!ModeNotAvailable(CurrentID))
- + {
- + struct NameInfo NameInfo;
- +
- + /* Get the name information. */
- +
- + if(GetDisplayInfoData(NULL,&NameInfo,sizeof(struct NameInfo),DTAG_NAME,CurrentID))
- + {
- + /* Does the mode name match the pattern given? */
- +
- + if(MatchPatternNoCase(PatternBuffer,NameInfo . Name))
- + {
- + ScreenID = CurrentID;
- +
- + /* Don't overwrite the variable contents. */
- +
- + DontTouch = TRUE;
- +
- + break;
- + }
- + }
- + }
- + }
- + }
- + }
- +
- + if(ScreenID == INVALID_ID && AslBase)
- + {
- + struct ScreenModeRequester *ScreenModeRequester;
- +
- + if(ScreenModeRequester = (struct ScreenModeRequester *)AllocAslRequestTags(ASL_ScreenModeRequest,TAG_DONE))
- + {
- + if(AslRequestTags(ScreenModeRequester,
- + ASLSM_TitleText, "Select GhostScript screen display mode",
- + ASLSM_MinDepth, 1,
- + ASLSM_MaxDepth, 8,
- + TAG_DONE))
- + ScreenID = ScreenModeRequester -> sm_DisplayID;
- +
- + FreeAslRequest(ScreenModeRequester);
- + }
- + }
- +
- + /* Fall back to the default if not available. */
- +
- + if(ModeNotAvailable(ScreenID))
- + return(amiga_open_default(dev));
- + else
- + {
- + int result = amiga_open(dev,ScreenID);
- +
- + /* If successful store the name of the
- + * screen mode selected.
- + */
- +
- + if(!result && !DontTouch)
- + {
- + struct NameInfo NameInfo;
- +
- + if(GetDisplayInfoData(NULL,&NameInfo,sizeof(struct NameInfo),DTAG_NAME,ScreenID))
- + SetVar("GSCUSTOMMODE",NameInfo . Name,-1,NULL);
- + }
- +
- + return(result);
- + }
- + }
- +
- + /* amiga_open_printer(gx_device *dev):
- + *
- + * Open the printer device.
- + */
- +
- + int
- + amiga_open_printer(gx_device *dev)
- + {
- + if(xdev -> port = CreateMsgPort())
- + {
- + if(xdev -> printer = (struct IODRPReq *)CreateIORequest(xdev -> port,sizeof(struct IODRPReq)))
- + {
- + if(!OpenDevice("printer.device",0,(struct IORequest *)xdev -> printer,0))
- + {
- + if(xdev -> rport = (struct RastPort *)AllocVec(sizeof(struct RastPort),MEMF_ANY))
- + {
- + const sigset_t trapped = sigmask(SIGINT);
- + struct BitMap DummyBitMap;
- + UWORD DummyLine[12];
- +
- + InitRastPort(xdev -> rport);
- +
- + /* Cook up a dummy bitmap to keep
- + * `smart' drivers from complaining.
- + */
- +
- + InitBitMap(&DummyBitMap,12,16,16);
- +
- + DummyBitMap . Planes[0] = (PLANEPTR)&DummyLine;
- +
- + xdev -> rport -> BitMap = &DummyBitMap;
- +
- + /* Query page size requirements. */
- +
- + xdev -> printer -> io_Command = PRD_DUMPRPORT;
- + xdev -> printer -> io_RastPort = xdev -> rport;
- + xdev -> printer -> io_SrcWidth = 16;
- + xdev -> printer -> io_SrcHeight = 16;
- + xdev -> printer -> io_Modes = LORES_KEY;
- +
- + xdev -> printer -> io_Special |= SPECIAL_FULLCOLS | SPECIAL_FULLROWS | SPECIAL_NOPRINT;
- +
- + /* Don't let them stop us now! */
- +
- + sigprocmask(SIG_BLOCK,&trapped,NULL);
- +
- + /* Ask for it... */
- +
- + if(!DoIO((struct IORequest *)xdev -> printer))
- + {
- + struct PrinterExtendedData *PED;
- + struct PrinterData *PD;
- + struct Preferences *Prefs;
- + LONG Depth,
- + NumColours,
- + CubeSize;
- + LONG PageWidth,
- + PageHeight;
- +
- + /* Unblock ^C signal. */
- +
- + sigprocmask(SIG_UNBLOCK,&trapped,NULL);
- +
- + xdev -> printer -> io_Special &= ~(SPECIAL_FULLCOLS | SPECIAL_FULLROWS | SPECIAL_NOPRINT);
- +
- + /* Get the printer internal data. */
- +
- + PD = (struct PrinterData *)xdev -> printer -> io_Device;
- + PED = &PD -> pd_SegmentData -> ps_PED;
- + Prefs = &PD -> pd_Preferences;
- +
- + /* Calculate the printer page size. */
- +
- + PageWidth = PED -> ped_XDotsInch * (Prefs -> PrintRightMargin - Prefs -> PrintLeftMargin + 1);
- + PageHeight = PED -> ped_YDotsInch * Prefs -> PaperLength;
- +
- + switch(Prefs -> PrintPitch)
- + {
- + case PICA:
- +
- + PageWidth /= 10;
- + break;
- +
- + case ELITE:
- +
- + PageWidth /= 12;
- + break;
- +
- + case FINE:
- +
- + PageWidth /= 15;
- + break;
- + }
- +
- + switch(Prefs -> PrintSpacing)
- + {
- + case SIX_LPI:
- +
- + PageHeight /= 6;
- + break;
- +
- + case EIGHT_LPI:
- +
- + PageHeight /= 8;
- + break;
- + }
- +
- + if(PageWidth > PED -> ped_MaxXDots)
- + PageWidth = PED -> ped_MaxXDots;
- +
- + if(PageHeight > PED -> ped_MaxYDots && PED -> ped_MaxYDots)
- + PageHeight = PED -> ped_MaxYDots;
- +
- + /* Set up the default colour values. */
- +
- + if(Prefs -> PrintShade == SHADE_BW)
- + {
- + Depth = 1;
- + NumColours = 2;
- + CubeSize = 0;
- + }
- + else
- + {
- + Depth = 12;
- + NumColours = 4096;
- + CubeSize = 16;
- + }
- +
- + /* Get the page size */
- +
- + if(xdev -> width > 0 && xdev -> height > 0)
- + {
- + if(PageWidth < xdev -> width)
- + xdev -> width = PageWidth;
- +
- + if(PageHeight < xdev -> height)
- + xdev -> height = PageHeight;
- + }
- + else
- + {
- + xdev -> width = PageWidth;
- + xdev -> height = PageHeight;
- + }
- +
- + /* Get the DPI values */
- +
- + xdev -> x_pixels_per_inch = (float)PED -> ped_XDotsInch;
- + xdev -> y_pixels_per_inch = (float)PED -> ped_YDotsInch;
- +
- + /* Try to allocate a suitable bitmap.
- + * If an allocation fails, rescale the
- + * colour cube and bitmap depth and
- + * retry. Minimum are eight colours.
- + */
- +
- + do
- + {
- + /* Try to allocate the raster... */
- +
- + if(!(xdev -> bitmap = CreateBitMap(xdev -> width,xdev -> height,Depth,NULL,NULL,TRUE)))
- + {
- + /* Any chance to rescale the cube? */
- +
- + if(Depth < 2)
- + break;
- + else
- + {
- + /* One plane less... */
- +
- + Depth--;
- +
- + /* Rescale the cube. */
- +
- + while(CubeSize >= 2)
- + {
- + if((NumColours = CubeSize * CubeSize * CubeSize) <= (1 << Depth))
- + break;
- + else
- + CubeSize--;
- + }
- +
- + /* Less than eight colours? */
- +
- + if(CubeSize < 2)
- + break;
- + }
- + }
- + }
- + while(!xdev -> bitmap);
- +
- + /* Got the bitmap? */
- +
- + if(xdev -> bitmap)
- + {
- + /* Allocate a suitable colour map. */
- +
- + if(xdev -> colormap = GetColorMap(NumColours))
- + {
- + /* Black & white only? */
- +
- + if(NumColours == 2)
- + {
- + SetRGB4CM(xdev -> colormap,0,0x0,0x0,0x0);
- + SetRGB4CM(xdev -> colormap,1,0xF,0xF,0xF);
- + }
- + else
- + {
- + LONG i = 0,r,g,b,max = CubeSize - 1;
- +
- + /* Fill in the colour cube. */
- +
- + for(r = 0 ; r < CubeSize ; r++)
- + {
- + for(g = 0 ; g < CubeSize ; g++)
- + {
- + for(b = 0 ; b < CubeSize ; b++)
- + SetRGB4CM(xdev -> colormap,i++,(15 * r) / max,(15 * g) / max,(15 * b) / max);
- + }
- + }
- +
- + set_colour_printer_device((gx_device_amiga *)dev,CubeSize);
- + }
- +
- + xdev -> printer -> io_ColorMap = xdev -> colormap;
- + xdev -> rport -> BitMap = xdev -> bitmap;
- +
- + return(0);
- + }
- + else
- + perror("Ghostscript: failed to allocate colour map");
- + }
- + else
- + {
- + char buffer[256];
- +
- + sprintf(buffer,"Ghostscript: failed to allocate raster (wanted %ld, largest %ld)",(xdev -> width + 15) / 8 * xdev -> height * Depth,AvailMem(MEMF_ANY | MEMF_LARGEST));
- +
- + perror(buffer);
- + }
- + }
- + else
- + {
- + char buffer[256];
- +
- + sigprocmask(SIG_UNBLOCK,&trapped,NULL);
- +
- + sprintf(buffer,"Ghostscript: failed to query printer page size (error code #%ld)",xdev -> printer -> io_Error);
- +
- + perror(buffer);
- + }
- + }
- + else
- + perror("Ghostscript: failed to allocate raster port");
- + }
- + else
- + {
- + char buffer[256];
- +
- + sprintf(buffer,"Ghostscript: failed to open printer.device (error code #%ld)",xdev -> printer -> io_Error);
- +
- + perror(buffer);
- + }
- + }
- + else
- + perror("Ghostscript: failed to allocate device driver");
- + }
- + else
- + perror("Ghostscript: failed to create io port");
- +
- + return(-1);
- + }
- +
- + /* amiga_output_page_printer(gx_device *dev,int,int):
- + *
- + * Send a bitmap to the printer.
- + */
- +
- + int
- + amiga_output_page_printer(gx_device *dev,int num_copies,int flush)
- + {
- + const sigset_t trapped = sigmask(SIGINT);
- + int result,i;
- + ULONG Signals;
- +
- + xdev -> printer -> io_Command = PRD_DUMPRPORT;
- + xdev -> printer -> io_SrcWidth = xdev -> width;
- + xdev -> printer -> io_SrcHeight = xdev -> height;
- + xdev -> printer -> io_DestCols = xdev -> width;
- + xdev -> printer -> io_DestRows = xdev -> height;
- +
- + /* We cannot possibly allow being interrupted in the middle
- + * of a raster dump!
- + */
- +
- + sigprocmask(SIG_BLOCK,&trapped,NULL);
- +
- + for(i = 0 ; i < num_copies ; i++)
- + {
- + SetSignal(0,SIGBREAKF_CTRL_C | (1L << xdev -> port -> mp_SigBit));
- +
- + SendIO((struct IORequest *)xdev -> printer);
- +
- + Signals = Wait(SIGBREAKF_CTRL_C | (1L << xdev -> port -> mp_SigBit));
- +
- + if(Signals & SIGBREAKF_CTRL_C)
- + {
- + char buffer[256];
- +
- + if(!CheckIO((struct IORequest *)xdev -> printer))
- + AbortIO((struct IORequest *)xdev -> printer);
- +
- + WaitIO((struct IORequest *)xdev -> printer);
- +
- + sprintf(buffer,"Ghostscript: printing aborted");
- +
- + perror(buffer);
- +
- + result = -1;
- +
- + sigprocmask(SIG_UNBLOCK,&trapped,NULL);
- +
- + break;
- + }
- +
- + if(Signals & (1L << xdev -> port -> mp_SigBit))
- + {
- + if(WaitIO((struct IORequest *)xdev -> printer))
- + {
- + char buffer[256];
- +
- + sprintf(buffer,"Ghostscript: failed to print raster (error code #%ld)",xdev -> printer -> io_Error);
- +
- + perror(buffer);
- +
- + result = -1;
- +
- + sigprocmask(SIG_UNBLOCK,&trapped,NULL);
- +
- + break;
- + }
- + else
- + result = 0;
- + }
- + }
- +
- + sigprocmask(SIG_UNBLOCK,&trapped,NULL);
- +
- + return(result);
- + }
- +
- + /* amiga_close_printer(gx_device *dev):
- + *
- + * Close the printer driver.
- + */
- +
- + int
- + amiga_close_printer(gx_device *dev)
- + {
- + if(xdev -> bitmap)
- + {
- + DeleteBitMap(xdev -> bitmap,TRUE);
- +
- + xdev -> bitmap = NULL;
- + }
- +
- + if(xdev -> rport)
- + {
- + FreeVec(xdev -> rport);
- +
- + xdev -> rport = NULL;
- + }
- +
- + if(xdev -> colormap)
- + {
- + FreeColorMap(xdev -> colormap);
- +
- + xdev -> colormap = NULL;
- + }
- +
- + if(xdev -> printer)
- + {
- + if(xdev -> printer -> io_Device)
- + CloseDevice((struct IORequest *)xdev -> printer);
- +
- + DeleteIORequest(xdev -> printer);
- +
- + xdev -> printer = NULL;
- + }
- +
- + if(xdev -> port)
- + {
- + DeleteMsgPort(xdev -> port);
- +
- + xdev -> port = NULL;
- + }
- +
- + xdev -> width = xdev -> height = 0;
- + /* xdev -> x_pixels_per_inch = x_pixels_per_inch = 72.72;*/
- +
- + return(0);
- + }
- +
- + /* amiga_get_bits(gx_device *dev,int y,byte *str,byte **actual_data):
- + *
- + * Read the raster bits into a buffer.
- + */
- +
- + int
- + amiga_get_bits(gx_device *dev,int y,byte *str,byte **actual_data)
- + {
- + if(y < 0 || y > xdev -> height)
- + return(-1);
- + else
- + {
- + if(actual_data)
- + *actual_data = (byte *)(xdev -> bitmap -> Planes[0] + xdev -> bitmap -> BytesPerRow * y);
- + else
- + memcpy(str,xdev -> bitmap -> Planes[0] + xdev -> bitmap -> BytesPerRow * y,xdev -> bitmap -> BytesPerRow);
- +
- + return(0);
- + }
- + }
- +
- + /* amiga_open(gx_device *dev,ULONG Mode):
- + *
- + * Open a custom screen.
- + */
- +
- + int
- + amiga_open(gx_device *dev,ULONG Mode)
- + {
- + struct DisplayInfo DisplayInfo;
- + struct DimensionInfo DimensionInfo;
- +
- + /* Get the display dimensions. */
- +
- + if(GetDisplayInfoData(NULL,(APTR)&DisplayInfo,sizeof(struct DisplayInfo),DTAG_DISP,Mode) && GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_DIMS,Mode))
- + {
- + /* Two shades only, black & white */
- +
- + STATIC struct ColorSpec Colours[] =
- + {
- + 0, 0x0000, 0x0000, 0x0000,
- + 1, 0xFFFF, 0xFFFF, 0xFFFF,
- +
- + -1
- + };
- +
- + float Width,
- + Height;
- + LONG i,cube_size,max;
- + LONG ScreenWidth,
- + ScreenHeight,
- + ScreenDepth;
- +
- + /* Start up with a maximum depth display. */
- +
- + ScreenDepth = DimensionInfo . MaxDepth;
- +
- + /* Check to see whether we will be able to
- + * build a colour display or not.
- + */
- +
- + for(cube_size = 6 ; cube_size >= 2 ; cube_size--)
- + {
- + if((max = cube_size * cube_size * cube_size) <= 1 << ScreenDepth)
- + break;
- + }
- +
- + /* Got enough colours? */
- +
- + if(cube_size != 1)
- + set_colour_device((gx_device_amiga *)dev,cube_size,NULL);
- + else
- + {
- + ScreenDepth = 1;
- +
- + set_mono_device((gx_device_amiga *)dev);
- + }
- +
- + if(xdev -> width > 0 && xdev -> height > 0)
- + {
- + Width = xdev -> width;
- + Height = xdev -> height;
- + }
- + else
- + {
- + if(xdev -> page_width > 0.0)
- + Width = xdev -> page_width;
- + else
- + Width = 0.0;
- +
- + if(xdev -> page_height > 0.0)
- + Height = xdev -> page_height;
- + else
- + Height = 0.0;
- + }
- +
- + /* Use the best guess, we will take the standard
- + * low resolution x-dpi value and scale it by
- + * the pixel speed.
- + */
- +
- + if(DisplayInfo . PixelSpeed)
- + {
- + xdev -> x_pixels_per_inch = (35.0 * 140.0) / (float)DisplayInfo . PixelSpeed;
- + xdev -> y_pixels_per_inch = (xdev -> x_pixels_per_inch * (float)DisplayInfo . Resolution . x) / (float)DisplayInfo . Resolution . y;
- + }
- + else
- + {
- + xdev -> x_pixels_per_inch = 72.27;
- + xdev -> y_pixels_per_inch = 72.27;
- + }
- +
- + if(Width > 0.0)
- + ScreenWidth = (LONG)(Width * xdev -> x_pixels_per_inch);
- + else
- + ScreenWidth = 0;
- +
- + if(Height > 0.0)
- + ScreenHeight = (LONG)(Height * xdev -> y_pixels_per_inch);
- + else
- + ScreenHeight = 0;
- +
- + if(ScreenWidth < DimensionInfo . MinRasterWidth || ScreenWidth > DimensionInfo . MaxRasterWidth)
- + ScreenWidth = 0;
- +
- + if(ScreenHeight < DimensionInfo . MinRasterHeight || ScreenHeight > DimensionInfo . MaxRasterHeight)
- + ScreenHeight = 0;
- +
- + /* Try to open a custom screen; if this fails, try to
- + * rescale the colour cube and retry.
- + */
- +
- + do
- + {
- + if(!(xdev -> screen = OpenScreenTags(NULL,
- + SA_Depth, ScreenDepth,
- + SA_Overscan, OSCAN_TEXT,
- + SA_Quiet, TRUE,
- + SA_Behind, TRUE,
- + SA_DisplayID, Mode,
- + SA_Colors, Colours,
- + SA_AutoScroll, TRUE,
- + SA_ShowTitle, FALSE,
- + SA_Title, "Ghostscript Amiga output screen",
- +
- + ScreenWidth > 0 ? SA_Width : TAG_IGNORE, ScreenWidth,
- + ScreenHeight > 0 ? SA_Height : TAG_IGNORE, ScreenHeight,
- + TAG_DONE)))
- + {
- + if(ScreenDepth < 2)
- + break;
- + else
- + {
- + ScreenDepth--;
- +
- + /* Check to see whether we will be able to
- + * build a colour display or not.
- + */
- +
- + while(cube_size >= 2)
- + {
- + if((max = cube_size * cube_size * cube_size) <= 1 << ScreenDepth)
- + break;
- + else
- + cube_size--;
- + }
- +
- + /* Got enough colours? */
- +
- + if(cube_size == 1 || ScreenDepth == 1)
- + {
- + /* Obviously not. */
- +
- + ScreenDepth = 1;
- +
- + set_mono_device((gx_device_amiga *)dev);
- + }
- + }
- + }
- + }
- + while(!xdev -> screen);
- +
- + /* Did we succeed in opening the screen? */
- +
- + if(xdev -> screen)
- + {
- + if(xdev -> window = OpenWindowTags(NULL,
- + WA_Left, 0,
- + WA_Top, 0,
- + WA_Width, xdev -> screen -> Width,
- + WA_Height, xdev -> screen -> Height,
- + WA_Backdrop, TRUE,
- + WA_RMBTrap, TRUE,
- + WA_Borderless, TRUE,
- + WA_CustomScreen,xdev -> screen,
- + TAG_DONE))
- + {
- + xdev -> rport = xdev -> window -> RPort;
- + xdev -> width = xdev -> screen -> Width;
- + xdev -> height = xdev -> screen -> Height;
- + }
- + else
- + {
- + xdev -> rport = &xdev -> screen -> RastPort;
- + xdev -> width = xdev -> screen -> Width;
- + xdev -> height = xdev -> screen -> Height;
- + }
- +
- + /* Establish defaults. */
- +
- + DarkPen = 0;
- + LightPen = 1;
- +
- + SetBPen(xdev -> rport,0);
- + SetDrMd(xdev -> rport,JAM2);
- +
- + /* Create the temporary drawing area. */
- +
- + if(xdev -> temp_rport = CreateTempRPort(xdev -> rport))
- + {
- + if(xdev -> temp_array = (UBYTE *)AllocVec((xdev -> screen -> Width + 15) & ~15,MEMF_ANY))
- + {
- + /* Colour output enabled? */
- +
- + if(xdev -> cube_size > 0)
- + {
- + LONG r,g,b,max = xdev -> cube_size - 1;
- +
- + i = 0;
- +
- + /* Build a suitable colour map. */
- +
- + if(GfxBase -> LibNode . lib_Version >= 39)
- + {
- + for(r = 0 ; r < xdev -> cube_size ; r++)
- + {
- + for(g = 0 ; g < xdev -> cube_size ; g++)
- + {
- + for(b = 0 ; b < xdev -> cube_size ; b++)
- + SetRGB32(&xdev -> screen -> ViewPort,i++,SPREAD((255 * r) / max),SPREAD((255 * g) / max),SPREAD((255 * b) / max));
- + }
- + }
- + }
- + else
- + {
- + for(r = 0 ; r < xdev -> cube_size ; r++)
- + {
- + for(g = 0 ; g < xdev -> cube_size ; g++)
- + {
- + for(b = 0 ; b < xdev -> cube_size ; b++)
- + SetRGB4(&xdev -> screen -> ViewPort,i++,(15 * r) / max,(15 * g) / max,(15 * b) / max);
- + }
- + }
- + }
- + }
- + }
- + else
- + {
- + perror("Ghostscript: failed to allocate temporary line");
- +
- + return(-1);
- + }
- + }
- + else
- + {
- + perror("Ghostscript: failed to allocate temporary raster");
- +
- + return(-1);
- + }
- +
- + amiga_set_pen(dev,DarkPen);
- +
- + return(0);
- + }
- + else
- + perror("Ghostscript: failed to open screen");
- + }
- + else
- + perror("Ghostscript: failed to get display mode information");
- +
- + return(-1);
- + }
- +
- + /* amiga_output_page(gx_device *dev,int,int):
- + *
- + * Page is not `buffered', just bring screen/window
- + * to the front.
- + */
- +
- + int
- + amiga_output_page(gx_device *dev,int num_copies,int flush)
- + {
- + if(xdev -> screen)
- + ScreenToFront(xdev -> screen);
- + else
- + {
- + if(xdev -> window)
- + WindowToFront(xdev -> window);
- + }
- +
- + return(0);
- + }
- +
- + /* amiga_close(gx_device *dev):
- + *
- + * Close the screen and free associated resources.
- + */
- +
- + int
- + amiga_close(gx_device *dev)
- + {
- + if(xdev -> dispatcher)
- + {
- + const sigset_t trapped = sigmask(SIGINT);
- +
- + sigprocmask(SIG_BLOCK,&trapped,NULL);
- +
- + Forbid();
- +
- + Signal(xdev -> dispatcher,SIG_KILL);
- +
- + SetSignal(0,SIG_HANDSHAKE);
- +
- + Wait(SIG_HANDSHAKE);
- +
- + Permit();
- +
- + sigprocmask(SIG_UNBLOCK,&trapped,NULL);
- + }
- +
- + if(xdev -> temp_array)
- + {
- + FreeVec(xdev -> temp_array);
- +
- + xdev -> temp_array = NULL;
- + }
- +
- + if(xdev -> pens)
- + {
- + LONG i;
- +
- + for(i = 0 ; i < xdev -> cube_size * xdev -> cube_size * xdev -> cube_size ; i++)
- + {
- + if(xdev -> pens[i] != -1)
- + ReleasePen(xdev -> window -> WScreen -> ViewPort . ColorMap,xdev -> pens[i]);
- + }
- +
- + FreeVec(xdev -> pens);
- +
- + xdev -> pens = NULL;
- + }
- +
- + if(xdev -> temp_rport)
- + {
- + DeleteTempRPort(xdev -> temp_rport);
- +
- + xdev -> temp_rport = NULL;
- + }
- +
- + if(xdev -> window)
- + {
- + CloseWindow(xdev -> window);
- +
- + xdev -> window = NULL;
- + }
- +
- + DeleteScrollers(dev);
- +
- + if(xdev -> super_bitmap)
- + {
- + DeleteBitMap(xdev -> super_bitmap,FALSE);
- +
- + xdev -> super_bitmap = NULL;
- + }
- +
- + if(xdev -> screen)
- + {
- + CloseScreen(xdev -> screen);
- +
- + xdev -> screen = NULL;
- + }
- +
- + xdev -> width = xdev -> height = 0;
- + /* xdev -> x_pixels_per_inch = x_pixels_per_inch = 72.72;*/
- +
- + return(0);
- + }
- +
- + /* amiga_fill_rectangle(gx_device *dev,int x,int y,int w,int h,gx_color_index color):
- + *
- + * Fill a rectangle with a given colour. This one is simple as it can
- + * be done with the Amiga graphics primitives.
- + */
- +
- + int
- + amiga_fill_rectangle(gx_device *dev,int x,int y,int w,int h,gx_color_index color)
- + {
- + if(x < 0 || x > xdev -> width - w || y < 0 || y > xdev -> height - h)
- + return(-1);
- + else
- + {
- + if(w > 0 && h > 0 && color != gx_no_color_index)
- + {
- + amiga_set_pen(dev,color);
- +
- + RectFill(xdev -> rport,x,y,x + w - 1,y + h - 1);
- + }
- +
- + return(0);
- + }
- + }
- +
- + /* amiga_copy_mono():
- + *
- + * Copy a monochrome image. This operation requires a bit of work as
- + * we cannot simply blit the image into the bitmap.
- + */
- +
- + 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)
- + {
- + if(y < 0 || x < 0 || w < 0 || h < 0)
- + return(-1);
- + else
- + {
- + if(w > 0 && h > 0)
- + {
- + LONG i,j;
- +
- + if(zero == gx_no_color_index)
- + {
- + if(one != gx_no_color_index)
- + {
- + do
- + {
- + ReadPixelLine8(xdev -> rport,x,y,w,xdev -> temp_array,xdev -> temp_rport);
- +
- + for(i = sourcex, j = 0 ; i < sourcex + w ; i++, j++)
- + {
- + if(base[i >> 3] & shift[i & 7])
- + xdev -> temp_array[j] = one;
- + }
- +
- + WritePixelLine8(xdev -> rport,x,y,w,xdev -> temp_array,xdev -> temp_rport);
- +
- + base += raster;
- +
- + y++;
- + }
- + while(--h);
- + }
- + }
- + else
- + {
- + if(one == gx_no_color_index)
- + {
- + do
- + {
- + ReadPixelLine8(xdev -> rport,x,y,w,xdev -> temp_array,xdev -> temp_rport);
- +
- + for(i = sourcex, j = 0 ; i < w + sourcex ; i++, j++)
- + {
- + if(!(base[i >> 3] & shift[i & 7]))
- + xdev -> temp_array[j] = zero;
- + }
- +
- + WritePixelLine8(xdev -> rport,x,y,w,xdev -> temp_array,xdev -> temp_rport);
- +
- + base += raster;
- +
- + y++;
- + }
- + while(--h);
- + }
- + else
- + {
- + do
- + {
- + for(i = sourcex, j = 0 ; i < w + sourcex ; i++, j++)
- + {
- + if(base[i >> 3] & shift[i & 7])
- + xdev -> temp_array[j] = one;
- + else
- + xdev -> temp_array[j] = zero;
- + }
- +
- + WritePixelLine8(xdev -> rport,x,y,w,xdev -> temp_array,xdev -> temp_rport);
- +
- + base += raster;
- +
- + y++;
- + }
- + while(--h);
- + }
- + }
- + }
- +
- + return(0);
- + }
- + }
- +
- + /* amiga_copy_color():
- + *
- + * Copy a color image (oh well...). This is just the same as the
- + * copy_mono() routine.
- + */
- +
- + 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)
- + {
- + if(y < 0 || x < 0 || w < 0 || h < 0)
- + return(-1);
- + else
- + {
- + if(w > 0 && h > 0)
- + {
- + LONG i,j;
- +
- + do
- + {
- + for(i = sourcex, j = 0 ; i < w + sourcex ; i++, j++)
- + {
- + if(base[i >> 3] & shift[i & 7])
- + xdev -> temp_array[j] = DarkPen;
- + else
- + xdev -> temp_array[j] = LightPen;
- + }
- +
- + WritePixelLine8(xdev -> rport,x,y,w,xdev -> temp_array,xdev -> temp_rport);
- +
- + base += raster;
- +
- + y++;
- + }
- + while(--h);
- + }
- +
- + return(0);
- + }
- + }
- +
- + /* amiga_draw_line(gx_device *dev,int x0,int y0,int x1,int y1,gx_color_index color):
- + *
- + * Draw a line between two points. This one is easy as it can be done
- + * with the Amiga graphics primitives, the only glitch is having to reset
- + * the last dot to its original colour.
- + */
- +
- + int
- + amiga_draw_line(gx_device *dev,int x0,int y0,int x1,int y1,gx_color_index color)
- + {
- + if(color != gx_no_color_index && (x0 != x1 || y0 != y1))
- + {
- + LONG pen;
- +
- + pen = ReadPixel(xdev -> rport,x1,y1);
- +
- + amiga_set_pen(dev,color);
- +
- + Move(xdev -> rport,x0,y0);
- + Draw(xdev -> rport,x1,y1);
- +
- + if(pen == color)
- + {
- + amiga_set_pen(dev,pen);
- +
- + WritePixel(xdev -> rport,x1,y1);
- + }
- + }
- +
- + return(0);
- + }
- +
- + /* amiga_copy_mono_raw():
- + *
- + * Copy a monochrome image to a bitmap. Just watch the
- + * astounding number of case switches.
- + */
- +
- + 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)
- + {
- + if(y < 0 || x < 0 || w < 0 || h < 0)
- + return(-1);
- + else
- + {
- + if(w > 0 && h > 0)
- + {
- + LONG i,j,modulo = xdev -> rport -> BitMap -> BytesPerRow;
- + UBYTE *line;
- +
- + w += sourcex;
- +
- + line = xdev -> rport -> BitMap -> Planes[0] + y * xdev -> rport -> BitMap -> BytesPerRow;
- +
- + if(zero == gx_no_color_index)
- + {
- + if(one != gx_no_color_index)
- + {
- + if(one)
- + {
- + do
- + {
- + for(i = sourcex, j = x ; i < w ; i++, j++)
- + {
- + if(base[i >> 3] & shift[i & 7])
- + line[j >> 3] |= shift[j & 7];
- + }
- +
- + base += raster;
- +
- + line += modulo;
- + }
- + while(--h);
- + }
- + else
- + {
- + do
- + {
- + for(i = sourcex, j = x ; i < w ; i++, j++)
- + {
- + if(base[i >> 3] & shift[i & 7])
- + line[j >> 3] &= masks[j & 7];
- + }
- +
- + base += raster;
- +
- + line += modulo;
- + }
- + while(--h);
- + }
- + }
- + }
- + else
- + {
- + if(one == gx_no_color_index)
- + {
- + if(zero)
- + {
- + do
- + {
- + for(i = sourcex, j = x ; i < w ; i++, j++)
- + {
- + if(!(base[i >> 3] & shift[i & 7]))
- + line[j >> 3] |= shift[j & 7];
- + }
- +
- + base += raster;
- +
- + line += modulo;
- + }
- + while(--h);
- + }
- + else
- + {
- + do
- + {
- + for(i = sourcex, j = x ; i < w ; i++, j++)
- + {
- + if(!(base[i >> 3] & shift[i & 7]))
- + line[j >> 3] &= masks[j & 7];
- + }
- +
- + base += raster;
- +
- + line += modulo;
- + }
- + while(--h);
- + }
- + }
- + else
- + {
- + if(one)
- + {
- + do
- + {
- + for(i = sourcex, j = x ; i < w ; i++, j++)
- + {
- + if(base[i >> 3] & shift[i & 7])
- + line[j >> 3] |= shift[j & 7];
- + else
- + line[j >> 3] &= masks[j & 7];
- + }
- +
- + base += raster;
- +
- + line += modulo;
- + }
- + while(--h);
- + }
- + else
- + {
- + do
- + {
- + for(i = sourcex, j = x ; i < w ; i++, j++)
- + {
- + if(base[i >> 3] & shift[i & 7])
- + line[j >> 3] &= masks[j & 7];
- + else
- + line[j >> 3] |= shift[j & 7];
- + }
- +
- + base += raster;
- +
- + line += modulo;
- + }
- + while(--h);
- + }
- + }
- + }
- + }
- +
- + return(0);
- + }
- + }
- +
- + /* amiga_copy_color_raw():
- + *
- + * Copy a color image (oh well...). This is just the same as the
- + * copy_mono() routine.
- + */
- +
- + 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)
- + {
- + if(y < 0 || x < 0 || w < 0 || h < 0)
- + return(-1);
- + else
- + {
- + if(w > 0 && h > 0)
- + {
- + LONG i,j,modulo = xdev -> rport -> BitMap -> BytesPerRow;
- + UBYTE *line;
- +
- + line = xdev -> rport -> BitMap -> Planes[0] + y * xdev -> rport -> BitMap -> BytesPerRow;
- +
- + w += sourcex;
- +
- + do
- + {
- + for(i = sourcex, j = x ; i < w ; i++, j++)
- + {
- + if(base[i >> 3] & shift[i & 7])
- + line[j >> 3] |= shift[j & 7];
- + else
- + line[j >> 3] &= masks[j & 7];
- + }
- +
- + base += raster;
- +
- + line += modulo;
- + }
- + while(--h);
- + }
- +
- + return(0);
- + }
- + }
- +
- + /* amiga_fill_rectangle_raw():
- + *
- + * Fill a rectangular area in a bitmap.
- + */
- +
- + int
- + amiga_fill_rectangle_raw(gx_device *dev,int x,int y,int w,int h,gx_color_index color)
- + {
- + if(x < 0 || x > xdev -> width - w || y < 0 || y > xdev -> height - h)
- + return(-1);
- + else
- + {
- + if(w > 0 && h > 0 && color != gx_no_color_index)
- + {
- + UBYTE *line,startmask,endmask;
- + LONG right,mid,modulo = xdev -> rport -> BitMap -> BytesPerRow;
- +
- + right = x + w;
- + mid = (right >> 3) - (x >> 3);
- + line = xdev -> rport -> BitMap -> Planes[0] + y * xdev -> rport -> BitMap -> BytesPerRow + (x >> 3);
- +
- + x &= 7;
- + right &= 7;
- +
- + if(color)
- + {
- + startmask = 0xFF >> x;
- + endmask = ~(0xFF >> right);
- +
- + if(mid)
- + {
- + UBYTE *ptr;
- + int i;
- +
- + do
- + {
- + ptr = line;
- +
- + *ptr++ |= startmask;
- +
- + i = mid;
- +
- + while(--i > 0)
- + *ptr++ = 0xFF;
- +
- + *ptr |= endmask;
- +
- + line += modulo;
- + }
- + while(--h);
- + }
- + else
- + {
- + startmask &= endmask;
- +
- + do
- + {
- + *line |= startmask;
- +
- + line += modulo;
- + }
- + while(--h);
- + }
- + }
- + else
- + {
- + startmask = ~(0xFF >> x);
- + endmask = 0xFF >> right;
- +
- + if(mid)
- + {
- + UBYTE *ptr;
- + LONG i;
- +
- + do
- + {
- + ptr = line;
- +
- + *ptr++ &= startmask;
- +
- + i = mid;
- +
- + while(--i > 0)
- + *ptr++ = 0x00;
- +
- + *ptr &= endmask;
- +
- + line += modulo;
- + }
- + while(--h);
- + }
- + else
- + {
- + startmask |= endmask;
- +
- + do
- + {
- + *line &= startmask;
- +
- + line += modulo;
- + }
- + while(--h);
- + }
- + }
- + }
- +
- + return(0);
- + }
- + }
- +
- + /* amiga_draw_line_raw():
- + *
- + * Draw a hair line, your basic DDA algorithm;
- + * keep your fingers crossed.
- + */
- +
- + int
- + amiga_draw_line_raw(gx_device *dev,int x,int y,int x1,int y1,gx_color_index color)
- + {
- + if(color != gx_no_color_index && (x != x1 || y != y1))
- + {
- + short xstep,ystep,dx,dy,diff,modulo;
- + UBYTE *line,*plane,pen;
- + LONG last;
- +
- + modulo = xdev -> rport -> BitMap -> BytesPerRow;
- + plane = xdev -> rport -> BitMap -> Planes[0];
- +
- + line = &plane[y1 * modulo];
- + last = y1;
- + pen = line[x1 >> 3] & (x1 & 7);
- +
- + dx = x1 - x;
- + dy = y1 - y;
- +
- + if(dx < 0)
- + {
- + dx = -dx;
- + dy = -dy;
- +
- + x = x1;
- + y = y1;
- + }
- +
- + if(y != last)
- + line = &plane[(last = y) * modulo];
- +
- + if(color)
- + {
- + line[x >> 3] |= shift[x & 7];
- +
- + xstep = ystep = 0;
- +
- + if(dy < 0)
- + {
- + if(dx > -dy)
- + {
- + diff = -dx / 2;
- +
- + do
- + {
- + xstep++;
- +
- + if(diff > 0)
- + {
- + ystep--;
- +
- + diff = diff - dy - dx;
- + }
- + else
- + diff -= dy;
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] |= shift[x1 & 7];
- + }
- + }
- + while(xstep < dx);
- + }
- + else
- + {
- + if(dx == -dy)
- + diff = 0;
- + else
- + diff = -dy / 2;
- +
- + do
- + {
- + ystep--;
- +
- + if(diff > 0)
- + diff -= dx;
- + else
- + {
- + xstep++;
- +
- + diff = diff - dy - dx;
- + }
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] |= shift[x1 & 7];
- + }
- + }
- + while(ystep > dy);
- + }
- + }
- + else
- + {
- + if(dx > dy)
- + {
- + diff = -dx / 2;
- +
- + do
- + {
- + xstep++;
- +
- + if(diff > 0)
- + {
- + ystep++;
- +
- + diff = diff + dy - dx;
- + }
- + else
- + diff += dy;
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] |= shift[x1 & 7];
- + }
- + }
- + while(xstep < dx);
- + }
- + else
- + {
- + if(dx == dy)
- + diff = 0;
- + else
- + diff = dy / 2;
- +
- + do
- + {
- + ystep++;
- +
- + if(diff > 0)
- + diff -= dx;
- + else
- + {
- + xstep++;
- +
- + diff = diff + dy - dx;
- + }
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] |= shift[x1 & 7];
- + }
- + }
- + while(ystep < dy);
- + }
- + }
- +
- + if(!pen)
- + {
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] &= masks[x1 & 7];
- + }
- + }
- + else
- + {
- + line[x >> 3] &= masks[x & 7];
- +
- + xstep = ystep = 0;
- +
- + if(dy < 0)
- + {
- + if(dx > -dy)
- + {
- + diff = -dx / 2;
- +
- + do
- + {
- + xstep++;
- +
- + if(diff > 0)
- + {
- + ystep--;
- +
- + diff = diff - dy - dx;
- + }
- + else
- + diff -= dy;
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] &= masks[x1 & 7];
- + }
- + }
- + while(xstep < dx);
- + }
- + else
- + {
- + if(dx == -dy)
- + diff = 0;
- + else
- + diff = -dy / 2;
- +
- + do
- + {
- + ystep--;
- +
- + if(diff > 0)
- + diff -= dx;
- + else
- + {
- + xstep++;
- +
- + diff = diff - dy - dx;
- + }
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] &= masks[x1 & 7];
- + }
- + }
- + while(ystep > dy);
- + }
- + }
- + else
- + {
- + if(dx > dy)
- + {
- + diff = -dx / 2;
- +
- + do
- + {
- + xstep++;
- +
- + if(diff > 0)
- + {
- + ystep++;
- +
- + diff = diff + dy - dx;
- + }
- + else
- + diff += dy;
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] &= masks[x1 & 7];
- + }
- + }
- + while(xstep < dx);
- + }
- + else
- + {
- + if(dx == dy)
- + diff = 0;
- + else
- + diff = dy / 2;
- +
- + do
- + {
- + ystep++;
- +
- + if(diff > 0)
- + diff -= dx;
- + else
- + {
- + xstep++;
- +
- + diff = diff + dy - dx;
- + }
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] &= masks[x1 & 7];
- + }
- + }
- + while(ystep < dy);
- + }
- + }
- +
- + if(pen)
- + {
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] |= pen;
- + }
- + }
- + }
- +
- + return(0);
- + }
- +
- + /* amiga_open_ilbm(gx_device *dev):
- + *
- + * Open the ilbm device.
- + */
- +
- + int
- + amiga_open_ilbm(gx_device *dev)
- + {
- + if(xdev -> width <= 0 || xdev -> height <= 0)
- + {
- + if(xdev -> page_width > 0.0)
- + xdev -> width = (int)(xdev -> x_pixels_per_inch * xdev -> page_width);
- + else
- + xdev -> width = 640;
- +
- + if(xdev -> page_height > 0.0)
- + xdev -> height = (int)(xdev -> y_pixels_per_inch * xdev -> page_height);
- + else
- + xdev -> height = 512;
- + }
- +
- + if(xdev -> rport = (struct RastPort *)AllocVec(sizeof(struct RastPort),MEMF_ANY))
- + {
- + InitRastPort(xdev -> rport);
- +
- + if(xdev -> bitmap = (struct BitMap *)AllocVec(sizeof(struct BitMap),MEMF_ANY))
- + {
- + InitBitMap(xdev -> bitmap,1,xdev -> width,xdev -> height);
- +
- + if(xdev -> bitplane = AllocVec(xdev -> bitmap -> Rows * xdev -> bitmap -> BytesPerRow,MEMF_ANY | MEMF_CLEAR))
- + {
- + xdev -> bitmap -> Planes[0] = xdev -> bitplane;
- + xdev -> rport -> BitMap = xdev -> bitmap;
- + xdev -> page_count = 1;
- +
- + DarkPen = 0;
- + LightPen = 1;
- +
- + return(0);
- + }
- + else
- + {
- + char buffer[256];
- +
- + sprintf(buffer,"Ghostscript: failed to allocate raster (wanted %ld, largest %ld)",xdev -> bitmap -> Rows * xdev -> bitmap -> BytesPerRow,AvailMem(MEMF_ANY | MEMF_LARGEST));
- +
- + perror(buffer);
- + }
- + }
- + else
- + perror("Ghostscript: failed to allocate bitmap");
- + }
- + else
- + perror("Ghostscript: failed to allocate raster port");
- +
- + return(-1);
- + }
- +
- + /* amiga_output_page_ilbm(gx_device *dev,int,int):
- + *
- + * Send a bitmap to an IFF-ILBM file.
- + */
- +
- + int
- + amiga_output_page_ilbm(gx_device *dev,int num_copies,int flush)
- + {
- + const sigset_t trapped = sigmask(SIGINT);
- + char buffer[270];
- + LONG result = -1;
- +
- + sprintf(buffer,"%s_%04d.ilbm",xdev -> file_name,xdev -> page_count);
- +
- + fprintf(stdout,"\n\033[ASaving page Nº%d to \"%s\"...\033[K",xdev -> page_count,buffer);
- + fflush(stdout);
- +
- + sigprocmask(SIG_BLOCK,&trapped,NULL);
- +
- + if(SaveBitMap(buffer,xdev -> bitmap,xdev -> width,xdev -> height,(UWORD)xdev -> x_pixels_per_inch,xdev -> y_pixels_per_inch))
- + {
- + fprintf(stdout,"\n\033[APage saved to file \"%s\".\033[K\n",buffer);
- +
- + result = 0;
- +
- + xdev -> page_count;
- + }
- + else
- + perror("\n\033[AGhostscript: error saving page\033[K");
- +
- + sigprocmask(SIG_UNBLOCK,&trapped,NULL);
- +
- + return(result);
- + }
- +
- + /* amiga_close_ilbm(gx_device *dev):
- + *
- + * Close the ilbm driver.
- + */
- +
- + int
- + amiga_close_ilbm(gx_device *dev)
- + {
- + if(xdev -> bitplane)
- + {
- + FreeVec(xdev -> bitplane);
- +
- + xdev -> bitplane = NULL;
- + }
- +
- + if(xdev -> bitmap)
- + {
- + FreeVec(xdev -> bitmap);
- +
- + xdev -> bitmap = NULL;
- + }
- +
- + if(xdev -> rport)
- + {
- + FreeVec(xdev -> rport);
- +
- + xdev -> rport = NULL;
- + }
- +
- + xdev -> width = xdev -> height = 0;
- + /* xdev -> x_pixels_per_inch = x_pixels_per_inch = 72.72;*/
- +
- + return(0);
- + }
- +
- + private const gs_prop_item props_amiga[] =
- + {
- + prop_def("PageWidth", prt_string),
- + prop_def("PageHeight", prt_string),
- + prop_def("OutputFile", prt_string)
- + };
- +
- + int
- + amiga_get_props(gx_device *dev,gs_prop_item *plist)
- + {
- + int start = gx_default_get_props(dev,plist);
- +
- + if(plist != 0)
- + {
- + gs_prop_item *pi = plist + start;
- +
- + memcpy(pi,props_amiga,sizeof(props_amiga));
- +
- + pi[0] . value .a.p.s = "";
- + pi[0] . value .a.size = -1;
- +
- + pi[1] . value .a.p.s = "";
- + pi[1] . value .a.size = -1;
- +
- + pi[2] . value .a.p.s = "";
- + pi[2] . value .a.size = -1;
- + }
- +
- + return(start + (sizeof(props_amiga) / sizeof(gs_prop_item)));
- + }
- +
- + int
- + amiga_put_props(gx_device *dev,gs_prop_item *plist,int count)
- + {
- + gs_prop_item *known[3];
- + LONG code = 0;
- +
- + props_extract(plist,count,props_amiga,3,known,0);
- +
- + if((code = gx_default_put_props(dev,plist,count)) < 0)
- + return(code);
- + else
- + {
- + if(known[0] != 0)
- + {
- + gs_prop_item *pn = known[0];
- + LONG size = pn -> value . a . size;
- + char temp[256];
- +
- + if(size >= 256)
- + {
- + pn -> status = pv_limitcheck;
- +
- + code = gs_error_limitcheck;
- + }
- + else
- + {
- + memcpy(temp,pn -> value . a . p . s,size);
- +
- + temp[size] = 0;
- +
- + xdev -> page_width = GetInches(temp);
- +
- + if(xdev -> page_width <= 0.0)
- + {
- + xdev -> page_width = 0.0;
- +
- + pn -> status = pv_limitcheck;
- +
- + code = gs_error_limitcheck;
- + }
- + else
- + {
- + if(code == 0)
- + code = 1;
- + }
- + }
- + }
- +
- + if(known[1] != 0)
- + {
- + gs_prop_item *pn = known[1];
- + LONG size = pn -> value . a . size;
- + char temp[256];
- +
- + if(size >= 256)
- + {
- + pn -> status = pv_limitcheck;
- +
- + code = gs_error_limitcheck;
- + }
- + else
- + {
- + memcpy(temp,pn -> value . a . p . s,size);
- +
- + temp[size] = 0;
- +
- + xdev -> page_height = GetInches(temp);
- +
- + if(xdev -> page_height <= 0.0)
- + {
- + xdev -> page_height = 0.0;
- +
- + pn -> status = pv_limitcheck;
- +
- + code = gs_error_limitcheck;
- + }
- + else
- + {
- + if(code == 0)
- + code = 1;
- + }
- + }
- + }
- +
- + if(known[2] != 0)
- + {
- + gs_prop_item *pn = known[2];
- + LONG size = pn -> value . a . size;
- +
- + if(size >= 256)
- + {
- + pn -> status = pv_limitcheck;
- +
- + code = gs_error_limitcheck;
- + }
- + else
- + {
- + memcpy(xdev -> file_name,pn -> value . a . p . s,size);
- +
- + xdev -> file_name[size] = 0;
- + }
- + }
- +
- + if(code < 0)
- + return_error(code);
- +
- + if(xdev -> is_open && code)
- + {
- + LONG ccode = gs_closedevice(dev);
- +
- + if(ccode < 0)
- + return(ccode);
- + }
- +
- + return(code);
- + }
- + }
- +
- + /* amiga_color_map_rgb_color(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue):
- + *
- + * Turn an RGB colour into a pen index.
- + */
- +
- + gx_color_index
- + amiga_color_map_rgb_color(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue)
- + {
- + LONG max = xdev -> cube_size - 1,r,g,b;
- +
- + r = (max * red) / gx_max_color_value;
- + g = (max * green) / gx_max_color_value;
- + b = (max * blue) / gx_max_color_value;
- +
- + return((r * xdev -> cube_size + g) * xdev -> cube_size + b);
- + }
- +
- + /* amiga_color_map_color_rgb(gx_device *dev,gx_color_index color,gx_color_value rgb[3]):
- + *
- + * Turn a pen index into RGB colour values.
- + */
- +
- + int
- + amiga_color_map_color_rgb(gx_device *dev,gx_color_index color,gx_color_value rgb[3])
- + {
- + LONG i,value,max = xdev -> cube_size - 1;
- +
- + for(i = 2 ; i >= 0 ; i--)
- + {
- + value = color % xdev -> cube_size;
- +
- + rgb[i] = (gx_max_color_value * value) / max;
- +
- + color /= xdev -> cube_size;
- + }
- +
- + return(0);
- + }
- +
- + /* amiga_color_map_rgb_color_pen(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue):
- + *
- + * Turn an RGB colour into a pen index; this routine takes remapped
- + * pens into account.
- + */
- +
- + gx_color_index
- + amiga_color_map_rgb_color_pen(gx_device *dev,gx_color_value red,gx_color_value green,gx_color_value blue)
- + {
- + LONG max = xdev -> cube_size - 1,r,g,b;
- +
- + r = (max * red) / gx_max_color_value;
- + g = (max * green) / gx_max_color_value;
- + b = (max * blue) / gx_max_color_value;
- +
- + return(xdev -> pens[(r * xdev -> cube_size + g) * xdev -> cube_size + b]);
- + }
- +
- + /* amiga_color_map_color_rgb_pen(gx_device *dev,gx_color_index color,gx_color_value rgb[3]):
- + *
- + * Turn a pen index into RGB colour values; this routine takes remapped
- + * pens into account.
- + */
- +
- + int
- + amiga_color_map_color_rgb_pen(gx_device *dev,gx_color_index color,gx_color_value rgb[3])
- + {
- + LONG i,value,max = xdev -> cube_size - 1;
- +
- + /* Find the matching pen... */
- +
- + for(i = 0 ; i < xdev -> cube_size * xdev -> cube_size * xdev -> cube_size ; i++)
- + {
- + if(xdev -> pens[i] == color)
- + {
- + color = i;
- +
- + break;
- + }
- + }
- +
- + for(i = 2 ; i >= 0 ; i--)
- + {
- + value = color % xdev -> cube_size;
- +
- + rgb[i] = (gx_max_color_value * value) / max;
- +
- + color /= xdev -> cube_size;
- + }
- +
- + return(0);
- + }
- +
- + /* amiga_copy_color8():
- + *
- + * Copy a color image, the source is guaranteed to consist of
- + * one byte per colour.
- + */
- +
- + 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)
- + {
- + if(y < 0 || x < 0 || w < 0 || h < 0)
- + return(-1);
- + else
- + {
- + if(w > 0 && h > 0)
- + {
- + base += sourcex;
- +
- + if(w > xdev -> width)
- + w = xdev -> width;
- +
- + do
- + {
- +
- + CopyMem((UBYTE *)base,xdev -> temp_array,w);
- +
- + WritePixelLine8(xdev -> rport,x,y++,w,xdev -> temp_array,xdev -> temp_rport);
- +
- + base += raster;
- + }
- + while(--h);
- + }
- +
- + return(0);
- + }
- + }
- +
- + /* amiga_copy_mono_raw_color():
- + *
- + * Copy a monochrome image to a bitmap.
- + */
- +
- + 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)
- + {
- + if(y < 0 || x < 0 || w < 0 || h < 0)
- + return(-1);
- + else
- + {
- + if(w > 0 && h > 0 && zero != gx_no_color_index && one != gx_no_color_index)
- + {
- + PLANEPTR line[12];
- + LONG i,j,k,modulo = xdev -> rport -> BitMap -> BytesPerRow,depth = xdev -> rport -> BitMap -> Depth;
- +
- + for(i = 0 ; i < depth ; i++)
- + line[i] = xdev -> rport -> BitMap -> Planes[i] + y * modulo;
- +
- + w += sourcex;
- +
- + if(zero == gx_no_color_index)
- + {
- + do
- + {
- + for(i = sourcex, j = x ; i < w ; i++, j++)
- + {
- + if(base[i >> 3] & shift[i & 7])
- + {
- + for(k = 0 ; k < depth ; k++)
- + {
- + if(one & (1 << k))
- + line[k][j >> 3] |= shift[j & 7];
- + else
- + line[k][j >> 3] &= masks[j & 7];
- + }
- + }
- + }
- +
- + base += raster;
- +
- + for(k = 0 ; k < depth ; k++)
- + line[k] += modulo;
- + }
- + while(--h);
- + }
- + else
- + {
- + if(one == gx_no_color_index)
- + {
- + do
- + {
- + for(i = sourcex, j = x ; i < w ; i++, j++)
- + {
- + if(base[i >> 3] & shift[i & 7])
- + {
- + for(k = 0 ; k < depth ; k++)
- + {
- + if(zero & (1 << k))
- + line[k][j >> 3] |= shift[j & 7];
- + else
- + line[k][j >> 3] &= masks[j & 7];
- + }
- + }
- + }
- +
- + base += raster;
- +
- + for(k = 0 ; k < depth ; k++)
- + line[k] += modulo;
- + }
- + while(--h);
- + }
- + else
- + {
- + do
- + {
- + for(i = sourcex, j = x ; i < w ; i++, j++)
- + {
- + if(base[i >> 3] & shift[i & 7])
- + {
- + for(k = 0 ; k < depth ; k++)
- + {
- + if(one & (1 << k))
- + line[k][j >> 3] |= shift[j & 7];
- + else
- + line[k][j >> 3] &= masks[j & 7];
- + }
- + }
- + else
- + {
- + for(k = 0 ; k < depth ; k++)
- + {
- + if(zero & (1 << k))
- + line[k][j >> 3] |= shift[j & 7];
- + else
- + line[k][j >> 3] &= masks[j & 7];
- + }
- + }
- + }
- +
- + base += raster;
- +
- + for(k = 0 ; k < depth ; k++)
- + line[k] += modulo;
- + }
- + while(--h);
- + }
- + }
- + }
- +
- + return(0);
- + }
- + }
- +
- + /* amiga_copy_color_raw_color16():
- + *
- + * Copy a color image, the source data is guaranteed to consist
- + * of one word per colour.
- + */
- +
- + 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)
- + {
- + if(y < 0 || x < 0 || w < 0 || h < 0)
- + return(-1);
- + else
- + {
- + if(w > 0 && h > 0)
- + {
- + PLANEPTR line[12];
- + LONG i,j,k,modulo = xdev -> rport -> BitMap -> BytesPerRow,depth = xdev -> rport -> BitMap -> Depth;
- + UWORD *base = (UWORD *)data;
- +
- + for(i = 0 ; i < depth ; i++)
- + line[i] = xdev -> rport -> BitMap -> Planes[i] + y * modulo;
- +
- + w += sourcex;
- +
- + raster /= 2;
- +
- + do
- + {
- + for(i = sourcex, j = x ; i < w ; i++, j++)
- + {
- + for(k = 0 ; k < depth ; k++)
- + {
- + if(base[i] & (1 << k))
- + line[k][j >> 3] |= shift[j & 7];
- + else
- + line[k][j >> 3] &= masks[j & 7];
- + }
- + }
- +
- + base += raster;
- +
- + for(k = 0 ; k < depth ; k++)
- + line[k] += modulo;
- + }
- + while(--h);
- + }
- +
- + return(0);
- + }
- + }
- +
- + /* amiga_fill_rectangle_raw_color():
- + *
- + * Fill a rectangular area in a bitmap.
- + */
- +
- + int
- + amiga_fill_rectangle_raw_color(gx_device *dev,int x,int y,int w,int h,gx_color_index color)
- + {
- + if(x < 0 || x > xdev -> width - w || y < 0 || y > xdev -> height - h)
- + return(-1);
- + else
- + {
- + if(w > 0 && h > 0 && color != gx_no_color_index)
- + {
- + PLANEPTR line[12];
- + LONG i,j,right,mid,modulo = xdev -> rport -> BitMap -> BytesPerRow,depth = xdev -> rport -> BitMap -> Depth;
- +
- + for(i = 0 ; i < depth ; i++)
- + line[i] = xdev -> rport -> BitMap -> Planes[i] + y * modulo + (x >> 3);
- +
- + right = x + w;
- + mid = (right >> 3) - (x >> 3);
- +
- + x &= 7;
- + right &= 7;
- +
- + if(mid)
- + {
- + UBYTE *ptr;
- +
- + do
- + {
- + for(j = 0 ; j < depth ; j++)
- + {
- + ptr = line[j];
- +
- + i = mid;
- +
- + if(color & (1 << j))
- + {
- + *ptr++ |= 0xFF >> x;
- +
- + while(--i > 0)
- + *ptr++ = 0xFF;
- +
- + *ptr |= ~(0xFF >> right);
- + }
- + else
- + {
- + *ptr++ &= ~(0xFF >> x);
- +
- + while(--i > 0)
- + *ptr++ = 0x00;
- +
- + *ptr &= 0xFF >> right;
- + }
- +
- + line[j] += modulo;
- + }
- + }
- + while(--h);
- + }
- + else
- + {
- + UBYTE one_mask = (0xFF >> x) & ~(0xFF >> right),
- + zero_mask = ~(0xFF >> x) | (0xFF >> right);
- + do
- + {
- + for(j = 0 ; j < depth ; j++)
- + {
- + if(color & (1 << j))
- + *line[j] |= one_mask;
- + else
- + *line[j] &= zero_mask;
- +
- + line[j] += modulo;
- + }
- + }
- + while(--h);
- + }
- + }
- +
- + return(0);
- + }
- + }
- +
- + /* amiga_draw_line_raw_color():
- + *
- + * Draw a hair line, your basic DDA algorithm;
- + * keep your fingers crossed.
- + */
- +
- + int
- + amiga_draw_line_raw_color(gx_device *dev,int x,int y,int x1,int y1,gx_color_index color)
- + {
- + if(color != gx_no_color_index && (x != x1 || y != y1))
- + {
- + LONG xstep,ystep,dx,dy,diff,modulo;
- + UBYTE *line,*plane,pen;
- + LONG last,i,orig_x = x,orig_y = y;
- +
- + modulo = xdev -> rport -> BitMap -> BytesPerRow;
- +
- + for(i = 0 ; i < xdev -> rport -> BitMap -> Depth ; i++)
- + {
- + plane = xdev -> rport -> BitMap -> Planes[i];
- + line = &plane[y1 * modulo];
- + last = y1;
- + pen = line[x1 >> 3] & (x1 & 7);
- + x = orig_x;
- + y = orig_y;
- +
- + dx = x1 - x;
- + dy = y1 - y;
- +
- + if(dx < 0)
- + {
- + dx = -dx;
- + dy = -dy;
- +
- + x = x1;
- + y = y1;
- + }
- +
- + if(y != last)
- + line = &plane[(last = y) * modulo];
- +
- + if(color & (1 << i))
- + {
- + line[x >> 3] |= shift[x & 7];
- +
- + xstep = ystep = 0;
- +
- + if(dy < 0)
- + {
- + if(dx > -dy)
- + {
- + diff = -dx / 2;
- +
- + do
- + {
- + xstep++;
- +
- + if(diff > 0)
- + {
- + ystep--;
- +
- + diff = diff - dy - dx;
- + }
- + else
- + diff -= dy;
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] |= shift[x1 & 7];
- + }
- + }
- + while(xstep < dx);
- + }
- + else
- + {
- + if(dx == -dy)
- + diff = 0;
- + else
- + diff = -dy / 2;
- +
- + do
- + {
- + ystep--;
- +
- + if(diff > 0)
- + diff -= dx;
- + else
- + {
- + xstep++;
- +
- + diff = diff - dy - dx;
- + }
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] |= shift[x1 & 7];
- + }
- + }
- + while(ystep > dy);
- + }
- + }
- + else
- + {
- + if(dx > dy)
- + {
- + diff = -dx / 2;
- +
- + do
- + {
- + xstep++;
- +
- + if(diff > 0)
- + {
- + ystep++;
- +
- + diff = diff + dy - dx;
- + }
- + else
- + diff += dy;
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] |= shift[x1 & 7];
- + }
- + }
- + while(xstep < dx);
- + }
- + else
- + {
- + if(dx == dy)
- + diff = 0;
- + else
- + diff = dy / 2;
- +
- + do
- + {
- + ystep++;
- +
- + if(diff > 0)
- + diff -= dx;
- + else
- + {
- + xstep++;
- +
- + diff = diff + dy - dx;
- + }
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] |= shift[x1 & 7];
- + }
- + }
- + while(ystep < dy);
- + }
- + }
- +
- + if(!pen)
- + {
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] &= masks[x1 & 7];
- + }
- + }
- + else
- + {
- + line[x >> 3] &= masks[x & 7];
- +
- + xstep = ystep = 0;
- +
- + if(dy < 0)
- + {
- + if(dx > -dy)
- + {
- + diff = -dx / 2;
- +
- + do
- + {
- + xstep++;
- +
- + if(diff > 0)
- + {
- + ystep--;
- +
- + diff = diff - dy - dx;
- + }
- + else
- + diff -= dy;
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] &= masks[x1 & 7];
- + }
- + }
- + while(xstep < dx);
- + }
- + else
- + {
- + if(dx == -dy)
- + diff = 0;
- + else
- + diff = -dy / 2;
- +
- + do
- + {
- + ystep--;
- +
- + if(diff > 0)
- + diff -= dx;
- + else
- + {
- + xstep++;
- +
- + diff = diff - dy - dx;
- + }
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] &= masks[x1 & 7];
- + }
- + }
- + while(ystep > dy);
- + }
- + }
- + else
- + {
- + if(dx > dy)
- + {
- + diff = -dx / 2;
- +
- + do
- + {
- + xstep++;
- +
- + if(diff > 0)
- + {
- + ystep++;
- +
- + diff = diff + dy - dx;
- + }
- + else
- + diff += dy;
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] &= masks[x1 & 7];
- + }
- + }
- + while(xstep < dx);
- + }
- + else
- + {
- + if(dx == dy)
- + diff = 0;
- + else
- + diff = dy / 2;
- +
- + do
- + {
- + ystep++;
- +
- + if(diff > 0)
- + diff -= dx;
- + else
- + {
- + xstep++;
- +
- + diff = diff + dy - dx;
- + }
- +
- + {
- + LONG x1 = x + xstep,y1 = y + ystep;
- +
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] &= masks[x1 & 7];
- + }
- + }
- + while(ystep < dy);
- + }
- + }
- +
- + if(pen)
- + {
- + if(y1 != last)
- + line = &plane[(last = y1) * modulo];
- +
- + line[x1 >> 3] |= pen;
- + }
- + }
- + }
- + }
- +
- + return(0);
- + }
- diff -rc --new-file ghostscript-2.6.1-fsf/gp_amiga.c ghostscript-2.6.1-amiga/gp_amiga.c
- *** ghostscript-2.6.1-fsf/gp_amiga.c Thu Jan 1 00:00:00 1970
- --- ghostscript-2.6.1-amiga/gp_amiga.c Sat Jan 29 15:11:38 1994
- ***************
- *** 0 ****
- --- 1,346 ----
- + /* Copyright (C) 1989, 1990, 1991 Aladdin Enterprises. All rights reserved.
- + Distributed by Free Software Foundation, Inc.
- +
- + This file is part of Ghostscript.
- +
- + Ghostscript is distributed in the hope that it will be useful, but
- + WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
- + to anyone for the consequences of using it or for whether it serves any
- + particular purpose or works at all, unless he says so in writing. Refer
- + to the Ghostscript General Public License for full details.
- +
- + Everyone is granted permission to copy, modify and redistribute
- + Ghostscript, but only under the conditions described in the Ghostscript
- + General Public License. A copy of this license is supposed to have been
- + given to you along with Ghostscript so you can know your rights and
- + responsibilities. It should be in a file named COPYING. Among other
- + things, the copyright notice and this notice must be preserved on all
- + copies. */
- +
- + /* gp_amiga.c */
- + /* Amiga specific routines for Ghostscript */
- +
- + #define timeval foo1
- + #define ushort foo2
- +
- + #include <intuition/intuitionbase.h>
- + #include <graphics/gfxbase.h>
- + #include <dos/dosextens.h>
- +
- + #include <clib/exec_protos.h>
- + #include <clib/dos_protos.h>
- +
- + /*
- + #include <inline/exec.h>
- + #include <inline/dos.h>
- + */
- +
- + #include <signal.h>
- +
- + #undef ushort
- + #undef timeval
- +
- + /* gp_amiga.c */
- + /* Amiga-specific routines for Ghostscript */
- +
- +
- + #include "memory_.h"
- + #include "string_.h"
- + #include "gx.h"
- + #include "gp.h"
- + #include "stat_.h"
- + #include "time_.h"
- +
- + struct IntuitionBase *IntuitionBase;
- + struct GfxBase *GfxBase;
- + struct Library *LayersBase,
- + *IFFParseBase,
- + *AslBase,
- + *UtilityBase;
- +
- + /* Nothing happens here */
- + void
- + gs_amiga_init()
- + {
- + }
- +
- + void
- + gp_exit(int exit_status, int code)
- + {
- + }
- +
- + /* Cleanup routine, as called by atexit() trap */
- + void
- + cleanup()
- + {
- + extern void devcleanup();
- +
- + devcleanup();
- +
- + if(IFFParseBase)
- + {
- + CloseLibrary(IFFParseBase);
- +
- + IFFParseBase = NULL;
- + }
- +
- + if(AslBase)
- + {
- + CloseLibrary(AslBase);
- +
- + AslBase = NULL;
- + }
- +
- + if(UtilityBase)
- + {
- + CloseLibrary(UtilityBase);
- +
- + UtilityBase = NULL;
- + }
- +
- + if(LayersBase)
- + {
- + CloseLibrary(LayersBase);
- +
- + LayersBase = NULL;
- + }
- +
- + if(GfxBase)
- + {
- + CloseLibrary((struct Library *)GfxBase);
- +
- + GfxBase = NULL;
- + }
- +
- + if(IntuitionBase)
- + {
- + CloseLibrary((struct Library *)IntuitionBase);
- +
- + IntuitionBase = NULL;
- + }
- + }
- +
- + void
- + signal_handler(int signal)
- + {
- + fprintf(stderr,"*** BREAK: Ghostscript\a\n");
- +
- + exit(1);
- + }
- +
- + /* Do platform-dependent initialization */
- + void
- + gp_init()
- + {
- + atexit(cleanup);
- +
- + signal(SIGINT,signal_handler);
- +
- + if(!(IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",37)))
- + {
- + perror("Ghostscript: cannot open intuition.library v37");
- +
- + exit(20);
- + }
- +
- + if(!(GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",37)))
- + {
- + perror("Ghostscript: cannot open graphics.library v37");
- +
- + exit(20);
- + }
- +
- + if(!(LayersBase = OpenLibrary("layers.library",37)))
- + {
- + perror("Ghostscript: cannot open layers.library v37");
- +
- + exit(20);
- + }
- +
- + if(!(UtilityBase = OpenLibrary("utility.library",37)))
- + {
- + perror("Ghostscript: cannot open utility.library v37");
- +
- + exit(20);
- + }
- +
- + if(!(IFFParseBase = OpenLibrary("iffparse.library",37)))
- + {
- + perror("Ghostscript: cannot open iffparse.library v37");
- +
- + exit(20);
- + }
- +
- + AslBase = OpenLibrary("asl.library",38);
- + }
- +
- + /* Read the current date (in days since Jan. 1, 1980) */
- + /* and time (in milliseconds since midnight). */
- + void
- + gp_get_clock(long *pdt)
- + {
- + struct DateStamp Date;
- +
- + DateStamp(&Date);
- +
- + pdt[0] = Date . ds_Days + 2 * 365;
- + pdt[1] = (Date . ds_Minute * 60 + Date . ds_Tick / TICKS_PER_SECOND) * 1000;
- + }
- +
- + /* ------ Printer accessing ------ */
- +
- + /* Open a connection to a printer. A null file name means use the */
- + /* standard printer connected to the machine, if any. */
- + /* "|command" opens an output pipe. */
- + /* Return NULL if the connection could not be opened. */
- + FILE *
- + gp_open_printer(char *fname, int binary_mode)
- + { return
- + (strlen(fname) == 0 ?
- + gp_open_scratch_file(gp_scratch_file_name_prefix, fname, "w") :
- + fname[0] == '|' ?
- + popen(fname + 1, "w") :
- + fopen(fname, "w"));
- + }
- +
- + /* Close the connection to the printer. */
- + void
- + gp_close_printer(FILE *pfile, const char *fname)
- + { if ( fname[0] == '|' )
- + pclose(pfile);
- + else
- + fclose(pfile);
- + }
- +
- + /* ------ File name syntax ------ */
- +
- + /* Define the character used for separating file names in a list. */
- + const char gp_file_name_list_separator = ',';
- +
- + /* Define the default scratch file name template. */
- + const char gp_scratch_file_name_prefix[] = "T:gs_";
- +
- + /* Define the string to be concatenated with the file mode */
- + /* for opening files without end-of-line conversion. */
- + const char gp_fmode_binary_suffix[] = "b";
- + /* Define the file modes for binary reading or writing. */
- + const char gp_fmode_rb[] = "r";
- + const char gp_fmode_wb[] = "w";
- +
- + /* Create and open a scratch file with a given name prefix. */
- + /* Write the actual file name at fname. */
- + FILE *
- + gp_open_scratch_file(const char *prefix, char *fname, const char *mode)
- + {
- + strcpy(fname,prefix);
- + /* Prevent trailing X's in path from being converted by mktemp. */
- + if ( *fname != 0 && fname[strlen(fname) - 1] == 'X' )
- + strcat(fname, "-");
- + strcat(fname, "XXXXXX");
- + mktemp(fname);
- + return fopen(fname, mode);
- + }
- +
- + /* Answer whether a file name contains a directory/device specification, */
- + /* i.e. is absolute (not directory- or device-relative). */
- + int
- + gp_file_name_is_absolute(const char *fname, uint len)
- + {
- + int i;
- +
- + for(i = 0 ; i < len ; i++)
- + {
- + if(fname[i] == ':')
- + return(1);
- + }
- +
- + return(0);
- + }
- +
- + /* Answer the string to be used for combining a directory/device prefix */
- + /* with a base file name. The file name is known to not be absolute. */
- + const char *
- + gp_file_name_concat_string(const char *prefix, uint plen, const char *fname, uint len)
- + {
- + if(plen > 0 && (prefix[plen - 1] == '/' || prefix[plen - 1] == ':'))
- + return("");
- + else
- + return("/");
- + }
- +
- + /* ------ File operations ------ */
- +
- + /* If the file given by fname exists, fill in its status and return 1; */
- + /* otherwise return 0. */
- + int
- + gp_file_status(const char *fname, file_status *pstatus)
- + { struct stat sbuf;
- + /* The RS/6000 prototype for stat doesn't include const, */
- + /* so we have to explicitly remove the const modifier. */
- + if ( stat((char *)fname, &sbuf) < 0 ) return 0;
- + pstatus->size_pages = stat_blocks(&sbuf); /* st_blocks is */
- + /* missing on some systems, */
- + /* see stat_.h */
- + pstatus->size_bytes = sbuf.st_size;
- + pstatus->time_referenced = sbuf.st_mtime;
- + pstatus->time_created = sbuf.st_ctime;
- + return 1;
- + }
- +
- +
- + /* ------ File enumeration ------ */
- +
- + /****** THIS IS NOT SUPPORTED ON UNIX SYSTEMS. ******/
- + /* Amazingly enough, there is no standard Unix library routine */
- + /* for enumerating the files matching a pattern, */
- + /* or even for enumerating (conveniently) the files in a directory. */
- +
- + struct file_enum_s {
- + char *pattern;
- + int first_time;
- + const gs_memory_procs *mprocs;
- + };
- +
- + /* Initialize an enumeration. NEEDS WORK ON HANDLING * ? \. */
- + file_enum *
- + gp_enumerate_files_init(const char *pat, uint patlen,
- + const gs_memory_procs *mprocs)
- + { file_enum *pfen = (file_enum *)(*mprocs->alloc)(1, sizeof(file_enum), "gp_enumerate_files");
- + char *pattern;
- + if ( pfen == 0 ) return 0;
- + pattern = (*mprocs->alloc)(patlen + 1, 1,
- + "gp_enumerate_files(pattern)");
- + if ( pattern == 0 ) return 0;
- + memcpy(pattern, pat, patlen);
- + pattern[patlen] = 0;
- + pfen->pattern = pattern;
- + pfen->mprocs = mprocs;
- + pfen->first_time = 1;
- + return pfen;
- + }
- +
- + /* Enumerate the next file. */
- + /* PUNT: JUST RETURN THE PATTERN. */
- + uint
- + gp_enumerate_files_next(file_enum *pfen, char *ptr, uint maxlen)
- + { if ( pfen->first_time )
- + { char *pattern = pfen->pattern;
- + uint len = strlen(pattern);
- + pfen->first_time = 0;
- + if ( len > maxlen )
- + return maxlen + 1;
- + strcpy(ptr, pattern);
- + return len;
- + }
- + return -1;
- + }
- +
- + /* Clean up the file enumeration. */
- + void
- + gp_enumerate_files_close(file_enum *pfen)
- + { const gs_memory_procs *mprocs = pfen->mprocs;
- + (*mprocs->free)(pfen->pattern, strlen(pfen->pattern) + 1, 1,
- + "gp_enumerate_files_close(pattern)");
- + (*mprocs->free)((char *)pfen, 1, sizeof(file_enum),
- + "gp_enumerate_files_close");
- + }
- diff -rc --new-file ghostscript-2.6.1-fsf/gs.1 ghostscript-2.6.1-amiga/gs.1
- *** ghostscript-2.6.1-fsf/gs.1 Wed May 19 10:41:20 1993
- --- ghostscript-2.6.1-amiga/gs.1 Tue Feb 22 13:49:34 1994
- ***************
- *** 154,160 ****
- 3.
- The directory/ies specified by the GS_LIB_DEFAULT macro in the
- Ghostscript makefile (which has been set to
- ! "/usr/local/lib/ghostscript:/usr/local/lib/ghostscript/fonts").
- .PP
- Each of these (GS_LIB_DEFAULT, GS_LIB, and \-I parameter) may be either
- a single directory, or a list of directories separated by a `:'.
- --- 154,160 ----
- 3.
- The directory/ies specified by the GS_LIB_DEFAULT macro in the
- Ghostscript makefile (which has been set to
- ! "/gnu/lib/ghostscript:/gnu/lib/ghostscript/fonts").
- .PP
- Each of these (GS_LIB_DEFAULT, GS_LIB, and \-I parameter) may be either
- a single directory, or a list of directories separated by a `:'.
- ***************
- *** 320,335 ****
- device, as described above.
- .SH FILES
- .TP
- ! .B /usr/local/lib/ghostscript/*
- Startup-files, utilities, and basic font definitions.
- .TP
- ! .B /usr/local/lib/ghostscript/fonts/*
- Additional font definitions.
- .TP
- ! .B /usr/local/lib/ghostscript/examples/*
- Demo Ghostscript files.
- .TP
- ! .B /usr/local/lib/doc/ghostscript/doc/*
- Assorted document files.
- .SH "SEE ALSO"
- The various Ghostscript document files (above).
- --- 320,335 ----
- device, as described above.
- .SH FILES
- .TP
- ! .B /gnu/lib/ghostscript/*
- Startup-files, utilities, and basic font definitions.
- .TP
- ! .B /gnu/lib/ghostscript/fonts/*
- Additional font definitions.
- .TP
- ! .B /gnu/lib/ghostscript/examples/*
- Demo Ghostscript files.
- .TP
- ! .B /gnu/lib/doc/ghostscript/doc/*
- Assorted document files.
- .SH "SEE ALSO"
- The various Ghostscript document files (above).
- diff -rc --new-file ghostscript-2.6.1-fsf/gsaddmod ghostscript-2.6.1-amiga/gsaddmod
- *** ghostscript-2.6.1-fsf/gsaddmod Sun May 16 06:55:00 1993
- --- ghostscript-2.6.1-amiga/gsaddmod Sun Jan 30 12:28:23 1994
- ***************
- *** 1,3 ****
- export m; m=$1
- shift
- ! echo $* >>${m}.dev
- --- 1,4 ----
- export m; m=$1
- shift
- ! # The builtin echo in pdksh is not up to this task.
- ! /bin/echo $* >>${m}.dev
- diff -rc --new-file ghostscript-2.6.1-fsf/gsnd ghostscript-2.6.1-amiga/gsnd
- *** ghostscript-2.6.1-fsf/gsnd Mon Feb 8 09:50:18 1993
- --- ghostscript-2.6.1-amiga/gsnd Thu Jan 27 21:39:59 1994
- ***************
- *** 1 ****
- ! gs -DNODISPLAY $*
- --- 1,4 ----
- ! .key ARGS/F
- ! .bra {
- ! .ket }
- ! gs -DNODISPLAY {ARGS}
- diff -rc --new-file ghostscript-2.6.1-fsf/gssetdev ghostscript-2.6.1-amiga/gssetdev
- *** ghostscript-2.6.1-fsf/gssetdev Sun May 16 06:56:28 1993
- --- ghostscript-2.6.1-amiga/gssetdev Sun Jan 30 12:28:27 1994
- ***************
- *** 1,3 ****
- export m; m=$1
- shift
- ! echo -dev ${m} -obj $* >${m}.dev
- --- 1,4 ----
- export m; m=$1
- shift
- ! # The builtin echo in pdksh is not up to this task.
- ! /bin/echo -dev ${m} -obj $* >${m}.dev
- diff -rc --new-file ghostscript-2.6.1-fsf/gssetmod ghostscript-2.6.1-amiga/gssetmod
- *** ghostscript-2.6.1-fsf/gssetmod Sun May 16 06:56:14 1993
- --- ghostscript-2.6.1-amiga/gssetmod Sun Jan 30 12:28:32 1994
- ***************
- *** 1,3 ****
- export m; m=$1
- shift
- ! echo -obj $* >${m}.dev
- --- 1,4 ----
- export m; m=$1
- shift
- ! # The builtin echo in pdksh is not up to this task.
- ! /bin/echo -obj $* >${m}.dev
- diff -rc --new-file ghostscript-2.6.1-fsf/make.doc ghostscript-2.6.1-amiga/make.doc
- *** ghostscript-2.6.1-fsf/make.doc Fri May 28 22:57:00 1993
- --- ghostscript-2.6.1-amiga/make.doc Tue Feb 22 13:50:59 1994
- ***************
- *** 82,88 ****
- follows:
-
- - GS_LIB_DEFAULT: on Unix systems, /usr/local/lib/ghostscript
- ! and /usr/local/lib/ghostscript/fonts; on MS-DOS systems, C:\GS.
-
- - TDEBUG: no debugging code included in the build.
-
- --- 82,89 ----
- follows:
-
- - GS_LIB_DEFAULT: on Unix systems, /usr/local/lib/ghostscript
- ! and /usr/local/lib/ghostscript/fonts; on MS-DOS systems, C:\GS; on AmigaDOS
- ! systems, /gnu (aka gnu:)
-
- - TDEBUG: no debugging code included in the build.
-
- diff -rc --new-file ghostscript-2.6.1-fsf/ps2ascii ghostscript-2.6.1-amiga/ps2ascii
- *** ghostscript-2.6.1-fsf/ps2ascii Thu Jan 27 21:23:52 1994
- --- ghostscript-2.6.1-amiga/ps2ascii Thu Jan 27 21:41:23 1994
- ***************
- *** 1,13 ****
- ! #!/bin/sh -f
- ! # Extract ASCII text from a PostScript file. Usage:
- ! # ps2ascii [infile.ps [outfile.txt]]
- ! # If outfile is omitted, output goes to stdout.
- ! # If both infile and outfile are omitted, ps2ascii acts as a filter,
- ! # reading from stdin and writing on stdout.
- ! if ( test $# -eq 0 ) then
- ! gs -q -dNODISPLAY -dNOBIND -dWRITESYSTEMDICT -dSIMPLE ps2ascii.ps - quit.ps
- ! elif ( test $# -eq 1 ) then
- ! gs -q -dNODISPLAY -dNOBIND -dWRITESYSTEMDICT -dSIMPLE ps2ascii.ps $1 quit.ps
- ! else
- ! gs -q -dNODISPLAY -dNOBIND -dWRITESYSTEMDICT -dSIMPLE ps2ascii.ps $1 quit.ps >$2
- ! fi
- --- 1,4 ----
- ! .key IN/A,OUT/A
- ! .bra {
- ! .ket }
- ! gs -q -dNODISPLAY -dNOBIND -dWRITESYSTEMDICT -dSIMPLE gs_2asc.ps {IN} quit.ps >{OUT}
- diff -rc --new-file ghostscript-2.6.1-fsf/ps2epsi ghostscript-2.6.1-amiga/ps2epsi
- *** ghostscript-2.6.1-fsf/ps2epsi Fri May 7 18:39:56 1993
- --- ghostscript-2.6.1-amiga/ps2epsi Thu Jan 27 21:41:46 1994
- ***************
- *** 1,52 ****
- ! #!/bin/sh
-
- ! LOCALPATH=/usr/local/bin
- ! PATH=/bin:/usr/bin:/usr/ucb\:$LOCALPATH\
-
- ! export PATH outfile
-
- ! if [ $# -lt 1 -o $# -gt 2 ]; then
- ! echo "Usage: pstoepsi file.ps [file.epsi]" 1>&2
- ! exit 1
- ! fi
-
- ! infile=$1
- !
- ! if [ $# -eq 1 ]
- ! then
- ! case "${infile}" in
- ! *.ps) base=`basename ${infile} .ps` ;;
- ! *.cps) base=`basename ${infile} .cps` ;;
- ! *.eps) base=`basename ${infile} .eps` ;;
- ! *.epsf) base=`basename ${infile} .epsf` ;;
- ! *) base=`basename ${infile}` ;;
- ! esac
- ! outfile=${base}.epsi
- ! else
- ! outfile=$2
- ! fi
- !
- ! gs -q -dNOPAUSE -dNODISPLAY ps2epsi.ps < ${infile} 1>&2
- !
- ! (
- ! cat << BEGINEPS
- ! /InitDictCount countdictstack def
- ! gsave
- ! save
- ! mark
- ! newpath
- ! /showpage {} def
- ! BEGINEPS
- !
- ! cat ${infile}
- !
- ! cat << ENDEPS
- ! countdictstack InitDictCount sub { end } repeat
- ! cleartomark
- ! restore
- ! grestore
- ! ENDEPS
- !
- ! ) >> ${outfile}
- !
- ! exit 0
- --- 1,12 ----
- ! .key IN/A,OUT/A
- ! .bra [
- ! .ket ]
-
- ! gs -q -dNOPAUSE -dNODISPLAY ps2epsi.ps < [IN]
-
- ! Echo "/InitDictCount countdictstack def gsave save mark newpath" >> [OUT]
-
- ! type [OUT] >> [IN]
-
- ! Echo "countdictstack InitDictCount sub { end } repeat" >> [OUT]
- ! Echo "cleartomark restore grestore" >> [OUT]
- diff -rc --new-file ghostscript-2.6.1-fsf/use.doc ghostscript-2.6.1-amiga/use.doc
- *** ghostscript-2.6.1-fsf/use.doc Thu Jan 27 21:27:38 1994
- --- ghostscript-2.6.1-amiga/use.doc Tue Feb 22 13:51:42 1994
- ***************
- *** 106,114 ****
-
- Installing Ghostscript on a Unix system requires compiling it first.
- The name of the executable is gs. The makefile installs all the
- ! files, except the fonts, in /usr/local or various subdirectories
- thereof. The fonts should be installed in
- ! /usr/local/lib/ghostscript/fonts. Consult the makefile for more
- details.
-
- ********
- --- 106,114 ----
-
- Installing Ghostscript on a Unix system requires compiling it first.
- The name of the executable is gs. The makefile installs all the
- ! files, except the fonts, in /gnu or various subdirectories
- thereof. The fonts should be installed in
- ! /gnu/lib/ghostscript/fonts. Consult the makefile for more
- details.
-
- ********
-