aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/font
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/lib/font')
-rw-r--r--nx-X11/lib/font/Imakefile178
-rw-r--r--nx-X11/lib/font/Speedo/Imakefile46
-rw-r--r--nx-X11/lib/font/Speedo/adobe-iso.h200
-rw-r--r--nx-X11/lib/font/Speedo/bics-iso.h224
-rw-r--r--nx-X11/lib/font/Speedo/bics-unicode.c138
-rw-r--r--nx-X11/lib/font/Speedo/bics-unicode.h3
-rw-r--r--nx-X11/lib/font/Speedo/do_char.c1016
-rw-r--r--nx-X11/lib/font/Speedo/do_trns.c512
-rw-r--r--nx-X11/lib/font/Speedo/htest.c361
-rw-r--r--nx-X11/lib/font/Speedo/iface.c650
-rw-r--r--nx-X11/lib/font/Speedo/keys.h56
-rw-r--r--nx-X11/lib/font/Speedo/module/Imakefile47
-rw-r--r--nx-X11/lib/font/Speedo/module/speedomod.c72
-rw-r--r--nx-X11/lib/font/Speedo/nsample.c745
-rw-r--r--nx-X11/lib/font/Speedo/out_bl2d.c772
-rw-r--r--nx-X11/lib/font/Speedo/out_blk.c706
-rw-r--r--nx-X11/lib/font/Speedo/out_outl.c290
-rw-r--r--nx-X11/lib/font/Speedo/out_scrn.c1090
-rw-r--r--nx-X11/lib/font/Speedo/out_util.c341
-rw-r--r--nx-X11/lib/font/Speedo/reset.c131
-rw-r--r--nx-X11/lib/font/Speedo/set_spcs.c773
-rw-r--r--nx-X11/lib/font/Speedo/set_trns.c1324
-rw-r--r--nx-X11/lib/font/Speedo/spdo_prv.h421
-rw-r--r--nx-X11/lib/font/Speedo/speedo.h890
-rw-r--r--nx-X11/lib/font/Speedo/spencode.c67
-rw-r--r--nx-X11/lib/font/Speedo/sperr.c127
-rw-r--r--nx-X11/lib/font/Speedo/spfile.c460
-rw-r--r--nx-X11/lib/font/Speedo/spfont.c453
-rw-r--r--nx-X11/lib/font/Speedo/spfuncs.c167
-rw-r--r--nx-X11/lib/font/Speedo/spglyph.c399
-rw-r--r--nx-X11/lib/font/Speedo/spinfo.c462
-rw-r--r--nx-X11/lib/font/Speedo/spint.h180
-rw-r--r--nx-X11/lib/font/Speedo/sptobdf.c678
-rw-r--r--nx-X11/lib/font/Speedo/useropt.h41
-rw-r--r--nx-X11/lib/font/Type1/AFM.h62
-rw-r--r--nx-X11/lib/font/Type1/Imakefile91
-rw-r--r--nx-X11/lib/font/Type1/afm.c200
-rw-r--r--nx-X11/lib/font/Type1/arith.c486
-rw-r--r--nx-X11/lib/font/Type1/arith.h77
-rw-r--r--nx-X11/lib/font/Type1/blues.h95
-rw-r--r--nx-X11/lib/font/Type1/cidchar.c621
-rw-r--r--nx-X11/lib/font/Type1/cluts.h35
-rw-r--r--nx-X11/lib/font/Type1/curves.c228
-rw-r--r--nx-X11/lib/font/Type1/curves.h44
-rw-r--r--nx-X11/lib/font/Type1/digit.h64
-rw-r--r--nx-X11/lib/font/Type1/fontfcn.c709
-rw-r--r--nx-X11/lib/font/Type1/fontfcn.h250
-rw-r--r--nx-X11/lib/font/Type1/fonts.h49
-rw-r--r--nx-X11/lib/font/Type1/hdigit.h94
-rw-r--r--nx-X11/lib/font/Type1/hints.c890
-rw-r--r--nx-X11/lib/font/Type1/hints.h48
-rw-r--r--nx-X11/lib/font/Type1/lines.c189
-rw-r--r--nx-X11/lib/font/Type1/lines.h39
-rw-r--r--nx-X11/lib/font/Type1/minimain.c48
-rw-r--r--nx-X11/lib/font/Type1/module/Imakefile99
-rw-r--r--nx-X11/lib/font/Type1/module/type1mod.c91
-rw-r--r--nx-X11/lib/font/Type1/objects.c1101
-rw-r--r--nx-X11/lib/font/Type1/objects.h354
-rw-r--r--nx-X11/lib/font/Type1/paths.c1406
-rw-r--r--nx-X11/lib/font/Type1/paths.h239
-rw-r--r--nx-X11/lib/font/Type1/pictures.h50
-rw-r--r--nx-X11/lib/font/Type1/range.h48
-rw-r--r--nx-X11/lib/font/Type1/regions.c1651
-rw-r--r--nx-X11/lib/font/Type1/regions.h250
-rw-r--r--nx-X11/lib/font/Type1/scanfont.c2370
-rw-r--r--nx-X11/lib/font/Type1/spaces.c998
-rw-r--r--nx-X11/lib/font/Type1/spaces.h172
-rw-r--r--nx-X11/lib/font/Type1/strokes.h38
-rw-r--r--nx-X11/lib/font/Type1/t1funcs.c1668
-rw-r--r--nx-X11/lib/font/Type1/t1hdigit.h40
-rw-r--r--nx-X11/lib/font/Type1/t1imager.h84
-rw-r--r--nx-X11/lib/font/Type1/t1info.c1096
-rw-r--r--nx-X11/lib/font/Type1/t1intf.h143
-rw-r--r--nx-X11/lib/font/Type1/t1io.c388
-rw-r--r--nx-X11/lib/font/Type1/t1malloc.c759
-rw-r--r--nx-X11/lib/font/Type1/t1snap.c85
-rw-r--r--nx-X11/lib/font/Type1/t1stdio.h101
-rw-r--r--nx-X11/lib/font/Type1/t1stub.c56
-rw-r--r--nx-X11/lib/font/Type1/t1test.c246
-rw-r--r--nx-X11/lib/font/Type1/t1unicode.c251
-rw-r--r--nx-X11/lib/font/Type1/t1unicode.h25
-rw-r--r--nx-X11/lib/font/Type1/token.c1208
-rw-r--r--nx-X11/lib/font/Type1/token.h79
-rw-r--r--nx-X11/lib/font/Type1/tokst.h510
-rw-r--r--nx-X11/lib/font/Type1/trig.h41
-rw-r--r--nx-X11/lib/font/Type1/type1.c1892
-rw-r--r--nx-X11/lib/font/Type1/util.c222
-rw-r--r--nx-X11/lib/font/Type1/util.h217
-rw-r--r--nx-X11/lib/font/bitmap/Imakefile71
-rw-r--r--nx-X11/lib/font/bitmap/bdfint.h90
-rw-r--r--nx-X11/lib/font/bitmap/bdfread.c967
-rw-r--r--nx-X11/lib/font/bitmap/bdfutils.c340
-rw-r--r--nx-X11/lib/font/bitmap/bitmap.c160
-rw-r--r--nx-X11/lib/font/bitmap/bitmapfunc.c240
-rw-r--r--nx-X11/lib/font/bitmap/bitmaputil.c232
-rw-r--r--nx-X11/lib/font/bitmap/bitscale.c1978
-rw-r--r--nx-X11/lib/font/bitmap/fontink.c219
-rw-r--r--nx-X11/lib/font/bitmap/module/Imakefile45
-rw-r--r--nx-X11/lib/font/bitmap/module/bitmapmod.c76
-rw-r--r--nx-X11/lib/font/bitmap/pcf.h100
-rw-r--r--nx-X11/lib/font/bitmap/pcfread.c997
-rw-r--r--nx-X11/lib/font/bitmap/pcfwrite.c468
-rw-r--r--nx-X11/lib/font/bitmap/snfread.c514
-rw-r--r--nx-X11/lib/font/bitmap/snfstr.h185
-rw-r--r--nx-X11/lib/font/builtins/Imakefile17
-rw-r--r--nx-X11/lib/font/builtins/buildfont14
-rw-r--r--nx-X11/lib/font/builtins/builtin.h60
-rw-r--r--nx-X11/lib/font/builtins/dir.c64
-rw-r--r--nx-X11/lib/font/builtins/file.c139
-rw-r--r--nx-X11/lib/font/builtins/fonts.c2438
-rw-r--r--nx-X11/lib/font/builtins/fpe.c98
-rw-r--r--nx-X11/lib/font/builtins/render.c114
-rw-r--r--nx-X11/lib/font/fc/Imakefile31
-rw-r--r--nx-X11/lib/font/fc/fsconvert.c774
-rw-r--r--nx-X11/lib/font/fc/fserve.c3480
-rw-r--r--nx-X11/lib/font/fc/fserve.h96
-rw-r--r--nx-X11/lib/font/fc/fservestr.h211
-rw-r--r--nx-X11/lib/font/fc/fsio.c516
-rw-r--r--nx-X11/lib/font/fc/fsio.h187
-rw-r--r--nx-X11/lib/font/fc/fsio.h.NX.reference191
-rw-r--r--nx-X11/lib/font/fc/fsio.h.XF86.reference187
-rw-r--r--nx-X11/lib/font/fc/fslibos.h216
-rw-r--r--nx-X11/lib/font/fontcache/Imakefile29
-rw-r--r--nx-X11/lib/font/fontcache/fcqueue.h133
-rw-r--r--nx-X11/lib/font/fontcache/fontcache.c1022
-rw-r--r--nx-X11/lib/font/fontcache/fontcache.h121
-rw-r--r--nx-X11/lib/font/fontfile/Imakefile81
-rw-r--r--nx-X11/lib/font/fontfile/bitsource.c174
-rw-r--r--nx-X11/lib/font/fontfile/bufio.c212
-rw-r--r--nx-X11/lib/font/fontfile/decompress.c415
-rw-r--r--nx-X11/lib/font/fontfile/defaults.c77
-rw-r--r--nx-X11/lib/font/fontfile/dirfile.c495
-rw-r--r--nx-X11/lib/font/fontfile/encparse.c966
-rw-r--r--nx-X11/lib/font/fontfile/ffcheck.c171
-rw-r--r--nx-X11/lib/font/fontfile/fileio.c90
-rw-r--r--nx-X11/lib/font/fontfile/filewr.c65
-rw-r--r--nx-X11/lib/font/fontfile/fontdir.c832
-rw-r--r--nx-X11/lib/font/fontfile/fontenc.c952
-rw-r--r--nx-X11/lib/font/fontfile/fontencI.h46
-rw-r--r--nx-X11/lib/font/fontfile/fontencc.c77
-rw-r--r--nx-X11/lib/font/fontfile/fontfile.c1147
-rw-r--r--nx-X11/lib/font/fontfile/fontscale.c447
-rw-r--r--nx-X11/lib/font/fontfile/gunzip.c227
-rw-r--r--nx-X11/lib/font/fontfile/module/Imakefile21
-rw-r--r--nx-X11/lib/font/fontfile/printerfont.c178
-rw-r--r--nx-X11/lib/font/fontfile/register.c107
-rw-r--r--nx-X11/lib/font/fontfile/renderers.c117
-rw-r--r--nx-X11/lib/font/include/Imakefile11
-rw-r--r--nx-X11/lib/font/include/bitmap.h116
-rw-r--r--nx-X11/lib/font/include/bufio.h92
-rw-r--r--nx-X11/lib/font/include/fntfil.h178
-rw-r--r--nx-X11/lib/font/include/fntfilio.h56
-rw-r--r--nx-X11/lib/font/include/fntfilst.h198
-rw-r--r--nx-X11/lib/font/include/fontencc.h36
-rw-r--r--nx-X11/lib/font/include/fontmisc.h133
-rw-r--r--nx-X11/lib/font/include/fontmod.h16
-rw-r--r--nx-X11/lib/font/include/fontshow.h37
-rw-r--r--nx-X11/lib/font/include/fontutil.h26
-rw-r--r--nx-X11/lib/font/include/fontxlfd.h100
-rw-r--r--nx-X11/lib/font/stubs/Imakefile25
-rw-r--r--nx-X11/lib/font/stubs/cauthgen.c14
-rw-r--r--nx-X11/lib/font/stubs/csignal.c14
-rw-r--r--nx-X11/lib/font/stubs/delfntcid.c13
-rw-r--r--nx-X11/lib/font/stubs/errorf.c13
-rw-r--r--nx-X11/lib/font/stubs/fatalerror.c13
-rw-r--r--nx-X11/lib/font/stubs/findoldfnt.c14
-rw-r--r--nx-X11/lib/font/stubs/getcres.c14
-rw-r--r--nx-X11/lib/font/stubs/getdefptsize.c14
-rw-r--r--nx-X11/lib/font/stubs/getnewfntcid.c14
-rw-r--r--nx-X11/lib/font/stubs/gettime.c14
-rw-r--r--nx-X11/lib/font/stubs/initfshdl.c15
-rw-r--r--nx-X11/lib/font/stubs/regfpefunc.c28
-rw-r--r--nx-X11/lib/font/stubs/rmfshdl.c15
-rw-r--r--nx-X11/lib/font/stubs/servclient.c3
-rw-r--r--nx-X11/lib/font/stubs/setfntauth.c14
-rw-r--r--nx-X11/lib/font/stubs/stfntcfnt.c14
-rw-r--r--nx-X11/lib/font/stubs/stubs.h27
-rw-r--r--nx-X11/lib/font/stubs/xpstubs.c24
-rw-r--r--nx-X11/lib/font/util/Imakefile43
-rw-r--r--nx-X11/lib/font/util/atom.c233
-rw-r--r--nx-X11/lib/font/util/fontaccel.c107
-rw-r--r--nx-X11/lib/font/util/fontnames.c123
-rw-r--r--nx-X11/lib/font/util/fontutil.c443
-rw-r--r--nx-X11/lib/font/util/fontxlfd.c637
-rw-r--r--nx-X11/lib/font/util/format.c126
-rw-r--r--nx-X11/lib/font/util/miscutil.c99
-rw-r--r--nx-X11/lib/font/util/patcache.c221
-rw-r--r--nx-X11/lib/font/util/private.c107
-rw-r--r--nx-X11/lib/font/util/utilbitmap.c188
189 files changed, 0 insertions, 63662 deletions
diff --git a/nx-X11/lib/font/Imakefile b/nx-X11/lib/font/Imakefile
deleted file mode 100644
index f47fe963c..000000000
--- a/nx-X11/lib/font/Imakefile
+++ /dev/null
@@ -1,178 +0,0 @@
-XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:46:24 cpqbld Exp $
-
-
-
-
-XCOMM $XFree86: xc/lib/font/Imakefile,v 3.37 2003/10/24 16:21:12 tsi Exp $
-
-#include <Server.tmpl>
-
-#define IHaveSubdirs
-
-#define DoNormalLib NormalLibFont
-#define DoSharedLib SharedLibFont
-#define DoExtraLib SharedLibFont
-#define DoDebugLib DebugLibFont
-#define DoProfileLib ProfileLibFont
-
-#if !BuildFontLib
-#define LibCreate NO
-#else
-#define LibCreate YES
-#endif
-
-#if BuildLibraries
-#define LibInstall YES
-#else
-#define LibInstall NO
-#endif
-
-#if BuildLibraries
-STUBDIRS = stubs
-#endif
-
-LIBNAME = NX_Xfont
-SOREV = $(SOFONTREV)
-
-#ifndef SeparateSharedCompile
-#define SeparateSharedCompile YES
-#endif
-#if NormalLibFont && SharedLibFont && SeparateSharedCompile
-STATIC_OBJSDIR = unshared/
-#endif
-
-#ifdef SharedXfontReqs
-REQUIREDLIBS = SharedXfontReqs
-#endif
-
-#if BuildSpeedo
- SPEEDODIRS = Speedo
- SPEEDOSHAREDOBJS = Speedo/?*.o
- SPEEDOSTATICOBJS = Speedo/$(STATIC_OBJSDIR)?*.o
- SPEEDODEBUGOBJS = Speedo/debugger/?*.o
- SPEEDOPROFILEOBJS = Speedo/profiled/?*.o
- SPEEDODONES = Speedo/DONE
-#endif
-#if BuildType1 || BuildCID
- TYPE1DIRS = Type1
- TYPE1SHAREDOBJS = Type1/?*.o
- TYPE1STATICOBJS = Type1/$(STATIC_OBJSDIR)?*.o
- TYPE1DEBUGOBJS = Type1/debugger/?*.o
- TYPE1PROFILEOBJS = Type1/profiled/?*.o
- TYPE1DONES = Type1/DONE
-#endif
-#if BuildFreeType || BuildFreetype2Library
- FREETYPEDIRS = FreeType
- FREETYPESHAREDOBJS = FreeType/?*.o
- FREETYPESTATICOBJS = FreeType/$(STATIC_OBJSDIR)?*.o
- FREETYPEDEBUGOBJS = FreeType/debugger/?*.o
-FREETYPEPROFILEOBJS = FreeType/profiled/?*.o
- FREETYPEDONES = FreeType/DONE
-#endif
-#if BuildBuiltinFonts
- BUILTINDIRS = builtins
- BUILTINSHAREDOBJS = builtins/?*.o
- BUILTINSTATICOBJS = builtins/$(STATIC_OBJSDIR)?*.o
- BUILTINDEBUGOBJS = builtins/debugger/?*.o
- BUILTINPROFILEOBJS = builtins/profiled/?*.o
- BUILTINDONES = builtins/DONE
-#endif
-#if BuildFontCache
- FONTCACHEDIRS = fontcache
-FONTCACHESHAREDOBJS = fontcache/?*.o
-FONTCACHESTATICOBJS = fontcache/$(STATIC_OBJSDIR)?*.o
- FONTCACHEDEBUGOBJS = fontcache/debugger/?*.o
-FONTCACHEPROFILEOBJS = fontcache/profiled/?*.o
- FONTCACHEDONES = fontcache/DONE
-#endif
-
- SUBDIRS = bitmap fontfile fc $(FONTCACHEDIRS) \
- $(SPEEDODIRS) $(TYPE1DIRS) \
- $(FREETYPEDIRS) $(BUILTINDIRS) \
- util $(STUBDIRS) include
- SHARED_OBJS = bitmap/?*.o fontfile/?*.o fc/?*.o $(FONTCACHESHAREDOBJS) \
- $(SPEEDOSHAREDOBJS) $(TYPE1SHAREDOBJS) \
- $(FREETYPESHAREDOBJS) \
- $(BUILTINSHAREDOBJS) util/?*.o
- STATIC_OBJS = bitmap/$(STATIC_OBJSDIR)?*.o fontfile/$(STATIC_OBJSDIR)?*.o \
- fc/$(STATIC_OBJSDIR)?*.o $(FONTCACHESTATICOBJS) \
- $(SPEEDOSTATICOBJS) $(TYPE1STATICOBJS) \
- $(FREETYPESTATICOBJS) \
- $(BUILTINSTATICOBJS) util/$(STATIC_OBJSDIR)?*.o
- DEBUG_OBJS = bitmap/debugger/?*.o fontfile/debugger/?*.o fc/debugger/?*.o \
- $(FONTCACHEDEBUGOBJS) \
- $(SPEEDODEBUGOBJS) $(TYPE1DEBUGOBJS) \
- $(FREETYPEDEBUGOBJS) \
- $(BUILTINDEBUGOBJS) util/debugger/?*.o
- PROFILE_OBJS = bitmap/profiled/?*.o fontfile/profiled/?*.o fc/profiled/?*.o \
- $(FONTCACHEPROFILEOBJS) \
- $(SPEEDOPROFILEOBJS) $(TYPE1PROFILEOBJS) \
- $(FREETYPEPROFILEOBJS) \
- $(BUILTINPROFILEOBJS) util/profiled/?*.o
- DONES = bitmap/DONE fontfile/DONE fc/DONE $(FONTCACHEDONES) \
- $(SPEEDODONES) $(TYPE1DONES) \
- $(FREETYPEDONES) \
- $(BUILTINDONES) util/DONE
-
-#if BuildServer && DoLoadableServer
- BASEDIRS = fontfile fc util $(FONTCACHEDIRS)
- BASELIBOBJS = fontfile/$(STATIC_OBJSDIR)?*.o fc/$(STATIC_OBJSDIR)?*.o \
- util/$(STATIC_OBJSDIR)?*.o $(FONTCACHESTATICOBJS)
- BASEOBJS = fontfile/module/ffcheck.o fontfile/module/register.o \
- util/private.o
- BASEDONES = fontfile/DONE fontfile/module/DONE fc/DONE util/DONE \
- $(FONTCACHEDONES)
-#endif
-
-#if HasParallelMake
-MakeMutex($(SUBDIRS) $(DONES))
-#endif
-
-#if HasGnuMake || HasBsdMake
-$(DONES): $(SUBDIRS)
-#endif
-
-#include <Library.tmpl>
-
-#undef _LinkBuildLibrary
-#define _LinkBuildLibrary(lib) LinkBuildLibrary(lib)
-
-#if LibCreate
-#if NormalLibFont
-NormalDepLibraryTarget($(LIBNAME),$(SUBDIRS) $(DONES),$(STATIC_OBJS))
-#if LibInstall
-InstallLibrary($(LIBNAME),$(USRLIBDIR))
-#endif /* LibInstall */
-#endif /* NormalLibFont */
-
-#if SharedLibFont
-SharedDepLibraryTarget($(LIBNAME),$(SOREV),$(SUBDIRS) $(DONES),$(SHARED_OBJS),.,.)
-#if LibInstall
-InstallSharedLibrary($(LIBNAME),$(SOREV),$(SHLIBDIR))
-#endif /* LibInstall */
-#endif /* SharedLibFont */
-
-#if DebugLibFont
-DebuggedDepLibraryTarget($(LIBNAME),$(SUBDIRS) $(DONES),$(DEBUG_OBJS))
-#if LibInstall
-InstallLibrary($(LIBNAME)_d,$(USRLIBDIR))
-#endif /* LibInstall */
-#endif /* DebugLibFont */
-
-#if ProfileLibFont
-ProfiledDepLibraryTarget($(LIBNAME),$(SUBDIRS) $(DONES),$(PROFILE_OBJS))
-#if LibInstall
-InstallLibrary($(LIBNAME)_p,$(USRLIBDIR))
-#endif /* LibInstall */
-#endif /* ProfileLibFont */
-#endif /* LibCreate */
-
-#if BuildServer && DoLoadableServer
-NormalDepLibraryTarget(fontbase,$(BASEDIRS) $(BASEDONES),$(BASELIBOBJS))
-NormalDepRelocatableTarget(fontbase,$(BASEDIRS) $(BASEDONES),$(BASEOBJS))
-#endif
-
-
-ForceSubdirs($(SUBDIRS))
-
-DependSubdirs($(SUBDIRS))
diff --git a/nx-X11/lib/font/Speedo/Imakefile b/nx-X11/lib/font/Speedo/Imakefile
deleted file mode 100644
index e2d9dcdeb..000000000
--- a/nx-X11/lib/font/Speedo/Imakefile
+++ /dev/null
@@ -1,46 +0,0 @@
-XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:46:24 cpqbld Exp $
-
-
-
-
-XCOMM $XFree86: xc/lib/font/Speedo/Imakefile,v 1.10 2001/01/19 08:13:29 dawes Exp $
-
-#if BuildServer && DoLoadableServer
-#define IHaveSubdirs
-#define NoLibSubdirs
-#define PassCDebugFlags
-SUBDIRS = module
-#endif
-
- INCLUDES = -I$(FONTINCSRC) -I../include -I$(SERVERSRC)/include
- HEADERS =
- SPEEDOSRCS = do_char.c do_trns.c out_bl2d.c out_blk.c \
- out_scrn.c out_util.c reset.c set_spcs.c set_trns.c
- SPEEDOOBJS = do_char.o do_trns.o out_bl2d.o out_blk.o \
- out_scrn.o out_util.o reset.o set_spcs.o set_trns.o
-
- SRCS = spfuncs.c spfile.c spinfo.c sperr.c spfont.c spglyph.c \
- spencode.c bics-unicode.c \
- $(SPEEDOSRCS)
- OBJS = spfuncs.o spfile.o spinfo.o sperr.o spfont.o spglyph.o \
- spencode.o bics-unicode.o \
- $(SPEEDOOBJS)
-
-#if BuildFontLib
-#define DoNormalLib NormalLibFont
-#define DoSharedLib SharedLibFont
-#define DoDebugLib DebugLibFont
-#define DoProfileLib ProfileLibFont
-#include <Library.tmpl>
-LibraryObjectRule()
-
-SubdirLibraryRule($(OBJS))
-NormalLintTarget($(SRCS))
-#endif
-
-#if BuildServer && DoLoadableServer
-MakeSubdirs($(SUBDIRS))
-DependSubdirs($(SUBDIRS))
-#endif
-
-DependTarget()
diff --git a/nx-X11/lib/font/Speedo/adobe-iso.h b/nx-X11/lib/font/Speedo/adobe-iso.h
deleted file mode 100644
index e1eeef1c5..000000000
--- a/nx-X11/lib/font/Speedo/adobe-iso.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/* $Xorg: adobe-iso.h,v 1.3 2000/08/17 19:46:24 cpqbld Exp $ */
-
-/*
- * Latin 1 format from masterset format 11 (ps)
- * 0 implies no valid mapping
- */
-
-int adobe_map[] = {
- 32, 32,
- 33, 33,
- 34, 34,
- 35, 35,
- 36, 36,
- 37, 37,
- 38, 38,
- 39, 169,
- 40, 40,
- 41, 41,
- 42, 42,
- 43, 43,
- 44, 44,
- 45, 45,
- 46, 46,
- 47, 47,
- 48, 48,
- 49, 49,
- 50, 50,
- 51, 51,
- 52, 52,
- 53, 53,
- 54, 54,
- 55, 55,
- 56, 56,
- 57, 57,
- 58, 58,
- 59, 59,
- 60, 60,
- 61, 61,
- 62, 62,
- 63, 63,
- 64, 64,
- 65, 65,
- 66, 66,
- 67, 67,
- 68, 68,
- 69, 69,
- 70, 70,
- 71, 71,
- 72, 72,
- 73, 73,
- 74, 74,
- 75, 75,
- 76, 76,
- 77, 77,
- 78, 78,
- 79, 79,
- 80, 80,
- 81, 81,
- 82, 82,
- 83, 83,
- 84, 84,
- 85, 85,
- 86, 86,
- 87, 87,
- 88, 88,
- 89, 89,
- 90, 90,
- 91, 91,
- 92, 92,
- 93, 93,
- 94, 195,
- 95, 95,
- 96, 193,
- 97, 97,
- 98, 98,
- 99, 99,
- 100, 100,
- 101, 101,
- 102, 102,
- 103, 103,
- 104, 104,
- 105, 105,
- 106, 106,
- 107, 107,
- 108, 108,
- 109, 109,
- 110, 110,
- 111, 111,
- 112, 112,
- 113, 113,
- 114, 114,
- 115, 115,
- 116, 116,
- 117, 117,
- 118, 118,
- 119, 119,
- 120, 120,
- 121, 121,
- 122, 122,
- 123, 123,
- 124, 124,
- 125, 125,
- 126, 196, /* lc tilde */
- 127, 0, /* */
- 161, 161, /* invert exclamation */
- 162, 162, /* cent */
- 163, 163, /* pound sterling */
- 164, 168, /* intl currency */
- 165, 165, /* yen */
- 166, 320, /* split vert bar */
- 167, 167, /* section mark */
- 168, 200, /* dierisis */
- 169, 0, /* superior copyright */
- 170, 0, /* feminine ordinal */
- 171, 171, /* dbl left guillemot */
- 172, 314, /* math not */
- 173, 0, /* hyphen ? */
- 174, 0, /* superior registered */
- 175, 0, /* overscore */
- 176, 321, /* degree */
- 177, 329, /* math +- */
- 178, 333, /* superior 2 */
- 179, 332, /* superior 3 */
- 180, 194, /* lc acute */
- 181, 324, /* greek lc mu */
- 182, 182, /* Paragraph */
- 183, 180, /* center dot */
- 184, 203, /* cedilla lc */
- 185, 328, /* superior 1 */
- 186, 0, /* masculine ordinal(using superior o) */
- 187, 187, /* right dbl guillemot */
- 188, 327, /* 1/4 */
- 189, 326, /* 1/2 */
- 190, 331, /* 3/4 */
- 191, 191, /* invert question */
- 192, 259, /* A grave */
- 193, 256, /* A acute */
- 194, 257, /* A circumflex */
- 195, 261, /* A tilde */
- 196, 258, /* A dierisis */
- 197, 260, /* A angstrom */
- 198, 225, /* AE ligature */
- 199, 262, /* C cedilla */
- 200, 266, /* E grave */
- 201, 263, /* E acute */
- 202, 264, /* E circumflex */
- 203, 265, /* E dierisis */
- 204, 270, /* I grave */
- 205, 267, /* I acute */
- 206, 268, /* I circumflex */
- 207, 269, /* I dierisis */
- 208, 317, /* D bar */
- 209, 271, /* N tilde */
- 210, 275, /* O grave */
- 211, 272, /* O acute */
- 212, 273, /* O circumflex */
- 213, 276, /* O tilde */
- 214, 274, /* O dierisis */
- 215, 325, /* math multiply */
- 216, 233, /* O bar */
- 217, 281, /* U grave */
- 218, 278, /* U acute */
- 219, 279, /* U circumflex */
- 220, 280, /* U dierisis */
- 221, 319, /* Y acute */
- 222, 318, /* icelandic thorn lc */
- 223, 251, /* German dbl s */
- 224, 287, /* a grave */
- 225, 284, /* a acute */
- 226, 285, /* a circumflex */
- 227, 289, /* a tilde */
- 228, 286, /* a dierisis */
- 229, 288, /* a angstrom */
- 230, 241, /* ae ligature */
- 231, 290, /* c cedilla */
- 232, 294, /* e grave */
- 233, 291, /* e acute */
- 234, 292, /* e circumflex */
- 235, 293, /* e dierisis */
- 236, 298, /* i grave */
- 237, 295, /* i acute */
- 238, 296, /* i circumflex */
- 239, 297, /* i dierisis */
- 240, 323, /* icelandic eth lc */
- 241, 299, /* n tilde */
- 242, 303, /* o grave */
- 243, 300, /* o acute */
- 244, 301, /* o circumflex */
- 245, 304, /* o tilde */
- 246, 302, /* o dierisis */
- 247, 322, /* math divide */
- 248, 249, /* o bar */
- 249, 309, /* u grave */
- 250, 306, /* u acute */
- 251, 307, /* u circumflex */
- 252, 308, /* u dierisis */
- 253, 334, /* y acute */
- 254, 330, /* icelandic thorn uc */
- 255, 310, /* y dierisis */
-};
diff --git a/nx-X11/lib/font/Speedo/bics-iso.h b/nx-X11/lib/font/Speedo/bics-iso.h
deleted file mode 100644
index 4964fa34e..000000000
--- a/nx-X11/lib/font/Speedo/bics-iso.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/* $Xorg: bics-iso.h,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */
-/*
-
-Copyright 1993, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/bics-iso.h,v 1.6 2001/01/17 19:43:17 dawes Exp $ */
-
-int sp_bics_map[] = {
- 32, 0,
- 33, 1,
- 34, 2,
- 35, 3,
- 36, 4,
- 37, 5,
- 38, 6,
- 39, 264,
- 40, 8,
- 41, 9,
- 42, 10,
- 43, 11,
- 44, 12,
- 45, 13,
- 46, 14,
- 47, 15,
- 48, 16,
- 49, 17,
- 50, 18,
- 51, 19,
- 52, 20,
- 53, 21,
- 54, 22,
- 55, 23,
- 56, 24,
- 57, 25,
- 58, 26,
- 59, 27,
- 60, 28,
- 61, 29,
- 62, 30,
- 63, 31,
- 64, 32,
- 65, 33,
- 66, 34,
- 67, 35,
- 68, 36,
- 69, 37,
- 70, 38,
- 71, 39,
- 72, 40,
- 73, 41,
- 74, 42,
- 75, 43,
- 76, 44,
- 77, 45,
- 78, 46,
- 79, 47,
- 80, 48,
- 81, 49,
- 82, 50,
- 83, 51,
- 84, 52,
- 85, 53,
- 86, 54,
- 87, 55,
- 88, 56,
- 89, 57,
- 90, 58,
- 91, 59,
- 92, 60,
- 93, 61,
- 94, 133,
- 95, 63,
- 96, 131,
- 97, 65,
- 98, 66,
- 99, 67,
- 100, 68,
- 101, 69,
- 102, 70,
- 103, 71,
- 104, 72,
- 105, 73,
- 106, 74,
- 107, 75,
- 108, 76,
- 109, 77,
- 110, 78,
- 111, 79,
- 112, 80,
- 113, 81,
- 114, 82,
- 115, 83,
- 116, 84,
- 117, 85,
- 118, 86,
- 119, 87,
- 120, 88,
- 121, 89,
- 122, 90,
- 123, 91,
- 124, 92,
- 125, 93,
- 126, 137,
- 127, 358,
- 161, 128,
- 162, 98,
- 163, 97,
- 164, 278,
- 165, 274,
- 166, 277,
- 167, 110,
- 168, 135,
- 169, 503,
- 170, 538,
- 171, 125,
- 172, 309,
- 173, 191,
- 174, 504,
- 175, 230,
- 176, 339,
- 177, 286,
- 178, 160,
- 179, 161,
- 180, 129,
- 181, 325,
- 182, 279,
- 183, 102,
- 184, 141,
- 185, 159,
- 186, 544,
- 187, 126,
- 188, 151,
- 189, 153,
- 190, 155,
- 191, 127,
- 192, 259,
- 193, 261,
- 194, 257,
- 195, 253,
- 196, 255,
- 197, 113,
- 198, 114,
- 199, 148,
- 200, 249,
- 201, 251,
- 202, 247,
- 203, 245,
- 204, 239,
- 205, 241,
- 206, 237,
- 207, 235,
- 208, 169,
- 209, 196,
- 210, 202,
- 211, 200,
- 212, 204,
- 213, 208,
- 214, 206,
- 215, 284,
- 216, 115,
- 217, 212,
- 218, 210,
- 219, 214,
- 220, 216,
- 221, 224,
- 222, 271,
- 223, 121,
- 224, 260,
- 225, 262,
- 226, 258,
- 227, 254,
- 228, 256,
- 229, 117,
- 230, 118,
- 231, 149,
- 232, 250,
- 233, 252,
- 234, 248,
- 235, 246,
- 236, 240,
- 237, 242,
- 238, 238,
- 239, 236,
- 240, 273,
- 241, 195,
- 242, 201,
- 243, 199,
- 244, 203,
- 245, 207,
- 246, 205,
- 247, 285,
- 248, 119,
- 249, 211,
- 250, 209,
- 251, 213,
- 252, 215,
- 253, 223,
- 254, 272,
- 255, 221,
-};
-
diff --git a/nx-X11/lib/font/Speedo/bics-unicode.c b/nx-X11/lib/font/Speedo/bics-unicode.c
deleted file mode 100644
index 735508268..000000000
--- a/nx-X11/lib/font/Speedo/bics-unicode.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
-Copyright (c) 1998 by Juliusz Chroboczek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-/* $XFree86$ */
-
-/* These data are very dodgy. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "bics-unicode.h"
-
-static short table_160[]=
-{0, 128, 98, 97, 278, 274, 277, 110, 135, 503, 538, 125, 309, 191, 504,
- 230, 339, 286, 160, 161, 129, 325, 279, 102, 141, 159, 544, 126, 151,
- 153, 155, 127, 259, 261, 257, 253, 255, 113, 114, 148, 249, 251, 247,
- 245, 239, 241, 237, 235, 169, 196, 202, 200, 204, 208, 206, 284, 115,
- 212, 210, 214, 216, 224, 271, 121, 260, 262, 258, 254, 256, 117, 118,
- 149, 250, 252, 248, 246, 240, 242, 238, 236, 273, 195, 201, 199, 203,
- 207, 205, 285, 119, 211, 209, 213, 215, 223, 272, 221, 477, 476, 374,
- 373, 171, 177, 376, 375, -1, -1, -1, -1, 378, 377, 379, -1, 169, 173,
- 383, 382, -1, -1, -1, -1, 172, 178, 243, 244, -1, -1, -1, -1, -1, -1,
- 385, -1, -1, -1, -1, -1, 233, 234, 387, 386, -1, -1, 391, 390, 389,
- 122, 276, 275, -1, -1, 393, 392, -1, 395, 394, 399, 398, -1, -1, -1,
- -1, 170, 174, 194, 193, 402, 401, 198, 197, 263, -1, -1, -1, -1, -1,
- -1, 404, 403, 116, 120, -1, -1, 408, 407, 406, 405, 410, 409, -1, -1,
- 486, 485, 412, 411, 419, 418, 364, 363, -1, -1, 218, 217, 421, 420, -1,
- -1, 220, 219, 423, 422, -1, 268, 425, 424, -1, -1, 222, 368, 367, 372,
- 371, 370, 369};
-
-static short table_728[]={144, 181, 146, 731, 137, 183};
-
-static short table_915[]=
-{313, 314, -1, -1, -1, 315, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 316, -1, -1, 317, -1, -1, 318, -1, -1, -1, -1, -1, -1, -1, 319, 320,
- -1, 321, 322, -1, 323, 324, -1, -1, -1, 325, -1, -1, -1, 326, -1, -1,
- 327, 328, -1, 329};
-
-static short table_8211[]=
-{111, 112, -1, -1, -1, -1, -1, 106, -1, 103, 105, 107, 104, 108, 109,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, -1, -1,
- -1, -1, -1, -1, -1, -1, 123, 124, -1, 265};
-
-static short table_8319[]=
-{543, 475, 466, 467, 468, 469, 470, 471, 472, 473, 474, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 491, -1, -1, -1, 266};
-
-static short table_8592[]={293, 295, 294, 292, 297, 296};
-
-static short table_8712[]=
-{298, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 492, -1, -1, -1, -1, -1,
- -1, 302, -1, -1, -1, 303, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 299,
- -1, -1, -1, -1, 428};
-
-
-static short table_8800[]={288, -1, -1, -1, 291, 290};
-
-static short table_9600[]=
-{304, -1, -1, -1, 305, -1, -1, -1, 308, -1, -1, -1, 306, -1, -1, -1,
- 307, 357, 358, 359, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 335, 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 348, -1, -1, -1, 345, -1, -1, -1, -1, -1, 347, -1, -1, -1, 346,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, 342, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 344};
-
-static short table_9784[]={360, -1, 361, 362, -1, -1, -1, -1, 350, -1, 349};
-
-static short table_9824[]=
-{354, -1, -1, 352, -1, 351, 353, -1, -1, -1, 330, 331};
-
-static short table_64256[]={282, 95, 96, 281};
-
-int
-unicode_to_bics(unsigned code)
-{
- if(code<32) return -1;
- else if(code<127) return code-32;
- else if(code<160) return -1;
- else if(code<383) return table_160[code-160];
- else if(code==402) return 99;
- else if(code==486) return 480;
- else if(code==487) return 379;
- else if(code==501) return 384;
- else if(code==711) return 139;
- else if(code<728) return -1;
- else if(code<734) return table_728[code-728];
- else if(code<915) return -1;
- else if(code<967) return table_915[code-915];
- else if(code<8211) return -1;
- else if(code<8253) return table_8211[code-8211];
- else if(code<8319) return -1;
- else if(code<8360) return table_8319[code-8319];
- else if(code<8592) return -1;
- else if(code<8598) return table_8592[code-8592];
- else if(code==8616) return 340;
- else if(code<8712) return -1;
- else if(code<8751) return table_8712[code-8712];
- else if(code<8800) return -1;
- else if(code<8806) return table_8800[code-8800];
- else if(code==8976) return 310;
- else if(code==8992) return 300;
- else if(code==8993) return 301;
- else if(code==9400) return 332;
- else if(code==9415) return 333;
- else if(code==9473) return 355;
- else if(code==9475) return 356;
- else if(code<9600) return -1;
- else if(code<9690) return table_9600[code-9600];
- else if(code==9711) return 343;
- else if(code<9784) return -1;
- else if(code<9795) return table_9784[code-9784];
- else if(code<9824) return -1;
- else if(code<9836) return table_9824[code-9824];
- else if(code<64256) return -1;
- else if(code<64261) return table_64256[code-64256];
- else return -1;
-}
-
diff --git a/nx-X11/lib/font/Speedo/bics-unicode.h b/nx-X11/lib/font/Speedo/bics-unicode.h
deleted file mode 100644
index 90fa1885b..000000000
--- a/nx-X11/lib/font/Speedo/bics-unicode.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $XFree86$ */
-
-int unicode_to_bics(unsigned);
diff --git a/nx-X11/lib/font/Speedo/do_char.c b/nx-X11/lib/font/Speedo/do_char.c
deleted file mode 100644
index 410d6339a..000000000
--- a/nx-X11/lib/font/Speedo/do_char.c
+++ /dev/null
@@ -1,1016 +0,0 @@
-/* $Xorg: do_char.c,v 1.3 2000/08/17 19:46:24 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/do_char.c,v 1.3 2001/01/17 19:43:17 dawes Exp $ */
-
-/***************************** D O - C H A R . C *****************************
- * *
- * This is the top level module for processing one simple or composite *
- * character.
- * *
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "spdo_prv.h" /* General definitions for Speedo */
-
-#define DEBUG 0
-
-#if DEBUG
-#include <stdio.h>
-#define SHOW(X) printf("X = %d\n", X)
-#else
-#define SHOW(X)
-#endif
-
-/***** GLOBAL VARIABLES *****/
-
-/***** GLOBAL FUNCTIONS *****/
-
-/***** EXTERNAL VARIABLES *****/
-
-/***** EXTERNAL FUNCTIONS *****/
-
-/***** STATIC VARIABLES *****/
-
-/***** STATIC FUNCTIONS *****/
-
-static boolean sp_make_simp_char(PROTO_DECL2 ufix8 FONTFAR *pointer,ufix8 format);
-static boolean sp_make_comp_char(PROTO_DECL2 ufix8 FONTFAR *pointer);
-static ufix8 FONTFAR *sp_get_char_org(PROTO_DECL2 ufix16 char_index,boolean top_level);
-static fix15 sp_get_posn_arg(PROTO_DECL2 ufix8 FONTFAR *STACKFAR *ppointer,ufix8 format);
-static fix15 sp_get_scale_arg(PROTO_DECL2 ufix8 FONTFAR *STACKFAR *ppointer,ufix8 format);
-
-
-FUNCTION ufix16 get_char_id(
-GDECL
-ufix16 char_index) /* Index to character in char directory */
-/*
- * Returns character id for specified character index in currently
- * selected font.
- * Reports Error 10 and returns 0 if no font selected.
- * Reports Error 12 and returns 0 if character data not available.
- */
-{
-ufix8 FONTFAR *pointer; /* Pointer to character data */
-
-if (!sp_globals.specs_valid) /* Font specs not defined? */
- {
- report_error(10); /* Report font not specified */
- return (ufix16)0; /* Return zero character id */
- }
-
-pointer = sp_get_char_org(char_index, TRUE); /* Get pointer to character data */
-if (pointer == NULL) /* Character data not available? */
- {
- report_error(12); /* Report character data not avail */
- return (ufix16)0; /* Return zero character id */
- }
-
-return 0xffff & NEXT_WORD(pointer); /* Return character id */
-}
-
-
-#if INCL_METRICS
-FUNCTION fix31 get_char_width(
-GDECL
-ufix16 char_index) /* Index to character in char directory */
-/*
- * Returns character set width for specified character index in currently
- * selected font in units of 1/65536 em.
- * Reports Error 10 and returns 0 if no font selected.
- * Reports Error 12 and returns 0 if character data not available.
- */
-{
-ufix8 FONTFAR *pointer; /* Pointer to character data */
-fix31 set_width; /* Set width of character */
-
-if (!sp_globals.specs_valid) /* Font specs not defined? */
- {
- report_error(10); /* Report font not specified */
- return (fix31)0; /* Return zero character width */
- }
-
-pointer = sp_get_char_org(char_index, TRUE); /* Get pointer to character data */
-if (pointer == NULL) /* Character data not available? */
- {
- report_error(12); /* Report character data not avail */
- return (fix31)0; /* Return zero character width */
- }
-
-pointer += 2; /* Skip over character id */
-set_width = (fix31)NEXT_WORD(pointer); /* Read set width and Convert units */
-set_width = ((set_width << 16) + (sp_globals.metric_resolution >> 1)) / sp_globals.metric_resolution;
-return set_width; /* Return in 1/65536 em units */
-}
-#endif
-
-#if INCL_METRICS
-FUNCTION fix15 get_track_kern(
-GDECL
-fix15 track, /* Track required (0 - 3) */
-fix15 point_size) /* Point size (units of whole points) */
-/*
- * Returns inter-character spacing adjustment in units of 1/256
- * points for the specified kerning track and point size.
- * If the specified point size is larger than the maximum point
- * size for the specified track, the adjustment for the maximum
- * point size is used.
- * If the specified point size is smaller than the minimum point
- * size for the specified track, the adjustment for the minimum
- * point size is used.
- * If the specified point size is between the minimum point size
- * and the maximum point size for the specified track, the
- * adjustment is interpolated linearly between the minimum and
- * maximum adjustments.
- * Reports Error 10 and returns 0 if no font selected.
- * Reports Error 13 and returns 0 if track kerning data not in font.
- */
-{
-ufix8 FONTFAR *pointer; /* Pointer to character data */
-fix15 no_tracks; /* Number of kerning tracks in font */
-ufix8 format; /* Track kerning format byte */
-fix15 i; /* Track counter */
-fix15 min_pt_size = 0; /* Minimum point size for track */
-fix15 max_pt_size = 0; /* Maximum point size for track */
-fix15 min_adj = 0; /* Adjustment for min point size */
-fix15 max_adj = 0; /* Adjustment for max point size */
-fix31 delta_pt_size; /* Max point size - min point size */
-fix31 delta_adj; /* Min adjustment - max adjustment */
-fix15 adj = 0; /* Interpolated adjustment */
-
-if (track == 0) /* Track zero selected? */
- {
- return adj; /* Return zero track kerning adjustment */
- }
-
-if (!sp_globals.specs_valid) /* Font specs not defined? */
- {
- report_error(10); /* Report font not specified */
- return adj; /* Return zero track kerning adjustment */
- }
-
-no_tracks = sp_globals.kern.no_tracks; /* Number of kerning tracks */
-if (track > no_tracks) /* Required track not available? */
- {
- report_error(13); /* Report track kerning data not avail */
- return adj; /* Return zero track kerning adjustment */
- }
-
-pointer = sp_globals.kern.tkorg; /* Point to start of track kern data */
-for (i = 0; i < track; i++) /* Read until track required is read */
- {
- format = NEXT_BYTE(pointer); /* Read track kerning format byte */
- min_pt_size = (format & BIT0)?
- NEXT_WORD(pointer):
- (fix15)NEXT_BYTE(pointer);
- min_adj = (format & BIT1)?
- NEXT_WORD(pointer):
- (fix15)NEXT_BYTE(pointer);
- max_pt_size = (format & BIT2)?
- NEXT_WORD(pointer):
- (fix15)NEXT_BYTE(pointer);
- max_adj = (format & BIT3)?
- NEXT_WORD(pointer):
- (fix15)NEXT_BYTE(pointer);
- }
-
-if (point_size <= min_pt_size) /* Smaller than minimum point size? */
- {
- return min_adj; /* Return minimum adjustment (1/256 points) */
- }
-
-if (point_size >= max_pt_size) /* Larger than maximum point size? */
- {
- return max_adj; /* Return maximum adjustment (1/256 points) */
- }
-
-delta_pt_size = (fix31)(max_pt_size - min_pt_size);
-delta_adj = (fix31)(min_adj - max_adj);
-adj = (fix15)(min_adj -
- (((fix31)(point_size - min_pt_size) * delta_adj +
- (delta_pt_size >> 1)) / delta_pt_size));
-return adj; /* Return interpolated adjustment (1/256 points) */
-}
-#endif
-
-#if INCL_METRICS
-FUNCTION fix31 get_pair_kern(
-GDECL
-ufix16 char_index1, /* Index to first character in char directory */
-ufix16 char_index2) /* Index to second character in char directory */
-/*
- * Returns inter-character spacing adjustment in units of 1/65536 em
- * for the specified pair of characters.
- * Reports Error 10 and returns 0 if no font selected.
- * Reports Error 14 and returns 0 if pair kerning data not in font.
- */
-{
-ufix8 FONTFAR *origin; /* Pointer to first kerning pair record */
-ufix8 FONTFAR *pointer; /* Pointer to character data */
-ufix16 tmpufix16; /* Temporary workspace */
-fix15 no_pairs; /* Number of kerning pairs in font */
-ufix8 format; /* Track kerning format byte */
-boolean long_id; /* TRUE if 2-byte character ids */
-fix15 rec_size; /* Number of bytes in kern pair record */
-fix15 n; /* Number of remaining kern pairs */
-fix15 nn; /* Number of kern pairs in first partition */
-fix15 base; /* Index to first record in rem kern pairs */
-fix15 i; /* Index to kern pair being tested */
-fix31 adj = 0; /* Returned value of adjustment */
-fix15 adj_base = 0; /* Adjustment base for relative adjustments */
-
-if (!sp_globals.specs_valid) /* Font specs not defined? */
- {
- report_error(10); /* Report font not specified */
- return adj; /* Return zero pair kerning adjustment */
- }
-
-no_pairs = sp_globals.kern.no_pairs; /* Number of kerning pairs */
-if (no_pairs == 0) /* Pair kerning data not available? */
- {
- report_error(14); /* Report pair kerning data not avail */
- return adj; /* Return zero pair kerning adjustment */
- }
-
-pointer = sp_globals.kern.pkorg; /* Point to start of pair kern data */
-format = NEXT_BYTE(pointer); /* Read pair kerning format byte */
-if (!(format & BIT0)) /* One-byte adjustment values? */
- adj_base = NEXT_WORD(pointer); /* Read base adjustment */
-origin = pointer; /* First byte of kerning pair data */
-rec_size = format + 3; /* Compute kerning pair record size */
-long_id = format & BIT1; /* Set flag for 2-byte char index */
-
-n = no_pairs; /* Consider all kerning pairs */
-base = 0; /* Set base at first kern pair record */
-while (n != 0) /* While 1 or more kern pairs remain ... */
- {
- nn = n >> 1; /* Size of first partition */
- i = base + nn; /* Index to record to be tested */
- pointer = origin + (i * rec_size);
- tmpufix16 = NEXT_CHNDX(pointer, long_id);
- if (char_index1 < tmpufix16)
- {
- n = nn; /* Number remaining in first partition */
- continue;
- }
- if (char_index1 > tmpufix16)
- {
- n -= nn + 1; /* Number remaining in second partition */
- base = i + 1; /* Base index for second partition */
- continue;
- }
- tmpufix16 = NEXT_CHNDX(pointer, long_id);
- if (char_index2 < tmpufix16)
- {
- n = nn; /* Number remaining in first partition */
- continue;
- }
- if (char_index2 > tmpufix16)
- {
- n -= nn + 1; /* Number remaining in second partition */
- base = i + 1; /* Base index for second partition */
- continue;
- }
- adj = (format & BIT0)?
- (fix31)NEXT_WORD(pointer):
- (fix31)(adj_base + (fix15)NEXT_BYTE(pointer));
- adj = ((adj << 16) + (sp_globals.orus_per_em >> 1)) / sp_globals.orus_per_em; /* Convert units */
- n = 0; /* No more to consider */
- }
-return adj; /* Return pair kerning adjustment */
-}
-#endif
-
-
-#if INCL_METRICS
-#ifdef old
-FUNCTION boolean get_char_bbox(
-GDECL
-ufix16 char_index,
-bbox_t *bbox)
-{
-/*
- * returns true if character exists, false if it doesn't
- * provides transformed character bounding box in 1/65536 pixels
- * in the provided bbox_t structure. Bounding box may be
- * conservative in the event that the transformation is not
- * normal or the character is compound.
- */
-
-ufix8 FONTFAR *pointer;
-fix15 tmp;
-point_t Pmin, Pmax;
-
-#if REENTRANT_ALLOC
-plaid_t plaid;
-sp_globals.plaid = &plaid;
-#endif
-
-if (!sp_globals.specs_valid) /* Font specs not defined? */
- {
- report_error(10); /* Report font not specified */
- return FALSE; /* Error return */
- }
-
-init_tcb(); /* Initialize transformation control block */
-
-pointer = sp_get_char_org(char_index, TRUE); /* Point to start of character data */
-if (pointer == NULL) /* Character data not available? */
- {
- report_error(12); /* Report character data not avail */
- return FALSE; /* Error return */
- }
-
-pointer += 2; /* Skip over character id */
-tmp = NEXT_WORD(pointer); /* Read set width */
-
-tmp = NEXT_BYTE(pointer);
-if (tmp & BIT1) /* Optional data in header? */
- {
- tmp = (ufix8)NEXT_BYTE(pointer); /* Read size of optional data */
- pointer += tmp; /* Skip optional data */
- }
-
-pointer = plaid_tcb(pointer, tmp); /* Process plaid data */
-pointer = read_bbox(pointer, &Pmin, &Pmax,(boolean)FALSE); /* Read bounding box */
-bbox->xmin = (fix31)Pmin.x << sp_globals.poshift;
-bbox->xmax = (fix31)Pmax.x << sp_globals.poshift;
-bbox->ymin = (fix31)Pmin.y << sp_globals.poshift;
-bbox->ymax = (fix31)Pmax.y << sp_globals.poshift;
-return TRUE;
-}
-
-#else /* new code, 4/25/91 */
-
-FUNCTION boolean get_char_bbox(
-GDECL
-ufix16 char_index,
-bbox_t *bbox)
-{
-/*
- * returns true if character exists, false if it doesn't
- * provides transformed character bounding box in 1/65536 pixels
- * in the provided bbox_t structure. Bounding box may be
- * conservative in the event that the transformation is not
- * normal or the character is compound.
- */
-
-ufix8 FONTFAR *pointer;
-fix15 tmp;
-fix15 format;
-ufix16 pix_adj;
-point_t Pmin, Pmax;
-
-#if REENTRANT_ALLOC
-plaid_t plaid;
-sp_globals.plaid = &plaid;
-#endif
-
-if (!sp_globals.specs_valid) /* Font specs not defined? */
- {
- report_error(10); /* Report font not specified */
- return FALSE; /* Error return */
- }
-
-init_tcb(); /* Initialize transformation control block */
-
-pointer = sp_get_char_org(char_index, TRUE); /* Point to start of character data */
-if (pointer == NULL) /* Character data not available? */
- {
- report_error(12); /* Report character data not avail */
- return FALSE; /* Error return */
- }
-
-pointer += 2; /* Skip over character id */
-tmp = NEXT_WORD(pointer); /* Read set width */
-
-format = NEXT_BYTE(pointer);
-if (format & BIT1) /* Optional data in header? */
- {
- tmp = (ufix8)NEXT_BYTE(pointer); /* Read size of optional data */
- pointer += tmp; /* Skip optional data */
- }
-
-if (format & BIT0)
- {
- pix_adj = sp_globals.onepix << 1; /* Allow 2 pixel expansion ... */
- }
-else
- {
- pix_adj = 0;
- }
-
-pointer = plaid_tcb(pointer, format); /* Process plaid data */
-pointer = read_bbox(pointer, &Pmin, &Pmax,(boolean)FALSE); /* Read bounding box */
-
-Pmin.x -= pix_adj; /* ... of components of ... */
-Pmin.y -= pix_adj; /* ... compound ... */
-Pmax.x += pix_adj; /* ... character ... */
-Pmax.y += pix_adj; /* ... bounding box. */
-
-
-bbox->xmin = (fix31)Pmin.x << sp_globals.poshift;
-bbox->xmax = (fix31)Pmax.x << sp_globals.poshift;
-bbox->ymin = (fix31)Pmin.y << sp_globals.poshift;
-bbox->ymax = (fix31)Pmax.y << sp_globals.poshift;
-return TRUE;
-}
-#endif /* new code */
-
-#endif
-
-
-#if INCL_ISW
-FUNCTION boolean make_char_isw(
-GDECL
-ufix16 char_index,
-ufix32 imported_setwidth)
-{
-fix15 xmin; /* Minimum X ORU value in font */
-fix15 xmax; /* Maximum X ORU value in font */
-fix15 ymin; /* Minimum Y ORU value in font */
-fix15 ymax; /* Maximum Y ORU value in font */
-ufix16 return_value;
-
-sp_globals.import_setwidth_act = TRUE;
-/* convert imported width to orus */
-sp_globals.imported_width = (sp_globals.metric_resolution *
- imported_setwidth) >> 16;
-return_value = do_make_char(char_index);
-
-if (sp_globals.isw_modified_constants)
- {
- /* reset fixed point constants */
- xmin = read_word_u(sp_globals.font_org + FH_FXMIN);
- ymin = read_word_u(sp_globals.font_org + FH_FYMIN);
- ymax = read_word_u(sp_globals.font_org + FH_FYMAX);
- sp_globals.constr.data_valid = FALSE;
- xmax = read_word_u(sp_globals.font_org + FH_FXMAX);
- if (!setup_consts(xmin,xmax,ymin,ymax))
- {
- report_error(3); /* Requested specs out of range */
- return FALSE;
- }
- }
-return (return_value);
-}
-
-FUNCTION boolean make_char(
-GDECL
-ufix16 char_index) /* Index to character in char directory */
-{
-sp_globals.import_setwidth_act = FALSE;
-return (do_make_char(char_index));
-}
-
-FUNCTION static boolean do_make_char(GDECL ufix16 char_index)
-#else
-FUNCTION boolean make_char(GDECL ufix16 char_index)
-#endif
-/*
- * Outputs specified character using the currently selected font and
- * scaling and output specifications.
- * Reports Error 10 and returns FALSE if no font specifications
- * previously set.
- * Reports Error 12 and returns FALSE if character data not available.
- */
-{
-ufix8 FONTFAR *pointer; /* Pointer to character data */
-fix15 x_orus;
-fix15 tmpfix15;
-ufix8 format;
-
-#if INCL_ISW
-sp_globals.isw_modified_constants = FALSE;
-#endif
-
-#if REENTRANT_ALLOC
-
-plaid_t plaid;
-
-#if INCL_BLACK || INCL_SCREEN || INCL_2D
-intercepts_t intercepts;
-sp_globals.intercepts = &intercepts;
-#endif
-
-sp_globals.plaid = &plaid;
-#endif
-
-if (!sp_globals.specs_valid) /* Font specs not defined? */
- {
- report_error(10); /* Report font not specified */
- return FALSE; /* Error return */
- }
-
-#if INCL_MULTIDEV
-#if INCL_OUTLINE
-if (sp_globals.output_mode == MODE_OUTLINE && !sp_globals.outline_device_set)
- {
- report_error(2);
- return FALSE;
- }
-else
-#endif
- if (!sp_globals.bitmap_device_set)
- {
- report_error(2);
- return FALSE;
- }
-#endif
-
-
-init_tcb(); /* Initialize transformation control block */
-
-pointer = sp_get_char_org(char_index, TRUE); /* Point to start of character data */
-SHOW(pointer);
-if (pointer == NULL) /* Character data not available? */
- {
- report_error(12); /* Report character data not avail */
- return FALSE; /* Error return */
- }
-
-pointer += 2; /* Skip over character id */
-x_orus = NEXT_WORD(pointer); /* Read set width */
-#if INCL_SQUEEZING || INCL_ISW
-sp_globals.setwidth_orus = x_orus;
-#endif
-
-#if INCL_ISW
-if (sp_globals.import_setwidth_act)
- x_orus = sp_globals.imported_width;
-#endif
-sp_globals.Psw.x = (fix15)((fix31)
- (((fix31)x_orus * (sp_globals.specs.xxmult>>16) +
- ( ((fix31)x_orus * (sp_globals.specs.xxmult&0xffffL) )>>16)
- ) << sp_globals.pixshift) / sp_globals.metric_resolution);
-
-sp_globals.Psw.y = (fix15)(
- (fix31)(
- ((fix31)x_orus * (sp_globals.specs.yxmult>>16) +
- ( ((fix31)x_orus * (sp_globals.specs.yxmult&0xffffL) )>>16)
- ) << sp_globals.pixshift) / sp_globals.metric_resolution);
-
-format = NEXT_BYTE(pointer);
-if (format & BIT1) /* Optional data in header? */
- {
- tmpfix15 = (ufix8)NEXT_BYTE(pointer); /* Read size of optional data */
- pointer += tmpfix15; /* Skip optional data */
- }
-if (format & BIT0)
- {
- return sp_make_comp_char(pointer); /* Output compound character */
- }
-else
- {
- return sp_make_simp_char(pointer, format); /* Output simple character */
- }
-}
-
-FUNCTION static boolean sp_make_simp_char(
-GDECL
-ufix8 FONTFAR *pointer, /* Pointer to first byte of position argument */
-ufix8 format) /* Character format byte */
-/*
- * Called by sp_make_char() to output a simple (non-compound) character.
- * Returns TRUE on completion.
- */
-{
-point_t Pmin, Pmax; /* Transformed corners of bounding box */
-#if INCL_SQUEEZING || INCL_ISW
-ufix8 FONTFAR *save_pointer;
-#endif
-#if INCL_ISW
-fix31 char_width;
-fix31 isw_scale;
-#endif
-
-#if INCL_SQUEEZING
-sp_globals.squeezing_compound = FALSE;
-if ((sp_globals.pspecs->flags & SQUEEZE_LEFT) ||
- (sp_globals.pspecs->flags & SQUEEZE_RIGHT) ||
- (sp_globals.pspecs->flags & SQUEEZE_TOP) ||
- (sp_globals.pspecs->flags & SQUEEZE_BOTTOM) )
- {
- /* get the bounding box data before processing the character */
- save_pointer = pointer;
- preview_bounding_box (pointer, format);
- pointer = save_pointer;
- }
-#endif
-#if (INCL_ISW)
-if (sp_globals.import_setwidth_act)
- {
- save_pointer = pointer;
- preview_bounding_box (pointer, format);
- pointer = save_pointer;
- /* make sure I'm not going to get fixed point overflow */
- isw_scale = compute_isw_scale();
- if (sp_globals.bbox_xmin_orus < 0)
- char_width = SQUEEZE_MULT((sp_globals.bbox_xmax_orus - sp_globals.bbox_xmin_orus), isw_scale);
- else
- char_width = SQUEEZE_MULT(sp_globals.bbox_xmax_orus, isw_scale);
- if (char_width >= sp_globals.isw_xmax)
- if (!reset_xmax(char_width))
- return FALSE;
- }
-#endif
-pointer = plaid_tcb(pointer, format); /* Process plaid data */
-pointer = read_bbox(pointer, &Pmin, &Pmax, FALSE); /* Read bounding box */
-if (fn_begin_char(sp_globals.Psw, Pmin, Pmax)) /* Signal start of character output */
- {
- do
- {
- proc_outl_data(pointer); /* Process outline data */
- }
- while (!fn_end_char()); /* Repeat if not done */
- }
-return TRUE;
-}
-
-FUNCTION static boolean sp_make_comp_char(
-GDECL
-ufix8 FONTFAR *pointer) /* Pointer to first byte of position argument */
-/*
- * Called by sp_make_char() to output a compound character.
- * Returns FALSE if data for any sub-character is not available.
- * Returns TRUE if output completed with no error.
- */
-{
-point_t Pmin, Pmax; /* Transformed corners of bounding box */
-point_t Pssw; /* Transformed escapement vector */
-ufix8 FONTFAR *pointer_sav; /* Saved pointer to compound character data */
-ufix8 FONTFAR *sub_pointer; /* Pointer to sub-character data */
-ufix8 format; /* Format of DOCH instruction */
-ufix16 sub_char_index; /* Index to sub-character in character directory */
-fix15 x_posn; /* X position of sub-character (outline res units) */
-fix15 y_posn; /* Y position of sub-character (outline res units) */
-fix15 x_scale; /* X scale factor of sub-character (scale units) */
-fix15 y_scale; /* Y scale factor of sub-character (scale units) */
-fix15 tmpfix15; /* Temporary workspace */
-fix15 x_orus; /* Set width in outline resolution units */
-fix15 pix_adj; /* Pixel adjustment to compound char bounding box */
-#if INCL_SQUEEZING
-fix31 x_factor, x_offset, top_scale, bottom_scale;
-boolean squeezed_x, squeezed_y;
-#endif
-#if INCL_SQUEEZING || INCL_ISW
-fix15 x_offset_pix;
-#endif
-#if INCL_ISW
-fix31 char_width;
-fix31 isw_scale;
-#endif
-
-
-#if INCL_SQUEEZING
-sp_globals.squeezing_compound = TRUE;
-#endif
-pointer = read_bbox(pointer, &Pmin, &Pmax, TRUE); /* Read bounding box data */
-pix_adj = sp_globals.onepix << 1; /* Allow 2 pixel expansion ... */
-Pmin.x -= pix_adj; /* ... of components of ... */
-Pmin.y -= pix_adj; /* ... compound ... */
-Pmax.x += pix_adj; /* ... character ... */
-Pmax.y += pix_adj; /* ... bounding box. */
-
-#if INCL_SQUEEZING
-/* scale the bounding box if necessary before calling begin_char */
-squeezed_x = calculate_x_scale(&x_factor, &x_offset, 0);
-squeezed_y = calculate_y_scale(&top_scale, &bottom_scale,0,0);
-
-if (squeezed_x)
- { /* scale the x coordinates of the bbox */
- x_offset_pix = (fix15)(((x_offset >> 16) * sp_globals.tcb0.xppo)
- >> sp_globals.mpshift);
- if ((x_offset_pix >0) && (x_offset_pix < sp_globals.onepix))
- x_offset_pix = sp_globals.onepix;
- Pmin.x = SQUEEZE_MULT (x_factor, Pmin.x) + x_offset_pix - pix_adj;
- Pmax.x = SQUEEZE_MULT (x_factor, Pmax.x) + x_offset_pix + pix_adj;
- }
-if (squeezed_y)
- { /* scale the y coordinates of the bbox */
- if ((Pmin.y) < 0)
- Pmin.y = SQUEEZE_MULT (bottom_scale, Pmin.y) - pix_adj;
- else
- Pmin.y = SQUEEZE_MULT (top_scale, Pmin.y) - pix_adj;
- if ((Pmax.y) < 0)
- Pmax.y = SQUEEZE_MULT (bottom_scale, Pmax.y) + pix_adj;
- else
- Pmax.y = SQUEEZE_MULT (top_scale, Pmax.y) + pix_adj;
- }
-#endif
-#if (INCL_ISW)
-if (sp_globals.import_setwidth_act)
- {
- /* make sure I'm not going to get fixed point overflow */
- isw_scale = ((fix31)sp_globals.imported_width << 16)/
- (fix31)sp_globals.setwidth_orus;
- char_width = SQUEEZE_MULT((sp_globals.bbox_xmax_orus -
- sp_globals.bbox_xmin_orus),
-isw_scale);
- if (char_width >= sp_globals.isw_xmax)
- if (!reset_xmax(char_width))
- return FALSE;
- }
-#endif
-
-if (fn_begin_char(sp_globals.Psw, Pmin, Pmax)) /* Signal start of character data */
- {
- pointer_sav = pointer;
- do
- {
- pointer = pointer_sav; /* Point to next DOCH or END instruction */
- while ((format = NEXT_BYTE(pointer))) /* DOCH instruction? */
- {
- init_tcb(); /* Initialize transformation control block */
- x_posn = sp_get_posn_arg(&pointer, format);
- y_posn = sp_get_posn_arg(&pointer, (ufix8)(format >> 2));
- x_scale = sp_get_scale_arg(&pointer, (ufix8)(format & BIT4));
- y_scale = sp_get_scale_arg(&pointer, (ufix8)(format & BIT5));
- scale_tcb(&sp_globals.tcb, x_posn, y_posn, x_scale, y_scale); /* Scale for sub-char */
- sub_char_index = (format & BIT6)? /* Read sub-char index */
- 0xffff & NEXT_WORD(pointer):
- 0xffff & NEXT_BYTE(pointer);
- sub_pointer = sp_get_char_org(sub_char_index, FALSE); /* Point to start of sub-char */
- if (sub_pointer == NULL) /* Character data not available? */
- {
- return FALSE; /* Abort character output */
- }
- sub_pointer += 2; /* Skip over character id */
- x_orus = NEXT_WORD(sub_pointer); /* Read set_width of sub-character */
-
- Pssw.x = (fix15)(
- (fix31)(
- ((fix31)x_orus * (sp_globals.specs.xxmult>>16) +
- ( ((fix31)x_orus * (sp_globals.specs.xxmult&0xffffL) )>>16)
- ) << sp_globals.pixshift) / sp_globals.metric_resolution);
- Pssw.y = (fix15)(
- (fix31)(
- ((fix31)x_orus * (sp_globals.specs.yxmult>>16) +
- ( ((fix31)x_orus * (sp_globals.specs.yxmult&0xffffL) )>>16)
- ) << sp_globals.pixshift) / sp_globals.metric_resolution);
-
- format = NEXT_BYTE(sub_pointer); /* Read sub-character format */
- if (format & BIT1) /* Optional data in header? */
- {
- tmpfix15 = (ufix8)NEXT_BYTE(sub_pointer); /* Read size of optional data */
- sub_pointer += tmpfix15; /* Skip optional data */
- }
- sub_pointer = plaid_tcb(sub_pointer, format); /* Process sub-character plaid data */
- sub_pointer = read_bbox(sub_pointer, &Pmin, &Pmax, FALSE); /* Read bounding box */
- fn_begin_sub_char(Pssw, Pmin, Pmax); /* Signal start of sub-character data */
- proc_outl_data(sub_pointer); /* Process sub-character data */
- fn_end_sub_char(); /* Signal end of sub-character data */
- }
- }
- while (!fn_end_char()); /* Signal end of character; repeat if required */
- }
-return TRUE;
-}
-
-#if INCL_LCD /* Dynamic load character data supported? */
-FUNCTION static ufix8 FONTFAR *sp_get_char_org(
-GDECL
-ufix16 char_index, /* Index of character to be accessed */
-boolean top_level) /* Not a compound character element */
-/*
- * Called by sp_get_char_id(), sp_get_char_width(), sp_make_char() and
- * sp_make_comp_char() to get a pointer to the start of the character data
- * for the specified character index.
- * Version for configuration supporting dynamic character data loading.
- * Calls load_char_data() to load character data if not already loaded
- * as part of the original font buffer.
- * Returns NULL if character data not available
- */
-{
-buff_t *pchar_data; /* Buffer descriptor requested */
-ufix8 FONTFAR *pointer; /* Pointer into character directory */
-ufix8 format; /* Character directory format byte */
-fix31 char_offset; /* Offset of char data from start of font file */
-fix31 next_char_offset; /* Offset of char data from start of font file */
-fix15 no_bytes; /* Number of bytes required for char data */
-
-if (top_level) /* Not element of compound char? */
- {
- if (char_index < sp_globals.first_char_idx) /* Before start of character set? */
- return NULL;
- char_index -= sp_globals.first_char_idx;
- if (char_index >= sp_globals.no_chars_avail) /* Beyond end of character set? */
- return NULL;
- sp_globals.cb_offset = 0; /* Reset char buffer offset */
- }
-
-pointer = sp_globals.pchar_dir;
-format = NEXT_BYTE(pointer); /* Read character directory format byte */
-pointer += char_index << 1; /* Point to indexed character entry */
-if (format) /* 3-byte entries in char directory? */
- {
- pointer += char_index; /* Adjust for 3-byte entries */
- char_offset = read_long(pointer); /* Read file offset to char data */
- next_char_offset = read_long(pointer + 3); /* Read offset to next char */
- }
-else
- {
- char_offset = (fix31)(0xffff & NEXT_WORD(pointer)); /* Read file offset to char data */
- next_char_offset = (fix31)(0xffff & NEXT_WORD(pointer)); /* Read offset to next char */
- }
-
-no_bytes = next_char_offset - char_offset;
-if (no_bytes == 0) /* Character not in directory? */
- return NULL;
-
-if (next_char_offset <= sp_globals.font_buff_size)/* Character data already in font buffer? */
- return sp_globals.pfont->org + char_offset; /* Return pointer into font buffer */
-
-pchar_data = load_char_data(char_offset, no_bytes, sp_globals.cb_offset); /* Request char data load */
-if (pchar_data->no_bytes < no_bytes) /* Correct number of bytes loaded? */
- return NULL;
-
-if (top_level) /* Not element of compound char? */
- {
- sp_globals.cb_offset = no_bytes;
- }
-
-return pchar_data->org; /* Return pointer into character data buffer */
-}
-#endif
-
-#if INCL_LCD
-#else /* Dynamic load character data not supported? */
-FUNCTION static ufix8 FONTFAR *sp_get_char_org(
-GDECL
-ufix16 char_index, /* Index of character to be accessed */
-boolean top_level) /* Not a compound character element */
-/*
- * Called by sp_get_char_id(), sp_get_char_width(), sp_make_char() and
- * sp_make_comp_char() to get a pointer to the start of the character data
- * for the specified character index.
- * Version for configuration not supporting dynamic character data loading.
- * Returns NULL if character data not available
- */
-{
-ufix8 FONTFAR *pointer; /* Pointer into character directory */
-ufix8 format; /* Character directory format byte */
-fix31 char_offset; /* Offset of char data from start of font file */
-fix31 next_char_offset; /* Offset of char data from start of font file */
-fix15 no_bytes; /* Number of bytes required for char data */
-
-if (top_level) /* Not element of compound char? */
- {
- if (char_index < sp_globals.first_char_idx) /* Before start of character set? */
- return NULL;
- char_index -= sp_globals.first_char_idx;
- if (char_index >= sp_globals.no_chars_avail) /* Beyond end of character set? */
- return NULL;
- }
-
-pointer = sp_globals.pchar_dir;
-format = NEXT_BYTE(pointer); /* Read character directory format byte */
-pointer += char_index << 1; /* Point to indexed character entry */
-if (format) /* 3-byte entries in char directory? */
- {
- pointer += char_index; /* Adjust for 3-byte entries */
- char_offset = read_long(pointer); /* Read file offset to char data */
- next_char_offset = read_long(pointer + 3); /* Read offset to next char */
- }
-else
- {
- char_offset = (fix31)(0xffff & NEXT_WORD(pointer)); /* Read file offset to char data */
- next_char_offset = (fix31)(0xffff & NEXT_WORD(pointer)); /* Read offset to next char */
- }
-
-no_bytes = next_char_offset - char_offset;
-if (no_bytes == 0) /* Character not in directory? */
- return NULL;
-
-return sp_globals.pfont->org + char_offset; /* Return pointer into font buffer */
-}
-#endif
-
-
-FUNCTION static fix15 sp_get_posn_arg(
-GDECL
-ufix8 FONTFAR * STACKFAR *ppointer, /* Pointer to first byte of position argument */
-ufix8 format) /* Format of DOCH arguments */
-/*
- * Called by sp_make_comp_char() to read a position argument from the
- * specified point in the font/char buffer.
- * Updates pointer to byte following position argument.
- * Returns value of position argument in outline resolution units
- */
-{
-switch (format & 0x03)
- {
-case 1:
- return NEXT_WORD(*ppointer);
-
-case 2:
- return (fix15)((fix7)NEXT_BYTE(*ppointer));
-
-default:
- return (fix15)0;
- }
-}
-
-FUNCTION static fix15 sp_get_scale_arg(
-GDECL
-ufix8 FONTFAR *STACKFAR *ppointer, /* Pointer to first byte of position argument */
-ufix8 format) /* Format of DOCH arguments */
-/*
- * Called by sp_make_comp_char() to read a scale argument from the
- * specified point in the font/char buffer.
- * Updates pointer to byte following scale argument.
- * Returns value of scale argument in scale units (normally 1/4096)
- */
-{
-if (format)
- return NEXT_WORD(*ppointer);
-else
- return (fix15)ONE_SCALE;
-}
-#if INCL_ISW || INCL_SQUEEZING
-FUNCTION static void preview_bounding_box(
-GDECL
-ufix8 FONTFAR *pointer, /* Pointer to first byte of position argument */
-ufix8 format) /* Character format byte */
-{
-point_t Pmin, Pmax; /* Transformed corners of bounding box */
-
- sp_globals.no_X_orus = (format & BIT2)?
- (fix15)NEXT_BYTE(pointer):
- 0;
- sp_globals.no_Y_orus = (format & BIT3)?
- (fix15)NEXT_BYTE(pointer):
- 0;
- pointer = read_oru_table(pointer);
-
- /* Skip over control zone table */
- pointer = skip_control_zone(pointer,format);
-
- /* Skip over interpolation table */
- pointer = skip_interpolation_table(pointer,format);
- /* get_args has a pathological need for this value to be set */
- sp_globals.Y_edge_org = sp_globals.no_X_orus;
- pointer = read_bbox(pointer, &Pmin, &Pmax, TRUE); /* Read bounding bo
-x */
-
-}
-#endif
-#if INCL_ISW
-FUNCTION static boolean reset_xmax(
-GDECL
-fix31 xmax)
-
-{
-fix15 xmin; /* Minimum X ORU value in font */
-fix15 ymin; /* Minimum Y ORU value in font */
-fix15 ymax; /* Maximum Y ORU value in font */
-
-
-sp_globals.isw_modified_constants = TRUE;
-xmin = read_word_u(sp_globals.font_org + FH_FXMIN);
-ymin = read_word_u(sp_globals.font_org + FH_FYMIN);
-ymax = read_word_u(sp_globals.font_org + FH_FYMAX);
-
-if (!setup_consts(xmin,xmax,ymin,ymax))
- {
- report_error(3); /* Requested specs out of range */
- return FALSE;
- }
-sp_globals.constr.data_valid = FALSE;
-/* recompute setwidth */
-sp_globals.Psw.x = (fix15)((fix31)(
- ((fix31)sp_globals.imported_width * (sp_globals.specs.xxmult>>16) +
- ( ((fix31)sp_globals.imported_width *
- (sp_globals.specs.xxmult&0xffffL) )>>16)
- ) << sp_globals.pixshift) / sp_globals.metric_resolution);
-sp_globals.Psw.y = (fix15)(
- (fix31)(
- ((fix31)sp_globals.imported_width * (sp_globals.specs.yxmult>>16) +
- ( ((fix31)sp_globals.imported_width * (sp_globals.specs.yxmult&0xffffL) )>>16)
- ) << sp_globals.pixshift) / sp_globals.metric_resolution);
-
-return TRUE;
-}
-#endif
diff --git a/nx-X11/lib/font/Speedo/do_trns.c b/nx-X11/lib/font/Speedo/do_trns.c
deleted file mode 100644
index 2e0f1dbed..000000000
--- a/nx-X11/lib/font/Speedo/do_trns.c
+++ /dev/null
@@ -1,512 +0,0 @@
-/* $Xorg: do_trns.c,v 1.3 2000/08/17 19:46:25 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/do_trns.c,v 1.3 2001/01/17 19:43:17 dawes Exp $ */
-
-/**************************** D O _ T R N S . C ******************************
- * *
- * This module is responsible for executing all intelligent transformation *
- * for bounding box and outline data *
- * *
- ****************************************************************************/
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "spdo_prv.h" /* General definitions for Speedo */
-
-#define DEBUG 0
-
-#if DEBUG
-#include <stdio.h>
-#define SHOW(X) printf("X = %d\n", X)
-#else
-#define SHOW(X)
-#endif
-
-/***** GLOBAL VARIABLES *****/
-
-/***** GLOBAL FUNCTIONS *****/
-
-/***** EXTERNAL VARIABLES *****/
-
-/***** EXTERNAL FUNCTIONS *****/
-
-/***** STATIC VARIABLES *****/
-
-/***** STATIC FUNCTIONS *****/
-
-static void sp_split_curve(PROTO_DECL2 point_t P1,point_t P2,point_t P3,fix15 depth);
-static ufix8 FONTFAR *sp_get_args(PROTO_DECL2 ufix8 FONTFAR *pointer,ufix8 format,point_t STACKFAR *pP);
-
-
-FUNCTION ufix8 FONTFAR *read_bbox(
-GDECL
-ufix8 FONTFAR *pointer, /* Pointer to next byte in char data */
-point_t STACKFAR *pPmin, /* Lower left corner of bounding box */
-point_t STACKFAR *pPmax, /* Upper right corner of bounding box */
-boolean set_flag) /* flag to indicate whether global oru bbox should be saved */
-/*
- * Called by make_simp_char() and make_comp_char() to read the
- * bounding box data from the font.
- * Sets Pmin and Pmax to the bottom left and top right corners
- * of the bounding box after transformation into device space.
- * The units of Pmin and Pmax are sub-pixels.
- * Updates *ppointer to point to the byte following the
- * bounding box data.
- */
-{
-ufix8 format1;
-ufix8 format = 0;
-fix15 i;
-point_t P;
-
-sp_globals.x_int = 0;
-sp_globals.y_int = sp_globals.Y_int_org;
-sp_globals.x_orus = sp_globals.y_orus = 0;
-format1 = NEXT_BYTE(pointer);
-pointer = sp_get_args(pointer, format1, pPmin);
-#if INCL_SQUEEZING || INCL_ISW
-if (set_flag)
- {
- sp_globals.bbox_xmin_orus = sp_globals.x_orus;
- sp_globals.bbox_ymin_orus = sp_globals.y_orus;
- }
-#endif
-*pPmax = *pPmin;
-for (i = 1; i < 4; i++)
- {
- switch(i)
- {
- case 1:
- if (format1 & BIT6) /* Xmax requires X int zone 1? */
- sp_globals.x_int++;
- format = (format1 >> 4) | 0x0c;
- break;
-
- case 2:
- if (format1 & BIT7) /* Ymax requires Y int zone 1? */
- sp_globals.y_int++;
- format = NEXT_BYTE(pointer);
- break;
-
- case 3:
- sp_globals.x_int = 0;
- format >>= 4;
- break;
-
- default:
- break;
- }
-
- pointer = sp_get_args(pointer, format, &P);
-#if INCL_SQUEEZING || INCL_ISW
- if (set_flag && (i==2))
- {
- sp_globals.bbox_xmax_orus = sp_globals.x_orus;
- sp_globals.bbox_ymax_orus = sp_globals.y_orus;
- }
-#endif
- if ((i == 2) || (!sp_globals.normal))
- {
- if (P.x < pPmin->x)
- pPmin->x = P.x;
- if (P.y < pPmin->y)
- pPmin->y = P.y;
- if (P.x > pPmax->x)
- pPmax->x = P.x;
- if (P.y > pPmax->y)
- pPmax->y = P.y;
- }
- }
-
-#if DEBUG
-printf("BBOX %6.1f(Xint 0), %6.1f(Yint 0), %6.1f(Xint %d), %6.1f(Yint %d)\n",
- (real)pPmin->x / (real)sp_globals.onepix,
- (real)pPmin->y / (real)sp_globals.onepix,
- (real)pPmax->x / (real)sp_globals.onepix,
- (format1 >> 6) & 0x01,
- (real)pPmax->y / (real)sp_globals.onepix,
- (format1 >> 7) & 0x01);
-
-#endif
-return pointer;
-}
-
-FUNCTION void proc_outl_data(
-GDECL
-ufix8 FONTFAR *pointer) /* Pointer to next byte in char data */
-/*
- * Called by make_simp_char() and make_comp_char() to read the
- * outline data from the font.
- * The outline data is parsed, transformed into device coordinates
- * and passed to an output module for further processing.
- * Note that pointer is not updated to facilitate repeated
- * processing of the outline data when banding mode is in effect.
- */
-{
-ufix8 format1, format2;
-point_t P0, P1, P2, P3;
-fix15 depth;
-fix15 curve_count;
-
-sp_globals.x_int = 0;
-sp_globals.y_int = sp_globals.Y_int_org;
-#if INCL_PLAID_OUT /* Plaid data monitoring included? */
-record_xint((fix15)sp_globals.x_int); /* Record xint data */
-record_yint((fix15)(sp_globals.y_int - sp_globals.Y_int_org)); /* Record yint data */
-#endif
-
-sp_globals.x_orus = sp_globals.y_orus = 0;
-curve_count = 0;
-while(TRUE)
- {
- format1 = NEXT_BYTE(pointer);
- switch(format1 >> 4)
- {
- case 0: /* LINE */
- pointer = sp_get_args(pointer, format1, &P1);
-#if DEBUG
- printf("LINE %6.1f, %6.1f\n",
- (real)P1.x / (real)sp_globals.onepix, (real)P1.y / (real)sp_globals.onepix);
-#endif
- fn_line(P1);
- sp_globals.P0 = P1;
- continue;
-
- case 1: /* Short XINT */
- sp_globals.x_int = format1 & 0x0f;
-#if DEBUG
- printf("XINT %d\n", sp_globals.x_int);
-#endif
-#if INCL_PLAID_OUT /* Plaid data monitoring included? */
-record_xint((fix15)sp_globals.x_int); /* Record xint data */
-#endif
- continue;
-
- case 2: /* Short YINT */
- sp_globals.y_int = sp_globals.Y_int_org + (format1 & 0x0f);
-#if DEBUG
- printf("YINT %d\n", sp_globals.y_int - sp_globals.Y_int_org);
-#endif
-#if INCL_PLAID_OUT /* Plaid data monitoring included? */
-record_yint((fix15)(sp_globals.y_int - sp_globals.Y_int_org)); /* Record yint data */
-#endif
- continue;
-
- case 3: /* Miscellaneous */
- switch(format1 & 0x0f)
- {
- case 0: /* END */
- if (curve_count)
- {
- fn_end_contour();
- }
- return;
-
- case 1: /* Long XINT */
- sp_globals.x_int = NEXT_BYTE(pointer);
-#if DEBUG
- printf("XINT %d\n", sp_globals.x_int);
-#endif
-#if INCL_PLAID_OUT /* Plaid data monitoring included? */
-record_xint((fix15)sp_globals.x_int); /* Record xint data */
-#endif
- continue;
-
- case 2: /* Long YINT */
- sp_globals.y_int = sp_globals.Y_int_org + NEXT_BYTE(pointer);
-#if DEBUG
- printf("YINT %d\n", sp_globals.y_int - sp_globals.Y_int_org);
-#endif
-#if INCL_PLAID_OUT /* Plaid data monitoring included? */
-record_yint((fix15)(sp_globals.y_int - sp_globals.Y_int_org)); /* Record yint data */
-#endif
- continue;
-
- default: /* Not used */
- continue;
- }
-
- case 4: /* MOVE Inside */
- case 5: /* MOVE Outside */
- if (curve_count++)
- {
- fn_end_contour();
- }
-
- pointer = sp_get_args(pointer, format1, &P0);
- sp_globals.P0 = P0;
-#if DEBUG
- printf("MOVE %6.1f, %6.1f\n",
- (real)sp_globals.P0.x / (real)sp_globals.onepix, (real)sp_globals.P0.y / (real)sp_globals.onepix);
-#endif
- fn_begin_contour(sp_globals.P0, (boolean)(format1 & BIT4));
- continue;
-
- case 6: /* Undefined */
-#if DEBUG
- printf("*** Undefined instruction (Hex %4x)\n", format1);
-#endif
- continue;
-
- case 7: /* Undefined */
-#if DEBUG
- printf("*** Undefined instruction (Hex %4x)\n", format1);
-#endif
- continue;
-
- default: /* CRVE */
- format2 = NEXT_BYTE(pointer);
- pointer = sp_get_args(pointer, format1, &P1);
- pointer = sp_get_args(pointer, format2, &P2);
- pointer = sp_get_args(pointer, (ufix8)(format2 >> 4), &P3);
- depth = (format1 >> 4) & 0x07;
-#if DEBUG
- printf("CRVE %6.1f, %6.1f, %6.1f, %6.1f, %6.1f, %6.1f, %d\n",
- (real)P1.x / (real)sp_globals.onepix, (real)P1.y / (real)sp_globals.onepix,
- (real)P2.x / (real)sp_globals.onepix, (real)P2.y / (real)sp_globals.onepix,
- (real)P3.x / (real)sp_globals.onepix, (real)P3.y / (real)sp_globals.onepix,
- depth);
-#endif
- depth += sp_globals.depth_adj;
- if (sp_globals.curves_out)
- {
- fn_curve(P1, P2, P3, depth);
- sp_globals.P0 = P3;
- continue;
- }
- if (depth <= 0)
- {
- fn_line(P3);
- sp_globals.P0 = P3;
- continue;
- }
- sp_split_curve(P1, P2, P3, depth);
- continue;
- }
- }
-}
-
-FUNCTION static void sp_split_curve(
-GDECL
-point_t P1, /* First control point of Bezier curve */
-point_t P2, /* Second control point of Bezier curve */
-point_t P3, /* End point of Bezier curve */
-fix15 depth) /* Levels of recursive subdivision required */
-/*
- * Called by proc_outl_data() to subdivide Bezier curves into an
- * appropriate number of vectors, whenever curves are not enabled
- * for output to the currently selected output module.
- * sp_split_curve() calls itself recursively to the depth specified
- * at which point it calls line() to deliver each vector resulting
- * from the spliting process.
- */
-{
-fix31 X0 = (fix31)sp_globals.P0.x;
-fix31 Y0 = (fix31)sp_globals.P0.y;
-fix31 X1 = (fix31)P1.x;
-fix31 Y1 = (fix31)P1.y;
-fix31 X2 = (fix31)P2.x;
-fix31 Y2 = (fix31)P2.y;
-fix31 X3 = (fix31)P3.x;
-fix31 Y3 = (fix31)P3.y;
-point_t Pmid;
-point_t Pctrl1;
-point_t Pctrl2;
-
-#if DEBUG
-printf("CRVE(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f)\n",
- (real)P1.x / (real)sp_globals.onepix, (real)P1.y / (real)sp_globals.onepix,
- (real)P2.x / (real)sp_globals.onepix, (real)P2.y / (real)sp_globals.onepix,
- (real)P3.x / (real)sp_globals.onepix, (real)P3.y / (real)sp_globals.onepix);
-#endif
-
-
-Pmid.x = (X0 + (X1 + X2) * 3 + X3 + 4) >> 3;
-Pmid.y = (Y0 + (Y1 + Y2) * 3 + Y3 + 4) >> 3;
-if ((--depth) <= 0)
- {
- fn_line(Pmid);
- sp_globals.P0 = Pmid;
- fn_line(P3);
- sp_globals.P0 = P3;
- }
-else
- {
- Pctrl1.x = (X0 + X1 + 1) >> 1;
- Pctrl1.y = (Y0 + Y1 + 1) >> 1;
- Pctrl2.x = (X0 + (X1 << 1) + X2 + 2) >> 2;
- Pctrl2.y = (Y0 + (Y1 << 1) + Y2 + 2) >> 2;
- sp_split_curve(Pctrl1, Pctrl2, Pmid, depth);
- Pctrl1.x = (X1 + (X2 << 1) + X3 + 2) >> 2;
- Pctrl1.y = (Y1 + (Y2 << 1) + Y3 + 2) >> 2;
- Pctrl2.x = (X2 + X3 + 1) >> 1;
- Pctrl2.y = (Y2 + Y3 + 1) >> 1;
- sp_split_curve(Pctrl1, Pctrl2, P3, depth);
- }
-}
-
-FUNCTION static ufix8 FONTFAR *sp_get_args(
-GDECL
-ufix8 FONTFAR *pointer, /* Pointer to next byte in char data */
-ufix8 format, /* Format specifiaction of argument pair */
-point_t STACKFAR *pP) /* Resulting transformed point */
-/*
- * Called by read_bbox() and proc_outl_data() to read an X Y argument
- * pair from the font.
- * The format is specified as follows:
- * Bits 0-1: Type of X argument.
- * Bits 2-3: Type of Y argument.
- * where the 4 possible argument types are:
- * Type 0: Controlled coordinate represented by one byte
- * index into the X or Y controlled coordinate table.
- * Type 1: Interpolated coordinate represented by a two-byte
- * signed integer.
- * Type 2: Interpolated coordinate represented by a one-byte
- * signed increment/decrement relative to the
- * proceding X or Y coordinate.
- * Type 3: Repeat of preceding X or Y argument value and type.
- * The units of P are sub-pixels.
- * Updates *ppointer to point to the byte following the
- * argument pair.
- */
-{
-ufix8 edge;
-
-/* Read X argument */
-switch(format & 0x03)
- {
-case 0: /* Index to controlled oru */
- edge = NEXT_BYTE(pointer);
- sp_globals.x_orus = sp_plaid.orus[edge];
-#if INCL_RULES
- sp_globals.x_pix = sp_plaid.pix[edge];
-#endif
- break;
-
-case 1: /* 2 byte interpolated oru value */
- sp_globals.x_orus = NEXT_WORD(pointer);
- goto L1;
-
-case 2: /* 1 byte signed oru increment */
- sp_globals.x_orus += (fix15)((fix7)NEXT_BYTE(pointer));
-L1:
-#if INCL_RULES
- sp_globals.x_pix = TRANS(sp_globals.x_orus, sp_plaid.mult[sp_globals.x_int], sp_plaid.offset[sp_globals.x_int], sp_globals.mpshift);
-#endif
- break;
-
-default: /* No change in X value */
- break;
- }
-
-/* Read Y argument */
-switch((format >> 2) & 0x03)
- {
-case 0: /* Index to controlled oru */
- edge = sp_globals.Y_edge_org + NEXT_BYTE(pointer);
- sp_globals.y_orus = sp_plaid.orus[edge];
-#if INCL_RULES
- sp_globals.y_pix = sp_plaid.pix[edge];
-#endif
- break;
-
-case 1: /* 2 byte interpolated oru value */
- sp_globals.y_orus = NEXT_WORD(pointer);
- goto L2;
-
-case 2: /* 1 byte signed oru increment */
- sp_globals.y_orus += (fix15)((fix7)NEXT_BYTE(pointer));
-L2:
-#if INCL_RULES
- sp_globals.y_pix = TRANS(sp_globals.y_orus, sp_plaid.mult[sp_globals.y_int], sp_plaid.offset[sp_globals.y_int], sp_globals.mpshift);
-#endif
- break;
-
-default: /* No change in X value */
- break;
- }
-
-#if INCL_RULES
-switch(sp_globals.tcb.xmode)
- {
-case 0: /* X mode 0 */
- pP->x = sp_globals.x_pix;
- break;
-
-case 1: /* X mode 1 */
- pP->x = -sp_globals.x_pix;
- break;
-
-case 2: /* X mode 2 */
- pP->x = sp_globals.y_pix;
- break;
-
-case 3: /* X mode 3 */
- pP->x = -sp_globals.y_pix;
- break;
-
-default: /* X mode 4 */
-#endif
- pP->x = (MULT16(sp_globals.x_orus, sp_globals.tcb.xxmult) +
- MULT16(sp_globals.y_orus, sp_globals.tcb.xymult) +
- sp_globals.tcb.xoffset) >> sp_globals.mpshift;
-#if INCL_RULES
- break;
- }
-
-switch(sp_globals.tcb.ymode)
- {
-case 0: /* Y mode 0 */
- pP->y = sp_globals.y_pix;
- break;
-
-case 1: /* Y mode 1 */
- pP->y = -sp_globals.y_pix;
- break;
-
-case 2: /* Y mode 2 */
- pP->y = sp_globals.x_pix;
- break;
-
-case 3: /* Y mode 3 */
- pP->y = -sp_globals.x_pix;
- break;
-
-default: /* Y mode 4 */
-#endif
- pP->y = (MULT16(sp_globals.x_orus, sp_globals.tcb.yxmult) +
- MULT16(sp_globals.y_orus, sp_globals.tcb.yymult) +
- sp_globals.tcb.yoffset) >> sp_globals.mpshift;
-#if INCL_RULES
- break;
- }
-#endif
-
-return pointer;
-}
-
-
-
diff --git a/nx-X11/lib/font/Speedo/htest.c b/nx-X11/lib/font/Speedo/htest.c
deleted file mode 100644
index 235b76560..000000000
--- a/nx-X11/lib/font/Speedo/htest.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/* $Xorg: htest.c,v 1.3 2000/08/17 19:46:25 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-
-/****************************** H T E S T . C ********************************
- * *
- * SPEEDO FONT HEADER TEST MODULE *
- * *
- ****************************************************************************/
-
-
-#include "speedo.h" /* General definition for make_bmap */
-#include <stdio.h>
-
-#define DEBUG 0
-
-#if DEBUG
-#define SHOW(X) printf("X = %d\n", X)
-#else
-#define SHOW(X)
-#endif
-
-#define FONT_BUFFER_SIZE 1000
-
-/***** EXTERNAL FUNCTIONS *****/
-
-/***** STATIC VARIABLES *****/
-static char pathname[100]; /* Name of font file to be output */
-static ufix8 font_buffer[FONT_BUFFER_SIZE]; /* Font buffer */
-static FILE *fdescr; /* Speedo outline file descriptor */
-
-
-
-FUNCTION main(argc,argv)
-int argc;
-char *argv[];
-{
-int bytes_read; /* Number of bytes read from font file */
-ufix8 tmpufix8; /* Temporary workspace */
-fix15 tmpfix15; /* Temporary workspace */
-ufix16 tmpufix16; /* Temporary workspace */
-ufix32 tmpufix32; /* Temporary workspace */
-ufix8 *pvt_header_org; /* Origin of provate header data */
-
-ufix8 read_1b(); /* Read 1 byte field from font header */
-fix15 read_2b(); /* Read 2 byte field from font header */
-fix31 read_4b(); /* Read 4 byte field from font header */
-
-if (argc != 2)
- {
- fprintf(stderr,"Usage: htest {fontfile}\n\n");
- exit (1);
- }
-
-sprintf(pathname, argv[1]);
-
-/* Initialization */
-printf("\n SPEEDO FONT FILE HEADER DATA\n");
-printf(" -------------------------\n\n");
-/* Load Speedo outline file */
-fdescr = fopen (pathname, "rb");
-if (fdescr == NULL)
- {
- printf("****** Cannot open file %s\n", pathname);
- return;
- }
-
-bytes_read = fread(font_buffer, sizeof(ufix8), sizeof(font_buffer), fdescr);
-if (bytes_read == 0)
- {
- printf("****** Error on reading %s: %x\n", pathname, bytes_read);
- fclose(fdescr);
- return;
- }
-
-printf("Format Identifier ...................... %.4s\n", font_buffer + FH_FMVER);
-
-tmpufix32 = (ufix32)read_4b(font_buffer + FH_FMVER + 4);
-printf("CR-LF-NULL-NULL data ............... %8.8lx %s\n", tmpufix32, (tmpufix32 != 0x0d0a0000)? "(incorrect)": " ");
-
-printf("Font Size .............................. %4ld\n", (ufix32)read_4b(font_buffer + FH_FNTSZ));
-
-printf("Minimum Font Buffer Size ............... %4ld\n", (ufix32)read_4b(font_buffer + FH_FBFSZ));
-
-printf("Minimum Character Buffer Size .......... %4d\n", (ufix16)read_2b(font_buffer + FH_CBFSZ));
-
-printf("Header Size ............................ %4d\n", (ufix16)read_2b(font_buffer + FH_HEDSZ));
-
-printf("Font ID ................................ %4.4d\n", (ufix16)read_2b(font_buffer + FH_FNTID));
-
-printf("Font Version Number .................... %4d\n", (ufix16)read_1b(font_buffer + FH_SFVNR));
-
-printf("Font Full Name:\n %.70s\n", font_buffer + FH_FNTNM);
-
-printf("Manufacturing Date ................ %10.10s\n", font_buffer + FH_MDATE);
-
-printf("Character Set Name:\n %s\n", font_buffer + FH_LAYNM);
-
-printf("Character Set ID: ...................... %.4s\n", font_buffer + FH_LAYNM + 66);
-
-printf("Copyright Notice:\n %.70s\n", font_buffer + FH_CPYRT);
-
-printf("Number of Char. Indexes in Char. Set ... %4d\n", (ufix16)read_2b(font_buffer + FH_NCHRL));
-
-printf("Total number of Char. Indexes in Font .. %4d\n", (ufix16)read_2b(font_buffer + FH_NCHRF));
-
-printf("Index of First Character ............... %4d\n", (ufix16)read_2b(font_buffer + FH_FCHRF));
-
-printf("Number of Kerning Tracks ............... %4d\n", (ufix16)read_2b(font_buffer + FH_NKTKS));
-
-printf("Number of Kerning Pairs ................ %4d\n", (ufix16)read_2b(font_buffer + FH_NKPRS));
-
-printf("Font Flags:\n");
-tmpufix8 = read_1b(font_buffer + FH_FLAGS);
-printf(" Extended font ...................... %s\n", (tmpufix8 & BIT0)? " Yes": " No");
-
-printf("Classification Flags:\n");
-tmpufix8 = read_1b(font_buffer + FH_CLFGS);
-printf(" Italic ............................. %s\n", (tmpufix8 & BIT0)? " Yes": " No");
-printf(" Monospace .......................... %s\n", (tmpufix8 & BIT1)? " Yes": " No");
-printf(" Serif .............................. %s\n", (tmpufix8 & BIT2)? " Yes": " No");
-printf(" Display ............................ %s\n", (tmpufix8 & BIT3)? " Yes": " No");
-
-tmpufix8 = read_1b(font_buffer + FH_FAMCL);
-printf("Family Classification .................. %4d ", tmpufix8);
-switch (tmpufix8)
- {
-case 0:
- printf("(Don't care)\n");
- break;
-case 1:
- printf("(Serif)\n");
- break;
-case 2:
- printf("(Sans serif)\n");
- break;
-case 3:
- printf("(Monospace)\n");
- break;
-case 4:
- printf("(Script or calligraphic)\n");
- break;
-case 5:
- printf("(Decorative)\n");
- break;
-default:
- printf("\n");
- break;
- }
-
-printf("Font Form Classification:\n");
-tmpufix8 = read_1b(font_buffer + FH_FRMCL);
-printf(" Width Type ......................... %4d ", (tmpufix8 & 0x0f));
-switch (tmpufix8 & 0x0f)
- {
-case 4:
- printf("(Condensed)\n");
- break;
-case 6:
- printf("(Semi-condensed)\n");
- break;
-case 8:
- printf("(Normal)\n");
- break;
-case 10:
- printf("(Semi-expanded)\n");
- break;
-case 12:
- printf("(Expanded)\n");
- break;
-default:
- printf("\n");
- break;
- }
-printf(" Weight ............................. %4d ", (tmpufix8 >> 4));
-switch (tmpufix8 >> 4)
- {
-case 1:
- printf("(Thin)\n");
- break;
-case 2:
- printf("(Ultralight)\n");
- break;
-case 3:
- printf("(Extra light)\n");
- break;
-case 4:
- printf("(Light)\n");
- break;
-case 5:
- printf("(Book)\n");
- break;
-case 6:
- printf("(Normal)\n");
- break;
-case 7:
- printf("(Medium)\n");
- break;
-case 8:
- printf("(Semibold)\n");
- break;
-case 9:
- printf("(Demibold)\n");
- break;
-case 10:
- printf("(Bold)\n");
- break;
-case 11:
- printf("(Extrabold)\n");
- break;
-case 12:
- printf("(Ultrabold)\n");
- break;
-case 13:
- printf("(Heavy)\n");
- break;
-case 14:
- printf("(Black)\n");
- break;
-default:
- printf("\n");
- break;
- }
-
-printf("Short Font Name ........................ %.16s\n", font_buffer + FH_SFNTN);
-
-printf("Short Face Name ........................ %.16s\n", font_buffer + FH_SFACN);
-
-printf("Font Form .............................. %.14s\n", font_buffer + FH_FNTFM);
-
-printf("Italic Angle ........................... %7.2f\n", ((real)read_2b(font_buffer + FH_ITANG) / 256.0));
-
-printf("ORUs per Em ............................ %4d\n", (ufix16)read_2b(font_buffer + FH_ORUPM));
-
-printf("Width of Word Space .................... %4d\n", (ufix16)read_2b(font_buffer + FH_WDWTH));
-
-printf("Width of Em Space ...................... %4d\n", (ufix16)read_2b(font_buffer + FH_EMWTH));
-
-printf("Width of En Space ...................... %4d\n", (ufix16)read_2b(font_buffer + FH_ENWTH));
-
-printf("Width of Thin Space .................... %4d\n", (ufix16)read_2b(font_buffer + FH_TNWTH));
-
-printf("Width of Figure Space .................. %4d\n", (ufix16)read_2b(font_buffer + FH_FGWTH));
-
-printf("Min X coordinate in font ............... %4d\n", (fix15)read_2b(font_buffer + FH_FXMIN));
-
-printf("Min Y coordinate in font ............... %4d\n", (fix15)read_2b(font_buffer + FH_FYMIN));
-
-printf("Max X coordinate in font ............... %4d\n", (fix15)read_2b(font_buffer + FH_FXMAX));
-
-printf("Max Y coordinate in font ............... %4d\n", (fix15)read_2b(font_buffer + FH_FYMAX));
-
-printf("Underline Position ..................... %4d\n", (fix15)read_2b(font_buffer + FH_ULPOS));
-
-printf("Underline Thickness .................... %4d\n", (fix15)read_2b(font_buffer + FH_ULTHK));
-
-printf("Small Caps Y position .................. %4d\n", (fix15)read_2b(font_buffer + FH_SMCTR));
-printf("Small Caps X scale ..................... %7.2f\n", ((real)read_2b(font_buffer + FH_SMCTR + 2) / 4096.0));
-printf("Small Caps Y scale ..................... %7.2f\n", ((real)(fix15)read_2b(font_buffer + FH_SMCTR + 4) / 4096.0));
-
-printf("Display Superiors Y position ........... %4d\n", (fix15)read_2b(font_buffer + FH_SMCTR));
-printf("Display Superiors X scale .............. %7.2f\n", ((real)read_2b(font_buffer + FH_SMCTR + 2) / 4096.0));
-printf("Display Superiors Y scale .............. %7.2f\n", ((real)read_2b(font_buffer + FH_SMCTR + 4) / 4096.0));
-
-printf("Footnote Superiors Y position .......... %4d\n", (fix15)read_2b(font_buffer + FH_FNSTR));
-printf("Footnote Superiors X scale ............. %7.2f\n", ((real)read_2b(font_buffer + FH_FNSTR + 2) / 4096.0));
-printf("Footnote Superiors Y scale ............. %7.2f\n", ((real)read_2b(font_buffer + FH_FNSTR + 4) / 4096.0));
-
-printf("Alpha Superiors Y position ............. %4d\n", (fix15)read_2b(font_buffer + FH_ALSTR));
-printf("Alpha Superiors X scale ................ %7.2f\n", ((real)read_2b(font_buffer + FH_ALSTR + 2) / 4096.0));
-printf("Alpha Superiors Y scale ................ %7.2f\n", ((real)read_2b(font_buffer + FH_ALSTR + 4) / 4096.0));
-
-printf("Chemical Inferiors Y position .......... %4d\n", (fix15)read_2b(font_buffer + FH_CMITR));
-printf("Chemical Inferiors X scale ............. %7.2f\n", ((real)read_2b(font_buffer + FH_CMITR + 2) / 4096.0));
-printf("Chemical Inferiors Y scale ............. %7.2f\n", ((real)read_2b(font_buffer + FH_CMITR + 4) / 4096.0));
-
-printf("Small Numerators Y position ............ %4d\n", (fix15)read_2b(font_buffer + FH_SNMTR));
-printf("Small Numerators X scale ............... %7.2f\n", ((real)read_2b(font_buffer + FH_SNMTR + 2) / 4096.0));
-printf("Small Numerators Y scale ............... %7.2f\n", ((real)read_2b(font_buffer + FH_SNMTR + 4) / 4096.0));
-
-printf("Small Denominators Y position .......... %4d\n", (fix15)read_2b(font_buffer + FH_SDNTR));
-printf("Small Denominators X scale ............. %7.2f\n", ((real)read_2b(font_buffer + FH_SDNTR + 2) / 4096.0));
-printf("Small Denominators Y scale ............. %7.2f\n", ((real)read_2b(font_buffer + FH_SDNTR + 4) / 4096.0));
-
-printf("Medium Numerators Y position ........... %4d\n", (fix15)read_2b(font_buffer + FH_MNMTR));
-printf("Medium Numerators X scale .............. %7.2f\n", ((real)read_2b(font_buffer + FH_MNMTR + 2) / 4096.0));
-printf("Medium Numerators Y scale .............. %7.2f\n", ((real)read_2b(font_buffer + FH_MNMTR + 4) / 4096.0));
-
-printf("Medium Denominators Y position ......... %4d\n", (fix15)read_2b(font_buffer + FH_MDNTR));
-printf("Medium Denominators X scale ............ %7.2f\n", ((real)read_2b(font_buffer + FH_MDNTR + 2) / 4096.0));
-printf("Medium Denominators Y scale ............ %7.2f\n", ((real)read_2b(font_buffer + FH_MDNTR + 4) / 4096.0));
-
-printf("Large Numerators Y position ............ %4d\n", (fix15)read_2b(font_buffer + FH_LNMTR));
-printf("Large Numerators X scale ............... %7.2f\n", ((real)read_2b(font_buffer + FH_LNMTR + 2) / 4096.0));
-printf("Large Numerators Y scale ............... %7.2f\n", ((real)read_2b(font_buffer + FH_LNMTR + 4) / 4096.0));
-
-printf("Large Denominators Y position .......... %4d\n", (fix15)read_2b(font_buffer + FH_LDNTR));
-printf("Large Denominators X scale ............. %7.2f\n", ((real)read_2b(font_buffer + FH_LDNTR + 2) / 4096.0));
-printf("Large Denominators Y scale ............. %7.2f\n", ((real)read_2b(font_buffer + FH_LDNTR + 4) / 4096.0));
-
-fclose(fdescr);
-}
-
-
-FUNCTION ufix8 read_1b(pointer)
-ufix8 *pointer;
-/*
- * Reads 1-byte field from font buffer
- */
-{
-return *pointer;
-}
-
-FUNCTION fix15 read_2b(pointer)
-ufix8 *pointer;
-/*
- * Reads 2-byte field from font buffer
- */
-{
-fix31 temp;
-
-temp = *pointer++;
-temp = (temp << 8) + *(pointer);
-return temp;
-}
-
-FUNCTION fix31 read_4b(pointer)
-ufix8 *pointer;
-/*
- * Reads 4-byte field from font buffer
- */
-{
-fix31 temp;
-
-temp = *pointer++;
-temp = (temp << 8) + *(pointer++);
-temp = (temp << 8) + *(pointer++);
-temp = (temp << 8) + *(pointer);
-return temp;
-}
-
diff --git a/nx-X11/lib/font/Speedo/iface.c b/nx-X11/lib/font/Speedo/iface.c
deleted file mode 100644
index 1dad5ae48..000000000
--- a/nx-X11/lib/font/Speedo/iface.c
+++ /dev/null
@@ -1,650 +0,0 @@
-/* $Xorg: iface.c,v 1.3 2000/08/17 19:46:25 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/iface.c,v 1.2 1998/07/25 06:56:53 dawes Exp $ */
-
-/***************************** I F A C E . C *********************************
- * *
- * This module provides a layer to make Speedo function calls to and *
- * from it compatible with Fontware 2.X function calls. *
- * *
- ****************************************************************************/
-
-#include "speedo.h" /* General definitions for Speedo */
-#ifndef FONTMODULE
-#include <math.h>
-#else
-#include "xf86_ansic.h"
-#endif
-
-#define DEBUG 0
-
-#if DEBUG
-#include <stdio.h>
-#define SHOW(X) printf("X = %d\n", X)
-#else
-#define SHOW(X)
-#endif
-
-#define PI 3.1415926536 /* pi */
-#define PTPERINCH 72.2892 /* nbr points per inch, exactly! */
-
-#define BIT8 0x0100
-#define BIT9 0x0200
-#define BIT10 0x0400
-#define BIT11 0x0800
-#define BIT12 0x1000
-#define BIT13 0x2000
-#define BIT14 0x4000
-#define BIT15 0x8000
-
-#define READ 0
-
-typedef short bool16;
-typedef int bool;
-
-typedef
-struct
- {
- bool16 left;
- bool16 right;
- bool16 top;
- bool16 bottom;
- } lrtb;
-
-
-typedef
-struct
- {
- buff_t *pfont; /* Pointer to font data */
- ufix16 mode; /* what mode is the font generator in */
- real point_size_x; /* Point size in X dimension */
- real point_size_y; /* Point size in Y dimension */
- real res_hor; /* Horizontal resolution of output device */
- real res_ver; /* Vertical resolution of output device */
- real rot_angle; /* Rotation angle in degrees (clockwise) */
- real obl_angle; /* Obliquing angle in degrees (clockwise) */
- bool16 whitewrite; /* if T, generate bitmaps for whitewriters */
- fix15 thresh; /* Scan conversion threshold *
- * Thickens characters on each edge by *
- * <thresh> sub-pixels */
- bool16 import_widths; /* Use imported width table */
- lrtb clip; /* Clip to standard character cell */
- lrtb squeeze; /* Squeeze to standard character cell */
- bool16 bogus_mode; /* if T, ignore plaid data */
- } comp_char_desc; /* character attributes for scan conv */
-
-/***** GLOBAL VARIABLES *****/
-
-/***** GLOBAL FUNCTIONS *****/
- fw_reset(); /* Fontware 2.X reset call */
- fw_set_specs(); /* Fontware 2.X set specs call */
-bool fw_make_char(); /* Fontware 2.X make character call */
-
-/***** EXTERNAL VARIABLES *****/
-
-/***** EXTERNAL FUNCTIONS *****/
-void _open_bitmap();
-void _close_bitmap();
-void _set_bitmap_bits();
-void _open_outline();
-void _open_outline();
-void _start_new_char();
-void _start_curve();
-void _line_to();
-void _close_curve();
-void _close_outline();
-
-/***** STATIC VARIABLES *****/
-static specs_t *pspecs;
-static buff_t *pfont;
-static buff_t char_data;
-static fix15 set_width_x;
-static specs_t specsarg;
-
-/***** STATIC FUNCTIONS *****/
-static fix31 make_mult();
-
-
-FUNCTION fw_reset()
-{
-sp_reset();
-}
-
-FUNCTION fw_set_specs(pspecs)
-comp_char_desc *pspecs; /* Pointer to scan conversion parameters structure */
-
-/* Fontware 2.X character generator call to set font specifications
- * compc -- pointer to structure containing scan conversion parameters.
- * ->compf -- compressed font data structure
- * ->point_size_x -- x pointsize
- * ->point_size_y -- y pointsize
- * ->res_hor -- horizontal pixels per inch
- * ->res_ver -- vertical pixels per inch
- * ->rot_angle -- rotation angle in degrees (clockwise)
- * ->obl_angle -- obliquing angle in degrees (clockwise)
- * ->whitewrite -- if true, generate bitmaps for whitewriters
- * ->thresh -- scan-conversion threshold
- * ->import_widths -- if true, use external width table
- * ->clip.left -- clips min x at left of emsquare
- * ->clip.right -- clips max x at right of emsquare
- * ->clip.bottom -- clips min x at bottom of emsquare
- * ->clip.top -- clips max x at top of emsquare
- * ->squeeze.left -- squeezes min x at left of emsquare
- * ->squeeze.right, .top, .bottom &c
- * ->sw_fixed -- if TRUE, match pixel widths to scaled outline widths
- * ->bogus_mode -- ignore plaid data if TRUE
- */
-
-{
-fix15 irot;
-fix15 iobl;
-fix15 x_trans_type;
-fix15 y_trans_type;
-fix31 xx_mult;
-fix31 xy_mult;
-fix31 yx_mult;
-fix31 yy_mult;
-real sinrot, cosrot, tanobl;
-real x_distortion;
-real pixperem_h;
-real pixperem_v;
-real point_size_x;
-real point_size_y;
-real res_hor;
-real res_ver;
-fix15 mode;
-
-specsarg.pfont = pspecs->pfont;
-
-irot = floor(pspecs->rot_angle + 0.5);
-iobl = floor(pspecs->obl_angle + 0.5);
-if (iobl > 85)
- iobl = 85;
-if (iobl < -85)
- iobl = -85;
-if ((irot % 90) == 0)
- {
- x_trans_type = y_trans_type = irot / 90 & 0x0003;
- if (iobl != 0)
- {
- if (x_trans_type & 0x01)
- y_trans_type = 4;
- else
- x_trans_type = 4;
- }
- }
-else if (((irot + iobl) % 90) == 0)
- {
- x_trans_type = y_trans_type = (irot + iobl) / 90 & 0x0003;
- if (iobl != 0)
- {
- if (x_trans_type & 0x01)
- x_trans_type = 4;
- else
- y_trans_type = 4;
- }
- }
-else
- {
- x_trans_type = y_trans_type = 4;
- }
-
-point_size_x = pspecs->point_size_x;
-point_size_y = pspecs->point_size_y;
-res_hor = pspecs->res_hor;
-res_ver = pspecs->res_ver;
-
-switch (x_trans_type)
- {
-case 0:
- xx_mult = make_mult(point_size_x, res_hor);
- xy_mult = 0;
- break;
-
-case 1:
- xx_mult = 0;
- xy_mult = make_mult(point_size_y, res_hor);
- break;
-
-case 2:
- xx_mult = -make_mult(point_size_x, res_hor);
- xy_mult = 0;
- break;
-
-case 3:
- xx_mult = 0;
- xy_mult = -make_mult(point_size_y, res_hor);
- break;
-
-default:
- sinrot = sin((real)irot * PI / 180.);
- cosrot = cos((real)irot * PI / 180.);
- tanobl = tan((real)iobl * PI / 180.);
- x_distortion = point_size_x / point_size_y;
- pixperem_h = point_size_y * res_hor / (real)PTPERINCH; /* this is NOT a bug */
- xx_mult = floor(cosrot * x_distortion * pixperem_h * 65536.0 + 0.5);
- xy_mult = floor((sinrot + cosrot * tanobl) * pixperem_h * 65536.0 + 0.5);
- break;
- }
-
-switch (y_trans_type)
- {
-case 0:
- yx_mult = 0;
- yy_mult = make_mult(point_size_y, res_ver);
- break;
-
-case 1:
- yx_mult = -make_mult(point_size_x, res_hor);
- yy_mult = 0;
- break;
-
-case 2:
- yx_mult = 0;
- yy_mult = -make_mult(point_size_y, res_ver);
- break;
-
-case 3:
- yx_mult = make_mult(point_size_x, res_ver);
- yy_mult = 0;
- break;
-
-default:
- sinrot = sin((real)irot * PI / 180.);
- cosrot = cos((real)irot * PI / 180.);
- tanobl = tan((real)iobl * PI / 180.);
- x_distortion = point_size_x / point_size_y;
- pixperem_v = point_size_y * res_ver / (real)PTPERINCH;
- yx_mult = floor(-sinrot * x_distortion * pixperem_v * 65536.0 + 0.5);
- yy_mult = floor((cosrot - sinrot * tanobl) * pixperem_v * 65536.0 + 0.5);
- break;
- }
-
-specsarg.xxmult = xx_mult;
-specsarg.xymult = xy_mult;
-specsarg.xoffset = 0;
-specsarg.yxmult = yx_mult;
-specsarg.yymult = yy_mult;
-specsarg.yoffset = 0;
-specsarg.out_info = 0;
-
-/* Select processing mode */
-switch (pspecs->mode)
- {
-case 1:
- if (pspecs->whitewrite) /* White-write requested? */
- {
- mode = 1;
- }
- else
- {
- mode = 0;
- }
- break;
-
-case 2:
- mode = 2;
- break;
-
-default:
- mode = pspecs->mode;
- break;
- }
-
-if (pspecs->bogus_mode) /* Linear transformation requested? */
- {
- mode |= BIT4; /* Set linear tranformation flag */
- }
-
-if (pspecs->import_widths) /* Imported widths requested? */
- {
- mode |= BIT6; /* Set imported width flag */
- }
-
-if (pspecs->clip.left) /* Clip left requested? */
- {
- mode |= BIT8; /* Set clip left flag */
- }
-
-if (pspecs->clip.right) /* Clip right requested? */
- {
- mode |= BIT9; /* Set clip right flag */
- }
-
-if (pspecs->clip.top) /* Clip top requested? */
- {
- mode |= BIT10; /* Set clip top flag */
- }
-
-if (pspecs->clip.bottom) /* Clip bottom requested? */
- {
- mode |= BIT11; /* Set clip bottom flag */
- }
-
-if (pspecs->squeeze.left) /* Squeeze left requested? */
- {
- mode |= BIT12; /* Set squeeze left flag */
- }
-
-if (pspecs->squeeze.right) /* Squeeze right requested? */
- {
- mode |= BIT13; /* Set squeeze right flag */
- }
-
-if (pspecs->squeeze.top) /* Squeeze top requested? */
- {
- mode |= BIT14; /* Set squeeze top flag */
- }
-
-if (pspecs->squeeze.bottom) /* Squeeze bottom requested? */
- {
- mode |= BIT15; /* Set squeeze bottom flag */
- }
-
-specsarg.flags = mode;
-
-sp_set_specs(&specsarg);
-}
-
-FUNCTION static fix31 make_mult(point_size, resolution)
-real point_size;
-real resolution;
-{
-real ms_factor;
-
-return (fix31)floor((point_size * resolution * 65536.0) / (real)PTPERINCH + 0.5);
-}
-
-FUNCTION bool fw_make_char(char_index)
-ufix16 char_index;
-{
-return sp_make_char(char_index);
-}
-
-FUNCTION buff_t *sp_load_char_data(file_offset, no_bytes, cb_offset)
-fix31 file_offset;
-fix15 no_bytes;
-fix15 cb_offset;
-/*
- * Called by Speedo character generator to request that character
- * data be loaded from the font file.
- * This is a dummy function that assumes that the entire font has
- * been loaded.
- */
-{
-#if DEBUG
-printf("load_char_data(%d, %d, %d)\n", file_offset, no_bytes, char_offset);
-#endif
-char_data.org = pfont->org + file_offset;
-char_data.no_bytes = no_bytes;
-return &char_data;
-}
-
-FUNCTION void sp_report_error(n)
-fix15 n; /* Error identification number */
-/*
- * Called by Speedo character generator to report an error.
- */
-{
-switch(n)
- {
-case 1:
- printf("Insufficient font data loaded\n");
- break;
-
-case 3:
- printf("Transformation matrix out of range\n");
- break;
-
-case 4:
- printf("Font format error\n");
- break;
-
-case 5:
- printf("Requested specs not compatible with output module\n");
- break;
-
-case 7:
- printf("Intelligent transformation requested but not supported\n");
- break;
-
-case 8:
- printf("Unsupported output mode requested\n");
- break;
-
-case 9:
- printf("Extended font loaded but only compact fonts supported\n");
- break;
-
-case 10:
- printf("Font specs not set prior to use of font\n");
- break;
-
-case 12:
- printf("Character data not available()\n");
- break;
-
-case 13:
- printf("Track kerning data not available()\n");
- break;
-
-case 14:
- printf("Pair kerning data not available()\n");
- break;
-
-default:
- printf("report_error(%d)\n", n);
- break;
- }
-}
-
-
-
-FUNCTION void sp_open_bitmap(sw_x, sw_y, xorg, yorg, xsize, ysize)
-fix31 sw_x; /* X component of escapement vector */
-fix31 sw_y; /* Y component of escapement vector */
-fix31 xorg; /* X origin */
-fix31 yorg; /* Y origin */
-fix15 xsize; /* width of bitmap */
-fix15 ysize; /* height of bitmap */
-/*
- * Called by Speedo character generator to initialize a buffer prior
- * to receiving bitmap data.
- */
-{
-
-fix15 xmin,xmax,ymin,ymax;
-
-#if DEBUG
-printf("sp_open_bitmap:\n");
-printf(" X component of set width vector = %3.1f\n", (real)sw_x / 65536.0);
-printf(" Y component of set width vector = %3.1f\n", (real)sw_y / 65536.0);
-printf(" Bounding box is (%d, %d, %d, %d)\n", xmin, ymin, xmax, ymax);
-#endif
-
-xmin = xorg >> 16;
-ymin = yorg >> 16;
-xmax = xmin + xsize;
-ymax = ymin + ysize;
-
-set_width_x = ((sw_x >> 15) + 1) >> 1;
-open_bitmap(set_width_x, xmin, xmax, ymin, ymax);
-}
-
-FUNCTION void sp_set_bitmap_bits(y, x1, x2)
-fix15 y, x1, x2;
-/*
- * Called by Speedo character generator to write one row of pixels
- * into the generated bitmap character.
- */
-{
-#if DEBUG
-printf("set_bitmap_bits(%d, %d, %d)\n", y, x1, x2);
-#endif
-
-set_bitmap_bits(y, x1, x2);
-}
-
-FUNCTION void sp_close_bitmap()
-/*
- * Called by Speedo character generator to indicate all bitmap data
- * has been generated.
- */
-{
-#if DEBUG
-printf("close_bitmap()\n");
-#endif
-
-close_bitmap();
-}
-
-FUNCTION void sp_open_outline(sw_x, sw_y, xmin, xmax, ymin, ymax)
-fix31 sw_x; /* X component of escapement vector */
-fix31 sw_y; /* Y component of escapement vector */
-fix31 xmin; /* Minimum X value in outline */
-fix31 xmax; /* Maximum X value in outline */
-fix31 ymin; /* Minimum Y value in outline */
-fix31 ymax; /* Maximum Y value in outline */
-/*
- * Called by Speedo character generator to initialize prior to
- * outputting scaled outline data.
- */
-{
-#if DEBUG
-printf("open_outline(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f)\n",
- (real)sw_x / 65536.0, (real)sw_y / 65536.0,
- (real)xmin / 65536.0, (real)xmax / 65536.0, (real)ymin / 65536.0, (real)ymax / 65536.0);
-#endif
-
-set_width_x = ((sw_x >> 15) + 1) >> 1;
-open_outline(set_width_x);
-}
-
-FUNCTION void sp_start_new_char()
-/*
- * Called by Speedo character generator to initialize prior to
- * outputting scaled outline data for a sub-character in a compound
- * character.
- */
-{
-#if DEBUG
-printf("start_new_char()\n");
-#endif
-
-start_new_char();
-}
-
-FUNCTION void sp_start_contour(x, y, outside)
-fix31 x; /* X coordinate of start point in 1/65536 pixels */
-fix31 y; /* Y coordinate of start point in 1/65536 pixels */
-boolean outside; /* TRUE if curve encloses ink (Counter-clockwise) */
-/*
- * Called by Speedo character generator at the start of each contour
- * in the outline data of the character.
- */
-{
-real realx, realy;
-
-realx = (real)x / 65536.0;
-realy = (real)y / 65536.0;
-
-#if DEBUG
-printf("start_curve(%3.1f, %3.1f, %s)\n",
- realx, realy,
- outside? "outside": "inside");
-#endif
-
-start_curve(realx, realy, outside);
-}
-
-FUNCTION void sp_curve_to(x1, y1, x2, y2, x3, y3)
-fix31 x1; /* X coordinate of first control point in 1/65536 pixels */
-fix31 y1; /* Y coordinate of first control point in 1/65536 pixels */
-fix31 x2; /* X coordinate of second control point in 1/65536 pixels */
-fix31 y2; /* Y coordinate of second control point in 1/65536 pixels */
-fix31 x3; /* X coordinate of curve end point in 1/65536 pixels */
-fix31 y3; /* Y coordinate of curve end point in 1/65536 pixels */
-/*
- * Called by Speedo character generator once for each curve in the
- * scaled outline data of the character. This function is only called if curve
- * output is enabled in the set_specs() call.
- */
-{
-#if DEBUG
-printf("curve_to(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f)\n",
- (real)x1 / 65536.0, (real)y1 / 65536.0,
- (real)x2 / 65536.0, (real)y2 / 65536.0,
- (real)x3 / 65536.0, (real)y3 / 65536.0);
-#endif
-}
-
-FUNCTION void sp_line_to(x, y)
-fix31 x; /* X coordinate of vector end point in 1/65536 pixels */
-fix31 y; /* Y coordinate of vector end point in 1/65536 pixels */
-/*
- * Called by Speedo character generator onece for each vector in the
- * scaled outline data for the character. This include curve data that has
- * been sub-divided into vectors if curve output has not been enabled
- * in the set_specs() call.
- */
-{
-real realx, realy;
-
-realx = (real)x / 65536.0;
-realy = (real)y / 65536.0;
-
-#if DEBUG
-printf("line_to(%3.1f, %3.1f)\n",
- realx, realy);
-#endif
-
-line_to(realx, realy);
-}
-
-FUNCTION void sp_close_contour()
-/*
- * Called by Speedo character generator at the end of each contour
- * in the outline data of the character.
- */
-{
-#if DEBUG
-printf("close_curve()\n");
-#endif
-
-close_curve();
-}
-
-FUNCTION void sp_close_outline()
-/*
- * Called by Speedo character generator at the end of output of the
- * scaled outline of the character.
- */
-{
-#if DEBUG
-printf("close_outline()\n");
-#endif
-
-close_outline(set_width_x);
-}
-
diff --git a/nx-X11/lib/font/Speedo/keys.h b/nx-X11/lib/font/Speedo/keys.h
deleted file mode 100644
index dd9d0bff7..000000000
--- a/nx-X11/lib/font/Speedo/keys.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* $Xorg: keys.h,v 1.3 2000/08/17 19:46:25 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-
-
-/***** DECRYPTION KEY CONSTANTS (PC Platform) *****/
-
-#define CUS0 432 /* Customer number */
-
-#define KEY0 0 /* Decryption key 0 */
-#define KEY1 72 /* Decryption key 1 */
-#define KEY2 123 /* Decryption key 2 */
-#define KEY3 1 /* Decryption key 3 */
-#define KEY4 222 /* Decryption key 4 */
-#define KEY5 194 /* Decryption key 5 */
-#define KEY6 113 /* Decryption key 6 */
-#define KEY7 119 /* Decryption key 7 */
-#define KEY8 52 /* Decryption key 8 */
-
-/***** DECRYPTION KEY CONSTANTS (Sample) *****/
-
-#define XSAMPLEFONTS
-
-#define XCUS0 0 /* Customer number */
-
-#define XKEY0 0 /* Decryption key 0 */
-#define XKEY1 0 /* Decryption key 1 */
-#define XKEY2 0 /* Decryption key 2 */
-#define XKEY3 0 /* Decryption key 3 */
-#define XKEY4 0 /* Decryption key 4 */
-#define XKEY5 0 /* Decryption key 5 */
-#define XKEY6 0 /* Decryption key 6 */
-#define XKEY7 0 /* Decryption key 7 */
-#define XKEY8 0 /* Decryption key 8 */
-
-
diff --git a/nx-X11/lib/font/Speedo/module/Imakefile b/nx-X11/lib/font/Speedo/module/Imakefile
deleted file mode 100644
index e517707c5..000000000
--- a/nx-X11/lib/font/Speedo/module/Imakefile
+++ /dev/null
@@ -1,47 +0,0 @@
-XCOMM $XFree86: xc/lib/font/Speedo/module/Imakefile,v 1.5 1999/08/14 10:49:18 dawes Exp $
-
-#define IHaveModules
-#include <Server.tmpl>
-
- INCLUDES = -I$(FONTINCSRC) -I../../include -I$(SERVERSRC)/include \
- -I$(XINCLUDESRC) -I../
- HEADERS =
- DEFINES = -DFONTMODULE
-
- SPEEDOSRCS = do_char.c do_trns.c out_bl2d.c out_blk.c speedomod.c \
- out_scrn.c out_util.c reset.c set_spcs.c set_trns.c
- SPEEDOOBJS = do_char.o do_trns.o out_bl2d.o out_blk.o speedomod.o \
- out_scrn.o out_util.o reset.o set_spcs.o set_trns.o
-
- SRCS = spfuncs.c spfile.c spinfo.c sperr.c spfont.c spglyph.c \
- spencode.c bics-unicode.c \
- $(SPEEDOSRCS)
- OBJS = spfuncs.o spfile.o spinfo.o sperr.o spfont.o spglyph.o \
- spencode.o bics-unicode.o \
- $(SPEEDOOBJS)
-
-LinkSourceFile(bics-unicode.c,..)
-LinkSourceFile(do_char.c,..)
-LinkSourceFile(do_trns.c,..)
-LinkSourceFile(out_bl2d.c,..)
-LinkSourceFile(out_blk.c,..)
-LinkSourceFile(out_scrn.c,..)
-LinkSourceFile(out_util.c,..)
-LinkSourceFile(reset.c,..)
-LinkSourceFile(set_spcs.c,..)
-LinkSourceFile(set_trns.c,..)
-LinkSourceFile(spfuncs.c,..)
-LinkSourceFile(spfile.c,..)
-LinkSourceFile(spinfo.c,..)
-LinkSourceFile(sperr.c,..)
-LinkSourceFile(spfont.c,..)
-LinkSourceFile(spglyph.c,..)
-LinkSourceFile(spencode.c,..)
-
-ModuleObjectRule()
-LibraryModuleTarget(speedo,$(OBJS))
-InstallLibraryModule(speedo,$(MODULEDIR),fonts)
-
-DependTarget()
-
-InstallDriverSDKLibraryModule(speedo,$(DRIVERSDKMODULEDIR),fonts)
diff --git a/nx-X11/lib/font/Speedo/module/speedomod.c b/nx-X11/lib/font/Speedo/module/speedomod.c
deleted file mode 100644
index 94820fe44..000000000
--- a/nx-X11/lib/font/Speedo/module/speedomod.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 1998 The XFree86 Project, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of the XFree86 Project shall
- * not be used in advertising or otherwise to promote the sale, use or other
- * dealings in this Software without prior written authorization from the
- * XFree86 Project.
- */
-/* $XFree86: xc/lib/font/Speedo/module/speedomod.c,v 1.8 2001/09/04 13:49:16 dawes Exp $ */
-
-#include "misc.h"
-
-#include <X11/fonts/fontmod.h>
-#include "xf86Module.h"
-
-static MODULESETUPPROTO(speedoSetup);
-
- /*
- * This is the module data function that is accessed when loading
- * libspeedo as a module.
- */
-
-static XF86ModuleVersionInfo VersRec =
-{
- "speedo",
- MODULEVENDORSTRING,
- MODINFOSTRING1,
- MODINFOSTRING2,
- XORG_VERSION_CURRENT,
- 1, 0, 1,
- ABI_CLASS_FONT, /* A font module */
- ABI_FONT_VERSION,
- MOD_CLASS_FONT,
- {0,0,0,0} /* signature, to be patched into the file by a tool */
-};
-
-XF86ModuleData speedoModuleData = { &VersRec, speedoSetup, NULL };
-
-extern void SpeedoRegisterFontFileFunctions(void);
-
-FontModule speedoModule = {
- SpeedoRegisterFontFileFunctions,
- "Speedo",
- NULL
-};
-
-static pointer
-speedoSetup(pointer module, pointer opts, int *errmaj, int *errmin)
-{
- speedoModule.module = module;
- LoadFont(&speedoModule);
-
- /* Need a non-NULL return */
- return (pointer)1;
-}
diff --git a/nx-X11/lib/font/Speedo/nsample.c b/nx-X11/lib/font/Speedo/nsample.c
deleted file mode 100644
index a90367f0a..000000000
--- a/nx-X11/lib/font/Speedo/nsample.c
+++ /dev/null
@@ -1,745 +0,0 @@
-/* $Xorg: nsample.c,v 1.3 2000/08/17 19:46:26 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-
-
-/*************************** N S A M P L E . C *******************************
- * *
- * SPEEDO CHARACTER GENERATOR TEST MODULE *
- * *
- * This is an illustration of what external resources are required to *
- * load a Speedo outline and use the Speedo character generator to generate *
- * bitmaps or scaled outlines according to the desired specification. * *
- * *
- * This program loads a Speedo outline, defines a set of character *
- * generation specifications, generates bitmap (or outline) data for each *
- * character in the font and prints them on the standard output. *
- * *
- * If the font buffer is too small to hold the entire font, the first *
- * part of the font is loaded. Character data is then loaded dynamically *
- * as required. *
- * *
- ****************************************************************************/
-
-#include <stdio.h>
-#if PROTOS_AVAIL
-#include <stddef.h>
-#include <malloc.h>
-#include <stdlib.h>
-void main(int argc,char *argv[]);
-#else
-void* malloc();
-#endif
-
-#include "speedo.h" /* General definition for make_bmap */
-#include "keys.h" /* Font decryption keys */
-
-#define DEBUG 0
-
-#if DEBUG
-#define SHOW(X) printf("X = %d\n", X)
-#else
-#define SHOW(X)
-#endif
-
-#define MAX_BITS 256 /* Max line length of generated bitmap */
-
-/***** GLOBAL FUNCTIONS *****/
-
-/***** EXTERNAL FUNCTIONS *****/
-
-/***** STATIC FUNCTIONS *****/
-
-#if PROTOS_AVAIL
-fix31 read_4b(ufix8 FONTFAR *ptr);
-fix15 read_2b(ufix8 FONTFAR *ptr);
-#else
-fix31 read_4b();
-fix15 read_2b();
-#endif
-/***** STATIC VARIABLES *****/
-static char pathname[100]; /* Name of font file to be output */
-static ufix8 FONTFAR *font_buffer; /* Pointer to allocated Font buffer */
-static ufix8 FONTFAR *char_buffer; /* Pointer to allocate Character buffer */
-static buff_t font; /* Buffer descriptor for font data */
-#if INCL_LCD
-static buff_t char_data; /* Buffer descriptor for character data */
-#endif
-static FILE *fdescr; /* Speedo outline file descriptor */
-static ufix16 char_index; /* Index of character to be generated */
-static ufix16 char_id; /* Character ID */
-static ufix16 minchrsz; /* minimum character buffer size */
-
-static ufix8 key[] =
- {
- KEY0,
- KEY1,
- KEY2,
- KEY3,
- KEY4,
- KEY5,
- KEY6,
- KEY7,
- KEY8
- }; /* Font decryption key */
-
-static fix15 raswid; /* raster width */
-static fix15 rashgt; /* raster height */
-static fix15 offhor; /* horizontal offset from left edge of emsquare */
-static fix15 offver; /* vertical offset from baseline */
-static fix15 set_width; /* character set width */
-static fix15 y_cur; /* Current y value being generated and printed */
-static char line_of_bits[2 * MAX_BITS + 1]; /* Buffer for row of generated bits */
-
-#if INCL_MULTIDEV
-#if INCL_BLACK || INCL_SCREEN || INCL_2D
-bitmap_t bfuncs = { sp_open_bitmap, sp_set_bitmap_bits, sp_close_bitmap };
-#endif
-#if INCL_OUTLINE
-outline_t ofuncs = { sp_open_outline, sp_start_new_char, sp_start_contour, sp_curve_to,
- sp_line_to, sp_close_contour, sp_close_outline };
-#endif
-#endif
-
-
-ufix8 temp[16]; /* temp buffer for first 16 bytes of font */
-
-
-FUNCTION void main(argc,argv)
-int argc;
-char *argv[];
-{
-ufix16 bytes_read; /* Number of bytes read from font file */
-specs_t specs; /* Bundle of character generation specs */
-int first_char_index; /* Index of first character in font */
-int no_layout_chars; /* number of characters in layout */
-ufix32 i;
-ufix32 minbufsz; /* minimum font buffer size to allocate */
-ufix16 cust_no;
-ufix8 FONTFAR *byte_ptr;
-
-#if REENTRANT_ALLOC
-SPEEDO_GLOBALS* sp_global_ptr;
-#endif
-
-
-if (argc != 2)
- {
- fprintf(stderr,"Usage: nsample {fontfile}\n\n");
- exit (1);
- }
-
-sprintf(pathname, argv[1]);
-
-/* Load Speedo outline file */
-fdescr = fopen (pathname, "rb");
-if (fdescr == NULL)
- {
- printf("****** Cannot open file %s\n", pathname);
- return;
- }
-
-/* get minimum font buffer size - read first 16 bytes to get the minimum
- size field from the header, then allocate buffer dynamically */
-
-bytes_read = fread(temp, sizeof(ufix8), 16, fdescr);
-
-if (bytes_read != 16)
- {
- printf("****** Error on reading %s: %x\n", pathname, bytes_read);
- fclose(fdescr);
- return;
- }
-#if INCL_LCD
-minbufsz = (ufix32)read_4b(temp+FH_FBFSZ);
-#else
-minbufsz = (ufix32)read_4b(temp+FH_FNTSZ);
-if (minbufsz >= 0x10000)
- {
- printf("****** Cannot process fonts greater than 64K - use dynamic character loading configuration option\n");
- fclose(fdescr);
- return;
- }
-#endif
-
-#if (defined(M_I86SM) || defined(M_I86MM))
-font_buffer = (ufix8 FONTFAR *)_fmalloc((ufix16)minbufsz);
-#else
-font_buffer = (ufix8 *)malloc((ufix16)minbufsz);
-#endif
-
-if (font_buffer == NULL)
- {
- printf("****** Unable to allocate memory for font buffer\n");
- fclose(fdescr);
- return;
- }
-
-#if DEBUG
-printf("Loading font file %s\n", pathname);
-#endif
-
-fseek(fdescr, (ufix32)0, 0);
-#if (defined(M_I86SM) || (defined(M_I86MM)))
-byte_ptr = font_buffer;
-for (i=0; i< minbufsz; i++){
- int ch;
- ch = getc(fdescr);
- if (ch == EOF)
- {printf ("Premature EOF in reading font buffer, %ld bytes read\n",i);
- exit(2);}
- *byte_ptr=(ufix8)ch;
- byte_ptr++;
- }
-bytes_read = i;
-#else
-bytes_read = fread((ufix8 *)font_buffer, sizeof(ufix8), (ufix16)minbufsz, fdescr);
-if (bytes_read == 0)
- {
- printf("****** Error on reading %s: %x\n", pathname, bytes_read);
- fclose(fdescr);
- return;
- }
-#endif
-
-#if INCL_LCD
-/* now allocate minimum character buffer */
-
-minchrsz = read_2b(font_buffer+FH_CBFSZ);
-#if (defined(M_I86SM) || (defined(M_I86MM)))
-char_buffer = (ufix8 FONTFAR *)_fmalloc(minchrsz);
-#else
-char_buffer = (ufix8*)malloc(minchrsz);
-#endif
-
-if (char_buffer == NULL)
- {
- printf("****** Unable to allocate memory for character buffer\n");
- fclose(fdescr);
- return;
- }
-#endif
-
-#if DYNAMIC_ALLOC || REENTRANT_ALLOC
- sp_global_ptr = (SPEEDO_GLOBALS *)malloc(sizeof(SPEEDO_GLOBALS));
- memset(sp_global_ptr,(ufix8)0,sizeof(SPEEDO_GLOBALS));
-#endif
-
-
-/* Initialization */
-#if REENTRANT_ALLOC
-sp_reset(sp_global_ptr); /* Reset Speedo character generator */
-#else
-sp_reset(); /* Reset Speedo character generator */
-#endif
-
-font.org = font_buffer;
-font.no_bytes = bytes_read;
-
-#if REENTRANT_ALLOC
-if ((cust_no=sp_get_cust_no(sp_global_ptr,font)) != CUS0 && /* NOT STANDARD ENCRYPTION */
-#else
-if ((cust_no=sp_get_cust_no(font)) != CUS0 && /* NOT STANDARD ENCRYPTION */
-#endif
- cust_no != 0)
- {
-#if REENTRANT_ALLOC
- printf("Unable to use fonts for customer number %d\n",
- sp_get_cust_no(sp_global_ptr(font)));
-#else
- printf("Unable to use fonts for customer number %d\n",
- sp_get_cust_no(font));
-#endif
- fclose(fdescr);
- return;
- }
-
-#if INCL_KEYS
-#if REENTRANT_ALLOC
-sp_set_key(sp_global_ptr,key); /* Set decryption key */
-#else
-sp_set_key(key); /* Set decryption key */
-#endif
-#endif
-
-#if INCL_MULTIDEV
-#if INCL_BLACK || INCL_SCREEN || INCL_2D
-#if REENTRANT_ALLOC
-sp_set_bitmap_device(sp_global_ptr,&bfuncs,sizeof(bfuncs)); /* Set decryption key */
-#else
-sp_set_bitmap_device(&bfuncs,sizeof(bfuncs)); /* Set decryption key */
-#endif
-#endif
-#if INCL_OUTLINE
-#if REENTRANT_ALLOC
-sp_set_outline_device(sp_global_ptr,&ofuncs,sizeof(ofuncs)); /* Set decryption key */
-#else
-sp_set_outline_device(&ofuncs,sizeof(ofuncs)); /* Set decryption key */
-#endif
-#endif
-#endif
-
-first_char_index = read_2b(font_buffer + FH_FCHRF);
-no_layout_chars = read_2b(font_buffer + FH_NCHRL);
-
-/* Set specifications for character to be generated */
-specs.pfont = &font; /* Pointer to Speedo outline structure */
-specs.xxmult = 25L << 16; /* Coeff of X to calculate X pixels */
-specs.xymult = 0L << 16; /* Coeff of Y to calculate X pixels */
-specs.xoffset = 0L << 16; /* Position of X origin */
-specs.yxmult = 0L << 16; /* Coeff of X to calculate Y pixels */
-specs.yymult = 25L << 16; /* Coeff of Y to calculate Y pixels */
-specs.yoffset = 0L << 16; /* Position of Y origin */
-specs.flags = 0; /* Mode flags */
-specs.out_info = NULL;
-
-
-#if REENTRANT_ALLOC
-if (!sp_set_specs(sp_global_ptr,&specs)) /* Set character generation specifications */
-#else
-if (!sp_set_specs(&specs)) /* Set character generation specifications */
-#endif
- {
- printf("****** Cannot set requested specs\n");
- }
-else
- {
- for (i = 0; i < no_layout_chars; i++) /* For each character in font */
- {
- char_index = i + first_char_index;
-#if REENTRANT_ALLOC
- char_id = sp_get_char_id(sp_global_ptr,char_index);
-#else
- char_id = sp_get_char_id(char_index);
-#endif
- if (char_id != 0)
- {
-#if REENTRANT_ALLOC
- if (!sp_make_char(sp_global_ptr,char_index))
-#else
- if (!sp_make_char(char_index))
-#endif
- {
- printf("****** Cannot generate character %d\n", char_index);
- }
- }
- }
- }
-
-fclose(fdescr);
-}
-
-#if INCL_LCD
-#if REENTRANT_ALLOC
-FUNCTION buff_t *sp_load_char_data(sp_global_ptr, file_offset, no_bytes, cb_offset)
-SPEEDO_GLOBALS *sp_global_ptr;
-#else
-FUNCTION buff_t *sp_load_char_data(file_offset, no_bytes, cb_offset)
-#endif
-fix31 file_offset; /* Offset in bytes from the start of the font file */
-fix15 no_bytes; /* Number of bytes to be loaded */
-fix15 cb_offset; /* Offset in bytes from start of char buffer */
-/*
- * Called by Speedo character generator to request that character
- * data be loaded from the font file into a character data buffer.
- * The character buffer offset is zero for all characters except elements
- * of compound characters. If a single buffer is allocated for character
- * data, cb_offset ensures that sub-character data is loaded after the
- * top-level compound character.
- * Returns a pointer to a buffer descriptor.
- */
-{
-int bytes_read;
-
-#if DEBUG
-printf("\nCharacter data(%d, %d, %d) requested\n", file_offset, no_bytes, cb_offset);
-#endif
-if (fseek(fdescr, (long)file_offset, (int)0) != 0)
- {
- printf("****** Error in seeking character\n");
- fclose(fdescr);
- exit(1);
- }
-
-if ((no_bytes + cb_offset) > minchrsz)
- {
- printf("****** Character buffer overflow\n");
- fclose(fdescr);
- exit(3);
- }
-
-bytes_read = fread((char_buffer + cb_offset), sizeof(ufix8), no_bytes, fdescr);
-if (bytes_read != no_bytes)
- {
- printf("****** Error on reading character data\n");
- fclose(fdescr);
- exit(2);
- }
-
-#if DEBUG
-printf("Character data loaded\n");
-#endif
-
-char_data.org = (ufix8 FONTFAR *)char_buffer + cb_offset;
-char_data.no_bytes = no_bytes;
-return &char_data;
-}
-#endif
-
-
-#if REENTRANT_ALLOC
-FUNCTION void sp_report_error(sp_global_ptr,n)
-SPEEDO_GLOBALS *sp_global_ptr;
-#else
-FUNCTION void sp_report_error(n)
-#endif
-fix15 n; /* Error identification number */
-/*
- * Called by Speedo character generator to report an error.
- *
- * Since character data not available is one of those errors
- * that happens many times, don't report it to user
- */
-{
-
-switch(n)
- {
-case 1:
- printf("Insufficient font data loaded\n");
- break;
-
-case 3:
- printf("Transformation matrix out of range\n");
- break;
-
-case 4:
- printf("Font format error\n");
- break;
-
-case 5:
- printf("Requested specs not compatible with output module\n");
- break;
-
-case 7:
- printf("Intelligent transformation requested but not supported\n");
- break;
-
-case 8:
- printf("Unsupported output mode requested\n");
- break;
-
-case 9:
- printf("Extended font loaded but only compact fonts supported\n");
- break;
-
-case 10:
- printf("Font specs not set prior to use of font\n");
- break;
-
-case 12:
- break;
-
-case 13:
- printf("Track kerning data not available()\n");
- break;
-
-case 14:
- printf("Pair kerning data not available()\n");
- break;
-
-default:
- printf("report_error(%d)\n", n);
- break;
- }
-}
-
-#if REENTRANT_ALLOC
-FUNCTION void sp_open_bitmap(sp_global_ptr, x_set_width, y_set_width, xorg, yorg, xsize, ysize)
-SPEEDO_GLOBALS *sp_global_ptr;
-#else
-FUNCTION void sp_open_bitmap(x_set_width, y_set_width, xorg, yorg, xsize, ysize)
-#endif
-fix31 x_set_width;
-fix31 y_set_width; /* Set width vector */
-fix31 xorg; /* Pixel boundary at left extent of bitmap character */
-fix31 yorg; /* Pixel boundary at right extent of bitmap character */
-fix15 xsize; /* Pixel boundary of bottom extent of bitmap character */
-fix15 ysize; /* Pixel boundary of top extent of bitmap character */
-/*
- * Called by Speedo character generator to initialize a buffer prior
- * to receiving bitmap data.
- */
-{
-fix15 i;
-
-#if DEBUG
-printf("open_bitmap(%3.1f, %3.1f, %3.1f, %3.1f, %d, %d)\n",
- (real)x_set_width / 65536.0, (real)y_set_width / 65536.0,
- (real)xorg / 65536.0, (real)yorg / 65536.0, (int)xsize, (int)ysize);
-#endif
-raswid = xsize;
-rashgt = ysize;
-offhor = (fix15)(xorg >> 16);
-offver = (fix15)(yorg >> 16);
-
-if (raswid > MAX_BITS)
- raswid = MAX_BITS;
-
-printf("\nCharacter index = %d, ID = %d\n", char_index, char_id);
-printf("set width = %3.1f, %3.1f\n", (real)x_set_width / 65536.0, (real)y_set_width / 65536.0);
-printf("X offset = %d\n", offhor);
-printf("Y offset = %d\n\n", offver);
-for (i = 0; i < raswid; i++)
- {
- line_of_bits[i << 1] = '.';
- line_of_bits[(i << 1) + 1] = ' ';
- }
-line_of_bits[raswid << 1] = '\0';
-y_cur = 0;
-}
-
-#if REENTRANT_ALLOC
-FUNCTION void sp_set_bitmap_bits (sp_global_ptr, y, xbit1, xbit2)
-SPEEDO_GLOBALS *sp_global_ptr;
-#else
-FUNCTION void sp_set_bitmap_bits (y, xbit1, xbit2)
-#endif
- fix15 y; /* Scan line (0 = first row above baseline) */
- fix15 xbit1; /* Pixel boundary where run starts */
- fix15 xbit2; /* Pixel boundary where run ends */
-
-/*
- * Called by Speedo character generator to write one row of pixels
- * into the generated bitmap character.
- */
-
-{
-fix15 i;
-
-#if DEBUG
-printf("set_bitmap_bits(%d, %d, %d)\n", (int)y, (int)xbit1, (int)xbit2);
-#endif
-/* Clip runs beyond end of buffer */
-if (xbit1 > MAX_BITS)
- xbit1 = MAX_BITS;
-
-if (xbit2 > MAX_BITS)
- xbit2 = MAX_BITS;
-
-/* Output backlog lines if any */
-while (y_cur != y)
- {
- printf(" %s\n", line_of_bits);
- for (i = 0; i < raswid; i++)
- {
- line_of_bits[i << 1] = '.';
- }
- y_cur++;
- }
-
-/* Add bits to current line */
-for (i = xbit1; i < xbit2; i++)
- {
- line_of_bits[i << 1] = 'X';
- }
-}
-
-#if REENTRANT_ALLOC
-FUNCTION void sp_close_bitmap(sp_global_ptr)
-SPEEDO_GLOBALS *sp_global_ptr;
-#else
-FUNCTION void sp_close_bitmap()
-#endif
-/*
- * Called by Speedo character generator to indicate all bitmap data
- * has been generated.
- */
-{
-#if DEBUG
-printf("close_bitmap()\n");
-#endif
-printf(" %s\n", line_of_bits);
-}
-
-#if INCL_OUTLINE
-#if REENTRANT_ALLOC
-FUNCTION void sp_open_outline(sp_global_ptr, x_set_width, y_set_width, xmin, xmax, ymin, ymax)
-SPEEDO_GLOBALS *sp_global_ptr;
-#else
-FUNCTION void sp_open_outline(x_set_width, y_set_width, xmin, xmax, ymin, ymax)
-#endif
-fix31 x_set_width;
-fix31 y_set_width; /* Transformed escapement vector */
-fix31 xmin; /* Minimum X value in outline */
-fix31 xmax; /* Maximum X value in outline */
-fix31 ymin; /* Minimum Y value in outline */
-fix31 ymax; /* Maximum Y value in outline */
-/*
- * Called by Speedo character generator to initialize prior to
- * outputting scaled outline data.
- */
-{
-printf("\nopen_outline(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f)\n",
- (real)x_set_width / 65536.0, (real)y_set_width / 65536.0,
- (real)xmin / 65536.0, (real)xmax / 65536.0, (real)ymin / 65536.0, (real)ymax / 65536.0);
-}
-
-
-#if REENTRANT_ALLOC
-FUNCTION void sp_start_new_char(sp_global_ptr)
-SPEEDO_GLOBALS *sp_global_ptr;
-#else
-FUNCTION void sp_start_new_char()
-#endif
-/*
- * Called by Speedo character generator to initialize prior to
- * outputting scaled outline data for a sub-character in a compound
- * character.
- */
-{
-printf("start_new_char()\n");
-}
-
-#if REENTRANT_ALLOC
-FUNCTION void sp_start_contour(sp_global_ptr, x, y, outside)
-SPEEDO_GLOBALS *sp_global_ptr;
-#else
-FUNCTION void sp_start_contour(x, y, outside)
-#endif
-fix31 x; /* X coordinate of start point in 1/65536 pixels */
-fix31 y; /* Y coordinate of start point in 1/65536 pixels */
-boolean outside; /* TRUE if curve encloses ink (Counter-clockwise) */
-/*
- * Called by Speedo character generator at the start of each contour
- * in the outline data of the character.
- */
-{
-printf("start_contour(%3.1f, %3.1f, %s)\n",
- (real)x / 65536.0, (real)y / 65536.0,
- outside? "outside": "inside");
-}
-
-#if REENTRANT_ALLOC
-FUNCTION void sp_curve_to(sp_global_ptr, x1, y1, x2, y2, x3, y3)
-SPEEDO_GLOBALS *sp_global_ptr;
-#else
-FUNCTION void sp_curve_to(x1, y1, x2, y2, x3, y3)
-#endif
-fix31 x1; /* X coordinate of first control point in 1/65536 pixels */
-fix31 y1; /* Y coordinate of first control point in 1/65536 pixels */
-fix31 x2; /* X coordinate of second control point in 1/65536 pixels */
-fix31 y2; /* Y coordinate of second control point in 1/65536 pixels */
-fix31 x3; /* X coordinate of curve end point in 1/65536 pixels */
-fix31 y3; /* Y coordinate of curve end point in 1/65536 pixels */
-/*
- * Called by Speedo character generator onece for each curve in the
- * scaled outline data of the character. This function is only called if curve
- * output is enabled in the set_specs() call.
- */
-{
-printf("curve_to(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f)\n",
- (real)x1 / 65536.0, (real)y1 / 65536.0,
- (real)x2 / 65536.0, (real)y2 / 65536.0,
- (real)x3 / 65536.0, (real)y3 / 65536.0);
-}
-
-#if REENTRANT_ALLOC
-FUNCTION void sp_line_to(sp_global_ptr, x, y)
-SPEEDO_GLOBALS *sp_global_ptr;
-#else
-FUNCTION void sp_line_to(x, y)
-#endif
-fix31 x; /* X coordinate of vector end point in 1/65536 pixels */
-fix31 y; /* Y coordinate of vector end point in 1/65536 pixels */
-/*
- * Called by Speedo character generator onece for each vector in the
- * scaled outline data for the character. This include curve data that has
- * been sub-divided into vectors if curve output has not been enabled
- * in the set_specs() call.
- */
-{
-printf("line_to(%3.1f, %3.1f)\n",
- (real)x / 65536.0, (real)y / 65536.0);
-}
-
-
-#if REENTRANT_ALLOC
-FUNCTION void sp_close_contour(sp_global_ptr)
-SPEEDO_GLOBALS *sp_global_ptr;
-#else
-FUNCTION void sp_close_contour()
-#endif
-/*
- * Called by Speedo character generator at the end of each contour
- * in the outline data of the character.
- */
-{
-printf("close_contour()\n");
-}
-
-#if REENTRANT_ALLOC
-FUNCTION void sp_close_outline(sp_global_ptr)
-SPEEDO_GLOBALS *sp_global_ptr;
-#else
-FUNCTION void sp_close_outline()
-#endif
-/*
- * Called by Speedo character generator at the end of output of the
- * scaled outline of the character.
- */
-{
-printf("close_outline()\n");
-}
-
-#endif
-
-FUNCTION fix15 read_2b(pointer)
-ufix8 FONTFAR *pointer;
-/*
- * Reads 2-byte field from font buffer
- */
-{
-fix15 temp;
-
-temp = *pointer++;
-temp = (temp << 8) + *(pointer);
-return temp;
-}
-
-
- FUNCTION fix31 read_4b(pointer)
-ufix8 FONTFAR *pointer;
-/*
- * Reads 4-byte field from font buffer
- */
-{
-fix31 temp;
-
-temp = *pointer++;
-temp = (temp << 8) + *(pointer++);
-temp = (temp << 8) + *(pointer++);
-temp = (temp << 8) + *(pointer);
-return temp;
-}
-
-
diff --git a/nx-X11/lib/font/Speedo/out_bl2d.c b/nx-X11/lib/font/Speedo/out_bl2d.c
deleted file mode 100644
index 6c38cb30d..000000000
--- a/nx-X11/lib/font/Speedo/out_bl2d.c
+++ /dev/null
@@ -1,772 +0,0 @@
-/* $Xorg: out_bl2d.c,v 1.3 2000/08/17 19:46:26 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/out_bl2d.c,v 1.3 1999/02/07 11:47:14 dawes Exp $ */
-
-/*************************** O U T _ B L 2 D . C *****************************
- * *
- * This is an output module for screen writer using two dimensional scanning *
- ****************************************************************************/
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "spdo_prv.h" /* General definitions for speedo */
-
-#define CLOCKWISE 1
-#define DEBUG 0
-#define ABS(X) ( (X < 0) ? -X : X)
-
-#if DEBUG
-#include <stdio.h>
-#define SHOW(X) printf("X = %d\n", X)
-#else
-#define SHOW(X)
-#endif
-
-/***** GLOBAL VARIABLES *****/
-
-/***** GLOBAL FUNCTIONS *****/
-
-/***** EXTERNAL VARIABLES *****/
-
-/***** EXTERNAL FUNCTIONS *****/
-
-/***** STATIC VARIABLES *****/
-
-/***** STATIC FUNCTIONS *****/
-
-#if INCL_2D
-static void sp_draw_vector_to_2d(PROTO_DECL2 fix15 x0,fix15 y0,fix15 x1,fix15 y1,band_t GLOBALFAR *band);
-static void sp_add_intercept_2d(PROTO_DECL2 fix15 y,fix15 x);
-static void sp_proc_intercepts_2d(PROTO_DECL1);
-#endif
-
-#if INCL_2D
-FUNCTION boolean init_2d(
-GDECL
-specs_t GLOBALFAR *specsarg)
-/*
- * init_out_2d() is called by sp_set_specs() to initialize the output module.
- * Returns TRUE if output module can accept requested specifications.
- * Returns FALSE otherwise.
- */
-{
-
-if (specsarg->flags & CURVES_OUT)
- return FALSE; /* Curves out, clipping not supported */
-
-#if DEBUG
-printf("INIT_OUT__2d()\n");
-#endif
-return TRUE;
-}
-#endif
-
-#if INCL_2D
-FUNCTION boolean begin_char_2d(
-GDECL
-point_t Psw,
-point_t Pmin,
-point_t Pmax)
-/* Called once at the start of the character generation process
- * Initializes intercept table, either calculates pixel maxima or
- * decides that they need to be collected
- */
-{
-#if DEBUG
-printf("BEGIN_CHAR__2d(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f\n",
- (real)Psw.x / (real)sp_globals.onepix, (real)Psw.y / (real)sp_globals.onepix,
- (real)Pmin.x / (real)sp_globals.onepix, (real)Pmin.y / (real)sp_globals.onepix,
- (real)Pmax.x / (real)sp_globals.onepix, (real)Pmax.y / (real)sp_globals.onepix);
-#endif
-/* Convert PIX.FRAC to 16.16 form */
-sp_globals.x_scan_active = TRUE; /* Assume x-scanning from the start */
-
-init_char_out(Psw,Pmin,Pmax);
-return TRUE;
-}
-#endif
-
-
-#if INCL_2D
-FUNCTION void begin_contour_2d(
-GDECL
-point_t P1,
-boolean outside)
-/* Called at the start of each contour
- */
-{
-
-#if DEBUG
-printf("BEGIN_CONTOUR__2d(%3.4f, %3.4f, %s)\n",
- (real)P1.x / (real)sp_globals.onepix,
- (real)P1.y / (real)sp_globals.onepix,
- outside? "outside": "inside");
-#endif
-sp_globals.x0_spxl = P1.x;
-sp_globals.y0_spxl = P1.y;
-}
-#endif
-
-#if INCL_2D
-FUNCTION void line_2d(
-GDECL
-point_t P1)
-/*
- * Called for each vector in the transformed character
- * "draws" vector into intercept table
- */
-{
-
-#if DEBUG
-printf("LINE_0(%3.4f, %3.4f)\n",
- (real)P1.x / (real)sp_globals.onepix,
- (real)P1.y / (real)sp_globals.onepix);
-#endif
-
-if (sp_globals.extents_running)
- {
- if (sp_globals.x0_spxl > sp_globals.bmap_xmax)
- sp_globals.bmap_xmax = sp_globals.x0_spxl;
- if (sp_globals.x0_spxl < sp_globals.bmap_xmin)
- sp_globals.bmap_xmin = sp_globals.x0_spxl;
- if (sp_globals.y0_spxl > sp_globals.bmap_ymax)
- sp_globals.bmap_ymax = sp_globals.y0_spxl;
- if (sp_globals.y0_spxl < sp_globals.bmap_ymin)
- sp_globals.bmap_ymin = sp_globals.y0_spxl;
- }
-
-if (!sp_globals.intercept_oflo)
- {
- sp_draw_vector_to_2d(sp_globals.x0_spxl,
- sp_globals.y0_spxl,
- P1.x,
- P1.y,
- &sp_globals.y_band); /* y-scan */
-
- if (sp_globals.x_scan_active)
- sp_draw_vector_to_2d(sp_globals.y0_spxl,
- sp_globals.x0_spxl,
- P1.y,
- P1.x,
- &sp_globals.x_band); /* x-scan if selected */
- }
-
-sp_globals.x0_spxl = P1.x;
-sp_globals.y0_spxl = P1.y; /* update endpoint */
-}
-
-FUNCTION static void sp_draw_vector_to_2d(
-GDECL
-fix15 x0, /* X coordinate */
-fix15 y0, /* Y coordinate */
-fix15 x1,
-fix15 y1,
-band_t GLOBALFAR *band)
-{
-register fix15 how_many_y; /* # of intercepts at y = n + 1/2 */
-register fix15 yc; /* Current scan-line */
- fix15 temp1; /* various uses */
- fix15 temp2; /* various uses */
-register fix31 dx_dy; /* slope of line in 16.16 form */
-register fix31 xc; /* high-precision (16.16) x coordinate */
- fix15 y_pxl;
-
-yc = (y0 + sp_globals.pixrnd) >> sp_globals.pixshift; /* current scan line = end of last line */
-y_pxl = (y1 + sp_globals.pixrnd) >> sp_globals.pixshift; /* calculate new end-scan line */
-
-if ((how_many_y = y_pxl - yc) == 0) return; /* Don't draw a null line */
-
-if (how_many_y < 0) yc--; /* Predecrment downward lines */
-
-if (yc > band->band_max) /* Is start point above band? */
- {
- if (y_pxl > band->band_max) return; /* line has to go down! */
- how_many_y = y_pxl - (yc = band->band_max) - 1; /* Yes, limit it */
- }
-
-if (yc < band->band_min) /* Is start point below band? */
- {
- if (y_pxl < band->band_min) return; /* line has to go up! */
- how_many_y = y_pxl - (yc = band->band_min); /* Yes, limit it */
- }
-
-xc = (fix31)(x0 + sp_globals.pixrnd) << 16; /* Original x coordinate with built in */
- /* rounding. int.16 + pixshift form */
-
-if ( (temp1 = (x1 - x0)) == 0) /* check for vertical line */
- {
- dx_dy = 0L; /* Zero slope, leave xc alone */
- goto skip_calc;
- }
-
-/* calculate dx_dy at 16.16 fixed point */
-
-dx_dy = ( (fix31)temp1 << 16 )/(fix31)(y1 - y0);
-
-/* We have to check for a @#$%@# possible multiply overflow */
-/* by doing another @#$*& multiply. In assembly language, */
-/* the program could just check the OVerflow flag or whatever*/
-/* works on the particular processor. This C code is meant */
-/* to be processor independent. */
-
-temp1 = (yc << sp_globals.pixshift) - y0 + sp_globals.pixrnd;
-/* This sees if the sign bits start at bit 15 */
-/* if they do, no overflow has occurred */
-
-temp2 = (fix15)(MULT16(temp1,(fix15)(dx_dy >> 16)) >> 15);
-
-if ( (temp2 != (fix15)0xFFFF) &&
- (temp2 != 0x0000) )
- { /* Overflow. Pick point closest to yc + .5 */
- if (ABS(temp1) < ABS((yc << sp_globals.pixshift) - y1 + sp_globals.pixrnd))
- { /* use x1 instead of x0 */
- xc = (fix31)(x1 + sp_globals.pixrnd) << (16 - sp_globals.pixshift);
- }
- goto skip_calc;
- }
-/* calculate new xc at the center of the *current* scan line */
-/* due to banding, yc may be several lines away from y0 */
-/* xc += (yc + .5 - y0) * dx_dy */
-/* This multiply generates a subpixel delta. */
-/* So we leave it as an int.pixshift + 16 delta */
-
-xc += (fix31)temp1 * dx_dy;
-dx_dy <<= sp_globals.pixshift;
-skip_calc:
-
-yc -= band->band_array_offset; /* yc is now an offset relative to the band */
-
-if (how_many_y < 0)
- { /* Vector down */
- if ((how_many_y += yc + 1) < band->band_floor)
- how_many_y = band->band_floor; /* can't go below floor */
- while(yc >= how_many_y)
- {
- temp1 = (fix15)(xc >> 16);
- sp_add_intercept_2d(yc--,temp1);
- xc -= dx_dy;
- }
- }
- else
- { /* Vector up */
- /* check to see that line doesn't extend beyond top of band */
- if ((how_many_y += yc) > band->band_ceiling)
- how_many_y = band->band_ceiling;
- while(yc < how_many_y)
- {
- temp1 = (fix15)(xc >> 16);
- sp_add_intercept_2d(yc++,temp1);
- xc += dx_dy;
- }
- }
-}
-
-#endif
-
-#if INCL_2D
-FUNCTION boolean end_char_2d()
-/* Called when all character data has been output
- * Return TRUE if output process is complete
- * Return FALSE to repeat output of the transformed data beginning
- * with the first contour
- */
-{
-
-fix31 xorg;
-fix31 yorg;
-#if INCL_CLIPPING
-fix31 em_max, em_min, bmap_max, bmap_min;
-#endif
-
-#if DEBUG
-printf("END_CHAR__2d()\n");
-#endif
-
-if (sp_globals.first_pass)
- {
- if (sp_globals.bmap_xmax >= sp_globals.bmap_xmin)
- {
- sp_globals.xmin = (sp_globals.bmap_xmin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- sp_globals.xmax = (sp_globals.bmap_xmax + sp_globals.pixrnd) >> sp_globals.pixshift;
- }
- else
- {
- sp_globals.xmin = sp_globals.xmax = 0;
- }
- if (sp_globals.bmap_ymax >= sp_globals.bmap_ymin)
- {
-
-#if INCL_CLIPPING
- switch(sp_globals.tcb0.xtype)
- {
- case 1: /* 180 degree rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_ymin = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymin = sp_globals.clip_ymin >> sp_globals.multshift;
- bmap_min = (sp_globals.bmap_ymin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- sp_globals.clip_ymin = -1 * sp_globals.clip_ymin;
- if (bmap_min < sp_globals.clip_ymin)
- sp_globals.ymin = sp_globals.clip_ymin;
- else
- sp_globals.ymin = bmap_min;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_ymax = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymax = sp_globals.clip_ymax >> sp_globals.multshift;
- bmap_max = (sp_globals.bmap_ymax + sp_globals.pixrnd) >> sp_globals.pixshift;
- if (bmap_max < sp_globals.clip_ymax)
- sp_globals.ymax = bmap_max;
- else
- sp_globals.ymax = sp_globals.clip_ymax;
- }
- sp_globals.clip_xmax = -sp_globals.xmin;
- sp_globals.clip_xmin = ((sp_globals.set_width.x+32768L) >> 16) -
- sp_globals.xmin;
- break;
- case 2: /* 90 degree rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_xmin = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_xmin = sp_globals.clip_xmin >> sp_globals.multshift;
- sp_globals.clip_xmin = -1 * sp_globals.clip_xmin;
- bmap_min = (sp_globals.bmap_xmin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- if (bmap_min > sp_globals.clip_xmin)
- sp_globals.clip_xmin = bmap_min;
-
- /* normalize to x origin */
- sp_globals.clip_xmin -= sp_globals.xmin;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_xmax = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_xmax = sp_globals.clip_xmax >> sp_globals.multshift;
- bmap_max = (sp_globals.bmap_xmax + sp_globals.pixrnd) >> sp_globals.pixshift;
- if (bmap_max < sp_globals.clip_xmax)
- sp_globals.xmax = bmap_max;
- else
- sp_globals.xmax = sp_globals.clip_xmax;
- sp_globals.clip_ymax = 0;
- if ((sp_globals.specs.flags & CLIP_TOP) &&
- (sp_globals.ymax > sp_globals.clip_ymax))
- sp_globals.ymax = sp_globals.clip_ymax;
- sp_globals.clip_ymin = ((sp_globals.set_width.y+32768L) >> 16);
- if ((sp_globals.specs.flags & CLIP_BOTTOM) &&
- (sp_globals.ymin < sp_globals.clip_ymin))
- sp_globals.ymin = sp_globals.clip_ymin;
- /* normalize to x origin */
- sp_globals.clip_xmax -= sp_globals.xmin;
- }
- break;
- case 3: /* 270 degree rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_xmin = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_xmin = sp_globals.clip_xmin >> sp_globals.multshift;
- sp_globals.clip_xmin = -1 * sp_globals.clip_xmin;
- bmap_min = (sp_globals.bmap_xmin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
-
- /* let the minimum be the larger of these two values */
- if (bmap_min > sp_globals.clip_xmin)
- sp_globals.clip_xmin = bmap_min;
-
- /* normalize the x value to new xorgin */
- sp_globals.clip_xmin -= sp_globals.xmin;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_xmax = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_xmax = sp_globals.clip_xmax >> sp_globals.multshift;
- bmap_max = (sp_globals.bmap_xmax + sp_globals.pixrnd) >> sp_globals.pixshift;
-
- /* let the max be the lesser of these two values */
- if (bmap_max < sp_globals.clip_xmax)
- {
- sp_globals.xmax = bmap_max;
- sp_globals.clip_xmax = bmap_max;
- }
- else
- sp_globals.xmax = sp_globals.clip_xmax;
-
- /* normalize the x value to new x origin */
- sp_globals.clip_xmax -= sp_globals.xmin;
- }
- /* compute y clip values */
- sp_globals.clip_ymax = ((sp_globals.set_width.y+32768L) >> 16);
- if ((sp_globals.specs.flags & CLIP_TOP) &&
- (sp_globals.ymax > sp_globals.clip_ymax))
- sp_globals.ymax = sp_globals.clip_ymax;
- sp_globals.clip_ymin = 0;
- if ((sp_globals.specs.flags & CLIP_BOTTOM) &&
- (sp_globals.ymin < sp_globals.clip_ymin))
- sp_globals.ymin = sp_globals.clip_ymin;
- break;
- default: /* this is for zero degree rotation and arbitrary rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_ymax = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymax = sp_globals.clip_ymax >> sp_globals.multshift;
- bmap_max = (sp_globals.bmap_ymax + sp_globals.pixrnd) >> sp_globals.pixshift;
- if (bmap_max > sp_globals.clip_ymax)
- sp_globals.ymax = bmap_max;
- else
- sp_globals.ymax = sp_globals.clip_ymax;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_ymin = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymin = sp_globals.clip_ymin >> sp_globals.multshift;
- sp_globals.clip_ymin = - sp_globals.clip_ymin;
- bmap_min = (sp_globals.bmap_ymin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- if (bmap_min < sp_globals.clip_ymin)
- sp_globals.ymin = sp_globals.clip_ymin;
- else
- sp_globals.ymin = bmap_min;
- }
- sp_globals.clip_xmin = -sp_globals.xmin;
- sp_globals.clip_xmax = ((sp_globals.set_width.x+32768L) >> 16) -
- sp_globals.xmin;
- break;
- }
-if ( !(sp_globals.specs.flags & CLIP_TOP))
-#endif
- sp_globals.ymax = (sp_globals.bmap_ymax + sp_globals.pixrnd) >> sp_globals.pixshift;
-
-#if INCL_CLIPPING
-if ( !(sp_globals.specs.flags & CLIP_BOTTOM))
-#endif
- sp_globals.ymin = (sp_globals.bmap_ymin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- }
- else
- {
- sp_globals.ymin = sp_globals.ymax = 0;
- }
-
- /* add in the rounded out part (from xform.) of the left edge */
- if (sp_globals.tcb.xmode == 0) /* for X pix is function of X orus only add the round */
- xorg = (((fix31)sp_globals.xmin << 16) + (sp_globals.rnd_xmin << sp_globals.poshift));
- else
- if (sp_globals.tcb.xmode == 1) /* for X pix is function of -X orus only, subtr. round */
- xorg = (((fix31)sp_globals.xmin << 16) - (sp_globals.rnd_xmin << sp_globals.poshift)) ;
- else
- xorg = (fix31)sp_globals.xmin << 16; /* for other cases don't use round on x */
-
- if (sp_globals.tcb.ymode == 2) /* for Y pix is function of X orus only, add round error */
- yorg = (((fix31)sp_globals.ymin << 16) + (sp_globals.rnd_xmin << sp_globals.poshift));
- else
- if (sp_globals.tcb.ymode == 3) /* for Y pix is function of -X orus only, sub round */
- yorg = (((fix31)sp_globals.ymin << 16) - (sp_globals.rnd_xmin << sp_globals.poshift));
- else /* all other cases have no round error on yorg */
- yorg = (fix31)sp_globals.ymin << 16;
-
- open_bitmap(sp_globals.set_width.x, sp_globals.set_width.y, xorg, yorg,
- sp_globals.xmax - sp_globals.xmin, sp_globals.ymax - sp_globals.ymin);
- if (sp_globals.intercept_oflo)
- {
- sp_globals.y_band.band_min = sp_globals.ymin;
- sp_globals.y_band.band_max = sp_globals.ymax;
- sp_globals.x_scan_active = FALSE;
- sp_globals.no_x_lists = 0;
- init_intercepts_out();
- sp_globals.first_pass = FALSE;
- sp_globals.extents_running = FALSE;
- return FALSE;
- }
- else
- {
- sp_proc_intercepts_2d();
- close_bitmap();
- return TRUE;
- }
- }
-else
- {
- if (sp_globals.intercept_oflo)
- {
- reduce_band_size_out();
- init_intercepts_out();
- return FALSE;
- }
- else
- {
- sp_proc_intercepts_2d();
- if (next_band_out())
- {
- init_intercepts_out();
- return FALSE;
- }
- close_bitmap();
- return TRUE;
- }
- }
-}
-#endif
-
-#if INCL_2D
-FUNCTION static void sp_add_intercept_2d(
-GDECL
-fix15 y, /* Y coordinate in relative pixel units */
- /* (0 is lowest sample in band) */
-fix15 x) /* X coordinate of intercept in subpixel units */
-
-/* Called by line() to add an intercept to the intercept list structure
- */
-
-{
-register fix15 from; /* Insertion pointers for the linked list sort */
-register fix15 to;
-
-#if DEBUG
-/* Bounds checking IS done in debug mode */
-if ((y >= MAX_INTERCEPTS) || (y < 0))
- {
- printf("Intercept out of table!!!!! (%d)\n",y);
- return;
- }
-
-if (y >= sp_globals.no_y_lists)
- {
- printf(" Add x intercept(%2d, %f)\n",
- y + sp_globals.x_band.band_min - sp_globals.no_y_lists,
- (real)x/(real)sp_globals.onepix);
- if (y > (sp_globals.no_x_lists + sp_globals.no_y_lists))
- {
- printf(" Intercept too big for band!!!!!\007\n");
- return;
- }
- }
- else
- {
- printf(" Add y intercept(%2d, %f)\n", y + sp_globals.y_band.band_min,(real)x/(real)sp_globals.onepix);
- }
-
-if (y < 0) /* Y value below bottom of current band? */
- {
- printf(" Intecerpt less than 0!!!\007\n");
- return;
- }
-#endif
-
-/* Store new values */
-
-sp_intercepts.car[sp_globals.next_offset] = x;
-
-/* Find slot to insert new element (between from and to) */
-
-from = y; /* Start at list head */
-
-while( (to = sp_intercepts.cdr[from]) >= sp_globals.first_offset) /* Until to == end of list */
- {
- if (x <= sp_intercepts.car[to]) /* If next item is larger than or same as this one... */
- goto insert_element; /* ... drop out and insert here */
- from = to; /* move forward in list */
- }
-
-insert_element: /* insert element "next_offset" between elements "from" */
- /* and "to" */
-
-sp_intercepts.cdr[from] = sp_globals.next_offset;
-sp_intercepts.cdr[sp_globals.next_offset] = to;
-
-if (++sp_globals.next_offset >= MAX_INTERCEPTS) /* Intercept buffer full? */
- {
- sp_globals.intercept_oflo = TRUE;
-/* There may be a few more calls to "add_intercept" from the current line */
-/* To avoid problems, we set next_offset to a safe value. We don't care */
-/* if the intercept table gets trashed at this point */
- sp_globals.next_offset = sp_globals.first_offset;
- }
-}
-
-#endif
-
-#if INCL_2D
-FUNCTION static void sp_proc_intercepts_2d()
-/* Called by sp_make_char to output accumulated intercept lists
- * Clips output to xmin, xmax, sp_globals.ymin, ymax boundaries
- */
-{
-register fix15 i;
-register fix15 from, to; /* Start and end of run in pixel units
- relative to left extent of character */
-register fix15 y;
-register fix15 scan_line;
- fix15 local_bmap_xmin;
- fix15 local_bmap_xmax;
- fix15 first_y, last_y;
- fix15 j,k;
-
-#if INCL_CLIPPING
-if ((sp_globals.specs.flags & CLIP_LEFT) != 0)
- clipleft = TRUE;
-else
- clipleft = FALSE;
-if ((sp_globals.specs.flags & CLIP_RIGHT) != 0)
- clipright = TRUE;
-else
- clipright = FALSE;
-if (clipleft || clipright)
- {
- xmax = sp_globals.clip_xmax << sp_globals.pixshift;
- xmin = sp_globals.clip_xmin << sp_globals.pixshift;
- }
-if (!clipright)
- xmax = ((sp_globals.set_width.x+32768L) >> 16);
-#endif
-
-if (sp_globals.x_scan_active) /* If xscanning, we need to make sure we don't miss any important pixels */
- {
- first_y = sp_globals.x_band.band_floor; /* start of x lists */
- last_y = sp_globals.x_band.band_ceiling; /* end of x lists */
- for (y = first_y; y != last_y; y++) /* scan all xlists */
- {
- i = sp_intercepts.cdr[y]; /* Index head of intercept list */
- while (i != 0) /* Link to next intercept if present */
- {
- from = sp_intercepts.car[i];
- j = i;
- i = sp_intercepts.cdr[i]; /* Link to next intercept */
- if (i == 0) /* End of list? */
- {
-#if DEBUG
- printf("****** proc_intercepts: odd number of intercepts in x list\n");
-#endif
- break;
- }
- to = sp_intercepts.car[i];
- k = sp_intercepts.cdr[i];
- if (((to >> sp_globals.pixshift) >= (from >> sp_globals.pixshift)) &&
- ((to - from) < (sp_globals.onepix + 1)))
- {
- from = ((fix31)to + (fix31)from - (fix31)sp_globals.onepix) >> (sp_globals.pixshift + 1);
- if (from > sp_globals.y_band.band_max)
- from = sp_globals.y_band.band_max;
- if ((from -= sp_globals.y_band.band_min) < 0)
- from = 0;
- to = ((y - sp_globals.x_band.band_floor + sp_globals.x_band.band_min)
- << sp_globals.pixshift)
- + sp_globals.pixrnd;
- sp_intercepts.car[j] = to;
- sp_intercepts.car[i] = to + sp_globals.onepix;
- sp_intercepts.cdr[i] = sp_intercepts.cdr[from];
- sp_intercepts.cdr[from] = j;
- }
- i = k;
- }
- }
- }
-#if DEBUG
-printf("\nIntercept lists:\n");
-#endif
-
-if ((first_y = sp_globals.y_band.band_max) >= sp_globals.ymax)
- first_y = sp_globals.ymax - 1; /* Clip to ymax boundary */
-
-if ((last_y = sp_globals.y_band.band_min) < sp_globals.ymin)
- last_y = sp_globals.ymin; /* Clip to sp_globals.ymin boundary */
-
-last_y -= sp_globals.y_band.band_array_offset;
-
-local_bmap_xmin = sp_globals.xmin << sp_globals.pixshift;
-local_bmap_xmax = (sp_globals.xmax << sp_globals.pixshift) + sp_globals.pixrnd;
-
-#if DEBUG
-/* Print out all of the intercept info */
-scan_line = sp_globals.ymax - first_y - 1;
-
-for (y = first_y - sp_globals.y_band.band_min; y >= last_y; y--, scan_line++)
- {
- i = y; /* Index head of intercept list */
- while ((i = sp_intercepts.cdr[i]) != 0) /* Link to next intercept if present */
- {
- if ((from = sp_intercepts.car[i] - local_bmap_xmin) < 0)
- from = 0; /* Clip to xmin boundary */
- i = sp_intercepts.cdr[i]; /* Link to next intercept */
- if (i == 0) /* End of list? */
- {
- printf("****** proc_intercepts: odd number of intercepts\n");
- break;
- }
- if ((to = sp_intercepts.car[i]) > sp_globals.bmap_xmax)
- to = sp_globals.bmap_xmax - local_bmap_xmin; /* Clip to xmax boundary */
- else
- to -= local_bmap_xmin;
- printf(" Y = %2d (scanline %2d): %3.4f %3.4f:\n",
- y + sp_globals.y_band.band_min,
- scan_line,
- (real)from / (real)sp_globals.onepix,
- (real)to / (real)sp_globals.onepix);
- }
- }
-#endif
-
-/* Draw the image */
-scan_line = sp_globals.ymax - first_y - 1;
-
-for (y = first_y - sp_globals.y_band.band_min; y >= last_y; y--, scan_line++)
- {
- i = y; /* Index head of intercept list */
- while ((i = sp_intercepts.cdr[i]) != 0) /* Link to next intercept if present */
- {
- if ((from = sp_intercepts.car[i] - local_bmap_xmin) < 0)
- from = 0; /* Clip to xmin boundary */
- i = sp_intercepts.cdr[i]; /* Link to next intercept */
-
- if ((to = sp_intercepts.car[i]) > local_bmap_xmax)
- to = sp_globals.bmap_xmax - local_bmap_xmin; /* Clip to xmax boundary */
- else
- to -= local_bmap_xmin;
-#if INCL_CLIPPING
- if (clipleft)
- {
- if (to <= xmin)
- continue;
- if (from < xmin)
- from = xmin;
- }
- if (clipright)
- {
- if (from >= xmax)
- continue;
- if (to > xmax)
- to = xmax;
- }
-#endif
- if ( (to - from) <= sp_globals.onepix)
- {
- from = (to + from - sp_globals.onepix) >> (sp_globals.pixshift + 1);
- set_bitmap_bits(scan_line, from, from + 1);
- }
- else
- {
- set_bitmap_bits(scan_line, from >> sp_globals.pixshift, to >> sp_globals.pixshift);
- }
- }
- }
-}
-
-#endif
diff --git a/nx-X11/lib/font/Speedo/out_blk.c b/nx-X11/lib/font/Speedo/out_blk.c
deleted file mode 100644
index a5b669b2a..000000000
--- a/nx-X11/lib/font/Speedo/out_blk.c
+++ /dev/null
@@ -1,706 +0,0 @@
-/* $Xorg: out_blk.c,v 1.3 2000/08/17 19:46:26 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/out_blk.c,v 1.2 1999/02/07 06:18:16 dawes Exp $ */
-
-
-/*************************** O U T _ B L K . C *********************************
- * *
- * This is an output module for black-writer mode. *
- * *
- *****************************************************************************/
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "spdo_prv.h" /* General definitions for Speedo */
-
-#define DEBUG 0
-#define LOCAL static
-#define ABS(X) ( (X < 0) ? -X : X)
-
-#if DEBUG
-#include <stdio.h>
-#define SHOW(X) printf("X = %d\n", X)
-#else
-#define SHOW(X)
-#endif
-
-
-/***** GLOBAL VARIABLES *****/
-
-/***** GLOBAL FUNCTIONS *****/
-
-/***** EXTERNAL VARIABLES *****/
-
-/***** EXTERNAL FUNCTIONS *****/
-
-/***** STATIC VARIABLES *****/
-
-/***** STATIC FUNCTIONS *****/
-
-#if INCL_BLACK
-static void sp_add_intercept_black(PROTO_DECL2 fix15 y, fix15 x);
-static void sp_proc_intercepts_black(PROTO_DECL1);
-#endif
-
-
-#if INCL_BLACK
-FUNCTION boolean init_black(
-GDECL
-specs_t GLOBALFAR *specsarg)
-/*
- * init_out0() is called by sp_set_specs() to initialize the output module.
- * Returns TRUE if output module can accept requested specifications.
- * Returns FALSE otherwise.
- */
-{
-#if DEBUG
-printf("INIT_BLK()\n");
-#endif
-if (specsarg->flags & CURVES_OUT)
- return FALSE; /* Curves out not supported */
-return (TRUE);
-}
-#endif
-
-
-#if INCL_BLACK
-FUNCTION boolean begin_char_black(
-GDECL
-point_t Psw,
-point_t Pmin,
-point_t Pmax)
-/* Called once at the start of the character generation process
- */
-{
-#if DEBUG
-printf("BEGIN_CHAR_BLACK(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f\n",
- (real)Psw.x / (real)sp_globals.onepix, (real)Psw.y / (real)sp_globals.onepix,
- (real)Pmin.x / (real)sp_globals.onepix, (real)Pmin.y / (real)sp_globals.onepix,
- (real)Pmax.x / (real)sp_globals.onepix, (real)Pmax.y / (real)sp_globals.onepix);
-#endif
-init_char_out(Psw,Pmin,Pmax);
-return TRUE;
-}
-#endif
-
-
-#if INCL_BLACK
-FUNCTION void begin_contour_black(
-GDECL
-point_t P1,
-boolean outside)
-/* Called at the start of each contour
- */
-{
-
-#if DEBUG
-printf("BEGIN_CONTOUR_BLACK(%3.1f, %3.1f, %s)\n",
- (real)P1.x / (real)sp_globals.onepix, (real)P1.y / (real)sp_globals.onepix, outside? "outside": "inside");
-#endif
-sp_globals.x0_spxl = P1.x;
-sp_globals.y0_spxl = P1.y;
-sp_globals.y_pxl = (sp_globals.y0_spxl + sp_globals.pixrnd) >> sp_globals.pixshift;
-}
-#endif
-
-#if INCL_BLACK
-FUNCTION void line_black(
-GDECL
-point_t P1)
-/* Called for each vector in the transformed character
- */
-{
-register fix15 how_many_y; /* # of intercepts at y = n + 1/2 */
-register fix15 yc, i; /* Current scan-line */
- fix15 temp1; /* various uses */
- fix15 temp2; /* various uses */
-register fix31 dx_dy; /* slope of line in 16.16 form */
-register fix31 xc; /* high-precision (16.16) x coordinate */
- fix15 x0,y0,x1,y1; /* PIX.FRAC start and endpoints */
-
-x0 = sp_globals.x0_spxl; /* get start of line (== current point) */
-y0 = sp_globals.y0_spxl;
-sp_globals.x0_spxl = x1 = P1.x; /* end of line */
-sp_globals.y0_spxl = y1 = P1.y; /* (also update current point to end of line) */
-
-yc = sp_globals.y_pxl; /* current scan line = end of last line */
-sp_globals.y_pxl = (y1 + sp_globals.pixrnd) >> sp_globals.pixshift; /* calculate new end-scan sp_globals.line */
-
-
-#if DEBUG
-printf("LINE_BLACK(%3.4f, %3.4f)\n",
- (real)P1.x/(real)sp_globals.onepix,
- (real)P1.y/(real)sp_globals.onepix);
-#endif
-
-if (sp_globals.extents_running)
- {
- if (sp_globals.x0_spxl > sp_globals.bmap_xmax)
- sp_globals.bmap_xmax = sp_globals.x0_spxl;
- if (sp_globals.x0_spxl < sp_globals.bmap_xmin)
- sp_globals.bmap_xmin = sp_globals.x0_spxl;
- if (sp_globals.y0_spxl > sp_globals.bmap_ymax)
- sp_globals.bmap_ymax = sp_globals.y0_spxl;
- if (sp_globals.y0_spxl < sp_globals.bmap_ymin)
- sp_globals.bmap_ymin = sp_globals.y0_spxl;
- }
-
-if (sp_globals.intercept_oflo) return;
-
-if ((how_many_y = sp_globals.y_pxl - yc) == 0) return; /* Don't draw a null line */
-
-if (how_many_y < 0) yc--; /* Predecrment downward lines */
-
-if (yc > sp_globals.y_band.band_max) /* Is start point above band? */
- {
- if (sp_globals.y_pxl > sp_globals.y_band.band_max) return; /* line has to go down! */
- how_many_y = sp_globals.y_pxl - (yc = sp_globals.y_band.band_max) - 1; /* Yes, limit it */
- }
-
-if (yc < sp_globals.y_band.band_min) /* Is start point below band? */
- {
- if (sp_globals.y_pxl < sp_globals.y_band.band_min) return; /* line has to go up! */
- how_many_y = sp_globals.y_pxl - (yc = sp_globals.y_band.band_min); /* Yes, limit it */
- }
-
-xc = (fix31)(x0 + sp_globals.pixrnd) << (16 - sp_globals.pixshift); /* Original x coordinate with built in */
- /* rounding. 16.16 form */
-
-
-if ( (temp1 = (x1 - x0)) == 0) /* check for vertical line */
- {
- yc -= sp_globals.y_band.band_min; /* yc is now an offset relative to the band */
- temp1 = (fix15)(xc >> 16);
- if (how_many_y < 0)
- { /* Vector down */
- if ((how_many_y += yc + 1) < 0) how_many_y = 0; /* can't go below 0 */
- for (i = yc; i >= how_many_y; i--)
- sp_add_intercept_black(i,temp1);
- }
- else
- { /* Vector up */
- /* check to see that line doesn't extend beyond top of band */
- if ((how_many_y += yc) > sp_globals.no_y_lists) how_many_y = sp_globals.no_y_lists;
- for (i = yc; i != how_many_y; i++)
- sp_add_intercept_black(i,temp1);
- }
- return;
- }
-
-/* calculate dx_dy at 16.16 fixed point */
-
-dx_dy = ( (fix31)temp1 << 16 )/(fix31)(y1 - y0);
-
-/* We have to check for a @#$%@# possible multiply overflow */
-/* by doing another @#$*& multiply. In assembly language, */
-/* the program could just check the OVerflow flag or whatever*/
-/* works on the particular processor. This C code is meant */
-/* to be processor independant. */
-
-temp1 = (yc << sp_globals.pixshift) - y0 + sp_globals.pixrnd;
-/* This sees if the sign bits start at bit 15 */
-/* if they do, no overflow has occurred */
-
-temp2 = (fix15)(MULT16(temp1,(fix15)(dx_dy >> 16)) >> 15);
-
-if ( (temp2 != (fix15)0xFFFF) &&
- (temp2 != 0x0000) &&
- /* Overflow. Pick point closest to yc + .5 */
- (ABS(temp1) < ABS((yc << sp_globals.pixshift) - y1 + sp_globals.pixrnd)) )
- { /* use x1 instead of x0 */
- xc = (fix31)(x1 + sp_globals.pixrnd) << (16 - sp_globals.pixshift);
- }
-else
- {
-/* calculate new xc at the center of the *current* scan line */
-/* due to banding, yc may be several lines away from y0 */
-/* xc += (yc + .5 - y0) * dx_dy */
-/* This multiply generates a subpixel delta. */
-/* So we shift it to be a 16.16 delta */
-
- xc += ((fix31)temp1 * dx_dy) >> sp_globals.pixshift;
- }
-
-yc -= sp_globals.y_band.band_min; /* yc is now an offset relative to the band */
-
-if (how_many_y < 0)
- { /* Vector down */
- if (how_many_y == -1)
- sp_add_intercept_black(yc, (fix15) (xc >> 16));
- else
- {
- if ((how_many_y += yc + 1) < 0) how_many_y = 0; /* can't go below 0 */
- for (i = yc; i >= how_many_y; i--)
- {
- temp1 = (fix15)(xc >> 16);
- sp_add_intercept_black(i,temp1);
- xc -= dx_dy;
- }
- }
- }
- else
- { /* Vector up */
- /* check to see that line doesn't extend beyond top of band */
- if (how_many_y == 1)
- sp_add_intercept_black(yc, (fix15) (xc >> 16));
- else
- {
- if ((how_many_y += yc) > sp_globals.no_y_lists) how_many_y = sp_globals.no_y_lists;
- for (i = yc; i != how_many_y; i++)
- {
- temp1 = (fix15)(xc >> 16);
- sp_add_intercept_black(i,temp1);
- xc += dx_dy;
- }
- }
- }
-}
-#endif
-#if INCL_BLACK
-FUNCTION boolean end_char_black()
-GDECL
-/* Called when all character data has been output
- * Return TRUE if output process is complete
- * Return FALSE to repeat output of the transformed data beginning
- * with the first contour
- */
-{
-
-fix31 xorg;
-fix31 yorg;
-#if INCL_CLIPPING
-fix31 bmap_max, bmap_min;
-#endif
-
-#if DEBUG
-printf("END_CHAR_BLACK()\n");
-#endif
-
-if (sp_globals.first_pass)
- {
- if (sp_globals.bmap_xmax >= sp_globals.bmap_xmin)
- {
- sp_globals.xmin = (sp_globals.bmap_xmin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- sp_globals.xmax = (sp_globals.bmap_xmax + sp_globals.pixrnd) >> sp_globals.pixshift;
- }
- else
- {
- sp_globals.xmin = sp_globals.xmax = 0;
- }
- if (sp_globals.bmap_ymax >= sp_globals.bmap_ymin)
- {
-
-#if INCL_CLIPPING
- switch(sp_globals.tcb0.xtype)
- {
- case 1: /* 180 degree rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_ymin = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymin = sp_globals.clip_ymin >> sp_globals.multshift;
- bmap_min = (sp_globals.bmap_ymin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- sp_globals.clip_ymin = -1 * sp_globals.clip_ymin;
- if (bmap_min < sp_globals.clip_ymin)
- sp_globals.ymin = sp_globals.clip_ymin;
- else
- sp_globals.ymin = bmap_min;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_ymax = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymax = sp_globals.clip_ymax >> sp_globals.multshift;
- bmap_max = (sp_globals.bmap_ymax + sp_globals.pixrnd) >> sp_globals.pixshift;
- if (bmap_max < sp_globals.clip_ymax)
- sp_globals.ymax = bmap_max;
- else
- sp_globals.ymax = sp_globals.clip_ymax;
- }
- sp_globals.clip_xmax = -sp_globals.xmin;
- sp_globals.clip_xmin = ((sp_globals.set_width.x+32768L) >> 16) -
- sp_globals.xmin;
- break;
- case 2: /* 90 degree rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_xmin = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_xmin = sp_globals.clip_xmin >> sp_globals.multshift;
- sp_globals.clip_xmin = -1 * sp_globals.clip_xmin;
- bmap_min = (sp_globals.bmap_xmin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- if (bmap_min > sp_globals.clip_xmin)
- sp_globals.clip_xmin = bmap_min;
-
- /* normalize to x origin */
- sp_globals.clip_xmin -= sp_globals.xmin;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_xmax = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_xmax = sp_globals.clip_xmax >> sp_globals.multshift;
- bmap_max = (sp_globals.bmap_xmax + sp_globals.pixrnd) >> sp_globals.pixshift;
- if (bmap_max < sp_globals.clip_xmax)
- sp_globals.xmax = bmap_max;
- else
- sp_globals.xmax = sp_globals.clip_xmax;
- sp_globals.clip_ymax = 0;
- if ((sp_globals.specs.flags & CLIP_TOP) &&
- (sp_globals.ymax > sp_globals.clip_ymax))
- sp_globals.ymax = sp_globals.clip_ymax;
- sp_globals.clip_ymin = ((sp_globals.set_width.y+32768L) >> 16);
- if ((sp_globals.specs.flags & CLIP_BOTTOM) &&
- (sp_globals.ymin < sp_globals.clip_ymin))
- sp_globals.ymin = sp_globals.clip_ymin;
- /* normalize to x origin */
- sp_globals.clip_xmax -= sp_globals.xmin;
- }
- break;
- case 3: /* 270 degree rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_xmin = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_xmin = sp_globals.clip_xmin >> sp_globals.multshift;
- sp_globals.clip_xmin = -1 * sp_globals.clip_xmin;
- bmap_min = (sp_globals.bmap_xmin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
-
- /* let the minimum be the larger of these two values */
- if (bmap_min > sp_globals.clip_xmin)
- sp_globals.clip_xmin = bmap_min;
-
- /* normalize the x value to new xorgin */
- sp_globals.clip_xmin -= sp_globals.xmin;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_xmax = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_xmax = sp_globals.clip_xmax >> sp_globals.multshift;
- bmap_max = (sp_globals.bmap_xmax + sp_globals.pixrnd) >> sp_globals.pixshift;
-
- /* let the max be the lesser of these two values */
- if (bmap_max < sp_globals.clip_xmax)
- {
- sp_globals.xmax = bmap_max;
- sp_globals.clip_xmax = bmap_max;
- }
- else
- sp_globals.xmax = sp_globals.clip_xmax;
-
- /* normalize the x value to new x origin */
- sp_globals.clip_xmax -= sp_globals.xmin;
- }
- /* compute y clip values */
- sp_globals.clip_ymax = ((sp_globals.set_width.y+32768L) >> 16);
- if ((sp_globals.specs.flags & CLIP_TOP) &&
- (sp_globals.ymax > sp_globals.clip_ymax))
- sp_globals.ymax = sp_globals.clip_ymax;
- sp_globals.clip_ymin = 0;
- if ((sp_globals.specs.flags & CLIP_BOTTOM) &&
- (sp_globals.ymin < sp_globals.clip_ymin))
- sp_globals.ymin = sp_globals.clip_ymin;
- break;
- default: /* this is for zero degree rotation and arbitrary rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_ymax = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymax = sp_globals.clip_ymax >> sp_globals.multshift;
- bmap_max = (sp_globals.bmap_ymax + sp_globals.pixrnd) >> sp_globals.pixshift;
- if (bmap_max > sp_globals.clip_ymax)
- sp_globals.ymax = bmap_max;
- else
- sp_globals.ymax = sp_globals.clip_ymax;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_ymin = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymin = sp_globals.clip_ymin >> sp_globals.multshift;
- sp_globals.clip_ymin = - sp_globals.clip_ymin;
- bmap_min = (sp_globals.bmap_ymin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- if (bmap_min < sp_globals.clip_ymin)
- sp_globals.ymin = sp_globals.clip_ymin;
- else
- sp_globals.ymin = bmap_min;
- }
- sp_globals.clip_xmin = -sp_globals.xmin;
- sp_globals.clip_xmax = ((sp_globals.set_width.x+32768L) >> 16) -
- sp_globals.xmin;
- break;
- }
-if ( !(sp_globals.specs.flags & CLIP_TOP))
-#endif
- sp_globals.ymax = (sp_globals.bmap_ymax + sp_globals.pixrnd) >> sp_globals.pixshift;
-
-#if INCL_CLIPPING
-if ( !(sp_globals.specs.flags & CLIP_BOTTOM))
-#endif
-
- sp_globals.ymin = (sp_globals.bmap_ymin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- }
- else
- {
- sp_globals.ymin = sp_globals.ymax = 0;
- }
-
- /* add in the rounded out part (from xform.) of the left edge */
- if (sp_globals.tcb.xmode == 0) /* for X pix is function of X orus only add the round */
- xorg = (((fix31)sp_globals.xmin << 16) + (sp_globals.rnd_xmin << sp_globals.poshift));
- else
- if (sp_globals.tcb.xmode == 1) /* for X pix is function of -X orus only, subtr. round */
- xorg = (((fix31)sp_globals.xmin << 16) - (sp_globals.rnd_xmin << sp_globals.poshift)) ;
- else
- xorg = (fix31)sp_globals.xmin << 16; /* for other cases don't use round on x */
-
- if (sp_globals.tcb.ymode == 2) /* for Y pix is function of X orus only, add round error */
- yorg = (((fix31)sp_globals.ymin << 16) + (sp_globals.rnd_xmin << sp_globals.poshift));
- else
- if (sp_globals.tcb.ymode == 3) /* for Y pix is function of -X orus only, sub round */
- yorg = (((fix31)sp_globals.ymin << 16) - (sp_globals.rnd_xmin << sp_globals.poshift));
- else /* all other cases have no round error on yorg */
- yorg = (fix31)sp_globals.ymin << 16;
-
- open_bitmap(sp_globals.set_width.x, sp_globals.set_width.y, xorg, yorg,
- sp_globals.xmax - sp_globals.xmin, sp_globals.ymax - sp_globals.ymin);
- if (sp_globals.intercept_oflo)
- {
- sp_globals.y_band.band_min = sp_globals.ymin;
- sp_globals.y_band.band_max = sp_globals.ymax;
- init_intercepts_out();
- sp_globals.first_pass = FALSE;
- sp_globals.extents_running = FALSE;
- return FALSE;
- }
- else
- {
- sp_proc_intercepts_black();
- close_bitmap();
- return TRUE;
- }
- }
-else
- {
- if (sp_globals.intercept_oflo)
- {
- reduce_band_size_out();
- init_intercepts_out();
- return FALSE;
- }
- else
- {
- sp_proc_intercepts_black();
- if (next_band_out())
- {
- init_intercepts_out();
- return FALSE;
- }
- close_bitmap();
- return TRUE;
- }
- }
-}
-#endif
-
-#if INCL_BLACK
-FUNCTION LOCAL void sp_add_intercept_black(
-GDECL
-fix15 y, /* Y coordinate in relative pixel units */
- /* (0 is lowest sample in band) */
-fix15 x) /* X coordinate of intercept in subpixel units */
-
-/* Called by line() to add an intercept to the intercept list structure
- */
-
-{
-register fix15 from; /* Insertion pointers for the linked list sort */
-register fix15 to;
-
-#if DEBUG
-printf(" Add intercept(%2d, %d)\n", y + sp_globals.y_band.band_min,x);
-
-/* Bounds checking IS done in debug mode */
-if (y < 0) /* Y value below bottom of current band? */
- {
- printf(" Intecerpt less than 0!!!\007\n");
- return;
- }
-
-if (y > (sp_globals.no_y_lists - 1)) /* Y value above top of current band? */
- {
- printf(" Intercept too big for band!!!!!\007\n");
- return;
- }
-#endif
-
-/* Store new values */
-
-sp_intercepts.car[sp_globals.next_offset] = x;
-
-/* Find slot to insert new element (between from and to) */
-
-from = y; /* Start at list head */
-
-while( (to = sp_intercepts.cdr[from]) >= sp_globals.first_offset) /* Until to == end of list */
- {
- if (x <= sp_intercepts.car[to]) /* If next item is larger than or same as this one... */
- goto insert_element; /* ... drop out and insert here */
- from = to; /* move forward in list */
- }
-
-insert_element: /* insert element "sp_globals.next_offset" between elements "from" */
- /* and "to" */
-
-sp_intercepts.cdr[from] = sp_globals.next_offset;
-sp_intercepts.cdr[sp_globals.next_offset] = to;
-
-if (++sp_globals.next_offset >= MAX_INTERCEPTS) /* Intercept buffer full? */
- {
- sp_globals.intercept_oflo = TRUE;
-/* There may be a few more calls to "add_intercept" from the current line */
-/* To avoid problems, we set next_offset to a safe value. We don't care */
-/* if the intercept table gets trashed at this point */
- sp_globals.next_offset = sp_globals.first_offset;
- }
-}
-
-#endif
-
-#if INCL_BLACK
-FUNCTION LOCAL void sp_proc_intercepts_black()
-GDECL
-
-/* Called by sp_make_char to output accumulated intercept lists
- * Clips output to sp_globals.xmin, sp_globals.xmax, sp_globals.ymin, sp_globals.ymax boundaries
- */
-{
-register fix15 i;
-register fix15 from, to; /* Start and end of run in pixel units
- relative to left extent of character */
-register fix15 y;
-register fix15 scan_line;
- fix15 first_y, last_y;
-
-#if DEBUG
-printf("\nIntercept lists:\n");
-#endif
-
-#if INCL_CLIPPING
-if ((sp_globals.specs.flags & CLIP_LEFT) != 0)
- clipleft = TRUE;
-else
- clipleft = FALSE;
-if ((sp_globals.specs.flags & CLIP_RIGHT) != 0)
- clipright = TRUE;
-else
- clipright = FALSE;
-if (clipleft || clipright)
- {
- xmax = sp_globals.clip_xmax;
- xmin = sp_globals.clip_xmin;
- }
-if (!clipright)
- xmax = ((sp_globals.set_width.x+32768L) >> 16);
-#endif
-
-if ((first_y = sp_globals.y_band.band_max) >= sp_globals.ymax)
- first_y = sp_globals.ymax - 1; /* Clip to sp_globals.ymax boundary */
-
-if ((last_y = sp_globals.y_band.band_min) < sp_globals.ymin)
- last_y = sp_globals.ymin; /* Clip to sp_globals.ymin boundary */
-
-last_y -= sp_globals.y_band.band_min;
-#if DEBUG
-/* Print out all of the intercept info */
-scan_line = sp_globals.ymax - first_y - 1;
-
-for (y = first_y - sp_globals.y_band.band_min; y >= last_y; y--, scan_line++)
- {
- i = y; /* Index head of intercept list */
- while ((i = sp_intercepts.cdr[i]) != 0) /* Link to next intercept if present */
- {
- if ((from = sp_intercepts.car[i] - sp_globals.xmin) < 0)
- from = 0; /* Clip to sp_globals.xmin boundary */
- i = sp_intercepts.cdr[i]; /* Link to next intercept */
- if (i == 0) /* End of list? */
- {
- printf("****** proc_intercepts: odd number of intercepts\n");
- break;
- }
- if ((to = sp_intercepts.car[i]) > sp_globals.xmax)
- to = sp_globals.xmax - sp_globals.xmin; /* Clip to sp_globals.xmax boundary */
- else
- to -= sp_globals.xmin;
- printf(" Y = %2d (scanline %2d): %d %d:\n",
- y + sp_globals.y_band.band_min, scan_line, from, to);
- }
- }
-#endif
-
-/* Draw the image */
-scan_line = sp_globals.ymax - first_y - 1;
-
-for (y = first_y - sp_globals.y_band.band_min; y >= last_y; y--, scan_line++)
- {
- i = y; /* Index head of intercept list */
- while ((i = sp_intercepts.cdr[i]) != 0) /* Link to next intercept if present */
- {
- if ((from = sp_intercepts.car[i] - sp_globals.xmin) < 0)
- from = 0; /* Clip to sp_globals.xmin boundary */
- i = sp_intercepts.cdr[i]; /* Link to next intercept */
-
- if ((to = sp_intercepts.car[i]) > sp_globals.xmax)
- to = sp_globals.xmax - sp_globals.xmin; /* Clip to sp_globals.xmax boundary */
- else
- to -= sp_globals.xmin;
- if (from >= to)
- {
- if (from >= sp_globals.xmax - sp_globals.xmin)
- {
- --from ;
- }
- to = from+1;
- }
-#if INCL_CLIPPING
- if (clipleft)
- {
- if (to <= xmin)
- continue;
- if (from < xmin)
- from = xmin;
- }
- if (clipright)
- {
- if (from >= xmax)
- continue;
- if (to > xmax)
- to = xmax;
- }
-#endif
- set_bitmap_bits(scan_line, from, to);
- }
- }
-}
-
-#endif
-
-
-
-
diff --git a/nx-X11/lib/font/Speedo/out_outl.c b/nx-X11/lib/font/Speedo/out_outl.c
deleted file mode 100644
index 013901092..000000000
--- a/nx-X11/lib/font/Speedo/out_outl.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/* $Xorg: out_outl.c,v 1.3 2000/08/17 19:46:26 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-
-
-/**************************** O U T _ 2 _ 1 . C ******************************
- * *
- * This is the standard output module for vector output mode. *
- * *
- ****************************************************************************/
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "spdo_prv.h" /* General definitions for Speedo */
-
-
-#define DEBUG 0
-
-#if DEBUG
-#include <stdio.h>
-#define SHOW(X) printf("X = %d\n", X)
-#else
-#define SHOW(X)
-#endif
-
-/* the following macro is used to limit points on the outline to the bounding box */
-
-#define RANGECHECK(value,min,max) (((value) >= (min) ? (value) : (min)) < (max) ? (value) : (max))
-/***** GLOBAL VARIABLES *****/
-
-/***** GLOBAL FUNCTIONS *****/
-
-/***** EXTERNAL VARIABLES *****/
-
-/***** EXTERNAL FUNCTIONS *****/
-
-/***** STATIC VARIABLES *****/
-
-/***** STATIC FUNCTIONS *****/
-
-
-#if INCL_OUTLINE
-FUNCTION boolean init_outline(specsarg)
-GDECL
-specs_t GLOBALFAR *specsarg;
-/*
- * init_out2() is called by sp_set_specs() to initialize the output module.
- * Returns TRUE if output module can accept requested specifications.
- * Returns FALSE otherwise.
- */
-{
-#if DEBUG
-printf("INIT_OUT_2()\n");
-#endif
-if (specsarg->flags & (CLIP_LEFT + CLIP_RIGHT + CLIP_TOP + CLIP_BOTTOM))
- return FALSE; /* Clipping not supported */
-return (TRUE);
-}
-#endif
-
-#if INCL_OUTLINE
-FUNCTION boolean begin_char_outline(Psw, Pmin, Pmax)
-GDECL
-point_t Psw; /* End of escapement vector (sub-pixels) */
-point_t Pmin; /* Bottom left corner of bounding box */
-point_t Pmax; /* Top right corner of bounding box */
-/*
- * If two or more output modules are included in the configuration, begin_char2()
- * is called by begin_char() to signal the start of character output data.
- * If only one output module is included in the configuration, begin_char() is
- * called by make_simp_char() and make_comp_char().
- */
-{
-fix31 set_width_x;
-fix31 set_width_y;
-fix31 xmin;
-fix31 xmax;
-fix31 ymin;
-fix31 ymax;
-
-#if DEBUG
-printf("BEGIN_CHAR_2(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f\n",
- (real)Psw.x / (real)onepix, (real)Psw.y / (real)onepix,
- (real)Pmin.x / (real)onepix, (real)Pmin.y / (real)onepix,
- (real)Pmax.x / (real)onepix, (real)Pmax.y / (real)onepix);
-#endif
-sp_globals.poshift = 16 - sp_globals.pixshift;
-set_width_x = (fix31)Psw.x << sp_globals.poshift;
-set_width_y = (fix31)Psw.y << sp_globals.poshift;
-xmin = (fix31)Pmin.x << sp_globals.poshift;
-xmax = (fix31)Pmax.x << sp_globals.poshift;
-ymin = (fix31)Pmin.y << sp_globals.poshift;
-ymax = (fix31)Pmax.y << sp_globals.poshift;
-sp_globals.xmin = Pmin.x;
-sp_globals.xmax = Pmax.x;
-sp_globals.ymin = Pmin.y;
-sp_globals.ymax = Pmax.y;
-open_outline(set_width_x, set_width_y, xmin, xmax, ymin, ymax);
-return TRUE;
-}
-#endif
-
-#if INCL_OUTLINE
-FUNCTION void begin_sub_char_outline(Psw, Pmin, Pmax)
-GDECL
-point_t Psw; /* End of sub-char escapement vector */
-point_t Pmin; /* Bottom left corner of sub-char bounding box */
-point_t Pmax; /* Top right corner of sub-char bounding box */
-/*
- * If two or more output modules are included in the configuration, begin_sub_char2()
- * is called by begin_sub_char() to signal the start of sub-character output data.
- * If only one output module is included in the configuration, begin_sub_char() is
- * called by make_comp_char().
- */
-{
-#if DEBUG
-printf("BEGIN_SUB_CHAR_2(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f\n",
- (real)Psw.x / (real)onepix, (real)Psw.y / (real)onepix,
- (real)Pmin.x / (real)onepix, (real)Pmin.y / (real)onepix,
- (real)Pmax.x / (real)onepix, (real)Pmax.y / (real)onepix);
-#endif
-start_new_char();
-}
-#endif
-
-
-#if INCL_OUTLINE
-FUNCTION void begin_contour_outline(P1, outside)
-GDECL
-point_t P1; /* Start point of contour */
-boolean outside; /* TRUE if outside (counter-clockwise) contour */
-/*
- * If two or more output modules are included in the configuration, begin_contour2()
- * is called by begin_contour() to define the start point of a new contour
- * and to indicate whether it is an outside (counter-clockwise) contour
- * or an inside (clockwise) contour.
- * If only one output module is included in the configuration, begin_sub_char() is
- * called by proc_outl_data().
- */
-{
-fix15 x,y;
-#if DEBUG
-printf("BEGIN_CONTOUR_2(%3.1f, %3.1f, %s)\n",
- (real)P1.x / (real)onepix, (real)P1.y / (real)onepix, outside? "outside": "inside");
-#endif
-x = RANGECHECK(P1.x,sp_globals.xmin,sp_globals.xmax);
-y = RANGECHECK(P1.y,sp_globals.ymin,sp_globals.ymax);
-
-start_contour((fix31)x << sp_globals.poshift, (fix31)y << sp_globals.poshift, outside);
-}
-#endif
-
-#if INCL_OUTLINE
-FUNCTION void curve_outline(P1, P2, P3,depth)
-GDECL
-point_t P1; /* First control point of Bezier curve */
-point_t P2; /* Second control point of Bezier curve */
-point_t P3; /* End point of Bezier curve */
-fix15 depth;
-/*
- * If two or more output modules are included in the configuration, curve2()
- * is called by curve() to output one curve segment.
- * If only one output module is included in the configuration, curve() is
- * called by proc_outl_data().
- * This function is only called when curve output is enabled.
- */
-{
-fix15 x1,y1,x2,y2,x3,y3;
-#if DEBUG
-printf("CURVE_2(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f)\n",
- (real)P1.x / (real)onepix, (real)P1.y / (real)onepix,
- (real)P2.x / (real)onepix, (real)P2.y / (real)onepix,
- (real)P3.x / (real)onepix, (real)P3.y / (real)onepix);
-#endif
-x1= RANGECHECK(P1.x,sp_globals.xmin,sp_globals.xmax);
-y1= RANGECHECK(P1.y,sp_globals.ymin,sp_globals.ymax);
-
-x2= RANGECHECK(P2.x,sp_globals.xmin,sp_globals.xmax);
-y2= RANGECHECK(P2.y,sp_globals.ymin,sp_globals.ymax);
-
-x3= RANGECHECK(P3.x,sp_globals.xmin,sp_globals.xmax);
-y3= RANGECHECK(P3.y,sp_globals.ymin,sp_globals.ymax);
-
-curve_to((fix31)x1 << sp_globals.poshift, (fix31)y1 << sp_globals.poshift,
- (fix31)x2<< sp_globals.poshift, (fix31)y2 << sp_globals.poshift,
- (fix31)x3 << sp_globals.poshift, (fix31)y3 << sp_globals.poshift);
-}
-#endif
-
-#if INCL_OUTLINE
-FUNCTION void line_outline(P1)
-GDECL
-point_t P1; /* End point of vector */
-/*
- * If two or more output modules are included in the configuration, line2()
- * is called by line() to output one vector.
- * If only one output module is included in the configuration, line() is
- * called by proc_outl_data(). If curve output is enabled, line() is also
- * called by split_curve().
- */
-{
-fix15 x1,y1;
-#if DEBUG
-printf("LINE_2(%3.1f, %3.1f)\n", (real)P1.x / (real)onepix, (real)P1.y / (real)onepix);
-#endif
-x1= RANGECHECK(P1.x,sp_globals.xmin,sp_globals.xmax);
-y1= RANGECHECK(P1.y,sp_globals.ymin,sp_globals.ymax);
-
-line_to((fix31)x1 << sp_globals.poshift, (fix31)y1 << sp_globals.poshift);
-}
-#endif
-
-#if INCL_OUTLINE
-FUNCTION void end_contour_outline()
-GDECL
-/*
- * If two or more output modules are included in the configuration, end_contour2()
- * is called by end_contour() to signal the end of a contour.
- * If only one output module is included in the configuration, end_contour() is
- * called by proc_outl_data().
- */
-{
-#if DEBUG
-printf("END_CONTOUR_2()\n");
-#endif
-close_contour();
-}
-#endif
-
-
-#if INCL_OUTLINE
-FUNCTION void end_sub_char_outline()
-GDECL
-/*
- * If two or more output modules are included in the configuration, end_sub_char2()
- * is called by end_sub_char() to signal the end of sub-character data.
- * If only one output module is included in the configuration, end_sub_char() is
- * called by make_comp_char().
- */
-{
-#if DEBUG
-printf("END_SUB_CHAR_2()\n");
-#endif
-}
-#endif
-
-
-#if INCL_OUTLINE
-FUNCTION boolean end_char_outline()
-GDECL
-/*
- * If two or more output modules are included in the configuration, end_char2()
- * is called by end_char() to signal the end of the character data.
- * If only one output module is included in the configuration, end_char() is
- * called by make_simp_char() and make_comp_char().
- * Returns TRUE if output process is complete
- * Returns FALSE to repeat output of the transformed data beginning
- * with the first contour (of the first sub-char if compound).
- */
-{
-#if DEBUG
-printf("END_CHAR_2()\n");
-#endif
-close_outline();
-return TRUE;
-}
-#endif
-
diff --git a/nx-X11/lib/font/Speedo/out_scrn.c b/nx-X11/lib/font/Speedo/out_scrn.c
deleted file mode 100644
index 0ea3b1976..000000000
--- a/nx-X11/lib/font/Speedo/out_scrn.c
+++ /dev/null
@@ -1,1090 +0,0 @@
-/* $Xorg: out_scrn.c,v 1.3 2000/08/17 19:46:26 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/out_scrn.c,v 1.4 1999/12/27 00:39:25 robin Exp $ */
-
-
-/*************************** O U T _ S C R N . C *****************************
- * *
- * This is an output module for screen-writer mode. *
- * *
- *****************************************************************************/
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "spdo_prv.h" /* General definitions for Speedo */
-
-#define DEBUG 0
-#define LOCAL static
-#define ABS(X) ( (X < 0) ? -X : X)
-
-#if DEBUG
-#include <stdio.h>
-#define SHOW(X) printf("X = %d\n", X)
-#else
-#define SHOW(X)
-#endif
-
-
-/***** GLOBAL VARIABLES *****/
-
-/***** GLOBAL FUNCTIONS *****/
-
-/***** EXTERNAL VARIABLES *****/
-
-/***** EXTERNAL FUNCTIONS *****/
-
-/***** STATIC VARIABLES *****/
-
-/***** STATIC FUNCTIONS *****/
-
-static void sp_add_intercept_screen(PROTO_DECL2 fix15 y,fix31 x);
-static void sp_proc_intercepts_screen(PROTO_DECL1);
-
-
-#if INCL_SCREEN
-FUNCTION boolean init_screen(
-GDECL
-specs_t FONTFAR *specsarg)
-/*
- * init_out0() is called by sp_set_specs() to initialize the output module.
- * Returns TRUE if output module can accept requested specifications.
- * Returns FALSE otherwise.
- */
-{
-#if DEBUG
-printf("INIT_SCREEN()\n");
-#endif
-return (TRUE);
-}
-#endif
-
-
-#if INCL_SCREEN
-FUNCTION boolean begin_char_screen(
-GDECL
-point_t Psw,
-point_t Pmin,
-point_t Pmax)
-/* Called once at the start of the character generation process
- */
-{
-#if DEBUG
-printf("BEGIN_CHAR_SCREEN(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f\n",
- (real)Psw.x / (real)sp_globals.onepix, (real)Psw.y / (real)sp_globals.onepix,
- (real)Pmin.x / (real)sp_globals.onepix, (real)Pmin.y / (real)sp_globals.onepix,
- (real)Pmax.x / (real)sp_globals.onepix, (real)Pmax.y / (real)sp_globals.onepix);
-#endif
-if (sp_globals.pixshift > 8)
- sp_intercepts.fracpix = sp_globals.onepix << (8 - sp_globals.pixshift);
-else
- sp_intercepts.fracpix = sp_globals.onepix >> (sp_globals.pixshift - 8);
-
-init_char_out(Psw,Pmin,Pmax);
-
-return TRUE;
-}
-#endif
-
-
-#if INCL_SCREEN
-FUNCTION void begin_contour_screen(
-GDECL
-point_t P1,
-boolean outside)
-/* Called at the start of each contour
- */
-{
-
-#if DEBUG
-printf("BEGIN_CONTOUR_SCREEN(%3.1f, %3.1f, %s)\n",
- (real)P1.x / (real)sp_globals.onepix, (real)P1.y / (real)sp_globals.onepix, outside? "outside": "inside");
-#endif
-sp_globals.x0_spxl = P1.x;
-sp_globals.y0_spxl = P1.y;
-sp_globals.y_pxl = (sp_globals.y0_spxl + sp_globals.pixrnd) >> sp_globals.pixshift;
-}
-#endif
-
-#if INCL_SCREEN
-FUNCTION void curve_screen(
-GDECL
-point_t P1, point_t P2, point_t P3,
-fix15 depth)
-{
-fix31 X0;
-fix31 Y0;
-fix31 X1;
-fix31 Y1;
-fix31 X2;
-fix31 Y2;
-fix31 X3;
-fix31 Y3;
-#if DEBUG
-printf("CURVE_SCREEN(%6.4f, %6.4f, %6.4f, %6.4f, %6.4f, %6.4f)\n",
- (real)P1.x / (real)sp_globals.onepix, (real)P1.y / (real)sp_globals.onepix,
- (real)P2.x / (real)sp_globals.onepix, (real)P2.y / (real)sp_globals.onepix,
- (real)P3.x / (real)sp_globals.onepix, (real)P3.y / (real)sp_globals.onepix);
-#endif
-
-
-if (sp_globals.extents_running) /* Accumulate actual character extents if required */
- {
- if (P3.x > sp_globals.bmap_xmax)
- sp_globals.bmap_xmax = P3.x;
- if (P3.x < sp_globals.bmap_xmin)
- sp_globals.bmap_xmin = P3.x;
- if (P3.y > sp_globals.bmap_ymax)
- sp_globals.bmap_ymax = P3.y;
- if (P3.y < sp_globals.bmap_ymin)
- sp_globals.bmap_ymin = P3.y;
- }
-
-X0 = ((fix31)sp_globals.x0_spxl << sp_globals.poshift) + (fix31)32768;
-Y0 = ((fix31)sp_globals.y0_spxl << sp_globals.poshift) + (fix31)32768;
-X1 = ((fix31)P1.x << sp_globals.poshift) + (fix31)32768;
-Y1 = ((fix31)P1.y << sp_globals.poshift) + (fix31)32768;
-X2 = ((fix31)P2.x << sp_globals.poshift) + (fix31)32768;
-Y2 = ((fix31)P2.y << sp_globals.poshift) + (fix31)32768;
-X3 = ((fix31)P3.x << sp_globals.poshift) + (fix31)32768;
-Y3 = ((fix31)P3.y << sp_globals.poshift) + (fix31)32768;
-
-if (((Y0 - Y3) * sp_globals.tcb.mirror) > 0)
- {
- sp_intercepts.leftedge = LEFT_INT;
- }
-else
- {
- sp_intercepts.leftedge = 0;
- }
-
-scan_curve_screen(X0,Y0,X1,Y1,X2,Y2,X3,Y3);
-sp_globals.x0_spxl = P3.x;
-sp_globals.y0_spxl = P3.y;
-sp_globals.y_pxl = (P3.y + sp_globals.pixrnd) >> sp_globals.pixshift; /* calculate new end-scan sp_globals.line */
-}
-
-FUNCTION void scan_curve_screen(
-GDECL
-fix31 X0, fix31 Y0, fix31 X1, fix31 Y1, fix31 X2, fix31 Y2, fix31 X3, fix31 Y3)
-/* Called for each curve in the transformed character if curves out enabled
- */
-{
-fix31 Pmidx;
-fix31 Pmidy;
-fix31 Pctrl1x;
-fix31 Pctrl1y;
-fix31 Pctrl2x;
-fix31 Pctrl2y;
-
-#ifdef DBGCRV
-printf("SCAN_CURVE_SCREEN(%6.4f, %6.4f, %6.4f, %6.4f, %6.4f, %6.4f, %6.4f, %6.4f)\n",
- (real)(X0-32768) / 65536.0, (real)(Y0-32768) / 65536.0,
- (real)(X1-32768) / 65536.0, (real)(Y1-32768) / 65536.0,
- (real)(X2-32768) / 65536.0, (real)(Y2-32768) / 65536.0,
- (real)(X3-32768) / 65536.0, (real)(Y3-32768) / 65536.0);
-#endif
-
-if (((Y3 >> 16)) == (Y0 >> 16) || (Y3+1) == Y0 || Y3 == (Y0+1))
- {
- return;
- }
-if ((X3 >> 16) == (X0 >> 16))
- {
- vert_line_screen(X3,(fix15)(Y0>>16),(fix15)(Y3>>16));
- return;
- }
-Pmidx = (X0 + (X1 + X2) * 3 + X3 + 4 ) >> 3;
-Pmidy = (Y0 + (Y1 + Y2) * 3 + Y3 + 4 ) >> 3;
-
-Pctrl1x = (X0 + X1 + 1 ) >> 1;
-Pctrl1y = (Y0 + Y1 + 1) >> 1;
-Pctrl2x = (X0 + (X1 << 1) + X2 + 2 ) >> 2;
-Pctrl2y = (Y0 + (Y1 << 1) + Y2 + 2 ) >> 2;
-scan_curve_screen(X0,Y0, Pctrl1x, Pctrl1y, Pctrl2x,Pctrl2y, Pmidx,Pmidy);
-
-Pctrl1x = (X1 + (X2 << 1) + X3 + 2 ) >> 2;
-Pctrl1y = (Y1 + (Y2 << 1) + Y3 + 2 ) >> 2;
-Pctrl2x = (X2 + X3 + 1 ) >> 1;
-Pctrl2y = (Y2 + Y3 + 1 ) >> 1;
-scan_curve_screen(Pmidx,Pmidy, Pctrl1x,Pctrl1y, Pctrl2x,Pctrl2y, X3,Y3);
-}
-
-FUNCTION void vert_line_screen(
-GDECL
-fix31 x,
-fix15 y1, fix15 y2)
-{
-
-#ifdef DBGCRV
-printf("VERT_LINE_SCREEN(%6.4f, %6.4f, %6.4f)\n",
- (real)(x - 32768) / 65536.0,
- (real)(y1 - 32768) / 65536.0,
- (real)(y2 - 32768) / 65536.0);
-#endif
-
-if (sp_globals.intercept_oflo)
- return;
-
-if (y1 > y2) /* Line goes downwards ? */
- {
- if (y1 > (sp_globals.y_band.band_max + 1)) /* Start point above top of band? */
- y1 = sp_globals.y_band.band_max + 1; /* Adjust start point to top of band */
- if (y2 < sp_globals.y_band.band_min) /* End point below bottom of band? */
- y2 = sp_globals.y_band.band_min; /* Adjust end point bottom of band */
-
- y1 -= sp_globals.y_band.band_min; /* Translate start point to band origin */
- y2 -= sp_globals.y_band.band_min; /* Translate end point to band origin */
-
- while (y2 < y1) /* At least one intercept left? */
- {
- sp_add_intercept_screen(--y1, x); /* Add intercept */
- }
- }
-else if (y2 > y1) /* Line goes upwards ? */
- {
- if (y1 < sp_globals.y_band.band_min) /* Start point below bottom of band? */
- y1 = sp_globals.y_band.band_min; /* Adjust start point to bottom of band */
- if (y2 > (sp_globals.y_band.band_max + 1)) /* End point above top of band? */
- y2 = sp_globals.y_band.band_max + 1; /* Adjust end point to top of band */
-
- y1 -= sp_globals.y_band.band_min; /* Translate start point to band origin */
- y2 -= sp_globals.y_band.band_min; /* Translate end point to band origin */
-
- while (y1 < y2) /* At least one intercept left? */
- {
- sp_add_intercept_screen(y1++, x); /* Add intercept */
- }
- }
-
-
-}
-
-#endif
-
-
-#if INCL_SCREEN
-FUNCTION void line_screen(
-GDECL
-point_t P1)
-/* Called for each vector in the transformed character
- */
-{
-register fix15 how_many_y; /* # of intercepts at y = n + 1/2 */
-register fix15 yc; /* Current scan-line */
- fix15 temp1; /* various uses */
- fix15 temp2; /* various uses */
-register fix31 dx_dy; /* slope of line in 16.16 form */
-register fix31 xc; /* high-precision (16.16) x coordinate */
- fix15 x0,y0,x1,y1; /* PIX.FRAC start and endpoints */
-
-x0 = sp_globals.x0_spxl; /* get start of line (== current point) */
-y0 = sp_globals.y0_spxl;
-sp_globals.x0_spxl = x1 = P1.x; /* end of line */
-sp_globals.y0_spxl = y1 = P1.y; /* (also update current point to end of line) */
-
-yc = sp_globals.y_pxl; /* current scan line = end of last line */
-sp_globals.y_pxl = (y1 + sp_globals.pixrnd) >> sp_globals.pixshift; /* calculate new end-scan sp_globals.line */
-
-
-#if DEBUG
-printf("LINE_SCREEN(%3.4f, %3.4f)\n",
- (real)P1.x/(real)sp_globals.onepix,
- (real)P1.y/(real)sp_globals.onepix);
-#endif
-
-if (sp_globals.extents_running)
- {
- if (sp_globals.x0_spxl > sp_globals.bmap_xmax)
- sp_globals.bmap_xmax = sp_globals.x0_spxl;
- if (sp_globals.x0_spxl < sp_globals.bmap_xmin)
- sp_globals.bmap_xmin = sp_globals.x0_spxl;
- if (sp_globals.y0_spxl > sp_globals.bmap_ymax)
- sp_globals.bmap_ymax = sp_globals.y0_spxl;
- if (sp_globals.y0_spxl < sp_globals.bmap_ymin)
- sp_globals.bmap_ymin = sp_globals.y0_spxl;
- }
-
-if (sp_globals.intercept_oflo) return;
-
-if ((how_many_y = sp_globals.y_pxl - yc) == 0) return; /* Don't draw a null line */
-
-xc = (fix31)(x0 + sp_globals.pixrnd) << (16 - sp_globals.pixshift); /* Original x coordinate with built in */
- /* rounding. 16.16 form */
-
-if (how_many_y < 0)
- {
- yc--; /* Predecrment downward lines */
- }
-
-if ((how_many_y * sp_globals.tcb.mirror) < 0)
- {
- sp_intercepts.leftedge = LEFT_INT;
- }
-else
- {
- sp_intercepts.leftedge = 0;
- }
-
-if (yc > sp_globals.y_band.band_max) /* Is start point above band? */
- {
- if (sp_globals.y_pxl > sp_globals.y_band.band_max) return; /* line has to go down! */
- how_many_y = sp_globals.y_pxl - (yc = sp_globals.y_band.band_max) - 1; /* Yes, limit it */
- }
-
-if (yc < sp_globals.y_band.band_min) /* Is start point below band? */
- {
- if (sp_globals.y_pxl < sp_globals.y_band.band_min) return; /* line has to go up! */
- how_many_y = sp_globals.y_pxl - (yc = sp_globals.y_band.band_min); /* Yes, limit it */
- }
-
-if ( (temp1 = (x1 - x0)) == 0) /* check for vertical line */
- {
- dx_dy = 0L; /* Zero slope, leave xc alone */
- goto skip_calc;
- }
-
-/* calculate dx_dy at 16.16 fixed point */
-
-dx_dy = ( (fix31)temp1 << 16 )/(fix31)(y1 - y0);
-
-/* We have to check for a @#$%@# possible multiply overflow */
-/* by doing another @#$*& multiply. In assembly language, */
-/* the program could just check the OVerflow flag or whatever*/
-/* works on the particular processor. This C code is meant */
-/* to be processor independant. */
-
-temp1 = (yc << sp_globals.pixshift) - y0 + sp_globals.pixrnd;
-/* This sees if the sign bits start at bit 15 */
-/* if they do, no overflow has occurred */
-
-temp2 = (fix15)(MULT16(temp1,(fix15)(dx_dy >> 16)) >> 15);
-
-if ( (temp2 != (fix15)-1) &&
- (temp2 != 0x0000) )
- { /* Overflow. Pick point closest to yc + .5 */
- if (ABS(temp1) < ABS((yc << sp_globals.pixshift) - y1 + sp_globals.pixrnd))
- { /* use x1 instead of x0 */
- xc = (fix31)(x1 + sp_globals.pixrnd) << (16 - sp_globals.pixshift);
- }
- goto skip_calc;
- }
-/* calculate new xc at the center of the *current* scan line */
-/* due to banding, yc may be several lines away from y0 */
-/* xc += (yc + .5 - y0) * dx_dy */
-/* This multiply generates a subpixel delta. */
-/* So we shift it to be a 16.16 delta */
-
-xc += ((fix31)temp1 * dx_dy) >> sp_globals.pixshift;
-
-skip_calc:
-
-yc -= sp_globals.y_band.band_min; /* yc is now an offset relative to the band */
-
-if (how_many_y < 0)
- { /* Vector down */
- if ((how_many_y += yc + 1) < 0) how_many_y = 0; /* can't go below 0 */
- while(yc >= how_many_y)
- {
- sp_add_intercept_screen(yc--,xc);
- xc -= dx_dy;
- }
- }
- else
- { /* Vector up */
- /* check to see that line doesn't extend beyond top of band */
- if ((how_many_y += yc) > sp_globals.no_y_lists) how_many_y = sp_globals.no_y_lists;
- while(yc != how_many_y)
- {
- sp_add_intercept_screen(yc++,xc);
- xc += dx_dy;
- }
- }
-}
-#endif
-
-#if INCL_SCREEN
-FUNCTION void end_contour_screen()
-GDECL
-/* Called after the last vector in each contour
- */
-{
-#if DEBUG
-printf("END_CONTOUR_SCREEN()\n");
-#endif
-sp_intercepts.inttype[sp_globals.next_offset-1] |= END_INT;
-}
-#endif
-
-
-
-#if INCL_SCREEN
-FUNCTION boolean end_char_screen()
-GDECL
-/* Called when all character data has been output
- * Return TRUE if output process is complete
- * Return FALSE to repeat output of the transformed data beginning
- * with the first contour
- */
-{
-
-fix31 xorg;
-fix31 yorg;
-
-#if INCL_CLIPPING
-fix31 em_max, em_min, bmap_max, bmap_min;
-#endif
-
-#if DEBUG
-printf("END_CHAR_SCREEN()\n");
-#endif
-
-if (sp_globals.first_pass)
- {
- if (sp_globals.bmap_xmax >= sp_globals.bmap_xmin)
- {
- sp_globals.xmin = (sp_globals.bmap_xmin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- sp_globals.xmax = (sp_globals.bmap_xmax + sp_globals.pixrnd) >> sp_globals.pixshift;
- }
- else
- {
- sp_globals.xmin = sp_globals.xmax = 0;
- }
- if (sp_globals.bmap_ymax >= sp_globals.bmap_ymin)
- {
-
-#if INCL_CLIPPING
- switch(sp_globals.tcb0.xtype)
- {
- case 1: /* 180 degree rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_ymin = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymin = sp_globals.clip_ymin >> sp_globals.multshift;
- bmap_min = (sp_globals.bmap_ymin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- sp_globals.clip_ymin = -1 * sp_globals.clip_ymin;
- if (bmap_min < sp_globals.clip_ymin)
- sp_globals.ymin = sp_globals.clip_ymin;
- else
- sp_globals.ymin = bmap_min;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_ymax = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymax = sp_globals.clip_ymax >> sp_globals.multshift;
- bmap_max = (sp_globals.bmap_ymax + sp_globals.pixrnd) >> sp_globals.pixshift;
- if (bmap_max < sp_globals.clip_ymax)
- sp_globals.ymax = bmap_max;
- else
- sp_globals.ymax = sp_globals.clip_ymax;
- }
- sp_globals.clip_xmax = -sp_globals.xmin;
- sp_globals.clip_xmin = ((sp_globals.set_width.x+32768L) >> 16) -
- sp_globals.xmin;
- break;
- case 2: /* 90 degree rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_xmin = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_xmin = sp_globals.clip_xmin >> sp_globals.multshift;
- sp_globals.clip_xmin = -1 * sp_globals.clip_xmin;
- bmap_min = (sp_globals.bmap_xmin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- if (bmap_min > sp_globals.clip_xmin)
- sp_globals.clip_xmin = bmap_min;
-
- /* normalize to x origin */
- sp_globals.clip_xmin -= sp_globals.xmin;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_xmax = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_xmax = sp_globals.clip_xmax >> sp_globals.multshift;
- bmap_max = (sp_globals.bmap_xmax + sp_globals.pixrnd) >> sp_globals.pixshift;
- if (bmap_max < sp_globals.clip_xmax)
- sp_globals.xmax = bmap_max;
- else
- sp_globals.xmax = sp_globals.clip_xmax;
- sp_globals.clip_ymax = 0;
- if ((sp_globals.specs.flags & CLIP_TOP) &&
- (sp_globals.ymax > sp_globals.clip_ymax))
- sp_globals.ymax = sp_globals.clip_ymax;
- sp_globals.clip_ymin = ((sp_globals.set_width.y+32768L) >> 16);
- if ((sp_globals.specs.flags & CLIP_BOTTOM) &&
- (sp_globals.ymin < sp_globals.clip_ymin))
- sp_globals.ymin = sp_globals.clip_ymin;
- /* normalize to x origin */
- sp_globals.clip_xmax -= sp_globals.xmin;
- }
- break;
- case 3: /* 270 degree rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_xmin = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_xmin = sp_globals.clip_xmin >> sp_globals.multshift;
- sp_globals.clip_xmin = -1 * sp_globals.clip_xmin;
- bmap_min = (sp_globals.bmap_xmin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
-
- /* let the minimum be the larger of these two values */
- if (bmap_min > sp_globals.clip_xmin)
- sp_globals.clip_xmin = bmap_min;
-
- /* normalize the x value to new xorgin */
- sp_globals.clip_xmin -= sp_globals.xmin;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_xmax = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_xmax = sp_globals.clip_xmax >> sp_globals.multshift;
- bmap_max = (sp_globals.bmap_xmax + sp_globals.pixrnd) >> sp_globals.pixshift;
-
- /* let the max be the lesser of these two values */
- if (bmap_max < sp_globals.clip_xmax)
- {
- sp_globals.xmax = bmap_max;
- sp_globals.clip_xmax = bmap_max;
- }
- else
- sp_globals.xmax = sp_globals.clip_xmax;
-
- /* normalize the x value to new x origin */
- sp_globals.clip_xmax -= sp_globals.xmin;
- }
- /* compute y clip values */
- sp_globals.clip_ymax = ((sp_globals.set_width.y+32768L) >> 16);
- if ((sp_globals.specs.flags & CLIP_TOP) &&
- (sp_globals.ymax > sp_globals.clip_ymax))
- sp_globals.ymax = sp_globals.clip_ymax;
- sp_globals.clip_ymin = 0;
- if ((sp_globals.specs.flags & CLIP_BOTTOM) &&
- (sp_globals.ymin < sp_globals.clip_ymin))
- sp_globals.ymin = sp_globals.clip_ymin;
- break;
- default: /* this is for zero degree rotation and arbitrary rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_ymax = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymax = sp_globals.clip_ymax >> sp_globals.multshift;
- bmap_max = (sp_globals.bmap_ymax + sp_globals.pixrnd) >> sp_globals.pixshift;
- if (bmap_max > sp_globals.clip_ymax)
- sp_globals.ymax = bmap_max;
- else
- sp_globals.ymax = sp_globals.clip_ymax;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_ymin = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymin = sp_globals.clip_ymin >> sp_globals.multshift;
- sp_globals.clip_ymin = - sp_globals.clip_ymin;
- bmap_min = (sp_globals.bmap_ymin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- if (bmap_min < sp_globals.clip_ymin)
- sp_globals.ymin = sp_globals.clip_ymin;
- else
- sp_globals.ymin = bmap_min;
- }
- sp_globals.clip_xmin = -sp_globals.xmin;
- sp_globals.clip_xmax = ((sp_globals.set_width.x+32768L) >> 16) -
- sp_globals.xmin;
- break;
- }
-if ( !(sp_globals.specs.flags & CLIP_TOP))
-#endif
- sp_globals.ymax = (sp_globals.bmap_ymax + sp_globals.pixrnd) >> sp_globals.pixshift;
-
-#if INCL_CLIPPING
-if ( !(sp_globals.specs.flags & CLIP_BOTTOM))
-#endif
-
- sp_globals.ymin = (sp_globals.bmap_ymin + sp_globals.pixrnd + 1) >> sp_globals.pixshift;
- }
- else
- {
- sp_globals.ymin = sp_globals.ymax = 0;
- }
-
- /* add in the rounded out part (from xform.) of the left edge */
- if (sp_globals.tcb.xmode == 0) /* for X pix is function of X orus only add the round */
- xorg = (((fix31)sp_globals.xmin << 16) + (sp_globals.rnd_xmin << sp_globals.poshift));
- else
- if (sp_globals.tcb.xmode == 1) /* for X pix is function of -X orus only, subtr. round */
- xorg = (((fix31)sp_globals.xmin << 16) - (sp_globals.rnd_xmin << sp_globals.poshift)) ;
- else
- xorg = (fix31)sp_globals.xmin << 16; /* for other cases don't use round on x */
-
- if (sp_globals.tcb.ymode == 2) /* for Y pix is function of X orus only, add round error */
- yorg = (((fix31)sp_globals.ymin << 16) + (sp_globals.rnd_xmin << sp_globals.poshift));
- else
- if (sp_globals.tcb.ymode == 3) /* for Y pix is function of -X orus only, sub round */
- yorg = (((fix31)sp_globals.ymin << 16) - (sp_globals.rnd_xmin << sp_globals.poshift));
- else /* all other cases have no round error on yorg */
- yorg = (fix31)sp_globals.ymin << 16;
-
- open_bitmap(sp_globals.set_width.x, sp_globals.set_width.y, xorg, yorg,
- sp_globals.xmax - sp_globals.xmin, sp_globals.ymax - sp_globals.ymin);
- if (sp_globals.intercept_oflo)
- {
- sp_globals.y_band.band_min = sp_globals.ymin;
- sp_globals.y_band.band_max = sp_globals.ymax;
- init_intercepts_out();
- sp_globals.first_pass = FALSE;
- sp_globals.extents_running = FALSE;
- return FALSE;
- }
- else
- {
- sp_proc_intercepts_screen();
- close_bitmap();
- return TRUE;
- }
- }
-else
- {
- if (sp_globals.intercept_oflo)
- {
- reduce_band_size_out();
- init_intercepts_out();
- return FALSE;
- }
- else
- {
- sp_proc_intercepts_screen();
- if (next_band_out())
- {
- init_intercepts_out();
- return FALSE;
- }
- close_bitmap();
- return TRUE;
- }
- }
-}
-#endif
-
-#if INCL_SCREEN
-FUNCTION LOCAL void sp_add_intercept_screen(
-GDECL
-fix15 y, /* Y coordinate in relative pixel units */
- /* (0 is lowest sample in band) */
-fix31 x) /* X coordinate of intercept in subpixel units */
-
-/* Called by line() to add an intercept to the intercept list structure
- */
-
-{
-register fix15 from; /* Insertion pointers for the linked list sort */
-register fix15 to;
-register fix15 xloc;
-register fix15 xfrac;
-
-#if DEBUG
-printf(" Add intercept(%2d, %x)\n", y + sp_globals.y_band.band_min, x);
-
-/* Bounds checking IS done in debug mode */
-if (y < 0) /* Y value below bottom of current band? */
- {
- printf(" Intecerpt less than 0!!!\007\n");
- return;
- }
-
-if (y > (sp_globals.no_y_lists - 1)) /* Y value above top of current band? */
- {
- printf(" Intercept too big for band!!!!!\007\n");
- return;
- }
-#endif
-
-/* Store new values */
-
-sp_intercepts.car[sp_globals.next_offset] = xloc = (fix15)(x >> 16);
-sp_intercepts.inttype[sp_globals.next_offset] = sp_intercepts.leftedge | (xfrac = ((x >> 8) & FRACTION));
-
-/* Find slot to insert new element (between from and to) */
-
-from = y; /* Start at list head */
-
-while( (to = sp_intercepts.cdr[from]) != 0) /* Until to == end of list */
- {
- if (xloc < sp_intercepts.car[to]) /* If next item is larger than or same as this one... */
- goto insert_element; /* ... drop out and insert here */
- else if (xloc == sp_intercepts.car[to] && xfrac < (sp_intercepts.inttype[to] & FRACTION))
- goto insert_element; /* ... drop out and insert here */
- from = to; /* move forward in list */
- }
-
-insert_element: /* insert element "sp_globals.next_offset" between elements "from" */
- /* and "to" */
-
-sp_intercepts.cdr[from] = sp_globals.next_offset;
-sp_intercepts.cdr[sp_globals.next_offset] = to;
-
-if (++sp_globals.next_offset >= MAX_INTERCEPTS) /* Intercept buffer full? */
- {
- sp_globals.intercept_oflo = TRUE;
-/* There may be a few more calls to "add_intercept" from the current line */
-/* To avoid problems, we set next_offset to a safe value. We don't care */
-/* if the intercept table gets trashed at this point */
- sp_globals.next_offset = sp_globals.first_offset;
- }
-}
-
-#endif
-
-#if INCL_SCREEN
-FUNCTION LOCAL void sp_proc_intercepts_screen()
-GDECL
-
-/* Called by sp_make_char to output accumulated intercept lists
- * Clips output to sp_globals.xmin, sp_globals.xmax, sp_globals.ymin, sp_globals.ymax boundaries
- */
-{
-register fix15 i,j, jplus1, iminus1;
-fix15 k,nextk, previ;
-register fix15 from, to; /* Start and end of run in pixel units
- relative to left extent of character */
-register fix15 y;
-register fix15 scan_line;
- fix15 first_y, last_y;
- fix15 xsave;
-
-
-fix15 diff;
-
-#if DEBUG
-printf("\nPROC_INTERCEPTS_SCREEN: Intercept lists before:\n");
-#endif
-
-#if INCL_CLIPPING
-if ((sp_globals.specs.flags & CLIP_LEFT) != 0)
- clipleft = TRUE;
-else
- clipleft = FALSE;
-if ((sp_globals.specs.flags & CLIP_RIGHT) != 0)
- clipright = TRUE;
-else
- clipright = FALSE;
-if (clipleft || clipright)
- {
- xmax = sp_globals.clip_xmax + sp_globals.xmin;
- xmin = sp_globals.clip_xmin + sp_globals.xmin;
- }
-if (!clipright)
- xmax = ((sp_globals.set_width.x+32768L) >> 16);
-#endif
-
-if ((first_y = sp_globals.y_band.band_max) >= sp_globals.ymax)
- first_y = sp_globals.ymax - 1; /* Clip to sp_globals.ymax boundary */
-
-if ((last_y = sp_globals.y_band.band_min) < sp_globals.ymin)
- last_y = sp_globals.ymin; /* Clip to sp_globals.ymin boundary */
-
-last_y -= sp_globals.y_band.band_min;
-
-#if DEBUG
-/* Print out all of the intercept info */
-scan_line = sp_globals.ymax - first_y - 1;
-
-for (y = first_y - sp_globals.y_band.band_min; y >= last_y; y--, scan_line++)
- {
- i = y; /* Index head of intercept list */
- while ((i = sp_intercepts.cdr[i]) != 0) /* Link to next intercept if present */
- {
- if ((from = sp_intercepts.car[i] - sp_globals.xmin) < 0)
- from = 0; /* Clip to sp_globals.xmin boundary */
- i = sp_intercepts.cdr[i]; /* Link to next intercept */
- if (i == 0) /* End of list? */
- {
- printf("****** proc_intercepts: odd number of intercepts\n");
- break;
- }
- if ((to = sp_intercepts.car[i]) > sp_globals.xmax)
- to = sp_globals.xmax - sp_globals.xmin; /* Clip to sp_globals.xmax boundary */
- else
- to -= sp_globals.xmin;
- printf(" Y = %2d (scanline %2d): %d %d:\n",
- y + sp_globals.y_band.band_min, scan_line, from, to);
- }
- }
-#endif
-
-/* CHECK INTERCEPT LIST FOR DROPOUT AND WINDING, FIX IF NECESSARY */
-
-for (y = first_y - sp_globals.y_band.band_min; y >= last_y; y--)
- {
- previ = y;
- i = sp_intercepts.cdr[y]; /* Index head of intercept list */
- while (i != 0) /* Link to next intercept if present */
- {
- j = i;
- i = sp_intercepts.cdr[i]; /* Link to next intercept */
- if (sp_intercepts.inttype[i] & LEFT_INT)
- {
- if (sp_intercepts.inttype[j] & LEFT_INT)
- {
- do { i = sp_intercepts.cdr[i]; } while (sp_intercepts.inttype[i] & LEFT_INT);
- do { i = sp_intercepts.cdr[i]; } while (sp_intercepts.cdr[i] && !(sp_intercepts.inttype[sp_intercepts.cdr[i]] & LEFT_INT));
- sp_intercepts.cdr[j] = i;
- }
- else
- {
- xsave = sp_intercepts.car[j];
- sp_intercepts.car[j] = sp_intercepts.car[i];
- sp_intercepts.car[i] = xsave;
-
- xsave = sp_intercepts.inttype[j];
- sp_intercepts.inttype[j] = sp_intercepts.inttype[i] & FRACTION;
- sp_intercepts.inttype[i] = xsave | LEFT_INT;
-
- sp_intercepts.cdr[previ] = i;
- sp_intercepts.cdr[j] = sp_intercepts.cdr[i];
- sp_intercepts.cdr[i] = j;
- i = j;
- j = sp_intercepts.cdr[previ];
- }
- }
-
- if (sp_intercepts.car[j] < sp_globals.xmin)
- sp_intercepts.car[j] = sp_globals.xmin; /* Clip to sp_globals.xmin boundary */
-
- if (sp_intercepts.car[i] > sp_globals.xmax)
- sp_intercepts.car[i] = sp_globals.xmax;
-
- if (sp_intercepts.car[j] >= sp_intercepts.car[i])
- {
- if ((ufix16)(sp_intercepts.inttype[j] & FRACTION) + (ufix16)(sp_intercepts.inttype[i] & FRACTION) > sp_intercepts.fracpix)
- ++sp_intercepts.car[i];
- else
- --sp_intercepts.car[j];
- }
- if (sp_globals.first_pass)
- {
- if (sp_intercepts.inttype[i-1] & END_INT)
- {
- for (iminus1 = i+1; !(sp_intercepts.inttype[iminus1] & END_INT); iminus1++)
- ;
- }
- else
- iminus1 = i-1;
-
- if (sp_intercepts.inttype[j] & END_INT)
- {
- for (jplus1 = j-1; !(sp_intercepts.inttype[jplus1] & END_INT); jplus1--)
- ;
- jplus1++;
- }
- else
- jplus1 = j+1;
-
- if ((sp_intercepts.inttype[iminus1] & LEFT_INT))
- {
- if ( sp_intercepts.car[jplus1] > sp_intercepts.car[i])
- {
- diff = sp_intercepts.car[jplus1] - sp_intercepts.car[i];
- sp_intercepts.car[i] += diff/2;
- sp_intercepts.car[jplus1] -= diff/2;
- if (diff & 1)
- {
- if ((ufix16)(sp_intercepts.inttype[i] & FRACTION) + (ufix16)(sp_intercepts.inttype[jplus1] & FRACTION) > sp_intercepts.fracpix)
- sp_intercepts.car[i] ++;
- else
- sp_intercepts.car[jplus1]--;
- }
- }
- }
- else if (!(sp_intercepts.inttype[jplus1] & LEFT_INT))
- {
- if (sp_intercepts.car[iminus1] < sp_intercepts.car[j])
- {
- diff = sp_intercepts.car[j] - sp_intercepts.car[iminus1];
- sp_intercepts.car[j] -= diff/2;
- sp_intercepts.car[iminus1] += diff/2;
- if (diff & 1)
- {
- if ((ufix16)(sp_intercepts.inttype[j] & FRACTION) +
- (ufix16)(sp_intercepts.inttype[iminus1] & FRACTION) > sp_intercepts.fracpix)
- sp_intercepts.car[iminus1]++;
- else
- sp_intercepts.car[j]--;
- }
- }
- }
- if (sp_globals.tcb.mirror == -1)
- {
- if (sp_intercepts.inttype[j-1] & END_INT)
- {
- for (jplus1 = j+1; !(sp_intercepts.inttype[jplus1] & END_INT); jplus1++)
- ;
- }
- else
- {
- jplus1 = j-1;
- }
- }
-
- if (!(sp_intercepts.inttype[jplus1] & LEFT_INT) &&
- sp_intercepts.car[j] > sp_intercepts.car[jplus1])
- {
- k = sp_intercepts.cdr[y - 1];
- while (k > 0)
- {
- nextk = sp_intercepts.cdr[k];
- if (!(sp_intercepts.inttype[k] & LEFT_INT) &&
- (sp_intercepts.inttype[nextk] & LEFT_INT) &&
- sp_intercepts.car[nextk] > sp_intercepts.car[jplus1])
- {
- if ((diff=sp_intercepts.car[j] - sp_intercepts.car[k]) > 0)
- {
- if (diff <= (sp_intercepts.car[nextk] - sp_intercepts.car[jplus1]))
- {
- sp_intercepts.car[j] -= diff/2;
- sp_intercepts.car[k] += diff/2;
- if (diff & 1)
- {
- if ((ufix16)(sp_intercepts.inttype[j] & FRACTION) +
- (ufix16)(sp_intercepts.inttype[k] & FRACTION) > sp_intercepts.fracpix)
- sp_intercepts.car[j]--;
- else
- sp_intercepts.car[k]++;
- }
- }
- else
- {
- diff = sp_intercepts.car[nextk] - sp_intercepts.car[jplus1];
- sp_intercepts.car[nextk] -= diff/2;
- sp_intercepts.car[jplus1] += diff/2;
- if (diff & 1)
- {
- if ((ufix16)(sp_intercepts.inttype[jplus1] & FRACTION) +
- (ufix16)(sp_intercepts.inttype[nextk] & FRACTION) > sp_intercepts.fracpix)
- sp_intercepts.car[nextk]--;
- else
- sp_intercepts.car[jplus1]++;
- }
- }
- }
- break;
- }
- k = nextk;
- }
- }
- if (j > 0 && sp_intercepts.car[j-1] > sp_intercepts.car[i] && !(sp_intercepts.inttype[j-1] & END_INT))
- {
- diff = sp_intercepts.car[j-1] - sp_intercepts.car[i];
- sp_intercepts.car[i] += diff/2;
- sp_intercepts.car[j-1] -= diff/2;
- if (diff & 1)
- {
- if ((ufix16)(sp_intercepts.inttype[i] & FRACTION) + (ufix16)(sp_intercepts.inttype[j-1] & FRACTION) > sp_intercepts.fracpix)
- sp_intercepts.car[i]++;
- else
- sp_intercepts.car[j-1]--;
- }
- }
- if (sp_intercepts.car[i+1] < sp_intercepts.car[j] && !(sp_intercepts.inttype[i] & END_INT))
- {
- diff = sp_intercepts.car[j] - sp_intercepts.car[i+1];
- sp_intercepts.car[j] -= diff/2;
- sp_intercepts.car[i+1] += diff/2;
- if (diff & 1)
- {
- if ((ufix16)(sp_intercepts.inttype[j] & FRACTION) + (ufix16)(sp_intercepts.inttype[i+1] & FRACTION) > sp_intercepts.fracpix)
- sp_intercepts.car[i+1]++;
- else
- sp_intercepts.car[j]--;
- }
-
- }
- previ = i;
- }
- i = sp_intercepts.cdr[i];
- }
- }
-
-#if DEBUG
-printf("\nPROC_INTERCEPTS_SCREEN: Intercept lists after:\n");
-/* Print out all of the intercept info */
-scan_line = sp_globals.ymax - first_y - 1;
-
-for (y = first_y - sp_globals.y_band.band_min; y >= last_y; y--, scan_line++)
- {
- i = y; /* Index head of intercept list */
- while ((i = sp_intercepts.cdr[i]) != 0) /* Link to next intercept if present */
- {
- if ((from = sp_intercepts.car[i] - sp_globals.xmin) < 0)
- from = 0; /* Clip to sp_globals.xmin boundary */
- i = sp_intercepts.cdr[i]; /* Link to next intercept */
- if (i == 0) /* End of list? */
- {
- printf("****** proc_intercepts: odd number of intercepts\n");
- break;
- }
- if ((to = sp_intercepts.car[i]) > sp_globals.xmax)
- to = sp_globals.xmax - sp_globals.xmin; /* Clip to sp_globals.xmax boundary */
- else
- to -= sp_globals.xmin;
- printf(" Y = %2d (scanline %2d): %d %d:\n",
- y + sp_globals.y_band.band_min, scan_line, from, to);
- }
- }
-#endif
-
-/* INTERCEPTS ALL PATCHED, NOW DRAW THE IMAGE */
-scan_line = sp_globals.ymax - first_y - 1;
-
-for (y = first_y - sp_globals.y_band.band_min; y >= last_y; y--, scan_line++)
- {
- i = sp_intercepts.cdr[y]; /* Index head of intercept list */
- while (i != 0) /* Link to next intercept if present */
- {
- from = sp_intercepts.car[i];
- i = sp_intercepts.cdr[i]; /* Link to next intercept */
- to = sp_intercepts.car[i];
-#if INCL_CLIPPING
- if (clipleft)
- {
- if (to <= xmin)
- {
- i = sp_intercepts.cdr[i];
- continue;
- }
- if (from < xmin)
- from = xmin;
- }
- if (clipright)
- {
- if (from >= xmax)
- {
- i = sp_intercepts.cdr[i];
- continue;
- }
- if (to > xmax)
- to = xmax;
- }
-#endif
- set_bitmap_bits(scan_line, from-sp_globals.xmin, to-sp_globals.xmin);
- i = sp_intercepts.cdr[i];
- }
- }
-}
-
-#endif
diff --git a/nx-X11/lib/font/Speedo/out_util.c b/nx-X11/lib/font/Speedo/out_util.c
deleted file mode 100644
index 171241030..000000000
--- a/nx-X11/lib/font/Speedo/out_util.c
+++ /dev/null
@@ -1,341 +0,0 @@
-/* $Xorg: out_util.c,v 1.3 2000/08/17 19:46:26 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/out_util.c,v 1.2 1999/02/07 06:18:17 dawes Exp $ */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#define DEBUG 0
-
-/*************************** O U T _ U T I L . C *****************************
- * *
- * This is a utility module share by all bitmap output modules *
- * *
- *****************************************************************************/
-
-
-#include "spdo_prv.h" /* General definitions for Speedo */
-/* absolute value function */
-#define ABS(X) ( (X < 0) ? -X : X)
-#if INCL_BLACK || INCL_2D || INCL_SCREEN
-
-FUNCTION void init_char_out(
-GDECL
-point_t Psw, point_t Pmin, point_t Pmax)
-{
-sp_globals.set_width.x = (fix31)Psw.x << sp_globals.poshift;
-sp_globals.set_width.y = (fix31)Psw.y << sp_globals.poshift;
-set_first_band_out(Pmin, Pmax);
-init_intercepts_out();
-if (sp_globals.normal)
- {
- sp_globals.bmap_xmin = Pmin.x;
- sp_globals.bmap_xmax = Pmax.x;
- sp_globals.bmap_ymin = Pmin.y;
- sp_globals.bmap_ymax = Pmax.y;
- sp_globals.extents_running = FALSE;
- }
-else
- {
- sp_globals.bmap_xmin = 32000;
- sp_globals.bmap_xmax = -32000;
- sp_globals.bmap_ymin = 32000;
- sp_globals.bmap_ymax = -32000;
- sp_globals.extents_running = TRUE;
- }
-sp_globals.first_pass = TRUE;
-}
-
-FUNCTION void begin_sub_char_out(
-GDECL
-point_t Psw,
-point_t Pmin,
-point_t Pmax)
-/* Called at the start of each sub-character in a composite character
- */
-{
-#if DEBUG
-printf("BEGIN_SUB_CHAR_out(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f\n",
- (real)Psw.x / (real)sp_globals.onepix, (real)Psw.y / (real)sp_globals.onepix,
- (real)Pmin.x / (real)sp_globals.onepix, (real)Pmin.y / (real)sp_globals.onepix,
- (real)Pmax.x / (real)sp_globals.onepix, (real)Pmax.y / (real)sp_globals.onepix);
-#endif
-restart_intercepts_out();
-if (!sp_globals.extents_running)
- {
- sp_globals.bmap_xmin = 32000;
- sp_globals.bmap_xmax = -32000;
- sp_globals.bmap_ymin = 32000;
- sp_globals.bmap_ymax = -32000;
- sp_globals.extents_running = TRUE;
- }
-}
-
-FUNCTION void curve_out(
-GDECL
-point_t P1, point_t P2, point_t P3,
-fix15 depth)
-/* Called for each curve in the transformed character if curves out enabled
- */
-{
-#if DEBUG
-printf("CURVE_OUT(%3.1f, %3.1f, %3.1f, %3.1f, %3.1f, %3.1f)\n",
- (real)P1.x / (real)sp_globals.onepix, (real)P1.y / (real)sp_globals.onepix,
- (real)P2.x / (real)sp_globals.onepix, (real)P2.y / (real)sp_globals.onepix,
- (real)P3.x / (real)sp_globals.onepix, (real)P3.y / (real)sp_globals.onepix);
-#endif
-}
-
-
-
-FUNCTION void end_contour_out()
-GDECL
-/* Called after the last vector in each contour
- */
-{
-#if DEBUG
-printf("END_CONTOUR_OUT()\n");
-#endif
-}
-
-
-FUNCTION void end_sub_char_out()
-GDECL
-/* Called after the last contour in each sub-character in a compound character
- */
-{
-#if DEBUG
-printf("END_SUB_CHAR_OUT()\n");
-#endif
-}
-
-
-FUNCTION void init_intercepts_out()
-GDECL
-/* Called to initialize intercept storage data structure
- */
-
-{
-fix15 i;
-fix15 no_lists;
-
-#if DEBUG
-printf(" Init intercepts (Y band from %d to %d)\n", sp_globals.y_band.band_min, sp_globals.y_band.band_max);
-if (sp_globals.x_scan_active)
- printf(" (X band from %d to %d)\n", sp_globals.x_band.band_min, sp_globals.x_band.band_max);
-#endif
-
-sp_globals.intercept_oflo = FALSE;
-
-sp_globals.no_y_lists = sp_globals.y_band.band_max - sp_globals.y_band.band_min + 1;
-#if INCL_2D
-if (sp_globals.output_mode == MODE_2D)
- {
- sp_globals.no_x_lists = sp_globals.x_scan_active ?
- sp_globals.x_band.band_max - sp_globals.x_band.band_min + 1 : 0;
- no_lists = sp_globals.no_y_lists + sp_globals.no_x_lists;
- }
-else
-#endif
- no_lists = sp_globals.no_y_lists;
-
-#if INCL_2D
-sp_globals.y_band.band_floor = 0;
-sp_globals.y_band.band_ceiling = sp_globals.no_y_lists;
-#endif
-
-if (no_lists >= MAX_INTERCEPTS) /* Not enough room for list table? */
- {
- no_lists = sp_globals.no_y_lists = MAX_INTERCEPTS;
- sp_globals.intercept_oflo = TRUE;
- sp_globals.y_band.band_min = sp_globals.y_band.band_max - sp_globals.no_y_lists + 1;
-#if INCL_2D
- sp_globals.y_band.band_array_offset = sp_globals.y_band.band_min;
- sp_globals.y_band.band_ceiling = sp_globals.no_y_lists;
- sp_globals.no_x_lists = 0;
- sp_globals.x_scan_active = FALSE;
-#endif
- }
-
-for (i = 0; i < no_lists; i++) /* For each active value... */
- {
-#if INCL_SCREEN
- if (sp_globals.output_mode == MODE_SCREEN)
- sp_intercepts.inttype[i]=0;
-#endif
- sp_intercepts.cdr[i] = 0; /* Mark each intercept list empty */
- }
-
-sp_globals.first_offset = sp_globals.next_offset = no_lists;
-
-#if INCL_2D
-sp_globals.y_band.band_array_offset = sp_globals.y_band.band_min;
-sp_globals.x_band.band_array_offset = sp_globals.x_band.band_min - sp_globals.no_y_lists;
-sp_globals.x_band.band_floor = sp_globals.no_y_lists;
-sp_globals.x_band.band_ceiling = no_lists;
-#endif
-#if INCL_SCREEN
-sp_intercepts.inttype[sp_globals.no_y_lists-1] = END_INT;
-#endif
-
-}
-
-
-FUNCTION void restart_intercepts_out()
-GDECL
-
-/* Called by sp_make_char when a new sub character is started
- * Freezes current sorted lists
- */
-
-{
-
-#if DEBUG
-printf(" Restart intercepts:\n");
-#endif
-sp_globals.first_offset = sp_globals.next_offset;
-}
-
-
-
-FUNCTION void set_first_band_out(
-GDECL
-point_t Pmin,
-point_t Pmax)
-{
-
-sp_globals.ymin = Pmin.y;
-sp_globals.ymax = Pmax.y;
-
-sp_globals.ymin = (sp_globals.ymin - sp_globals.onepix + 1) >> sp_globals.pixshift;
-sp_globals.ymax = (sp_globals.ymax + sp_globals.onepix - 1) >> sp_globals.pixshift;
-
-#if INCL_CLIPPING
- switch(sp_globals.tcb0.xtype)
- {
- case 1: /* 180 degree rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_ymin = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymin = sp_globals.clip_ymin >> sp_globals.multshift;
- sp_globals.clip_ymin = -1* sp_globals.clip_ymin;
- if (sp_globals.ymin < sp_globals.clip_ymin)
- sp_globals.ymin = sp_globals.clip_ymin;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_ymax = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymax = sp_globals.clip_ymax >> sp_globals.multshift;
- if (sp_globals.ymax > sp_globals.clip_ymax)
- sp_globals.ymax = sp_globals.clip_ymax;
- }
- break;
- case 2: /* 90 degree rotation */
- sp_globals.clip_ymax = 0;
- if ((sp_globals.specs.flags & CLIP_TOP) &&
- (sp_globals.ymax > sp_globals.clip_ymax))
- sp_globals.ymax = sp_globals.clip_ymax;
- sp_globals.clip_ymin = ((sp_globals.set_width.y+32768L) >> 16);
- if ((sp_globals.specs.flags & CLIP_BOTTOM) &&
- (sp_globals.ymin < sp_globals.clip_ymin))
- sp_globals.ymin = sp_globals.clip_ymin;
- break;
- case 3: /* 270 degree rotation */
- sp_globals.clip_ymax = ((sp_globals.set_width.y+32768L) >> 16);
- if ((sp_globals.specs.flags & CLIP_TOP) &&
- (sp_globals.ymax > sp_globals.clip_ymax))
- sp_globals.ymax = sp_globals.clip_ymax;
- sp_globals.clip_ymin = 0;
- if ((sp_globals.specs.flags & CLIP_BOTTOM) &&
- (sp_globals.ymin < sp_globals.clip_ymin))
- sp_globals.ymin = sp_globals.clip_ymin;
- break;
- default: /* this is for zero degree rotation and arbitrary rotation */
- if (sp_globals.specs.flags & CLIP_TOP)
- {
- sp_globals.clip_ymax = (fix31)((fix31)EM_TOP * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymax = sp_globals.clip_ymax >> sp_globals.multshift;
- if (sp_globals.ymax > sp_globals.clip_ymax)
- sp_globals.ymax = sp_globals.clip_ymax;
- }
- if (sp_globals.specs.flags & CLIP_BOTTOM)
- {
- sp_globals.clip_ymin = (fix31)((fix31)(-1 * EM_BOT) * sp_globals.tcb0.yppo + ((1<<sp_globals.multshift)/2));
- sp_globals.clip_ymin = sp_globals.clip_ymin >> sp_globals.multshift;
- sp_globals.clip_ymin = - sp_globals.clip_ymin;
- if (sp_globals.ymin < sp_globals.clip_ymin)
- sp_globals.ymin = sp_globals.clip_ymin;
- }
- break;
- }
-#endif
-sp_globals.y_band.band_min = sp_globals.ymin;
-sp_globals.y_band.band_max = sp_globals.ymax - 1;
-
-sp_globals.xmin = (Pmin.x + sp_globals.pixrnd) >> sp_globals.pixshift;
-sp_globals.xmax = (Pmax.x + sp_globals.pixrnd) >> sp_globals.pixshift;
-
-
-#if INCL_2D
-sp_globals.x_band.band_min = sp_globals.xmin - 1; /* subtract one pixel of "safety margin" */
-sp_globals.x_band.band_max = sp_globals.xmax /* - 1 + 1 */; /* Add one pixel of "safety margin" */
-#endif
-}
-
-
-
-
-
-
-
-FUNCTION void reduce_band_size_out()
-GDECL
-{
-sp_globals.y_band.band_min = sp_globals.y_band.band_max - ((sp_globals.y_band.band_max - sp_globals.y_band.band_min) >> 1);
-#if INCL_2D
-sp_globals.y_band.band_array_offset = sp_globals.y_band.band_min;
-#endif
-}
-
-
-FUNCTION boolean next_band_out()
-GDECL
-{
-fix15 tmpfix15;
-
-if (sp_globals.y_band.band_min <= sp_globals.ymin)
- return FALSE;
-tmpfix15 = sp_globals.y_band.band_max - sp_globals.y_band.band_min;
-sp_globals.y_band.band_max = sp_globals.y_band.band_min - 1;
-sp_globals.y_band.band_min = sp_globals.y_band.band_max - tmpfix15;
-if (sp_globals.y_band.band_min < sp_globals.ymin)
- sp_globals.y_band.band_min = sp_globals.ymin;
-#if INCL_2D
-sp_globals.y_band.band_array_offset = sp_globals.y_band.band_min;
-#endif
-return TRUE;
-}
-#endif
-
diff --git a/nx-X11/lib/font/Speedo/reset.c b/nx-X11/lib/font/Speedo/reset.c
deleted file mode 100644
index 4cb9f7de0..000000000
--- a/nx-X11/lib/font/Speedo/reset.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* $Xorg: reset.c,v 1.3 2000/08/17 19:46:26 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/reset.c,v 1.2 1999/02/07 06:18:17 dawes Exp $ */
-
-
-
-/******************************* R E S E T . C *******************************
- * *
- * This module provides initialization functions. *
- * *
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "spdo_prv.h" /* General definitions for Speedo */
-#include "keys.h" /* Font decryption keys */
-
-#define DEBUG 0
-
-#if DEBUG
-#include <stdio.h>
-#define SHOW(X) printf("X = %d\n", X)
-#else
-#define SHOW(X)
-#endif
-
-/***** GLOBAL VARIABLES *****/
-
-/***** GLOBAL FUNCTIONS *****/
-
-/***** EXTERNAL VARIABLES *****/
-
-/***** EXTERNAL FUNCTIONS *****/
-
-/***** STATIC VARIABLES *****/
-
-/***** STATIC FUNCTIONS *****/
-
-
-FUNCTION void reset()
-GDECL
-/*
- * Called by the host software to intialize the Speedo mechanism
- */
-{
-sp_globals.specs_valid = FALSE; /* Flag specs not valid */
-
-/* Reset decryption key */
-sp_globals.key32 = (KEY3 << 8) | KEY2;
-sp_globals.key4 = KEY4;
-sp_globals.key6 = KEY6;
-sp_globals.key7 = KEY7;
-sp_globals.key8 = KEY8;
-
-#if INCL_RULES
-sp_globals.constr.font_id_valid = FALSE;
-#endif
-
-#if INCL_MULTIDEV
-#if INCL_BLACK || INCL_SCREEN || INCL_2D
-sp_globals.bitmap_device_set = FALSE;
-#endif
-#if INCL_OUTLINE
-sp_globals.outline_device_set = FALSE;
-#endif
-#endif
-}
-
-#if INCL_KEYS
-FUNCTION void set_key(
-GDECL
-ufix8 key[]) /* Specified decryption key */
-/*
- * Dynamically sets font decryption key.
- */
-{
-sp_globals.key32 = ((ufix16)key[3] << 8) | key[2];
-sp_globals.key4 = key[4];
-sp_globals.key6 = key[6];
-sp_globals.key7 = key[7];
-sp_globals.key8 = key[8];
-}
-#endif
-
-
-
-FUNCTION ufix16 get_cust_no(
-GDECL
-buff_t font_buff)
-/*
- returns customer number from font
-*/
-{
-ufix8 FONTFAR *hdr2_org;
-ufix16 private_off;
-
-private_off = read_word_u(font_buff.org + FH_HEDSZ);
-if (private_off + FH_CUSNR > font_buff.no_bytes)
- {
- report_error(1); /* Insufficient font data loaded */
- return FALSE;
- }
-
-hdr2_org = font_buff.org + private_off;
-
-return (read_word_u(hdr2_org + FH_CUSNR));
-}
-
-
diff --git a/nx-X11/lib/font/Speedo/set_spcs.c b/nx-X11/lib/font/Speedo/set_spcs.c
deleted file mode 100644
index b69b13f34..000000000
--- a/nx-X11/lib/font/Speedo/set_spcs.c
+++ /dev/null
@@ -1,773 +0,0 @@
-/* $Xorg: set_spcs.c,v 1.3 2000/08/17 19:46:26 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/set_spcs.c,v 1.3 2001/01/17 19:43:17 dawes Exp $ */
-
-
-/*************************** S E T _ S P C S . C *****************************
- * *
- * This module implements all sp_set_specs() functionality. *
- * *
- ****************************************************************************/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#define SET_SPCS
-#include "spdo_prv.h" /* General definitions for Speedo */
-#include "keys.h"
-
-#define DEBUG 0
-
-#if DEBUG
-#include <stdio.h>
-#define SHOW(X) printf("X = %d\n", X)
-#else
-#define SHOW(X)
-#endif
-
-/***** GLOBAL VARIABLES *****/
-
-/***** GLOBAL FUNCTIONS *****/
-
-/****** EXTERNAL VARIABLES *****/
-
-/***** STATIC VARIABLES *****/
-
-
-/****** STATIC FUNCTIONS *****/
-
-static boolean sp_setup_consts(PROTO_DECL2 fix15 xmin, fix15 xmax,
- fix15 ymin, fix15 ymax);
-static void sp_setup_tcb(PROTO_DECL2 tcb_t GLOBALFAR *ptcb);
-static fix15 sp_setup_mult(PROTO_DECL2 fix31 input_mult);
-static fix31 sp_setup_offset(PROTO_DECL2 fix31 input_offset);
-
-
-
-FUNCTION boolean set_specs(
-GDECL
-specs_t STACKFAR *specsarg) /* Bundle of conversion specifications */
-/*
- * Called by host software to set character generation specifications
- */
-{
-fix31 offcd; /* Offset to start of character directory */
-fix31 ofcns; /* Offset to start of constraint data */
-fix31 cd_size; /* Size of character directory */
-fix31 no_bytes_min; /* Min number of bytes in font buffer */
-ufix16 font_id; /* Font ID */
-ufix16 private_off; /* offset to private header */
-fix15 xmin; /* Minimum X ORU value in font */
-fix15 xmax; /* Maximum X ORU value in font */
-fix15 ymin; /* Minimum Y ORU value in font */
-fix15 ymax; /* Maximum Y ORU value in font */
-
-sp_globals.specs_valid = FALSE; /* Flag specs not valid */
-
-sp_globals.specs = *specsarg; /* copy specs structure into sp_globals */
-sp_globals.pspecs = &sp_globals.specs;
-sp_globals.font = *sp_globals.pspecs->pfont;
-sp_globals.pfont = &sp_globals.font;
-sp_globals.font_org = sp_globals.font.org;
-
-if (read_word_u(sp_globals.font_org + FH_FMVER + 4) != 0x0d0a)
- {
- report_error(4); /* Font format error */
- return FALSE;
- }
-if (read_word_u(sp_globals.font_org + FH_FMVER + 6) != 0x0000)
- {
- report_error(4); /* Font format error */
- return FALSE;
- }
-
-if (get_cust_no(*specsarg->pfont) == 0)
- {
- sp_globals.key32 = 0;
- sp_globals.key4 = 0;
- sp_globals.key6 = 0;
- sp_globals.key7 = 0;
- sp_globals.key8 = 0;
- }
-else
- {
- sp_globals.key32 = (KEY3 << 8) | KEY2;
- sp_globals.key4 = KEY4;
- sp_globals.key6 = KEY6;
- sp_globals.key7 = KEY7;
- sp_globals.key8 = KEY8;
- }
-
-
-sp_globals.no_chars_avail = read_word_u(sp_globals.font_org + FH_NCHRF);
-
-/* Read sp_globals.orus per em from font header */
-sp_globals.orus_per_em = read_word_u(sp_globals.font_org + FH_ORUPM);
-
-/* compute address of private header */
-private_off = read_word_u(sp_globals.font_org + FH_HEDSZ);
-sp_globals.hdr2_org = sp_globals.font_org + private_off;
-
-/* set metric resolution if specified, default to outline res otherwise */
-if (private_off > EXP_FH_METRES)
- {
- sp_globals.metric_resolution = read_word_u(sp_globals.font_org + EXP_FH_METRES);
- }
-else
- {
- sp_globals.metric_resolution = sp_globals.orus_per_em;
- }
-
-#if INCL_METRICS
-sp_globals.kern.tkorg = sp_globals.font_org + read_long(sp_globals.hdr2_org + FH_OFFTK);
-sp_globals.kern.pkorg = sp_globals.font_org + read_long(sp_globals.hdr2_org + FH_OFFPK);
-sp_globals.kern.no_tracks = read_word_u(sp_globals.font_org + FH_NKTKS);
-sp_globals.kern.no_pairs = read_word_u(sp_globals.font_org + FH_NKPRS);
-#endif
-
-offcd = read_long(sp_globals.hdr2_org + FH_OFFCD); /* Read offset to character directory */
-ofcns = read_long(sp_globals.hdr2_org + FH_OFCNS); /* Read offset to constraint data */
-cd_size = ofcns - offcd;
-if ((((sp_globals.no_chars_avail << 1) + 3) != cd_size) &&
- (((sp_globals.no_chars_avail * 3) + 4) != cd_size))
- {
- report_error(4); /* Font format error */
- return FALSE;
- }
-
-#if INCL_LCD /* Dynamic character data load suppoorted? */
-#if INCL_METRICS
-no_bytes_min = read_long(sp_globals.hdr2_org + FH_OCHRD); /* Offset to character data */
-#else /* Dynamic character data load not supported? */
-no_bytes_min = read_long(sp_globals.hdr2_org + FH_OFFTK); /* Offset to track kerning data */
-#endif
-#else /* Dynamic character data load not supported? */
-no_bytes_min = read_long(sp_globals.hdr2_org + FH_NBYTE); /* Offset to EOF + 1 */
-#endif
-
-sp_globals.font_buff_size = sp_globals.pfont->no_bytes;
-if (sp_globals.font_buff_size < no_bytes_min) /* Minimum data not loaded? */
- {
- report_error(1); /* Insufficient font data loaded */
- return FALSE;
- }
-
-sp_globals.pchar_dir = sp_globals.font_org + offcd;
-sp_globals.first_char_idx = read_word_u(sp_globals.font_org + FH_FCHRF);
-
-/* Register font name with sp_globals.constraint mechanism */
-#if INCL_RULES
-font_id = read_word_u(sp_globals.font_org + FH_FNTID);
-if (!(sp_globals.constr.font_id_valid) || (sp_globals.constr.font_id != font_id))
- {
- sp_globals.constr.font_id = font_id;
- sp_globals.constr.font_id_valid = TRUE;
- sp_globals.constr.data_valid = FALSE;
- }
-sp_globals.constr.org = sp_globals.font_org + ofcns;
-sp_globals.constr.active = ((sp_globals.pspecs->flags & CONSTR_OFF) == 0);
-#endif
-
-/* Set up sliding point constants */
-/* Set pixel shift to accomodate largest transformed pixel value */
-xmin = read_word_u(sp_globals.font_org + FH_FXMIN);
-xmax = read_word_u(sp_globals.font_org + FH_FXMAX);
-ymin = read_word_u(sp_globals.font_org + FH_FYMIN);
-ymax = read_word_u(sp_globals.font_org + FH_FYMAX);
-
-if (!sp_setup_consts(xmin,xmax,ymin,ymax))
- {
- report_error(3); /* Requested specs out of range */
- return FALSE;
- }
-#if INCL_ISW
-/* save the value of the max x oru that the fixed point constants are based on*/
-sp_globals.isw_xmax = xmax;
-#endif
-
-/* Setup transformation control block */
-sp_setup_tcb(&sp_globals.tcb0);
-
-
-/* Select output module */
-sp_globals.output_mode = sp_globals.pspecs->flags & 0x0007;
-
-#if INCL_USEROUT
-if (!init_userout(sp_globals.pspecs))
-#endif
-
-switch (sp_globals.output_mode)
- {
-#if INCL_BLACK
-case MODE_BLACK: /* Output mode 0 (Black writer) */
- sp_globals.init_out = sp_init_black;
- sp_globals.begin_char = sp_begin_char_black;
- sp_globals.begin_sub_char = sp_begin_sub_char_out;
- sp_globals.begin_contour = sp_begin_contour_black;
- sp_globals.curve = sp_curve_out;
- sp_globals.line = sp_line_black;
- sp_globals.end_contour = sp_end_contour_out;
- sp_globals.end_sub_char = sp_end_sub_char_out;
- sp_globals.end_char = sp_end_char_black;
- break;
-#endif
-
-#if INCL_SCREEN
-case MODE_SCREEN: /* Output mode 1 (Screen writer) */
- sp_globals.init_out = sp_init_screen;
- sp_globals.begin_char = sp_begin_char_screen;
- sp_globals.begin_sub_char = sp_begin_sub_char_out;
- sp_globals.begin_contour = sp_begin_contour_screen;
- sp_globals.curve = sp_curve_screen;
- sp_globals.line = sp_line_screen;
- sp_globals.end_contour = sp_end_contour_screen;
- sp_globals.end_sub_char = sp_end_sub_char_out;
- sp_globals.end_char = sp_end_char_screen;
- break;
-#endif
-
-#if INCL_OUTLINE
-case MODE_OUTLINE: /* Output mode 2 (Vector) */
- sp_globals.init_out = sp_init_outline;
- sp_globals.begin_char = sp_begin_char_outline;
- sp_globals.begin_sub_char = sp_begin_sub_char_outline;
- sp_globals.begin_contour = sp_begin_contour_outline;
- sp_globals.curve = sp_curve_outline;
- sp_globals.line = sp_line_outline;
- sp_globals.end_contour = sp_end_contour_outline;
- sp_globals.end_sub_char = sp_end_sub_char_outline;
- sp_globals.end_char = sp_end_char_outline;
- break;
-#endif
-
-#if INCL_2D
-case MODE_2D: /* Output mode 3 */
- sp_globals.init_out = sp_init_2d;
- sp_globals.begin_char = sp_begin_char_2d;
- sp_globals.begin_sub_char = sp_begin_sub_char_out;
- sp_globals.begin_contour = sp_begin_contour_2d;
- sp_globals.curve = sp_curve_out;
- sp_globals.line = sp_line_2d;
- sp_globals.end_contour = sp_end_contour_out;
- sp_globals.end_sub_char = sp_end_sub_char_out;
- sp_globals.end_char = sp_end_char_2d;
- break;
-#endif
-
-default:
- report_error(8); /* Unsupported mode requested */
- return FALSE;
- }
-
- if (!fn_init_out(sp_globals.pspecs))
- {
- report_error(5);
- return FALSE;
- }
-
-
-sp_globals.curves_out = sp_globals.pspecs->flags & CURVES_OUT;
-
-if (sp_globals.pspecs->flags & BOGUS_MODE) /* Linear transformation requested? */
- {
- sp_globals.tcb0.xtype = sp_globals.tcb0.ytype = 4;
- }
-else /* Intelligent transformation requested? */
- {
-#if INCL_RULES
-#else
- report_error(7); /* Rules requested; not supported */
- return FALSE;
-#endif
- }
-
-if ((sp_globals.pspecs->flags & SQUEEZE_LEFT) ||
- (sp_globals.pspecs->flags & SQUEEZE_RIGHT) ||
- (sp_globals.pspecs->flags & SQUEEZE_TOP) ||
- (sp_globals.pspecs->flags & SQUEEZE_BOTTOM) )
- {
-#if (INCL_SQUEEZING)
-#else
- report_error(11);
- return FALSE;
-#endif
- }
-
-if ((sp_globals.pspecs->flags & CLIP_LEFT) ||
- (sp_globals.pspecs->flags & CLIP_RIGHT) ||
- (sp_globals.pspecs->flags & CLIP_TOP) ||
- (sp_globals.pspecs->flags & CLIP_BOTTOM) )
- {
-#if (INCL_CLIPPING)
-#else
- report_error(11);
- return FALSE;
-#endif
- }
-
-sp_globals.specs_valid = TRUE;
-return TRUE;
-}
-
-
-
-#if INCL_MULTIDEV
-#if INCL_BLACK || INCL_SCREEN || INCL_2D
-FUNCTION boolean set_bitmap_device(
-GDECL
-bitmap_t *bfuncs,
-ufix16 size)
-{
-
-if (size != sizeof(sp_globals.bitmap_device))
- return FALSE;
-
-sp_globals.bitmap_device = *bfuncs;
-sp_globals.bitmap_device_set = TRUE;
-}
-#endif
-
-#if INCL_OUTLINE
-FUNCTION boolean set_outline_device(
-GDECL
-outline_t *ofuncs,
-ufix16 size)
-{
-
-if (size != sizeof(sp_globals.outline_device))
- return FALSE;
-
-sp_globals.outline_device = *ofuncs;
-sp_globals.outline_device_set = TRUE;
-}
-#endif
-#endif
-
-
-#ifdef old
-FUNCTION boolean sp_setup_consts(
-GDECL
-fix15 xmin, /* Minimum X ORU value in font */
-fix15 xmax, /* Maximum X ORU value in font */
-fix15 ymin, /* Minimum Y ORU value in font */
-fix15 ymax) /* Maximum Y ORU value in font */
-#else
-static FUNCTION boolean sp_setup_consts(
-GDECL
-fix15 xmin, /* Minimum X ORU value in font */
-fix15 xmax, /* Maximum X ORU value in font */
-fix15 ymin, /* Minimum Y ORU value in font */
-fix15 ymax) /* Maximum Y ORU value in font */
-#endif
-/*
- * Sets the following constants used for fixed point arithmetic:
- * sp_globals.multshift multipliers and products; range is 14 to 8
- * sp_globals.pixshift pixels: range is 0 to 8
- * sp_globals.mpshift shift from product to sub-pixels (sp_globals.multshift - sp_globals.pixshift)
- * sp_globals.multrnd rounding for products
- * sp_globals.pixrnd rounding for pixels
- * sp_globals.mprnd rounding for sub-pixels
- * sp_globals.onepix 1 pixel in shifted pixel units
- * sp_globals.pixfix mask to eliminate fractional bits of shifted pixels
- * sp_globals.depth_adj curve splitting depth adjustment
- * Returns FALSE if specs are out of range
- */
-{
-fix31 mult; /* Successive multiplier values */
-ufix32 num; /* Numerator of largest multiplier value */
-ufix32 numcopy; /* Copy of numerator */
-ufix32 denom; /* Denominator of largest multiplier value */
-ufix32 denomcopy; /* Copy of denominator */
-ufix32 pix_max; /* Maximum pixel rounding error */
-fix31 xmult; /* Coefficient of X oru value in transformation */
-fix31 ymult; /* Coefficient of Y oru value in transformation */
-fix31 offset; /* Constant in transformation */
-fix15 i; /* Loop counter */
-fix15 x, y; /* Successive corners of bounding box in ORUs */
-fix31 pixval; /* Successive pixel values multiplied by orus per em */
-fix15 xx = 0, yy = 0;/* Bounding box corner that produces max pixel value */
-
-/* Determine numerator and denominator of largest multiplier value */
-mult = sp_globals.pspecs->xxmult >> 16;
-if (mult < 0)
- mult = -mult;
-num = mult;
-
-mult = sp_globals.pspecs->xymult >> 16;
-if (mult < 0)
- mult = -mult;
-if (mult > num)
- num = mult;
-
-mult = sp_globals.pspecs->yxmult >> 16;
-if (mult < 0)
- mult = -mult;
-if (mult > num)
- num = mult;
-
-mult = sp_globals.pspecs->yymult >> 16;
-if (mult < 0)
- mult = -mult;
-if (mult > num)
- num = mult;
-num++; /* Max absolute pixels per em (rounded up) */
-denom = (ufix32)sp_globals.orus_per_em;
-
-/* Set curve splitting depth adjustment to accomodate largest multiplier value */
-sp_globals.depth_adj = 0; /* 0 = 0.5 pel, 1 = 0.13 pel, 2 = 0.04 pel accuracy */
-denomcopy = denom;
-/* The following two occurances of a strange method of shifting twice by 1
- are intentional and should not be changed to a single shift by 2.
- It prevents MicroSoft C 5.1 from generating functions calls to do the shift.
- Worse, using the REENTRANT_ALLOC option in conjunction with the /AC compiler
- option, the function appears to be called incorrectly, causing depth_adj to always
- be set to -7, causing very angular characters. */
-
-while ((num > denomcopy) && (sp_globals.depth_adj < 5)) /* > 1, 4, 16, ... pixels per oru? */
- {
- denomcopy <<= 1;
- denomcopy <<= 1;
- sp_globals.depth_adj++; /* Add 1, 2, 3, ... to depth adjustment */
- }
-numcopy = num << 2;
-while ((numcopy <= denom) && (sp_globals.depth_adj > -4)) /* <= 1/4, 1/16, 1/64 pix per oru? */
- {
- numcopy <<= 1;
- numcopy <<= 1;
- sp_globals.depth_adj--; /* Subtract 1, 2, 3, ... from depth adjustment */
- }
-SHOW(sp_globals.depth_adj);
-
-/* Set multiplier shift to accomodate largest multiplier value */
-sp_globals.multshift = 14;
-numcopy = num;
-while (numcopy >= denom) /* More than 1, 2, 4, ... pix per oru? */
- {
- numcopy >>= 1;
- sp_globals.multshift--; /* sp_globals.multshift is 13, 12, 11, ... */
- }
-
-sp_globals.multrnd = ((fix31)1 << sp_globals.multshift) >> 1;
-SHOW(sp_globals.multshift);
-
-
-pix_max = (ufix32)( 0xffff & read_word_u(sp_globals.hdr2_org + FH_PIXMX));
-
-num = 0;
-xmult = ((sp_globals.pspecs->xxmult >> 16) + 1) >> 1;
-ymult = ((sp_globals.pspecs->xymult >> 16) + 1) >> 1;
-offset = ((sp_globals.pspecs->xoffset >> 16) + 1) >> 1;
-for (i = 0; i < 8; i++)
- {
- if (i == 4)
- {
- xmult = ((sp_globals.pspecs->yxmult >> 16) + 1) >> 1;
- ymult = ((sp_globals.pspecs->yymult >> 16) + 1) >> 1;
- offset = ((sp_globals.pspecs->yoffset >> 16) + 1) >> 1;
- }
- x = (i & BIT1)? xmin: xmax;
- y = (i & BIT0)? ymin: ymax;
- pixval = (fix31)x * xmult + (fix31)y * ymult + offset * denom;
- if (pixval < 0)
- pixval = -pixval;
- if (pixval > num)
- {
- num = pixval;
- xx = x;
- yy = y;
- }
- }
-if (xx < 0)
- xx = -xx;
-if (yy < 0)
- yy = -yy;
-num += xx + yy + ((pix_max + 2) * denom);
- /* Allow (with 2:1 safety margin) for 1 pixel rounding errors in */
- /* xmult, ymult and offset values, pix_max pixel expansion */
- /* due to intelligent scaling, and */
- /* 1 pixel rounding of overall character position */
-denom = denom << 14; /* Note num is in units of half pixels times orus per em */
-
-sp_globals.pixshift = -1;
-while ((num <= denom) && (sp_globals.pixshift < 8)) /* Max pixels <= 32768, 16384, 8192, ... pixels? */
- {
- num <<= 1;
- sp_globals.pixshift++; /* sp_globals.pixshift = 0, 1, 2, ... */
- }
-if (sp_globals.pixshift < 0)
- return FALSE;
-
-SHOW(sp_globals.pixshift);
-sp_globals.poshift = 16 - sp_globals.pixshift;
-
-sp_globals.onepix = (fix15)1 << sp_globals.pixshift;
-sp_globals.pixrnd = sp_globals.onepix >> 1;
-sp_globals.pixfix = ~0 << sp_globals.pixshift;
-
-sp_globals.mpshift = sp_globals.multshift - sp_globals.pixshift;
-if (sp_globals.mpshift < 0)
- return FALSE;
-sp_globals.mprnd = ((fix31)1 << sp_globals.mpshift) >> 1;
-
-return TRUE;
-}
-
-#ifdef old
-FUNCTION void sp_setup_tcb(
-GDECL
-tcb_t GLOBALFAR *ptcb) /* Pointer to transformation control bloxk */
-#else
-static FUNCTION void sp_setup_tcb(
-GDECL
-tcb_t GLOBALFAR *ptcb) /* Pointer to transformation control bloxk */
-#endif
-/*
- * Convert transformation coeffs to internal form
- */
-{
-
-ptcb->xxmult = sp_setup_mult(sp_globals.pspecs->xxmult);
-ptcb->xymult = sp_setup_mult(sp_globals.pspecs->xymult);
-ptcb->xoffset = sp_setup_offset(sp_globals.pspecs->xoffset);
-ptcb->yxmult = sp_setup_mult(sp_globals.pspecs->yxmult);
-ptcb->yymult = sp_setup_mult(sp_globals.pspecs->yymult);
-ptcb->yoffset = sp_setup_offset(sp_globals.pspecs->yoffset);
-
-SHOW(ptcb->xxmult);
-SHOW(ptcb->xymult);
-SHOW(ptcb->xoffset);
-SHOW(ptcb->yxmult);
-SHOW(ptcb->yymult);
-SHOW(ptcb->yoffset);
-
-type_tcb(ptcb); /* Classify transformation type */
-}
-
-FUNCTION static fix15 sp_setup_mult(
-GDECL
-fix31 input_mult) /* Multiplier in input format */
-/*
- * Called by sp_setup_tcb() to convert multiplier in transformation
- * matrix from external to internal form.
- */
-{
-fix15 imshift; /* Right shift to internal format */
-fix31 imdenom; /* Divisor to internal format */
-fix31 imrnd; /* Rounding for division operation */
-
-imshift = 15 - sp_globals.multshift;
-imdenom = (fix31)sp_globals.orus_per_em << imshift;
-imrnd = imdenom >> 1;
-
-input_mult >>= 1;
-if (input_mult >= 0)
- return (fix15)((input_mult + imrnd) / imdenom);
-else
- return -(fix15)((-input_mult + imrnd) / imdenom);
-}
-
-FUNCTION static fix31 sp_setup_offset(
-GDECL
-fix31 input_offset) /* Multiplier in input format */
-/*
- * Called by sp_setup_tcb() to convert offset in transformation
- * matrix from external to internal form.
- */
-{
-fix15 imshift; /* Right shift to internal format */
-fix31 imrnd; /* Rounding for right shift operation */
-
-imshift = 15 - sp_globals.multshift;
-imrnd = ((fix31)1 << imshift) >> 1;
-
-return (((input_offset >> 1) + imrnd) >> imshift) + sp_globals.mprnd;
-}
-
-FUNCTION void type_tcb(
-GDECL
-tcb_t GLOBALFAR *ptcb) /* Pointer to transformation control bloxk */
-{
-fix15 x_trans_type;
-fix15 y_trans_type;
-fix15 xx_mult;
-fix15 xy_mult;
-fix15 yx_mult;
-fix15 yy_mult;
-fix15 h_pos;
-fix15 v_pos;
-fix15 x_ppo;
-fix15 y_ppo;
-fix15 x_pos;
-fix15 y_pos;
-
-/* check for mirror image transformations */
-xx_mult = ptcb->xxmult;
-xy_mult = ptcb->xymult;
-yx_mult = ptcb->yxmult;
-yy_mult = ptcb->yymult;
-
-ptcb->mirror = ((((fix31)xx_mult*(fix31)yy_mult)-
- ((fix31)xy_mult*(fix31)yx_mult)) < 0) ? -1 : 1;
-
-if (sp_globals.pspecs->flags & BOGUS_MODE) /* Linear transformation requested? */
- {
- ptcb->xtype = 4;
- ptcb->ytype = 4;
-
- ptcb->xppo = 0;
- ptcb->yppo = 0;
- ptcb->xpos = 0;
- ptcb->ypos = 0;
- }
-else /* Intelligent tranformation requested? */
- {
- h_pos = ((ptcb->xoffset >> sp_globals.mpshift) + sp_globals.pixrnd) & sp_globals.pixfix;
- v_pos = ((ptcb->yoffset >> sp_globals.mpshift) + sp_globals.pixrnd) & sp_globals.pixfix;
-
- x_trans_type = 4;
- x_ppo = 0;
- x_pos = 0;
-
- y_trans_type = 4;
- y_ppo = 0;
- y_pos = 0;
-
- if (xy_mult == 0)
- {
- if (xx_mult >= 0)
- {
- x_trans_type = 0; /* X pix is function of X orus only */
- x_ppo = xx_mult;
- x_pos = h_pos;
- }
- else
- {
- x_trans_type = 1; /* X pix is function of -X orus only */
- x_ppo = -xx_mult;
- x_pos = -h_pos;
- }
- }
-
- else if (xx_mult == 0)
- {
- if (xy_mult >= 0)
- {
- x_trans_type = 2; /* X pix is function of Y orus only */
- y_ppo = xy_mult;
- y_pos = h_pos;
- }
- else
- {
- x_trans_type = 3; /* X pix is function of -Y orus only */
- y_ppo = -xy_mult;
- y_pos = -h_pos;
- }
- }
-
- if (yx_mult == 0)
- {
- if (yy_mult >= 0)
- {
- y_trans_type = 0; /* Y pix is function of Y orus only */
- y_ppo = yy_mult;
- y_pos = v_pos;
- }
- else
- {
- y_trans_type = 1; /* Y pix is function of -Y orus only */
- y_ppo = -yy_mult;
- y_pos = -v_pos;
- }
- }
- else if (yy_mult == 0)
- {
- if (yx_mult >= 0)
- {
- y_trans_type = 2; /* Y pix is function of X orus only */
- x_ppo = yx_mult;
- x_pos = v_pos;
- }
- else
- {
- y_trans_type = 3; /* Y pix is function of -X orus only */
- x_ppo = -yx_mult;
- x_pos = -v_pos;
- }
- }
-
- ptcb->xtype = x_trans_type;
- ptcb->ytype = y_trans_type;
-
- ptcb->xppo = x_ppo;
- ptcb->yppo = y_ppo;
- ptcb->xpos = x_pos;
- ptcb->ypos = y_pos;
- }
-
-sp_globals.normal = (ptcb->xtype != 4) && (ptcb->ytype != 4);
-
-ptcb->xmode = 4;
-ptcb->ymode = 4;
-
-SHOW(ptcb->xtype);
-SHOW(ptcb->ytype);
-SHOW(ptcb->xppo);
-SHOW(ptcb->yppo);
-SHOW(ptcb->xpos);
-SHOW(ptcb->ypos);
-}
-
-FUNCTION fix31 read_long(
-GDECL
-ufix8 FONTFAR *pointer) /* Pointer to first byte of encrypted 3-byte integer */
-/*
- * Reads a 3-byte encrypted integer from the byte string starting at
- * the specified point.
- * Returns the decrypted value read as a signed integer.
- */
-{
-fix31 tmpfix31;
-
-tmpfix31 = (fix31)((*pointer++) ^ sp_globals.key4) << 8; /* Read middle byte */
-tmpfix31 += (fix31)(*pointer++) << 16; /* Read most significant byte */
-tmpfix31 += (fix31)((*pointer) ^ sp_globals.key6); /* Read least significant byte */
-return tmpfix31;
-}
-
-FUNCTION fix15 read_word_u(
-GDECL
-ufix8 FONTFAR *pointer) /* Pointer to first byte of unencrypted 2-byte integer */
-/*
- * Reads a 2-byte unencrypted integer from the byte string starting at
- * the specified point.
- * Returns the decrypted value read as a signed integer.
- */
-{
-fix15 tmpfix15;
-
-tmpfix15 = (fix15)(*pointer++) << 8; /* Read most significant byte */
-tmpfix15 += (fix15)(*pointer); /* Add least significant byte */
-return tmpfix15;
-}
-
-
diff --git a/nx-X11/lib/font/Speedo/set_trns.c b/nx-X11/lib/font/Speedo/set_trns.c
deleted file mode 100644
index 3b8f60378..000000000
--- a/nx-X11/lib/font/Speedo/set_trns.c
+++ /dev/null
@@ -1,1324 +0,0 @@
-/* $Xorg: set_trns.c,v 1.3 2000/08/17 19:46:27 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/set_trns.c,v 1.5tsi Exp $ */
-
-
-
-/*************************** S E T _ T R N S . C *****************************
- * *
- * This module is called from do_char.c to set up the intelligent *
- * transformation for one character (or sub-character of a composite *
- * character.
- * *
- ****************************************************************************/
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "spdo_prv.h" /* General definitions for Speedo */
-
-#define DEBUG 0
-
-#if DEBUG
-#include <stdio.h>
-#define SHOW(X) printf("X = %d\n", X)
-#else
-#define SHOW(X)
-#endif
-/***** LOCAL MACROS *****/
-
-#define SQUEEZE_X_ORU(A,B,C) ((((fix31)A * (fix31)B) + C) >> 16)
-#define ABS(A) ((A < 0)? -A:A) /* absolute value */
-#define IMPORT_FACTOR \
- shift = 16;\
- while (*x_factor > (0x7fffffffL / (isw_scale >> (16 - shift))))\
- shift--;\
- *x_factor = (*x_factor * (isw_scale>>(16-shift))) >> shift;
-
-/***** GLOBAL VARIABLES *****/
-
-/***** GLOBAL FUNCTIONS *****/
-
-/***** EXTERNAL VARIABLES *****/
-
-/***** EXTERNAL FUNCTIONS *****/
-
-/***** STATIC VARIABLES *****/
-
-/***** STATIC FUNCTIONS *****/
-
-static void sp_constr_update(PROTO_DECL1);
-static ufix8 FONTFAR *sp_setup_pix_table(PROTO_DECL2 ufix8 FONTFAR *pointer,boolean short_form,fix15 no_X_ctrl_zones,fix15 no_Y_ctrl_zones);
-static ufix8 FONTFAR *sp_setup_int_table(PROTO_DECL2 ufix8 FONTFAR *pointer,fix15 no_X_int_zones,fix15 no_Y_int_zones);
-
-
-FUNCTION void init_tcb()
-GDECL
-/*
- * Called by sp_make_char() and make_comp_char() to initialize the current
- * transformation control block to the top level transformation.
- */
-{
-sp_globals.tcb = sp_globals.tcb0;
-}
-
-FUNCTION void scale_tcb(
-GDECL
-tcb_t GLOBALFAR *ptcb, /* Transformation control block */
-fix15 x_pos, /* X position (outline res units) */
-fix15 y_pos, /* Y position (outline res units) */
-fix15 x_scale, /* X scale factor * ONE_SCALE */
-fix15 y_scale) /* Y scale factor * ONE_SCALE */
-/*
- * Called by make_comp_char() to apply position and scale for each of the
- * components of a compound character.
- */
-{
-fix15 xx_mult = ptcb->xxmult;
-fix15 xy_mult = ptcb->xymult;
-fix31 x_offset = ptcb->xoffset;
-fix15 yx_mult = ptcb->yxmult;
-fix15 yy_mult = ptcb->yymult;
-fix31 y_offset = ptcb->yoffset;
-
-ptcb->xxmult = TRANS(xx_mult, x_scale, (fix31)SCALE_RND, SCALE_SHIFT);
-ptcb->xymult = TRANS(xy_mult, y_scale, (fix31)SCALE_RND, SCALE_SHIFT);
-ptcb->xoffset = MULT16(xx_mult, x_pos) + MULT16(xy_mult, y_pos) + x_offset;
-ptcb->yxmult = TRANS(yx_mult, x_scale, (fix31)SCALE_RND, SCALE_SHIFT);
-ptcb->yymult = TRANS(yy_mult, y_scale, (fix31)SCALE_RND, SCALE_SHIFT);
-ptcb->yoffset = MULT16(yx_mult, x_pos) + MULT16(yy_mult, y_pos) + y_offset;
-
-type_tcb(ptcb); /* Reclassify transformation types */
-}
-
-FUNCTION ufix8 FONTFAR *skip_interpolation_table(
-GDECL
-ufix8 FONTFAR *pointer, /* Pointer to next byte in char data */
-ufix8 format) /* Character format byte */
-{
-fix15 i,n;
-ufix8 intsize[9];
-
-intsize[0] = 1;
-intsize[1] = 2;
-intsize[2] = 3;
-intsize[3] = 1;
-intsize[4] = 2;
-intsize[5] = 1;
-intsize[6] = 2;
-intsize[7] = 0;
-intsize[8] = 0;
-
-n = ((format & BIT6)? (fix15)NEXT_BYTE(pointer): 0);
-n += ((format & BIT7)? (fix15)NEXT_BYTE(pointer): 0);
-for (i = 0; i < n; i++) /* For each entry in int table ... */
- {
- format = NEXT_BYTE(pointer); /* Read format byte */
- if (format & BIT7) /* Short Start/End point spec? */
- {
- pointer++; /* Skip Start/End point byte */
- }
- else
- {
- pointer += intsize[format & 0x7]; /* Skip Start point spec */
- pointer += intsize[(format >> 3) & 0x7]; /* Skip End point spec */
- }
- }
-return pointer;
-}
-FUNCTION ufix8 FONTFAR *skip_control_zone(
-GDECL
-ufix8 FONTFAR *pointer, /* Pointer to next byte in char data */
-ufix8 format) /* Character format byte */
-{
-fix15 i,n;
-ufix16 tmpufix16;
-
-n = sp_globals.no_X_orus + sp_globals.no_Y_orus - 2;
-for (i = 0; i < n; i++) /* For each entry in control table ... */
- {
- if (format & BIT4)
- pointer++; /* Skip short form From/To fields */
- else
- pointer += 2; /* Skip FROM and TO fields */
- /* skip constraints field */
- NEXT_BYTES (pointer, tmpufix16);
-
- }
-return pointer;
-}
-
-#if INCL_RULES
-#else
-FUNCTION ufix8 FONTFAR *plaid_tcb(
-GDECL
-ufix8 FONTFAR *pointer, /* Pointer to next byte in char data */
-ufix8 format) /* Character format byte */
-/*
- * Called by make_simp_char() and make_comp_char() to set up the controlled
- * coordinate table and skip all other intelligent scaling rules embedded
- * in the character data.
- * Updates pointer to first byte after plaid data.
- * This is used only if intelligent scaling is not supported in the
- * configuration definitions.
- */
-{
-fix15 i, n;
-
-
-
-sp_globals.no_X_orus = (format & BIT2)?
- (fix15)NEXT_BYTE(pointer):
- 0;
-sp_globals.no_Y_orus = (format & BIT3)?
- (fix15)NEXT_BYTE(pointer):
- 0;
-pointer = read_oru_table(pointer); /* Updates no_X/Y/orus */
-sp_globals.Y_edge_org = sp_globals.no_X_orus;
-
-/* Skip over control zone table */
-pointer = skip_control_zone(pointer,format);
-
-/* Skip over interpolation table */
-pointer = skip_interpolation_table(pointer,format);
-return pointer;
-}
-#endif
-
-#if INCL_RULES
-FUNCTION ufix8 FONTFAR *plaid_tcb(
-GDECL
-ufix8 FONTFAR *pointer, /* Pointer to next byte in char data */
-ufix8 format) /* Character format byte */
-/*
- * Called by make_simp_char() and make_comp_char() to set up the controlled
- * coordinate table and process all intelligent scaling rules embedded
- * in the character data.
- * Updates pointer to first byte after plaid data.
- * This is used only if intelligent scaling is enabled in the
- * configuration definitions.
- */
-{
-fix15 no_X_ctrl_zones;
-fix15 no_Y_ctrl_zones;
-fix15 no_X_int_zones;
-fix15 no_Y_int_zones;
-
-#if INCL_PLAID_OUT /* Plaid data monitoring included? */
-begin_plaid_data();
-#endif
-
-sp_constr_update(); /* Update constraint table if required */
-
-sp_globals.no_X_orus = (format & BIT2)?
- (fix15)NEXT_BYTE(pointer):
- 0;
-sp_globals.no_Y_orus = (format & BIT3)?
- (fix15)NEXT_BYTE(pointer):
- 0;
-pointer = read_oru_table(pointer); /* Updates no_X/Y/orus to include zero values */
-sp_globals.Y_edge_org = sp_globals.no_X_orus;
-if (sp_globals.no_X_orus > 1) /* 2 or more controlled X coordinates? */
- sp_globals.tcb.xmode = sp_globals.tcb.xtype; /* Enable intelligent scaling in X */
-
-if (sp_globals.no_Y_orus > 1) /* 2 or more controlled Y coordinates? */
- sp_globals.tcb.ymode = sp_globals.tcb.ytype; /* Enable intelligent scaling in Y */
-
-no_X_ctrl_zones = sp_globals.no_X_orus - 1;
-no_Y_ctrl_zones = sp_globals.no_Y_orus - 1;
-pointer = sp_setup_pix_table(pointer, (boolean)(format & BIT4),
- no_X_ctrl_zones, no_Y_ctrl_zones);
-
-no_X_int_zones = (format & BIT6)?
- (fix15)NEXT_BYTE(pointer):
- 0;
-no_Y_int_zones = (format & BIT7)?
- (fix15)NEXT_BYTE(pointer):
- 0;
-sp_globals.Y_int_org = no_X_int_zones;
-pointer = sp_setup_int_table(pointer, no_X_int_zones, no_Y_int_zones);
-
-#if INCL_PLAID_OUT /* Plaid data monitoring included? */
-end_plaid_data();
-#endif
-
-return pointer;
-}
-#endif
-
-#if INCL_RULES
-FUNCTION static void sp_constr_update()
-GDECL
-/*
- * Called by plaid_tcb() to update the constraint table for the current
- * transformation.
- * This is always carried out whenever a character is generated following
- * a change of font or scale factor or after initialization.
- */
-{
-fix31 ppo;
-fix15 xppo;
-fix15 yppo;
-ufix8 FONTFAR *pointer;
-fix15 no_X_constr;
-fix15 no_Y_constr;
-fix15 i, j, k, l, n;
-fix15 ppm;
-ufix8 format;
-ufix8 format1;
-fix15 limit;
-ufix16 constr_org;
-fix15 constr_nr;
-fix15 size;
-fix31 off;
-fix15 min;
-fix15 orus;
-fix15 pix;
-ufix16 tmpufix16; /* in extended mode, macro uses secnd term */
-
-if (sp_globals.constr.data_valid && /* Constr table already done and ... */
- (sp_globals.tcb.xppo == sp_globals.constr.xppo) && /* ... X pix per oru unchanged and ... */
- (sp_globals.tcb.yppo == sp_globals.constr.yppo)) /* ... Y pix per oru unchanged? */
- {
- return; /* No need to update constraint table */
- }
-
-sp_globals.constr.xppo = xppo = sp_globals.tcb.xppo; /* Update X pixels per oru indicator */
-sp_globals.constr.yppo = yppo = sp_globals.tcb.yppo; /* Update Y pixels per oru indicator */
-sp_globals.constr.data_valid = TRUE; /* Mark constraint table valid */
-
-pointer = sp_globals.constr.org; /* Point to first byte of constraint data */
-no_X_constr = NEXT_BYTES(pointer, tmpufix16); /* Read nmbr of X constraints */
-no_Y_constr = NEXT_BYTES(pointer, tmpufix16); /* Read nmbr of Y constraints */
-
-i = 0;
-constr_org = 0;
-n = no_X_constr;
-ppo = xppo;
-for (j = 0; ; j++)
- {
- sp_globals.c_act[i] = FALSE; /* Flag constraint 0 not active */
- sp_globals.c_pix[i++] = 0; /* Constraint 0 implies no minimum */
- sp_globals.c_act[i] = FALSE; /* Flag constraint 1 not active */
- sp_globals.c_pix[i++] = sp_globals.onepix; /* Constraint 1 implies min 1 pixel*/
- ppm = (ppo * (fix31)sp_globals.orus_per_em) >> sp_globals.multshift;
- for (k = 0; k < n; k++)
- {
- format = NEXT_BYTE(pointer); /* Read format byte */
- limit = (fix15)NEXT_BYTE(pointer); /* Read limit field */
- sp_globals.c_act[i] =
- ((ppm < limit) || (limit == 255)) &&
- sp_globals.constr.active;
- if (sp_globals.c_act[i]) /* Constraint active? */
- {
- if ((format & BIT1) && /* Constraint specified and ... */
- (constr_nr = constr_org +
- ((format & BIT0)? /* Read unsigned constraint value */
- NEXT_WORD(pointer):
- (fix15)NEXT_BYTE(pointer)),
- sp_globals.c_act[constr_nr])) /* ... and specified constraint active? */
- {
- pix = sp_globals.c_pix[constr_nr]; /* Use constrained pixel value */
- format1 = format;
- for (l = 2; l > 0; l--) /* Skip 2 arguments */
- {
- format1 >>= 2;
- if ((size = format1 & 0x03))
- pointer += size - 1;
- }
- }
- else /* Constraint absent or inactive? */
- {
- orus = (format & BIT2)? /* Read unsigned oru value */
- NEXT_WORD(pointer):
- (fix15)NEXT_BYTE(pointer);
-
- if (format & BIT5) /* Specified offset value? */
- {
- off = (fix31)((format & BIT4)? /* Read offset value */
- NEXT_WORD(pointer):
- (fix7)NEXT_BYTE(pointer));
- off = (off << (sp_globals.multshift - 6)) + sp_globals.multrnd;
- }
- else /* Unspecified (zero) offset value? */
- {
- off = sp_globals.multrnd;
- }
-
- pix = (fix15)(((fix31)orus * ppo + off) / (1 << sp_globals.mpshift)) & sp_globals.pixfix;
- }
- }
- else /* Constraint inactive? */
- {
- format1 = format;
- for (l = 3; l > 0; l--) /* Skip over 3 arguments */
- {
- if ((size = format1 & 0x03))
- pointer += size - 1;
- format1 >>= 2;
- }
- pix = 0;
- }
-
- if (format & 0xc0) /* Specified minimum value? */
- {
- min = (format & BIT7)? /* Read unsigned minimum value */
- (fix15)NEXT_BYTE(pointer) << sp_globals.pixshift:
- sp_globals.onepix;
- }
- else /* Unspecified (zero) minimum value? */
- {
- min = 0;
- }
-
- sp_globals.c_pix[i] = (pix < min)? min: pix;
- i++;
- }
- if (j) break; /* Finished if second time around loop */
- constr_org = sp_globals.Y_constr_org = i;
- n = no_Y_constr;
- ppo = yppo;
- }
-
-#if DEBUG
-printf("\nCONSTRAINT TABLE\n");
-n = no_X_constr + 2;
-for (i = 0; i < n; i++)
- {
- printf("%3d ", i);
- if (sp_globals.c_act[i])
- {
- printf("T ");
- }
- else
- {
- printf("F ");
- }
- printf("%5.1f\n", ((real)sp_globals.c_pix[i] / (real)sp_globals.onepix));
- }
-printf("--------------\n");
-n = no_Y_constr + 2;
-for (i = 0; i < n; i++)
- {
- j = i + sp_globals.Y_constr_org;
- printf("%3d ", i);
- if (sp_globals.c_act[j])
- {
- printf("T ");
- }
- else
- {
- printf("F ");
- }
- printf("%5.1f\n", ((real)sp_globals.c_pix[j] / (real)sp_globals.onepix));
- }
-#endif
-
-}
-#endif
-
-FUNCTION ufix8 FONTFAR *read_oru_table(
-GDECL
-ufix8 FONTFAR *pointer) /* Pointer to first byte in controlled coord table */
-/*
- * Called by plaid_tcb() to read the controlled coordinate table from the
- * character data in the font.
- * Updates the pointer to the byte following the controlled coordinate
- * data.
- */
-{
-fix15 i, j, k, n;
-boolean zero_not_in;
-boolean zero_added;
-fix15 oru;
-
-#if INCL_RULES
-fix15 pos;
-#endif
-
-i = 0;
-n = sp_globals.no_X_orus;
-#if INCL_RULES
-pos = sp_globals.tcb.xpos;
-#endif
-for (j = 0; ; j++)
- {
- zero_not_in = TRUE;
- zero_added = FALSE;
- for (k = 0; k < n; k++)
- {
- oru = NEXT_WORD(pointer);
- if (zero_not_in && (oru >= 0)) /* First positive oru value? */
- {
-#if INCL_RULES
- sp_plaid.pix[i] = pos; /* Insert position in pix array */
-#endif
- if (oru != 0) /* Zero oru value omitted? */
- {
- sp_plaid.orus[i++] = 0; /* Insert zero value in oru array */
- zero_added = TRUE; /* Remember to increment size of array */
- }
- zero_not_in = FALSE; /* Inhibit further testing for zero ins */
- }
- sp_plaid.orus[i++] = oru; /* Add specified oru value to array */
- }
- if (zero_not_in) /* All specified oru values negative? */
- {
-#if INCL_RULES
- sp_plaid.pix[i] = pos; /* Insert position in pix array */
-#endif
- sp_plaid.orus[i++] = 0; /* Add zero oru value */
- zero_added = TRUE; /* Remember to increment size of array */
- }
- if (j) /* Both X and Y orus read? */
- break;
- if (zero_added)
- sp_globals.no_X_orus++; /* Increment X array size */
- n = sp_globals.no_Y_orus; /* Prepare to read Y oru values */
-#if INCL_RULES
- pos = sp_globals.tcb.ypos;
-#endif
- }
-if (zero_added) /* Zero Y oru value added to array? */
- sp_globals.no_Y_orus++; /* Increment Y array size */
-
-#if DEBUG
-printf("\nX ORUS\n");
-n = sp_globals.no_X_orus;
-for (i = 0; i < n; i++)
- {
- printf("%2d %4d\n", i, sp_plaid.orus[i]);
- }
-printf("\nY ORUS\n");
-n = sp_globals.no_Y_orus;
-for (i = 0; i < n; i++)
- {
- printf("%2d %4d\n", i, sp_plaid.orus[i + sp_globals.no_X_orus]);
- }
-#endif
-
-return pointer; /* Update pointer */
-}
-#if INCL_SQUEEZING || INCL_ISW
-FUNCTION static void calculate_x_pix(
-GDECL
-ufix8 start_edge, ufix8 end_edge,
-ufix16 constr_nr,
-fix31 x_scale,
-fix31 x_offset,
-fix31 ppo,
-fix15 setwidth_pix)
-/*
- * Called by sp_setup_pix_table() when X squeezing is necessary
- * to insert the correct edge in the global pix array
- */
-{
-fix15 zone_pix;
-fix15 start_oru, end_oru;
-
-/* compute scaled oru coordinates */
-start_oru= (fix15)(SQUEEZE_X_ORU(sp_plaid.orus[start_edge], x_scale, x_offset));
-end_oru = (fix15)(SQUEEZE_X_ORU(sp_plaid.orus[end_edge], x_scale, x_offset));
-
-if (!sp_globals.c_act[constr_nr]) /* constraint inactive */
- {
- /* calculate zone width */
- zone_pix = (fix15)(((((fix31)end_oru - (fix31)start_oru) * ppo) /
- (1<<sp_globals.mpshift)) + sp_globals.pixrnd) & sp_globals.pixfix;
- /* check for overflow */
- if (((end_oru-start_oru) > 0) && (zone_pix < 0))
- zone_pix = 0x7ffff;
- /* check for minimum */
- if ((ABS(zone_pix)) >= sp_globals.c_pix[constr_nr])
- goto Lx;
- }
-/* use the zone size from the constr table - scale it */
-zone_pix = (fix15)(((SQUEEZE_MULT(x_scale,sp_globals.c_pix[constr_nr]))
- + sp_globals.pixrnd) & sp_globals.pixfix);
-
-/* look for overflow */
-if ((sp_globals.c_pix[constr_nr] > 0) && (zone_pix < 0))
- zone_pix = 0x7fff;
-
-if (start_edge > end_edge)
- {
- zone_pix = -zone_pix;
- }
-Lx:
-/* assign pixel value to global pix array */
-sp_plaid.pix[end_edge]=sp_plaid.pix[start_edge] + zone_pix;
-
-/* check for overflow */
-if (((sp_plaid.pix[start_edge] >0) && (zone_pix >0)) &&
- (sp_plaid.pix[end_edge] < 0))
- sp_plaid.pix[end_edge] = 0x7fff; /* set it to the max */
-
-/* be sure to be in the setwidth !*/
-#if INCL_ISW
-if (!sp_globals.import_setwidth_act) /* only check left edge if not isw only */
-#endif
-if ((sp_globals.pspecs->flags & SQUEEZE_LEFT) && (sp_plaid.pix[end_edge] < 0))
- sp_plaid.pix[end_edge] = 0;
-if ((sp_globals.pspecs->flags & SQUEEZE_RIGHT) &&
- (sp_plaid.pix[end_edge] > setwidth_pix))
- sp_plaid.pix[end_edge] = setwidth_pix;
-
-}
-#endif
-
-#if INCL_SQUEEZING
-FUNCTION static void calculate_y_pix(
-GDECL
-ufix8 start_edge, ufix8 end_edge,
-ufix16 constr_nr,
-fix31 top_scale, fix31 bottom_scale,
-fix31 ppo,
-fix15 em_top_pix, fix15 em_bot_pix)
-
-/*
- * Called by sp_setup_pix_table() when Y squeezing is necessary
- * to insert the correct edge in the global pix array
- */
-{
-fix15 zone_pix;
-fix15 start_oru, end_oru;
-fix31 zone_width, above_base, below_base;
-
-/* check whether edge is above or below the baseline */
-/* and apply appropriate scale factor to get scaled oru coordinates */
-if (sp_plaid.orus[start_edge] < 0)
- start_oru =(fix15)(SQUEEZE_MULT(sp_plaid.orus[start_edge], bottom_scale));
-else
- start_oru =(fix15)(SQUEEZE_MULT(sp_plaid.orus[start_edge], top_scale));
-
-if (sp_plaid.orus[end_edge] < 0)
- end_oru =(fix15)(SQUEEZE_MULT(sp_plaid.orus[end_edge], bottom_scale));
-else
- end_oru =(fix15)(SQUEEZE_MULT(sp_plaid.orus[end_edge], top_scale));
-
-if (!sp_globals.c_act[constr_nr]) /* Constraint inactive? */
- {
- /* calculate zone width */
- zone_pix = (fix15)(((((fix31)end_oru - (fix31)start_oru) * ppo)
- >> sp_globals.mpshift)+ sp_globals.pixrnd) & sp_globals.pixfix;
- /* check minimum */
- if ((ABS(zone_pix)) >= sp_globals.c_pix[constr_nr])
- goto Ly;
- }
-
-/* Use zone size from constr table */
-if ((end_oru >= 0) && (start_oru >=0))
- /* all above baseline */
- zone_pix = (fix15)(SQUEEZE_MULT(top_scale, sp_globals.c_pix[constr_nr]));
-else if ((end_oru <= 0) && (start_oru <=0))
- /* all below baseline */
- zone_pix = (fix15)(SQUEEZE_MULT(bottom_scale, sp_globals.c_pix[constr_nr]));
-else
- {
- /* mixture */
- if (start_oru > 0)
- {
- zone_width = start_oru - end_oru;
- /* get % above baseline in 16.16 fixed point */
- above_base = (((fix31)start_oru) << 16) /
- ((fix31)zone_width) ;
- /* get % below baseline in 16.16 fixed point */
- below_base = (((fix31)-end_oru) << 16) /
- ((fix31)zone_width) ;
- }
- else
- {
- zone_width = end_oru - start_oru;
- /* get % above baseline in 16.16 fixed point */
- above_base = (((fix31)-start_oru) << 16) /
- ((fix31)zone_width) ;
- /* get % below baseline in 16.16 fixed point */
- below_base = (((fix31)end_oru) << 16) /
- ((fix31)zone_width) ;
- }
- /* % above baseline * total zone * top_scale + */
- /* % below baseline * total zone * bottom_scale */
- zone_pix = ((((above_base * (fix31)sp_globals.c_pix[constr_nr]) >> 16) *
- top_scale) +
- (((below_base * (fix31)sp_globals.c_pix[constr_nr]) >> 16) *
- bottom_scale)) >> 16;
- }
-
-/* make this zone pix fall on a pixel boundary */
-zone_pix = (zone_pix + sp_globals.pixrnd) & sp_globals.pixfix;
-
-/* if minimum is in effect make the zone one pixel */
-if ((sp_globals.c_pix[constr_nr] != 0) && (zone_pix < sp_globals.onepix))
- zone_pix = sp_globals.onepix;
-
-if (start_edge > end_edge)
- {
- zone_pix = -zone_pix; /* Use negatve zone size */
- }
-Ly:
-/* assign global pix value */
-sp_plaid.pix[end_edge] = sp_plaid.pix[start_edge] + zone_pix; /* Insert end pixels */
-
-/* make sure it is in the EM !*/
-if ((sp_globals.pspecs->flags & SQUEEZE_TOP) &&
- (sp_plaid.pix[end_edge] > em_top_pix))
- sp_plaid.pix[end_edge] = em_top_pix;
-if ((sp_globals.pspecs->flags & SQUEEZE_BOTTOM) &&
- (sp_plaid.pix[end_edge] < em_bot_pix))
- sp_plaid.pix[end_edge] = em_bot_pix;
-}
-
-FUNCTION boolean calculate_x_scale(x_factor, x_offset, no_X_ctrl_zones)
-GDECL
-fix31 *x_factor,
-fix31 *x_offset,
-fix15 no_X_ctrl_zones) /* Number of X control zones */
-/*
- * Called by sp_setup_pix_table() when squeezing is included
- * to determine whether X scaling is necessary. If it is, the
- * scale factor and offset are computed. This function returns
- * a boolean value TRUE = X squeezind is necessary, FALSE = no
- * X squeezing is necessary.
- */
-{
-boolean squeeze_left, squeeze_right;
-boolean out_on_right, out_on_left;
-fix15 bbox_width,set_width;
-fix15 bbox_xmin, bbox_xmax;
-fix15 x_offset_pix;
-fix15 i;
-#if INCL_ISW
-fix31 isw_scale;
-fix15 shift;
-#endif
-
-
-/* set up some flags and common calculations */
-squeeze_left = (sp_globals.pspecs->flags & SQUEEZE_LEFT)? TRUE:FALSE;
-squeeze_right = (sp_globals.pspecs->flags & SQUEEZE_RIGHT)? TRUE:FALSE;
-bbox_xmin = sp_globals.bbox_xmin_orus;
-bbox_xmax = sp_globals.bbox_xmax_orus;
-set_width = sp_globals.setwidth_orus;
-
-if (bbox_xmax > set_width)
- out_on_right = TRUE;
-else
- out_on_right = FALSE;
-if (bbox_xmin < 0)
- out_on_left = TRUE;
-else
- out_on_left = FALSE;
-bbox_width =bbox_xmax - bbox_xmin;
-
-/*
- * don't need X squeezing if:
- * - X squeezing not enabled
- * - bbox doesn't violate on left or right
- * - left squeezing only is enabled and char isn't out on left
- * - right squeezing only is enabled and char isn't out on right
- */
-
-if ((!squeeze_left && !squeeze_right) ||
- (!out_on_right && !out_on_left) ||
- (squeeze_left && !squeeze_right && !out_on_left) ||
- (squeeze_right && !squeeze_left && !out_on_right))
- return FALSE;
-
-#if INCL_ISW
-if (sp_globals.import_setwidth_act)
- {
- /* if both isw and squeezing is going on - let the imported */
- /* setwidth factor be factored in with the squeeze */
- isw_scale = compute_isw_scale();
- /*sp_globals.setwidth_orus = sp_globals.imported_width;*/
- }
-else
- isw_scale = 0x10000L; /* 1 in 16.16 notation */
-#endif
-
-/* squeezing on left and right ? */
-if (squeeze_left && squeeze_right)
- {
- /* calculate scale factor */
- if (bbox_width < set_width)
- *x_factor = 0x10000L; /* 1 in 16.16 notation */
- else
- *x_factor = ((fix31)set_width<<16)/(fix31)bbox_width;
-#if INCL_ISW
- IMPORT_FACTOR
-#endif
- /* calculate offset */
- if (out_on_left) /* fall out on left ? */
- *x_offset = -(fix31)*x_factor * (fix31)bbox_xmin;
- /* fall out on right and I am shifting only ? */
- else if (out_on_right && (*x_factor == 0x10000L))
- *x_offset = -(fix31)*x_factor * (fix31)(bbox_xmax - set_width);
- else
- *x_offset = 0x0L; /* 0 in 16.16 notation */
- }
-/* squeezing on left only and violates left */
-else if (squeeze_left)
- {
- if (bbox_width < set_width) /* will it fit if I shift it ? */
- *x_factor = 0x10000L; /* 1 in 16.16 notation */
- else if (out_on_right)
- *x_factor = ((fix31)set_width<<16)/(fix31)bbox_width;
- else
- *x_factor = ((fix31)set_width<<16)/
- (fix31)(bbox_width - (bbox_xmax-set_width));
-#if INCL_ISW
- IMPORT_FACTOR
-#endif
- *x_offset = (fix31)-*x_factor * (fix31)bbox_xmin;
- }
-
-/* I must be squeezing on right, and violates right */
-else
- {
- if (bbox_width < set_width) /* will it fit if I shift it ? */
- { /* just shift it left - it will fit in the bbox */
- *x_factor = 0x10000L; /* 1 in 16.16 notation */
-#if INCL_ISW
- IMPORT_FACTOR
-#endif
- *x_offset = (fix31)-*x_factor * (fix31)bbox_xmin;
- }
- else if (out_on_left)
- {
- *x_factor = ((fix31)set_width<<16)/(fix31)bbox_width;
-#if INCL_ISW
- IMPORT_FACTOR
-#endif
- *x_offset = 0x0L; /* 0 in 16.16 notation */
- }
- else
- {
- *x_factor = ((fix31)set_width<<16)/(fix31)bbox_xmax;
-#if INCL_ISW
- IMPORT_FACTOR
-#endif
- *x_offset = 0x0L; /* 0 in 16.16 notation */
- }
- }
-
-x_offset_pix = (fix15)(((*x_offset >> 16) * sp_globals.tcb0.xppo)
- / (1<<sp_globals.mpshift));
-
-if ((x_offset_pix >0) && (x_offset_pix < sp_globals.onepix))
- x_offset_pix = sp_globals.onepix;
-
-/* look for the first non-negative oru value, scale and add the offset */
-/* to the corresponding pixel value - note that the pixel value */
-/* is set in read_oru_table. */
-
-/* look at all the X edges */
-for (i=0; i < (no_X_ctrl_zones+1); i++)
- if (sp_plaid.orus[i] >= 0)
- {
- sp_plaid.pix[i] = (SQUEEZE_MULT(sp_plaid.pix[i], *x_factor)
- +sp_globals.pixrnd + x_offset_pix) & sp_globals.pixfix;
- break;
- }
-
-return TRUE;
-}
-
-FUNCTION boolean calculate_y_scale(
-GDECL
-fix31 *top_scale, fix31 *bottom_scale,
-fix15 first_Y_zone,
-fix15 no_Y_ctrl_zones)
-/*
- * Called by sp_setup_pix_table() when squeezing is included
- * to determine whether Y scaling is necessary. If it is,
- * two scale factors are computed, one for above the baseline,
- * and one for below the basline.
- * This function returns a boolean value TRUE = Y squeezind is necessary,
- * FALSE = no Y squeezing is necessary.
- */
-{
-boolean squeeze_top, squeeze_bottom;
-boolean out_on_top, out_on_bottom;
-fix15 bbox_top, bbox_bottom;
-fix15 bbox_height;
-fix15 i;
-
-/* set up some flags and common calculations */
-squeeze_top = (sp_globals.pspecs->flags & SQUEEZE_TOP)? TRUE:FALSE;
-squeeze_bottom = (sp_globals.pspecs->flags & SQUEEZE_BOTTOM)? TRUE:FALSE;
-bbox_top = sp_globals.bbox_ymax_orus;
-bbox_bottom = sp_globals.bbox_ymin_orus;
-bbox_height = bbox_top - bbox_bottom;
-
-if (bbox_top > EM_TOP)
- out_on_top = TRUE;
-else
- out_on_top = FALSE;
-
-if (bbox_bottom < EM_BOT)
- out_on_bottom = TRUE;
-else
- out_on_bottom = FALSE;
-
-/*
- * don't need Y squeezing if:
- * - Y squeezing not enabled
- * - bbox doesn't violate on top or bottom
- * - top squeezing only is enabled and char isn't out on top
- * - bottom squeezing only is enabled and char isn't out on bottom
- */
-if ((!squeeze_top && !squeeze_bottom) ||
- (!out_on_top && !out_on_bottom) ||
- (squeeze_top && !squeeze_bottom && !out_on_top) ||
- (squeeze_bottom && !squeeze_top && !out_on_bottom))
- return FALSE;
-
-if (squeeze_top && (bbox_top > EM_TOP))
- *top_scale = ((fix31)EM_TOP << 16)/(fix31)(bbox_top);
-else
- *top_scale = 0x10000L; /* 1 in 16.16 fixed point */
-
-if (squeeze_bottom && (bbox_bottom < EM_BOT))
- *bottom_scale = ((fix31)-(EM_BOT) << 16)/(fix31)-bbox_bottom;
-else
- *bottom_scale = 0x10000L;
-
-if (sp_globals.squeezing_compound)
- {
- for (i=first_Y_zone; i < (first_Y_zone + no_Y_ctrl_zones + 1); i++)
- {
- if (sp_plaid.orus[i] >= 0)
- sp_plaid.pix[i] = (SQUEEZE_MULT(sp_plaid.pix[i], *top_scale)
- +sp_globals.pixrnd) & sp_globals.pixfix;
- else
- sp_plaid.pix[i] = (SQUEEZE_MULT(sp_plaid.pix[i], *bottom_scale)
- +sp_globals.pixrnd) & sp_globals.pixfix;
- }
- }
-return TRUE;
-}
-#endif
-
-#if INCL_RULES
-FUNCTION static ufix8 FONTFAR *sp_setup_pix_table(
-GDECL
-ufix8 FONTFAR *pointer, /* Pointer to first byte in control zone table */
-boolean short_form, /* TRUE if 1 byte from/to specification */
-fix15 no_X_ctrl_zones, /* Number of X control zones */
-fix15 no_Y_ctrl_zones) /* Number of Y control zones */
-/*
- * Called by plaid_tcb() to read the control zone table from the
- * character data in the font.
- * Sets up a table of pixel values for all controlled coordinates.
- * Updates the pointer to the byte following the control zone
- * data.
- */
-{
-fix15 i, j, n;
-fix31 ppo;
-#if INCL_SQUEEZING || INCL_ISW
-fix31 xppo0; /* top level pixels per oru */
-fix31 yppo0; /* top level pixels per oru */
-#endif
-ufix8 edge_org;
-ufix8 edge;
-ufix8 start_edge;
-ufix8 end_edge;
-ufix16 constr_org;
-fix15 constr_nr;
-fix15 zone_pix;
-fix31 whole_zone; /* non-transformed value of the first X zone */
-ufix16 tmpufix16; /* in extended mode, macro uses secnd term */
-#if INCL_SQUEEZING
-fix31 x_scale;
-fix31 y_top_scale, y_bottom_scale;
-fix31 x_offset;
-boolean squeezed_y;
-fix15 setwidth_pix, em_top_pix, em_bot_pix;
-#endif
-
-#if INCL_ISW
-boolean imported_width;
-fix31 isw_scale;
-fix15 isw_setwidth_pix;
-#endif
-
-#if INCL_ISW || INCL_SQUEEZING
-boolean squeezed_x;
-#endif
-
-#if INCL_PLAID_OUT /* Plaid data monitoring included? */
-begin_ctrl_zones(no_X_ctrl_zones, no_Y_ctrl_zones);
-#endif
-
-
-edge_org = 0;
-constr_org = 0;
-sp_globals.rnd_xmin = 0; /* initialize the error for chars with no zone */
-n = no_X_ctrl_zones;
-ppo = sp_globals.tcb.xppo;
-#if INCL_SQUEEZING || INCL_ISW
-xppo0 = sp_globals.tcb0.xppo;
-yppo0 = sp_globals.tcb0.yppo;
-squeezed_x = FALSE;
-#endif
-
-#if INCL_SQUEEZING
-squeezed_x = calculate_x_scale (&x_scale, &x_offset, no_X_ctrl_zones);
-squeezed_y = calculate_y_scale(&y_top_scale,&y_bottom_scale,(n+1),
- no_Y_ctrl_zones);
-#if INCL_ISW
-if (sp_globals.import_setwidth_act == TRUE)
-setwidth_pix = ((fix15)(((fix31)sp_globals.imported_width * xppo0) >>
- sp_globals.mpshift) + sp_globals.pixrnd) & sp_globals.pixfix;
-
-else
-#endif
-setwidth_pix = ((fix15)(((fix31)sp_globals.setwidth_orus * xppo0) >>
- sp_globals.mpshift) + sp_globals.pixrnd) & sp_globals.pixfix;
-/* check for overflow */
-if (setwidth_pix < 0)
- setwidth_pix = 0x7fff; /* set to maximum */
-em_bot_pix = ((fix15)(((fix31)EM_BOT * yppo0) >>
- sp_globals.mpshift) + sp_globals.pixrnd) & sp_globals.pixfix;
-em_top_pix = ((fix15)(((fix31)EM_TOP * yppo0) >>
- sp_globals.mpshift) + sp_globals.pixrnd) & sp_globals.pixfix;
-#endif
-
-#if INCL_ISW
-/* convert to pixels */
-isw_setwidth_pix = ((fix15)(((fix31)sp_globals.imported_width * xppo0) >>
- sp_globals.mpshift) + sp_globals.pixrnd) & sp_globals.pixfix;
-/* check for overflow */
-if (isw_setwidth_pix < 0)
- isw_setwidth_pix = 0x7fff; /* set to maximum */
-if (!squeezed_x && ((imported_width = sp_globals.import_setwidth_act) == TRUE))
- {
- isw_scale = compute_isw_scale();
-
- /* look for the first non-negative oru value, scale and add the offset */
- /* to the corresponding pixel value - note that the pixel value */
- /* is set in read_oru_table. */
-
- /* look at all the X edges */
- for (i=0; i < (no_X_ctrl_zones+1); i++)
- if (sp_plaid.orus[i] >= 0)
- {
- sp_plaid.pix[i] = (SQUEEZE_MULT(sp_plaid.pix[i], isw_scale)
- +sp_globals.pixrnd) & sp_globals.pixfix;
- break;
- }
-
- }
-#endif
-
-for (i = 0; ; i++) /* For X and Y control zones... */
- {
- for (j = 0; j < n; j++) /* For each zone in X or Y... */
- {
- if (short_form) /* 1 byte from/to specification? */
- {
- edge = NEXT_BYTE(pointer); /* Read packed from/to spec */
- start_edge = edge_org + (edge & 0x0f); /* Extract start edge */
- end_edge = edge_org + (edge >> 4); /* Extract end edge */
- }
- else /* 2 byte from/to specification? */
- {
- start_edge = edge_org + NEXT_BYTE(pointer); /* Read start edge */
- end_edge = edge_org + NEXT_BYTE(pointer); /* read end edge */
- }
- constr_nr = constr_org +
- NEXT_BYTES(pointer, tmpufix16); /* Read constraint number */
-#if INCL_SQUEEZING
- if (i == 0 && squeezed_x)
- calculate_x_pix(start_edge, end_edge, constr_nr,
- x_scale, x_offset, ppo, setwidth_pix);
- else if (i == 1 && squeezed_y)
- calculate_y_pix(start_edge, end_edge,constr_nr,
- y_top_scale, y_bottom_scale, ppo, em_top_pix, em_bot_pix);
- else
- {
-#endif
-#if INCL_ISW
- if (i==0 && imported_width)
- calculate_x_pix(start_edge, end_edge, constr_nr,
- isw_scale, 0, ppo, isw_setwidth_pix);
- else
- {
-#endif
- if (!sp_globals.c_act[constr_nr]) /* Constraint inactive? */
- {
- zone_pix = ((fix15)((((fix31)sp_plaid.orus[end_edge] -
- (fix31)sp_plaid.orus[start_edge]) * ppo) /
- (1<<sp_globals.mpshift)) + sp_globals.pixrnd) &
- sp_globals.pixfix;
- if ((ABS(zone_pix)) >= sp_globals.c_pix[constr_nr])
- goto L1;
- }
- zone_pix = sp_globals.c_pix[constr_nr]; /* Use zone size from constr table */
- if (start_edge > end_edge) /* sp_plaid.orus[start_edge] > sp_plaid.orus[end_edge]? */
- {
- zone_pix = -zone_pix; /* Use negatve zone size */
- }
- L1:
- /* inter-character spacing fix */
- if ((j == 0) && (i == 0)) /* if this is the 1st X zone, save rounding error */
- { /* get the non-xformed - xformed zone, in right direction */
- whole_zone = (((fix31)sp_plaid.orus[end_edge] -
- (fix31)sp_plaid.orus[start_edge]) *
- ppo) / (1<<sp_globals.mpshift);
- sp_globals.rnd_xmin = whole_zone - zone_pix;
- }
- sp_plaid.pix[end_edge] = sp_plaid.pix[start_edge] + zone_pix; /* Insert end pixels */
-#if INCL_SQUEEZING
- if (i == 0) /* in the x direction */
- { /* brute force squeeze */
- if ((sp_globals.pspecs->flags & SQUEEZE_LEFT) &&
- (sp_plaid.pix[end_edge] < 0))
- sp_plaid.pix[end_edge] = 0;
- if ((sp_globals.pspecs->flags & SQUEEZE_RIGHT) &&
- (sp_plaid.pix[end_edge] > setwidth_pix))
- sp_plaid.pix[end_edge] = setwidth_pix;
- }
- if (i == 1) /* in the y direction */
- { /* brute force squeeze */
- if ((sp_globals.pspecs->flags & SQUEEZE_TOP) &&
- (sp_plaid.pix[end_edge] > em_top_pix))
- sp_plaid.pix[end_edge] = em_top_pix;
- if ((sp_globals.pspecs->flags & SQUEEZE_BOTTOM) &&
- (sp_plaid.pix[end_edge] < em_bot_pix))
- sp_plaid.pix[end_edge] = em_bot_pix;
- }
-#endif
-#if INCL_SQUEEZING
- }
-#endif
-#if INCL_ISW
- }
-#endif
-#if INCL_PLAID_OUT /* Plaid data monitoring included? */
- record_ctrl_zone(
- (fix31)sp_plaid.pix[start_edge] << (16 - sp_globals.pixshift),
- (fix31)sp_plaid.pix[end_edge] << (16 - sp_globals.pixshift),
- (fix15)(constr_nr - constr_org));
-#endif
- }
- if (i) /* Y pixels done? */
- break;
- edge_org = sp_globals.Y_edge_org; /* Prepare to process Y ctrl zones */
- constr_org = sp_globals.Y_constr_org;
- n = no_Y_ctrl_zones;
- ppo = sp_globals.tcb.yppo;
- }
-
-#if DEBUG
-printf("\nX PIX TABLE\n");
-n = no_X_ctrl_zones + 1;
-for (i = 0; i < n; i++)
- printf("%2d %6.1f\n", i, (real)sp_plaid.pix[i] / (real)sp_globals.onepix);
-printf("\nY PIX TABLE\n");
-n = no_Y_ctrl_zones + 1;
-for (i = 0; i < n; i++)
- {
- j = i + no_X_ctrl_zones + 1;
- printf("%2d %6.1f\n", i, (real)sp_plaid.pix[j] / (real)sp_globals.onepix);
- }
-#endif
-
-return pointer;
-}
-#endif
-
-
-#if INCL_RULES
-FUNCTION static ufix8 FONTFAR *sp_setup_int_table(
-GDECL
-ufix8 FONTFAR *pointer, /* Pointer to first byte in interpolation zone table */
-fix15 no_X_int_zones, /* Number of X interpolation zones */
-fix15 no_Y_int_zones) /* Number of X interpolation zones */
-/*
- * Called by plaid_tcb() to read the interpolation zone table from the
- * character data in the font.
- * Sets up a table of interpolation coefficients with one entry for
- * every X or Y interpolation zone.
- * Updates the pointer to the byte following the interpolation zone
- * data.
- */
-{
-fix15 i, j, k, l, n;
-ufix8 format;
-ufix8 format_copy;
-ufix8 tmpufix8;
-fix15 start_orus = 0;
-ufix8 edge_org;
-ufix8 edge;
-ufix16 adj_factor;
-fix15 adj_orus;
-fix15 end_orus = 0;
-fix31 zone_orus;
-fix15 start_pix = 0;
-fix15 end_pix = 0;
-
-
-#if INCL_PLAID_OUT /* Plaid data monitoring included? */
-begin_int_zones(no_X_int_zones, no_Y_int_zones);
-#endif
-
-i = 0;
-edge_org = 0;
-n = no_X_int_zones;
-for (j = 0; ; j++)
- {
- for (k = 0; k < n; k++)
- {
- format = NEXT_BYTE(pointer);
- if (format & BIT7) /* Short start/end point spec? */
- {
- tmpufix8 = NEXT_BYTE(pointer);
- edge = edge_org + (tmpufix8 & 0xf);
- start_orus = sp_plaid.orus[edge];
- start_pix = sp_plaid.pix[edge];
- edge = edge_org + (tmpufix8 >> 4);
- end_orus = sp_plaid.orus[edge];
- end_pix = sp_plaid.pix[edge];
- }
- else /* Standard start and end point spec? */
- {
- format_copy = format;
- for (l = 0; ; l++) /* Loop for start and end point */
- {
- switch (format_copy & 0x7) /* Decode start/end point format */
- {
-
- case 0: /* Index to control edge */
- edge = edge_org + NEXT_BYTE(pointer);
- end_orus = sp_plaid.orus[edge];
- end_pix = sp_plaid.pix[edge];
- break;
-
- case 1: /* 1 byte fractional distance to next edge */
- adj_factor = 0xffff & NEXT_BYTE(pointer) << 8;
- goto L1;
-
-
- case 2: /* 2 byte fractional distance to next edge */
- adj_factor = 0xffff & NEXT_WORD(pointer);
- L1: edge = edge_org + NEXT_BYTE(pointer);
- end_orus = sp_plaid.orus[edge] +
- ((((fix31)sp_plaid.orus[edge + 1] - (fix31)sp_plaid.orus[edge]) *
- (ufix32)adj_factor + (fix31)32768) >> 16);
- end_pix = sp_plaid.pix[edge] +
- ((((fix31)sp_plaid.pix[edge + 1] - (fix31)sp_plaid.pix[edge]) *
- (ufix32)adj_factor + (fix31)32768) >> 16);
- break;
-
- case 3: /* 1 byte delta orus before first edge */
- adj_orus = -(fix15)NEXT_BYTE(pointer);
- goto L2;
-
- case 4: /* 2 byte delta orus before first edge */
- adj_orus = -NEXT_WORD(pointer);
- L2: edge = edge_org;
- goto L4;
-
- case 5: /* 1 byte delta orus after last edge */
- adj_orus = (fix15)NEXT_BYTE(pointer);
- goto L3;
-
- case 6: /* 2 byte delta orus after last edge */
- adj_orus = NEXT_WORD(pointer);
- L3: edge = j? sp_globals.Y_edge_org + sp_globals.no_Y_orus - 1: sp_globals.no_X_orus - 1;
- L4: end_orus = sp_plaid.orus[edge] + adj_orus;
- end_pix = sp_plaid.pix[edge] +
- (((fix31)adj_orus * (fix31)(j? sp_globals.tcb.yppo: sp_globals.tcb.xppo) +
- sp_globals.mprnd) / (1<<sp_globals.mpshift));
- break;
-
- }
-
- if (l) /* Second time round loop? */
- break;
- format_copy >>= 3; /* Adj format to decode end point format */
- start_orus = end_orus; /* Save start point oru value */
- start_pix = end_pix; /* Save start point pixel value */
- }
- }
-#if INCL_PLAID_OUT /* Plaid data monitoring included? */
- record_int_zone(
- (fix31)start_pix << (16 - sp_globals.pixshift),
- (fix31)end_pix << (16 - sp_globals.pixshift));
-#endif
- zone_orus = (fix31)end_orus - (fix31)start_orus;
- sp_plaid.mult[i] = ((((fix31)end_pix - (fix31)start_pix) << sp_globals.mpshift) +
- (zone_orus / 2)) / zone_orus;
- sp_plaid.offset[i] =
- (((((fix31)start_pix + (fix31)end_pix) << sp_globals.mpshift) -
- ((fix31)sp_plaid.mult[i] * ((fix31)start_orus + (fix31)end_orus))) / 2) +
- sp_globals.mprnd;
- i++;
- }
- if (j) /* Finished? */
- break;
- edge_org = sp_globals.Y_edge_org; /* Prepare to process Y ctrl zones */
- n = no_Y_int_zones;
- }
-
-#if DEBUG
-printf("\nX INT TABLE\n");
-n = no_X_int_zones;
-for (i = 0; i < n; i++)
- {
- printf("%2d %7.4f %7.4f\n", i,
- (real)sp_plaid.mult[i] / (real)(1 << sp_globals.multshift),
- (real)sp_plaid.offset[i] / (real)(1 << sp_globals.multshift));
- }
-printf("\nY INT TABLE\n");
-n = no_Y_int_zones;
-for (i = 0; i < n; i++)
- {
- j = i + no_X_int_zones;
- printf("%2d %7.4f %7.4f\n", i,
- (real)sp_plaid.mult[j] / (real)(1 << sp_globals.multshift),
- (real)sp_plaid.offset[j] / (real)(1 << sp_globals.multshift));
- }
-#endif
-
-return pointer;
-}
-#endif
-#if INCL_ISW
-FUNCTION fix31 compute_isw_scale()
-GDECL
-{
-fix31 isw_scale;
-
-if (sp_globals.setwidth_orus == 0)
- isw_scale = 0x00010000;
-else
- isw_scale = ((fix31)sp_globals.imported_width << 16)/
- (fix31)sp_globals.setwidth_orus;
-return isw_scale;
-}
-#endif
diff --git a/nx-X11/lib/font/Speedo/spdo_prv.h b/nx-X11/lib/font/Speedo/spdo_prv.h
deleted file mode 100644
index 162c0fddd..000000000
--- a/nx-X11/lib/font/Speedo/spdo_prv.h
+++ /dev/null
@@ -1,421 +0,0 @@
-/* $Xorg: spdo_prv.h,v 1.3 2000/08/17 19:46:27 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/spdo_prv.h,v 1.4 1999/03/14 03:21:17 dawes Exp $ */
-
-
-
-/***************************** S P D O _ P R V . H *******************************/
-
-#include "speedo.h" /* include public definitions */
-
-/***** CONFIGURATION DEFINITIONS *****/
-
-
-/***** PRIVATE FONT HEADER OFFSET CONSTANTS *****/
-#define FH_ORUMX 0 /* U Max ORU value 2 bytes */
-#define FH_PIXMX 2 /* U Max Pixel value 2 bytes */
-#define FH_CUSNR 4 /* U Customer Number 2 bytes */
-#define FH_OFFCD 6 /* E Offset to Char Directory 3 bytes */
-#define FH_OFCNS 9 /* E Offset to Constraint Data 3 bytes */
-#define FH_OFFTK 12 /* E Offset to Track Kerning 3 bytes */
-#define FH_OFFPK 15 /* E Offset to Pair Kerning 3 bytes */
-#define FH_OCHRD 18 /* E Offset to Character Data 3 bytes */
-#define FH_NBYTE 21 /* E Number of Bytes in File 3 bytes */
-
-
-/***** MODE FLAGS CONSTANTS *****/
-#define CURVES_OUT 0X0008 /* Output module accepts curves */
-#define BOGUS_MODE 0X0010 /* Linear scaling mode */
-#define CONSTR_OFF 0X0020 /* Inhibit constraint table */
-#define IMPORT_WIDTHS 0X0040 /* Imported width mode */
-#define SQUEEZE_LEFT 0X0100 /* Squeeze left mode */
-#define SQUEEZE_RIGHT 0X0200 /* Squeeze right mode */
-#define SQUEEZE_TOP 0X0400 /* Squeeze top mode */
-#define SQUEEZE_BOTTOM 0X0800 /* Squeeze bottom mode */
-#define CLIP_LEFT 0X1000 /* Clip left mode */
-#define CLIP_RIGHT 0X2000 /* Clip right mode */
-#define CLIP_TOP 0X4000 /* Clip top mode */
-#define CLIP_BOTTOM 0X8000 /* Clip bottom mode */
-
-
-/***** MACRO DEFINITIONS *****/
-
-#define SQUEEZE_MULT(A,B) (((fix31)A * (fix31)B) / (1 << 16))
-
-#define NEXT_BYTE(A) (*(A)++)
-
-#define NEXT_WORD(A) \
- ((fix15)(sp_globals.key32 ^ ((A) += 2, \
- ((fix15)((A)[-1]) << 8) | (fix15)((A)[-2]) | \
- ((A)[-1] & 0x80? ~0xFFFF : 0))))
-
-#if INCL_EXT /* Extended fonts supported? */
-
-#define NEXT_BYTES(A, B) \
- (((B = (ufix16)(*(A)++) ^ sp_globals.key7) >= 248)? \
- ((ufix16)(B & 0x07) << 8) + ((*(A)++) ^ sp_globals.key8) + 248: \
- B)
-
-#else /* Compact fonts only supported? */
-
-#define NEXT_BYTES(A, B) ((*(A)++) ^ sp_globals.key7)
-
-#endif
-
-
-#define NEXT_BYTE_U(A) (*(A)++)
-
-#define NEXT_WORD_U(A, B) \
- (fix15)(B = (*(A)++) << 8, (fix15)(*(A)++) + B)
-
-#define NEXT_CHNDX(A, B) \
- ((B)? (ufix16)NEXT_WORD(A): (ufix16)NEXT_BYTE(A))
-
-/* Multiply (fix15)X by (fix15)Y to produce (fix31)product */
-#define MULT16(X, Y) \
- ((fix31)X * (fix31)Y)
-
-/* Multiply (fix15)X by (fix15)MULT, add (fix31)OFFSET,
- * shift right SHIFT bits to produce (fix15)result */
-#define TRANS(X, MULT, OFFSET, SHIFT) \
- ((fix15)((((fix31)X * (fix31)MULT) + OFFSET) / (1 << SHIFT)))
-
-/******************************************************************************
- *
- * the following block of definitions redefines every function
- * reference to be prefixed with an "sp_". In addition, if this
- * is a reentrant version, the parameter sp_globals will be added
- * as the first parameter.
- *
- *****************************************************************************/
-
-#if STATIC_ALLOC || DYNAMIC_ALLOC
-
-#define GDECL
-
-#define get_char_id(char_index) sp_get_char_id(char_index)
-#define get_char_width(char_index) sp_get_char_width(char_index)
-#define get_track_kern(track,point_size) sp_get_track_kern(track,point_size)
-#define get_pair_kern(char_index1,char_index2) sp_get_pair_kern(char_index1,char_index2)
-#define get_char_bbox(char_index,bbox) sp_get_char_bbox(char_index,bbox)
-#define make_char(char_index) sp_make_char(char_index)
-#if INCL_ISW
-#define compute_isw_scale() sp_compute_isw_scale()
-#define do_make_char(char_index) sp_do_make_char(char_index)
-#define make_char_isw(char_index,imported_width) sp_make_char_isw(char_index,imported_width)
-#define reset_xmax(xmax) sp_reset_xmax(xmax)
-#endif
-#if INCL_ISW || INCL_SQUEEZING
-#define preview_bounding_box(pointer,format) sp_preview_bounding_box(pointer,format)
-#endif
-#define make_simp_char(pointer,format) sp_make_simp_char(pointer,format)
-#define make_comp_char(pointer) sp_make_comp_char(pointer)
-#define get_char_org(char_index,top_level) sp_get_char_org(char_index,top_level)
-#define get_posn_arg(ppointer,format) sp_get_posn_arg(ppointer,format)
-#define get_scale_arg(ppointer,format) sp_get_scale_arg(ppointer,format)
-#define read_bbox(ppointer,pPmin,pPmax,set_flag) sp_read_bbox(ppointer,pPmin,pPmax,set_flag)
-#define proc_outl_data(pointer) sp_proc_outl_data(pointer)
-#define split_curve(P1,P2,P3,depth) sp_split_curve(P1,P2,P3,depth)
-#define get_args(ppointer,format,pP) sp_get_args(ppointer,format,pP)
-
-#define init_black(specsarg) sp_init_black(specsarg)
-#define begin_char_black(Psw,Pmin,Pmax) sp_begin_char_black(Psw,Pmin,Pmax)
-#define begin_contour_black(P1,outside) sp_begin_contour_black(P1,outside)
-#define line_black(P1) sp_line_black(P1)
-#define end_char_black() sp_end_char_black()
-#define add_intercept_black(y,x) sp_add_intercept_black(y,x)
-#define proc_intercepts_black() sp_proc_intercepts_black()
-
-#define init_screen(specsarg) sp_init_screen(specsarg)
-#define begin_char_screen(Psw,Pmin,Pmax) sp_begin_char_screen(Psw,Pmin,Pmax)
-#define begin_contour_screen(P1,outside) sp_begin_contour_screen(P1,outside)
-#define curve_screen(P1,P2,P3,depth) sp_curve_screen(P1,P2,P3,depth)
-#define scan_curve_screen(X0,Y0,X1,Y1,X2,Y2,X3,Y3) sp_scan_curve_screen(X0,Y0,X1,Y1,X2,Y2,X3,Y3)
-#define vert_line_screen(x,y1,y2) sp_vert_line_screen(x,y1,y2)
-#define line_screen(P1) sp_line_screen(P1)
-#define end_contour_screen() sp_end_contour_screen()
-#define end_char_screen() sp_end_char_screen()
-#define add_intercept_screen(y,x) sp_add_intercept_screen(y,x)
-#define proc_intercepts_screen() sp_proc_intercepts_screen()
-
-#define init_outline(specsarg) sp_init_outline(specsarg)
-#define begin_char_outline(Psw,Pmin,Pmax) sp_begin_char_outline(Psw,Pmin,Pmax)
-#define begin_sub_char_outline(Psw,Pmin,Pmax) sp_begin_sub_char_outline(Psw,Pmin,Pmax)
-#define begin_contour_outline(P1,outside) sp_begin_contour_outline(P1,outside)
-#define curve_outline(P1,P2,P3,depth) sp_curve_outline(P1,P2,P3,depth)
-#define line_outline(P1) sp_line_outline(P1)
-#define end_contour_outline() sp_end_contour_outline()
-#define end_sub_char_outline() sp_end_sub_char_outline()
-#define end_char_outline() sp_end_char_outline()
-
-#define init_2d(specsarg) sp_init_2d(specsarg)
-#define begin_char_2d(Psw, Pmin, Pmax) sp_begin_char_2d(Psw, Pmin, Pmax)
-#define begin_contour_2d(P1, outside) sp_begin_contour_2d(P1, outside)
-#define line_2d(P1) sp_line_2d(P1)
-#define end_char_2d() sp_end_char_2d()
-#define add_intercept_2d(y, x) sp_add_intercept_2d(y, x)
-#define proc_intercepts_2d() sp_proc_intercepts_2d()
-#define draw_vector_to_2d(x0, y0, x1, y1, band) sp_draw_vector_to_2d(x0, y0, x1, y1, band)
-
-#define init_char_out(Psw,Pmin,Pmax) sp_init_char_out(Psw,Pmin,Pmax)
-#define begin_sub_char_out(Psw,Pmin,Pmax) sp_begin_sub_char_out(Psw,Pmin,Pmax)
-#define curve_out(P1,P2,P3,depth) sp_curve_out(P1,P2,P3,depth)
-#define end_contour_out() sp_end_contour_out()
-#define end_sub_char_out() sp_end_sub_char_out()
-#define init_intercepts_out() sp_init_intercepts_out()
-#define restart_intercepts_out() sp_restart_intercepts_out()
-#define set_first_band_out(Pmin,Pmax) sp_set_first_band_out(Pmin,Pmax)
-#define reduce_band_size_out() sp_reduce_band_size_out()
-#define next_band_out() sp_next_band_out()
-
-#define init_userout(specsarg) sp_init_userout(specsarg)
-
-#define reset() sp_reset()
-#define set_key(key) sp_set_key(key)
-#define get_cust_no(font_buff) sp_get_cust_no(font_buff)
-#define set_specs(specsarg) sp_set_specs(specsarg)
-#define setup_consts(xmin,xmax,ymin,ymax) sp_setup_consts(xmin,xmax,ymin,ymax)
-#define setup_tcb(ptcb) sp_setup_tcb(ptcb)
-#define setup_mult(input_mult) sp_setup_mult(input_mult)
-#define setup_offset(input_offset) sp_setup_offset(input_offset)
-#define type_tcb(ptcb) sp_type_tcb(ptcb)
-#define read_long(pointer) sp_read_long(pointer)
-#define read_word_u(pointer) sp_read_word_u(pointer)
-#define init_tcb() sp_init_tcb()
-#define scale_tcb(ptcb,x_pos,y_pos,x_scale,y_scale) sp_scale_tcb(ptcb,x_pos,y_pos,x_scale,y_scale)
-#define plaid_tcb(ppointer,format) sp_plaid_tcb(ppointer,format)
-#define skip_orus(ppointer,short_form,no_ctrl_zones) sp_skip_orus(ppointer,short_form,no_ctrl_zones)
-#define skip_interpolation_table(ppointer,format) sp_skip_interpolation_table(ppointer,format)
-#define skip_control_zone(ppointer,format) sp_skip_control_zone(ppointer,format)
-#define constr_update() sp_constr_update()
-#define read_oru_table(ppointer) sp_read_oru_table(ppointer)
-#define calculate_x_pix(start_edge,end_edge,constr_nr,x_scale,x_offset,ppo,setwidth_pix) sp_calculate_x_pix(start_edge,end_edge,constr_nr,x_scale,x_offset,ppo,setwidth_pix)
-#define calculate_y_pix(start_edge,end_edge,constr_nr,top_scale,bottom_scale,ppo,emtop_pix,embot_pix) sp_calculate_y_pix(start_edge,end_edge,constr_nr,top_scale,bottom_scale,ppo,emtop_pix,embot_pix)
-#define calculate_x_scale(x_factor,x_offset,no_x_ctrl_zones) sp_calculate_x_scale(x_factor,x_offset,no_x_ctrl_zones)
-#define calculate_y_scale(top_scale,bottom_scale,first_y_zone,no_Y_ctrl_zones) sp_calculate_y_scale(top_scale,bottom_scale,first_y_zone,no_Y_ctrl_zones)
-#define setup_pix_table(ppointer,short_form,no_X_ctrl_zones,no_Y_ctrl_zones) sp_setup_pix_table(ppointer,short_form,no_X_ctrl_zones,no_Y_ctrl_zones)
-#define setup_int_table(ppointer,no_X_int_zones, no_Y_int_zones) sp_setup_int_table(ppointer,no_X_int_zones, no_Y_int_zones)
-
-#define fn_init_out(specsarg) (*sp_globals.init_out)(specsarg)
-#define fn_begin_char(Psw,Pmin,Pmax) (*sp_globals.begin_char)(Psw,Pmin,Pmax)
-#define fn_begin_sub_char(Psw,Pmin,Pmax) (*sp_globals.begin_sub_char)(Psw,Pmin,Pmax)
-#define fn_end_sub_char() (*sp_globals.end_sub_char)()
-#define fn_end_char() (*sp_globals.end_char)()
-#define fn_line(P1) (*sp_globals.line)(P1)
-#define fn_end_contour() (*sp_globals.end_contour)()
-#define fn_begin_contour(P0,fmt) (*sp_globals.begin_contour)(P0,fmt)
-#define fn_curve(P1,P2,P3,depth) (*sp_globals.curve)(P1,P2,P3,depth)
-
-#define load_char_data(offset, no_bytes, buff_off) sp_load_char_data(offset, no_bytes, buff_off)
-#define report_error(n) sp_report_error(n)
-
-#if INCL_MULTIDEV
-
-#define set_bitmap_device(bfuncs,size) sp_set_bitmap_device(bfuncs,size)
-#define set_outline_device(ofuncs,size) sp_set_outline_device(ofuncs,size)
-
-#define open_bitmap(x_set_width, y_set_width, xmin, xmax, ymin, ymax) (*sp_globals.bitmap_device.p_open_bitmap)(x_set_width, y_set_width, xmin, xmax, ymin, ymax)
-#define set_bitmap_bits(y, xbit1, xbit2) (*sp_globals.bitmap_device.p_set_bits)(y, xbit1, xbit2)
-#define close_bitmap() (*sp_globals.bitmap_device.p_close_bitmap)()
-
-#define open_outline(x_set_width, y_set_width, xmin, xmax, ymin, ymax) (*sp_globals.outline_device.p_open_outline)(x_set_width, y_set_width, xmin, xmax, ymin, ymax)
-#define start_new_char() (*sp_globals.outline_device.p_start_char)()
-#define start_contour(x,y,outside) (*sp_globals.outline_device.p_start_contour)(x,y,outside)
-#define curve_to(x1,y1,x2,y2,x3,y3) (*sp_globals.outline_device.p_curve)(x1,y1,x2,y2,x3,y3)
-#define line_to(x,y) (*sp_globals.outline_device.p_line)(x,y)
-#define close_contour() (*sp_globals.outline_device.p_close_contour)()
-#define close_outline() (*sp_globals.outline_device.p_close_outline)()
-
-#else
-
-#define open_bitmap(x_set_width, y_set_width, xmin, xmax, ymin, ymax) sp_open_bitmap(x_set_width, y_set_width, xmin, xmax, ymin, ymax)
-#define set_bitmap_bits(y, xbit1, xbit2) sp_set_bitmap_bits(y, xbit1, xbit2)
-#define close_bitmap() sp_close_bitmap()
-
-#define open_outline(x_set_width, y_set_width, xmin, xmax, ymin, ymax) sp_open_outline(x_set_width, y_set_width, xmin, xmax, ymin, ymax)
-#define start_new_char() sp_start_new_char()
-#define start_contour(x,y,outside) sp_start_contour(x,y,outside)
-#define curve_to(x1,y1,x2,y2,x3,y3) sp_curve_to(x1,y1,x2,y2,x3,y3)
-#define line_to(x,y) sp_line_to(x,y)
-#define close_contour() sp_close_contour()
-#define close_outline() sp_close_outline()
-
-#endif
-
-#else
-
-#define GDECL SPEEDO_GLOBALS* sp_global_ptr,
-
-#define get_char_id(char_index) sp_get_char_id(sp_global_ptr,char_index)
-#define get_char_width(char_index) sp_get_char_width(sp_global_ptr,char_index)
-#define get_track_kern(track,point_size) sp_get_track_kern(sp_global_ptr,track,point_size)
-#define get_pair_kern(char_index1,char_index2) sp_get_pair_kern(sp_global_ptr,char_index1,char_index2)
-#define get_char_bbox(char_index,bbox) sp_get_char_bbox(sp_global_ptr,char_index,bbox)
-#define make_char(char_index) sp_make_char(sp_global_ptr,char_index)
-#if INCL_ISW
-#define compute_isw_scale() sp_compute_isw_scale(sp_global_ptr)
-#define do_make_char(char_index) sp_do_make_char(sp_global_ptr,char_index)
-#define make_char_isw(char_index,imported_width) sp_make_char_isw(sp_global_ptr,char_index,imported_width)
-#define reset_xmax(xmax) sp_reset_xmax(sp_global_ptr,xmax)
-#endif
-#if INCL_ISW || INCL_SQUEEZING
-#define preview_bounding_box(pointer,format) sp_preview_bounding_box(sp_global_ptr,pointer,format)
-#endif
-#define make_simp_char(pointer,format) sp_make_simp_char(sp_global_ptr,pointer,format)
-#define make_comp_char(pointer) sp_make_comp_char(sp_global_ptr,pointer)
-#define get_char_org(char_index,top_level) sp_get_char_org(sp_global_ptr,char_index,top_level)
-#define get_posn_arg(ppointer,format) sp_get_posn_arg(sp_global_ptr,ppointer,format)
-#define get_scale_arg(ppointer,format) sp_get_scale_arg(sp_global_ptr,ppointer,format)
-#define read_bbox(ppointer,pPmin,pPmax,set_flag) sp_read_bbox(sp_global_ptr,ppointer,pPmin,pPmax,set_flag)
-#define proc_outl_data(pointer) sp_proc_outl_data(sp_global_ptr,pointer)
-#define split_curve(P1,P2,P3,depth) sp_split_curve(sp_global_ptr,P1,P2,P3,depth)
-#define get_args(ppointer,format,pP) sp_get_args(sp_global_ptr,ppointer,format,pP)
-
-#define init_black(specsarg) sp_init_black(sp_global_ptr,specsarg)
-#define begin_char_black(Psw,Pmin,Pmax) sp_begin_char_black(sp_global_ptr,Psw,Pmin,Pmax)
-#define begin_contour_black(P1,outside) sp_begin_contour_black(sp_global_ptr,P1,outside)
-#define line_black(P1) sp_line_black(sp_global_ptr,P1)
-#define end_char_black() sp_end_char_black(sp_global_ptr)
-#define add_intercept_black(y,x) sp_add_intercept_black(sp_global_ptr,y,x)
-#define proc_intercepts_black() sp_proc_intercepts_black(sp_global_ptr)
-
-#define init_screen(specsarg) sp_init_screen(sp_global_ptr,specsarg)
-#define begin_char_screen(Psw,Pmin,Pmax) sp_begin_char_screen(sp_global_ptr,Psw,Pmin,Pmax)
-#define begin_contour_screen(P1,outside) sp_begin_contour_screen(sp_global_ptr,P1,outside)
-#define curve_screen(P1,P2,P3,depth) sp_curve_screen(sp_global_ptr,P1,P2,P3,depth)
-#define scan_curve_screen(X0,Y0,X1,Y1,X2,Y2,X3,Y3) sp_scan_curve_screen(sp_global_ptr,X0,Y0,X1,Y1,X2,Y2,X3,Y3)
-#define vert_line_screen(x,y1,y2) sp_vert_line_screen(sp_global_ptr,x,y1,y2)
-#define line_screen(P1) sp_line_screen(sp_global_ptr,P1)
-#define end_char_screen() sp_end_char_screen(sp_global_ptr)
-#define end_contour_screen() sp_end_contour_screen(sp_global_ptr)
-#define add_intercept_screen(y,x) sp_add_intercept_screen(sp_global_ptr,y,x)
-#define proc_intercepts_screen() sp_proc_intercepts_screen(sp_global_ptr)
-
-#define init_outline(specsarg) sp_init_outline(sp_global_ptr,specsarg)
-#define begin_char_outline(Psw,Pmin,Pmax) sp_begin_char_outline(sp_global_ptr,Psw,Pmin,Pmax)
-#define begin_sub_char_outline(Psw,Pmin,Pmax) sp_begin_sub_char_outline(sp_global_ptr,Psw,Pmin,Pmax)
-#define begin_contour_outline(P1,outside) sp_begin_contour_outline(sp_global_ptr,P1,outside)
-#define curve_outline(P1,P2,P3,depth) sp_curve_outline(sp_global_ptr,P1,P2,P3,depth)
-#define line_outline(P1) sp_line_outline(sp_global_ptr,P1)
-#define end_contour_outline() sp_end_contour_outline(sp_global_ptr)
-#define end_sub_char_outline() sp_end_sub_char_outline(sp_global_ptr)
-#define end_char_outline() sp_end_char_outline(sp_global_ptr)
-
-#define init_2d(specsarg) sp_init_2d(sp_global_ptr,specsarg)
-#define begin_char_2d(Psw, Pmin, Pmax) sp_begin_char_2d(sp_global_ptr,Psw, Pmin, Pmax)
-#define begin_contour_2d(P1, outside) sp_begin_contour_2d(sp_global_ptr,P1, outside)
-#define line_2d(P1) sp_line_2d(sp_global_ptr,P1)
-#define end_char_2d() sp_end_char_2d(sp_global_ptr)
-#define add_intercept_2d(y, x) sp_add_intercept_2d(sp_global_ptr,y, x)
-#define proc_intercepts_2d() sp_proc_intercepts_2d(sp_global_ptr)
-#define draw_vector_to_2d(x0, y0, x1, y1, band) sp_draw_vector_to_2d(sp_global_ptr,x0, y0, x1, y1, band)
-
-#define init_char_out(Psw,Pmin,Pmax) sp_init_char_out(sp_global_ptr,Psw,Pmin,Pmax)
-#define begin_sub_char_out(Psw,Pmin,Pmax) sp_begin_sub_char_out(sp_global_ptr,Psw,Pmin,Pmax)
-#define curve_out(P1,P2,P3,depth) sp_curve_out(sp_global_ptr,P1,P2,P3,depth)
-#define end_contour_out() sp_end_contour_out(sp_global_ptr)
-#define end_sub_char_out() sp_end_sub_char_out(sp_global_ptr)
-#define init_intercepts_out() sp_init_intercepts_out(sp_global_ptr)
-#define restart_intercepts_out() sp_restart_intercepts_out(sp_global_ptr)
-#define set_first_band_out(Pmin,Pmax) sp_set_first_band_out(sp_global_ptr,Pmin,Pmax)
-#define reduce_band_size_out() sp_reduce_band_size_out(sp_global_ptr)
-#define next_band_out() sp_next_band_out(sp_global_ptr)
-
-#define init_userout(specsarg) sp_init_userout(sp_global_ptr,specsarg)
-
-#define reset() sp_reset(sp_global_ptr)
-#define set_key(key) sp_set_key(sp_global_ptr,key)
-#define get_cust_no(font_buff) sp_get_cust_no(sp_global_ptr,font_buff)
-#define set_specs(specsarg) sp_set_specs(sp_global_ptr,specsarg)
-#define setup_consts(xmin,xmax,ymin,ymax) sp_setup_consts(sp_global_ptr,xmin,xmax,ymin,ymax)
-#define setup_tcb(ptcb) sp_setup_tcb(sp_global_ptr,ptcb)
-#define setup_mult(input_mult) sp_setup_mult(sp_global_ptr,input_mult)
-#define setup_offset(input_offset) sp_setup_offset(sp_global_ptr,input_offset)
-#define type_tcb(ptcb) sp_type_tcb(sp_global_ptr,ptcb)
-#define read_long(pointer) sp_read_long(sp_global_ptr,pointer)
-#define read_word_u(pointer) sp_read_word_u(sp_global_ptr,pointer)
-#define init_tcb() sp_init_tcb(sp_global_ptr)
-#define scale_tcb(ptcb,x_pos,y_pos,x_scale,y_scale) sp_scale_tcb(sp_global_ptr,ptcb,x_pos,y_pos,x_scale,y_scale)
-#define plaid_tcb(ppointer,format) sp_plaid_tcb(sp_global_ptr,ppointer,format)
-#define skip_orus(ppointer,short_form,no_ctrl_zones) sp_skip_orus(sp_global_ptr,ppointer,short_form,no_ctrl_zones)
-#define skip_interpolation_table(ppointer,format) sp_skip_interpolation_table(sp_global_ptr,ppointer,format)
-#define skip_control_zone(ppointer,format) sp_skip_control_zone(sp_global_ptr,ppointer,format)
-#define constr_update() sp_constr_update(sp_global_ptr)
-#define read_oru_table(ppointer) sp_read_oru_table(sp_global_ptr,ppointer)
-#define calculate_x_pix(start_edge,end_edge,constr_nr,x_scale,x_offset,ppo,setwidth_pix) sp_calculate_x_pix(sp_global_ptr,start_edge,end_edge,constr_nr,x_scale,x_offset,ppo,setwidth_pix)
-#define calculate_y_pix(start_edge,end_edge,constr_nr,top_scale,bottom_scale,ppo,emtop_pix,embot_pix) sp_calculate_y_pix(sp_global_ptr,start_edge,end_edge,constr_nr,top_scale,bottom_scale,ppo,emtop_pix,embot_pix)
-#define calculate_x_scale(x_factor,x_offset,no_x_ctrl_zones) sp_calculate_x_scale(sp_global_ptr,x_factor,x_offset,no_x_ctrl_zones)
-#define calculate_y_scale(top_scale,bottom_scale,first_y_zone,no_Y_ctrl_zones) sp_calculate_y_scale(sp_global_ptr,top_scale,bottom_scale,first_y_zone,no_Y_ctrl_zones)
-#define setup_pix_table(ppointer,short_form,no_X_ctrl_zones,no_Y_ctrl_zones) sp_setup_pix_table(sp_global_ptr,ppointer,short_form,no_X_ctrl_zones,no_Y_ctrl_zones)
-#define setup_int_table(ppointer,no_X_int_zones, no_Y_int_zones) sp_setup_int_table(sp_global_ptr,ppointer,no_X_int_zones, no_Y_int_zones)
-
-#define fn_init_out(specsarg) (*sp_globals.init_out)(sp_global_ptr,specsarg)
-#define fn_begin_char(Psw,Pmin,Pmax) (*sp_globals.begin_char)(sp_global_ptr,Psw,Pmin,Pmax)
-#define fn_begin_sub_char(Psw,Pmin,Pmax) (*sp_globals.begin_sub_char)(sp_global_ptr,Psw,Pmin,Pmax)
-#define fn_end_sub_char() (*sp_globals.end_sub_char)(sp_global_ptr)
-#define fn_end_char() (*sp_globals.end_char)(sp_global_ptr)
-#define fn_line(P1) (*sp_globals.line)(sp_global_ptr,P1)
-#define fn_end_contour() (*sp_globals.end_contour)(sp_global_ptr)
-#define fn_begin_contour(P0,fmt) (*sp_globals.begin_contour)(sp_global_ptr,P0,fmt)
-#define fn_curve(P1,P2,P3,depth) (*sp_globals.curve)(sp_global_ptr,P1,P2,P3,depth)
-
-
-#define load_char_data(offset, no_bytes, buff_off) sp_load_char_data(sp_global_ptr, offset, no_bytes, buff_off)
-#define report_error(n) sp_report_error(sp_global_ptr, n)
-
-#if INCL_MULTIDEV
-
-#define set_bitmap_device(bfuncs,size) sp_set_bitmap_device(sp_global_ptr,bfuncs,size)
-#define set_outline_device(ofuncs,size) sp_set_outline_device(sp_global_ptr,ofuncs,size)
-
-#define open_bitmap(x_set_width, y_set_width, xmin, xmax, ymin, ymax)(*sp_globals.bitmap_device.p_open_bitmap)(sp_global_ptr,x_set_width, y_set_width, xmin, xmax, ymin, ymax)
-#define set_bitmap_bits(y, xbit1, xbit2)(*sp_globals.bitmap_device.p_set_bits)(sp_global_ptr,y, xbit1, xbit2)
-#define close_bitmap()(*sp_globals.bitmap_device.p_close_bitmap)(sp_global_ptr)
-
-#define open_outline(x_set_width, y_set_width, xmin, xmax, ymin, ymax)(*sp_globals.outline_device.p_open_outline)(sp_global_ptr,x_set_width, y_set_width, xmin, xmax, ymin, ymax)
-#define start_new_char()(*sp_globals.outline_device.p_start_char)(sp_global_ptr)
-#define start_contour(x,y,outside)(*sp_globals.outline_device.p_start_contour)(sp_global_ptr,x,y,outside)
-#define curve_to(x1,y1,x2,y2,x3,y3)(*sp_globals.outline_device.p_curve)(sp_global_ptr,x1,y1,x2,y2,x3,y3)
-#define line_to(x,y)(*sp_globals.outline_device.p_line)(sp_global_ptr,x,y)
-#define close_contour()(*sp_globals.outline_device.p_close_contour)(sp_global_ptr)
-#define close_outline()(*sp_globals.outline_device.p_close_outline)(sp_global_ptr)
-
-#else
-
-#define open_bitmap(x_set_width, y_set_width, xmin, xmax, ymin, ymax) sp_open_bitmap(sp_global_ptr, x_set_width, y_set_width, xmin, xmax, ymin, ymax)
-#define set_bitmap_bits(y, xbit1, xbit2) sp_set_bitmap_bits(sp_global_ptr, y, xbit1, xbit2)
-#define close_bitmap() sp_close_bitmap(sp_global_ptr)
-
-#define open_outline(x_set_width, y_set_width, xmin, xmax, ymin, ymax) sp_open_outline(sp_global_ptr, x_set_width, y_set_width, xmin, xmax, ymin, ymax)
-#define start_new_char() sp_start_new_char(sp_global_ptr )
-#define start_contour(x,y,outside) sp_start_contour(sp_global_ptr, x,y,outside)
-#define curve_to(x1,y1,x2,y2,x3,y3) sp_curve_to(sp_global_ptr, x1,y1,x2,y2,x3,y3)
-#define line_to(x,y) sp_line_to(sp_global_ptr, x,y)
-#define close_contour() sp_close_contour(sp_global_ptr)
-#define close_outline() sp_close_outline(sp_global_ptr)
-
-#endif
-#endif
-
-
diff --git a/nx-X11/lib/font/Speedo/speedo.h b/nx-X11/lib/font/Speedo/speedo.h
deleted file mode 100644
index 5eb516c1c..000000000
--- a/nx-X11/lib/font/Speedo/speedo.h
+++ /dev/null
@@ -1,890 +0,0 @@
-/* $Xorg: speedo.h,v 1.3 2000/08/17 19:46:27 cpqbld Exp $ */
-
-/*
-
-Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
-You are hereby granted permission under all Bitstream propriety rights to
-use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
-software and the Bitstream Charter outline font for any purpose and without
-restrictions; provided, that this notice is left intact on all copies of such
-software or font and that Bitstream's trademark is acknowledged as shown below
-on all unmodified copies of such font.
-
-BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
-
-
-BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
-DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
-INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
-WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/speedo.h,v 3.5 2001/01/17 19:43:18 dawes Exp $ */
-
-#ifndef _SPEEDO_H_
-#define _SPEEDO_H_
-
-#include <X11/Xmd.h>
-
-/***************************** S P E E D O . H *******************************
- ****************************************************************************/
-
-/***** USER OPTIONS OVERRIDE DEFAULTS ******/
-#include "useropt.h"
-
-/***** CONFIGURATION DEFINITIONS *****/
-
-#ifndef INCL_CLIPPING
-#define INCL_CLIPPING 0 /* 0 indicates CLIPPING code is not compiled in*/
-#endif
-
-#ifndef INCL_SQUEEZING
-#define INCL_SQUEEZING 0 /* 0 indicates SQUEEZE code is not compiled in*/
-#endif
-
-#ifndef INCL_EXT
-#define INCL_EXT 1 /* 1 to include extended font support */
-#endif /* 0 to omit extended font support */
-
-#ifndef INCL_RULES
-#define INCL_RULES 1 /* 1 to include intelligent scaling support */
-#endif /* 0 to omit intelligent scaling support */
-
-#ifndef INCL_BLACK
-#define INCL_BLACK 1 /* 1 to include blackwriter output support */
-#endif /* 0 to omit output mode 0 support */
-
-#ifndef INCL_SCREEN
-#define INCL_SCREEN 0 /* 1 to include screen writeroutput support */
-#endif /* 0 to omit support */
-
-#ifndef INCL_OUTLINE
-#define INCL_OUTLINE 0 /* 1 to include outline output support */
-#endif /* 0 to omit output mode 2 support */
-
-#ifndef INCL_2D
-#define INCL_2D 0 /* 1 to include 2d blackwriter output support */
-#endif /* 0 to omit output mode 3 support */
-
-#ifndef INCL_USEROUT
-#define INCL_USEROUT 0 /* 1 to include user defined output module support */
-#endif /* 0 to omit user defined output module support */
-
-#ifndef INCL_LCD
-#define INCL_LCD 1 /* 1 to include load char data support*/
-#endif /* 0 to omit load char data support */
-#ifndef INCL_ISW
-#define INCL_ISW 0 /* 1 to include imported width support */
-#endif /* 0 to omit imported width support */
-
-#ifndef INCL_METRICS
-#define INCL_METRICS 1 /* 1 to include metrics support */
-#endif /* 0 to omit metrics support */
-
-#ifndef INCL_KEYS
-#define INCL_KEYS 0 /* 1 to include multi key support */
-#endif /* 0 to omit multi key support */
-
-#ifndef INCL_MULTIDEV
-#define INCL_MULTIDEV 0 /* 1 to include multiple output device support */
-#endif /* 0 to omit multi device support */
-
-#ifndef SHORT_LISTS
-#define SHORT_LISTS 1 /* 1 to allocate small intercept lists */
-#endif
-
-#ifndef INCL_PLAID_OUT
-#define INCL_PLAID_OUT 0 /* 1 to include plaid data monitoring */
-#endif /* 0 to omit plaid data monitoring */
-
-#ifndef FONTFAR /* if Intel mixed memory model implementation */
-#define FONTFAR /* pointer type modifier for font buffer */
-#endif
-
-#ifndef STACKFAR /* if Intel mixed memory model implementation */
-#define STACKFAR /* pointer type modifier for font buffer */
-#endif
-
-#ifndef GLOBALFAR
-#define GLOBALFAR
-#endif
-
-#define MODE_BLACK 0
-#define MODE_SCREEN MODE_BLACK + INCL_BLACK
-#define MODE_OUTLINE MODE_SCREEN + INCL_SCREEN
-#define MODE_2D MODE_OUTLINE + INCL_OUTLINE
-
-#ifdef DYNAMIC_ALLOC
-#if DYNAMIC_ALLOC
-#define STATIC_ALLOC 0
-#endif
-#endif
-
-#ifdef REENTRANT_ALLOC
-#if REENTRANT_ALLOC
-#define STATIC_ALLOC 0
-#endif
-#endif
-
-#ifndef STATIC_ALLOC
-#define STATIC_ALLOC 1
-#endif
-
-#ifndef DYNAMIC_ALLOC
-#define DYNAMIC_ALLOC 0
-#endif
-
-#ifndef REENTRANT_ALLOC
-#define REENTRANT_ALLOC 0
-#endif
-
-/***** TYPE DEFINITIONS *****/
-
-#ifndef STDEF
-#ifndef SPD_BMAP
-
-typedef INT8 fix7;
-
-typedef double real;
-
-typedef CARD8 ufix8;
-#ifndef VFONT
-typedef CARD8 boolean;
-#endif
-#endif
-
-typedef INT16 fix15;
-
-typedef CARD16 ufix16;
-
-typedef INT32 fix31;
-
-typedef CARD32 ufix32;
-#endif
-
-/***** GENERAL CONSTANTS *****/
-
-#ifndef FALSE
-#define FALSE 0
-#define TRUE 1
-#endif
-
-#ifndef NULL
-#include <stddef.h>
-#endif
-
-#define FUNCTION
-
-#define BIT0 0x01
-#define BIT1 0x02
-#define BIT2 0x04
-#define BIT3 0x08
-#define BIT4 0x10
-#define BIT5 0x20
-#define BIT6 0x40
-#define BIT7 0x80
-
-#if INCL_EXT /* Extended fonts supported? */
-
-#define MAX_CONSTR 750 /* Max constraints (incl 4 dummies) */
-#define MAX_CTRL_ZONES 256 /* Max number of controlled orus */
-#define MAX_INT_ZONES 256 /* Max number of interpolation zones */
-
-#else /* Compact fonts only supported */
-
-#define MAX_CONSTR 512 /* Max constraints (incl 4 dummies) */
-#define MAX_CTRL_ZONES 64 /* Max number of controlled orus */
-#define MAX_INT_ZONES 64 /* Max number of interpolation zones */
-
-#endif
-
-#define SCALE_SHIFT 12 /* Binary point positiion for scale values */
-#define SCALE_RND 2048 /* Rounding bit for scaling transformation */
-#define ONE_SCALE 4096 /* Unity scale value */
-
-#ifdef INCL_SCREEN /* constants used by Screenwriter module */
-#define LEFT_INT 1 /* left intercept */
-#define END_INT 2 /* last intercept */
-#define FRACTION 0xFC /* fractional portion of intercept type list */
-#endif
-
-#if INCL_SQUEEZING || INCL_CLIPPING /* constants used by SQUEEZEing code */
-#define EM_TOP 764
-#define EM_BOT -236
-#endif
-
-/***** STRUCTURE DEFINITIONS *****/
-#if REENTRANT_ALLOC
-#define PROTO_DECL1 struct speedo_global_data GLOBALFAR *sp_global_ptr
-#define PROTO_DECL2 PROTO_DECL1 ,
-#else
-#define PROTO_DECL1 void
-#define PROTO_DECL2
-#endif
-
-typedef
-struct buff_tag
- {
- ufix8 FONTFAR *org; /* Pointer to start of buffer */
- ufix32 no_bytes; /* Size of buffer in bytes */
- }
-buff_t; /* Buffer descriptor */
-
-typedef struct constr_tag
- {
- ufix8 FONTFAR *org; /* Pointer to first byte in constr data */
- ufix16 font_id; /* Font id for calculated data */
- fix15 xppo; /* X pixels per oru for calculated data */
- fix15 yppo; /* Y pixels per oru for calculated data */
- boolean font_id_valid; /* TRUE if font id valid */
- boolean data_valid; /* TRUE if calculated data valid */
- boolean active; /* TRUE if constraints enabled */
- }
-constr_t; /* Constraint data state */
-
-typedef struct kern_tag
- {
- ufix8 FONTFAR *tkorg; /* First byte of track kerning data */
- ufix8 FONTFAR *pkorg; /* First byte of pair kerning data */
- fix15 no_tracks; /* Number of kerning tracks */
- fix15 no_pairs; /* Number of kerning pairs */
- }
-kern_t; /* Kerning control block */
-
-typedef struct specs_tag
- {
- buff_t STACKFAR *pfont; /* Pointer to font data */
- fix31 xxmult; /* Coeff of X orus to compute X pix */
- fix31 xymult; /* Coeff of Y orus to compute X pix */
- fix31 xoffset; /* Constant to compute X pix */
- fix31 yxmult; /* Coeff of X orus to compute Y pix */
- fix31 yymult; /* Coeff of Y orus to compute Y pix */
- fix31 yoffset; /* Constant to compute Y pix */
- ufix32 flags; /* Mode flags: */
- /* Bit 0 - 2: Output module selector: */
- /* Bit 3: Send curves to output module*/
- /* Bit 4: Use linear scaling if set */
- /* Bit 5: Inhibit constraint table */
- /* Bit 6: Import set width if set */
- /* Bit 7: not used */
- /* Bit 8: Squeeze left if set */
- /* Bit 9: Squeeze right if set */
- /* Bit 10: Squeeze top if set */
- /* Bit 11: Squeeze bottom if set */
- /* Bit 12: Clip left if set */
- /* Bit 13: Clip right if set */
- /* Bit 14: Clip top if set */
- /* Bit 15: Clip bottom if set */
- /* Bits 16-31 not used */
- void *out_info; /* information for output module */
- }
-specs_t; /* Specs structure for fw_set_specs */
-
-typedef struct tcb_tag
- {
- fix15 xxmult; /* Linear coeff of Xorus to compute Xpix */
- fix15 xymult; /* Linear coeff of Yorus to compute Xpix */
- fix31 xoffset; /* Linear constant to compute Xpix */
- fix15 yxmult; /* Linear coeff of Xorus to compute Ypix */
- fix15 yymult; /* Linear coeff of Yorus to compute Ypix */
- fix31 yoffset; /* Linear constant to compute Ypix */
- fix15 xppo; /* Pixels per oru in X dimension of char */
- fix15 yppo; /* Pixels per oru in Y dimension of char */
- fix15 xpos; /* Origin in X dimension of character */
- fix15 ypos; /* Origin in Y dimension of character */
- ufix16 xtype; /* Transformation type for X oru coords */
- ufix16 ytype; /* Transformation type for Y oru coords */
- ufix16 xmode; /* Transformation mode for X oru coords */
- ufix16 ymode; /* Transformation mode for Y oru coords */
- fix15 mirror; /* Transformation creates mirror image */
- }
-tcb_t; /* Transformation control block */
-
-typedef struct point_tag
- {
- fix15 x; /* X coord of point (shifted pixels) */
- fix15 y; /* Y coord of point (shifted pixels) */
- }
-point_t; /* Point in device space */
-
-typedef struct band_tag
- {
- fix15 band_max;
- fix15 band_min;
- fix15 band_array_offset;
- fix15 band_floor;
- fix15 band_ceiling;
- } band_t;
-
-typedef struct bbox_tag
- {
- fix31 xmin;
- fix31 xmax;
- fix31 ymin;
- fix31 ymax;
- } bbox_t;
-
-#if SHORT_LISTS
-#define MAX_INTERCEPTS 256 /* Max storage for intercepts */
-typedef ufix8 cdr_t; /* 8 bit links in intercept chains */
-#else
-#define MAX_INTERCEPTS 1000 /* Max storage for intercepts */
-typedef ufix16 cdr_t; /* 16 bit links in intercept chains */
-#endif
-
-#if REENTRANT_ALLOC
-
-typedef struct intercepts_tag
- {
- fix15 car[MAX_INTERCEPTS];
- fix15 cdr[MAX_INTERCEPTS];
-#if INCL_SCREEN
- ufix8 inttype[MAX_INTERCEPTS];
- ufix8 leftedge;
- ufix16 fracpix;
-#endif
- } intercepts_t;
-
-typedef struct plaid_tag
- {
- fix15 orus[MAX_CTRL_ZONES]; /* Controlled coordinate table (orus) */
-#if INCL_RULES
- fix15 pix[MAX_CTRL_ZONES]; /* Controlled coordinate table (sub-pixels) */
- fix15 mult[MAX_INT_ZONES]; /* Interpolation multiplier table */
- fix31 offset[MAX_INT_ZONES]; /* Interpolation offset table */
-#endif
- } plaid_t;
-#endif
-
-#if INCL_MULTIDEV
-typedef struct bitmap_tag
- {
- void (*p_open_bitmap)(PROTO_DECL2 fix31 x_set_width, fix31 y_set_width, fix31 xorg, fix31 yorg, fix15 xsize,fix15 ysize);
- void (*p_set_bits)(PROTO_DECL2 fix15 y, fix15 xbit1, fix15 xbit2);
- void (*p_close_bitmap)(PROTO_DECL1);
- } bitmap_t;
-
-typedef struct outline_tag
- {
- void (*p_open_outline)(PROTO_DECL2 fix31 x_set_width, fix31 y_set_width, fix31 xmin, fix31 xmax, fix31 ymin,fix31 ymax);
- void (*p_start_char)(PROTO_DECL1);
- void (*p_start_contour)(PROTO_DECL2 fix31 x,fix31 y,boolean outside);
- void (*p_curve)(PROTO_DECL2 fix31 x1, fix31 y1, fix31 x2, fix31 y2, fix31 x3, fix31 y3);
- void (*p_line)(PROTO_DECL2 fix31 x, fix31 y);
- void (*p_close_contour)(PROTO_DECL1);
- void (*p_close_outline)(PROTO_DECL1);
- } outline_t;
-#endif
-
-/* ---------------------------------------------------*/
-/**** MAIN GLOBAL DATA STRUCTURE, SPEEDO_GLOBALS *****/
-
-typedef struct speedo_global_data
- {
-/* do_char.c data definitions */
-#if INCL_METRICS /* Metrics functions supported? */
- kern_t kern; /* Kerning control block */
-#endif /* endif incl_metrics */
- point_t Psw; /* End of escapement vector (1/65536 pixel units) */
-
-#if INCL_LCD /* Dynamic load character data supported? */
- fix15 cb_offset; /* Offset to sub-char data in char buffer */
-#endif /* endif incl_lcd */
-
-/* do_trns.c data definitions */
- point_t P0; /* Current point (sub-pixels) */
- fix15 x_orus; /* Current X argument (orus) */
- fix15 y_orus; /* Current Y argument (orus) */
- fix15 x_pix; /* Current X argument (sub-pixels) */
- fix15 y_pix; /* Current Y argument (sub-pixels) */
- ufix8 x_int; /* Current X interpolation zone */
- ufix8 y_int; /* Current Y interpolation zone */
-
-#if INCL_MULTIDEV && INCL_OUTLINE
- outline_t outline_device;
- boolean outline_device_set;
-#endif
-
-#if INCL_BLACK || INCL_SCREEN || INCL_2D
-#if INCL_MULTIDEV
- bitmap_t bitmap_device;
- boolean bitmap_device_set;
-#endif
- band_t y_band; /* Y current band(whole pixels) */
-
- struct set_width_tag
- {
- fix31 x;
- fix31 y;
- } set_width; /* Character escapement vector */
-
- boolean first_pass; /* TRUE during first pass thru outline data */
- boolean extents_running; /* T if extent accumulation for each vector */
- fix15 x0_spxl; /* X coord of current point (sub pixels) */
- fix15 y0_spxl; /* Y coord of current point (sub pixels) */
- fix15 y_pxl; /* Y coord of current point (whole pixels) */
-#if REENTRANT_ALLOC
- intercepts_t STACKFAR *intercepts;
-#else /* else if not reentrant */
- fix15 car[MAX_INTERCEPTS]; /* Data field of intercept storage */
- cdr_t cdr[MAX_INTERCEPTS]; /* Link field of intercept storage */
-#if INCL_SCREEN
- ufix8 inttype[MAX_INTERCEPTS];
- ufix8 leftedge;
- ufix16 fracpix;
-#endif /* endif incl_screen */
-#endif /* endif reentrant */
- fix15 bmap_xmin; /* Min X value (sub-pixel units) */
- fix15 bmap_xmax; /* Max X value (sub-pixel units) */
- fix15 bmap_ymin; /* Min Y value (sub-pixel units) */
- fix15 bmap_ymax; /* Max Y value (sub-pixel units) */
- fix15 no_y_lists; /* Number of active intercept lists */
- fix15 first_offset; /* Index of first active list cell */
- fix15 next_offset; /* Index of next free list cell */
- boolean intercept_oflo; /* TRUE if intercepts data lost */
-#endif /* endif incl_black, incl_screen, incl_2d */
-
-/* bounding box now used by all output modules, including outline */
- fix15 xmin; /* Min X value in whole character */
- fix15 xmax; /* Max X value in whole character */
- fix15 ymin; /* Min Y value in whole character */
- fix15 ymax; /* Max Y value in whole character */
-
-#if INCL_2D
- fix15 no_x_lists; /* Number of active x intercept lists */
- band_t x_band; /* X current band(whole pixels) */
- boolean x_scan_active; /* X scan flag during scan conversion */
-#endif
-
-/* reset.c data definitions */
- ufix16 key32; /* Decryption keys 3,2 combined */
- ufix8 key4; /* Decryption key 4 */
- ufix8 key6; /* Decryption key 6 */
- ufix8 key7; /* Decryption key 7 */
- ufix8 key8; /* Decryption key 8 */
-
-/* set_spcs.c data definitions */
- buff_t font;
- buff_t GLOBALFAR *pfont; /* Pointer to font buffer structure */
- fix31 font_buff_size; /* Number of bytes loaded in font buffer */
- ufix8 FONTFAR *pchar_dir; /* Pointer to character directory */
- fix15 first_char_idx; /* Index to first character in font */
- fix15 no_chars_avail; /* Total characters in font layout */
- fix15 orus_per_em; /* Outline resolution */
- fix15 metric_resolution; /* metric resolution for setwidths, kerning pairs
- (defaults to orus_per_em) */
- tcb_t tcb0; /* Top level transformation control block */
-
- boolean specs_valid; /* TRUE if fw_set_specs() successful */
-
- fix15 depth_adj; /* Curve splitting depth adjustment */
- boolean curves_out; /* Allow curves to output module */
- fix15 output_mode; /* Output module selector */
- fix15 thresh; /* Scan conversion threshold (sub-pixels) */
- boolean normal; /* TRUE if 0 obl and mult of 90 deg rot */
-
- fix15 multshift; /* Fixed point shift for multipliers */
- fix15 pixshift; /* Fixed point shift for sub-pixels */
- fix15 poshift; /* Left shift from pixel to output format */
- fix15 mpshift; /* Fixed point shift for mult to sub-pixels */
- fix31 multrnd; /* 0.5 in multiplier units */
- fix15 pixrnd; /* 0.5 in sub-pixel units */
- fix31 mprnd; /* 0.5 sub-pixels in multiplier units */
- fix15 pixfix; /* Mask to remove fractional pixels */
- fix15 onepix; /* 1.0 pixels in sub-pixel units */
-
- boolean (*init_out)(PROTO_DECL2 specs_t GLOBALFAR *specsarg);
- boolean (*begin_char)(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
- void (*begin_sub_char)(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
- void (*begin_contour)(PROTO_DECL2 point_t P1,boolean outside);
- void (*curve)(PROTO_DECL2 point_t P1, point_t P2, point_t P3, fix15 depth);
- void (*line)(PROTO_DECL2 point_t P1);
- void (*end_contour)(PROTO_DECL1);
- void (*end_sub_char)(PROTO_DECL1);
- boolean (*end_char)(PROTO_DECL1);
- specs_t GLOBALFAR *pspecs; /* Pointer to specifications bundle */
- specs_t specs; /* copy specs onto stack */
- ufix8 FONTFAR *font_org; /* Pointer to start of font data */
- ufix8 FONTFAR *hdr2_org; /* Pointer to start of private header data */
-
-/* set_trns.c data definitions */
- tcb_t tcb; /* Current transformation control block */
- ufix8 Y_edge_org; /* Index to first Y controlled coordinate */
- ufix8 Y_int_org; /* Index to first Y interpolation zone */
- fix31 rnd_xmin; /* rounded out value of xmin for int-char spac. fix */
-
-#if REENTRANT_ALLOC
- plaid_t STACKFAR *plaid;
-#else /* if not reentrant */
- fix15 orus[MAX_CTRL_ZONES]; /* Controlled coordinate table (orus) */
-#if INCL_RULES
- fix15 pix[MAX_CTRL_ZONES]; /* Controlled coordinate table (sub-pixels) */
- fix15 mult[MAX_INT_ZONES]; /* Interpolation multiplier table */
- fix31 offset[MAX_INT_ZONES]; /* Interpolation offset table */
-#endif /* endif incl_rules */
-#endif /* endif not reentrant */
-
- fix15 no_X_orus; /* Number of X controlled coordinates */
- fix15 no_Y_orus; /* Number of Y controlled coordinates */
- ufix16 Y_constr_org; /* Origin of constraint table in font data */
-
-#if INCL_RULES
- constr_t constr; /* Constraint data state */
- boolean c_act[MAX_CONSTR]; /* TRUE if constraint currently active */
- fix15 c_pix[MAX_CONSTR]; /* Size of constrained zone if active */
-#endif
-#if INCL_ISW
- boolean import_setwidth_act; /* boolean to indicate imported setwidth */
- boolean isw_modified_constants;
- ufix32 imported_width; /* value of imported setwidth */
- fix15 isw_xmax; /* maximum oru value for constants*/
-#endif
-#if INCL_SQUEEZING || INCL_ISW
- fix15 setwidth_orus; /* setwidth value in orus */
- /* bounding box in orus for squeezing */
- fix15 bbox_xmin_orus; /* X minimum in orus */
- fix15 bbox_xmax_orus; /* X maximum in orus */
- fix15 bbox_ymin_orus; /* Y minimum in orus */
- fix15 bbox_ymax_orus; /* Y maximum in orus */
-#endif
-#ifdef INCL_SQUEEZING
- boolean squeezing_compound; /* flag to indicate a compound character*/
-#endif
-#ifdef INCL_CLIPPING
- fix31 clip_xmax;
- fix31 clip_ymax;
- fix31 clip_xmin;
- fix31 clip_ymin;
-#endif
- } SPEEDO_GLOBALS;
-
-/***********************************************************************************
- *
- * Speedo global data structure allocation
- *
- ***********************************************************************************/
-
-#ifdef SET_SPCS
-#define EXTERN
-#else
-#define EXTERN extern
-#endif
-#if STATIC_ALLOC
-EXTERN SPEEDO_GLOBALS GLOBALFAR sp_globals;
-#define sp_intercepts sp_globals
-#define sp_plaid sp_globals
-#else
-#if DYNAMIC_ALLOC
-EXTERN SPEEDO_GLOBALS GLOBALFAR *sp_global_ptr;
-#define sp_globals (*sp_global_ptr)
-#define sp_intercepts (*sp_global_ptr)
-#define sp_plaid (*sp_global_ptr)
-#else
-#if REENTRANT_ALLOC
-#define sp_globals (*sp_global_ptr)
-#define sp_intercepts (*(*sp_global_ptr).intercepts)
-#define sp_plaid (*(*sp_global_ptr).plaid)
-#endif
-#endif
-#endif
-#ifdef EXTERN
-#undef EXTERN
-#endif
-
-
-/***** PUBLIC FONT HEADER OFFSET CONSTANTS *****/
-#define FH_FMVER 0 /* U D4.0 CR LF NULL NULL 8 bytes */
-#define FH_FNTSZ 8 /* U Font size (bytes) 4 bytes */
-#define FH_FBFSZ 12 /* U Min font buffer size (bytes) 4 bytes */
-#define FH_CBFSZ 16 /* U Min char buffer size (bytes) 2 bytes */
-#define FH_HEDSZ 18 /* U Header size (bytes) 2 bytes */
-#define FH_FNTID 20 /* U Source Font ID 2 bytes */
-#define FH_SFVNR 22 /* U Source Font Version Number 2 bytes */
-#define FH_FNTNM 24 /* U Source Font Name 70 bytes */
-#define FH_MDATE 94 /* U Manufacturing Date 10 bytes */
-#define FH_LAYNM 104 /* U Layout Name 70 bytes */
-#define FH_CPYRT 174 /* U Copyright Notice 78 bytes */
-#define FH_NCHRL 252 /* U Number of Chars in Layout 2 bytes */
-#define FH_NCHRF 254 /* U Total Number of Chars in Font 2 bytes */
-#define FH_FCHRF 256 /* U Index of first char in Font 2 bytes */
-#define FH_NKTKS 258 /* U Number of kerning tracks in font 2 bytes */
-#define FH_NKPRS 260 /* U Number of kerning pairs in font 2 bytes */
-#define FH_FLAGS 262 /* U Font flags 1 byte: */
- /* Bit 0: Extended font */
- /* Bit 1: not used */
- /* Bit 2: not used */
- /* Bit 3: not used */
- /* Bit 4: not used */
- /* Bit 5: not used */
- /* Bit 6: not used */
- /* Bit 7: not used */
-#define FH_CLFGS 263 /* U Classification flags 1 byte: */
- /* Bit 0: Italic */
- /* Bit 1: Monospace */
- /* Bit 2: Serif */
- /* Bit 3: Display */
- /* Bit 4: not used */
- /* Bit 5: not used */
- /* Bit 6: not used */
- /* Bit 7: not used */
-#define FH_FAMCL 264 /* U Family Classification 1 byte: */
- /* 0: Don't care */
- /* 1: Serif */
- /* 2: Sans serif */
- /* 3: Monospace */
- /* 4: Script or calligraphic */
- /* 5: Decorative */
- /* 6-255: not used */
-#define FH_FRMCL 265 /* U Font form Classification 1 byte: */
- /* Bits 0-3 (width type): */
- /* 0-3: not used */
- /* 4: Condensed */
- /* 5: not used */
- /* 6: Semi-condensed */
- /* 7: not used */
- /* 8: Normal */
- /* 9: not used */
- /* 10: Semi-expanded */
- /* 11: not used */
- /* 12: Expanded */
- /* 13-15: not used */
- /* Bits 4-7 (Weight): */
- /* 0: not used */
- /* 1: Thin */
- /* 2: Ultralight */
- /* 3: Extralight */
- /* 4: Light */
- /* 5: Book */
- /* 6: Normal */
- /* 7: Medium */
- /* 8: Semibold */
- /* 9: Demibold */
- /* 10: Bold */
- /* 11: Extrabold */
- /* 12: Ultrabold */
- /* 13: Heavy */
- /* 14: Black */
- /* 15-16: not used */
-#define FH_SFNTN 266 /* U Short Font Name 32 bytes */
-#define FH_SFACN 298 /* U Short Face Name 16 bytes */
-#define FH_FNTFM 314 /* U Font form 14 bytes */
-#define FH_ITANG 328 /* U Italic angle 2 bytes (1/256th deg) */
-#define FH_ORUPM 330 /* U Number of ORUs per em 2 bytes */
-#define FH_WDWTH 332 /* U Width of Wordspace 2 bytes */
-#define FH_EMWTH 334 /* U Width of Emspace 2 bytes */
-#define FH_ENWTH 336 /* U Width of Enspace 2 bytes */
-#define FH_TNWTH 338 /* U Width of Thinspace 2 bytes */
-#define FH_FGWTH 340 /* U Width of Figspace 2 bytes */
-#define FH_FXMIN 342 /* U Font-wide min X value 2 bytes */
-#define FH_FYMIN 344 /* U Font-wide min Y value 2 bytes */
-#define FH_FXMAX 346 /* U Font-wide max X value 2 bytes */
-#define FH_FYMAX 348 /* U Font-wide max Y value 2 bytes */
-#define FH_ULPOS 350 /* U Underline position 2 bytes */
-#define FH_ULTHK 352 /* U Underline thickness 2 bytes */
-#define FH_SMCTR 354 /* U Small caps transformation 6 bytes */
-#define FH_DPSTR 360 /* U Display sups transformation 6 bytes */
-#define FH_FNSTR 366 /* U Footnote sups transformation 6 bytes */
-#define FH_ALSTR 372 /* U Alpha sups transformation 6 bytes */
-#define FH_CMITR 378 /* U Chemical infs transformation 6 bytes */
-#define FH_SNMTR 384 /* U Small nums transformation 6 bytes */
-#define FH_SDNTR 390 /* U Small denoms transformation 6 bytes */
-#define FH_MNMTR 396 /* U Medium nums transformation 6 bytes */
-#define FH_MDNTR 402 /* U Medium denoms transformation 6 bytes */
-#define FH_LNMTR 408 /* U Large nums transformation 6 bytes */
-#define FH_LDNTR 414 /* U Large denoms transformation 6 bytes */
- /* Transformation data format: */
- /* Y position 2 bytes */
- /* X scale 2 bytes (1/4096ths) */
- /* Y scale 2 bytes (1/4096ths) */
-#define SIZE_FW FH_LDNTR + 6 /* size of nominal font header */
-#define EXP_FH_METRES SIZE_FW /* offset to expansion field metric resolution (optional) */
-
-
-
-/***** MODE FLAGS CONSTANTS *****/
-#define CURVES_OUT 0X0008 /* Output module accepts curves */
-#define BOGUS_MODE 0X0010 /* Linear scaling mode */
-#define CONSTR_OFF 0X0020 /* Inhibit constraint table */
-#define IMPORT_WIDTHS 0X0040 /* Imported width mode */
-#define SQUEEZE_LEFT 0X0100 /* Squeeze left mode */
-#define SQUEEZE_RIGHT 0X0200 /* Squeeze right mode */
-#define SQUEEZE_TOP 0X0400 /* Squeeze top mode */
-#define SQUEEZE_BOTTOM 0X0800 /* Squeeze bottom mode */
-#define CLIP_LEFT 0X1000 /* Clip left mode */
-#define CLIP_RIGHT 0X2000 /* Clip right mode */
-#define CLIP_TOP 0X4000 /* Clip top mode */
-#define CLIP_BOTTOM 0X8000 /* Clip bottom mode */
-
-/***********************************************************************************
- *
- * Speedo function declarations - use prototypes if available
- *
- ***********************************************************************************/
-
-/* do_char.c functions */
-ufix16 sp_get_char_id(PROTO_DECL2 ufix16 char_index);
-boolean sp_make_char(PROTO_DECL2 ufix16 char_index);
-#if INCL_ISW
-fix31 sp_compute_isw_scale(PROTO_DECL2);
-static boolean sp_do_make_char(PROTO_DECL2 ufix16 char_index);
-boolean sp_make_char_isw(PROTO_DECL2 ufix16 char_index, ufix32 imported_width);
-static boolean sp_reset_xmax(PROTO_DECL2 fix31 xmax);
-#endif
-#if INCL_ISW || INCL_SQUEEZING
-static void sp_preview_bounding_box(PROTO_DECL2 ufix8 FONTFAR *pointer,ufix8 format);
-#endif
-
-#if INCL_METRICS /* Metrics functions supported? */
-fix31 sp_get_char_width(PROTO_DECL2 ufix16 char_index);
-fix15 sp_get_track_kern(PROTO_DECL2 fix15 track,fix15 point_size);
-fix31 sp_get_pair_kern(PROTO_DECL2 ufix16 char_index1,ufix16 char_index2);
-boolean sp_get_char_bbox(PROTO_DECL2 ufix16 char_index, bbox_t *bbox);
-#endif
-
-/* do_trns.c functions */
-ufix8 FONTFAR *sp_read_bbox(PROTO_DECL2 ufix8 FONTFAR *pointer,point_t STACKFAR *pPmin,point_t STACKFAR *pPmax,boolean set_flag);
-void sp_proc_outl_data(PROTO_DECL2 ufix8 FONTFAR *pointer);
-
-/* out_blk.c functions */
-#if INCL_BLACK
-boolean sp_init_black(PROTO_DECL2 specs_t GLOBALFAR *specsarg);
-boolean sp_begin_char_black(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
-void sp_begin_contour_black(PROTO_DECL2 point_t P1,boolean outside);
-void sp_line_black(PROTO_DECL2 point_t P1);
-boolean sp_end_char_black(PROTO_DECL1);
-#endif
-
-/* out_scrn.c functions */
-#if INCL_SCREEN
-boolean sp_init_screen(PROTO_DECL2 specs_t GLOBALFAR *specsarg);
-boolean sp_begin_char_screen(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
-void sp_begin_contour_screen(PROTO_DECL2 point_t P1,boolean outside);
-void sp_curve_screen(PROTO_DECL2 point_t P1,point_t P2,point_t P3, fix15 depth);
-void sp_scan_curve_screen(PROTO_DECL2 fix31 X0,fix31 Y0,fix31 X1,fix31 Y1,fix31 X2,fix31 Y2,fix31 X3,fix31 Y3);
-void sp_vert_line_screen(PROTO_DECL2 fix31 x, fix15 y1, fix15 y2);
-void sp_line_screen(PROTO_DECL2 point_t P1);
-void sp_end_contour_screen(PROTO_DECL1);
-boolean sp_end_char_screen(PROTO_DECL1);
-#endif
-
-/* out_outl.c functions */
-#if INCL_OUTLINE
-#if INCL_MULTIDEV
-boolean sp_set_outline_device(PROTO_DECL2 outline_t *ofuncs, ufix16 size);
-#endif
-
-
-boolean sp_init_outline(PROTO_DECL2 specs_t GLOBALFAR *specsarg);
-boolean sp_begin_char_outline(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
-void sp_begin_sub_char_outline(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
-void sp_begin_contour_outline(PROTO_DECL2 point_t P1,boolean outside);
-void sp_curve_outline(PROTO_DECL2 point_t P1,point_t P2,point_t P3, fix15 depth);
-void sp_line_outline(PROTO_DECL2 point_t P1);
-void sp_end_contour_outline(PROTO_DECL1);
-void sp_end_sub_char_outline(PROTO_DECL1);
-boolean sp_end_char_outline(PROTO_DECL1);
-#endif
-
-/* out_bl2d.c functions */
-#if INCL_2D
-boolean sp_init_2d(PROTO_DECL2 specs_t GLOBALFAR *specsarg);
-boolean sp_begin_char_2d(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
-void sp_begin_contour_2d(PROTO_DECL2 point_t P1,boolean outside);
-void sp_line_2d(PROTO_DECL2 point_t P1);
-boolean sp_end_char_2d(PROTO_DECL1);
-#endif
-
-/* out_util.c functions */
-#if INCL_BLACK || INCL_SCREEN || INCL_2D
-
-#if INCL_MULTIDEV
-boolean sp_set_bitmap_device(PROTO_DECL2 bitmap_t *bfuncs, ufix16 size);
-#endif
-
-void sp_init_char_out(PROTO_DECL2 point_t Psw, point_t Pmin, point_t Pmax);
-void sp_begin_sub_char_out(PROTO_DECL2 point_t Psw, point_t Pmin, point_t Pmax);
-void sp_curve_out(PROTO_DECL2 point_t P1, point_t P2, point_t P3, fix15 depth);
-void sp_end_contour_out(PROTO_DECL1);
-void sp_end_sub_char_out(PROTO_DECL1);
-void sp_init_intercepts_out(PROTO_DECL1);
-void sp_restart_intercepts_out(PROTO_DECL1);
-void sp_set_first_band_out(PROTO_DECL2 point_t Pmin, point_t Pmax);
-void sp_reduce_band_size_out(PROTO_DECL1);
-boolean sp_next_band_out(PROTO_DECL1);
-#endif
-
-#if INCL_USEROUT
-boolean sp_init_userout(specs_t *specsarg);
-#endif
-
-
-/* reset.c functions */
-void sp_reset(PROTO_DECL1);
-#if INCL_KEYS
-void sp_set_key(PROTO_DECL2 ufix8 key[]);
-#endif
-ufix16 sp_get_cust_no(PROTO_DECL2 buff_t font_buff);
-
-/* set_spcs.c functions */
-boolean sp_set_specs(PROTO_DECL2 specs_t STACKFAR *specsarg);
-void sp_type_tcb(PROTO_DECL2 tcb_t GLOBALFAR *ptcb);
-
-fix31 sp_read_long(PROTO_DECL2 ufix8 FONTFAR *pointer);
-fix15 sp_read_word_u(PROTO_DECL2 ufix8 FONTFAR *pointer);
-
-/* set_trns.c functions */
-void sp_init_tcb(PROTO_DECL1);
-void sp_scale_tcb(PROTO_DECL2 tcb_t GLOBALFAR *ptcb,fix15 x_pos,fix15 y_pos,fix15 x_scale,fix15 y_scale);
-ufix8 FONTFAR *sp_plaid_tcb(PROTO_DECL2 ufix8 FONTFAR *pointer,ufix8 format);
-ufix8 FONTFAR *sp_skip_interpolation_table(PROTO_DECL2 ufix8 FONTFAR *pointer, ufix8 format);
-ufix8 FONTFAR *sp_skip_control_zone(PROTO_DECL2 ufix8 FONTFAR *pointer, ufix8 format);
-
-ufix8 FONTFAR *sp_read_oru_table(PROTO_DECL2 ufix8 FONTFAR *pointer);
-#if INCL_SQUEEZING || INCL_ISW
-static void sp_calculate_x_pix(PROTO_DECL2 ufix8 start_edge,ufix8 end_edge,ufix16 constr_nr,fix31 x_scale,fix31 x_offset,fix31 ppo,fix15 setwidth_pix);
-#endif
-#if INCL_SQUEEZING
-static void sp_calculate_y_pix(PROTO_DECL2 ufix8 start_edge,ufix8 end_edge,ufix16 constr_nr,fix31 top_scale,fix31 bottom_scale,fix31 ppo,fix15 emtop_pix,fix15 embot_pix);
-boolean sp_calculate_x_scale(PROTO_DECL2 fix31 *x_factor,fix31 *x_offset,fix15 no_x_ctrl_zones);
-boolean sp_calculate_y_scale(PROTO_DECL2 fix31 *top_scale,fix31 *bottom_scale,fix15 first_y_zone, fix15 no_Y_ctrl_zones);
-#endif
-
-
-/* user defined functions */
-
-void sp_report_error(PROTO_DECL2 fix15 n);
-
-#if INCL_BLACK || INCL_SCREEN || INCL_2D
-void sp_open_bitmap(PROTO_DECL2 fix31 x_set_width, fix31 y_set_width, fix31 xorg, fix31 yorg, fix15 xsize,fix15 ysize);
-void sp_set_bitmap_bits(PROTO_DECL2 fix15 y, fix15 xbit1, fix15 xbit2);
-void sp_close_bitmap(PROTO_DECL1);
-#endif
-
-#if INCL_OUTLINE
-void sp_open_outline(PROTO_DECL2 fix31 x_set_width, fix31 y_set_width, fix31 xmin, fix31 xmax, fix31 ymin,fix31 ymax);
-void sp_start_new_char(PROTO_DECL1);
-void sp_start_contour(PROTO_DECL2 fix31 x,fix31 y,boolean outside);
-void sp_curve_to(PROTO_DECL2 fix31 x1, fix31 y1, fix31 x2, fix31 y2, fix31 x3, fix31 y3);
-void sp_line_to(PROTO_DECL2 fix31 x, fix31 y);
-void sp_close_contour(PROTO_DECL1);
-void sp_close_outline(PROTO_DECL1);
-#endif
-
-#if INCL_LCD /* Dynamic load character data supported? */
-buff_t *sp_load_char_data(PROTO_DECL2 fix31 file_offset,fix15 no_bytes,fix15 cb_offset); /* Load character data from font file */
-#endif
-
-#if INCL_PLAID_OUT /* Plaid data monitoring included? */
-void sp_record_xint(PROTO_DECL2 fix15 int_num); /* Record xint data */
-void sp_record_yint(PROTO_DECL2 fix15 int_num); /* Record yint data */
-void sp_begin_plaid_data(PROTO_DECL1); /* Signal start of plaid data */
-void sp_begin_ctrl_zones(PROTO_DECL2 fix15, no_X_zones, fix15 no_Y_zones); /* Signal start of control zones */
-void sp_record_ctrl_zone(PROTO_DECL2 fix31 start, fix31 end, fix15 constr); /* Record control zone data */
-void sp_begin_int_zones(PROTO_DECL2 fix15 no_X_int_zones, fix15 no_Y_int_zones); /* Signal start of interpolation zones */
-void sp_record_int_zone(PROTO_DECL2 fix31 start, fix31 end); /* Record interpolation zone data */
-void sp_end_plaid_data(PROTO_DECL1); /* Signal end of plaid data */
-#endif
-
-#endif /* _SPEEDO_H_ */
diff --git a/nx-X11/lib/font/Speedo/spencode.c b/nx-X11/lib/font/Speedo/spencode.c
deleted file mode 100644
index 96a13504a..000000000
--- a/nx-X11/lib/font/Speedo/spencode.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* $Xorg: spencode.c,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */
-/*
- * Copyright 1990, 1991 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of Network Computing Devices or Digital
- * not be used in advertising or publicity pertaining to distribution of
- * the software without specific, written prior permission.
- *
- * NETWORK COMPUTING DEVICES AND DIGITAL DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES OR DIGITAL BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/spencode.c,v 1.6 2001/01/17 19:43:18 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "spint.h"
-
-/* No longer needed with new encoding code */
-/* #include "bics-iso.h"
-
-int sp_bics_map_size = (sizeof(sp_bics_map) / (sizeof(int) * 2));*/
-
-#ifdef EXTRAFONTS
-#include "adobe-iso.h"
-
-int adobe_map_size = (sizeof(adobe_map) / (sizeof(int) * 2));
-
-#endif /* EXTRAFONTS */
diff --git a/nx-X11/lib/font/Speedo/sperr.c b/nx-X11/lib/font/Speedo/sperr.c
deleted file mode 100644
index 36ce51125..000000000
--- a/nx-X11/lib/font/Speedo/sperr.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* $Xorg: sperr.c,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */
-/*
- * Copyright 1990, 1991 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of M.I.T., Network Computing Devices,
- * or Digital not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. M.I.T. Network Computing Devices, or Digital
- * make no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * NETWORK COMPUTING DEVICES, DIGITAL AND MIT DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES, DIGITAL OR MIT BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-
-/*
-
-Copyright 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/sperr.c,v 1.6 2001/12/14 19:56:41 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "spint.h"
-
-#ifndef FONTMODULE
-#include <stdarg.h>
-#endif
-
-extern void ErrorF(const char* f, ...);
-
-void
-SpeedoErr(char *str, ...)
-{
- va_list v;
- int a1;
-
- va_start(v, str);
- ErrorF("Speedo: ");
- a1 = va_arg(v, int);
- ErrorF(str, a1);
- va_end(v);
-}
-
-/*
- * Called by Speedo character generator to report an error.
- *
- * Since character data not available is one of those errors
- * that happens many times, don't report it to user
- */
-void
-sp_report_error(fix15 n)
-{
- switch (n) {
- case 1:
- SpeedoErr("Insufficient font data loaded\n");
- break;
- case 3:
- SpeedoErr("Transformation matrix out of range\n");
- break;
- case 4:
- SpeedoErr("Font format error\n");
- break;
- case 5:
- SpeedoErr("Requested specs not compatible with output module\n");
- break;
- case 7:
- SpeedoErr("Intelligent transformation requested but not supported\n");
- break;
- case 8:
- SpeedoErr("Unsupported output mode requested\n");
- break;
- case 9:
- SpeedoErr("Extended font loaded but only compact fonts supported\n");
- break;
- case 10:
- SpeedoErr("Font specs not set prior to use of font\n");
- break;
- case 12:
- break;
- case 13:
- SpeedoErr("Track kerning data not available()\n");
- break;
- case 14:
- SpeedoErr("Pair kerning data not available()\n");
- break;
- default:
- SpeedoErr("report_error(%d)\n", n);
- break;
- }
-}
diff --git a/nx-X11/lib/font/Speedo/spfile.c b/nx-X11/lib/font/Speedo/spfile.c
deleted file mode 100644
index c58c0e471..000000000
--- a/nx-X11/lib/font/Speedo/spfile.c
+++ /dev/null
@@ -1,460 +0,0 @@
-/* $Xorg: spfile.c,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */
-/*
- * Copyright 1990, 1991 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of Network Computing Devices or Digital
- * not be used in advertising or publicity pertaining to distribution of
- * the software without specific, written prior permission.
- *
- * NETWORK COMPUTING DEVICES AND DIGITAL DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES OR DIGITAL
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices Inc
- */
-
-/*
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/spfile.c,v 1.13 2001/08/13 21:46:47 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/fontenc.h>
-#ifndef FONTMODULE
-#include <stdio.h>
-#else
-#include "xf86_ansic.h"
-#endif
-
-#include "spint.h"
-#include "bics-unicode.h"
-
-SpeedoFontPtr sp_fp_cur = (SpeedoFontPtr) 0;
-
-#ifdef EXTRAFONTS
-#include "ncdkeys.h"
-#endif
-
-#include "keys.h"
-
-#ifdef EXTRAFONTS
-static ufix8 skey[] =
-{
- SKEY0,
- SKEY1,
- SKEY2,
- SKEY3,
- SKEY4,
- SKEY5,
- SKEY6,
- SKEY7,
- SKEY8
-}; /* Sample Font decryption key */
-
-static ufix8 rkey[] =
-{
- RKEY0,
- RKEY1,
- RKEY2,
- RKEY3,
- RKEY4,
- RKEY5,
- RKEY6,
- RKEY7,
- RKEY8
-}; /* Retail Font decryption key */
-
-#endif /* EXTRAFONTS */
-
-#ifdef XSAMPLEFONTS
-static ufix8 xkey[] =
-{
- XKEY0,
- XKEY1,
- XKEY2,
- XKEY3,
- XKEY4,
- XKEY5,
- XKEY6,
- XKEY7,
- XKEY8
-}; /* Sample Font decryption key */
-#endif
-
-static ufix8 mkey[] =
-{
- KEY0,
- KEY1,
- KEY2,
- KEY3,
- KEY4,
- KEY5,
- KEY6,
- KEY7,
- KEY8
-}; /* Font decryption key */
-
-
-static fix15
-read_2b(ufix8 *ptr)
-{
- fix15 tmp;
-
- tmp = *ptr++;
- tmp = (tmp << 8) + *ptr;
- return tmp;
-}
-
-static fix31
-read_4b(ufix8 *ptr)
-{
- fix31 tmp;
-
- tmp = *ptr++;
- tmp = (tmp << 8) + *ptr++;
- tmp = (tmp << 8) + *ptr++;
- tmp = (tmp << 8) + *ptr;
- return tmp;
-}
-
-/*
- * loads the specified char's data
- */
-buff_t *
-sp_load_char_data(fix31 file_offset, fix15 num, fix15 cb_offset)
-{
- SpeedoMasterFontPtr master = sp_fp_cur->master;
-
- if (fseek(master->fp, (long) file_offset, (int) 0)) {
- SpeedoErr("can't seek to char\n");
- }
- if ((num + cb_offset) > master->mincharsize) {
- SpeedoErr("char buf overflow\n");
- }
- if (fread((master->c_buffer + cb_offset), sizeof(ufix8), num,
- master->fp) != num) {
- SpeedoErr("can't get char data\n");
- }
- master->char_data.org = (ufix8 *) master->c_buffer + cb_offset;
- master->char_data.no_bytes = num;
-
- return &master->char_data;
-}
-
-struct speedo_encoding {
- char *name;
- int *enc;
- int enc_size;
-};
-
-/* Takes care of caching encodings already referenced */
-static int
-find_encoding(const char *fontname, const char *filename,
- int **enc, int *enc_size)
-{
- static struct speedo_encoding *known_encodings=0;
- static int number_known_encodings=0;
- static int known_encodings_size=0;
-
- char *encoding_name;
- int iso8859_1;
- FontMapPtr mapping;
- int i, j, k, size;
- struct speedo_encoding *temp;
- int *new_enc;
- char *new_name;
-
- iso8859_1 = 0;
-
- encoding_name = FontEncFromXLFD(fontname, strlen(fontname));
- if(!encoding_name) {
- encoding_name="iso8859-1";
- iso8859_1=1;
- }
- /* We don't go through the font library if asked for Latin-1 */
- iso8859_1 = iso8859_1 || !strcmp(encoding_name, "iso8859-1");
-
- for(i=0; i<number_known_encodings; i++) {
- if(!strcmp(encoding_name, known_encodings[i].name)) {
- *enc=known_encodings[i].enc;
- *enc_size=known_encodings[i].enc_size;
- return Successful;
- }
- }
-
- /* it hasn't been cached yet, need to compute it */
-
- /* ensure we've got enough storage first */
-
- if(known_encodings==0) {
- if((known_encodings=
- (struct speedo_encoding*)xalloc(2*sizeof(struct speedo_encoding)))
- ==0)
- return AllocError;
- number_known_encodings=0;
- known_encodings_size=2;
- }
-
- if(number_known_encodings >= known_encodings_size) {
- if((temp=
- (struct speedo_encoding*)xrealloc(known_encodings,
- 2*sizeof(struct speedo_encoding)*
- known_encodings_size))==0)
- return AllocError;
- known_encodings=temp;
- known_encodings_size*=2;
- }
-
- mapping=0;
- if(!iso8859_1) {
- mapping = FontEncMapFind(encoding_name,
- FONT_ENCODING_UNICODE, -1, -1,
- filename);
- }
-#define SPEEDO_RECODE(c) \
- (mapping? \
- unicode_to_bics(FontEncRecode(c, mapping)): \
- unicode_to_bics(c))
-
- if((new_name = (char*)xalloc(strlen(encoding_name)))==0)
- return AllocError;
- strcpy(new_name, encoding_name);
-
- /* For now, we limit ourselves to 256 glyphs */
- size=0;
- for(i=0; i < (mapping?mapping->encoding->size:256) && i < 256; i++)
- if(SPEEDO_RECODE(i)>=0)
- size++;
- new_enc = (int*)xalloc(2*size*sizeof(int));
- if(!new_enc) {
- xfree(new_name);
- return AllocError;
- }
- for(i=j=0; i < (mapping?mapping->encoding->size:256) && i < 256; i++)
- if((k = SPEEDO_RECODE(i))>=0) {
- new_enc[2*j] = i;
- new_enc[2*j+1] = k;
- j++;
- }
- known_encodings[number_known_encodings].name = new_name;
- known_encodings[number_known_encodings].enc = new_enc;
- known_encodings[number_known_encodings].enc_size = size;
- number_known_encodings++;
-
- *enc = new_enc;
- *enc_size = size;
- return Successful;
-#undef SPEEDO_RECODE
-}
-
-int
-sp_open_master(const char *fontname, const char *filename,
- SpeedoMasterFontPtr *master)
-{
- SpeedoMasterFontPtr spmf;
- ufix8 tmp[16];
- ufix16 cust_no;
- FILE *fp;
- ufix32 minbufsize;
- ufix16 mincharsize;
- ufix8 *f_buffer;
- ufix8 *c_buffer;
- int ret;
- ufix8 *key;
-
- spmf = (SpeedoMasterFontPtr) xalloc(sizeof(SpeedoMasterFontRec));
- if (!spmf)
- return AllocError;
- bzero(spmf, sizeof(SpeedoMasterFontRec));
- spmf->entry = NULL;
- spmf->f_buffer = NULL;
- spmf->c_buffer = NULL;
-
- /* open font */
- spmf->fname = (char *) xalloc(strlen(filename) + 1);
- if (!spmf->fname)
- return AllocError;
- fp = fopen(filename, "r");
- if (!fp) {
- ret = BadFontName;
- goto cleanup;
- }
- strcpy(spmf->fname, filename);
- spmf->fp = fp;
- spmf->state |= MasterFileOpen;
-
- if (fread(tmp, sizeof(ufix8), 16, fp) != 16) {
- ret = BadFontName;
- goto cleanup;
- }
- minbufsize = (ufix32) read_4b(tmp + FH_FBFSZ);
- f_buffer = (ufix8 *) xalloc(minbufsize);
- if (!f_buffer) {
- ret = AllocError;
- goto cleanup;
- }
- spmf->f_buffer = f_buffer;
-
- fseek(fp, (ufix32) 0, 0);
-
- /* read in the font */
- if (fread(f_buffer, sizeof(ufix8), (ufix16) minbufsize, fp) != minbufsize) {
- ret = BadFontName;
- goto cleanup;
- }
- spmf->copyright = (char *) (f_buffer + FH_CPYRT);
- spmf->mincharsize = mincharsize = read_2b(f_buffer + FH_CBFSZ);
-
- c_buffer = (ufix8 *) xalloc(mincharsize);
- if (!c_buffer) {
- ret = AllocError;
- goto cleanup;
- }
- spmf->c_buffer = c_buffer;
-
- spmf->font.org = spmf->f_buffer;
- spmf->font.no_bytes = minbufsize;
-
- cust_no = sp_get_cust_no(spmf->font);
-
- /* XXX add custom encryption stuff here */
-
-#ifdef EXTRAFONTS
- if (cust_no == SCUS0) {
- key = skey;
- } else if (cust_no == RCUS0) {
- key = rkey;
- } else
-#endif
-
-#ifdef XSAMPLEFONTS
- if (cust_no == XCUS0) {
- key = xkey;
- } else
-#endif
-
- if (cust_no == CUS0) {
- key = mkey;
- } else {
- SpeedoErr("Non - standard encryption for \"%s\"\n", filename);
- ret = BadFontName;
- goto cleanup;
- }
- spmf->key = key;
- sp_set_key(key);
-
- spmf->first_char_id = read_2b(f_buffer + FH_FCHRF);
- spmf->num_chars = read_2b(f_buffer + FH_NCHRL);
-
-
- spmf->enc = 0;
- spmf->enc_size = 0;
-
-#ifdef EXTRAFONTS
- { /* choose the proper encoding */
- char *f;
-
- f = strrchr(filename, '/');
- if (f) {
- f++;
- if (strncmp(f, "bx113", 5) == 0) {
- spmf->enc = adobe_map;
- spmf->enc_size = adobe_map_size;
- }
- }
- }
-#endif
-
- if(!spmf->enc)
- if((ret=find_encoding(fontname, filename, &spmf->enc, &spmf->enc_size))
- !=Successful)
- goto cleanup;
-
- spmf->first_char_id = spmf->enc[0];
- /* size of extents array */
- spmf->max_id = spmf->enc[(spmf->enc_size - 1) * 2];
- spmf->num_chars = spmf->enc_size;
-
- *master = spmf;
-
- return Successful;
-
-cleanup:
- *master = (SpeedoMasterFontPtr) 0;
- sp_close_master_font(spmf);
- return ret;
-}
-
-void
-sp_close_master_font(SpeedoMasterFontPtr spmf)
-{
- if (!spmf)
- return;
- if (spmf->state & MasterFileOpen)
- fclose(spmf->fp);
- if (spmf->entry)
- spmf->entry->u.scalable.extra->private = NULL;
- xfree(spmf->fname);
- xfree(spmf->f_buffer);
- xfree(spmf->c_buffer);
- xfree(spmf);
-}
-
-void
-sp_close_master_file(SpeedoMasterFontPtr spmf)
-{
- (void) fclose(spmf->fp);
- spmf->state &= ~MasterFileOpen;
-}
-
-
-/*
- * reset the encryption key, and make sure the file is opened
- */
-void
-sp_reset_master(SpeedoMasterFontPtr spmf)
-{
- sp_set_key(spmf->key);
- if (!(spmf->state & MasterFileOpen)) {
- spmf->fp = fopen(spmf->fname, "r");
- /* XXX -- what to do if we can't open the file? */
- spmf->state |= MasterFileOpen;
- }
- fseek(spmf->fp, 0, 0);
-}
diff --git a/nx-X11/lib/font/Speedo/spfont.c b/nx-X11/lib/font/Speedo/spfont.c
deleted file mode 100644
index c209d5a51..000000000
--- a/nx-X11/lib/font/Speedo/spfont.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/* $Xorg: spfont.c,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */
-/*
- * Copyright 1990, 1991 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of Network Computing Devices or Digital
- * not be used in advertising or publicity pertaining to distribution of
- * the software without specific, written prior permission.
- *
- * NETWORK COMPUTING DEVICES AND DIGITAL DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES OR DIGITAL BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices Inc
- */
-/* $XFree86: xc/lib/font/Speedo/spfont.c,v 3.12tsi Exp $ */
-
-/*
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-
-/*
- * Speedo font loading
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/FSproto.h>
-#include "spint.h"
-#include <X11/fonts/fontutil.h>
-#ifndef FONTMODULE
-#ifdef _XOPEN_SOURCE
-#include <math.h>
-#else
-#define _XOPEN_SOURCE /* to get prototype for hypot on some systems */
-#include <math.h>
-#undef _XOPEN_SOURCE
-#endif
-#else
-#include "servermd.h"
-#include "xf86_ansic.h"
-#endif
-
-#ifndef M_PI
-#define M_PI 3.14159
-#endif /* M_PI */
-#ifndef DEFAULT_BIT_ORDER
-
-#ifdef BITMAP_BIT_ORDER
-#define DEFAULT_BIT_ORDER BITMAP_BIT_ORDER
-#else
-#define DEFAULT_BIT_ORDER UNKNOWN_BIT_ORDER
-#endif
-
-#endif
-
-static void SpeedoCloseFont(FontPtr pfont);
-
-static int
-sp_get_glyphs(
- FontPtr pFont,
- unsigned long count,
- register unsigned char *chars,
- FontEncoding charEncoding,
- unsigned long *glyphCount, /* RETURN */
- CharInfoPtr *glyphs) /* RETURN */
-{
- SpeedoFontPtr spf;
- unsigned int firstCol;
- register unsigned int numCols;
- unsigned int firstRow;
- unsigned int numRows;
- CharInfoPtr *glyphsBase;
- register unsigned int c;
- register CharInfoPtr pci;
- unsigned int r;
- CharInfoPtr encoding;
- CharInfoPtr pDefault;
-#ifdef notyet
- int itemSize;
-#endif
- int err = Successful;
-
- spf = (SpeedoFontPtr) pFont->fontPrivate;
- encoding = spf->encoding;
- pDefault = spf->pDefault;
- firstCol = pFont->info.firstCol;
- numCols = pFont->info.lastCol - firstCol + 1;
- glyphsBase = glyphs;
-
-
- /* XXX - this should be much smarter */
- /* make sure the glyphs are there */
-#ifdef notyet
- if (charEncoding == Linear8Bit || charEncoding == TwoD8Bit)
- itemSize = 1;
- else
- itemSize = 2;
-
- if (!fsd->complete)
- err = fs_load_glyphs(NULL, pFont, count, itemSize, chars);
-#endif
-
- if (err != Successful)
- return err;
-
- switch (charEncoding) {
-
- case Linear8Bit:
- case TwoD8Bit:
- if (pFont->info.firstRow > 0)
- break;
- if (pFont->info.allExist && pDefault) {
- while (count--) {
- c = (*chars++) - firstCol;
- if (c < numCols)
- *glyphs++ = &encoding[c];
- else
- *glyphs++ = pDefault;
- }
- } else {
- while (count--) {
- c = (*chars++) - firstCol;
- if (c < numCols && (pci = &encoding[c])->bits)
- *glyphs++ = pci;
- else if (pDefault)
- *glyphs++ = pDefault;
- }
- }
- break;
- case Linear16Bit:
- if (pFont->info.allExist && pDefault) {
- while (count--) {
- c = *chars++ << 8;
- c = (c | *chars++) - firstCol;
- if (c < numCols)
- *glyphs++ = &encoding[c];
- else
- *glyphs++ = pDefault;
- }
- } else {
- while (count--) {
- c = *chars++ << 8;
- c = (c | *chars++) - firstCol;
- if (c < numCols && (pci = &encoding[c])->bits)
- *glyphs++ = pci;
- else if (pDefault)
- *glyphs++ = pDefault;
- }
- }
- break;
-
- case TwoD16Bit:
- firstRow = pFont->info.firstRow;
- numRows = pFont->info.lastRow - firstRow + 1;
- while (count--) {
- r = (*chars++) - firstRow;
- c = (*chars++) - firstCol;
- if (r < numRows && c < numCols &&
- (pci = &encoding[r * numCols + c])->bits)
- *glyphs++ = pci;
- else if (pDefault)
- *glyphs++ = pDefault;
- }
- break;
- }
- *glyphCount = glyphs - glyphsBase;
- return Successful;
-}
-
-static CharInfoRec nonExistantChar;
-
-static int
-sp_get_metrics(
- FontPtr pFont,
- unsigned long count,
- register unsigned char *chars,
- FontEncoding charEncoding,
- unsigned long *glyphCount, /* RETURN */
- xCharInfo **glyphs) /* RETURN */
-{
- int ret;
- SpeedoFontPtr spf;
- CharInfoPtr oldDefault;
-
- spf = (SpeedoFontPtr) pFont->fontPrivate;
- oldDefault = spf->pDefault;
- spf->pDefault = &nonExistantChar;
- ret = sp_get_glyphs(pFont, count, chars, charEncoding,
- glyphCount, (CharInfoPtr *) glyphs);
-
- spf->pDefault = oldDefault;
- return ret;
-}
-
-int
-sp_open_font(
- char *fontname,
- char *filename,
- FontEntryPtr entry,
- FontScalablePtr vals,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- Mask flags,
- SpeedoFontPtr *spfont)
-{
- SpeedoFontPtr spf;
- SpeedoMasterFontPtr spmf;
- int ret;
- specs_t specs;
- int xx8, xy8, yx8, yy8;
-
- /* find a master (create it if necessary) */
- spmf = (SpeedoMasterFontPtr) entry->u.scalable.extra->private;
- if (!spmf)
- {
- ret = sp_open_master(fontname, filename, &spmf);
- if (ret != Successful)
- return ret;
- entry->u.scalable.extra->private = (pointer) spmf;
- spmf->entry = entry;
- }
-
- spf = (SpeedoFontPtr) xalloc(sizeof(SpeedoFontRec));
- if (!spf)
- return AllocError;
- bzero((char *) spf, sizeof(SpeedoFontRec));
-
- *spfont = spf;
-
- /* clobber everything -- this may be leaking, but other wise evil
- * stuff is left behind -- succesive transformed fonts get mangled */
- bzero((char *)&sp_globals, sizeof(sp_globals));
-
- spf->master = spmf;
- spf->entry = entry;
- spmf->refcount++;
- sp_reset_master(spmf);
- /* now we've done enough that if we bail out we must call sp_close_font */
-
- spf->vals = *vals;
-
- /* set up specs */
-
- specs.pfont = &spmf->font;
-
- specs.xxmult = (int)(vals->pixel_matrix[0] * (double)(1L << 16));
- specs.xymult = (int)(vals->pixel_matrix[2] * (double)(1L << 16));
- specs.yxmult = (int)(vals->pixel_matrix[1] * (double)(1L << 16));
- specs.yymult = (int)(vals->pixel_matrix[3] * (double)(1L << 16));
-
- specs.xoffset = 0L << 16; /* XXX tweak? */
- specs.yoffset = 0L << 16; /* XXX tweak? */
-
- specs.flags = MODE_SCREEN;
- specs.out_info = NULL;
-
- /* When Speedo tries to generate a very small font bitmap, it
- often crashes or goes into an infinite loop.
- Don't know why this is so, but until we can fix it properly,
- return BadFontName for anything smaller than 4 pixels.
- */
-#define TINY_FACTOR (16 << 16)
- xx8 = specs.xxmult >> 8;
- xy8 = specs.xymult >> 8;
- yx8 = specs.yxmult >> 8;
- yy8 = specs.yymult >> 8;
- if (xx8 * xx8 + xy8 * xy8 < TINY_FACTOR ||
- yx8 * yx8 + yy8 * yy8 < TINY_FACTOR)
- {
- sp_close_font(spf);
- return BadFontName;
- }
-
- /* clobber global state to avoid wrecking future transformed fonts */
- bzero ((char *) &sp_globals, sizeof(sp_globals));
-
- if (!sp_set_specs(&specs))
- {
- sp_close_font(spf);
- return BadFontName;
- }
-
- spf->specs = specs;
- spf->master = spmf;
-
- *spfont = spf;
- return Successful;
-}
-
-static int
-sp_load_font(
- char *fontname,
- char *filename,
- FontEntryPtr entry,
- FontScalablePtr vals,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- FontPtr pfont,
- Mask flags)
-{
- SpeedoFontPtr spf;
- SpeedoMasterFontPtr spmf;
- int esize;
- int ret;
- long sWidth;
-
- ret = sp_open_font(fontname, filename, entry, vals, format, fmask,
- flags, &spf);
-
- if (ret != Successful)
- return ret;
-
- spmf = spf->master;
- sp_reset_master(spmf);
- esize = sizeof(CharInfoRec) * (spmf->max_id - spmf->first_char_id + 1);
-
- spf->encoding = (CharInfoPtr) xalloc(esize);
- if (!spf->encoding) {
- sp_close_font(spf);
- return AllocError;
- }
- bzero((char *) spf->encoding, esize);
-
- sp_fp_cur = spf;
-
- sp_make_header(spf, &pfont->info);
-
- sp_compute_bounds(spf, &pfont->info, SaveMetrics, &sWidth);
-
- sp_compute_props(spf, fontname, &pfont->info, sWidth);
-
- pfont->fontPrivate = (pointer) spf;
-
-/* XXX */
- flags |= FontLoadBitmaps;
-
- if (flags & FontLoadBitmaps) {
- sp_fp_cur = spf;
- ret = sp_build_all_bitmaps(pfont, format, fmask);
- }
- if (ret != Successful)
- return ret;
-
- /* compute remaining accelerators */
- FontComputeInfoAccelerators(&pfont->info);
-
- pfont->format = format;
-
- pfont->get_metrics = sp_get_metrics;
- pfont->get_glyphs = sp_get_glyphs;
- pfont->unload_font = SpeedoCloseFont;
- pfont->unload_glyphs = NULL;
- pfont->refcnt = 0;
-
- /* have to hold on to master for min/max id */
- sp_close_master_file(spmf);
-
- return ret;
-}
-
-int
-SpeedoFontLoad(
- FontPtr *ppfont,
- char *fontname,
- char *filename,
- FontEntryPtr entry,
- FontScalablePtr vals,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- Mask flags)
-{
- FontPtr pfont;
- int ret;
-
- /* Reject ridiculously small sizes that will blow up the math */
- if (hypot(vals->pixel_matrix[0], vals->pixel_matrix[1]) < 1.0 ||
- hypot(vals->pixel_matrix[2], vals->pixel_matrix[3]) < 1.0)
- return BadFontName;
-
- if (!(pfont = CreateFontRec()))
- return AllocError;
-
- ret = sp_load_font(fontname, filename, entry, vals, format, fmask,
- pfont, flags);
-
- if (ret == Successful)
- *ppfont = pfont;
- else
- DestroyFontRec (pfont);
-
- return ret;
-}
-
-void
-sp_close_font(SpeedoFontPtr spf)
-{
- SpeedoMasterFontPtr spmf;
-
- spmf = spf->master;
- --spmf->refcount;
- if (spmf->refcount == 0)
- sp_close_master_font (spmf);
- xfree(spf->encoding);
- xfree(spf->bitmaps);
- xfree(spf);
-}
-
-static void
-SpeedoCloseFont(FontPtr pfont)
-{
- SpeedoFontPtr spf;
-
- spf = (SpeedoFontPtr) pfont->fontPrivate;
- sp_close_font(spf);
- xfree(pfont->info.isStringProp);
- xfree(pfont->info.props);
- DestroyFontRec(pfont);
-
-}
diff --git a/nx-X11/lib/font/Speedo/spfuncs.c b/nx-X11/lib/font/Speedo/spfuncs.c
deleted file mode 100644
index da4d5c55e..000000000
--- a/nx-X11/lib/font/Speedo/spfuncs.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/* $Xorg: spfuncs.c,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */
-/*
- * Copyright 1990, 1991 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of Network Computing Devices or Digital
- * not be used in advertising or publicity pertaining to distribution of
- * the software without specific, written prior permission.
- *
- * NETWORK COMPUTING DEVICES AND DIGITAL DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES OR DIGITAL BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices, Inc
- */
-
-/*
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/spfuncs.c,v 1.7 2001/08/27 19:49:51 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifndef FONTMODULE
-#include <X11/Xos.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/fontutil.h>
-#include "spint.h"
-
-/* ARGSUSED */
-static int
-SpeedoOpenScalable (
- FontPathElementPtr fpe,
- FontPtr *pFont,
- int flags,
- FontEntryPtr entry,
- char *fileName,
- FontScalablePtr vals,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- FontPtr non_cachable_font) /* We don't do licensing */
-{
- char fullName[MAXFONTNAMELEN];
-
- strcpy (fullName, entry->name.name);
- return SpeedoFontLoad (pFont, fullName, fileName, entry, vals,
- format, fmask, flags);
-}
-
-/*
- * XXX
- *
- * this does a lot more then i'd like, but it has to get the bitmaps
- * in order to get accurate metrics (which it *must* have).
- *
- * a possible optimization is to avoid allocating the glyph memory
- * and to simply save the values without doing the work.
- */
-static int
-get_font_info(
- FontInfoPtr pinfo,
- char *fontname,
- char *filename,
- FontEntryPtr entry,
- FontScalablePtr vals,
- SpeedoFontPtr *spfont)
-{
- SpeedoFontPtr spf;
- int err;
- long sWidth;
-
- err = sp_open_font(fontname, filename, entry, vals,
- (fsBitmapFormat) 0, (fsBitmapFormatMask) 0, (unsigned long) 0,
- &spf);
-
- if (err != Successful)
- return err;
-
- sp_fp_cur = spf;
- sp_reset_master(spf->master);
-
- sp_make_header(spf, pinfo);
-
- sp_compute_bounds(spf, pinfo, (unsigned long) 0, &sWidth);
-
- sp_compute_props(spf, fontname, pinfo, sWidth);
-
- /* compute remaining accelerators */
- FontComputeInfoAccelerators (pinfo);
-
- *spfont = spf;
-
- return Successful;
-}
-
-/* ARGSUSED */
-static int
-SpeedoGetInfoScaleable(
- FontPathElementPtr fpe,
- FontInfoPtr pFontInfo,
- FontEntryPtr entry,
- FontNamePtr fontName,
- char *fileName,
- FontScalablePtr vals)
-{
- SpeedoFontPtr spf = NULL;
- char fullName[MAXFONTNAMELEN];
- int err;
-
- strcpy(fullName, entry->name.name);
- FontParseXLFDName(fullName, vals, FONT_XLFD_REPLACE_VALUE);
-
- err = get_font_info(pFontInfo, fullName, fileName, entry, vals, &spf);
-
- if (spf)
- sp_close_font(spf);
-
- return err;
-}
-
-static FontRendererRec renderer = {
- ".spd", 4, NULL, SpeedoOpenScalable,
- NULL, SpeedoGetInfoScaleable, 0
- , CAP_MATRIX | CAP_CHARSUBSETTING
-};
-
-void
-SpeedoRegisterFontFileFunctions()
-{
- sp_make_standard_props();
- sp_reset();
- FontFileRegisterRenderer(&renderer);
-}
diff --git a/nx-X11/lib/font/Speedo/spglyph.c b/nx-X11/lib/font/Speedo/spglyph.c
deleted file mode 100644
index 3577f5567..000000000
--- a/nx-X11/lib/font/Speedo/spglyph.c
+++ /dev/null
@@ -1,399 +0,0 @@
-/* $Xorg: spglyph.c,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */
-/*
- * Copyright 1990, 1991 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of Network Computing Devices or Digital
- * not be used in advertising or publicity pertaining to distribution of
- * the software without specific, written prior permission.
- *
- * NETWORK COMPUTING DEVICES AND DIGITAL DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES OR DIGITAL BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices Inc
- */
-
-/*
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/spglyph.c,v 1.6 2001/01/17 19:43:20 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/X.h> /* for bit order #defines */
-#include "spint.h"
-#include <X11/fonts/fontutil.h>
-
-#undef CLIP_BBOX_NOISE
-
-static CurrentFontValuesRec current_font_values;
-static CurrentFontValuesPtr cfv = &current_font_values;
-static int bit_order,
- byte_order,
- scan;
-
-unsigned long
-sp_compute_data_size(
- FontPtr pfont,
- int mappad,
- int scanlinepad,
- unsigned long start,
- unsigned long end)
-{
- unsigned long ch;
- unsigned long size = 0;
- int bpr;
- SpeedoFontPtr spf = (SpeedoFontPtr) pfont->fontPrivate;
- FontInfoPtr pinfo = &pfont->info;
- int firstChar;
-
- firstChar = spf->master->first_char_id;
-
- /* allocate the space */
- switch (mappad) {
- int charsize;
- CharInfoPtr ci;
- xCharInfo *cim;
-
- case BitmapFormatImageRectMin:
- cfv->bpr = 0;
- for (ch = start; ch <= end; ch++) {
- ci = &spf->encoding[ch - firstChar];
- if (!ci)
- ci = spf->pDefault;
- cim = &ci->metrics;
- charsize = GLYPH_SIZE(ci, scanlinepad);
- charsize *= cim->ascent + cim->descent;
- size += charsize;
- }
- break;
- case BitmapFormatImageRectMaxWidth:
- bpr = GLWIDTHBYTESPADDED(FONT_MAX_WIDTH(pinfo), scanlinepad);
- cfv->bpr = bpr;
- for (ch = start; ch <= end; ch++) {
- ci = &spf->encoding[ch - firstChar];
- if (!ci)
- ci = spf->pDefault;
- cim = &ci->metrics;
- charsize = bpr * (cim->ascent + cim->descent);
- size += charsize;
- }
- break;
- case BitmapFormatImageRectMax:
- bpr = GLWIDTHBYTESPADDED(FONT_MAX_WIDTH(pinfo), scanlinepad);
- cfv->bpr = bpr;
- size = (end - start + 1) * bpr * FONT_MAX_HEIGHT(pinfo);
- break;
- default:
- assert(0);
- }
-
- return size;
-}
-
-static void
-finish_line(SpeedoFontPtr spf)
-{
- int bpr = cfv->bpr;
- CharInfoPtr ci = &spf->encoding[cfv->char_id - spf->master->first_char_id];
-
- if (bpr == 0) {
- bpr = GLYPH_SIZE(ci, cfv->scanpad);
- }
- if (bpr) { /* char may not have any metrics... */
- cfv->bp = (char *)cfv->bp + bpr;
- }
- assert(cfv->bp - sp_fp_cur->bitmaps <= sp_fp_cur->bitmap_size);
-}
-
-
-void
-sp_set_bitmap_bits(fix15 y, fix15 xbit1, fix15 xbit2)
-{
- int nmiddle;
- CARD8 startmask,
- endmask;
- CARD8 *dst;
-
- if (xbit1 > cfv->bit_width) {
-
-#ifdef CLIP_BBOX_NOISE
- SpeedoErr("Run wider than bitmap width -- truncated\n");
-#endif
-
- xbit1 = cfv->bit_width;
- }
- if (xbit2 > cfv->bit_width) {
-
-#ifdef CLIP_BBOX_NOISE
- SpeedoErr("Run wider than bitmap width -- truncated\n");
-#endif
-
- xbit2 = cfv->bit_width;
- }
-
- if (xbit2 < xbit1) {
- xbit2 = xbit1;
- }
-
- while (cfv->cur_y != y) {
- finish_line(sp_fp_cur);
- cfv->cur_y++;
- }
-
- cfv->last_y = y;
- if (y >= cfv->bit_height) {
-
-#ifdef CLIP_BBOX_NOISE
- SpeedoErr("Y larger than bitmap height -- truncated\n");
-#endif
-
- cfv->trunc = 1;
- return;
- }
- if (xbit1 < 0) /* XXX this is more than a little bit rude... */
- xbit1 = 0;
-
- nmiddle = (xbit1 >> 3);
- dst = (CARD8 *)cfv->bp + nmiddle;
- xbit2 -= (xbit1 & ~7);
- nmiddle = (xbit2 >> 3);
- xbit1 &= 7;
- xbit2 &= 7;
- if (bit_order == MSBFirst) {
- startmask = ((CARD8) ~0) >> xbit1;
- endmask = ~(((CARD8) ~0) >> xbit2);
- } else {
- startmask = ((CARD8) ~0) << xbit1;
- endmask = ~(((CARD8) ~0) << xbit2);
- }
- if (nmiddle == 0)
- *dst |= endmask & startmask;
- else {
- *dst++ |= startmask;
- while (--nmiddle)
- *dst++ = (CARD8)~0;
- *dst |= endmask;
- }
-}
-
-/* ARGSUSED */
-void
-sp_open_bitmap(fix31 x_set_width, fix31 y_set_width, fix31 xorg, fix31 yorg,
- fix15 xsize, fix15 ysize)
-{
- CharInfoPtr ci = &sp_fp_cur->encoding[cfv->char_id - sp_fp_cur->master->first_char_id];
-
-/*-
- * this is set to provide better quality bitmaps. since the Speedo
- * sp_get_bbox() function returns an approximate (but guarenteed to contain)
- * set of metrics, some of the bitmaps can be place poorly inside and
- * look bad.
- *
- * with this set, the actual bitmap values are used instead of the bboxes.
- * it makes things look better, but causes two possible problems:
- *
- * 1 - the reported min & max bounds may not correspond to the extents
- * reported
- * 2 - if the extents are reported before the character is generated,
- * a client could see them change. this currently never happens,
- * but will when a desired enhancement (don't reneder till needed)
- * is made.
- */
-
-#define BBOX_FIXUP 1
-
-#ifdef BBOX_FIXUP
- int off_horz;
- int off_vert;
-
- if (xorg < 0)
- off_horz = (fix15) ((xorg - 32768L) / 65536);
- else
- off_horz = (fix15) ((xorg + 32768L) / 65536);
- if (yorg < 0)
- off_vert = (fix15) ((yorg - 32768L) / 65536);
- else
- off_vert = (fix15) ((yorg + 32768L) / 65536);
- if (xsize != 0 || ysize != 0 || ci->metrics.characterWidth)
- {
- ci->metrics.leftSideBearing = off_horz;
- ci->metrics.descent = -off_vert;
- ci->metrics.rightSideBearing = xsize + off_horz;
- ci->metrics.ascent = ysize + off_vert;
- }
- else
- {
- /* If setting the proper size would cause the character to appear to
- be non-existent, fudge things by giving it a pixel to occupy. */
- xsize = ysize = 1;
- ci->metrics.leftSideBearing = ci->metrics.descent = 0;
- ci->metrics.rightSideBearing = ci->metrics.ascent = 1;
- }
-
- cfv->bit_width = xsize;
- cfv->bit_height = ysize;
-#else
- cfv->bit_width = ci->metrics.rightSideBearing -
- ci->metrics.leftSideBearing;
- cfv->bit_height = ci->metrics.ascent + ci->metrics.descent;
-#endif
-
- assert(cfv->bp - sp_fp_cur->bitmaps <= sp_fp_cur->bitmap_size);
- ci->bits = (char *) cfv->bp;
-
- cfv->cur_y = 0;
-}
-
-void
-sp_close_bitmap()
-{
- CharInfoPtr ci = &sp_fp_cur->encoding[cfv->char_id - sp_fp_cur->master->first_char_id];
- int bpr = cfv->bpr;
-
- if (bpr == 0)
- bpr = GLYPH_SIZE(ci, cfv->scanpad);
- if (!cfv->trunc)
- finish_line(sp_fp_cur);
- cfv->trunc = 0;
- cfv->last_y++;
- while (cfv->last_y < cfv->bit_height) {
- finish_line(sp_fp_cur);
- cfv->last_y++;
- }
- if (byte_order != bit_order) {
- switch (scan) {
- case 1:
- break;
- case 2:
- TwoByteSwap(cfv->bp, bpr * cfv->bit_height);
- break;
- case 4:
- FourByteSwap(cfv->bp, bpr * cfv->bit_height);
- break;
- }
- }
-}
-
-int
-sp_build_all_bitmaps(
- FontPtr pfont,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask)
-{
- int ret,
- glyph = 1,
- image = BitmapFormatImageRectMin;
- unsigned long glyph_size;
- SpeedoFontPtr spf = (SpeedoFontPtr) pfont->fontPrivate;
- SpeedoMasterFontPtr spmf = spf->master;
- pointer bitmaps;
- int start,
- end,
- i;
-
- scan = 1;
- ret = CheckFSFormat(format, fmask,
- &bit_order, &byte_order, &scan, &glyph, &image);
-
- pfont->bit = bit_order;
- pfont->byte = byte_order;
- pfont->glyph = glyph;
- pfont->scan = scan;
- if (ret != Successful)
- return BadFontFormat;
-
- start = spmf->first_char_id;
- end = spmf->max_id;
- glyph_size = sp_compute_data_size(pfont, image, glyph, start, end);
-
- /* XXX -- MONDO KLUDGE -- add some slop */
- /*
- * not sure why this is wanted, but it keeps the packer from going off the
- * end and toasting us down the line
- */
- glyph_size += 20;
-
-#ifdef DEBUG
- spf->bitmap_size = glyph_size;
-#endif
-
- bitmaps = (pointer) xalloc(glyph_size);
- if (!bitmaps)
- return AllocError;
- bzero((char *) bitmaps, glyph_size);
-
- /* set up some state */
- sp_fp_cur = spf;
- spf->bitmaps = bitmaps;
- cfv->format = format;
- cfv->scanpad = glyph;
- cfv->bp = bitmaps;
-
- for (i = 0; i < spmf->num_chars; i++) {
- int j;
- cfv->char_index = spmf->enc[i * 2 + 1];
- cfv->char_id = spmf->enc[i * 2];
-#ifdef DEBUG
-fprintf(stderr, "build_all_sp_bitmaps:i = %d, Char ID = %d\n", i, cfv->char_id);
-#endif
- if (!cfv->char_id)
- continue;
-
- /*
- * See if this character is in the list of ranges specified in the
- * XLFD name
- */
- for (j = 0; j < spf->vals.nranges; j++)
- if (cfv->char_id >= mincharno(spf->vals.ranges[j]) &&
- cfv->char_id <= maxcharno(spf->vals.ranges[j]))
- break;
-
- /* If not, don't realize it. */
- if (spf->vals.nranges && j == spf->vals.nranges)
- continue;
-
- if (!sp_make_char(cfv->char_index)) {
-
-#ifdef DEBUG /* can be very common with some encodings */
- SpeedoErr("Can't make char %d\n", cfv->char_index);
-#endif
- }
- }
-
- return Successful;
-}
diff --git a/nx-X11/lib/font/Speedo/spinfo.c b/nx-X11/lib/font/Speedo/spinfo.c
deleted file mode 100644
index d7a1edd98..000000000
--- a/nx-X11/lib/font/Speedo/spinfo.c
+++ /dev/null
@@ -1,462 +0,0 @@
-/* $Xorg: spinfo.c,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */
-/*
- * Copyright 1990, 1991 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of Network Computing Devices or Digital
- * not be used in advertising or publicity pertaining to distribution of
- * the software without specific, written prior permission.
- *
- * NETWORK COMPUTING DEVICES AND DIGITAL DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES OR DIGITAL BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices, Inc
- */
-
-/*
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/spinfo.c,v 1.12 2001/12/14 19:56:42 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/fontutil.h>
-#include "spint.h"
-#ifndef FONTMODULE
-#include <math.h>
-#else
-#include "xf86_ansic.h"
-#endif
-
-/* percentage of pointsize used to specify ascent & descent */
-#define STRETCH_FACTOR 120
-
-enum scaleType {
- atom, truncate_atom, pixel_size, point_size, resolution_x,
- resolution_y, average_width
-};
-
-typedef struct _fontProp {
- char *name;
- long atom;
- enum scaleType type;
-} fontProp;
-
-static fontProp fontNamePropTable[] = {
- { "FOUNDRY", 0, atom },
- { "FAMILY_NAME", 0, atom },
- { "WEIGHT_NAME", 0, atom },
- { "SLANT", 0, atom },
- { "SETWIDTH_NAME", 0, atom },
- { "ADD_STYLE_NAME", 0, atom },
- { "PIXEL_SIZE", 0, pixel_size },
- { "POINT_SIZE", 0, point_size },
- { "RESOLUTION_X", 0, resolution_x },
- { "RESOLUTION_Y", 0, resolution_y },
- { "SPACING", 0, atom },
- { "AVERAGE_WIDTH", 0, average_width },
- { "CHARSET_REGISTRY", 0, atom },
- { "CHARSET_ENCODING", 0, truncate_atom }
-};
-
-/* Warning: following array is closely related to the sequence of
- defines after it. */
-
-static fontProp extraProps[] = {
- { "FONT", 0, },
- { "COPYRIGHT", 0, },
- { "RAW_PIXEL_SIZE", 0, },
- { "RAW_POINT_SIZE", 0, },
- { "RAW_ASCENT", 0, },
- { "RAW_DESCENT", 0, },
- { "RAW_AVERAGE_WIDTH", 0, },
- { "FONT_TYPE", 0, },
- { "RASTERIZER_NAME", 0, }
-};
-
-/* this is a bit kludgy */
-#define FONTPROP 0
-#define COPYRIGHTPROP 1
-#define RAWPIXELPROP 2
-#define RAWPOINTPROP 3
-#define RAWASCENTPROP 4
-#define RAWDESCENTPROP 5
-#define RAWWIDTHPROP 6
-#define FONT_TYPEPROP 7
-#define RASTERIZER_NAMEPROP 8
-
-#define NNAMEPROPS (sizeof(fontNamePropTable) / sizeof(fontProp))
-#define NEXTRAPROPS (sizeof(extraProps) / sizeof(fontProp))
-
-#define NPROPS (NNAMEPROPS + NEXTRAPROPS)
-
-void
-sp_make_standard_props()
-{
- int i;
- fontProp *t;
-
- i = sizeof(fontNamePropTable) / sizeof(fontProp);
- for (t = fontNamePropTable; i; i--, t++)
- t->atom = MakeAtom(t->name, (unsigned) strlen(t->name), TRUE);
- i = sizeof(extraProps) / sizeof(fontProp);
- for (t = extraProps; i; i--, t++)
- t->atom = MakeAtom(t->name, (unsigned) strlen(t->name), TRUE);
-}
-
-void
-sp_make_header(
- SpeedoFontPtr spf,
- FontInfoPtr pinfo)
-{
- int pixel_size;
- SpeedoMasterFontPtr spmf = spf->master;
-
- pinfo->firstCol = spmf->first_char_id & 0xff;
- pinfo->firstRow = spmf->first_char_id >> 8;
- pinfo->lastCol = spmf->max_id & 0xff;
- pinfo->lastRow = spmf->max_id >> 8;
-
- /* XXX -- hackery here */
- pinfo->defaultCh = 0;
-/* computed by FontComputeInfoAccelerators:
- * noOverlap
- * constantMetrics
- * terminalFont
- * constantWidth
- * inkInside
- */
- pinfo->inkMetrics = 0;
- pinfo->allExist = 0;
- pinfo->drawDirection = LeftToRight;
- pinfo->cachable = 1;
- if (spf->specs.xxmult != spf->specs.yymult)
- pinfo->anamorphic = TRUE;
- else
- pinfo->anamorphic = FALSE;
-/* computed by sp_compute_bounds:
- * maxOverlap
- * maxbounds
- * minbounds
- * ink_maxbounds
- * ink_minbounds
- */
- pixel_size = spf->vals.pixel_matrix[3] * STRETCH_FACTOR / 100;
- pinfo->fontAscent = pixel_size * 764 / 1000; /* 764 == EM_TOP */
- pinfo->fontDescent = pixel_size - pinfo->fontAscent;
-}
-
-static void
-adjust_min_max(
- xCharInfo *minc,
- xCharInfo *maxc,
- xCharInfo *tmp)
-{
-#define MINMAX(field,ci) \
- if (minc->field > (ci)->field) \
- minc->field = (ci)->field; \
- if (maxc->field < (ci)->field) \
- maxc->field = (ci)->field;
-
- MINMAX(ascent, tmp);
- MINMAX(descent, tmp);
- MINMAX(leftSideBearing, tmp);
- MINMAX(rightSideBearing, tmp);
- MINMAX(characterWidth, tmp);
-
- if ((INT16)minc->attributes > (INT16)tmp->attributes)
- minc->attributes = tmp->attributes;
- if ((INT16)maxc->attributes < (INT16)tmp->attributes)
- maxc->attributes = tmp->attributes;
-
-#undef MINMAX
-}
-
-
-void
-sp_compute_bounds(
- SpeedoFontPtr spf,
- FontInfoPtr pinfo,
- unsigned long flags,
- long *sWidth)
-{
- int i,
- id,
- index,
- maxOverlap,
- overlap,
- total_width = 0;
- xCharInfo minchar,
- maxchar,
- tmpchar;
- bbox_t bbox;
- fix31 width;
- double pix_width;
- SpeedoMasterFontPtr spmf = spf->master;
- int firstChar;
- int num_chars = 0;
-
- firstChar = spmf->first_char_id;
- minchar.ascent = minchar.descent =
- minchar.leftSideBearing = minchar.rightSideBearing =
- minchar.characterWidth = minchar.attributes = 32767;
- maxchar.ascent = maxchar.descent =
- maxchar.leftSideBearing = maxchar.rightSideBearing =
- maxchar.characterWidth = maxchar.attributes = -32767;
- maxOverlap = -32767;
- *sWidth = 0;
- for (i = 0; i < spmf->num_chars; i++) {
- int j;
- int char_id;
-
- index = spmf->enc[i * 2 + 1];
- char_id = spmf->enc[i * 2];
- /*
- * See if this character is in the list of ranges specified in the
- * XLFD name
- */
- for (j = 0; j < spf->vals.nranges; j++)
- if (char_id >= mincharno(spf->vals.ranges[j]) &&
- char_id <= maxcharno(spf->vals.ranges[j]))
- break;
- if (spf->vals.nranges && j == spf->vals.nranges)
- continue;
- num_chars++;
-
- if (!(flags & ComputeBoundsOnly)) {
-
- width = sp_get_char_width(index);
-
- /* convert to pixel coords */
- pix_width = (int)width * (spf->specs.xxmult / 65536L) +
- ((int) width * (spf->specs.xxmult % 65536L))
- / 65536L;
- pix_width /= 65536L;
-
- (void) sp_get_char_bbox(index, &bbox);
- bbox.ymax = (bbox.ymax + 32768L) >> 16;
- bbox.ymin = (bbox.ymin + 32768L) >> 16;
- bbox.xmin = (bbox.xmin + 32768L) >> 16;
- bbox.xmax = (bbox.xmax + 32768L) >> 16;
- tmpchar.ascent = bbox.ymax;
- tmpchar.descent = -bbox.ymin;
- tmpchar.characterWidth = (int)(pix_width + /* round */
- (pix_width > 0 ? 0.5 : -0.5));
- tmpchar.rightSideBearing = bbox.xmax;
- tmpchar.leftSideBearing = bbox.xmin;
-
- if (!tmpchar.characterWidth &&
- tmpchar.ascent == -tmpchar.descent &&
- tmpchar.rightSideBearing == tmpchar.leftSideBearing)
- {
- /* Character appears non-existent, probably as a result
- of the transformation. Let's give it one pixel in
- the universe so it's not mistaken for non-existent. */
- tmpchar.leftSideBearing = tmpchar.descent = 0;
- tmpchar.rightSideBearing = tmpchar.ascent = 1;
- }
-
- tmpchar.attributes = (int)((double)(int)width / 65.536 + .5);
- }
- else
- tmpchar = spf->encoding[char_id - firstChar].metrics;
-
- adjust_min_max(&minchar, &maxchar, &tmpchar);
- overlap = tmpchar.rightSideBearing - tmpchar.characterWidth;
- if (maxOverlap < overlap)
- maxOverlap = overlap;
-
- total_width += ((int)(INT16)tmpchar.attributes);
- *sWidth += abs((int)(INT16)tmpchar.attributes);
-
- if (flags & SaveMetrics) {
- id = spmf->enc[i * 2] - firstChar;
- assert(id <= spmf->max_id - firstChar);
- spf->encoding[id].metrics = tmpchar;
- }
- }
-
-
- if (num_chars > 0)
- {
- *sWidth = (int)(((double)*sWidth * 10.0 + (double)num_chars / 2.0) /
- num_chars);
- if (total_width < 0)
- {
- /* Predominant direction is R->L */
- *sWidth = -*sWidth;
- }
- spf->vals.width = (int)((double)*sWidth * spf->vals.pixel_matrix[0] /
- 1000.0 +
- (spf->vals.pixel_matrix[0] > 0 ? .5 : -.5));
- }
- else
- {
- spf->vals.width = 0;
- }
- pinfo->maxbounds = maxchar;
- pinfo->minbounds = minchar;
- pinfo->ink_maxbounds = maxchar;
- pinfo->ink_minbounds = minchar;
- pinfo->maxOverlap = maxOverlap;
-}
-
-void
-sp_compute_props(
- SpeedoFontPtr spf,
- char *fontname,
- FontInfoPtr pinfo,
- long sWidth)
-{
- FontPropPtr pp;
- int i,
- nprops;
- fontProp *fpt;
- char *is_str;
- char *ptr1 = NULL,
- *ptr2;
- char *ptr3;
- char tmpname[1024];
- FontScalableRec tmpvals;
-
- nprops = pinfo->nprops = NPROPS;
- pinfo->isStringProp = (char *) xalloc(sizeof(char) * nprops);
- pinfo->props = (FontPropPtr) xalloc(sizeof(FontPropRec) * nprops);
- if (!pinfo->isStringProp || !pinfo->props) {
- xfree(pinfo->isStringProp);
- pinfo->isStringProp = (char *) 0;
- xfree(pinfo->props);
- pinfo->props = (FontPropPtr) 0;
- pinfo->nprops = 0;
- return;
- }
- bzero(pinfo->isStringProp, (sizeof(char) * nprops));
-
- ptr2 = fontname;
- for (i = NNAMEPROPS, pp = pinfo->props, fpt = fontNamePropTable,
- is_str = pinfo->isStringProp;
- i;
- i--, pp++, fpt++, is_str++) {
-
- if (*ptr2)
- {
- ptr1 = ptr2 + 1;
- if (!(ptr2 = strchr(ptr1, '-'))) ptr2 = strchr(ptr1, '\0');
- }
-
- pp->name = fpt->atom;
- switch (fpt->type) {
- case atom:
- *is_str = TRUE;
- pp->value = MakeAtom(ptr1, ptr2 - ptr1, TRUE);
- break;
- case truncate_atom:
- *is_str = TRUE;
- for (ptr3 = ptr1; *ptr3; ptr3++)
- if (*ptr3 == '[')
- break;
- pp->value = MakeAtom(ptr1, ptr3 - ptr1, TRUE);
- break;
- case pixel_size:
- pp->value = (int)(spf->vals.pixel_matrix[3] +
- (spf->vals.pixel_matrix[3] > 0 ? .5 : -.5));
- break;
- case point_size:
- pp->value = (int)(spf->vals.point_matrix[3] * 10.0 +
- (spf->vals.point_matrix[3] > 0 ? .5 : -.5));
- break;
- case resolution_x:
- pp->value = spf->vals.x;
- break;
- case resolution_y:
- pp->value = spf->vals.y;
- break;
- case average_width:
- pp->value = spf->vals.width;
- break;
- }
- }
-
- for (i = 0, fpt = extraProps; i < NEXTRAPROPS; i++, is_str++, pp++, fpt++) {
- pp->name = fpt->atom;
- switch (i) {
- case FONTPROP:
- *is_str = TRUE;
- strcpy(tmpname, fontname);
- FontParseXLFDName(tmpname, &tmpvals, FONT_XLFD_REPLACE_ZERO);
- FontParseXLFDName(tmpname, &spf->vals, FONT_XLFD_REPLACE_VALUE);
- pp->value = MakeAtom(tmpname, strlen(tmpname), TRUE);
- break;
- case COPYRIGHTPROP:
- *is_str = TRUE;
- pp->value = MakeAtom(spf->master->copyright,
- strlen(spf->master->copyright), TRUE);
- break;
- case FONT_TYPEPROP:
- *is_str = TRUE;
- pp->value = MakeAtom("Speedo", strlen("Speedo"), TRUE);
- break;
- case RASTERIZER_NAMEPROP:
- *is_str = TRUE;
- pp->value = MakeAtom("X Consortium Speedo Rasterizer",
- strlen("X Consortium Speedo Rasterizer"),
- TRUE);
- break;
- case RAWPIXELPROP:
- *is_str = FALSE;
- pp->value = 1000;
- break;
- case RAWPOINTPROP:
- *is_str = FALSE;
- pp->value = (long)(72270.0 / (double)spf->vals.y + .5);
- break;
- case RAWASCENTPROP:
- *is_str = FALSE;
- pp->value = STRETCH_FACTOR * 764 / 100;
- break;
- case RAWDESCENTPROP:
- *is_str = FALSE;
- pp->value = STRETCH_FACTOR * 236 / 100;
- break;
- case RAWWIDTHPROP:
- *is_str = FALSE;
- pp->value = sWidth;
- break;
- }
- }
-}
diff --git a/nx-X11/lib/font/Speedo/spint.h b/nx-X11/lib/font/Speedo/spint.h
deleted file mode 100644
index 118ea8f42..000000000
--- a/nx-X11/lib/font/Speedo/spint.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/* $Xorg: spint.h,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */
-/*
- * Copyright 1990, 1991 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of Network Computing Devices or Digital
- * not be used in advertising or publicity pertaining to distribution of
- * the software without specific, written prior permission.
- *
- * NETWORK COMPUTING DEVICES AND DIGITAL DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES OR DIGITAL BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/Speedo/spint.h,v 1.9 2001/01/17 19:43:20 dawes Exp $ */
-
-#ifndef _SPINT_H_
-#define _SPINT_H_
-
-#include <X11/fonts/fntfilst.h>
-#ifndef XFree86LOADER
-#include <stdio.h>
-#else
-#include <xf86_ansic.h>
-#endif
-#include <X11/Xfuncproto.h>
-#include "speedo.h"
-
-#define SaveMetrics 0x1
-#define ComputeBoundsOnly 0x2
-
-#define GLWIDTHBYTESPADDED(bits,nbytes) \
- ((nbytes) == 1 ? (((bits)+7)>>3) /* pad to 1 byte */ \
- :(nbytes) == 2 ? ((((bits)+15)>>3)&~1) /* pad to 2 bytes */ \
- :(nbytes) == 4 ? ((((bits)+31)>>3)&~3) /* pad to 4 bytes */ \
- :(nbytes) == 8 ? ((((bits)+63)>>3)&~7) /* pad to 8 bytes */ \
- : 0)
-
-#define GLYPH_SIZE(ch, nbytes) \
- GLWIDTHBYTESPADDED((ch)->metrics.rightSideBearing - \
- (ch)->metrics.leftSideBearing, (nbytes))
-
-#define mincharno(p) ((p).min_char_low + ((p).min_char_high << 8))
-#define maxcharno(p) ((p).max_char_low + ((p).max_char_high << 8))
-
-#define MasterFileOpen 0x1
-
-typedef struct _sp_master {
- FontEntryPtr entry; /* back pointer */
- FILE *fp;
- char *fname;
- ufix8 *f_buffer;
- ufix8 *c_buffer;
- char *copyright;
- ufix8 *key;
- buff_t font;
- buff_t char_data;
- ufix16 mincharsize;
- int first_char_id;
- int num_chars;
- int max_id;
- int state; /* open, closed */
- int refcount; /* number of instances */
- int *enc;
- int enc_size;
-} SpeedoMasterFontRec, *SpeedoMasterFontPtr;
-
-typedef struct _cur_font_stats {
- fsBitmapFormat format;
- /* current glyph info */
- ufix16 char_index;
- ufix16 char_id;
-
- fix15 bit_width,
- bit_height;
- fix15 cur_y;
- int bpr;
-
- /*
- * since Speedo returns extents that are not identical to what it feeds to
- * the bitmap builder, and we want to be able to use the extents for
- * preformance reasons, some of the bitmaps require padding out. the next
- * two flags keep track of this.
- */
- fix15 last_y;
- int trunc;
-
- pointer bp;
- int scanpad;
-} CurrentFontValuesRec, *CurrentFontValuesPtr;
-
-
-typedef struct _sp_font {
- struct _sp_master *master;
- specs_t specs;
-
- FontEntryPtr entry;
-
- FontScalableRec vals;
-
- /* char & metric data */
- CharInfoPtr encoding;
- CharInfoPtr pDefault;
- pointer bitmaps;
-
-#ifdef DEBUG
- unsigned long bitmap_size;
-#endif
-
-} SpeedoFontRec, *SpeedoFontPtr;
-
-extern SpeedoFontPtr sp_fp_cur;
-
-extern int sp_open_font(char *, char *, FontEntryPtr, FontScalablePtr,
- fsBitmapFormat, fsBitmapFormatMask, Mask,
- SpeedoFontPtr *);
-extern int sp_open_master(const char *, const char *, SpeedoMasterFontPtr *);
-extern void sp_close_font(SpeedoFontPtr);
-extern void sp_close_master_font(SpeedoMasterFontPtr);
-extern void sp_close_master_file(SpeedoMasterFontPtr);
-extern void sp_reset_master(SpeedoMasterFontPtr);
-extern void SpeedoErr(char *fmt, ...);
-
-extern void sp_make_standard_props(void);
-extern void sp_make_header(SpeedoFontPtr, FontInfoPtr);
-extern void sp_compute_bounds(SpeedoFontPtr, FontInfoPtr, unsigned long, long *);
-extern void sp_compute_props(SpeedoFontPtr, char *, FontInfoPtr, long);
-extern int sp_build_all_bitmaps(FontPtr, fsBitmapFormat, fsBitmapFormatMask);
-extern unsigned long sp_compute_data_size(FontPtr, int, int, unsigned long,
- unsigned long);
-
-extern int SpeedoFontLoad(FontPtr *, char *, char *, FontEntryPtr,
- FontScalablePtr, fsBitmapFormat, fsBitmapFormatMask,
- Mask);
-
-extern int sp_bics_map[];
-extern int sp_bics_map_size;
-
-#ifdef EXTRAFONTS
-extern int adobe_map[];
-extern int adobe_map_size;
-
-#endif
-
-#endif /* _SPINT_H_ */
diff --git a/nx-X11/lib/font/Speedo/sptobdf.c b/nx-X11/lib/font/Speedo/sptobdf.c
deleted file mode 100644
index ca3caa515..000000000
--- a/nx-X11/lib/font/Speedo/sptobdf.c
+++ /dev/null
@@ -1,678 +0,0 @@
-/* $Xorg: sptobdf.c,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */
-/*
- * Copyright 1990, 1991 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of Network Computing Devices and
- * Digital not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- * Network Computing Devices and Digital make no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * NETWORK COMPUTING DEVICES AND DIGITAL DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES OR DIGITAL BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Dave Lemke
- */
-
-/*
-
-Copyright 1987, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-
-/*
- * Speedo outline to BFD format converter
- */
-
-#include <stdio.h>
-#include "speedo.h"
-
-#ifdef EXTRAFONTS
-#include "ncdkeys.h"
-#else
-#include "keys.h"
-#endif
-
-#include "iso8859.h"
-
-#define MAX_BITS 1024
-
-#define BBOX_CLIP
-
-static char line_of_bits[MAX_BITS + 1];
-
-static FILE *fp;
-static ufix16 char_index,
- char_id;
-static buff_t font;
-static buff_t char_data;
-static ufix8 *f_buffer,
- *c_buffer;
-static ufix16 mincharsize;
-static fix15 cur_y;
-static fix15 bit_width,
- bit_height;
-
-static ufix8 key[] =
-{
- KEY0,
- KEY1,
- KEY2,
- KEY3,
- KEY4,
- KEY5,
- KEY6,
- KEY7,
- KEY8
-}; /* Font decryption key */
-
-
-static char *progname;
-static char *fontname = NULL;
-static char *fontfile = NULL;
-
-static int point_size = 120;
-static int x_res = 72;
-static int y_res = 72;
-static int quality = 0;
-static int iso_encoding = 1;
-
-static int num_props = 7;
-static int stretch = 120;
-
-static specs_t specs;
-
-static void dump_header();
-
-static void
-usage()
-{
- fprintf(stderr, "Usage: %s [-xres x resolution] [-yres y resolution]\n\t[-ptsize pointsize] [-fn fontname] [-q quality (0-1)] fontfile\n", progname);
- fprintf(stderr, "Where:\n");
- fprintf(stderr, "-xres specifies the X resolution (72)\n");
- fprintf(stderr, "-yres specifies the Y resolution (72)\n");
- fprintf(stderr, "-pts specifies the pointsize in decipoints (120)\n");
- fprintf(stderr, "-fn specifies the font name (full Bitstream name)\n");
- fprintf(stderr, "-q specifies the font quality [0-1] (0)\n");
- fprintf(stderr, "\n");
- exit(0);
-}
-
-static fix15
-read_2b(ptr)
- ufix8 *ptr;
-{
- fix15 tmp;
-
- tmp = *ptr++;
- tmp = (tmp << 8) + *ptr;
- return tmp;
-}
-
-static fix31
-read_4b(ptr)
- ufix8 *ptr;
-{
- fix31 tmp;
-
- tmp = *ptr++;
- tmp = (tmp << 8) + *ptr++;
- tmp = (tmp << 8) + *ptr++;
- tmp = (tmp << 8) + *ptr;
- return tmp;
-}
-
-static void
-process_args(ac, av)
- int ac;
- char **av;
-{
- int i;
-
- for (i = 1; i < ac; i++) {
- if (!strncmp(av[i], "-xr", 3)) {
- if (av[i + 1]) {
- x_res = atoi(av[++i]);
- } else
- usage();
- } else if (!strncmp(av[i], "-yr", 3)) {
- if (av[i + 1]) {
- y_res = atoi(av[++i]);
- } else
- usage();
- } else if (!strncmp(av[i], "-pt", 3)) {
- if (av[i + 1]) {
- point_size = atoi(av[++i]);
- } else
- usage();
- } else if (!strncmp(av[i], "-fn", 3)) {
- if (av[i + 1]) {
- fontname = av[++i];
- } else
- usage();
- } else if (!strncmp(av[i], "-q", 2)) {
- if (av[i + 1]) {
- quality = atoi(av[++i]);
- } else
- usage();
- } else if (!strncmp(av[i], "-st", 3)) {
- if (av[i + 1]) {
- stretch = atoi(av[++i]);
- } else
- usage();
- } else if (!strncmp(av[i], "-noni", 5)) {
- iso_encoding = 0;
- } else if (*av[i] == '-') {
- usage();
- } else
- fontfile = av[i];
- }
- if (!fontfile)
- usage();
-}
-
-void
-main(argc, argv)
- int argc;
- char **argv;
-{
- ufix32 i;
- ufix8 tmp[16];
- ufix32 minbufsize;
- ufix16 cust_no;
- int first_char_index,
- num_chars;
-
- progname = argv[0];
- process_args(argc, argv);
- fp = fopen(fontfile, "r");
- if (!fp) {
- fprintf(stderr, "No such font file, \"%s\"\n", fontfile);
- exit(-1);
- }
- if (fread(tmp, sizeof(ufix8), 16, fp) != 16) {
- fprintf(stderr, "error reading \"%s\"\n", fontfile);
- exit(-1);
- }
- minbufsize = (ufix32) read_4b(tmp + FH_FBFSZ);
- f_buffer = (ufix8 *) malloc(minbufsize);
- if (!f_buffer) {
- fprintf(stderr, "can't get %x bytes of memory\n", minbufsize);
- exit(-1);
- }
- fseek(fp, (ufix32) 0, 0);
-
- if (fread(f_buffer, sizeof(ufix8), (ufix16) minbufsize, fp) != minbufsize) {
- fprintf(stderr, "error reading file \"%s\"\n", fontfile);
- exit(-1);
- }
- mincharsize = read_2b(f_buffer + FH_CBFSZ);
-
- c_buffer = (ufix8 *) malloc(mincharsize);
- if (!c_buffer) {
- fprintf(stderr, "can't get %x bytes for char buffer\n", mincharsize);
- exit(-1);
- }
- /* init */
- sp_reset();
-
- font.org = f_buffer;
- font.no_bytes = minbufsize;
-
- if ((cust_no = sp_get_cust_no(font)) != CUS0) {
- fprintf(stderr, "Non-standard encryption for \"%s\"\n", fontfile);
- exit(-1);
- }
- sp_set_key(key);
-
- first_char_index = read_2b(f_buffer + FH_FCHRF);
- num_chars = read_2b(f_buffer + FH_NCHRL);
-
- /* set up specs */
- /* Note that point size is in decipoints */
- specs.pfont = &font;
- /* XXX beware of overflow */
- specs.xxmult = point_size * x_res / 720 * (1 << 16);
- specs.xymult = 0L << 16;
- specs.xoffset = 0L << 16;
- specs.yxmult = 0L << 16;
- specs.yymult = point_size * y_res / 720 * (1 << 16);
- specs.yoffset = 0L << 16;
- switch (quality) {
- case 0:
- specs.flags = 0;
- break;
- case 1:
- specs.flags = MODE_SCREEN;
- break;
- case 2:
- specs.flags = MODE_2D;
- break;
- default:
- fprintf(stderr, "bogus quality value %d\n", quality);
- break;
- }
- specs.out_info = NULL;
-
- if (!fontname) {
- fontname = (char *) (f_buffer + FH_FNTNM);
- }
- if (iso_encoding)
- num_chars = num_iso_chars;
- dump_header(num_chars);
-
- if (!sp_set_specs(&specs)) {
- fprintf(stderr, "can't set specs\n");
- } else {
- if (iso_encoding) {
- for (i = 0; i < num_iso_chars * 2; i += 2) {
- char_index = iso_map[i + 1];
- char_id = iso_map[i];
- if (!sp_make_char(char_index)) {
- fprintf(stderr, "can't make char %x\n", char_index);
- }
- }
- } else {
- for (i = 0; i < num_chars; i++) {
- char_index = i + first_char_index;
- char_id = sp_get_char_id(char_index);
- if (char_id) {
- if (!sp_make_char(char_index)) {
- fprintf(stderr, "can't make char %x\n", char_index);
- }
- }
- }
- }
- }
-
- (void) fclose(fp);
-
- printf("ENDFONT\n");
- exit(0);
-}
-
-static void
-dump_header(num_chars)
- ufix32 num_chars;
-{
- fix15 xmin,
- ymin,
- xmax,
- ymax;
- fix15 ascent,
- descent;
- fix15 pixel_size;
-
- xmin = read_2b(f_buffer + FH_FXMIN);
- ymin = read_2b(f_buffer + FH_FYMIN);
- xmax = read_2b(f_buffer + FH_FXMAX);
- ymax = read_2b(f_buffer + FH_FYMAX);
- pixel_size = point_size * x_res / 720;
-
- printf("STARTFONT 2.1\n");
- printf("COMMENT\n");
- printf("COMMENT Generated from Bitstream Speedo outlines via sptobdf\n");
- printf("COMMENT\n");
- printf("FONT %s\n", fontname);
- printf("SIZE %d %d %d\n", pixel_size, x_res, y_res);
- printf("FONTBOUNDINGBOX %d %d %d %d\n", xmin, ymin, xmax, ymax);
- printf("STARTPROPERTIES %d\n", num_props);
-
- printf("RESOLUTION_X %d\n", x_res);
- printf("RESOLUTION_Y %d\n", y_res);
- printf("POINT_SIZE %d\n", point_size);
- printf("PIXEL_SIZE %d\n", pixel_size);
- printf("COPYRIGHT \"%s\"\n", f_buffer + FH_CPYRT);
-
- /* do some stretching here so that its isn't too tight */
- pixel_size = pixel_size * stretch / 100;
- ascent = pixel_size * 764 / 1000; /* 764 == EM_TOP */
- descent = pixel_size - ascent;
- printf("FONT_ASCENT %d\n", ascent);
- printf("FONT_DESCENT %d\n", descent);
-
- printf("ENDPROPERTIES\n");
- printf("CHARS %d\n", num_chars);
-}
-
-buff_t *
-sp_load_char_data(file_offset, num, cb_offset)
- fix31 file_offset;
- fix15 num;
- fix15 cb_offset;
-{
- if (fseek(fp, (long) file_offset, (int) 0)) {
- fprintf(stderr, "can't seek to char\n");
- (void) fclose(fp);
- exit(-1);
- }
- if ((num + cb_offset) > mincharsize) {
- fprintf(stderr, "char buf overflow\n");
- (void) fclose(fp);
- exit(-2);
- }
- if (fread((c_buffer + cb_offset), sizeof(ufix8), num, fp) != num) {
- fprintf(stderr, "can't get char data\n");
- exit(-1);
- }
- char_data.org = (ufix8 *) c_buffer + cb_offset;
- char_data.no_bytes = num;
-
- return &char_data;
-}
-
-/*
- * Called by Speedo character generator to report an error.
- *
- * Since character data not available is one of those errors
- * that happens many times, don't report it to user
- */
-void
-sp_report_error(n)
- fix15 n;
-{
- switch (n) {
- case 1:
- fprintf(stderr, "Insufficient font data loaded\n");
- break;
- case 3:
- fprintf(stderr, "Transformation matrix out of range\n");
- break;
- case 4:
- fprintf(stderr, "Font format error\n");
- break;
- case 5:
- fprintf(stderr, "Requested specs not compatible with output module\n");
- break;
- case 7:
- fprintf(stderr, "Intelligent transformation requested but not supported\n");
- break;
- case 8:
- fprintf(stderr, "Unsupported output mode requested\n");
- break;
- case 9:
- fprintf(stderr, "Extended font loaded but only compact fonts supported\n");
- break;
- case 10:
- fprintf(stderr, "Font specs not set prior to use of font\n");
- break;
- case 12:
- break;
- case 13:
- fprintf(stderr, "Track kerning data not available()\n");
- break;
- case 14:
- fprintf(stderr, "Pair kerning data not available()\n");
- break;
- default:
- fprintf(stderr, "report_error(%d)\n", n);
- break;
- }
-}
-
-void
-sp_open_bitmap(x_set_width, y_set_width, xorg, yorg, xsize, ysize)
- fix31 x_set_width;
- fix31 y_set_width;
- fix31 xorg;
- fix31 yorg;
- fix15 xsize;
- fix15 ysize;
-{
- fix15 i;
- fix15 off_horz;
- fix15 off_vert;
- fix31 width,
- pix_width;
- bbox_t bb;
-
- bit_width = xsize;
-
- bit_height = ysize;
- off_horz = (fix15) ((xorg + 32768L) >> 16);
- off_vert = (fix15) ((yorg + 32768L) >> 16);
-
- if (bit_width > MAX_BITS) {
-
-#ifdef DEBUG
- fprintf(stderr, "char wider than max bits -- truncated\n");
-#endif
-
- bit_width = MAX_BITS;
- }
- width = sp_get_char_width(char_index);
- pix_width = width * (specs.xxmult / 65536L) +
- ((ufix32) width * ((ufix32) specs.xxmult & 0xffff)) / 65536L;
- pix_width /= 65536L;
-
- width = (pix_width * 7200L) / (point_size * y_res);
-
- (void) sp_get_char_bbox(char_index, &bb);
- bb.xmin >>= 16;
- bb.ymin >>= 16;
- bb.xmax >>= 16;
- bb.ymax >>= 16;
-
-#ifdef DEBUG
- if ((bb.xmax - bb.xmin) != bit_width)
- fprintf(stderr, "bbox & width mismatch 0x%x (%d) (%d vs %d)\n",
- char_index, char_id, (bb.xmax - bb.xmin), bit_width);
- if ((bb.ymax - bb.ymin) != bit_height)
- fprintf(stderr, "bbox & height mismatch 0x%x (%d) (%d vs %d)\n",
- char_index, char_id, (bb.ymax - bb.ymin), bit_height);
- if (bb.xmin != off_horz)
- fprintf(stderr, "x min mismatch 0x%x (%d) (%d vs %d)\n",
- char_index, char_id, bb.xmin, off_horz);
- if (bb.ymin != off_vert)
- fprintf(stderr, "y min mismatch 0x%x (%d) (%d vs %d)\n",
- char_index, char_id, bb.ymin, off_vert);
-#endif
-
-#ifdef BBOX_CLIP
- bit_width = bb.xmax - bb.xmin;
- bit_height = bb.ymax - bb.ymin;
- off_horz = bb.xmin;
- off_vert = bb.ymin;
-#endif
-
- /* XXX kludge to handle space */
- if (bb.xmin == 0 && bb.ymin == 0 && bb.xmax == 0 && bb.ymax == 0 &&
- width) {
- bit_width = 1;
- bit_height = 1;
- }
- printf("STARTCHAR %d\n", char_id);
- printf("ENCODING %d\n", char_id);
- printf("SWIDTH %d 0\n", width);
- printf("DWIDTH %d 0\n", pix_width);
- printf("BBX %d %d %d %d\n", bit_width, bit_height, off_horz, off_vert);
- printf("BITMAP\n");
-
- for (i = 0; i < bit_width; i++) {
- line_of_bits[i] = '.';
- }
- line_of_bits[bit_width] = '\0';
- cur_y = 0;
-}
-
-static void
-dump_line(line)
- ufix8 *line;
-{
- int bit;
- unsigned byte;
-
- byte = 0;
- for (bit = 0; bit < bit_width; bit++) {
- if (line[bit] == 'X')
- byte |= (1 << (7 - (bit & 7)));
- if ((bit & 7) == 7) {
- printf("%02X", byte);
- byte = 0;
- }
- }
- if ((bit & 7) != 0)
- printf("%02X", byte);
- printf("\n");
-}
-
-#ifdef BBOX_CLIP
-static fix15 last_y;
-static int trunc = 0;
-
-#endif
-
-void
-sp_set_bitmap_bits(y, xbit1, xbit2)
- fix15 y;
- fix15 xbit1;
- fix15 xbit2;
-{
- fix15 i;
-
- if (xbit1 > MAX_BITS) {
-
-#ifdef DEBUG
- fprintf(stderr, "run wider than max bits -- truncated\n");
-#endif
-
- xbit1 = MAX_BITS;
- }
- if (xbit2 > MAX_BITS) {
-
-#ifdef DEBUG
- fprintf(stderr, "run wider than max bits -- truncated\n");
-#endif
-
- xbit2 = MAX_BITS;
- }
- while (cur_y != y) {
- dump_line(line_of_bits);
- for (i = 0; i < bit_width; i++) {
- line_of_bits[i] = '.';
- }
- cur_y++;
- }
-
-#ifdef BBOX_CLIP
- last_y = y;
- if (y >= bit_height) {
-
-#ifdef DEBUG
- fprintf(stderr,
- "y value is larger than height 0x%x (%d) -- truncated\n",
- char_index, char_id);
-#endif
-
- trunc = 1;
- return;
- }
-#endif /* BBOX_CLIP */
-
- for (i = xbit1; i < xbit2; i++) {
- line_of_bits[i] = 'X';
- }
-}
-
-void
-sp_close_bitmap()
-{
-
-#ifdef BBOX_CLIP
- int i;
-
- if (!trunc)
- dump_line(line_of_bits);
- trunc = 0;
-
-
- last_y++;
- while (last_y < bit_height) {
-
-#ifdef DEBUG
- fprintf(stderr, "padding out height for 0x%x (%d)\n",
- char_index, char_id);
-#endif
-
- for (i = 0; i < bit_width; i++) {
- line_of_bits[i] = '.';
- }
- dump_line(line_of_bits);
- last_y++;
- }
-
-#else
- dump_line(line_of_bits);
-#endif
-
- printf("ENDCHAR\n");
-}
-
-/* outline stubs */
-void
-sp_open_outline()
-{
-}
-
-void
-sp_start_new_char()
-{
-}
-
-void
-sp_start_contour()
-{
-}
-
-void
-sp_curve_to()
-{
-}
-
-void
-sp_line_to()
-{
-}
-
-void
-sp_close_contour()
-{
-}
-
-void
-sp_close_outline()
-{
-}
diff --git a/nx-X11/lib/font/Speedo/useropt.h b/nx-X11/lib/font/Speedo/useropt.h
deleted file mode 100644
index e879aae96..000000000
--- a/nx-X11/lib/font/Speedo/useropt.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* $Xorg: useropt.h,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */
-/*
-
-Copyright 1993, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-
-#define INCL_LCD 1
-#define STATIC_ALLOC 1
-
-#define INCL_BLACK 1
-#define INCL_SCREEN 1
-#define INCL_2D 1
-#define SHORT_LISTS 0
-
-#define INCL_RULES 1
-#define INCL_METRICS 1
-
-#define INCL_KEYS 1
diff --git a/nx-X11/lib/font/Type1/AFM.h b/nx-X11/lib/font/Type1/AFM.h
deleted file mode 100644
index f2c997a3f..000000000
--- a/nx-X11/lib/font/Type1/AFM.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#if XFONT_CID
-#ifndef AFM_H
-#define AFM_H
-
-/* Bounding box definition. Used for the Font BBox as well as the
- * Character BBox.
- */
-typedef struct
-{
- int llx; /* lower left x-position */
- int lly; /* lower left y-position */
- int urx; /* upper right x-position */
- int ury; /* upper right y-position */
-} BBox;
-
-/* Character Metric Information. This structure is used only if ALL
- * character metric information is requested. If only the character
- * widths is requested, then only an array of the character x-widths
- * is returned.
- *
- * The key that each field is associated with is in comments. For an
- * explanation about each key and its value please refer to the
- * Character Metrics section of the AFM documentation (full title
- * & version given above).
- */
-typedef struct
-{
- long code; /* CID code */
- int wx; /* key: WX or W0X */
- BBox charBBox; /* key: B */
-} Metrics;
-
-typedef struct
-{
- int nChars; /* number of entries in char metrics array */
- Metrics *metrics; /* ptr to char metrics array */
-} FontInfo;
-
-int CIDAFM(FILE *, FontInfo **);
-#endif /* AFM_H */
-#endif
diff --git a/nx-X11/lib/font/Type1/Imakefile b/nx-X11/lib/font/Type1/Imakefile
deleted file mode 100644
index 3b10c0399..000000000
--- a/nx-X11/lib/font/Type1/Imakefile
+++ /dev/null
@@ -1,91 +0,0 @@
-XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:46:28 cpqbld Exp $
-
-
-
-
-XCOMM $XFree86: xc/lib/font/Type1/Imakefile,v 1.12 2002/02/13 21:32:48 dawes Exp $
-
-#if BuildServer && DoLoadableServer
-#define IHaveSubdirs
-#define NoLibSubdirs
-#define PassCDebugFlags
-SUBDIRS = module
-#endif
-
-INCLUDES = -I$(FONTINCSRC) -I../include -I$(XINCLUDESRC) \
- -I$(SERVERSRC)/include
-
-#if BuildCID
-CIDSRCS = cidchar.c afm.c
-CIDOBJS = cidchar.o afm.o
-#if HasUsableFileMmap
-MMAPDEFINES = -DUSE_MMAP
-#endif
-DEFINES = -DBUILDCID -DHAVE_CFM $(MMAPDEFINES)
-#endif
-
-SRCS = \
- arith.c \
- curves.c \
- fontfcn.c \
- hints.c \
- lines.c \
- objects.c \
- paths.c \
- regions.c \
- scanfont.c \
- spaces.c \
- t1funcs.c \
- t1info.c \
- t1io.c \
- t1malloc.c \
- t1snap.c \
- t1stub.c \
- token.c \
- type1.c \
- util.c \
- $(CIDSRCS) \
- t1unicode.c
-
-
-OBJS = \
- arith.o \
- curves.o \
- fontfcn.o \
- hints.o \
- lines.o \
- objects.o \
- paths.o \
- regions.o \
- scanfont.o \
- spaces.o \
- t1funcs.o \
- t1info.o \
- t1io.o \
- t1malloc.o \
- t1snap.o \
- t1stub.o \
- token.o \
- type1.o \
- util.o \
- $(CIDOBJS) \
- t1unicode.o
-
-#if BuildFontLib
-#define DoNormalLib NormalLibFont
-#define DoSharedLib SharedLibFont
-#define DoDebugLib DebugLibFont
-#define DoProfileLib ProfileLibFont
-#include <Library.tmpl>
-LibraryObjectRule()
-
-SubdirLibraryRule($(OBJS))
-NormalLintTarget($(SRCS))
-#endif
-
-#if BuildServer && DoLoadableServer
-MakeSubdirs($(SUBDIRS))
-DependSubdirs($(SUBDIRS))
-#endif
-
-DependTarget()
diff --git a/nx-X11/lib/font/Type1/afm.c b/nx-X11/lib/font/Type1/afm.c
deleted file mode 100644
index 9a6dafee7..000000000
--- a/nx-X11/lib/font/Type1/afm.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/afm.c,v 1.2 1999/08/21 13:47:38 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#ifdef XFONT_CID
-#ifndef FONTMODULE
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <limits.h>
-#else
-#include "Xmd.h" /* For INT32 declaration */
-#include "Xdefs.h" /* For Bool */
-#include "xf86_ansic.h"
-#endif
-#include <X11/fonts/fontmisc.h> /* for xalloc/xfree */
-#include "AFM.h"
-
-#define PBUF 256
-#define KBUF 20
-
-char *gettoken(FILE *);
-
-static char *afmbuf = NULL;
-
-char *gettoken(FILE *fd) {
- char *bp;
- int c, found;
-
- bp = afmbuf;
- found = 0;
-
- while((c = getc(fd)) != EOF) {
- if (found == 0 && (c == ' ' || c == '\t' || c == '\n' || c == '\r' ||
- c == ';' || c == ',')) continue;
- found = 1;
- if (c != ' ' && c != '\t' && c != '\n' && c != '\r' && c != ';') {
- *bp++ = c;
- if (bp - afmbuf >= PBUF) {
- bp = afmbuf;
- break;
- }
- } else
- break;
- }
-
- *bp = 0;
- return(afmbuf);
-}
-
-int CIDAFM(FILE *fd, FontInfo **pfi) {
- char *p = 0;
- int i, j, k = 0, found = 0;
- FontInfo *fi;
-
- if (fd == NULL || pfi == NULL) return(1);
-
- *pfi = NULL;
-
- if ((afmbuf = (char *)xalloc(PBUF)) == NULL)
- return(1);
-
- while(1) {
- if (!(p = gettoken(fd))) {
- xfree(afmbuf);
- return(1);
- }
-
- if (strncmp(p, "StartFontMetrics", 16) == 0) {
- if (!(p = gettoken(fd))) {
- xfree(afmbuf);
- return(1);
- }
- if (strncmp(p, "4", 1) < 0) {
- free(afmbuf);
- return(1);
- }
- found = 1;
- } else if (strncmp(p, "StartCharMetrics", 16) == 0) {
- if (!found) {
- xfree(afmbuf);
- return(1);
- }
-
- if (!(p = gettoken(fd))) {
- xfree(afmbuf);
- return(1);
- }
-
- fi = (FontInfo *)xalloc(sizeof(FontInfo));
-
- if (fi == NULL) {
- xfree(afmbuf);
- return(1);
- }
- bzero(fi, sizeof(FontInfo));
-
- fi->nChars = atoi(p);
-
- if (fi->nChars < 0 || fi->nChars > INT_MAX / sizeof(Metrics)) {
- xfree(afmbuf);
- xfree(fi);
- return(1);
- }
- fi->metrics = (Metrics *)xalloc(fi->nChars *
- sizeof(Metrics));
- if (fi->metrics == NULL) {
- xfree(afmbuf);
- xfree(fi);
- return(1);
- }
-
- j = 0;
- for (i = 0; i < fi->nChars; i++) {
- k = 0;
- while(1) {
- if (!(p = gettoken(fd))) {
- k = KBUF;
- break;
- }
- if (strncmp(p, "W0X", 3) == 0) {
- if (!(p = gettoken(fd))) {
- k = KBUF;
- break;
- }
- fi->metrics[j].wx = atoi(p);
- } else if (strncmp(p, "N", 1) == 0) {
- if (!(p = gettoken(fd))) {
- k = KBUF;
- break;
- }
- fi->metrics[j].code = (long)atoi(p);
- } else if (strncmp(p, "B", 1) == 0) {
- if (!(p = gettoken(fd))) {
- k = KBUF;
- break;
- }
- fi->metrics[j].charBBox.llx = atoi(p);
- if (!(p = gettoken(fd))) {
- k = KBUF;
- break;
- }
- fi->metrics[j].charBBox.lly = atoi(p);
- if (!(p = gettoken(fd))) {
- k = KBUF;
- break;
- }
- fi->metrics[j].charBBox.urx = atoi(p);
- if (!(p = gettoken(fd))) {
- k = KBUF;
- break;
- }
- fi->metrics[j].charBBox.ury = atoi(p);
- j++;
- break;
- }
- k++;
- if (k >= KBUF) break;
- }
- if (k >= KBUF) break;
- }
- if (k >= KBUF || j != fi->nChars) {
- xfree(fi->metrics);
- xfree(fi);
- xfree(afmbuf);
- return(1);
- } else {
- *pfi = fi;
- xfree(afmbuf);
- return(0);
- }
- }
- }
-
- xfree(afmbuf);
- return(1);
-}
-#endif
diff --git a/nx-X11/lib/font/Type1/arith.c b/nx-X11/lib/font/Type1/arith.c
deleted file mode 100644
index 961154335..000000000
--- a/nx-X11/lib/font/Type1/arith.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/* $Xorg: arith.c,v 1.3 2000/08/17 19:46:29 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/arith.c,v 1.6tsi Exp $ */
-
- /* ARITH CWEB V0006 ******** */
-/*
-:h1.ARITH Module - Portable Module for Multiple Precision Fixed Point Arithmetic
-
-This module provides division and multiplication of 64-bit fixed point
-numbers. (To be more precise, the module works on numbers that take
-two 'longs' to store. That is almost always equivalent to saying 64-bit
-numbers.)
-
-Note: it is frequently easy and desirable to recode these functions in
-assembly language for the particular processor being used, because
-assembly language, unlike C, will have 64-bit multiply products and
-64-bit dividends. This module is offered as a portable version.
-
-&author. Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com) and Sten F. Andler
-
-
-:h3.Include Files
-
-The included files are:
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef FONTMODULE
-# include "os.h"
-#endif
-#include "objects.h"
-#include "spaces.h"
-#include "arith.h"
-
-
-/*
-:h3.
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-Reference for all algorithms: Donald E. Knuth, "The Art of Computer
-Programming, Volume 2, Semi-Numerical Algorithms," Addison-Wesley Co.,
-Massachusetts, 1969, pp. 229-279.
-
-Knuth talks about a 'digit' being an arbitrary sized unit and a number
-being a sequence of digits. We'll take a digit to be a 'short'.
-The following assumption must be valid for these algorithms to work:
-:ol.
-:li.A 'long' is two 'short's.
-:eol.
-The following code is INDEPENDENT of:
-:ol.
-:li.The actual size of a short.
-:li.Whether shorts and longs are stored most significant byte
-first or least significant byte first.
-:eol.
-
-SHORTSIZE is the number of bits in a short; LONGSIZE is the number of
-bits in a long; MAXSHORT is the maximum unsigned short:
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-ASSEMBLE concatenates two shorts to form a long:
-*/
-#define ASSEMBLE(hi,lo) ((((unsigned long)hi)<<SHORTSIZE)+(lo))
-/*
-HIGHDIGIT extracts the most significant short from a long; LOWDIGIT
-extracts the least significant short from a long:
-*/
-#define HIGHDIGIT(u) ((u)>>SHORTSIZE)
-#define LOWDIGIT(u) ((u)&MAXSHORT)
-
-/*
-SIGNBITON tests the high order bit of a long 'w':
-*/
-#define SIGNBITON(w) (((long)w)<0)
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-:h2.Double Long Arithmetic
-
-:h3.DLmult() - Multiply Two Longs to Yield a Double Long
-
-The two multiplicands must be positive.
-*/
-
-void
-DLmult(doublelong *product, unsigned long u, unsigned long v)
-{
-#ifdef LONG64
-/* printf("DLmult(? ?, %lx, %lx)\n", u, v); */
- *product = u*v;
-/* printf("DLmult returns %lx\n", *product); */
-#else
- register unsigned long u1, u2; /* the digits of u */
- register unsigned long v1, v2; /* the digits of v */
- register unsigned int w1, w2, w3, w4; /* the digits of w */
- register unsigned long t; /* temporary variable */
-/* printf("DLmult(? ?, %x, %x)\n", u, v); */
- u1 = HIGHDIGIT(u);
- u2 = LOWDIGIT(u);
- v1 = HIGHDIGIT(v);
- v2 = LOWDIGIT(v);
-
- if (v2 == 0) w4 = w3 = w2 = 0;
- else
- {
- t = u2 * v2;
- w4 = LOWDIGIT(t);
- t = u1 * v2 + HIGHDIGIT(t);
- w3 = LOWDIGIT(t);
- w2 = HIGHDIGIT(t);
- }
-
- if (v1 == 0) w1 = 0;
- else
- {
- t = u2 * v1 + w3;
- w3 = LOWDIGIT(t);
- t = u1 * v1 + w2 + HIGHDIGIT(t);
- w2 = LOWDIGIT(t);
- w1 = HIGHDIGIT(t);
- }
-
- product->high = ASSEMBLE(w1, w2);
- product->low = ASSEMBLE(w3, w4);
-#endif /* LONG64 else */
-}
-
-/*
-:h2.DLdiv() - Divide Two Longs by One Long, Yielding Two Longs
-
-Both the dividend and the divisor must be positive.
-*/
-
-void
-DLdiv(doublelong *quotient, /* also where dividend is, originally */
- unsigned long divisor)
-{
-#ifdef LONG64
-/* printf("DLdiv(%lx %lx)\n", quotient, divisor); */
- *quotient /= divisor;
-/* printf("DLdiv returns %lx\n", *quotient); */
-#else
- register unsigned long u1u2 = quotient->high;
- register unsigned long u3u4 = quotient->low;
- register long u3; /* single digit of dividend */
- register int v1,v2; /* divisor in registers */
- register long t; /* signed copy of u1u2 */
- register int qhat; /* guess at the quotient digit */
- register unsigned long q3q4; /* low two digits of quotient */
- register int shift; /* holds the shift value for normalizing */
- register int j; /* loop variable */
-
-/* printf("DLdiv(%x %x, %x)\n", quotient->high, quotient->low, divisor); */
- /*
- * Knuth's algorithm works if the dividend is smaller than the
- * divisor. We can get to that state quickly:
- */
- if (u1u2 >= divisor) {
- quotient->high = u1u2 / divisor;
- u1u2 %= divisor;
- }
- else
- quotient->high = 0;
-
- if (divisor <= MAXSHORT) {
-
- /*
- * This is the case where the divisor is contained in one
- * 'short'. It is worthwhile making this fast:
- */
- u1u2 = ASSEMBLE(u1u2, HIGHDIGIT(u3u4));
- q3q4 = u1u2 / divisor;
- u1u2 %= divisor;
- u1u2 = ASSEMBLE(u1u2, LOWDIGIT(u3u4));
- quotient->low = ASSEMBLE(q3q4, u1u2 / divisor);
- return;
- }
-
-
- /*
- * At this point the divisor is a true 'long' so we must use
- * Knuth's algorithm.
- *
- * Step D1: Normalize divisor and dividend (this makes our 'qhat'
- * guesses more accurate):
- */
- for (shift=0; !SIGNBITON(divisor); shift++, divisor <<= 1) { ; }
- shift--;
- divisor >>= 1;
-
- if ((u1u2 >> (LONGSIZE - shift)) != 0 && shift != 0)
- Abort("DLdiv: dividend too large");
- u1u2 = (u1u2 << shift) + ((shift == 0) ? 0 : u3u4 >> (LONGSIZE - shift));
- u3u4 <<= shift;
-
- /*
- * Step D2: Begin Loop through digits, dividing u1,u2,u3 by v1,v2,
- * then shifting U left by 1 digit:
- */
- v1 = HIGHDIGIT(divisor);
- v2 = LOWDIGIT(divisor);
- q3q4 = 0;
- u3 = HIGHDIGIT(u3u4);
-
- for (j=0; j < 2; j++) {
-
- /*
- * Step D3: make a guess (qhat) at the next quotient denominator:
- */
- qhat = (HIGHDIGIT(u1u2) == v1) ? MAXSHORT : u1u2 / v1;
- /*
- * At this point Knuth would have us further refine our
- * guess, since we know qhat is too big if
- *
- * v2 * qhat > ASSEMBLE(u1u2 % v, u3)
- *
- * That would make sense if u1u2 % v was easy to find, as it
- * would be in assembly language. I ignore this step, and
- * repeat step D6 if qhat is too big.
- */
-
- /*
- * Step D4: Multiply v1,v2 times qhat and subtract it from
- * u1,u2,u3:
- */
- u3 -= qhat * v2;
- /*
- * The high digit of u3 now contains the "borrow" for the
- * rest of the substraction from u1,u2.
- * Sometimes we can lose the sign bit with the above.
- * If so, we have to force the high digit negative:
- */
- t = HIGHDIGIT(u3);
- if (t > 0)
- t |= -1 << SHORTSIZE;
- t += u1u2 - qhat * v1;
-/* printf("..>divide step qhat=%x t=%x u3=%x u1u2=%x v1=%x v2=%x\n",
- qhat, t, u3, u1u2, v1, v2); */
- while (t < 0) { /* Test is Step D5. */
-
- /*
- * D6: Oops, qhat was too big. Add back in v1,v2 and
- * decrease qhat by 1:
- */
- u3 = LOWDIGIT(u3) + v2;
- t += HIGHDIGIT(u3) + v1;
- qhat--;
-/* printf("..>>qhat correction t=%x u3=%x qhat=%x\n", t, u3, qhat); */
- }
- /*
- * Step D7: shift U left one digit and loop:
- */
- u1u2 = t;
- if (HIGHDIGIT(u1u2) != 0)
- Abort("divide algorithm error");
- u1u2 = ASSEMBLE(u1u2, LOWDIGIT(u3));
- u3 = LOWDIGIT(u3u4);
- q3q4 = ASSEMBLE(q3q4, qhat);
- }
- quotient->low = q3q4;
-/* printf("DLdiv returns %x %x\n", quotient->high, quotient->low); */
-#endif /* !LONG64 */
- return;
-}
-
-/*
-:h3.DLadd() - Add Two Double Longs
-
-In this case, the doublelongs may be signed. The algorithm takes the
-piecewise sum of the high and low longs, with the possibility that the
-high should be incremented if there is a carry out of the low. How to
-tell if there is a carry? Alex Harbury suggested that if the sum of
-the lows is less than the max of the lows, there must have been a
-carry. Conversely, if there was a carry, the sum of the lows must be
-less than the max of the lows. So, the test is "if and only if".
-*/
-
-void
-DLadd(doublelong *u, /* u = u + v */
- doublelong *v)
-{
-#ifdef LONG64
-/* printf("DLadd(%lx %lx)\n", *u, *v); */
- *u = *u + *v;
-/* printf("DLadd returns %lx\n", *u); */
-#else
- register unsigned long lowmax = MAX(u->low, v->low);
-
-/* printf("DLadd(%x %x, %x %x)\n", u->high, u->low, v->high, v->low); */
- u->high += v->high;
- u->low += v->low;
- if (lowmax > u->low)
- u->high++;
-#endif
-}
-/*
-:h3.DLsub() - Subtract Two Double Longs
-
-Testing for a borrow is even easier. If the v.low is greater than
-u.low, there must be a borrow.
-*/
-
-void
-DLsub(doublelong *u, /* u = u - v */
- doublelong *v)
-{
-#ifdef LONG64
-/* printf("DLsub(%lx %lx)\n", *u, *v); */
- *u = *u - *v;
-/* printf("DLsub returns %lx\n", *u); */
-#else
-/* printf("DLsub(%x %x, %x %x)\n", u->high, u->low, v->high, v->low);*/
- u->high -= v->high;
- if (v->low > u->low)
- u->high--;
- u->low -= v->low;
-#endif
-}
-/*
-:h3.DLrightshift() - Macro to Shift Double Long Right by N
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-:h2.Fractional Pel Arithmetic
-*/
-/*
-:h3.FPmult() - Multiply Two Fractional Pel Values
-
-This funtion first calculates w = u * v to "doublelong" precision.
-It then shifts w right by FRACTBITS bits, and checks that no
-overflow will occur when the resulting value is passed back as
-a fractpel.
-*/
-
-fractpel
-FPmult(fractpel u, fractpel v)
-{
- doublelong w;
- register int negative = FALSE; /* sign flag */
-#ifdef LONG64
- register fractpel ret;
-#endif
-
- if ((u == 0) || (v == 0)) return (0);
-
-
- if (u < 0) {u = -u; negative = TRUE;}
- if (v < 0) {v = -v; negative = !negative;}
-
- if (u == TOFRACTPEL(1)) return ((negative) ? -v : v);
- if (v == TOFRACTPEL(1)) return ((negative) ? -u : u);
-
- DLmult(&w, u, v);
- DLrightshift(w, FRACTBITS);
-#ifndef LONG64
- if (w.high != 0 || SIGNBITON(w.low)) {
- w.low = TOFRACTPEL(MAXSHORT);
- }
-
- return ((negative) ? -w.low : w.low);
-#else
- if (w & 0xffffffff80000000L ) {
- ret = TOFRACTPEL(MAXSHORT);
- }
- else
- ret = (fractpel)w;
-
- return ((negative) ? -ret : ret);
-#endif
-}
-
-/*
-:h3.FPdiv() - Divide Two Fractional Pel Values
-
-These values may be signed. The function returns the quotient.
-*/
-
-fractpel
-FPdiv(fractpel dividend, fractpel divisor)
-{
- doublelong w; /* result will be built here */
- int negative = FALSE; /* flag for sign bit */
-#ifdef LONG64
- register fractpel ret;
-#endif
-
- if (dividend < 0) {
- dividend = -dividend;
- negative = TRUE;
- }
- if (divisor < 0) {
- divisor = -divisor;
- negative = !negative;
- }
-#ifndef LONG64
- w.low = dividend << FRACTBITS;
- w.high = dividend >> (LONGSIZE - FRACTBITS);
- DLdiv(&w, divisor);
- if (w.high != 0 || SIGNBITON(w.low)) {
- w.low = TOFRACTPEL(MAXSHORT);
- }
- return( (negative) ? -w.low : w.low);
-#else
- w = ((long)dividend) << FRACTBITS;
- DLdiv(&w, divisor);
- if (w & 0xffffffff80000000L ) {
- ret = TOFRACTPEL(MAXSHORT);
- }
- else
- ret = (fractpel)w;
- return( (negative) ? -ret : ret);
-#endif
-}
-
-/*
-:h3.FPstarslash() - Multiply then Divide
-
-Borrowing a chapter from the language Forth, it is useful to define
-an operator that first multiplies by one constant then divides by
-another, keeping the intermediate result in extended precision.
-*/
-
-fractpel
-FPstarslash(fractpel a, /* result = a * b / c */
- fractpel b,
- fractpel c)
-{
- doublelong w; /* result will be built here */
- int negative = FALSE;
-#ifdef LONG64
- register fractpel ret;
-#endif
-
- if (a < 0) { a = -a; negative = TRUE; }
- if (b < 0) { b = -b; negative = !negative; }
- if (c < 0) { c = -c; negative = !negative; }
-
- DLmult(&w, a, b);
- DLdiv(&w, c);
-#ifndef LONG64
- if (w.high != 0 || SIGNBITON(w.low)) {
- w.low = TOFRACTPEL(MAXSHORT);
- }
- return((negative) ? -w.low : w.low);
-#else
- if (w & 0xffffffff80000000L ) {
- ret = TOFRACTPEL(MAXSHORT);
- }
- else
- ret = (fractpel)w;
- return( (negative) ? -ret : ret);
-#endif
-}
diff --git a/nx-X11/lib/font/Type1/arith.h b/nx-X11/lib/font/Type1/arith.h
deleted file mode 100644
index 6c810b946..000000000
--- a/nx-X11/lib/font/Type1/arith.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* $Xorg: arith.h,v 1.3 2000/08/17 19:46:29 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/arith.h,v 1.4 1999/08/21 13:47:39 dawes Exp $ */
-
-/*SHARED*/
-
-#include <X11/Xmd.h> /* LONG64 */
-
-/*END SHARED*/
-/*SHARED*/
-
-#undef SHORTSIZE
-#define SHORTSIZE (sizeof(short)*8)
-#undef LONGSIZE
-#define LONGSIZE (SHORTSIZE*2)
-#undef MAXSHORT
-#define MAXSHORT ((1<<SHORTSIZE)-1)
-
-/*END SHARED*/
-/*SHARED*/
-
-#ifdef LONG64
-typedef long doublelong;
-#else
-typedef struct {
- long high;
- unsigned long low;
-} doublelong;
-#endif /* LONG64 else */
-
-/*END SHARED*/
-/*SHARED*/
-
-#ifdef LONG64
-#define DLrightshift(dl,N) ((dl) >>= (N))
-#else
-#define DLrightshift(dl,N) { \
- dl.low = (dl.low >> N) + (((unsigned long) dl.high) << (LONGSIZE - N)); \
- dl.high >>= N; \
-}
-#endif
-
-extern void DLmult ( doublelong *product, unsigned long u, unsigned long v );
-extern void DLdiv ( doublelong *quotient, unsigned long divisor );
-extern void DLadd ( doublelong *u, doublelong *v );
-extern void DLsub ( doublelong *u, doublelong *v );
-extern fractpel FPmult ( fractpel u, fractpel v );
-extern fractpel FPdiv ( fractpel dividend, fractpel divisor );
-extern fractpel FPstarslash ( fractpel a, fractpel b, fractpel c );
-
-/*END SHARED*/
diff --git a/nx-X11/lib/font/Type1/blues.h b/nx-X11/lib/font/Type1/blues.h
deleted file mode 100644
index 88602f79e..000000000
--- a/nx-X11/lib/font/Type1/blues.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* $Xorg: blues.h,v 1.3 2000/08/17 19:46:29 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- * Portions Copyright (c) 1990 Adobe Systems Incorporated.
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark or Adobe
- * not be used in advertising or publicity pertaining to distribution of
- * the software without specific, written prior permission.
- *
- * IBM, LEXMARK, AND ADOBE PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY
- * WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE
- * ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING
- * ANY DUTY TO SUPPORT OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY
- * PORTION OF THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM,
- * LEXMARK, OR ADOBE) ASSUMES THE ENTIRE COST OF ALL SERVICING, REPAIR AND
- * CORRECTION. IN NO EVENT SHALL IBM, LEXMARK, OR ADOBE BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/blues.h,v 1.3 1999/08/22 08:58:49 dawes Exp $ */
-
-
-extern psobj *GetType1CharString ( psfont *fontP, unsigned char code );
-
-#define TOPLEFT 1
-#define BOTTOMRIGHT 2
-
-#define NUMBLUEVALUES 14
-#define NUMOTHERBLUES 10
-#define NUMFAMILYBLUES 14
-#define NUMFAMILYOTHERBLUES 10
-#define NUMSTEMSNAPH 12
-#define NUMSTEMSNAPV 12
-#define NUMSTDHW 1
-#define NUMSTDVW 1
-
-#define DEFAULTBOLDSTEMWIDTH 2.0
-
-#define MAXALIGNMENTZONES ((NUMBLUEVALUES+NUMOTHERBLUES)/2)
-#define DEFAULTBLUESCALE 0.039625
-#define DEFAULTBLUESHIFT 7
-#define DEFAULTBLUEFUZZ 1
-#define DEFAULTSTDHW 0
-#define DEFAULTSTDVW 0
-#define DEFAULTFORCEBOLD FALSE
-#define DEFAULTLANGUAGEGROUP 0
-#define DEFAULTRNDSTEMUP FALSE
-#define DEFAULTLENIV 4
-#define DEFAULTEXPANSIONFACTOR 0.06
-
-/* see Type 1 Font Format book for explanations of these values */
-/* Note that we're currently doing nothing for minfeature and password. */
-struct blues_struct {
- struct blues_struct *next; /* ptr to next Blues structure in list */
- int numBlueValues; /* # of BlueValues in following array */
- int BlueValues[NUMBLUEVALUES];
- int numOtherBlues; /* # of OtherBlues values in following array */
- int OtherBlues[NUMOTHERBLUES];
- int numFamilyBlues; /* # of FamilyBlues values in following array */
- int FamilyBlues[NUMFAMILYBLUES];
- int numFamilyOtherBlues; /* # of FamilyOtherBlues values in */
- int FamilyOtherBlues[NUMFAMILYOTHERBLUES]; /* this array */
- double BlueScale;
- int BlueShift;
- int BlueFuzz;
- double StdHW;
- double StdVW;
- int numStemSnapH; /* # of StemSnapH values in following array */
- double StemSnapH[NUMSTEMSNAPH];
- int numStemSnapV; /* # of StemSnapV values in following array */
- double StemSnapV[NUMSTEMSNAPV];
- int ForceBold;
- int LanguageGroup;
- int RndStemUp;
- int lenIV;
- double ExpansionFactor;
-};
-
-/* the alignment zone structure -- somewhat similar to the stem structure */
-/* see Adobe Type1 Font Format book about the terms used in this structure */
-struct alignmentzone {
- int topzone; /* TRUE if a topzone, FALSE if a bottom zone */
- double bottomy, topy; /* interval of this alignment zone */
-};
diff --git a/nx-X11/lib/font/Type1/cidchar.c b/nx-X11/lib/font/Type1/cidchar.c
deleted file mode 100644
index 20d26650c..000000000
--- a/nx-X11/lib/font/Type1/cidchar.c
+++ /dev/null
@@ -1,621 +0,0 @@
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/cidchar.c,v 1.9tsi Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#if XFONT_CID
-#ifndef FONTMODULE
-#include <stdio.h>
-#include <string.h>
-#include <sys/stat.h>
-#ifdef USE_MMAP
-#include <sys/mman.h>
-#ifndef MAP_FAILED
-#define MAP_FAILED ((caddr_t)(-1))
-#endif
-#endif
-#else
-#include "Xmd.h" /* For INT32 declaration */
-#include "Xdefs.h" /* For Bool */
-#include "xf86_ansic.h"
-#endif
-#ifndef FONTMODULE
-#ifdef _XOPEN_SOURCE
-#include <math.h>
-#else
-#define _XOPEN_SOURCE
-#include <math.h>
-#undef _XOPEN_SOURCE
-#endif
-#endif
-#include <X11/fonts/fntfilst.h>
-#include "objects.h"
-#include "spaces.h"
-#include "range.h"
-#include "util.h"
-#include "fontfcn.h"
-#include "blues.h"
-#include "AFM.h"
-#include "t1intf.h"
-
-#define BSIZE 4096
-
-extern cidfont *CIDFontP;
-extern psfont *FDArrayP;
-extern psfont *FontP;
-
-static unsigned char sd[] = "StartData";
-
-CharInfoPtr
-CIDGetGlyphInfo(FontPtr pFont, unsigned int cidcode, CharInfoPtr pci, int *rc)
-{
- CharInfoPtr cp = NULL;
-#ifdef USE_MMAP
- int fd;
- unsigned char *buf;
- long total_len = 0;
-#else
- FILE *fp;
- unsigned char buf[BSIZE];
- unsigned int count = 0;
-#endif
- cidglyphs *cid;
- unsigned char *p1 = NULL;
-#ifndef USE_MMAP
- unsigned char *p2;
-#endif
- register int i = 0, j;
- long byteoffset;
- int FDindex, FDBytes, GDBytes, SDBytes, SubrCount, CIDMapOffset, len;
- psobj *arrayP;
- psobj charstring;
- long *subroffsets = NULL, cstringoffset, nextcstringoffset;
- struct blues_struct *blues;
-
- cid = (cidglyphs *)pFont->fontPrivate;
-
-#ifdef USE_MMAP
- if (!cid->CIDdata) {
- if (!(fd = open(cid->CIDFontName, O_RDONLY, 0))) {
- *rc = BadFontName;
- return(cp);
- }
- cid->CIDsize = lseek(fd, 0, SEEK_END);
- cid->CIDdata = (unsigned char *)
- mmap(0, (size_t)cid->CIDsize, PROT_READ, MAP_SHARED, fd, 0);
- close(fd);
- if (cid->CIDdata == (unsigned char *)MAP_FAILED) {
- *rc = AllocError;
- cid->CIDdata = NULL;
- return (cp);
- }
- }
-#else
- if (!(fp = fopen(cid->CIDFontName,"rb"))) {
- *rc = BadFontName;
- return(cp);
- }
-#endif
-
-#ifdef USE_MMAP
- if (cid->dataoffset == 0) {
- if ((p1 = (unsigned char *)strstr((char *)cid->CIDdata, (char *)sd))
- != NULL) {
- cid->dataoffset = (p1 - cid->CIDdata) + strlen((char *)sd);
- }
- else {
- *rc = BadFontFormat;
- return(cp);
- }
- }
-#else /* USE_MMAP */
- if (cid->dataoffset == 0) {
- p2 = sd;
-
- /* find "StartData" */
- while (*p2) {
- cid->dataoffset += count;
- if ((count = fread(buf, 1, BSIZE, fp)) == 0)
- break;
- p1 = buf;
- for (i=0; i < count && *p2; i++) {
- if (*p1 == *p2)
- p2++;
- else {
- p2 = sd;
- if (*p1 == *p2)
- p2++;
- }
- p1++;
- }
- }
-
- /* if "StartData" not found, or end of file */
- if (*p2 || count == 0) {
- *rc = BadFontFormat;
- fclose(fp);
- return(cp);
- }
-
- if (i >= count) {
- cid->dataoffset += count;
- count = fread(buf, 1, BSIZE, fp);
- p1 = buf;
- } else {
- cid->dataoffset += p1 - buf;
- count = count - (p1 - buf);
- }
- } else {
- if (fseek(fp, cid->dataoffset, SEEK_SET)) {
- *rc = BadFontFormat;
- fclose(fp);
- return(cp);
- }
- if ((count = fread(buf, 1, BSIZE, fp)) == 0) {
- *rc = BadFontFormat;
- fclose(fp);
- return(cp);
- }
- p1 = buf;
- }
-
- /* if "StartData" not found, or "Binary" data and the next character */
- /* is not the space character (0x20) */
-
- if (count == 0 || (CIDFontP->binarydata && (*p1 != ' '))) {
- *rc = BadFontFormat;
- fclose(fp);
- return(cp);
- }
-#endif /* USE_MMAP */
-
- FDBytes = CIDFontP->CIDfontInfoP[CIDFDBYTES].value.data.integer;
- GDBytes = CIDFontP->CIDfontInfoP[CIDGDBYTES].value.data.integer;
- CIDMapOffset = CIDFontP->CIDfontInfoP[CIDMAPOFFSET].value.data.integer;
- byteoffset = cid->dataoffset + 1 + CIDMapOffset +
- cidcode * (FDBytes + GDBytes);
-#ifdef USE_MMAP
- buf = &cid->CIDdata[byteoffset];
-#else
- if (fseek(fp, byteoffset, SEEK_SET)) {
- *rc = BadFontFormat;
- fclose(fp);
- return(cp);
- }
- if ((count = fread(buf, 1, BSIZE, fp)) < 2*(FDBytes + GDBytes)) {
- *rc = BadFontFormat;
- fclose(fp);
- return(cp);
- }
-#endif
-
- /* if FDBytes is equal to 0, the CIDMap contains no FD indices, and the */
- /* FD index of 0 is assumed. */
- if (FDBytes == 0)
- FDindex = 0;
- else {
- FDindex = 0;
- for (i = 0; i < FDBytes; i++)
- FDindex += (unsigned char)buf[i] << (8 * (FDBytes - 1 - i));
- }
-
- if (FDindex >= CIDFontP->CIDfontInfoP[CIDFDARRAY].value.len) {
- *rc = BadFontFormat;
-#ifndef USE_MMAP
- fclose(fp);
-#endif
- return(cp);
- }
-
- cstringoffset = 0;
- for (i = 0; i < GDBytes; i++)
- cstringoffset += (unsigned char)buf[FDBytes + i] <<
- (8 * (GDBytes - 1 - i));
-
- nextcstringoffset = 0;
- for (i = 0; i < GDBytes; i++)
- nextcstringoffset += (unsigned char)buf[2*FDBytes + GDBytes + i] <<
- (8 * (GDBytes - 1 - i));
-
- len = nextcstringoffset - cstringoffset;
-
- if (len <= 0) { /* empty interval, missing glyph */
- *rc = BadFontFormat;
-#ifndef USE_MMAP
- fclose(fp);
-#endif
- return(cp);
- }
-
- FontP = &FDArrayP[FDindex];
-
- charstring.type = OBJ_INTEGER;
- charstring.len = len;
-
-#ifndef USE_MMAP
- if (!(charstring.data.stringP = (unsigned char *)xalloc(len))) {
- *rc = AllocError;
- fclose(fp);
- return(cp);
- }
-#endif
-
- byteoffset = cid->dataoffset + 1 + cstringoffset;
-
-#ifdef USE_MMAP
- charstring.data.stringP = &cid->CIDdata[byteoffset];
-#else
- if (fseek(fp, byteoffset, SEEK_SET)) {
- *rc = BadFontFormat;
- xfree(charstring.data.stringP);
- fclose(fp);
- return(cp);
- }
-
- if ((count = fread(charstring.data.stringP, 1, len, fp)) != len) {
- *rc = BadFontFormat;
- xfree(charstring.data.stringP);
- fclose(fp);
- return(cp);
- }
-#endif
-
- if (FontP->Subrs.data.arrayP == NULL) {
- /* get subroutine data */
- byteoffset = cid->dataoffset + 1 +
- FDArrayP[FDindex].Private[CIDT1SUBMAPOFF].value.data.integer;
-
- SDBytes = FDArrayP[FDindex].Private[CIDT1SDBYTES].value.data.integer;
-
- SubrCount = FDArrayP[FDindex].Private[CIDT1SUBRCNT].value.data.integer;
-#ifdef USE_MMAP
- buf = &cid->CIDdata[byteoffset];
-#else
- if (fseek(fp, byteoffset, SEEK_SET)) {
- *rc = BadFontFormat;
- fclose(fp);
- return(cp);
- }
-
- if ((count = fread(buf, 1, BSIZE, fp)) < SDBytes * (SubrCount + 1)) {
- *rc = BadFontFormat;
- fclose(fp);
- return(cp);
- }
-#endif
-
- arrayP = (psobj *)vm_alloc(SubrCount*sizeof(psobj));
- if (!arrayP) {
- *rc = AllocError;
-#ifndef USE_MMAP
- fclose(fp);
-#endif
- return(cp);
- }
-
- if (!(subroffsets = (long *)xalloc((SubrCount + 1)*sizeof(long)))) {
- *rc = AllocError;
-#ifndef USE_MMAP
- fclose(fp);
-#endif
- return(cp);
- }
-
- for (i = 0; i <= SubrCount; i++) {
- subroffsets[i] = 0;
- for (j = 0; j < SDBytes; j++)
- subroffsets[i] += (unsigned char)buf[i * SDBytes + j] <<
- (8 * (SDBytes - 1 - j));
- }
-
- byteoffset = cid->dataoffset + 1 + subroffsets[0];
-
- /* get subroutine info */
-#ifndef USE_MMAP
- if (fseek(fp, byteoffset, SEEK_SET)) {
- *rc = BadFontFormat;
- xfree(subroffsets);
- fclose(fp);
- return(cp);
- }
-#else
- total_len = byteoffset;
-#endif
- for (i = 0; i < SubrCount; i++) {
- len = subroffsets[i + 1] - subroffsets[i];
-#ifndef USE_MMAP
- arrayP[i].data.valueP = vm_alloc(len);
- if (!arrayP[i].data.valueP) {
- *rc = AllocError;
- xfree(subroffsets);
- fclose(fp);
- return(cp);
- }
-#endif
- arrayP[i].len = len;
-#ifdef USE_MMAP
- arrayP[i].data.valueP = (char *)&cid->CIDdata[total_len];
- total_len += len;
-#else
- if ((count = fread(arrayP[i].data.valueP, 1, len, fp)) != len) {
- *rc = BadFontFormat;
- xfree(subroffsets);
- fclose(fp);
- return(cp);
- }
-#endif
- }
-
- FontP->Subrs.len = SubrCount;
- FontP->Subrs.data.arrayP = arrayP;
- xfree(subroffsets);
- }
-
- if (FontP->BluesP == NULL) {
- blues = (struct blues_struct *) vm_alloc(sizeof(struct blues_struct));
- if (!blues) {
- *rc = AllocError;
-#ifndef USE_MMAP
- xfree(subroffsets);
- fclose(fp);
-#endif
- return(cp);
- }
- bzero(blues, sizeof(struct blues_struct));
- blues->numBlueValues =
- FDArrayP[FDindex].Private[CIDT1BLUEVALUES].value.len;
- for (i = 0; i < blues->numBlueValues; i++)
- blues->BlueValues[i] =
- FDArrayP[FDindex].Private[CIDT1BLUEVALUES].value.data.arrayP[i].data.integer;
- blues->numOtherBlues =
- FDArrayP[FDindex].Private[CIDT1OTHERBLUES].value.len;
- for (i = 0; i < blues->numOtherBlues; i++)
- blues->OtherBlues[i] =
- FDArrayP[FDindex].Private[CIDT1OTHERBLUES].value.data.arrayP[i].data.integer;
- blues->numFamilyBlues =
- FDArrayP[FDindex].Private[CIDT1FAMBLUES].value.len;
- for (i = 0; i < blues->numFamilyBlues; i++)
- blues->FamilyBlues[i] =
- FDArrayP[FDindex].Private[CIDT1FAMBLUES].value.data.arrayP[i].data.integer;
- blues->numFamilyOtherBlues =
- FDArrayP[FDindex].Private[CIDT1FAMOTHERBLUES].value.len;
- for (i = 0; i < blues->numFamilyOtherBlues; i++)
- blues->FamilyOtherBlues[i] =
- FDArrayP[FDindex].Private[CIDT1FAMOTHERBLUES].value.data.arrayP[i].data.integer;
- blues->BlueScale = FDArrayP[FDindex].Private[CIDT1BLUESCALE].value.data.real;
- blues->BlueShift = FDArrayP[FDindex].Private[CIDT1BLUESHIFT].value.data.integer;
- blues->BlueFuzz = FDArrayP[FDindex].Private[CIDT1BLUEFUZZ].value.data.integer;
- blues->StdHW = (double)FDArrayP[FDindex].Private[CIDT1STDHW].value.data.arrayP[0].data.integer;
- blues->StdVW = (double)FDArrayP[FDindex].Private[CIDT1STDVW].value.data.arrayP[0].data.integer;
-
- blues->numStemSnapH =
- FDArrayP[FDindex].Private[CIDT1STEMSNAPH].value.len;
- for (i = 0; i < blues->numStemSnapH; i++)
- blues->StemSnapH[i] =
- FDArrayP[FDindex].Private[CIDT1STEMSNAPH].value.data.arrayP[i].data.integer;
- blues->numStemSnapV =
- FDArrayP[FDindex].Private[CIDT1STEMSNAPV].value.len;
- for (i = 0; i < blues->numStemSnapV; i++)
- blues->StemSnapV[i] =
- FDArrayP[FDindex].Private[CIDT1STEMSNAPV].value.data.arrayP[i].data.integer;
- blues->ForceBold =
- FDArrayP[FDindex].Private[CIDT1FORCEBOLD].value.data.boolean;
-
- blues->LanguageGroup =
- FDArrayP[FDindex].Private[CIDT1LANGGROUP].value.data.integer;
-
- blues->RndStemUp =
- FDArrayP[FDindex].Private[CIDT1RNDSTEMUP].value.data.boolean;
-
- blues->lenIV =
- FDArrayP[FDindex].Private[CIDT1LENIV].value.data.integer;
-
- blues->ExpansionFactor =
- FDArrayP[FDindex].Private[CIDT1EXPFACTOR].value.data.real;
-
- FontP->BluesP = blues;
- }
-
- cp = CIDRenderGlyph(pFont, &charstring, &FontP->Subrs, FontP->BluesP, pci, rc);
-
-#ifndef USE_MMAP
- xfree(charstring.data.stringP);
-
- fclose(fp);
-#endif
- return(cp);
-}
-
-static int
-node_compare(const void *node1, const void *node2)
-{
- return (((Metrics *)node1)->code - ((Metrics *)node2)->code);
-}
-
-static CharInfoRec *
-CIDGetCharMetrics(FontPtr pFont, FontInfo *fi, unsigned int charcode, double sxmult)
-{
- CharInfoPtr cp;
- Metrics *p, node;
- unsigned int cidcode;
-
- cidcode = node.code = getCID(pFont, charcode);
- if ((cidcode < fi->nChars) && (cidcode == fi->metrics[cidcode].code))
- p = &fi->metrics[cidcode];
- else
- p = (Metrics *)bsearch(&node, fi->metrics, fi->nChars, sizeof(Metrics), node_compare);
-
- if (!p)
- p = &fi->metrics[0];
-
- if (!(cp = (CharInfoRec *)Xalloc(sizeof(CharInfoRec))))
- return NULL;
- bzero(cp, sizeof(CharInfoRec));
-
- /* indicate that character bitmap is not defined */
- cp->bits = (char *)CID_BITMAP_UNDEFINED;
-
-
- /* get metric data for this CID code from the CID AFM file */
- cp->metrics.leftSideBearing =
- floor(p->charBBox.llx / sxmult + 0.5);
- cp->metrics.rightSideBearing =
- floor(p->charBBox.urx / sxmult + 0.5);
- cp->metrics.characterWidth = floor(p->wx / sxmult + 0.5);
- cp->metrics.ascent = floor(p->charBBox.ury / sxmult + 0.5);
- cp->metrics.descent = -floor(p->charBBox.lly / sxmult + 0.5);
-
- cp->metrics.attributes = p->wx;
-
- return cp;
-}
-
-int
-CIDGetAFM(FontPtr pFont, unsigned long count, unsigned char *chars, FontEncoding charEncoding, unsigned long *glyphCount, CharInfoPtr *glyphs, char *cidafmfile)
-{
- FILE *fp;
- FontInfo *fi = NULL;
- cidglyphs *cid;
- CharInfoPtr *glyphsBase;
- register unsigned int c;
-
- register CharInfoPtr pci;
- CharInfoPtr pDefault;
- unsigned int firstCol, code, char_row, char_col;
- double sxmult;
-
- cid = (cidglyphs *)pFont->fontPrivate;
-
- if (cid->AFMinfo == NULL) {
- if (!(fp = fopen(cidafmfile, "rb")))
- return(BadFontName);
-
- if (CIDAFM(fp, &fi) != 0) {
- fprintf(stderr,
- "There is something wrong with Adobe Font Metric file %s.\n",
- cidafmfile);
- fclose(fp);
- return(BadFontName);
- }
- fclose(fp);
- cid->AFMinfo = fi;
- }
- fi = cid->AFMinfo;
-
- firstCol = pFont->info.firstCol;
- pDefault = cid->pDefault;
- glyphsBase = glyphs;
-
- /* multiplier for computation of raw values */
- sxmult = hypot(cid->pixel_matrix[0], cid->pixel_matrix[1]);
- if (sxmult > EPS) sxmult = 1000.0 / sxmult;
- if (sxmult == 0.0) return(0);
-
- switch (charEncoding) {
-
-#define EXIST(pci) \
- ((pci)->metrics.attributes || \
- (pci)->metrics.ascent != -(pci)->metrics.descent || \
- (pci)->metrics.leftSideBearing != (pci)->metrics.rightSideBearing)
-
- case Linear8Bit:
- case TwoD8Bit:
- if (pFont->info.firstRow > 0)
- break;
- while (count--) {
- c = (*chars++);
- if (c >= firstCol && c <= pFont->info.lastCol) {
- code = c - firstCol;
- if (!(pci = (CharInfoRec *)cid->glyphs[code]))
- pci = CIDGetCharMetrics(pFont, fi, c, sxmult);
- if (pci && EXIST(pci)) {
- *glyphs++ = pci;
- cid->glyphs[code] = pci;
- }
- } else if (pDefault)
- *glyphs++ = pDefault;
- }
- break;
- case Linear16Bit:
- while (count--) {
- char_row = *chars++;
- char_col = *chars++;
- c = char_row << 8;
- c = (c | char_col);
- if (pFont->info.firstRow <= char_row && char_row <=
- pFont->info.lastRow && pFont->info.firstCol <= char_col &&
- char_col <= pFont->info.lastCol) {
- code = pFont->info.lastCol - pFont->info.firstCol + 1;
- char_row = char_row - pFont->info.firstRow;
- char_col = char_col - pFont->info.firstCol;
- code = char_row * code + char_col;
- if (!(pci = (CharInfoRec *)cid->glyphs[code]))
- pci = CIDGetCharMetrics(pFont, fi, c, sxmult);
- if (pci && EXIST(pci)) {
- *glyphs++ = pci;
- cid->glyphs[code] = pci;
- } else if (pDefault) {
- *glyphs++ = pDefault;
- cid->glyphs[code] = pDefault;
- }
- } else if (pDefault)
- *glyphs++ = pDefault;
- }
- break;
-
- case TwoD16Bit:
- while (count--) {
- char_row = (*chars++);
- char_col = (*chars++);
- c = char_row << 8;
- c = (c | char_col);
- if (pFont->info.firstRow <= char_row && char_row <=
- pFont->info.lastRow && pFont->info.firstCol <= char_col &&
- char_col <= pFont->info.lastCol) {
- code = pFont->info.lastCol - pFont->info.firstCol + 1;
- char_row = char_row - pFont->info.firstRow;
- char_col = char_col - pFont->info.firstCol;
- code = char_row * code + char_col;
- if (!(pci = (CharInfoRec *)cid->glyphs[code]))
- pci = CIDGetCharMetrics(pFont, fi, c, sxmult);
- if (pci && EXIST(pci)) {
- *glyphs++ = pci;
- cid->glyphs[code] = pci;
- } else if (pDefault) {
- *glyphs++ = pDefault;
- cid->glyphs[code] = pDefault;
- }
- } else if (pDefault)
- *glyphs++ = pDefault;
- }
- break;
- }
- *glyphCount = glyphs - glyphsBase;
-
-#undef EXIST
-
- return Successful;
-
-}
-#endif
diff --git a/nx-X11/lib/font/Type1/cluts.h b/nx-X11/lib/font/Type1/cluts.h
deleted file mode 100644
index 67d930324..000000000
--- a/nx-X11/lib/font/Type1/cluts.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* $Xorg: cluts.h,v 1.3 2000/08/17 19:46:29 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* STUB */
-
-#define KillCLUT(T)
-#define CopyCLUT(T) T
-#define UniqueCLUT(T)
-
diff --git a/nx-X11/lib/font/Type1/curves.c b/nx-X11/lib/font/Type1/curves.c
deleted file mode 100644
index 9d0c3f8cc..000000000
--- a/nx-X11/lib/font/Type1/curves.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/* $Xorg: curves.c,v 1.3 2000/08/17 19:46:29 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991 */
-/* All Rights Reserved */
-
-/* License to use, copy, modify, and distribute this software */
-/* and its documentation for any purpose and without fee is */
-/* hereby granted, provided that licensee provides a license to */
-/* IBM, Corp. to use, copy, modify, and distribute derivative */
-/* works and their documentation for any purpose and without */
-/* fee, that the above copyright notice appear in all copies */
-/* and that both that copyright notice and this permission */
-/* notice appear in supporting documentation, and that the name */
-/* of IBM not be used in advertising or publicity pertaining to */
-/* distribution of the software without specific, written prior */
-/* permission. */
-
-/* IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES */
-/* OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT */
-/* LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, */
-/* FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF */
-/* THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND */
-/* PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT */
-/* OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF */
-/* THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES */
-/* THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN */
-/* NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR */
-/* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING */
-/* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF */
-/* CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT */
-/* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS */
-/* SOFTWARE. */
-/* $XFree86: xc/lib/font/Type1/curves.c,v 1.7 2001/08/27 19:49:52 dawes Exp $ */
-
-/*
-:h1.CURVES Module - Stepping Beziers
-
-This module is responsible for "rasterizing"
-third order curves. That is, it changes the high level curve
-specification into a list of pels that that curve travels
-through.
-
-:h3.Include Files
-
-Include files needed:
-*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef FONTMODULE
-# include "os.h"
-#endif
-#include "objects.h"
-#include "spaces.h"
-#include "paths.h"
-#include "regions.h"
-#include "curves.h"
-#include "lines.h"
-#include "arith.h"
-
-
-/*
-:h3.Functions Provided to Other Modules
-
-External entry points:
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-Note that "stepping" and "flattening" are so similiar that they use the
-same routine. When the "region" parameter is NULL, that is a flag that
-we are flattening instead of stepping.
-*/
-/*
-:h2.Bezier Third Order Curves
-*/
-/*
-:h3.The "bezierinfo" Structure
-
-This structure is used to store information used when we subdivide
-Bezier curves.
-*/
-
-struct bezierinfo {
- struct region *region; /* the region being built or NULL */
- struct fractpoint last; /* not used yet; maybe could save some work */
- struct fractpoint origin; /* the origin of the bezier */
-} ;
-
-/*
- Checking for termination of the subdivision process:
- This is the stupidest test in the world, just check if the coordinatewise
- distance from an end control point to the next control point is less than
- one half pel. If so, we must be done.
- This returns 1 if the subdivision is terminated and 0 if you still need
- to subdivide.
-*/
-
-static int
-BezierTerminationTest(fractpel xa, fractpel ya,
- fractpel xb, fractpel yb,
- fractpel xc, fractpel yc,
- fractpel xd, fractpel yd)
-{
- fractpel dmax;
- dmax = ABS(xa - xb);
- dmax = MAX(dmax,ABS(ya - yb));
- dmax = MAX(dmax,ABS(xd - xc));
- dmax = MAX(dmax,ABS(yd - yc));
- if(dmax > FPHALF)
- return(0); /* not done yet */
- else
- return(1); /* done */
-}
-
-/*
-:h3.StepBezierRecurse() - The Recursive Logic in StepBezier()
-
-The recursion involves dividing the control polygon into two smaller
-control polygons by finding the midpoints of the lines. This idea is
-described in any graphics text book and its simplicity is what caused
-Bezier to define his curves as he did. If the input region 'R' is NULL,
-the result is a path that is the 'flattened' curve; otherwise StepBezier
-returns nothing special.
-*/
-static struct segment *
-StepBezierRecurse(struct bezierinfo *I, /* Region under construction or NULL */
- fractpel xA, fractpel yA, /* A control point */
- fractpel xB, fractpel yB, /* B control point */
- fractpel xC, fractpel yC, /* C control point */
- fractpel xD, fractpel yD) /* D control point */
-{
- if (BezierTerminationTest(xA,yA,xB,yB,xC,yC,xD,yD))
- {
- if (I->region == NULL)
- return(PathSegment(LINETYPE, xD - xA, yD - yA));
- else
- StepLine(I->region, I->origin.x + xA, I->origin.y + yA,
- I->origin.x + xD, I->origin.y + yD);
- }
- else
- {
- fractpel xAB,yAB;
- fractpel xBC,yBC;
- fractpel xCD,yCD;
- fractpel xABC,yABC;
- fractpel xBCD,yBCD;
- fractpel xABCD,yABCD;
-
- xAB = xA + xB; yAB = yA + yB;
- xBC = xB + xC; yBC = yB + yC;
- xCD = xC + xD; yCD = yC + yD;
-
- xABC = xAB + xBC; yABC = yAB + yBC;
- xBCD = xBC + xCD; yBCD = yBC + yCD;
-
- xABCD = xABC + xBCD; yABCD = yABC + yBCD;
-
- xAB >>= 1; yAB >>= 1;
- xBC >>= 1; yBC >>= 1;
- xCD >>= 1; yCD >>= 1;
- xABC >>= 2; yABC >>= 2;
- xBCD >>= 2; yBCD >>= 2;
- xABCD >>= 3; yABCD >>= 3;
-
- if (I->region == NULL)
- {
- return( Join(
- StepBezierRecurse(I, xA, yA, xAB, yAB, xABC, yABC, xABCD, yABCD),
- StepBezierRecurse(I, xABCD, yABCD, xBCD, yBCD, xCD, yCD, xD, yD)
- )
- );
- }
- else
- {
- StepBezierRecurse(I, xA, yA, xAB, yAB, xABC, yABC, xABCD, yABCD);
- StepBezierRecurse(I, xABCD, yABCD, xBCD, yBCD, xCD, yCD, xD, yD);
- }
- }
- return NULL;
- /*NOTREACHED*/
-}
-
-/*
-:h3.TOOBIG() - Macro to Test if a Coordinate is Too Big to Bezier SubDivide Normally
-
-Intermediate values in the Bezier subdivision are 8 times bigger than
-the starting values. If this overflows, a 'long', we are in trouble:
-*/
-
-#undef BITS
-#define BITS (sizeof(long)*8)
-#define HIGHTEST(p) (((p)>>(BITS-4)) != 0) /* includes sign bit */
-#define TOOBIG(xy) ((xy < 0) ? HIGHTEST(-xy) : HIGHTEST(xy))
-
-/*
-:h3.StepBezier() - Produce Run Ends for a Bezier Curve
-
-This is the entry point called from outside the module.
-*/
-
-struct segment *
-StepBezier(struct region *R, /* Region under construction or NULL */
- fractpel xA, fractpel yA, /* A control point */
- fractpel xB, fractpel yB, /* B control point */
- fractpel xC, fractpel yC, /* C control point */
- fractpel xD, fractpel yD) /* D control point */
-{
- struct bezierinfo Info;
-
- Info.region = R;
- Info.origin.x = xA;
- Info.origin.y = yA;
-
- xB -= xA;
- xC -= xA;
- xD -= xA;
- yB -= yA;
- yC -= yA;
- yD -= yA;
-
- if ( TOOBIG(xB) || TOOBIG(yB) || TOOBIG(xC) || TOOBIG(yC)
- || TOOBIG(xD) || TOOBIG(yD) )
- Abort("Beziers this big not yet supported");
-
- return(StepBezierRecurse(&Info,
- (fractpel) 0, (fractpel) 0, xB, yB, xC, yC, xD, yD));
-}
-
diff --git a/nx-X11/lib/font/Type1/curves.h b/nx-X11/lib/font/Type1/curves.h
deleted file mode 100644
index ca54bad62..000000000
--- a/nx-X11/lib/font/Type1/curves.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* $Xorg: curves.h,v 1.3 2000/08/17 19:46:29 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/curves.h,v 1.3 1999/08/22 08:58:50 dawes Exp $ */
-
-/*SHARED*/
-
-#define StepConic(R,xA,yA,xB,yB,xC,yC,r) t1_StepConic(R,xA,yA,xB,yB,xC,yC,r)
-#define StepBezier(R,xA,yA,xB,yB,xC,yC,xD,yD) t1_StepBezier(R,xA,yA,xB,yB,xC,yC,xD,yD)
-
-#define FlattenConic(xM,yM,xC,yC,r) t1_StepConic(NULL,(fractpel)0,(fractpel)0,xM,yM,xC,yC,r)
-#define FlattenBezier(xB,yB,xC,yC,xD,yD) t1_StepBezier(NULL,(fractpel)0,(fractpel)0,xB,yB,xC,yC,xD,yD)
-
-#if 0
-struct segment *t1_StepConic();
-#endif
-extern struct segment *t1_StepBezier ( struct region *R, fractpel xA, fractpel yA, fractpel xB, fractpel yB, fractpel xC, fractpel yC, fractpel xD, fractpel yD );
-
-/*END SHARED*/
diff --git a/nx-X11/lib/font/Type1/digit.h b/nx-X11/lib/font/Type1/digit.h
deleted file mode 100644
index c69380954..000000000
--- a/nx-X11/lib/font/Type1/digit.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* $Xorg: digit.h,v 1.3 2000/08/17 19:46:29 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* -------------------------------------- */
-/* --- MACHINE GENERATED, DO NOT EDIT --- */
-/* -------------------------------------- */
-
-#ifndef DIGIT
-#define DIGIT 1
-
-/*
- * Digit Value Table --
- *
- * The entries in the Digit Value Table map character
- * codes in the set {0-9,a-z,A-Z} to their numeric
- * values as part of numbers of radix 2-36.
- *
- */
-unsigned char digit_value[256] = {
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,
- 0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,
- 0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
-};
-
-#endif
diff --git a/nx-X11/lib/font/Type1/fontfcn.c b/nx-X11/lib/font/Type1/fontfcn.c
deleted file mode 100644
index 9b48b9834..000000000
--- a/nx-X11/lib/font/Type1/fontfcn.c
+++ /dev/null
@@ -1,709 +0,0 @@
-/* $Xorg: fontfcn.c,v 1.4 2000/08/17 19:46:30 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* Author: Katherine A. Hitchcock IBM Almaden Research Laboratory */
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/fontfcn.c,v 1.10 2001/04/05 17:42:27 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#ifndef FONTMODULE
-#include <stdio.h>
-#include <string.h>
-#else
-#include "Xmd.h" /* For INT32 declaration */
-#include "Xdefs.h" /* For Bool */
-#include "xf86_ansic.h"
-#endif
-#include "t1imager.h"
-#include "util.h"
-#if XFONT_CID
-#include "range.h"
-#include <X11/Xdefs.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-#include "fontfcn.h"
-
-extern struct segment *Type1Char ( char *env, XYspace S,
- psobj *charstrP, psobj *subrsP,
- psobj *osubrsP,
- struct blues_struct *bluesP, int *modeP );
-
-#if XFONT_CID
-extern struct xobject *CIDChar ( char *env, XYspace S,
- psobj *charstrP, psobj *subrsP,
- psobj *osubrsP,
- struct blues_struct *bluesP, int *modeP );
-static boolean initCIDFont( int cnt );
-#endif
-
-/***================================================================***/
-/* GLOBALS */
-/***================================================================***/
-char CurFontName[120];
-char *CurFontEnv;
-char *vm_base = NULL;
-psfont *FontP = NULL;
-psfont TheCurrentFont;
-#if XFONT_CID
-char CurCIDFontName[CID_PATH_MAX];
-char CurCMapName[CID_PATH_MAX];
-cidfont *CIDFontP = NULL;
-cmapres *CMapP = NULL;
-cidfont TheCurrentCIDFont;
-cmapres TheCurrentCMap;
-psfont *FDArrayP = NULL;
-int FDArrayIndex = 0;
-#endif
-
-/***================================================================***/
-/* SearchDict - look for name */
-/* - compare for match on len and string */
-/* return 0 - not found. */
-/* return n - nth element in dictionary. */
-/***================================================================***/
-int
-SearchDictName(psdict *dictP, psobj *keyP)
-{
- int i,n;
-
-
- n = dictP[0].key.len;
- for (i=1;i<=n;i++) { /* scan the intire dictionary */
- if (
- (dictP[i].key.len == keyP->len )
- &&
- (strncmp(dictP[i].key.data.valueP,
- keyP->data.valueP,
- keyP->len) == 0
- )
- ) return(i);
- }
- return(0);
-}
-
-#if XFONT_CID
-static boolean
-initCIDFont(int cnt)
-{
- if (!(vm_init(cnt))) return(FALSE);
- vm_base = vm_next_byte();
- strcpy(CurCIDFontName, ""); /* initialize to none */
- strcpy(CurCMapName, ""); /* initialize to none */
- /* cause a font data reset on the next Type 1 font */
- strcpy(CurFontName, ""); /* initialize to none */
- CIDFontP = &TheCurrentCIDFont;
- CMapP = &TheCurrentCMap;
- CIDFontP->vm_start = vm_next_byte();
- CIDFontP->spacerangecnt = 0;
- CIDFontP->notdefrangecnt = 0;
- CIDFontP->cidrangecnt = 0;
- CIDFontP->spacerangeP = NULL;
- CIDFontP->notdefrangeP = NULL;
- CIDFontP->cidrangeP = NULL;
- CIDFontP->CIDFontFileName.len = 0;
- CIDFontP->CIDFontFileName.data.valueP = CurCIDFontName;
- CMapP->CMapFileName.len = 0;
- CMapP->CMapFileName.data.valueP = CurCMapName;
- CMapP->firstRow = 0xFFFF;
- CMapP->firstCol = 0xFFFF;
- CMapP->lastRow = 0;
- CMapP->lastCol = 0;
- return(TRUE);
-}
-
-/***================================================================***/
-boolean
-initCIDType1Font(void)
-{
- strcpy(CurFontName, ""); /* initialize to none */
- FontP = &FDArrayP[FDArrayIndex];
- FontP->vm_start = vm_next_byte();
- FontP->FontFileName.len = 0;
- FontP->FontFileName.data.valueP = CurFontName;
- FontP->Subrs.len = 0;
- FontP->Subrs.data.stringP = NULL;
- FontP->CharStringsP = NULL;
- FontP->Private = NULL;
- FontP->fontInfoP = NULL;
- FontP->BluesP = NULL;
- return(TRUE);
-}
-#endif
-
-boolean
-initFont(int cnt)
-{
-
- if (!(vm_init(cnt))) return(FALSE);
- vm_base = vm_next_byte();
- if (!(Init_BuiltInEncoding())) return(FALSE);
- strcpy(CurFontName, ""); /* iniitialize to none */
-#if XFONT_CID
- /* cause a font data reset on the next CID-keyed font */
- strcpy(CurCIDFontName, ""); /* initialize to none */
-#endif
- FontP = &TheCurrentFont;
- FontP->vm_start = vm_next_byte();
- FontP->FontFileName.len = 0;
- FontP->FontFileName.data.valueP = CurFontName;
- return(TRUE);
-}
-/***================================================================***/
-#if XFONT_CID
-static void
-resetCIDFont(char *cidfontname, char *cmapfile)
-{
-
- vm_next = CIDFontP->vm_start;
- vm_free = vm_size - ( vm_next - vm_base);
- CIDFontP->spacerangecnt = 0;
- CIDFontP->notdefrangecnt = 0;
- CIDFontP->cidrangecnt = 0;
- CIDFontP->spacerangeP = NULL;
- CIDFontP->notdefrangeP = NULL;
- CIDFontP->cidrangeP = NULL;
- CIDFontP->CIDfontInfoP = NULL;
- /* This will load the font into the FontP */
- strcpy(CurCIDFontName,cidfontname);
- strcpy(CurCMapName,cmapfile);
- CIDFontP->CIDFontFileName.len = strlen(CurCIDFontName);
- CIDFontP->CIDFontFileName.data.valueP = CurCIDFontName;
- CMapP->CMapFileName.len = strlen(CurCMapName);
- CMapP->CMapFileName.data.valueP = CurCMapName;
- CMapP->firstRow = 0xFFFF;
- CMapP->firstCol = 0xFFFF;
- CMapP->lastRow = 0;
- CMapP->lastCol = 0;
-}
-
-static void
-resetCIDType1Font(void)
-{
-
- vm_next = FontP->vm_start;
- vm_free = vm_size - ( vm_next - vm_base);
- FontP->Subrs.len = 0;
- FontP->Subrs.data.stringP = NULL;
- FontP->CharStringsP = NULL;
- FontP->Private = NULL;
- FontP->fontInfoP = NULL;
- FontP->BluesP = NULL;
- /* This will load the font into the FontP */
- FontP->FontFileName.len = strlen(CurFontName);
- FontP->FontFileName.data.valueP = CurFontName;
-}
-#endif
-
-static void
-resetFont(char *env)
-{
-
- vm_next = FontP->vm_start;
- vm_free = vm_size - ( vm_next - vm_base);
- FontP->Subrs.len = 0;
- FontP->Subrs.data.stringP = NULL;
- FontP->CharStringsP = NULL;
- FontP->Private = NULL;
- FontP->fontInfoP = NULL;
- FontP->BluesP = NULL;
- /* This will load the font into the FontP */
- strcpy(CurFontName,env);
- FontP->FontFileName.len = strlen(CurFontName);
- FontP->FontFileName.data.valueP = CurFontName;
-
-}
-
-#if XFONT_CID
-/***================================================================***/
-int
-readCIDFont(char *cidfontname, char *cmapfile)
-{
- int rcode;
-
- /* restore the virtual memory and eliminate old font */
- resetCIDFont(cidfontname, cmapfile);
- /* This will load the font into the FontP */
- rcode = scan_cidfont(CIDFontP, CMapP);
- if (rcode == SCAN_OUT_OF_MEMORY) {
- /* free the memory and start again */
- if (!(initCIDFont(vm_size * 2))) {
- /* we are really out of memory */
- return(SCAN_OUT_OF_MEMORY);
- }
- resetCIDFont(cidfontname, cmapfile);
- rcode = scan_cidfont(CIDFontP, CMapP);
- /* only double the memory twice, then report error */
- if (rcode == SCAN_OUT_OF_MEMORY) {
- /* free the memory and start again */
- if (!(initCIDFont(vm_size * 2))) {
- /* we are really out of memory */
- return(SCAN_OUT_OF_MEMORY);
- }
- resetCIDFont(cidfontname, cmapfile);
- rcode = scan_cidfont(CIDFontP, CMapP);
- }
- }
- return(rcode);
-}
-
-int
-readCIDType1Font(void)
-{
- int rcode;
-
- resetCIDType1Font();
-
- /* This will load the font into the FontP */
- rcode = scan_cidtype1font(FontP);
- return(rcode);
-}
-#endif
-
-int
-readFont(char *env)
-{
- int rcode;
-
- /* restore the virtual memory and eliminate old font */
- resetFont(env);
- /* This will load the font into the FontP */
- rcode = scan_font(FontP);
- if (rcode == SCAN_OUT_OF_MEMORY) {
- /* free the memory and start again */
-#if XFONT_CID
- /* xfree(vm_base); */
-#else
- xfree(vm_base);
-#endif
- if (!(initFont(vm_size * 2))) {
- /* we are really out of memory */
- return(SCAN_OUT_OF_MEMORY);
- }
- resetFont(env);
- rcode = scan_font(FontP);
-#if XFONT_CID
- /* only double the memory twice, then report error */
- if (rcode == SCAN_OUT_OF_MEMORY) {
- /* free the memory and start again */
- /* xfree(vm_base) */
- if (!(initFont(vm_size * 2))) {
- /* we are really out of memory */
- return(SCAN_OUT_OF_MEMORY);
- }
- resetFont(env);
- rcode = scan_font(FontP);
- }
-#else
- /* only double the memory once, then report error */
-#endif
- }
- return(rcode);
-}
-/***================================================================***/
-struct xobject *
-fontfcnB(struct XYspace *S, unsigned char *code, int *lenP, int *mode)
-{
- psobj *charnameP; /* points to psobj that is name of character*/
- int N;
- psdict *CharStringsDictP; /* dictionary with char strings */
- psobj CodeName; /* used to store the translation of the name*/
- psobj *SubrsArrayP;
- psobj *theStringP;
-
- struct xobject *charpath; /* the path for this character */
-
- charnameP = &CodeName;
- charnameP->len = *lenP;
- charnameP->data.stringP = code;
-
- CharStringsDictP = FontP->CharStringsP;
-
- /* search the chars string for this charname as key */
- N = SearchDictName(CharStringsDictP,charnameP);
- if (N<=0) {
- *mode = FF_PARSE_ERROR;
- return(NULL);
- }
- /* ok, the nth item is the psobj that is the string for this char */
- theStringP = &(CharStringsDictP[N].value);
-
- /* get the dictionary pointers to the Subrs */
-
- SubrsArrayP = &(FontP->Subrs);
- /* scale the Adobe fonts to 1 unit high */
- /* call the type 1 routine to rasterize the character */
- charpath = (struct xobject *)Type1Char((char *)FontP,S,theStringP,
- SubrsArrayP,NULL,
- FontP->BluesP , mode);
- /* if Type1Char reported an error, then return */
- if ( *mode == FF_PARSE_ERROR) return(NULL);
- /* fill with winding rule unless path was requested */
- if (*mode != FF_PATH) {
- charpath = (struct xobject *)Interior((struct segment *)charpath,
- WINDINGRULE+CONTINUITY);
- }
- return(charpath);
-}
-
-#if XFONT_CID
-/***================================================================***/
-/* CIDfontfcnA(cidfontname, cmapfile, mode) */
-/* */
-/* 1) initialize the font - global indicates it has been done */
-/* 2) load the font */
-/***================================================================***/
-Bool
-CIDfontfcnA(char *cidfontname, char *cmapfile, int *mode)
-{
- int rcode, cidinit;
-
- cidinit = 0;
- if (CIDFontP == NULL || strcmp(CurCIDFontName, "") == 0) {
- InitImager();
- if (!(initCIDFont(VM_SIZE))) {
- /* we are really out of memory */
- *mode = SCAN_OUT_OF_MEMORY;
- return(FALSE);
- }
- cidinit = 1;
- }
-
- /* if the cidfontname is null, then use font already loaded */
-
- /* if not the same font name */
- if (cidinit || (cidfontname && strcmp(cidfontname,CurCIDFontName) != 0) ||
- (cmapfile && strcmp(cmapfile,CurCMapName) != 0)) {
- /* restore the virtual memory and eliminate old font, read new one */
- rcode = readCIDFont(cidfontname, cmapfile);
- if (rcode != 0 ) {
- strcpy(CurCIDFontName, ""); /* no CIDFont loaded */
- strcpy(CurCMapName, ""); /* no CMap loaded */
- *mode = rcode;
- return(FALSE);
- }
- }
- return(TRUE);
-
-}
-
-/***================================================================***/
-/* CIDType1fontfcnA(mode) */
-/* */
-/* 1) initialize the font - global indicates it has been done */
-/* 2) load the font */
-/***================================================================***/
-Bool
-CIDType1fontfcnA(int *mode)
-{
- int rcode;
-
- if (!(initCIDType1Font())) {
- /* we are really out of memory */
- *mode = SCAN_OUT_OF_MEMORY;
- return(FALSE);
- }
-
- if ((rcode = readCIDType1Font()) != 0) {
- strcpy(CurFontName, ""); /* no font loaded */
- *mode = rcode;
- return(FALSE);
- }
- return(TRUE);
-
-}
-#endif
-
-/***================================================================***/
-/* fontfcnA(env, mode) */
-/* */
-/* env is a pointer to a string that contains the fontname. */
-/* */
-/* 1) initialize the font - global indicates it has been done */
-/* 2) load the font */
-/***================================================================***/
-Bool
-fontfcnA(char *env, int *mode)
-{
- int rc;
-
- /* Has the FontP initialized? If not, then */
- /* Initialize */
-#if XFONT_CID
- if (FontP == NULL || strcmp(CurFontName, "") == 0) {
-#else
- if (FontP == NULL) {
-#endif
- InitImager();
- if (!(initFont(VM_SIZE))) {
- /* we are really out of memory */
- *mode = SCAN_OUT_OF_MEMORY;
- return(FALSE);
- }
- }
-
- /* if the env is null, then use font already loaded */
-
- /* if the not same font name */
- if ( (env) && (strcmp(env,CurFontName) != 0 ) ) {
- /* restore the virtual memory and eliminate old font, read new one */
- rc = readFont(env);
- if (rc != 0 ) {
- strcpy(CurFontName, ""); /* no font loaded */
- *mode = rc;
- return(FALSE);
- }
- }
- return(TRUE);
-
-}
-
-#if XFONT_CID
-/***================================================================***/
-/* CIDQueryFontLib(cidfontname,cmapfile,infoName,infoValue,rcodeP) */
-/* */
-/* cidfontname is a pointer to a string that contains the fontname. */
-/* */
-/* 1) initialize the font - global indicates it has been done */
-/* 2) load the font */
-/* 3) use the font to call getInfo for that value. */
-/***================================================================***/
-
-void
-CIDQueryFontLib(char *cidfontname, char *cmapfile, char *infoName,
- pointer infoValue, /* parameter returned here */
- int *rcodeP)
-{
- int rc,N,i,cidinit;
- psdict *dictP;
- psobj nameObj;
- psobj *valueP;
-
- /* Has the CIDFontP initialized? If not, then */
- /* Initialize */
- cidinit = 0;
- if (CIDFontP == NULL || strcmp(CurCIDFontName, "") == 0) {
- InitImager();
- if (!(initCIDFont(VM_SIZE))) {
- *rcodeP = 1;
- return;
- }
- cidinit = 1;
- }
- /* if the file name is null, then use font already loaded */
- /* if the not same font name, reset and load next font */
- if (cidinit || (cidfontname && strcmp(cidfontname,CurCIDFontName) != 0) ||
- (cmapfile && strcmp(cmapfile,CurCMapName) != 0)) {
- /* restore the virtual memory and eliminate old font */
- rc = readCIDFont(cidfontname, cmapfile);
- if (rc != 0 ) {
- strcpy(CurCIDFontName, ""); /* no font loaded */
- strcpy(CurCMapName, ""); /* no font loaded */
- *rcodeP = 1;
- return;
- }
- }
- dictP = CIDFontP->CIDfontInfoP;
- objFormatName(&nameObj,strlen(infoName),infoName);
- N = SearchDictName(dictP,&nameObj);
- /* if found */
- if ( N > 0 ) {
- *rcodeP = 0;
- switch (dictP[N].value.type) {
- case OBJ_ARRAY:
- valueP = dictP[N].value.data.arrayP;
- /* Just double check valueP. H.J. */
- if (valueP == NULL) break;
- if (strcmp(infoName,"FontMatrix") == 0) {
- /* 6 elments, return them as floats */
- for (i=0;i<6;i++) {
- if (valueP->type == OBJ_INTEGER )
- ((float *)infoValue)[i] = valueP->data.integer;
- else
- ((float *)infoValue)[i] = valueP->data.real;
- valueP++;
- }
- }
- if (strcmp(infoName,"FontBBox") == 0) {
- /* 4 elments for Bounding Box. all integers */
- for (i=0;i<4;i++) {
- ((int *)infoValue)[i] = valueP->data.integer;
- valueP++;
- }
- break;
- case OBJ_INTEGER:
- case OBJ_BOOLEAN:
- *((int *)infoValue) = dictP[N].value.data.integer;
- break;
- case OBJ_REAL:
- *((float *)infoValue) = dictP[N].value.data.real;
- break;
- case OBJ_NAME:
- case OBJ_STRING:
- *((char **)infoValue) = dictP[N].value.data.valueP;
- break;
- default:
- *rcodeP = 1;
- break;
- }
- }
- }
- else *rcodeP = 1;
-}
-#endif
-
-/***================================================================***/
-/* QueryFontLib(env, infoName,infoValue,rcodeP) */
-/* */
-/* env is a pointer to a string that contains the fontname. */
-/* */
-/* 1) initialize the font - global indicates it has been done */
-/* 2) load the font */
-/* 3) use the font to call getInfo for that value. */
-/***================================================================***/
-
-void
-QueryFontLib(char *env, char *infoName,
- pointer infoValue, /* parameter returned here */
- int *rcodeP)
-{
- int rc,N,i;
- psdict *dictP;
- psobj nameObj;
- psobj *valueP;
-
- /* Has the FontP initialized? If not, then */
- /* Initialize */
- if (FontP == NULL) {
- InitImager();
- if (!(initFont(VM_SIZE))) {
- *rcodeP = 1;
- return;
- }
- }
- /* if the env is null, then use font already loaded */
- /* if the not same font name, reset and load next font */
- if ( (env) && (strcmp(env,CurFontName) != 0 ) ) {
- /* restore the virtual memory and eliminate old font */
- rc = readFont(env);
- if (rc != 0 ) {
- strcpy(CurFontName, ""); /* no font loaded */
- *rcodeP = 1;
- return;
- }
- }
- dictP = FontP->fontInfoP;
- objFormatName(&nameObj,strlen(infoName),infoName);
- N = SearchDictName(dictP,&nameObj);
- /* if found */
- if ( N > 0 ) {
- *rcodeP = 0;
- switch (dictP[N].value.type) {
- case OBJ_ARRAY:
- valueP = dictP[N].value.data.arrayP;
- /* Just double check valueP. H.J. */
- if (valueP == NULL) break;
- if (strcmp(infoName,"FontMatrix") == 0) {
- /* 6 elments, return them as floats */
- for (i=0;i<6;i++) {
- if (valueP->type == OBJ_INTEGER )
- ((float *)infoValue)[i] = valueP->data.integer;
- else
- ((float *)infoValue)[i] = valueP->data.real;
- valueP++;
- }
- }
- if (strcmp(infoName,"FontBBox") == 0) {
- /* 4 elments for Bounding Box. all integers */
- for (i=0;i<4;i++) {
- ((int *)infoValue)[i] = valueP->data.integer;
- valueP++;
- }
- break;
- case OBJ_INTEGER:
- case OBJ_BOOLEAN:
- *((int *)infoValue) = dictP[N].value.data.integer;
- break;
- case OBJ_REAL:
- *((float *)infoValue) = dictP[N].value.data.real;
- break;
- case OBJ_NAME:
- case OBJ_STRING:
- *((char **)infoValue) = dictP[N].value.data.valueP;
- break;
- default:
- *rcodeP = 1;
- break;
- }
- }
- }
- else *rcodeP = 1;
-}
-
-#if XFONT_CID
-struct xobject *
-CIDfontfcnC(struct XYspace *S, psobj *theStringP,
- psobj *SubrsArrayP, struct blues_struct *BluesP,
- int *lenP, int *mode)
-{
- struct xobject *charpath; /* the path for this character */
-
- charpath = (struct xobject *)CIDChar((char *)FontP,S,theStringP,
- SubrsArrayP,NULL,BluesP,mode);
- /* if Type1Char reported an error, then return */
- if ( *mode == FF_PARSE_ERROR) return(NULL);
- /* fill with winding rule unless path was requested */
- if (*mode != FF_PATH) {
- charpath = (struct xobject *)Interior((struct segment *)charpath,
- WINDINGRULE+CONTINUITY);
- }
- return(charpath);
-}
-#endif
diff --git a/nx-X11/lib/font/Type1/fontfcn.h b/nx-X11/lib/font/Type1/fontfcn.h
deleted file mode 100644
index 1409eb9a9..000000000
--- a/nx-X11/lib/font/Type1/fontfcn.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/* $Xorg: fontfcn.h,v 1.3 2000/08/17 19:46:30 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/fontfcn.h,v 1.4 1999/08/22 08:58:50 dawes Exp $ */
-
-
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-/* modular config.h defines VERSION as libXfont version */
-#ifdef VERSION
-#undef VERSION
-#endif
-
-#if XFONT_CID
-/* Definition of a PostScript CIDFont resource */
-typedef struct cid_font {
- char *vm_start;
- int spacerangecnt;
- int notdefrangecnt;
- int cidrangecnt;
- spacerange *spacerangeP;
- cidrange *notdefrangeP;
- cidrange *cidrangeP;
- int binarydata; /* 1=binary data, 0=hex data */
- long bytecnt;
- psobj CIDFontFileName;
- psdict *CIDfontInfoP;
-} cidfont;
-
-/* Definition of a PostScript CMap resource */
-typedef struct cmap_res {
- unsigned short firstCol;
- unsigned short lastCol;
- unsigned short firstRow;
- unsigned short lastRow;
- psobj CMapFileName;
- psdict *CMapInfoP;
-} cmapres;
-#endif
-
-/* Definition of a PostScript FONT */
-typedef struct ps_font {
- char *vm_start;
- psobj FontFileName;
- psobj Subrs;
- psdict *CharStringsP;
- psdict *Private;
- psdict *fontInfoP;
-struct blues_struct *BluesP;
-} psfont;
-/***================================================================***/
-/* Routines in scan_font */
-/***================================================================***/
-
-extern boolean Init_BuiltInEncoding ( void );
-#if XFONT_CID
-extern int scan_cidfont ( cidfont *CIDFontP, cmapres *CMapP );
-extern int scan_cidtype1font ( psfont *FontP );
-#endif
-extern int scan_font ( psfont *FontP );
-/***================================================================***/
-/* Return codes from scan_font */
-/***================================================================***/
-#define SCAN_OK 0
-#define SCAN_FILE_EOF -1
-#define SCAN_ERROR -2
-#define SCAN_OUT_OF_MEMORY -3
-#define SCAN_FILE_OPEN_ERROR -4
-#define SCAN_TRUE -5
-#define SCAN_FALSE -6
-#define SCAN_END -7
-
-#if XFONT_CID
-/***================================================================***/
-/* Name of CID FontInfo fields */
-/***================================================================***/
-#define CIDCOUNT 1
-#define CIDFONTNAME 2
-#define CIDFONTTYPE 3
-#define CIDVERSION 4
-#define CIDREGISTRY 5
-#define CIDORDERING 6
-#define CIDSUPPLEMENT 7
-#define CIDMAPOFFSET 8
-#define CIDFDARRAY 9
-#define CIDFDBYTES 10
-#define CIDFONTBBOX 11
-#define CIDFULLNAME 12
-#define CIDFAMILYNAME 13
-#define CIDWEIGHT 14
-#define CIDNOTICE 15
-#define CIDGDBYTES 16
-#define CIDUIDBASE 17
-#define CIDXUID 18
-
-/***================================================================***/
-/* Name of CMapInfo fields */
-/***================================================================***/
-#define CMAPREGISTRY 1
-#define CMAPORDERING 2
-#define CMAPSUPPLEMENT 3
-#define CMAPNAME 4
-#define CMAPVERSION 5
-#define CMAPTYPE 6
-#define CMAPWMODE 7
-#define CMAPCIDCOUNT 8
-#endif
-
-/***================================================================***/
-/* Name of FontInfo fields */
-/***================================================================***/
-
-#define FONTNAME 1
-#define PAINTTYPE 2
-#define FONTTYPENUM 3
-#define FONTMATRIX 4
-#define FONTBBOX 5
-#define UNIQUEID 6
-#define STROKEWIDTH 7
-#define VERSION 8
-#define NOTICE 9
-#define FULLNAME 10
-#define FAMILYNAME 11
-#define WEIGHT 12
-#define ITALICANGLE 13
-#define ISFIXEDPITCH 14
-#define UNDERLINEPOSITION 15
-#define UNDERLINETHICKNESS 16
-#define ENCODING 17
-/***================================================================***/
-/* Name of Private values */
-/***================================================================***/
-#define BLUEVALUES 1
-#define OTHERBLUES 2
-#define FAMILYBLUES 3
-#define FAMILYOTHERBLUES 4
-#define BLUESCALE 5
-#define BLUESHIFT 6
-#define BLUEFUZZ 7
-#define STDHW 8
-#define STDVW 9
-#define STEMSNAPH 10
-#define STEMSNAPV 11
-#define FORCEBOLD 12
-#define LANGUAGEGROUP 13
-#define LENIV 14
-#define RNDSTEMUP 15
-#define EXPANSIONFACTOR 16
-
-#if XFONT_CID
-/***================================================================***/
-/* Name of CID Type 1 Private values */
-/***================================================================***/
-#define CIDT1MINFEATURE 1
-#define CIDT1LENIV 2
-#define CIDT1LANGGROUP 3
-#define CIDT1BLUEVALUES 4
-#define CIDT1OTHERBLUES 5
-#define CIDT1BLUESCALE 6
-#define CIDT1BLUEFUZZ 7
-#define CIDT1BLUESHIFT 8
-#define CIDT1FAMBLUES 9
-#define CIDT1FAMOTHERBLUES 10
-#define CIDT1STDHW 11
-#define CIDT1STDVW 12
-#define CIDT1STEMSNAPH 13
-#define CIDT1STEMSNAPV 14
-#define CIDT1SUBMAPOFF 15
-#define CIDT1SDBYTES 16
-#define CIDT1SUBRCNT 17
-#define CIDT1FORCEBOLD 18
-#define CIDT1RNDSTEMUP 19
-#define CIDT1EXPFACTOR 20
-
-#define CID_BITMAP_UNDEFINED 0
-extern int SearchDictName ( psdict *dictP, psobj *keyP );
-#if XFONT_CID
-extern boolean initCIDType1Font ( void );
-#endif
-extern boolean initFont ( int cnt );
-#if XFONT_CID
-extern int readCIDFont ( char *cidfontname, char *cmapfile );
-extern int readCIDType1Font ( void );
-#endif
-extern int readFont ( char *env );
-extern struct xobject *fontfcnB ( struct XYspace *S, unsigned char *code,
- int *lenP, int *mode );
-#if XFONT_CID
-extern Bool CIDfontfcnA ( char *cidfontname, char *cmapfile, int *mode );
-extern Bool CIDType1fontfcnA ( int *mode );
-#endif
-extern Bool fontfcnA ( char *env, int *mode );
-#if XFONT_CID
-extern void CIDQueryFontLib ( char *cidfontname, char *cmapfile,
- char *infoName, pointer infoValue, int *rcodeP );
-#endif
-extern void QueryFontLib ( char *env, char *infoName, pointer infoValue,
- int *rcodeP );
-#if XFONT_CID
-extern struct xobject *CIDfontfcnC ( struct XYspace *S, psobj *theStringP,
- psobj *SubrsArrayP,
- struct blues_struct *BluesP, int *lenP,
- int *mode );
-#endif
-#endif
diff --git a/nx-X11/lib/font/Type1/fonts.h b/nx-X11/lib/font/Type1/fonts.h
deleted file mode 100644
index 7215e0f7a..000000000
--- a/nx-X11/lib/font/Type1/fonts.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* $Xorg: fonts.h,v 1.3 2000/08/17 19:46:30 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/* STUB */
-
-#define CopyFont(f) f
-#define UniqueFont(f) f
-#define KillFont(f)
-#define KillText(t)
-#define CopyText(t) t
-#define I_DumpText(t)
-#define CoerceText(t) t
-#define TextDelta(t,pt)
-#define XformText(p,s)
-#define GimeSpace() FALSE
-
-#define LibInit()
-#define InitFonts()
-#define InitFiles()
-#define TraceClose()
-
-#define FF_PARSE_ERROR -1
diff --git a/nx-X11/lib/font/Type1/hdigit.h b/nx-X11/lib/font/Type1/hdigit.h
deleted file mode 100644
index fbaa9c1db..000000000
--- a/nx-X11/lib/font/Type1/hdigit.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* $Xorg: hdigit.h,v 1.3 2000/08/17 19:46:30 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* -------------------------------------- */
-/* --- MACHINE GENERATED, DO NOT EDIT --- */
-/* -------------------------------------- */
-
-#ifndef HDIGIT
-#define HDIGIT 1
-
-/*
- * Hex Digit Value Table --
- *
- * The entries in the Digit Value Table map character codes in the set
- * {0-9,a-f,A-F} to their numeric values for readhexstring
- * (00 10...F0 for the high hex digit and 00 01...0F for the low).
- * The white-space and hex string termination characters are.
- * mapped to codes > 0xf0 to enable usage by several modules.
- * 2 tables are build HighHex and LowHex.
- *
- */
-
-/* Indicators for special characters in these tables */
-#define HERROR (0xfe)
-#define HWHITE_SPACE (0xfd)
-#define HRIGHT_ANGLE (0xfc)
-#define LAST_HDIGIT (0xf0)
-
-#define HighHexP (HighHex+1)
-unsigned char HighHex[257] = { 0xFF,
- 0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0xFE,0xFE,0xFE,0xFE,0xFC,0xFE,
- 0xFE,0xA0,0xB0,0xC0,0xD0,0xE0,0xF0,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xA0,0xB0,0xC0,0xD0,0xE0,0xF0,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE
-};
-#define LowHexP (LowHex+1)
-unsigned char LowHex[257] = { 0xFF,
- 0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0xFE,0xFE,0xFE,0xFE,0xFC,0xFE,
- 0xFE,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE
-};
-
-#endif
diff --git a/nx-X11/lib/font/Type1/hints.c b/nx-X11/lib/font/Type1/hints.c
deleted file mode 100644
index 14deac229..000000000
--- a/nx-X11/lib/font/Type1/hints.c
+++ /dev/null
@@ -1,890 +0,0 @@
-/* $Xorg: hints.c,v 1.3 2000/08/17 19:46:30 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/hints.c,v 1.7tsi Exp $ */
-
- /* HINTS CWEB V0006 ******** */
-/*
-:h1.HINTS Module - Processing Rasterization Hints
-
-&author. Sten F. Andler; continuity by Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com) and Duaine
-W. Pryor, Jr.
-
-
-:h3.Include Files
-
-The included files are:
-*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef FONTMODULE
-# include "os.h"
-#endif
-#include "objects.h"
-#include "spaces.h"
-#include "paths.h"
-#include "regions.h"
-#include "hints.h"
-
-/*
-:h3.Functions Provided to the TYPE1IMAGER User
-
-None.
-*/
-
-/*
-:h3.Functions Provided to Other Modules
-
-This module provides the following entry point to other modules:
-*/
-
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-:h3.Macros Provided to Other Modules
-
-None.
-*/
-
-/*
-:h2.InitHints() - Initialize hint data structure
-*/
-
-#define MAXLABEL 20
-static struct {
- int inuse;
- int computed;
- struct fractpoint hint;
-} oldHint[MAXLABEL];
-
-#define ODD(x) (((int)(x)) & 01)
-#define FPFLOOR(fp) TOFRACTPEL((fp) >> FRACTBITS)
-#define FPROUND(fp) FPFLOOR((fp) + FPHALF)
-
-void
-InitHints(void)
-{
- int i;
-
- for (i = 0; i < MAXLABEL; i++)
- {
- oldHint[i].inuse = FALSE;
- oldHint[i].computed = FALSE;
- }
-}
-
-/*
-:h3.CloseHints(hintP) - Reverse hints that are still open
-*/
-
-void
-CloseHints(struct fractpoint *hintP)
-{
- int i;
-
- for (i = 0; i < MAXLABEL; i++)
- {
- if (oldHint[i].inuse)
- {
- hintP->x -= oldHint[i].hint.x;
- hintP->y -= oldHint[i].hint.y;
-
- oldHint[i].inuse = FALSE;
- }
- }
-}
-
-/*
-:h3.ComputeHint(hP, currX, currY, hintP) - Compute the value of a hint
-*/
-
-static void
-ComputeHint(struct hintsegment *hP,
- fractpel currX, fractpel currY,
- struct fractpoint *hintP)
-{
- fractpel currRef, currWidth;
- int idealWidth;
- fractpel hintValue;
- char orientation;
-
-/*
-By construction, width is never zero. Therefore we can use the
-width value to determine if the hint has been rotated by a
-multiple of 90 degrees.
-*/
-
- if (hP->width.y == 0)
- {
- orientation = 'v'; /* vertical */
- }
- else if (hP->width.x == 0)
- {
- orientation = 'h'; /* horizontal */
- }
- else
- {
- hintP->x = hintP->y = 0;
- return;
- }
-
- /* Compute currRef and currWidth with a unit of 1 pel */
- if (orientation == 'v') /* vertical */
- {
- currRef = hP->ref.x + currX;
- currWidth = ABS(hP->width.x);
- }
- else if (orientation == 'h') /* horizontal */
- {
- currRef = hP->ref.y + currY;
- currWidth = ABS(hP->width.y);
- }
- else /* error */
- {
- Abort("ComputeHint: invalid orientation");
- }
-
- if ((hP->hinttype == 'b') /* Bar or stem */
- || (hP->hinttype == 's')) /* Serif */
- {
- idealWidth = NEARESTPEL(currWidth);
- if (idealWidth == 0) idealWidth = 1;
- if (ODD(idealWidth)) /* Is ideal width odd? */
- {
- /* center "ref" over pel */
- hintValue = FPFLOOR(currRef) + FPHALF - currRef;
- }
- else
- {
- /* align "ref" on pel boundary */
- hintValue = FPROUND(currRef) - currRef;
- }
- }
- else if (hP->hinttype == 'c') /* Curve extrema */
- {
- /* align "ref" on pel boundary */
- hintValue = FPROUND(currRef) - currRef;
- }
- else /* error */
- {
- Abort("ComputeHint: invalid hinttype");
- }
-
- if (orientation == 'v') /* vertical */
- {
- hintP->x = hintValue;
- hintP->y = 0;
- }
- else if (orientation == 'h') /* horizontal */
- {
- hintP->x = 0;
- hintP->y = hintValue;
- }
- else /* error */
- {
- Abort("ComputeHint: invalid orientation");
- }
-}
-
-/*
-:h3.ProcessHint(hP, currX, currY, hintP) - Process a rasterization hint
-*/
-
-void
-ProcessHint(struct hintsegment *hP,
- fractpel currX, fractpel currY,
- struct fractpoint *hintP)
-{
- struct fractpoint thisHint;
-
- if ((hP->adjusttype == 'm') /* Move */
- || (hP->adjusttype == 'a')) /* Adjust */
- {
- /* Look up hint in oldHint table */
- if ((hP->label >= 0) && (hP->label < MAXLABEL))
- {
- if (oldHint[hP->label].computed)
- /* Use old hint value if already computed */
- {
- thisHint.x = oldHint[hP->label].hint.x;
- thisHint.y = oldHint[hP->label].hint.y;
- oldHint[hP->label].inuse = TRUE;
- }
- else
- /* Compute new value for hint and store it for future use */
- {
- ComputeHint(hP, currX, currY, &thisHint);
-
- oldHint[hP->label].hint.x = thisHint.x;
- oldHint[hP->label].hint.y = thisHint.y;
- oldHint[hP->label].inuse = TRUE;
- oldHint[hP->label].computed = TRUE;
- }
- }
- else /* error */
- {
- Abort("ProcessHint: invalid label");
- }
- }
- else if (hP->adjusttype == 'r') /* Reverse */
- {
- /* Use the inverse of the existing hint value to reverse hint */
- if ((hP->label >= 0) && (hP->label < MAXLABEL))
- {
- if (oldHint[hP->label].inuse)
- {
- thisHint.x = -oldHint[hP->label].hint.x;
- thisHint.y = -oldHint[hP->label].hint.y;
- oldHint[hP->label].inuse = FALSE;
- }
- else /* error */
- {
- Abort("ProcessHint: label is not in use");
- }
- }
- else /* error */
- {
- Abort("ProcessHint: invalid label");
- }
-
- }
- else /* error */
- {
- Abort("ProcessHint: invalid adjusttype");
- }
-
- hintP->x += thisHint.x;
- hintP->y += thisHint.y;
-}
-
-/*
-:h2 id=subpath.Navigation Through Edge Lists
-
-For continuity checking purposes, we need to navigate through edge
-lists by the "subpath" chains and answer questions about edges. The
-subpath chain links together edges that were part of the same subpath
-(no intervening move segments) when the interior of the path was
-calculated. Here we use the term "edge" to mean every edge list
-that was created in between changes of direction.
-
-The subpath chains are singly-linked circular chains. For the convenience
-of building them, they direction of the list (from edge to edge) is the
-reverse of the order in which they were built. Within any single edge,
-the subpath chain goes from top-to-bottom. (There might be a violation
-of this because of the way the user started the first chain; see
-:hdref refid=fixsubp..).
-
-:h3.ISTOP() and ISBOTTOM() - Flag Bits for Edge Lists at the Top and
-Bottom of Their SubPaths
-*/
-
-#define ISTOP(flag) ((flag)&0x20)
-#define ISBOTTOM(flag) ((flag)&0x10)
-/*
-:h3.ISLEFT() - Flag Bit for Left Edges
-*/
-
-#define ISLEFT(flag) ((flag)&0x08)
-
-/*
-:h3.XofY() - Macro to Find X Value at Given Y
-
-This macro can only be used if it is known that the Y is within the
-given edgelist's ymin and ymax.
-*/
-
-#define XofY(edge, y) edge->xvalues[y - edge->ymin]
-
-/*
-:h3.findXofY() - Like XofY(), Except not Restricted
-
-If the Y is out of bounds of the given edgelist, this macro will
-call SearchXofY to search the edge's subpath chain for the correct
-Y range. If the Y value is off the edge, MINPEL is returned.
-*/
-#define findXofY(edge, y) ((y < edge->ymin || y >= edge->ymax) ? SearchXofY(edge, y) : XofY(edge, y))
-
-/*
-:h4.SearchXofY() - Routine Called by FindXofY() for Difficult Cases
-
-The concept of this routine is to follow the subpath chain to find the
-edge just below (i.e., next in chain) or just above (i.e., immediately
-before in chain. It is assumed that the Y value is no more than one
-off of the edge's range; XofY() could be replace by FindXofY() to
-call ourselves recursively if this were not true.
-*/
-
-static pel
-SearchXofY(register struct edgelist *edge, /* represents edge */
- register pel y) /* 'y' value to find edge for */
-{
- register struct edgelist *e; /* loop variable */
-
- if (y < edge->ymin) {
- if (ISTOP(edge->flag))
- return(MINPEL);
- for (e = edge->subpath; e->subpath != edge; e = e->subpath) { ; }
- if (e->ymax == edge->ymin)
- return(XofY(e, y));
- }
- else if (y >= edge->ymax) {
- if (ISBOTTOM(edge->flag))
- return(MINPEL);
- e = edge->subpath;
- if (e->ymin == edge->ymax)
- return(XofY(e, y));
- }
- else
- return(XofY(edge, y));
-
- Abort("bad subpath chain");
- /*NOTREACHED*/
-}
-/*
-:h3.ISBREAK() Macro - Tests if an Edge List is at a "Break"
-
-The subpath chains are organized top to bottom. When the bottom of
-a given edge is reached, the subpath chain points to the top of the
-next edge. We call this a "break" in the chain. The following macro
-is the simple test for the break condition:
-*/
-
-#define ISBREAK(top,bot) (top->ymax != bot->ymin)
-
-
-/*
-:h3.ImpliedHorizontalLine() - Tests for Horizontal Connectivity
-
-This function returns true if two edges are connected horizontally.
-They are connected horizontally if they are consecutive in the subpath,
-and either we are at the bottom and the first edge is going down or we
-are at the top and the first edge is going up.
-*/
-
-#define BLACKABOVE -1
-#define BLACKBELOW +1
-#define NONE 0
-
-static int
-ImpliedHorizontalLine(struct edgelist *e1, /* two edges to check */
- struct edgelist *e2,
- int y) /* y where they might be connected */
-{
- register struct edgelist *e3,*e4;
-
- if (ISDOWN(e1->flag) == ISDOWN(e2->flag))
- return(NONE); /* can't be consecutive unless different directions */
-/*
-Now we check for consecutiveness: Can we get from 'e1' to 'e2' with
-only one intervening break? Can we get from 'e2' to 'e1' with only one
-intervening break? 'e3' will be as far as we can get after 'e1'; 'e4'
-will be has far as we can get after 'e2':
-*/
- for (e3 = e1; !ISBREAK(e3, e3->subpath); e3 = e3->subpath) { ; }
- for (e3 = e3->subpath; e3 != e2; e3 = e3->subpath)
- if (ISBREAK(e3, e3->subpath))
- break;
-
- for (e4 = e2; !ISBREAK(e4, e4->subpath); e4 = e4->subpath) { ; }
- for (e4 = e4->subpath; e4 != e1; e4 = e4->subpath)
- if (ISBREAK(e4, e4->subpath))
- break;
-/*
-If the edges are mutually consecutive, we must have horizontal lines
-both top and bottom:
-*/
- if (e3 == e2 && e4 == e1)
- return(TRUE);
-/*
-If the edges are not consecutive either way, no horizontal lines are
-possible:
-*/
- if (e3 != e2 && e4 != e1)
- return(NONE);
-/*
-Now let's swap 'e1' and 'e2' if necessary to enforce the rule that 'e2'
-follows 'e1'. Remember that subpath chains go in the opposite direction
-from the way the subpaths were built; this led to the simplest way
-do build them.
-*/
- if (e4 != e1) {
- e2 = e1;
- e1 = e3; /* remember e3 == e2, this just swaps 'e1' and 'e2' */
- }
-/*
-Now we have everything to return the answer:
-*/
- if (ISTOP(e1->flag) && y == e1->ymin)
- return(ISDOWN(e2->flag));
- else if (ISBOTTOM(e1->flag) && y == e1->ymax)
- return(!ISDOWN(e2->flag));
- else
- Abort("ImpliedHorizontalLine: why ask?");
- /*NOTREACHED*/
-}
-
-/*
-:h3 id=fixsubp.FixSubPaths() - Must be Called to Organize Subpath Chains
-
-The region-building code in Interior(), in particular splitedge(),
-maintains the rule that sub-paths are linked top-to-bottom except
-at breaks. However, it is possible that there may be a "false break"
-because the user started the subpath in the middle of an edge (and
-went in the "wrong" direction from there, up instead of down). This
-routine finds and fixes false breaks.
-
-Also, this routine sets the ISTOP and ISBOTTOM flags in the edge lists.
-*/
-
-static void
-FixSubPaths(struct region *R) /* anchor of region */
-{
- register struct edgelist *e; /* fast loop variable */
- register struct edgelist *edge; /* current edge in region */
- register struct edgelist *next; /* next in subpath after 'edge' */
- register struct edgelist *break1; /* first break after 'next' */
- register struct edgelist *break2 = NULL; /* last break before 'edge' */
- register struct edgelist *prev; /* previous edge for fixing links */
- int left = TRUE;
-
- for (edge = R->anchor; edge != NULL; edge = edge->link) {
-
- if (left)
- edge->flag |= ISLEFT(ON);
- left = !left;
-
- next = edge->subpath;
-
- if (!ISBREAK(edge, next))
- continue;
- if (edge->ymax < next->ymin)
- Abort("disjoint subpath?");
-/*
-'edge' now contains an edgelist at the bottom of an edge, and 'next'
-contains the next subsequent edgelist in the subpath, which must be at
-the top. We refer to this a "break" in the subpath.
-*/
- next->flag |= ISTOP(ON);
- edge->flag |= ISBOTTOM(ON);
-
- if (ISDOWN(edge->flag) != ISDOWN(next->flag))
- continue;
-/*
-We are now in the unusual case; both edges are going in the same
-direction so this must be a "false break" due to the way that the user
-created the path. We'll have to fix it.
-*/
- for (break1 = next; !ISBREAK(break1, break1->subpath); break1 = break1->subpath) { ; }
-
- for (e = break1->subpath; e != edge; e = e->subpath)
- if (ISBREAK(e, e->subpath))
- break2 = e;
-/*
-Now we've set up 'break1' and 'break2'. I've found the following
-diagram invaluable. 'break1' is the first break after 'next'. 'break2'
-is the LAST break before 'edge'.
-&drawing.
- next
- +------+ +---->+------+
- +--->| >-----+ | | >-----+
- | | | | | | | |
- | +-------------+ | +-------------+
- | | |break1| | | | |
- | +->| >-------+ +->| >-----+
- | | | | | |
- | | | +-------------+
- | +------+ | | |
- | +----------------+ | | |
- | | +------+ | +->| >-----+
- | +->| >-----+ | | | |
- | | | | | +-------------+
- | +-------------+ | | | |
- | | |edge | | | |break2|
- | +->| >-----+ | +->| >-----+
- | | | | | | | |
- | | | | | | | |
- | | | | | | | |
- | +------+ | | +------+ |
- | | | |
- +---------------+ +---------------+
-
-&edrawing.
-We want to fix this situation by having 'edge' point to where 'break1'
-now points, and having 'break1' point to where 'break2' now points.
-Finally, 'break2' should point to 'next'. Also, we observe that
-'break1' can't be a bottom, and is also not a top unless it is the same
-as 'next':
-*/
- edge->subpath = break1->subpath;
-
- break1->subpath = break2->subpath;
- if (ISBREAK(break1, break1->subpath))
- Abort("unable to fix subpath break?");
-
- break2->subpath = next;
-
- break1->flag &= ~ISBOTTOM(ON);
- if (break1 != next)
- break1->flag &= ~ISTOP(ON);
- }
-/*
-This region might contain "ambiguous" edges; edges exactly equal to
-edge->link. Due to the random dynamics of where they get sorted into
-the list, they can yield false crossings, where the edges appear
-to cross. This confuses our continuity logic no end. Since we can
-swap them without changing the region, we do.
-*/
- for (edge = R->anchor, prev = NULL; VALIDEDGE(edge); prev = edge, edge = prev->link) {
-
- if (! ISAMBIGUOUS(edge->flag))
- continue;
-
- next = edge->subpath;
-
- while (ISAMBIGUOUS(next->flag) && next != edge)
- next = next->subpath;
-/*
-We've finally found a non-ambiguous edge; we make sure it is left/right
-compatible with 'edge':
-*/
- if ( (ISLEFT(edge->flag) == ISLEFT(next->flag) && ISDOWN(edge->flag) == ISDOWN(next->flag) )
- || (ISLEFT(edge->flag) != ISLEFT(next->flag) && ISDOWN(edge->flag) != ISDOWN(next->flag) ) )
- continue;
-
-/*
-Incompatible, we will swap 'edge' and the following edge in the list.
-You may think that there must be a next edge in this swath. So did I.
-No! If there is a totally ambiguous inner loop, for example, we could
-get all the way to the outside without resolving ambiguity.
-*/
- next = edge->link; /* note new meaning of 'next' */
- if (next == NULL || edge->ymin != next->ymin)
- continue;
- if (prev == NULL)
- R->anchor = next;
- else
- prev->link = next;
- edge->link = next->link;
- next->link = edge;
- edge->flag ^= ISLEFT(ON);
- edge->flag &= ~ISAMBIGUOUS(ON);
- next->flag ^= ISLEFT(ON);
- next->flag &= ~ISAMBIGUOUS(ON);
- edge = next;
- }
-}
-/*
-:h3.DumpSubPaths()
-
-A debug tool.
-*/
-
-static struct edgelist *before(struct edgelist *e); /* subroutine of DumpSubPaths */
-
-static void
-DumpSubPaths(struct edgelist *anchor)
-{
-
- register struct edgelist *edge,*e,*e2;
- pel y;
-
- for (edge = anchor; VALIDEDGE(edge); edge = edge->link) {
- if (ISPERMANENT(edge->flag))
- continue;
- for (e2 = edge; !ISPERMANENT(e2->flag);) {
- if (ISDOWN(e2->flag)) {
- for (e = e2;; e = e->subpath) {
- for (y=e->ymin+1; y < e->ymax; y++)
- e->flag |= ISPERMANENT(ON);
- if (ISBREAK(e, e->subpath))
- break;
- }
- }
- else {
- for (e = e2; !ISBREAK(e, e->subpath); e = e->subpath) { ; }
- for (;; e=before(e)) {
- for (y=e->ymax-2; y >= e->ymin; y--)
- e->flag |= ISPERMANENT(ON);
- if (e == e2)
- break;
- }
- }
- do {
- e2 = before(e2);
- } while (!ISBREAK(before(e2), e2));
- }
- }
-}
-
-static struct edgelist *
-before(struct edgelist *e)
-{
- struct edgelist *r;
- for (r = e->subpath; r->subpath != e; r = r->subpath) { ; }
- return(r);
-}
-
-/*
-:h2.Fixing Region Continuity Problems
-
-Small regions may become disconnected when their connecting segments are
-less than a pel wide. This may be correct in some applications, but in
-many (especially small font characters), it is more pleasing to keep
-connectivity. ApplyContinuity() (invoked by +CONTINUITY on the
-Interior() fill rule) fixes connection breaks. The resulting region
-is geometrically less accurate, but may be more pleasing to the eye.
-*/
-/*
-Here are some macros which we will need:
-*/
-
-#define IsValidPel(j) (j!=MINPEL)
-
-/*
-:h3.writeXofY() - Stuffs an X Value Into an "edgelist"
-
-writeXofY writes an x value into an edge at position 'y'. It must
-update the edge's xmin and xmax. If there is a possibility that this
-new x might exceed the region's bounds, updating those are the
-responsibility of the caller.
-*/
-
-static void
-writeXofY(struct edgelist *e,/* relevant edgelist */
- int y, /* y value */
- int x) /* new x value */
-{
- if (e->xmin > x) e->xmin = x;
- if (e->xmax < x) e->xmax = x;
- e->xvalues[y - e->ymin] = x;
-}
-
-/*-------------------------------------------------------------------------*/
-/* the following three macros tell us whether we are at a birth point, a */
-/* death point, or simply in the middle of the character */
-/*-------------------------------------------------------------------------*/
-#define WeAreAtTop(e,i) (ISTOP(e->flag) && e->ymin == i)
-#define WeAreAtBottom(e,i) (ISBOTTOM(e->flag) && e->ymax-1 == i)
-#define WeAreInMiddle(e,i) \
- ((!ISTOP(e->flag) && !ISBOTTOM(e->flag))||(i < e->ymax-1 && i > e->ymin))
-/*
-The following macro tests if two "edgelist" structures are in the same
-swath:
-*/
-#define SAMESWATH(e1,e2) (e1->ymin == e2->ymin)
-
-/*
-:h3.CollapseWhiteRun() - Subroutine of ApplyContinuity()
-
-When we have a white run with an implied horizontal line above or
-below it, we better have black on the other side of this line. This
-function both tests to see if black is there, and adjusts the end
-points (collapses) the white run as necessary if it is not. The
-goal is to collapse the white run as little as possible.
-*/
-
-static void
-CollapseWhiteRun(struct edgelist *anchor, /* anchor of edge list */
- pel yblack, /* y of (hopefully) black run above or below */
- struct edgelist *left, /* edgelist at left of WHITE run */
- struct edgelist *right, /* edgelist at right of WHITE run */
- pel ywhite) /* y location of white run */
-{
- struct edgelist *edge;
- struct edgelist *swathstart = anchor;
- register pel x;
-
- if (XofY(left, ywhite) >= XofY(right, ywhite))
- return;
-/*
-Find the swath with 'yblack'. If we don't find it, completely collapse
-the white run and return:
-*/
- while (VALIDEDGE(swathstart)) {
- if (yblack < swathstart->ymin) {
- writeXofY(left, ywhite, XofY(right, ywhite));
- return;
- }
- if (yblack < swathstart->ymax) break;
- swathstart = swathstart->link->link;
- }
- if(!VALIDEDGE(swathstart)) {
- writeXofY(left, ywhite, XofY(right, ywhite));
- return;
- }
-/*
-Now we are in the swath that contains 'y', the reference line above
-or below that we are trying to maintain continuity with. If black
-in this line begins in the middle of our white run, we must collapse
-the white run from the left to that point. If black ends in the
-middle of our white run, we must collapse the white run from the right
-to that point.
-*/
- for (edge = swathstart; VALIDEDGE(edge); edge = edge->link) {
-
- if (!SAMESWATH(swathstart,edge))
- break;
- if( XofY(edge, yblack) > XofY(left, ywhite)) {
- if (ISLEFT(edge->flag)) {
- x = XofY(edge, yblack);
- if (XofY(right, ywhite) < x)
- x = XofY(right, ywhite);
- writeXofY(left, ywhite, x);
- }
- else {
- x = XofY(edge, yblack);
- while (edge->link != NULL && SAMESWATH(edge, edge->link)
- && x >= XofY(edge->link, yblack) ) {
- edge = edge->link->link;
- x = XofY(edge, yblack);
- }
- if (x < XofY(right, ywhite))
- writeXofY(right, ywhite, x);
- return;
- }
- }
- }
- writeXofY(left, ywhite, XofY(right, ywhite));
-}
-
-/*
-:h3.ApplyContinuity() - Fix False Breaks in a Region
-
-This is the externally visible routine called from the REGIONS module
-when the +CONTINUITY flag is on the Interior() fill rule.
-*/
-
-void
-ApplyContinuity(struct region *R)
-{
- struct edgelist *left;
- struct edgelist *right;
- struct edgelist *edge,*e2;
- pel rightXabove,rightXbelow,leftXabove,leftXbelow;
- pel leftX,rightX;
- int i;
- long newcenter,abovecenter,belowcenter;
-
- FixSubPaths(R);
- if (RegionDebug >= 3)
- DumpSubPaths(R->anchor);
- left = R->anchor;
-/* loop through and do all of the easy checking. ( no tops or bottoms) */
- while(VALIDEDGE(left))
- {
- right = left->link;
- for(i=left->ymin;i<left->ymax;++i)
- {
- leftX = findXofY(left,i);
- rightX = findXofY(right,i);
- leftXbelow = findXofY(left,i+1);
- rightXbelow = findXofY(right,i+1);
- if(rightX <= leftX)
- {
-/* then, we have a break in a near vertical line */
- leftXabove = findXofY(left,i-1);
- rightXabove = findXofY(right,i-1);
- if( IsValidPel(leftXabove) && IsValidPel(rightXabove) )
- {
- abovecenter = leftXabove + rightXabove;
- }
- else
- {
- abovecenter = leftX + rightX;
- }
- if( IsValidPel(leftXbelow) && IsValidPel(rightXbelow) )
- {
- belowcenter = leftXbelow + rightXbelow;
- }
- else
- {
- belowcenter = leftX + rightX;
- }
- newcenter = abovecenter + belowcenter;
- if( newcenter > 4*leftX )
- {
- rightX = rightX + 1;
- }
- else if( newcenter < 4*leftX)
- {
- leftX = leftX - 1;
- }
- else
- {
- rightX = rightX + 1;
- }
- writeXofY(right,i,rightX);
- writeXofY(left,i,leftX);
- if(rightX > R->xmax) {R->xmax = rightX;}
- if(leftX < R->xmin) {R->xmin = leftX;}
- }
- if( !WeAreAtBottom(left,i) && (leftXbelow>=rightX))
- {
-/* then we have a break in a near horizontal line in the middle */
- writeXofY(right,i,leftXbelow);
- }
- if( !WeAreAtBottom(right,i) && (leftX >=rightXbelow))
- {
-/* then we have a break in a near horizontal line in the middle */
- writeXofY(left,i,rightXbelow);
- }
- }
- left = right->link;
- }
-/*
-There may be "implied horizontal lines" between edges that have
-implications for continuity. This loop looks for white runs that
-have implied horizontal lines on the top or bottom, and calls
-CollapseWhiteRuns to check and fix any continuity problems from
-them.
-*/
- for (edge = R->anchor; VALIDEDGE(edge); edge = edge->link) {
- if ((!ISTOP(edge->flag) && !ISBOTTOM(edge->flag)) || ISLEFT(edge->flag))
- continue; /* at some future date we may want left edge logic here too */
- for (e2 = edge->link; VALIDEDGE(e2) && SAMESWATH(edge,e2); e2 = e2->link) {
- if (ISTOP(e2->flag) && ISTOP(edge->flag)
- && NONE != ImpliedHorizontalLine(edge,e2,edge->ymin)) {
- if (ISLEFT(e2->flag))
- CollapseWhiteRun(R->anchor, edge->ymin-1,
- edge, e2, edge->ymin);
- }
- if (ISBOTTOM(e2->flag) && ISBOTTOM(edge->flag)
- && NONE != ImpliedHorizontalLine(edge,e2, edge->ymax)) {
- if (ISLEFT(e2->flag))
- CollapseWhiteRun(R->anchor, edge->ymax,
- edge, e2, edge->ymax-1);
- }
- }
- }
-}
-
-
-
-
diff --git a/nx-X11/lib/font/Type1/hints.h b/nx-X11/lib/font/Type1/hints.h
deleted file mode 100644
index 8e2ae2ade..000000000
--- a/nx-X11/lib/font/Type1/hints.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* $Xorg: hints.h,v 1.3 2000/08/17 19:46:30 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/hints.h,v 1.3 1999/08/22 08:58:51 dawes Exp $ */
-
-/*SHARED*/
-
-#define InitHints t1_InitHints
-extern void t1_InitHints ( void ); /* Initialize hint data structure */
-
-#define CloseHints(hintP) t1_CloseHints(hintP)
-/* Reverse hints that are still open */
-extern void t1_CloseHints ( struct fractpoint *hintP );
-
-#define ProcessHint(hP, currX, currY, hintP) t1_ProcessHint(hP, currX, currY, hintP)
-/* Process a rasterization hint */
-extern void t1_ProcessHint ( struct hintsegment *hP, fractpel currX, fractpel currY, struct fractpoint *hintP );
-
-#define ApplyContinuity(R) t1_ApplyContinuity(R)
-/* fix false connection breaks in a region */
-extern void t1_ApplyContinuity ( struct region *R );
-
-/*END SHARED*/
diff --git a/nx-X11/lib/font/Type1/lines.c b/nx-X11/lib/font/Type1/lines.c
deleted file mode 100644
index 835afc6ed..000000000
--- a/nx-X11/lib/font/Type1/lines.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/* $Xorg: lines.c,v 1.3 2000/08/17 19:46:30 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/lines.c,v 1.4tsi Exp $ */
-
- /* LINES CWEB V0003 ******** */
-/*
-:h1.LINES Module - Rasterizing Lines
-
-&author. Duaine W. Pryor, Jr. and Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com)
-
-
-:h3.Include Files
-
-The included files are:
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "objects.h"
-#include "spaces.h"
-#include "paths.h"
-#include "regions.h"
-#include "lines.h"
-
-/*
-:h3.Functions Provided to the TYPE1IMAGER User
-
-None.
-*/
-
-/*
-:h3.Functions Provided to Other Modules
-
-This module provides the following entry point to other modules:
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-:h3.Macros Provided to Other Modules
-
-None.
-*/
-
-/*
-:h2.StepLine() - Produces Run Ends for a Line After Checks
-
-The main work is done by Bresenham(); here we just perform checks and
-get the line so that its Y direction is always increasing:
-*/
-
-void StepLine(R, x1, y1, x2, y2)
- register struct region *R; /* region being built */
- register fractpel x1,y1; /* starting point */
- register fractpel x2,y2; /* ending point */
-{
- register fractpel dy;
-
- dy = y2 - y1;
-
-/*
-We execute the "GOING_TO" macro to call back the REGIONS module, if
-necessary (like if the Y direction of the edge has changed):
-*/
- GOING_TO(R, x1, y1, x2, y2, dy);
-
- if (dy == 0)
- return;
-
- if (dy < 0)
- Bresenham(R->edge, x2, y2, x1, y1);
- else
- Bresenham(R->edge, x1, y1, x2, y2);
- return;
-}
-/*
-:h3.Bresenham() - Actually Produces Run Ends
-
-This routine runs a Bresenham line-stepping
-algorithm. See, for example, Newman and Sproul, :hp1/Principles
-of Interactive Computer Graphics/, pp. 25-27.
-When we enter this, we
-are guaranteed that dy is positive.
-We'd like to work in 8 bit precision, so we'll define some macros and
-constants to let us do that:
-*/
-
-#define PREC 8 /* we'll keep fraction pels in 8 bit precision */
-/*
-RoundFP() rounds down by 'b' bits:
-*/
-#define RoundFP(xy,b) (((xy)+(1<<((b)-1)))>>(b))
-
-/*
-TruncFP() truncates down by 'b' bits:
-*/
-#define TruncFP(xy,b) ((xy)>>(b))
-
-
-void Bresenham(edgeP,x1,y1,x2,y2)
- register pel *edgeP; /* pointer to top of list (y == 0) */
- register fractpel x1,y1; /* starting point on line */
- register fractpel x2,y2; /* ending point on the line (down) */
-{
- register long dx,dy; /* change in x and y, in my own precision */
- register long x,y; /* integer pel starting point */
- register int count; /* integer pel delta y */
- register long d; /* the Bresenham algorithm error term */
-
- x1 = TruncFP(x1, FRACTBITS-PREC);
- y1 = TruncFP(y1, FRACTBITS-PREC);
- x2 = TruncFP(x2, FRACTBITS-PREC);
- y2 = TruncFP(y2, FRACTBITS-PREC);
-
- dx = x2 - x1;
- dy = y2 - y1;
-/*
-Find the starting x and y integer pel coordinates:
-*/
-
- x = RoundFP(x1,PREC);
- y = RoundFP(y1,PREC);
- edgeP += y;
- count = RoundFP(y2,PREC) - y;
-/*------------------------------------------------------------------*/
-/* Force dx to be positive so that dfy will be negative */
-/* this means that vertical moves will decrease d */
-/*------------------------------------------------------------------*/
- if (dx<0)
- {
- dx = -dx;
-#define P PREC
- d=(dy*(x1-(x<<P)+(1<<(P-1)))-dx*((y<<P)-y1+(1<<(P-1))))>>P;
-#undef P
- while(--count >= 0 )
- {
- while(d<0)
- {
- --x;
- d += dy;
- }
- *(edgeP++) = x;
- d -= dx;
- }
- }
- else /* positive dx */
- {
-#define P PREC
- d = (dy*((x<<P)-x1+(1<<(P-1)))-dx*((y<<P)-y1+(1<<(P-1))))>>P;
-#undef P
- while(--count >= 0 )
- {
- while(d<0)
- {
- ++x;
- d += dy;
- }
- *(edgeP++) = x;
- d -= dx;
- }
- }
-}
diff --git a/nx-X11/lib/font/Type1/lines.h b/nx-X11/lib/font/Type1/lines.h
deleted file mode 100644
index f8ffd3a43..000000000
--- a/nx-X11/lib/font/Type1/lines.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* $Xorg: lines.h,v 1.3 2000/08/17 19:46:30 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/lines.h,v 1.3 1999/08/22 08:58:52 dawes Exp $ */
-
-/*SHARED*/
-
-#define StepLine(R,x1,y1,x2,y2) t1_StepLine(R,x1,y1,x2,y2)
-#define Bresenham(e,x1,y1,x2,y2) t1_Bresenham(e,x1,y1,x2,y2)
-
-extern void t1_StepLine ( struct region *R, fractpel x1, fractpel y1, fractpel x2, fractpel y2 );
-extern void t1_Bresenham ( pel *edgeP, fractpel x1, fractpel y1, fractpel x2, fractpel y2 );
-
-/*END SHARED*/
diff --git a/nx-X11/lib/font/Type1/minimain.c b/nx-X11/lib/font/Type1/minimain.c
deleted file mode 100644
index 4aa826dc1..000000000
--- a/nx-X11/lib/font/Type1/minimain.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* $Xorg: minimain.c,v 1.4 2001/02/09 02:04:01 xorgcvs Exp $ */
-
-/*
-
-Copyright 1993, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-
-#include "ximager5.h"
-
-main()
-{
- XYspace S;
- path p;
-
- InitImager();
- S = Scale(IDENTITY, 300.0, -300.0);
- p = Join(Line(Loc(S, 0.0, 1.0)), Line(Loc(S, 1.0, 0.0)));
- Interior(ClosePath(p), EVENODDRULE);
-}
-
-void Trace()
-{
-}
-
-void *DEFAULTDEVICE;
diff --git a/nx-X11/lib/font/Type1/module/Imakefile b/nx-X11/lib/font/Type1/module/Imakefile
deleted file mode 100644
index db8ab54f7..000000000
--- a/nx-X11/lib/font/Type1/module/Imakefile
+++ /dev/null
@@ -1,99 +0,0 @@
-XCOMM $XFree86: xc/lib/font/Type1/module/Imakefile,v 1.6 1999/08/14 10:49:18 dawes Exp $
-
-#define IHaveModules
-#include <Server.tmpl>
-
-INCLUDES = -I$(FONTINCSRC) -I../ -I../../include -I$(XINCLUDESRC) \
- -I$(SERVERSRC)/include
-
-#if BuildCID
-CIDSRCS = cidchar.c afm.c
-CIDOBJS = cidchar.o afm.o
-#if HasUsableFileMmap
-MMAPDEFINES = -DUSE_MMAP
-#endif
-CIDDEFINES = -DBUILDCID -DHAVE_CFM $(MMAPDEFINES)
-#endif
-
-DEFINES = -DFONTMODULE $(CIDDEFINES)
-
-SRCS = \
- arith.c \
- curves.c \
- fontfcn.c \
- hints.c \
- lines.c \
- objects.c \
- paths.c \
- regions.c \
- scanfont.c \
- spaces.c \
- t1funcs.c \
- t1info.c \
- t1io.c \
- t1malloc.c \
- t1snap.c \
- t1stub.c \
- token.c \
- type1.c \
- util.c \
- t1unicode.c \
- $(CIDSRCS) \
- type1mod.c
-
-OBJS = \
- arith.o \
- curves.o \
- fontfcn.o \
- hints.o \
- lines.o \
- objects.o \
- paths.o \
- regions.o \
- scanfont.o \
- spaces.o \
- t1funcs.o \
- t1info.o \
- t1io.o \
- t1malloc.o \
- t1snap.o \
- t1stub.o \
- token.o \
- type1.o \
- util.o \
- t1unicode.o \
- $(CIDOBJS) \
- type1mod.o
-
-LinkSourceFile(arith.c,..)
-LinkSourceFile(curves.c,..)
-LinkSourceFile(fontfcn.c,..)
-LinkSourceFile(hints.c,..)
-LinkSourceFile(lines.c,..)
-LinkSourceFile(objects.c,..)
-LinkSourceFile(paths.c,..)
-LinkSourceFile(regions.c,..)
-LinkSourceFile(scanfont.c,..)
-LinkSourceFile(spaces.c,..)
-LinkSourceFile(t1funcs.c,..)
-LinkSourceFile(t1info.c,..)
-LinkSourceFile(t1io.c,..)
-LinkSourceFile(t1malloc.c,..)
-LinkSourceFile(t1snap.c,..)
-LinkSourceFile(t1stub.c,..)
-LinkSourceFile(t1unicode.c,..)
-LinkSourceFile(token.c,..)
-LinkSourceFile(type1.c,..)
-LinkSourceFile(util.c,..)
-#if BuildCID
-LinkSourceFile(afm.c,..)
-LinkSourceFile(cidchar.c,..)
-#endif
-
-ModuleObjectRule()
-LibraryModuleTarget(type1,$(OBJS))
-InstallLibraryModule(type1,$(MODULEDIR),fonts)
-
-DependTarget()
-
-InstallDriverSDKLibraryModule(type1,$(DRIVERSDKMODULEDIR),fonts)
diff --git a/nx-X11/lib/font/Type1/module/type1mod.c b/nx-X11/lib/font/Type1/module/type1mod.c
deleted file mode 100644
index e652591a2..000000000
--- a/nx-X11/lib/font/Type1/module/type1mod.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 1998 The XFree86 Project, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of the XFree86 Project shall
- * not be used in advertising or otherwise to promote the sale, use or other
- * dealings in this Software without prior written authorization from the
- * XFree86 Project.
- */
-/* $XFree86: xc/lib/font/Type1/module/type1mod.c,v 1.10 2002/12/09 17:29:59 dawes Exp $ */
-
-#include "misc.h"
-
-#include <X11/fonts/fontmod.h>
-#include "xf86Module.h"
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-static MODULESETUPPROTO(type1Setup);
-
- /*
- * This is the module data function that is accessed when loading
- * libtype1 as a module.
- */
-
-static XF86ModuleVersionInfo VersRec =
-{
- "type1",
- MODULEVENDORSTRING,
- MODINFOSTRING1,
- MODINFOSTRING2,
- XORG_VERSION_CURRENT,
- 1, 0, 2,
- ABI_CLASS_FONT, /* Font module */
- ABI_FONT_VERSION,
- MOD_CLASS_FONT,
- {0,0,0,0} /* signature, to be patched into the file by a tool */
-};
-
-XF86ModuleData type1ModuleData = { &VersRec, type1Setup, NULL };
-
-extern void Type1RegisterFontFileFunctions(void);
-#ifdef BUILDCID
-extern void CIDRegisterFontFileFunctions(void);
-#endif
-
-FontModule type1Module = {
- Type1RegisterFontFileFunctions,
- "Type1",
- NULL
-};
-
-#ifdef BUILDCID
-FontModule CIDModule = {
- CIDRegisterFontFileFunctions,
- "CID",
- NULL
-};
-#endif
-
-static pointer
-type1Setup(pointer module, pointer opts, int *errmaj, int *errmin)
-{
- type1Module.module = module;
- LoadFont(&type1Module);
-#ifdef BUILDCID
- CIDModule.module = module;
- LoadFont(&CIDModule);
-#endif
-
- /* Need a non-NULL return */
- return (pointer)1;
-}
diff --git a/nx-X11/lib/font/Type1/objects.c b/nx-X11/lib/font/Type1/objects.c
deleted file mode 100644
index c86587dba..000000000
--- a/nx-X11/lib/font/Type1/objects.c
+++ /dev/null
@@ -1,1101 +0,0 @@
-/* $Xorg: objects.c,v 1.3 2000/08/17 19:46:30 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/objects.c,v 1.10tsi Exp $ */
- /* OBJECTS CWEB V0025 ******** */
-/*
-:h1.OBJECTS Module - TYPE1IMAGER Objects Common Routines
-
-This module defines and implements the C structures that represent
-objects in the TYPE1IMAGER. All common routines for manipulating these
-objects are defined in this module. Specific routines for
-specific objects are defined in the modules that deal with that
-object type.
-
-
-&author. Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com)
-
-
-:h3.Include Files
-
-The included files are:
-*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#define GLOBALS 1 /* see :hdref refid=debugvar. */
-/*
-The following two includes are C standards; we include them because we
-use 'toupper' and the 'str'-type functions in this module. Potentially
-these may be defined as macros; if these ".h" files do not exist on your
-system it is a pretty safe bet that these are external entry points and
-you do do not need to include these header files.
-*/
-
-#ifndef FONTMODULE
-#include <string.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <stdio.h>
-#else
-#include "Xdefs.h" /* Bool declaration */
-#include "Xmd.h" /* INT32 declaration */
-#include "os.h"
-#include "xf86_ansic.h"
-#endif
-
-/*
-override incorrect system functions; for example you might define
-a macro for "strcpy" that diverts it to "my_strcpy".
-*/
-
- /* moved these includes from above the */
- /* was included first (it contains com- */
- /* piler defines). dsr 081291 */
-#include "objects.h"
-#include "spaces.h"
-#include "paths.h"
-#include "regions.h"
-#include "fonts.h"
-#include "pictures.h"
-#include "strokes.h"
-#include "cluts.h"
-
-
-static char *TypeFmt(int type);
-
-/*
-:h3.The "pointer" Macro - Define a Generic Pointer
-
-Sadly, many compilers will give a warning message when a pointer to
-one structure is assigned to a pointer to another. We've even seen
-some that give severe errors (when the wrong pointer type is used as
-an initializer or returned from a function). TYPE1IMAGER has routines
-like Dup and Allocate that are perfectly willing to duplicate or
-allocate any of a number of different types of structures. How to
-declare them in a truely portable way?
-
-Well, there is no single good answer that I've found. You can always
-beg the question and "cast" everything. I find this distracting and the
-resulting code ugly. On the other hand, we have found at least one
-compiler that will accept "void *" as a generic pointer that can
-assigned to any other pointer type without error or warning (apparently
-this is also the ANSI standard). So, we define "void *" to be a generic
-pointer. (You might have to change this for your compiler; the "ifndef"
-allows the change to be made on the command line if you want.)
-:i1/portability assumptions/
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.Functions Provided to the TYPE1IMAGER User
-
-This module provides the following TYPE1IMAGER entry points:
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-Note that entry points that are intended for use external to TYPE1IMAGER
-begin with the characters :q/xi/. Macros are used to make the names
-more mnemonic.
-*/
-
-/*
-:h3.Functions Provided to Other Modules
-
-This module provides the following functions for other modules:
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-Note that entry points that intended for use within TYPE1IMAGER, but
-which must be global because they are used across module boundaries,
-begin with the characters :q/I_/. Macros are used to make the names
-more mnemonic.
-
-Entry points totally within a module use mnemonic names and are
-declared :hp2/static/. One of the compilers I used had a bug when
-static functions were passed as addresses. Thus, some functions
-which are logically "static" are not so declared.
-
-Note also the trick of declaring routines, like Consume(), with a
-variable number of arguments. To avoid the restrictions on variable
-numbers of arguments in the macro processor, we just replace the
-text 'Consume' with 'I_Consume'.
-*/
-/*
-:h3.Macros Provided to Other Modules
-
-This is the module where we define all the useful constants like
-TRUE, FALSE, and NULL, and simple expressions like MIN(), MAX(), and ABS().
-We might as well get to it right here:
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-Notice that upper case is used for constant values and macro
-definitions. I generally follow that convention.
-
-Many more global macros are defined later in this module.
-*/
-/*
-:h2.Basic TYPE1IMAGER Object Structure
-
-All TYPE1IMAGER objects which are available to the user have a common
-header. This header is defined below:
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-The following define is an attempt to centralize the definition of the
-common xobject data shared by structures that are derived from the
-generic xobject structure. For example, the structure font, defined in
-fonts.shr :
-&code.
- struct font {
- char type;
- char flag;
- int references;
- ... other data types & structs ...
- }
-&ecode.
-would now be defined as:
-&code.
- struct font {
- XOBJ_COMMON
- ... other data types & structs ...
- }
-&ecode.
-Thus we have a better-structured inheritance mechanism. 3-26-91 PNM
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.Object Type Definitions
-
-These constants define the values which go in the 'type' field of
-an TYPE1IMAGER object structure:
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.Flag Byte Definitions
-
-Many programmers define flag bits as a mask (for example, 0x04), and
-test, set, and reset them as follows:
-
-&code.
- if ((flag & PERMANENT) != 0)
-
- flag |= PERMANENT;
- flag &= &inv.PERMANENT;
-:exmp.
-
-I favor a style where the 'if' statement can ask a question:
-
-&code.
- if (ISPERMANENT(flag))
-
- flag |= ISPERMANENT(ON);
- flag &= &inv.ISPERMANENT(ON);
-
-:exmp.
-This said, we now define two bit settings of the flag byte of the
-object. "ISPERMANENT" will be set by the user, when he calls
-Permanent(). "ISIMMORTAL" will be used for compiled-in objects
-that we don't want the user to ever destroy.
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-Flag bit definitions that apply to all objects are assigned
-starting with the least significant (0x01) bit. Flag bit definitions
-specific to a certain object type are assigned starting with the
-most significant (0x80) bit. We hope they never meet.
-*/
-/*
-:h3 id=preserve.PRESERVE() Macro
-
-Occasionally an TYPE1IMAGER operator is implemented by calling other
-TYPE1IMAGER operators. For example, Arc2() calls Conic(). When we
-call more than one operator as a subroutine, we have to be careful
-of temporary objects. A temporary object will be consumed by the
-subroutine operator and then is no longer available for the caller.
-This can be prevented simply by bumping a temporary object's reference
-count.
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-:h3.RefRoll() Macro to Detect References Count Rollover
-
-The following macro is designed to check for reference count rollover.
-A return value of TRUE means rollover has not occurred; a return value
-of FALSE means we cannot increment the reference count. Note also that
-those functions that use this macro must decrement the reference count
-afterwards. 3-26-91 PNM
-*/
-
-#define RefRoll(obj) (++(obj)->references > 0)
-
-/*
-:h2.TYPE1IMAGER Object Functions
-
-:h3.LONGCOPY() - Macro to Copy "long" Aligned Data
-
-Copying arbitrary bytes in C is a bit of a problem. "strcpy" can't be
-used, because 0 bytes are special-cased. Most environments have a
-routine "memcopy" or "bcopy" or "bytecopy" that copies memory containing
-zero bytes. Sadly, there is no standard on the name of such a routine,
-which makes it impossible to write truely portable code to use it.
-
-It turns out that TYPE1IMAGER, when it wants to copy data, frequently
-knows that both the source and destination are aligned on "long"
-boundaries. This allows us to copy by using "long *" pointers. This
-is usually very efficient on almost all processors. Frequently, it
-is more efficient than using general-purpose assembly language routines.
-So, we define a macro to do this in a portable way. "dest" and "source"
-must be long-aligned, and "bytes" must be a multiple of "sizeof(long)":
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.Allocate() - Allocating a Memory Block
-
-Allocate returns a pointer to memory object that is a copy of
-the template passed (if any). In addition, extra bytes may be
-allocated contiguously with the object. (This may be useful for
-variable size objects such as edge lists. See :hdref refid=regions..)
-
-Allocate() always returns a non-immortal object, even if the template is
-immortal. Therefore a non-NULL template must have a "flag" byte.
-
-If the template is NULL, then 'size' bytes are cleared to all NULLs.
-
-If the template is non-NULL, a new object is allocated in memory.
-It therefore seems logical that its reference count field should be
-set to 1. So, a nun-NULL template must also have a "references" field.
-PNM 3-26-91
-*/
-
-struct xobject *
-t1_Allocate(int size, /* number of bytes to allocate & initialize */
- pointer ptr, /* example structure to allocate */
- int extra) /* any extra uninitialized bytes needed contiguously */
-{
- register struct xobject *template = (struct xobject *)ptr;
- register struct xobject *r;
-
- /*
- * round up 'size' and 'extra' to be an integer number of 'long's:
- */
- size = (size + sizeof(long) - 1) & -(int)sizeof(long);
- extra = (extra + sizeof(long) - 1) & -(int)sizeof(long);
- if (size + extra <= 0)
- Abort("Non-positive allocate?");
- r = (struct xobject *) xiMalloc(size + extra);
-
- while (r == NULL) {
- if (!GimeSpace()) {
- Abort("We have REALLY run out of memory");
- }
- r = (struct xobject *) xiMalloc(size + extra);
- }
-
- /*
- * copy the template into the new memory:
- */
- if (template != NULL) {
- /* Added references count decrement if template is not permanent.
- This is for the case where Allocate is called by a Dupxxxx
- function, which was in turn called by Unique(). (PNM) */
- if (!ISPERMANENT(template->flag))
- --template->references;
- LONGCOPY(r, template, size);
- r->flag &= ~(ISPERMANENT(ON) | ISIMMORTAL(ON));
- /* added reference field 3-2-6-91 PNM */
- r->references = 1;
- }
- else {
- register char **p1;
-
- for (p1=(char **)r; size > 0; size -= sizeof(char *))
- *p1++ = NULL;
- }
-
- return(r);
-}
-
-/*
-:h3.Free() - Frees an Allocated Object
-
-This routine makes a sanity check to make sure the "type" field of the
-standard object structure has not been cleared. If the object is
-not a standard structure, then the macro "NonObjectFree" is available
-that does not perform this check.
-
-In either case, the object must not be the NULL pointer. This preserves
-portability, as the C system xiFree() will not always accept NULL.
-*/
-
-void
-Free(pointer objPtr)
-{
- struct xobject *obj = (struct xobject *)objPtr; /* structure to free */
-
- if (obj->type == INVALIDTYPE)
- Abort("Free of already freed object?");
- obj->type = INVALIDTYPE;
-
- xiFree((long *)obj);
-}
-
-/*
-:h3.Permanent() - Makes an Object Permanent
-
-Real simple--just set a flag. Every routine that consumes its objects
-(which is almost every user entry) must check this flag, and not consume
-the object if it is set.
-
-If a temporary object is made permanent, and there is more than one
-reference to it, we must first Copy() it, then set the ISPERMANENT
-flag. Note also that the reference count must be incremented when an
-object is changed from temporary to permanent (see the ISUNIQUE macro).
-
-Note that the purpose of this function is to convert an object into a
-permanent object:
- If it was permanent to begin with, we do nothing;
- If it was temporary and unique, we set the PERMANENT flag and increment
-the reference count;
- If it was temporary and nonunique, we must make a unique Copy(), set
-the PERMANENT flag, and set the reference count to 2. We must also
-decrement the original object's reference count, because what we have
-done is to change one of the old temporary handles to a permanent one.
-3-26-91 PNM
-*/
-
-struct xobject *
-t1_Permanent(pointer objPtr)
-{
- struct xobject *obj = (struct xobject *)objPtr; /* object to be made permanent */
-
- if ( (obj != NULL) && ( !(ISPERMANENT(obj->flag)) ) )
- {
- /* there is a non-NULL, temporary object to be made permanent.
- If there are multiple references to this object, first get
- a new COPY().
- Note also that we have to decrement the reference count if
- we do a Copy() here, because we are consuming the temporary
- argument passed, and returning a unique, permanent one.
- */
- if ( obj->references > 1)
- {
- obj = Copy(obj);
- }
- /* now set the permanent flag, and increment the reference
- count, since a temporary object has now become permanent. */
- obj->references++;
- obj->flag |= ISPERMANENT(ON);
- }
- return(obj);
-}
-
-#ifdef notused
-/*
-:h3.Temporary() - Undoes the Effect of "Permanent()"
-
-This simply resets the "ISPERMANENT" flag.
-
-If a permanent object is made temporary, and there is more than one reference
-to it, we must first Copy() it, then reset the ISPERMANENT flag. However,
-if the permanent object has obly one reference, we need only decrement the
-reference count ( and reset the flag).
-
-Note that this function, in the case of a PERMANENT argument, basically
-converts the PERMANENT handle to a TEMPORARY one. Thus, in the case of
-a nonunique, permanent argument passed, we not only make a Copy(),
-we also decrement the reference count, to reflect the fact that we have
-lost a permanent handle and gained a temporary one.
-PNM 3-2-6-91
-*/
-
-struct xobject *
-xiTemporary(pointer objPtr)
-{
- register struct xobject *obj
- = (struct xobject *)objPtr; /* object to be made permanent */
- if (obj != NULL) {
- /* if it's already temporary, there's nothing to do. */
- if ISPERMANENT(obj->flag)
- {
- /* if there are multiple references to this object, get a
- Copy we can safely alter. Recall that the reference count
- is incremented for permanent objects.
- Recall further that Copy returns an object with the
- same flag state and a reference count of 2 (for PERMANENT
- objects).
- Thus, regardless of whether or not we need to copy a
- permanent object, we still decrement its reference
- count and reset the flag.
- */
- if (obj->references != 2 || ISIMMORTAL(obj->flag))
- {
- /* not unique; consume handle, get a temporary Copy! */
- obj = Copy(obj);
- }
- /* else decrement the reference count (since it's going from
- permanent to temporary) and clear the flag. */
- else {
- obj->references--;
- obj->flag &= ~ISPERMANENT(ON);
- }
- }
- }
- return(obj);
-}
-#endif /* notused */
-
-/*
-:h3.Dup() - Duplicate an Object
-
-Dup will increment the reference count of an object, only making a
-Copy() if needed.
-Note that Dup() retains the state of the permanent flag.
-3-26-91 PNM
-*/
-
-
-struct xobject *
-t1_Dup(pointer objPtr)
-{
- register struct xobject *obj
- = (struct xobject *)objPtr; /* object to be duplicated */
- register char oldflag; /* copy of original object's flag byte */
-
- if (obj == NULL)
- return(NULL);
- /* An immortal object must be Copy'ed, so that we get a mortal
- copy of it, since we try not to destroy immortal objects. */
- if (ISIMMORTAL(obj->flag))
- return(Copy(obj));
-
- /* if incrementing the reference count doesn't cause the count
- to wrap, simply return the object with the count bumped. Note
- that the RefRoll macro increments the count to perform the
- rollover check, so we must decrement the count. */
- if (RefRoll(obj))
- return(obj);
-
- /* that didn't work out, so put the count back and call Copy(). */
- --obj->references;
- oldflag = obj->flag;
- obj = Copy(obj);
- if (ISPERMANENT(oldflag))
- obj = Permanent(obj);
- return(obj);
-}
-
-/*
-:h3.Copy() - Make a New Copy of an Object
-
-This is the generic Copy() where the object type is unknown. There
-are specific Copyxxx functions for known object types.
-
-Copy will create a NEW temporary object, and WILL NOT simply bump the
-reference count.
-
-Sometimes duplicating an object is just as simple as Allocating with it
-as a template. But other objects are complicated linked lists. So, we
-let each module provide us a routine (or macro) that duplicates the
-objects it knows about.
-*/
-
-struct xobject *
-t1_Copy(pointer objPtr)
-{
- register struct xobject *obj
- = (struct xobject *)objPtr; /* object to be Copy'ed */
- if (obj == NULL)
- return(NULL);
-
- if (ISPATHTYPE(obj->type))
- obj = (struct xobject *) CopyPath((struct segment *)obj);
- else
- switch (obj->type) {
- case SPACETYPE:
- obj = (struct xobject *)
- CopySpace((struct XYspace *)obj);
- break;
- case FONTTYPE:
- obj = (struct xobject *) CopyFont(obj); break;
- case REGIONTYPE:
- obj = (struct xobject *)
- CopyRegion((struct region *)obj);
- break;
- case PICTURETYPE:
- obj = (struct xobject *) CopyPicture(obj); break;
- case LINESTYLETYPE:
- obj = (struct xobject *) CopyLineStyle(obj); break;
- case STROKEPATHTYPE:
- obj = (struct xobject *) CopyStrokePath(obj); break;
- case CLUTTYPE:
- obj = (struct xobject *) CopyCLUT(obj); break;
- default:
- return(ArgErr("Copy: invalid object", obj, NULL));
- }
-
- return(obj);
-}
-
-/*
-:h3.Destroy() - Destroys an Object
-
-This can get complicated. Just like with Copy(), we let the experts
-handle it.
-*/
-struct xobject *
-Destroy(pointer objPtr)
-{
- register struct xobject *obj
- = (struct xobject *)objPtr; /* object to be destroyed */
- if (obj == NULL)
- return(NULL);
- if (ISIMMORTAL(obj->flag)) {
- return(NULL);
- }
- if (ISPATHTYPE(obj->type))
- KillPath((struct segment *)obj);
- else {
- switch (obj->type) {
- case REGIONTYPE:
- KillRegion((struct region *)obj);
- break;
- case SPACETYPE:
- KillSpace(obj);
- break;
- case LINESTYLETYPE:
- KillLineStyle(obj);
- break;
- case FONTTYPE:
- KillFont(obj);
- break;
- case PICTURETYPE:
- KillPicture(obj);
- break;
- case STROKEPATHTYPE:
- KillStrokePath(obj);
- break;
- case CLUTTYPE:
- KillCLUT(obj);
- break;
- default:
- return(ArgErr("Destroy: invalid object", obj, NULL));
- }
- }
- return(NULL);
-}
-/*
-:h2.Generally Useful Macros
-
-:h3.FOLLOWING() - Macro to Point to the Data Following a Structure
-
-There are several places in TYPE1IMAGER where we will allocate variable
-data that belongs to a structure immediately after that structure.
-This is a performance technique, because it reduces the number of
-trips we have to take through xiMalloc() and xiFree(). It turns out C has
-a very convenient way to point past a structure--if 'p' is a pointer
-to a structure, 'p+1' is a pointer to the data after it. This
-behavior of C is somewhat startling and somewhat hard to follow, if
-you are not used to it, so we define a macro to point to the data
-following a structure:
-*/
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.TYPECHECK() - Verify the Type of an Argument
-
-This macro tests the type of an argument. If the test fails, it consumes
-any other arguments as necessary and causes the imbedding routine to
-return the value 'whenBAD'.
-
-Note that the consumeables list should be an argument list itself, for
-example (0) or (2,A,B). See :hdref refid=consume. below.
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.ARGCHECK() - Perform an Arbitrary Check on an Argument
-
-This macro is a generalization of TYPECHECK to take an arbitrary
-predicate. If the error occurs (i.e., the predicate is true), the
-arbitrary message 'msg' is returned.
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.TYPENULLCHECK() - Extension of TYPECHECK() for NULL arguments
-
-Many routines allow NULLs to be passed as arguments. 'whenBAD' will
-be returned in this case, too.
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.MAKECONSUME() - Create a "Consume"-type Macro
-
-Consuming an object means destroying it if it is not permanent. This
-logic is so common to all the routines, that it is immortalized in this
-macro. For example, ConsumePath(p) can be simply defined as
-MAKECONSUME(p,KillPath(p)). In effect, this macro operates on a
-meta-level.
-:i1/consuming objects/
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-:h3.MAKEUNIQUE() - Create a "Unique"-type Macro
-
-Many routines are written to modify their arguments in place. Thus,
-they want to insure that they duplicate an object if it is permanent.
-This is called making an object "unique". For example, UniquePath(p)
-can be simply defined as MAKEUNIQUE(p,DupPath(p)).
-:i1/unique objects/
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-An object is unique (and directly alterable) if there is only one
-reference to it, and it is not permanent (in which case we increment
-the reference count, so we don't have to check the permanent bit).
-3-26-91 PNM
-
-Note the rules for making a unique object:
-&drawing.
- IF (obj->references = 1) return(obj);
- ELSE (references > 1)
- IF (ISPERMANENT(obj->flag)) return(Dupxxx(obj));
- ELSE (nonunique, temporary object!)
- obj->references--; return(Dupxxx(obj));
-&edrawing.
-If we must make a Copy of a nonunique, temporary object, we decrement
-reference count of the original object!
-*/
-
-/*
-:h3.Unique() - Make a Unique Object
-
-Here is a generic 'Unique' function if the object type is not known.
-Why didn't we build it with the MAKEUNIQUE macro, you ask? Well, we
-used to, but there is at least one damn compiler in the world that
-raises errors if the types of an "(a) ? b : c" expression do not match.
-Also, when we changed Dup() to retain the permanent/temporary flag, we
-wanted to make sure "Unique" always returned a temporary object.
-
-Note that we cannot use Dup() to create a copy of the object in question,
-because Dup() may simply bump the reference count, and not return a
-unique copy to us. That is why we use t1_Copy().
-
-The purpose of this function is to make sure we have a copy of an object
-that we can safely alter:
-:ol.
-:li.If we have a unique, temporary object, we simply return the argument.
-:li.If we have a nonunique, temporary object, we have to make a new copy
-of it, and decrement the reference count of the original object, to reflect
-the fact that we traded temporary handles.
-:li.If we have a permanent object, we make a temporary copy of it, but
-we do not decrement the reference count of the original permanent object,
-because permanent objects, by definition, are persistent. 3-2-6-91 PNM
-:eol.
-*/
-
-struct xobject *
-t1_Unique(pointer objPtr)
-{
- struct xobject *obj = (struct xobject *)objPtr;
-
- /* if the original object is not already unique, make a unique
- copy...Note also that if the object was not permanent, we must
- consume the old handle! 3-26-91 PNM
- NOTE : consumption of the old handle moved to Allocate. 4-18-91 */
- if (!obj || obj->references == 1)
- return(obj);
-
- obj = Copy(obj);
- /* and make sure we return a temporary object ! */
- if (ISPERMANENT(obj->flag))
- {
- obj->flag &= ~ISPERMANENT(ON);
- obj->references--;
- }
- return(obj);
-}
-
-
-/*
-:h2.Initialization, Error, and Debug Routines
-
-:h3 id=debugvar.Declarations for Debug Purposes
-
-We declare all the debug flags here. Some link editors make the not
-unreasonable restriction that only one module may declare and
-initialize global variables; all the rest must declare the variable
-'extern'. This is logical, but is somewhat awkward to implement with
-C include files. We solve the problem by temporarily making the name
-'extern' a null name if GLOBALS is defined. (GLOBALS is only defined
-in this OBJECTS module.) Since 'externs' can't be initialized, we
-have to handle that with #defines too.
-:i1/GLOBALS (&#define.)/
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-static char *ErrorMessage = NULL;
-
-/*
-:h3.Pragmatics() - Set/Reset Debug Flags
-
-We provide a controlled way for the TYPE1IMAGER user to set and reset
-our debugging and tracing:
-*/
-void
-Pragmatics(char *username, /* name of the flag */
- int value) /* value to set it to */
-{
- register char *p; /* temporary loop variable */
-#define NAMESIZE 40
- char name[NAMESIZE]; /* buffer to store my copy of 'username' */
-
- if (strlen(username) >= (unsigned)NAMESIZE)
- Abort("Pragmatics name too large");
- strcpy(name, username);
- for (p = name; *p != '\0'; p++)
- *p = toupper(*p);
-
- if (!strcmp(name, "ALL"))
- MustTraceCalls = InternalTrace = /* MustCrash = */
- LineIOTrace = value;
-
- else if (!strcmp(name, "LINEIOTRACE"))
- LineIOTrace = value;
-
- else if (!strcmp(name, "TRACECALLS"))
- MustTraceCalls = value;
-
- else if (!strcmp(name, "CHECKARGS"))
- MustCheckArgs = value;
-
- else if (!strcmp(name, "PROCESSHINTS"))
- ProcessHints = value;
-
- else if (!strcmp(name, "SAVEFONTPATHS"))
- SaveFontPaths = value;
-
- else if (!strcmp(name, "CRASTERCOMPRESSIONTYPE"))
- CRASTERCompressionType = value;
-
- else if (!strcmp(name, "CRASHONUSERERROR"))
- MustCrash = value;
-
- else if (!strcmp(name, "DEBUG"))
- StrokeDebug = SpaceDebug = PathDebug = ConicDebug = LineDebug =
- RegionDebug = MemoryDebug = FontDebug =
- HintDebug = ImageDebug = OffPageDebug = value;
-
- else if (!strcmp(name, "CONICDEBUG"))
- ConicDebug = value;
-
- else if (!strcmp(name, "LINEDEBUG"))
- LineDebug = value;
-
- else if (!strcmp(name, "REGIONDEBUG"))
- RegionDebug = value;
-
- else if (!strcmp(name, "PATHDEBUG"))
- PathDebug = value;
-
- else if (!strcmp(name, "SPACEDEBUG"))
- SpaceDebug = value;
-
- else if (!strcmp(name, "STROKEDEBUG"))
- StrokeDebug = value;
-
- else if (!strcmp(name, "MEMORYDEBUG"))
- MemoryDebug = value;
-
- else if (!strcmp(name, "FONTDEBUG"))
- FontDebug = value;
-
- else if (!strcmp(name, "HINTDEBUG"))
- HintDebug = value;
-
- else if (!strcmp(name, "IMAGEDEBUG"))
- ImageDebug = value;
-
- else if (!strcmp(name, "OFFPAGEDEBUG"))
- OffPageDebug = value;
-
-#ifdef MC68000
-/*
-The following pragmatics flag turns on or off instruction histograming
-for performance analysis. It is only defined in the Delta card
-environment.
-*/
- else if (!strcmp(name, "PROFILE")) {
- if (value)
- StartProfile();
- else
- StopProfile();
- }
-#endif
- else if (!strcmp(name, "FLUSHCACHE")) {
-#ifdef notdef
- while (GimeSpace()) { ; }
-#endif
- }
-
- else if (!strcmp(name, "CACHEDCHARS"))
- CachedChars = (value <= 0) ? 1 : value;
-
- else if (!strcmp(name, "CACHEDFONTS"))
- CachedFonts = (value <= 0) ? 1 : value;
-
- else if (!strcmp(name, "CACHEBLIMIT"))
- CacheBLimit = value;
-
- else if (!strcmp(name, "CONTINUITY"))
- Continuity = value;
-
-
- else {
- printf("Pragmatics flag = '%s'\n", name);
- ArgErr("Pragmatics: flag not known", NULL, NULL);
- }
- return;
-}
-
-/*
-:h3.Consume() - Consume a List of Arguments
-
-This general purpose routine is provided in the case where the object
-type(s) to be consumed are unknown or not yet verified, and/or it is
-not known whether the object is permanent.
-
-If the type of the argument is known, it is faster to directly consume
-that type, for example, ConsumeRegion() or ConsumePath(). Furthermore,
-if it is already known that the object is temporary, it is faster to
-just kill it rather than consume it, for example, KillSpace().
-*/
-
-void
-Consume(int n, ...)
-{
- struct xobject *obj;
- va_list ap;
-
- va_start(ap, n);
-
- while (n-- > 0) {
- obj = va_arg(ap, struct xobject *);
- if (obj != NULL && !ISPERMANENT(obj->flag))
- Destroy(obj);
- }
-}
-
-/*
-:h3.TypeErr() - Handles "Invalid Object Type" Errors
-*/
-
-struct xobject *
-TypeErr(char *name, /* Name of routine (for error message) */
- pointer objPtr, /* Object in error */
- int expect, /* type expected */
- pointer retPtr) /* object to return to caller */
-{
- struct xobject *obj = (struct xobject *)objPtr;
- struct xobject *ret = (struct xobject *)retPtr;
- /*
- * This buffer must be large enough to hold 'name' plus
- * two of the largest strings that can be returned by TypeFmt.
- * The largest value of 'name' is currently 9 ("ClosePath")
- * and the longest strings in TypeFmt are 30 characters.
- */
- static char typemsg[115];
-
- if (MustCrash)
- LineIOTrace = TRUE;
-
- sprintf(typemsg, "Wrong object type in %s. Expected %s; was %s.\n",
- name, TypeFmt(expect), TypeFmt(obj->type));
-
- if (MustCrash)
- Abort("Terminating because of CrashOnUserError...");
- else
- ErrorMessage = typemsg;
-
-/* changed ISPERMANENT to ret->references > 1 3-26-91 PNM */
- if (ret != NULL && (ret->references > 1))
- ret = Dup(ret);
- return(ret);
-}
-
-/*
-:h4.TypeFmt() - Returns Pointer to English Name of Object Type
-
-This is a subroutine of TypeErr().
-*/
-
-static char *
-TypeFmt(int type) /* type field */
-{
- char *r;
-
- if (ISPATHTYPE(type))
- if (type == TEXTTYPE)
- r = "path or region (from TextPath)";
- else
- r = "path";
- else {
- switch (type) {
- case INVALIDTYPE:
- r = "INVALID (previously consumed?)";
- break;
- case REGIONTYPE:
- r = "region";
- break;
- case SPACETYPE:
- r = "XYspace";
- break;
- case LINESTYLETYPE:
- r = "linestyle";
- break;
- case FONTTYPE:
- r = "font";
- break;
- case PICTURETYPE:
- r = "picture";
- break;
- case STROKEPATHTYPE:
- r = "path (from StrokePath)";
- break;
- default:
- r = "UNKNOWN";
- break;
- }
- }
- return(r);
-}
-/*
-:h3.ArgErr() - Invalid Argument Passed to a Routine
-
-A common routine to report argument errors. It is usually called
-is returned to the caller in case MustCrash is FALSE and ArgErr
-returns to its caller.
-*/
-
-struct xobject *
-ArgErr(char *string, /* description of error */
- pointer objPtr, /* object, if any, that was in error */
- pointer retPtr) /* object returned to caller or NULL */
-{
- struct xobject *ret = (struct xobject *)retPtr;
-
- if (MustCrash)
- LineIOTrace = TRUE;
-
- if (MustCrash)
- Abort("Terminating because of CrashOnUserError...");
- else
- ErrorMessage = string;
- return(ret);
-}
-
-/*
-:h3.Abort() - Crash Due to Error
-
-Defined in objects.h to be FatalError(), the server's abort routine.
-*/
-
-/*
-:h3.REAL Miscellaneous Stuff
-
-:h4.ErrorMsg() - Return the User an Error Message
-*/
-
-char *
-ErrorMsg(void)
-{
- register char *r;
-
- r = ErrorMessage;
- ErrorMessage = NULL;
- return(r);
-}
-
-/*
-:h4.InitImager() - Initialize TYPE1IMAGER
-
-We check that a short is 16 bits and a long 32 bits; we have made
-those assumptions elsewhere in the code. (This is almost a C standard,
-anyway.) Note that TYPE1IMAGER makes no assumptions about the size of an
-'int'!
-:i1/portability assumptions/
-*/
-
-void
-InitImager(void)
-{
-
-/* Check to see if we have been using our own malloc. If so,*/
-/* Undef malloc so that we can get to the system call. */
-/* All other calls to malloc are defined to xiMalloc. */
-
-
-/* if (sizeof(short) != 2 || sizeof(INT32) != 4)
- Abort("Fundamental TYPE1IMAGER assumptions invalid in this port");
-*/
- InitSpaces();
- InitFonts();
- InitFiles();
-/*
-In some environments, constants and/or exception handling need to be
-*/
- LibInit();
-}
-/*
-:h4.TermImager() - Terminate TYPE1IMAGER
-
-This only makes sense in a server environment; true TYPE1IMAGER needs do
-nothing.
-*/
-void
-TermImager(void)
-{
- return;
-}
-#ifdef notused
-/*
-:h4.reportusage() - A Stub to Get a Clean Link with Portable PMP
-*/
-void
-reportusage(void)
-{
- return;
-}
-#endif
diff --git a/nx-X11/lib/font/Type1/objects.h b/nx-X11/lib/font/Type1/objects.h
deleted file mode 100644
index 7552f98d9..000000000
--- a/nx-X11/lib/font/Type1/objects.h
+++ /dev/null
@@ -1,354 +0,0 @@
-/* $Xorg: objects.h,v 1.3 2000/08/17 19:46:31 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/objects.h,v 1.14tsi Exp $ */
-/*SHARED*/
-
-/*END SHARED*/
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#include <X11/Xdefs.h>
-#include <X11/Xfuncproto.h>
-#ifndef FONTMODULE
-#include <stdlib.h>
-#endif
-/*SHARED*/
-
-#define Permanent(obj) t1_Permanent(obj)
-#ifdef notused
-#define Temporary(obj) t1_Temporary(obj)
-#endif
-#define Destroy(obj) t1_Destroy(obj)
-#define Dup(obj) t1_Dup(obj)
-#define InitImager t1_InitImager
-#define TermImager t1_TermImager
-#define Pragmatics(f,v) t1_Pragmatics(f,v)
-#define ErrorMsg t1_ErrorMsg
-
-/* make an object permanent */
-extern struct xobject *t1_Permanent ( pointer obj );
-
-#ifdef notused
-/* make an object temporary */
-extern struct xobject *t1_Temporary( pointer obj );
-#endif
-
-/* destroy an object */
-extern struct xobject *t1_Destroy ( pointer obj );
-
-/* duplicate an object */
-extern struct xobject *t1_Dup ( pointer obj );
-
-
-extern void t1_InitImager ( void ); /* initialize TYPE1IMAGER */
-extern void t1_TermImager ( void ); /* terminate TYPE1IMAGER */
-/* set debug flags, etc. */
-extern void t1_Pragmatics ( char *username, int value );
-
-/* return last TYPE1IMAGER error message */
-extern char *t1_ErrorMsg ( void );
-
-/*END SHARED*/
-/*SHARED*/
-extern void xiFree ( long *addr );
-extern char *xiMalloc ( unsigned Size );
-extern void addmemory ( long *addr, long size );
-extern void delmemory ( void );
-
-#ifndef OS_H
-extern void FatalError(const char *f, ...)
-#if defined(__GNUC__) && \
- ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ > 4)))
-__attribute((noreturn))
-#endif
-;
-
-extern void ErrorF(const char *f, ...);
-#endif
-
-#define Abort(line) FatalError(line)
-#define Allocate(n,t,s) t1_Allocate(n,t,s)
-#define Free(obj) t1_Free(obj)
-#define NonObjectFree(a) xiFree((long *)(a))
-#define Consume t1_Consume
-#define ArgErr(s,o,r) t1_ArgErr(s,o,r)
-#define TypeErr(n,o,e,r) t1_TypeErr(n,o,e,r)
-#define Copy(obj) t1_Copy(obj)
-#define Unique(obj) t1_Unique(obj)
-
-/* allocate memory */
-extern struct xobject *t1_Allocate( int size, pointer template,
- int extra );
-
-/* free memory */
-extern void t1_Free ( pointer obj );
-
-/* make a unique temporary copy of an object */
-extern struct xobject *t1_Unique ( pointer obj );
-
-/* handle argument errors */
-extern struct xobject *t1_ArgErr ( char *string, pointer obj, pointer ret );
-
-/* handle 'bad type' argument errors */
-extern struct xobject *t1_TypeErr ( char *name, pointer obj,
- int expect, pointer ret );
-
-/* consume a variable number of arguments */
-extern void t1_Consume ( int n, ... );
-
-/* make a new copy, not reference bump PNM */
-extern struct xobject *t1_Copy ( pointer obj );
-
-
-/*END SHARED*/
-/*SHARED*/
-
-#define ON (~0) /* all bits on */
-#ifndef FALSE
-#define FALSE 0 /* handy zero value */
-#endif
-#ifndef TRUE
-#define TRUE 1 /* handy non-zero value */
-#endif
-
-#ifndef NULL
-#include <stddef.h>
-/*
-The NULL pointer is system specific. (Most systems, however, use 0.)
-TYPE1IMAGER could have its own NULL, independent of the rest of the system,
-were it not for malloc(). The system call malloc() returns NULL when
-out of memory.
-:i1/portibility assumptions/
-*/
-#endif
-
-#ifndef MIN
-#define MIN(a,b) (((a)<(b)) ? a : b)
-#endif
-#ifndef MAX
-#define MAX(a,b) (((a)>(b)) ? a : b)
-#endif
-#ifndef ABS
-#define ABS(a) (((a)>=0)?(a):-(a))
-#endif
-
-/*END SHARED*/
-/*SHARED*/
-
-struct xobject {
- char type; /* encoded type of object */
- unsigned char flag; /* flag byte for temporary object characteristics*/
- short references; /* count of pointers to this object
- (plus 1 for permanent objects) PNM */
-} ;
-
-/*END SHARED*/
-/*SHARED*/
-
-#define XOBJ_COMMON char type; unsigned char flag; short references;
-
-/*END SHARED*/
-/*SHARED*/
-
-
-#define INVALIDTYPE 0
-#define FONTTYPE 1
-#define REGIONTYPE 3
-#define PICTURETYPE 4
-#define SPACETYPE 5
-#define LINESTYLETYPE 6
-#define EDGETYPE 7
-#define STROKEPATHTYPE 8
-#define CLUTTYPE 9
-
-#define ISPATHTYPE(type) ((type)&0x10) /* all path segments have this bit on */
-#define LINETYPE (0+ISPATHTYPE(ON))
-#define CONICTYPE (1+ISPATHTYPE(ON))
-#define BEZIERTYPE (2+ISPATHTYPE(ON))
-#define HINTTYPE (3+ISPATHTYPE(ON))
-
-#define MOVETYPE (5+ISPATHTYPE(ON))
-#define TEXTTYPE (6+ISPATHTYPE(ON))
-
-/*END SHARED*/
-/*SHARED*/
-
-#define ISPERMANENT(flag) ((flag)&0x01)
-#define ISIMMORTAL(flag) ((flag)&0x02)
-
-/*END SHARED*/
-/*SHARED*/
-
-#define PRESERVE(obj) if (!ISPERMANENT((obj)->flag)) \
- (obj)->references++;
-
-/*END SHARED*/
-/*SHARED*/
-
-#define LONGCOPY(dest,source,bytes) { \
- register long *p1 = (long *)dest; register long *p2 = (long *)source; \
- register int count = (bytes) / sizeof(long); \
- while (--count >= 0) *p1++ = *p2++; }
-
-
-/*END SHARED*/
-/*SHARED*/
-
-#define FOLLOWING(p) ((p)+1)
-
-/*END SHARED*/
-/*SHARED*/
-
-#define TYPECHECK(name, obj, expect, whenBAD, consumables, rettype) { \
- if (obj->type != expect) { \
- (Consume)consumables; \
- return((rettype)TypeErr(name, obj, expect, whenBAD)); \
- } \
-}
-
-/*END SHARED*/
-/*SHARED*/
-
-#define ARGCHECK(test,msg,obj,whenBAD,consumables,rettype) { \
- if (test) { \
- (Consume)consumables; \
- return((rettype)ArgErr(msg, obj, whenBAD)); \
- } \
-}
-
-/*END SHARED*/
-/*SHARED*/
-
-/* Changed use of Dup() below to Temporary(Copy()) because Dup() does not
- necessarily return a Unique Copy anymore! 3-26-91 */
-#define TYPENULLCHECK(name, obj, expect, whenBAD, consumables,rettype) \
- if (obj == NULL) { \
- (Consume)consumables; \
- if (whenBAD != NULL && ISPERMANENT(whenBAD->flag)) \
- return((rettype)Temporary(Copy(whenBAD))); \
- else return((rettype)whenBAD); \
- } else { \
- if (obj->type != expect) { \
- (Consume)consumables; \
- return((rettype)TypeErr(name, obj, expect, whenBAD)); \
- } \
- }
-/*END SHARED*/
-/*SHARED*/
-
-#define MAKECONSUME(obj,stmt) { if (!ISPERMANENT(obj->flag)) stmt; }
-
-/*END SHARED*/
-/*SHARED*/
-
-#define MAKEUNIQUE(obj,stmt) ( ( (obj)->references > 1 ) ? stmt : obj )
-
-/*END SHARED*/
-/*SHARED*/
-
-#ifdef GLOBALS
-
-#define extern
-#define INITIALIZED(value) = value
-
-#else
-
-#define INITIALIZED(value)
-
-#endif
-
-extern char MustCheckArgs INITIALIZED(TRUE);
-extern char MustTraceCalls INITIALIZED(FALSE);
-#if XFONT_CID
-extern char MustCrash INITIALIZED(FALSE);
-#else
-extern char MustCrash INITIALIZED(TRUE);
-#endif
-extern char InternalTrace INITIALIZED(TRUE);
-extern char LineIOTrace INITIALIZED(TRUE);
-
-extern char ProcessHints INITIALIZED(TRUE);
-
-extern char SaveFontPaths INITIALIZED(TRUE);
-
-extern short CRASTERCompressionType INITIALIZED(1);
-
-extern char ConicDebug INITIALIZED(0);
-extern char LineDebug INITIALIZED(0);
-extern char RegionDebug INITIALIZED(0);
-extern char PathDebug INITIALIZED(0);
-extern char FontDebug INITIALIZED(0);
-extern char SpaceDebug INITIALIZED(0);
-extern char StrokeDebug INITIALIZED(0);
-extern char MemoryDebug INITIALIZED(0);
-extern char HintDebug INITIALIZED(0);
-extern char ImageDebug INITIALIZED(0);
-extern char OffPageDebug INITIALIZED(0);
-
-extern short CachedChars INITIALIZED(0x7FFF);
-extern short CachedFonts INITIALIZED(0x7FFF);
-extern int CacheBLimit INITIALIZED(12500);
-extern char Continuity INITIALIZED(2);
-
-#ifdef extern
-#undef extern
-#endif
-
-/*
-We define other routines formatting parameters
-*/
-#define DumpArea(area) t1_DumpArea(area)
-#define DumpText(text) t1_DumpText(text)
-#define DumpPath(path) t1_DumpPath(path)
-#define DumpSpace(space) t1_DumpSpace(space)
-#define DumpEdges(e) t1_DumpEdges(e)
-#define FormatFP(s,p) t1_FormatFP(s,p)
-
-/* dump a textpath structure */
-extern void t1_DumpText(void);
-
-/*END SHARED*/
diff --git a/nx-X11/lib/font/Type1/paths.c b/nx-X11/lib/font/Type1/paths.c
deleted file mode 100644
index 1ab25ecef..000000000
--- a/nx-X11/lib/font/Type1/paths.c
+++ /dev/null
@@ -1,1406 +0,0 @@
-/* $Xorg: paths.c,v 1.3 2000/08/17 19:46:31 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/paths.c,v 1.7tsi Exp $ */
-
- /* PATHS CWEB V0021 ******** */
-/*
-:h1 id=paths.PATHS Module - Path Operator Handler
-
-This is the module that is responsible for building and transforming
-path lists.
-
-&author. Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com)
-
-
-:h3.Include Files
-
-The included files are:
-*/
-
- /* after the system includes (dsr) */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef FONTMODULE
-# include "os.h"
-#endif
-#include "objects.h"
-#include "spaces.h"
-#include "paths.h"
-#include "regions.h" /* understands about Union */
-#include "fonts.h" /* understands about TEXTTYPEs */
-#include "pictures.h" /* understands about handles */
-#include "strokes.h" /* understands how to coerce stroke paths */
-#include "trig.h"
-
-
-/*
-:h3.Routines Available to the TYPE1IMAGER User
-
-The PATHS routines that are made available to the outside user are:
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.Functions Provided to Other Modules
-
-The path routines that are made available to other TYPE1IMAGER modules
-are defined here:
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-NOTE: because of the casts put in the macros for Loc, ArcCA, Conic,
-RoundConic, PathSegment, and JoinSegment, we cannot use the macro names
-when the functions are actually defined. We have to use the unique
-names with their unique first two characters. Thus, if anyone in the
-future ever decided to change the first two characters, it would not be
-enough just to change the macro (as it would for most other functions).
-He would have to also change the function definition.
-*/
-/*
-:h3.Macros Provided to Other Modules
-
-The CONCAT macro is defined here and used in the STROKES module. See
-:hdref refid=pathmac..
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-:h2.Path Segment Structures
-
-A path is represented as a linked list of the following structure:
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-When 'link' is NULL, we are at the last segment in the path (surprise!).
-
-'last' is only non-NULL on the first segment of a path,
-for all the other segments 'last' == NULL. We test for a non-NULL
-'last' (ISPATHANCHOR predicate) when we are given an alleged path
-to make sure the user is not trying to pull a fast one on us.
-
-A path may be a collection of disjoint paths. Every break in the
-disjoint path is represented by a MOVETYPE segment.
-
-Closed paths are discussed in :hdref refid=close..
-
-:h3.CopyPath() - Physically Duplicating a Path
-
-This simple function illustrates moving through the path linked list.
-Duplicating a segment just involves making a copy of it, except for
-text, which has some auxilliary things involved. We don't feel
-competent to duplicate text in this module, so we call someone who
-knows how (in the FONTS module).
-*/
-struct segment *
-CopyPath(struct segment *p0) /* path to duplicate */
-{
- register struct segment *p,*n = NULL,*last = NULL,*anchor;
-
- for (p = p0, anchor = NULL; p != NULL; p = p->link) {
-
- ARGCHECK((!ISPATHTYPE(p->type) || (p != p0 && p->last != NULL)),
- "CopyPath: invalid segment", p, NULL, (0), struct segment *);
-
- if (p->type == TEXTTYPE)
- n = (struct segment *) CopyText(p);
- else
- n = (struct segment *)Allocate(p->size, p, 0);
- n->last = NULL;
- if (anchor == NULL)
- anchor = n;
- else
- last->link = n;
- last = n;
- }
-/*
-At this point we have a chain of newly allocated segments hanging off
-'anchor'. We need to make sure the first segment points to the last:
-*/
- if (anchor != NULL) {
- n->link = NULL;
- anchor->last = n;
- }
-
- return(anchor);
-}
-/*
-:h3.KillPath() - Destroying a Path
-
-Destroying a path is simply a matter of freeing each segment in the
-linked list. Again, we let the experts handle text.
-*/
-void
-KillPath(struct segment *p) /* path to destroy */
-{
- register struct segment *linkp; /* temp register holding next segment*/
-
- /* return conditional based on reference count 3-26-91 PNM */
- if ( (--(p->references) > 1) ||
- ( (p->references == 1) && !ISPERMANENT(p->flag) ) )
- return;
-
- while (p != NULL) {
- if (!ISPATHTYPE(p->type)) {
- ArgErr("KillPath: bad segment", p, NULL);
- return;
- }
- linkp = p->link;
- if (p->type == TEXTTYPE)
- KillText(p);
- else
- Free(p);
- p = linkp;
- }
-}
-
-/*
-:h2 id=location."location" Objects
-
-The TYPE1IMAGER user creates and destroys objects of type "location". These
-objects locate points for the primitive path operators. We play a trick
-here and store these objects in the same "segment" structure used for
-paths, with a type field == MOVETYPE.
-
-This allows the Line() operator, for example, to be very trivial:
-It merely stamps its input structure as a LINETYPE and returns it to the
-caller--assuming, of course, the input structure was not permanent (as
-it usually isn't).
-
-:h3.The "movesegment" Template Structure
-
-This template is used as a generic segment structure for Allocate:
-*/
-
-/* added reference field 1 to temporary template below 3-26-91 PNM */
-static struct segment movetemplate = { MOVETYPE, 0, 1, sizeof(struct segment), 0,
- NULL, NULL, {0, 0} };
-/*
-:h3.Loc() - Create an "Invisible Line" Between (0,0) and a Point
-
-*/
-
-struct segment *
-t1_Loc(struct XYspace *S, /* coordinate space to interpret X,Y */
- double x, double y) /* destination point */
-{
- register struct segment *r;
-
-
- r = (struct segment *)Allocate(sizeof(struct segment), &movetemplate, 0);
- TYPECHECK("Loc", S, SPACETYPE, r, (0), struct segment *);
-
- r->last = r;
- r->context = S->context;
- (*S->convert)(&r->dest, S, x, y);
- ConsumeSpace(S);
- return(r);
-}
-/*
-:h3.ILoc() - Loc() With Integer Arguments
-
-*/
-struct segment *
-ILoc(struct XYspace *S, /* coordinate space to interpret X,Y */
- int x, int y) /* destination point */
-{
- register struct segment *r;
-
- r = (struct segment *)Allocate(sizeof(struct segment), &movetemplate, 0);
- TYPECHECK("Loc", S, SPACETYPE, r, (0), struct segment *);
-
- r->last = r;
- r->context = S->context;
- (*S->iconvert)(&r->dest, S, (long) x, (long) y);
- ConsumeSpace(S);
- return(r);
-}
-
-/*
-:h3.SubLoc() - Vector Subtraction of Two Locition Objects
-
-This user operator subtracts two location objects, yielding a new
-location object that is the result.
-
-The symmetrical function AddLoc() is totally redundent with Join(),
-so it is not provided.
-*/
-
-struct segment *
-SubLoc(struct segment *p1, struct segment *p2)
-{
- ARGCHECK(!ISLOCATION(p1), "SubLoc: bad first arg", p1, NULL, (0), struct segment *);
- ARGCHECK(!ISLOCATION(p2), "SubLoc: bad second arg", p2, NULL, (0), struct segment *);
- p1 = UniquePath(p1);
- p1->dest.x -= p2->dest.x;
- p1->dest.y -= p2->dest.y;
- ConsumePath(p2);
- return(p1);
-}
-
-/*
-:h2.Straight Line Segments
-
-:h3.PathSegment() - Create a Generic Path Segment
-
-Many routines need a LINETYPE or MOVETYPE path segment, but do not
-want to go through the external user's interface, because, for example,
-they already know the "fractpel" destination of the segment and the
-conversion is unnecessary. PathSegment() is an internal routine
-provided to the rest of TYPE1IMAGER for handling these cases.
-*/
-
-struct segment *
-t1_PathSegment(int type, /* LINETYPE or MOVETYPE */
- fractpel x, fractpel y) /* where to go to, if known */
-{
- register struct segment *r; /* newly created segment */
-
- r = (struct segment *)Allocate(sizeof(struct segment), &movetemplate, 0);
- r->type = type;
- r->last = r; /* last points to itself for singleton */
- r->dest.x = x;
- r->dest.y = y;
- return(r);
-}
-/*
-:h3.Line() - Create a Line Segment Between (0,0) and a Point P
-
-This involves just creating and filling out a segment structure:
-*/
-struct segment *
-Line(struct segment *P) /* relevant coordinate space */
-{
- ARGCHECK(!ISLOCATION(P), "Line: arg not a location", P, NULL, (0), struct segment *);
-
- P = UniquePath(P);
- P->type = LINETYPE;
- return(P);
-}
-/*
-:h2.Curved Path Segments
-
-We need more points to describe curves. So, the structures for curved
-path segments are slightly different. The first part is identical;
-the curved structures are larger with the extra points on the end.
-
-:h3.Bezier Segment Structure
-
-We support third order Bezier curves. They are specified with four
-control points A, B, C, and D. The curve starts at A with slope AB
-and ends at D with slope CD. The curvature at the point A is inversely
-related to the length |AB|, and the curvature at the point D is
-inversely related to the length |CD|. Point A is always point (0,0).
-
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.Bezier() - Generate a Bezier Segment
-
-This is just a simple matter of filling out a 'beziersegment' structure:
-*/
-
-struct beziersegment *
-Bezier(struct segment *B, /* second control point */
- struct segment *C, /* third control point */
- struct segment *D) /* fourth control point (ending point) */
-{
-/* added reference field of 1 to temporary template below 3-26-91 PNM */
- static struct beziersegment template =
- { BEZIERTYPE, 0, 1, sizeof(struct beziersegment), 0,
- NULL, NULL, { 0, 0 }, { 0, 0 }, { 0, 0 } };
-
- register struct beziersegment *r; /* output segment */
-
- ARGCHECK(!ISLOCATION(B), "Bezier: bad B", B, NULL, (2,C,D), struct beziersegment *);
- ARGCHECK(!ISLOCATION(C), "Bezier: bad C", C, NULL, (2,B,D), struct beziersegment *);
- ARGCHECK(!ISLOCATION(D), "Bezier: bad D", D, NULL, (2,B,C), struct beziersegment *);
-
- r = (struct beziersegment *)Allocate(sizeof(struct beziersegment), &template, 0);
- r->last = (struct segment *) r;
- r->dest.x = D->dest.x;
- r->dest.y = D->dest.y;
- r->B.x = B->dest.x;
- r->B.y = B->dest.y;
- r->C.x = C->dest.x;
- r->C.y = C->dest.y;
-
- ConsumePath(B);
- ConsumePath(C);
- ConsumePath(D);
- return(r);
-}
-
-/*
-:h2.Font "Hint" Segments
-
-:h3.Hint() - A Font 'Hint' Segment
-
-This is temporary code while we experiment with hints.
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-struct hintsegment *
-Hint(struct XYspace *S, float ref, float width,
- char orientation, char hinttype, char adjusttype, char direction,
- int label)
-{
-/* added reference field of 1 to hintsegment template below 3-26-91 PNM */
- static struct hintsegment template = { HINTTYPE, 0, 1, sizeof(struct hintsegment), 0,
- NULL, NULL, { 0, 0 }, { 0, 0 }, { 0, 0 },
- ' ', ' ', ' ', ' ', 0};
-
- register struct hintsegment *r;
-
- r = (struct hintsegment *)Allocate(sizeof(struct hintsegment), &template, 0);
-
- r->orientation = orientation;
- if (width == 0.0) width = 1.0;
-
- if (orientation == 'h') {
- (*S->convert)(&r->ref, S, 0.0, ref);
- (*S->convert)(&r->width, S, 0.0, width);
- }
- else if (orientation == 'v') {
- (*S->convert)(&r->ref, S, ref, 0.0);
- (*S->convert)(&r->width, S, width, 0.0);
- }
- else
- return((struct hintsegment *)ArgErr("Hint: orient not 'h' or 'v'", NULL, NULL));
- if (r->width.x < 0) r->width.x = - r->width.x;
- if (r->width.y < 0) r->width.y = - r->width.y;
- r->hinttype = hinttype;
- r->adjusttype = adjusttype;
- r->direction = direction;
- r->label = label;
- r->last = (struct segment *) r;
- ConsumeSpace(S);
- return(r);
-}
-
-/*
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-POP removes the first segment in a path 'p' and Frees it. 'p' is left
-pointing to the end of the path:
-*/
-#define POP(p) \
- { register struct segment *linkp; \
- linkp = p->link; \
- if (linkp != NULL) \
- linkp->last = p->last; \
- Free(p); \
- p = linkp; }
-/*
-INSERT inserts a single segment in the middle of a chain. 'b' is
-the segment before, 'p' the segment to be inserted, and 'a' the
-segment after.
-*/
-#define INSERT(b,p,a) b->link=p; p->link=a; p->last=NULL
-
-/*
-:h3.Join() - Join Two Objects Together
-
-If these are paths, this operator simply invokes the CONCAT macro.
-Why so much code then, you ask? Well we have to check for object
-types other than paths, and also check for certain path consistency
-rules.
-*/
-
-struct segment *
-Join(struct segment *p1, struct segment *p2)
-{
-/*
-We start with a whole bunch of very straightforward argument tests:
-*/
- if (p2 != NULL) {
- if (!ISPATHTYPE(p2->type)) {
-
- if (p1 == NULL)
- return((struct segment *)Unique(p2));
-
- switch (p1->type) {
-
- case REGIONTYPE:
-
- case STROKEPATHTYPE:
- p1 = CoercePath(p1);
- break;
-
- default:
- return((struct segment *)BegHandle(p1, p2));
- }
- }
-
- ARGCHECK((p2->last == NULL), "Join: right arg not anchor", p2, NULL, (1,p1), struct segment *);
- p2 = UniquePath(p2);
-
-/*
-In certain circumstances, we don't have to duplicate a permanent
-location. (We would just end up destroying it anyway). These cases
-are when 'p2' begins with a move-type segment:
-*/
- if (p2->type == TEXTTYPE || p2->type == MOVETYPE) {
- if (p1 == NULL)
- return(p2);
- if (ISLOCATION(p1)) {
- p2->dest.x += p1->dest.x;
- p2->dest.y += p1->dest.y;
- ConsumePath(p1);
- return(p2);
- }
- }
- }
- else
- return((struct segment *)Unique(p1));
-
- if (p1 != NULL) {
- if (!ISPATHTYPE(p1->type))
-
- switch (p2->type) {
-
- case REGIONTYPE:
-
- case STROKEPATHTYPE:
- p2 = CoercePath(p2);
- break;
-
- default:
- return((struct segment *)EndHandle(p1, p2));
- }
-
- ARGCHECK((p1->last == NULL), "Join: left arg not anchor", p1, NULL, (1,p2), struct segment *);
- p1 = UniquePath(p1);
- }
- else
- return(p2);
-
-/*
-At this point all the checking is done. We have two temporary non-null
-path types in 'p1' and 'p2'. If p1 ends with a MOVE, and p2 begins with
-a MOVE, we collapse the two MOVEs into one. We enforce the rule that
-there may not be two MOVEs in a row:
-*/
-
- if (p1->last->type == MOVETYPE && p2->type == MOVETYPE) {
- p1->last->flag |= p2->flag;
- p1->last->dest.x += p2->dest.x;
- p1->last->dest.y += p2->dest.y;
- POP(p2);
- if (p2 == NULL)
- return(p1);
- }
-/*
-Now we check for another silly rule. If a path has any TEXTTYPEs,
-then it must have only TEXTTYPEs and MOVETYPEs, and furthermore,
-it must begin with a TEXTTYPE. This rule makes it easy to check
-for the special case of text. If necessary, we will coerce
-TEXTTYPEs into paths so we don't mix TEXTTYPEs with normal paths.
-*/
- if (p1->type == TEXTTYPE) {
- if (p2->type != TEXTTYPE && !ISLOCATION(p2))
- p1 = CoerceText(p1);
- }
- else {
- if (p2->type == TEXTTYPE) {
- if (ISLOCATION(p1)) {
- p2->dest.x += p1->dest.x;
- p2->dest.y += p1->dest.y;
- Free(p1);
- return(p2);
- }
- else
- p2 = CoerceText(p2);
- }
- }
-/*
-Thank God! Finally! It's hard to believe, but we are now able to
-actually do the join. This is just invoking the CONCAT macro:
-*/
- CONCAT(p1, p2);
-
- return(p1);
-}
-
-/*
-:h3.JoinSegment() - Create a Path Segment and Join It to a Known Path
-
-This internal function is quicker than a full-fledged join because
-it can do much less checking.
-*/
-
-struct segment *
-t1_JoinSegment(struct segment *before, /* path to join before new segment */
- int type, /* type of new segment (MOVETYPE or LINETYPE) */
- fractpel x, fractpel y, /* x,y of new segment */
- struct segment *after) /* path to join after new segment */
-{
- register struct segment *r; /* returned path built here */
-
- r = PathSegment(type, x, y);
- if (before != NULL) {
- CONCAT(before, r);
- r = before;
- }
- else
- r->context = after->context;
- if (after != NULL)
- CONCAT(r, after);
- return(r);
-}
-
-/*
-:h2.Other Path Functions
-
-*/
-
-
-struct segment *
-t1_ClosePath(struct segment *p0, /* path to close */
- int lastonly) /* flag deciding to close all subpaths or... */
-{
- register struct segment *p,*last = NULL,*start; /* used in looping through path */
- register fractpel x,y; /* current position in path */
- register fractpel firstx = 0,firsty = 0; /* start position of sub path */
- register struct segment *lastnonhint = NULL; /* last non-hint segment in path */
-
- if (p0 != NULL && p0->type == TEXTTYPE)
- return(UniquePath(p0));
- if (p0->type == STROKEPATHTYPE)
- return((struct segment *)Unique(p0));
- /*
- * NOTE: a null closed path is different from a null open path
- * and is denoted by a closed (0,0) move segment. We make
- * sure this path begins and ends with a MOVETYPE:
- */
- if (p0 == NULL || p0->type != MOVETYPE)
- p0 = JoinSegment(NULL, MOVETYPE, 0, 0, p0);
- TYPECHECK("ClosePath", p0, MOVETYPE, NULL, (0), struct segment *);
- if (p0->last->type != MOVETYPE)
- p0 = JoinSegment(p0, MOVETYPE, 0, 0, NULL);
-
- p0 = UniquePath(p0);
-
-/*
-We now begin a loop through the path,
-incrementing current 'x' and 'y'. We are searching
-for MOVETYPE segments (breaks in the path) that are not already closed.
-At each break, we insert a close segment.
-*/
- for (p = p0, x = y = 0, start = NULL;
- p != NULL;
- x += p->dest.x, y += p->dest.y, last = p, p = p->link)
- {
-
- if (p->type == MOVETYPE) {
- if (start != NULL && (lastonly?p->link==NULL:TRUE) &&
- !(ISCLOSED(start->flag) && LASTCLOSED(last->flag))) {
- register struct segment *r; /* newly created */
-
- start->flag |= ISCLOSED(ON);
- r = PathSegment(LINETYPE, firstx - x,
- firsty - y);
- INSERT(last, r, p);
- r->flag |= LASTCLOSED(ON);
- /*< adjust 'last' if possible for a 0,0 close >*/
-{
-
-#define CLOSEFUDGE 3 /* if we are this close, let's change last segment */
-
- if (r->dest.x != 0 || r->dest.y != 0) {
- if (r->dest.x <= CLOSEFUDGE && r->dest.x >= -CLOSEFUDGE
- && r->dest.y <= CLOSEFUDGE && r->dest.y >= -CLOSEFUDGE) {
- lastnonhint->dest.x += r->dest.x;
- lastnonhint->dest.y += r->dest.y;
- r->dest.x = r->dest.y = 0;
- }
- }
-}
- if (p->link != NULL) {
- p->dest.x += x - firstx;
- p->dest.y += y - firsty;
- x = firstx;
- y = firsty;
- }
- }
- start = p;
- firstx = x + p->dest.x;
- firsty = y + p->dest.y;
- }
- else if (p->type != HINTTYPE)
- lastnonhint = p;
- }
- return(p0);
-}
-/*
-*/
-/*
-:h2.Reversing the Direction of a Path
-
-This turned out to be more difficult than I thought at first. The
-trickiness was due to the fact that closed paths must remain closed,
-etc.
-
-We need three subroutines:
-*/
-
-/* break a path at any point */
-static struct segment *SplitPath ( struct segment *anchor,
- struct segment *before );
-/* breaks a path after first sub-path */
-static struct segment *DropSubPath ( struct segment *p0 );
-/* reverses a single sub-path */
-static struct segment *ReverseSubPath ( struct segment *p );
-
-/*
-:h3.Reverse() - User Operator to Reverse a Path
-
-This operator reverses the entire path.
-*/
-
-struct segment *
-Reverse(struct segment *p) /* full path to reverse */
-{
- register struct segment *r; /* output path built here */
- register struct segment *nextp; /* contains next sub-path */
-
- if (p == NULL)
- return(NULL);
-
- ARGCHECK(!ISPATHANCHOR(p), "Reverse: invalid path", p, NULL, (0), struct segment *);
-
- if (p->type == TEXTTYPE)
- p = CoerceText(p);
- p = UniquePath(p);
-
- r = NULL;
-
- do {
- nextp = DropSubPath(p);
- p = ReverseSubPath(p);
- r = Join(p, r);
- p = nextp;
-
- } while (p != NULL);
-
- return(r);
-}
-
-/*
-:h4.ReverseSubPath() - Subroutine to Reverse a Single Sub-Path
-*/
-
-static struct segment *
-ReverseSubPath(struct segment *p) /* input path */
-{
- register struct segment *r; /* reversed path will be created here */
- register struct segment *nextp; /* temporary variable used in loop */
- register int wasclosed; /* flag, path was closed */
-
- if (p == NULL)
- return(NULL);
-
- wasclosed = ISCLOSED(p->flag);
- r = NULL;
-
- do {
-/*
-First we reverse the direction of this segment and clean up its flags:
-*/
- p->dest.x = - p->dest.x; p->dest.y = - p->dest.y;
- p->flag &= ~(ISCLOSED(ON) | LASTCLOSED(ON));
-
- switch (p->type) {
-
- case LINETYPE:
- case MOVETYPE:
- break;
-
- case CONICTYPE:
- {
-/*
-The logic of this is that the new M point (stored relative to the new
-beginning) is (M - C). However, C ("dest") has already been reversed
-So, we add "dest" instead of subtracting it:
-*/
- register struct conicsegment *cp = (struct conicsegment *) p;
-
- cp->M.x += cp->dest.x; cp->M.y += cp->dest.y;
- }
- break;
-
- case BEZIERTYPE:
- {
- register struct beziersegment *bp = (struct beziersegment *) p;
-
- bp->B.x += bp->dest.x; bp->B.y += bp->dest.y;
- bp->C.x += bp->dest.x; bp->C.y += bp->dest.y;
- }
- break;
-
- case HINTTYPE:
- {
- register struct hintsegment *hp = (struct hintsegment *) p;
-
- hp->ref.x = -hp->ref.x; hp->ref.y = -hp->ref.y;
- }
- break;
-
- default:
- Abort("Reverse: bad path segment");
- }
-/*
-We need to reverse the order of segments too, so we break this segment
-off of the input path, and tack it on the front of the growing path
-in 'r':
-*/
- nextp = p->link;
- p->link = NULL;
- p->last = p;
- if (r != NULL)
- CONCAT(p,r); /* leaves result in 'p'... not what we want */
- r = p;
- p = nextp; /* advance to next segment in input path */
-
- } while (p != NULL);
-
- if (wasclosed)
- r = ClosePath(r);
-
- return(r);
-}
-
-/*
-:h4.DropSubPath() - Drops the First Sub-Path Off a Path
-
-This subroutine returns the remaining sub-path(s). While doing so, it
-breaks the input path after the first sub-path so that a pointer to
-the original path now contains the first sub-path only.
-*/
-
-static struct segment *
-DropSubPath(struct segment *p0) /* original path */
-{
- register struct segment *p; /* returned remainder here */
-
- for (p = p0; p->link != NULL; p = p->link) {
- if (p->link->type == MOVETYPE)
- break;
- }
-
- return(SplitPath(p0, p));
-}
-
-static struct segment *
-SplitPath(struct segment *anchor, struct segment *before)
-{
- register struct segment *r;
-
- if (before == anchor->last)
- return(NULL);
-
- r = before->link;
- r->last = anchor->last;
- anchor->last = before;
- before->link = NULL;
-
- return(r);
-}
-
-static void
-UnClose(struct segment *p0)
-{
- register struct segment *p;
-
- for (p=p0; p->link->link != NULL; p=p->link) { ; }
-
- if (!LASTCLOSED(p->link->flag))
- Abort("UnClose: no LASTCLOSED");
-
- Free(SplitPath(p0, p));
- p0->flag &= ~ISCLOSED(ON);
-}
-
-/*
-:h3.ReverseSubPaths() - Reverse the Direction of Sub-paths Within a Path
-
-This user operator reverses the sub-paths in a path, but leaves the
-'move' segments unchanged. It builds on top of the subroutines
-already established.
-*/
-
-struct segment *
-ReverseSubPaths(struct segment *p) /* input path */
-{
- register struct segment *r; /* reversed path will be created here */
- register struct segment *nextp; /* temporary variable used in loop */
- int wasclosed; /* flag; subpath was closed */
- register struct segment *nomove; /* the part of sub-path without move segment */
- struct fractpoint delta;
-
- if (p == NULL)
- return(NULL);
-
- ARGCHECK(!ISPATHANCHOR(p), "ReverseSubPaths: invalid path", p, NULL, (0), struct segment *);
-
- if (p->type == TEXTTYPE)
- p = CoerceText(p);
- if (p->type != MOVETYPE)
- p = JoinSegment(NULL, MOVETYPE, 0, 0, p);
-
- p = UniquePath(p);
-
- r = NULL;
-
- for (; p != NULL;) {
- nextp = DropSubPath(p);
- wasclosed = ISCLOSED(p->flag);
- if (wasclosed)
- UnClose(p);
-
- nomove = SplitPath(p, p);
- r = Join(r, p);
-
- PathDelta(nomove, &delta);
-
- nomove = ReverseSubPath(nomove);
- p->dest.x += delta.x;
- p->dest.y += delta.y;
- if (nextp != NULL) {
- nextp->dest.x += delta.x;
- nextp->dest.y += delta.y;
- }
- if (wasclosed) {
- nomove = ClosePath(nomove);
- nextp->dest.x -= delta.x;
- nextp->dest.y -= delta.y;
- }
- r = Join(r, nomove);
- p = nextp;
-
- }
-
- return(r);
-}
-
-/*
-:h2.Transforming and Putting Handles on Paths
-
-:h3.PathTransform() - Transform a Path
-
-Transforming a path involves transforming all the points. In order
-that closed paths do not become "unclosed" when their relative
-positions are slightly changed due to loss of arithmetic precision,
-all point transformations are in absolute coordinates.
-
-(It might be better to reset the "absolute" coordinates every time a
-move segment is encountered. This would mean that we could accumulate
-error from subpath to subpath, but we would be less likely to make
-the "big error" where our fixed point arithmetic "wraps". However, I
-think I'll keep it this way until something happens to convince me
-otherwise.)
-
-The transform is described as a "space", that way we can use our
-old friend the "iconvert" function, which should be very efficient.
-*/
-
-struct segment *
-PathTransform(struct segment *p0, /* path to transform */
- struct XYspace *S) /* pseudo space to transform in */
-{
- register struct segment *p; /* to loop through path with */
- register fractpel newx,newy; /* current transformed position in path */
- register fractpel oldx,oldy; /* current untransformed position in path */
- register fractpel savex,savey; /* save path delta x,y */
-
- p0 = UniquePath(p0);
-
- newx = newy = oldx = oldy = 0;
-
- for (p=p0; p != NULL; p=p->link) {
-
- savex = p->dest.x; savey = p->dest.y;
-
- (*S->iconvert)(&p->dest, S, p->dest.x + oldx, p->dest.y + oldy);
- p->dest.x -= newx;
- p->dest.y -= newy;
-
- switch (p->type) {
-
- case LINETYPE:
- case MOVETYPE:
- break;
-
- case CONICTYPE:
- {
- register struct conicsegment *cp = (struct conicsegment *) p;
-
- (*S->iconvert)(&cp->M, S, cp->M.x + oldx, cp->M.y + oldy);
- cp->M.x -= newx;
- cp->M.y -= newy;
- /*
- * Note roundness doesn't change... linear transform
- */
- break;
- }
-
-
- case BEZIERTYPE:
- {
- register struct beziersegment *bp = (struct beziersegment *) p;
-
- (*S->iconvert)(&bp->B, S, bp->B.x + oldx, bp->B.y + oldy);
- bp->B.x -= newx;
- bp->B.y -= newy;
- (*S->iconvert)(&bp->C, S, bp->C.x + oldx, bp->C.y + oldy);
- bp->C.x -= newx;
- bp->C.y -= newy;
- break;
- }
-
- case HINTTYPE:
- {
- register struct hintsegment *hp = (struct hintsegment *) p;
-
- (*S->iconvert)(&hp->ref, S, hp->ref.x + oldx, hp->ref.y + oldy);
- hp->ref.x -= newx;
- hp->ref.y -= newy;
- (*S->iconvert)(&hp->width, S, hp->width.x, hp->width.y);
- /* Note: width is not relative to origin */
- break;
- }
-
- case TEXTTYPE:
- {
- XformText(p,S);
- break;
- }
-
- default:
- Abort("PathTransform: invalid segment");
- }
- oldx += savex;
- oldy += savey;
- newx += p->dest.x;
- newy += p->dest.y;
- }
- return(p0);
-}
-
-/*
-:h3.PathDelta() - Return a Path's Ending Point
-*/
-
-void
-PathDelta(struct segment *p, /* input path */
- struct fractpoint *pt) /* pointer to x,y to set */
-{
- struct fractpoint mypoint; /* I pass this to TextDelta */
- register fractpel x,y; /* working variables for path current point */
-
- for (x=y=0; p != NULL; p=p->link) {
- x += p->dest.x;
- y += p->dest.y;
- if (p->type == TEXTTYPE) {
- TextDelta(p, &mypoint);
- x += mypoint.x;
- y += mypoint.y;
- }
- }
-
- pt->x = x;
- pt->y = y;
-}
-
-/*
-:h3.BoundingBox() - Produce a Bounding Box Path
-
-This function is called by image code, when we know the size of the
-image in pels, and need to get a bounding box path that surrounds it.
-The starting/ending handle is in the lower right hand corner.
-*/
-struct segment *
-BoundingBox(pel h, pel w) /* size of box */
-{
- register struct segment *path;
-
- path = PathSegment(LINETYPE, -TOFRACTPEL(w), 0);
- path = JoinSegment(NULL, LINETYPE, 0, -TOFRACTPEL(h), path);
- path = JoinSegment(NULL, LINETYPE, TOFRACTPEL(w), 0, path);
- path = ClosePath(path);
-
- return(path);
-}
-
-/*
-:h2.Querying Locations and Paths
-
-:h3.QueryLoc() - Return the X,Y of a Locition
-*/
-
-void
-QueryLoc(struct segment *P, /* location to query, not consumed */
- struct XYspace *S, /* XY space to return coordinates in */
- double *xP, double *yP) /* coordinates returned here */
-{
- if (!ISLOCATION(P)) {
- ArgErr("QueryLoc: first arg not a location", P, NULL);
- return;
- }
- if (S->type != SPACETYPE) {
- ArgErr("QueryLoc: second arg not a space", S, NULL);
- return;
- }
- UnConvert(S, &P->dest, xP, yP);
-}
-/*
-:h3.QueryPath() - Find Out the Type of Segment at the Head of a Path
-
-This is a very simple routine that looks at the first segment of a
-path and tells the caller what it is, as well as returning the control
-point(s) of the path segment. Different path segments have different
-number of control points. If the caller knows that the segment is
-a move segment, for example, he only needs to pass pointers to return
-one control point.
-*/
-
-void
-QueryPath(struct segment *path, /* path to check */
- int *typeP, /* return the type of path here */
- struct segment **Bp, /* return location of first point */
- struct segment **Cp, /* return location of second point */
- struct segment **Dp, /* return location of third point */
- double *fP) /* return Conic sharpness */
-{
- register int coerced = FALSE; /* did I coerce a text path? */
-
- if (path == NULL) {
- *typeP = -1;
- return;
- }
- if (!ISPATHANCHOR(path)) {
- ArgErr("QueryPath: arg not a valid path", path, NULL);
- }
- if (path->type == TEXTTYPE) {
- path = CoerceText(path);
- coerced = TRUE;
- }
-
- switch (path->type) {
-
- case MOVETYPE:
- *typeP = 0;
- *Bp = PathSegment(MOVETYPE, path->dest.x, path->dest.y);
- break;
-
- case LINETYPE:
- *typeP = (LASTCLOSED(path->flag)) ? 4 : 1;
- *Bp = PathSegment(MOVETYPE, path->dest.x, path->dest.y);
- break;
-
- case CONICTYPE:
- {
- register struct conicsegment *cp = (struct conicsegment *) path;
-
- *typeP = 2;
- *Bp = PathSegment(MOVETYPE, cp->M.x, cp->M.y);
- *Cp = PathSegment(MOVETYPE, cp->dest.x, cp->dest.y);
- *fP = cp->roundness;
- }
- break;
-
- case BEZIERTYPE:
- {
- register struct beziersegment *bp = (struct beziersegment *) path;
-
- *typeP = 3;
- *Bp = PathSegment(MOVETYPE, bp->B.x, bp->B.y);
- *Cp = PathSegment(MOVETYPE, bp->C.x, bp->C.y);
- *Dp = PathSegment(MOVETYPE, bp->dest.x, bp->dest.y);
- }
- break;
-
- case HINTTYPE:
- *typeP = 5;
- break;
-
- default:
- Abort("QueryPath: unknown segment");
- }
- if (coerced)
- KillPath(path);
-}
-/*
-:h3.QueryBounds() - Return the Bounding Box of a Path
-
-Returns the bounding box by setting the user's variables.
-*/
-
-void
-QueryBounds(struct segment *p0, /* object to check for bound */
- struct XYspace *S, /* coordinate space of returned values */
- double *xminP, /* lower left hand corner (set by routine) */
- double *yminP,
- double *xmaxP, /* upper right hand corner (set by routine) */
- double *ymaxP)
-{
- register struct segment *path; /* loop variable for path segments */
- register fractpel lastx,lasty; /* loop variables: previous endingpoint */
- register fractpel x,y; /* loop variables: current ending point */
- struct fractpoint min; /* registers to keep lower left hand corner */
- struct fractpoint max; /* registers to keep upper right hand corner */
- int coerced = FALSE; /* we have coerced the path from another object */
- double x1,y1,x2,y2,x3,y3,x4,y4; /* corners of rectangle in space X */
-
- if (S->type != SPACETYPE) {
- ArgErr("QueryBounds: bad XYspace", S, NULL);
- return;
- }
-
- min.x = min.y = max.x = max.y = 0;
- if (p0 != NULL) {
- if (!ISPATHANCHOR(p0)) {
- switch(p0->type) {
- case STROKEPATHTYPE:
- /* replaced DupStrokePath() with Dup() 3-26-91 PNM */
- p0 = (struct segment *) DoStroke(Dup(p0));
- /* no break here, we have a region in p0 */
- case REGIONTYPE:
- p0 = RegionBounds((struct region *)p0);
- break;
-
- case PICTURETYPE:
- p0 = PictureBounds(p0);
- break;
-
- default:
- ArgErr("QueryBounds: bad object", p0, NULL);
- return;
- }
- coerced = TRUE;
- }
- if (p0->type == TEXTTYPE) {
- /* replaced CopyPath() with Dup() 3-26-91 PNM */
- p0 = (struct segment *)CoerceText(Dup(p0)); /* there are faster ways */
- coerced = TRUE;
- }
- if (p0->type == MOVETYPE) {
- min.x = max.x = p0->dest.x;
- min.y = max.y = p0->dest.y;
- }
- }
- lastx = lasty = 0;
-
- for (path = p0; path != NULL; path = path->link) {
-
- x = lastx + path->dest.x;
- y = lasty + path->dest.y;
-
- switch (path->type) {
-
- case LINETYPE:
- break;
-
- case CONICTYPE:
- {
- register struct conicsegment *cp = (struct conicsegment *) path;
- register fractpel Mx = lastx + cp->M.x;
- register fractpel My = lasty + cp->M.y;
- register fractpel deltax = 0.5 * cp->roundness * cp->dest.x;
- register fractpel deltay = 0.5 * cp->roundness * cp->dest.y;
- register fractpel Px = Mx - deltax;
- register fractpel Py = My - deltay;
- register fractpel Qx = Mx + deltax;
- register fractpel Qy = My + deltay;
-
-
- if (Mx < min.x) min.x = Mx;
- else if (Mx > max.x) max.x = Mx;
- if (My < min.y) min.y = My;
- else if (My > max.y) max.y = My;
-
- if (Px < min.x) min.x = Px;
- else if (Px > max.x) max.x = Px;
- if (Py < min.y) min.y = Py;
- else if (Py > max.y) max.y = Py;
-
- if (Qx < min.x) min.x = Qx;
- else if (Qx > max.x) max.x = Qx;
- if (Qy < min.y) min.y = Qy;
- else if (Qy > max.y) max.y = Qy;
- }
- break;
-
-
- case MOVETYPE:
- /*
- * We can't risk adding trailing Moves to the
- * bounding box:
- */
- if (path->link == NULL)
- goto done; /* God forgive me */
- break;
-
- case BEZIERTYPE:
- {
- register struct beziersegment *bp = (struct beziersegment *) path;
- register fractpel Bx = lastx + bp->B.x;
- register fractpel By = lasty + bp->B.y;
- register fractpel Cx = lastx + bp->C.x;
- register fractpel Cy = lasty + bp->C.y;
-
- if (Bx < min.x) min.x = Bx;
- else if (Bx > max.x) max.x = Bx;
- if (By < min.y) min.y = By;
- else if (By > max.y) max.y = By;
-
- if (Cx < min.x) min.x = Cx;
- else if (Cx > max.x) max.x = Cx;
- if (Cy < min.y) min.y = Cy;
- else if (Cy > max.y) max.y = Cy;
- }
- break;
-
- case HINTTYPE:
- break;
- default:
- Abort("QueryBounds: unknown type");
- }
-
- if (x < min.x) min.x = x;
- else if (x > max.x) max.x = x;
- if (y < min.y) min.y = y;
- else if (y > max.y) max.y = y;
-
- lastx = x; lasty = y;
- }
-done:
- UnConvert(S, &min, &x1, &y1);
- UnConvert(S, &max, &x4, &y4);
- x = min.x; min.x = max.x; max.x = x;
- UnConvert(S, &min, &x2, &y2);
- UnConvert(S, &max, &x3, &y3);
-
- *xminP = *xmaxP = x1;
- if (x2 < *xminP) *xminP = x2;
- else if (x2 > *xmaxP) *xmaxP = x2;
- if (x3 < *xminP) *xminP = x3;
- else if (x3 > *xmaxP) *xmaxP = x3;
- if (x4 < *xminP) *xminP = x4;
- else if (x4 > *xmaxP) *xmaxP = x4;
-
- *yminP = *ymaxP = y1;
- if (y2 < *yminP) *yminP = y2;
- else if (y2 > *ymaxP) *ymaxP = y2;
- if (y3 < *yminP) *yminP = y3;
- else if (y3 > *ymaxP) *ymaxP = y3;
- if (y4 < *yminP) *yminP = y4;
- else if (y4 > *ymaxP) *ymaxP = y4;
-
- if (coerced)
- Destroy(p0);
-}
-/*
-:h3.BoxPath()
-*/
-struct segment *
-BoxPath(struct XYspace *S, int h, int w)
-{
- struct segment *path;
-
- path = Join( Line(ILoc(S, w, 0)), Line(ILoc(S, 0, h)) );
- path = JoinSegment(path, LINETYPE, -path->dest.x, -path->dest.y, NULL);
- return(ClosePath(path));
-}
-
-/*
-:h3.DropSegment() - Drop the First Segment in a Path
-
-This routine takes the path and returns a new path that is one segment
-shorter. It can be used in conjunction with QueryPath(), for example,
-to ask about an entire path.
-*/
-
-struct segment *
-DropSegment(struct segment *path)
-{
- if (path != NULL && path->type == STROKEPATHTYPE)
- path = CoercePath(path);
- ARGCHECK((path == NULL || !ISPATHANCHOR(path)),
- "DropSegment: arg not a non-null path", path, path, (0), struct segment *);
- if (path->type == TEXTTYPE)
- path = CoerceText(path);
- path = UniquePath(path);
-
- POP(path);
- return(path);
-}
-/*
-:h3.HeadSegment() - Return the First Segment in a Path
-
-This routine takes the path and returns a new path consists of the
-first segment only.
-*/
-
-struct segment *
-HeadSegment(struct segment *path) /* input path */
-{
- if (path == NULL)
- return(NULL);
- if (path->type == STROKEPATHTYPE)
- path = CoercePath(path);
- ARGCHECK(!ISPATHANCHOR(path), "HeadSegment: arg not a path", path, path, (0), struct segment *);
- if (path->type == TEXTTYPE)
- path = CoerceText(path);
- path = UniquePath(path);
-
- if (path->link != NULL)
- KillPath(path->link);
- path->link = NULL;
- path->last = path;
- return(path);
-}
-
-/*
-:h2.Path Debug Routines
-
-:h3.DumpPath() - Display a Path on the Trace File
-*/
-
-void
-DumpPath(struct segment *p)
-{
-}
diff --git a/nx-X11/lib/font/Type1/paths.h b/nx-X11/lib/font/Type1/paths.h
deleted file mode 100644
index b61275b9c..000000000
--- a/nx-X11/lib/font/Type1/paths.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/* $Xorg: paths.h,v 1.3 2000/08/17 19:46:31 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/paths.h,v 1.3 1999/08/22 08:58:53 dawes Exp $ */
-
-/*SHARED*/
-
-#define Loc(S,x,y) t1_Loc(S,(double)x,(double)y)
-#define ILoc(S,x,y) t1_ILoc(S,x,y)
-#define Line(P) t1_Line(P)
-#define Join(p1,p2) t1_Join(p1,p2)
-#define ClosePath(p) t1_ClosePath(p,0)
-#define CloseLastSubPath(p) t1_ClosePath(p,1)
-#define Conic(B,C,s) t1_Conic(B,C,(double)s)
-#define RoundConic(M,C,r) t1_RoundConic(M,C,(double)r)
-#define ArcP3(S,P2,P3) t1_ArcP3(S,P2,P3)
-#define ArcCA(S,C,d) t1_ArcCA(S,C,(double)d)
-#define Bezier(B,C,D) t1_Bezier(B,C,D)
-#define Hint(S,r,w,o,h,a,d,l) t1_Hint(S,r,w,o,h,a,d,l)
-#define Reverse(p) t1_Reverse(p)
-#define ReverseSubPaths(p) t1_ReverseSubPaths(p)
-#define AddLoc(p1,p2) t1_Join(p1,p2)
-#define SubLoc(p1,p2) t1_SubLoc(p1,p2)
-#define DropSegment(p) t1_DropSegment(p)
-#define HeadSegment(p) t1_HeadSegment(p)
-#define QueryLoc(P,S,x,y) t1_QueryLoc(P,S,x,y)
-#define QueryPath(p,t,B,C,D,r) t1_QueryPath(p,t,B,C,D,r)
-#define QueryBounds(p,S,x1,y1,x2,y2) t1_QueryBounds(p,S,x1,y1,x2,y2)
-
-
-/* create a location object (or "move" segment) */
-extern struct segment *t1_Loc ( struct XYspace *S, double x, double y );
-/* integer argument version of same */
-extern struct segment *t1_ILoc ( struct XYspace *S, int x, int y );
-/* straight line path segment */
-extern struct segment *t1_Line ( struct segment *P );
-/* join two paths or regions together */
-extern struct segment *t1_Join ( struct segment *p1, struct segment *p2 );
-/* close a path or path set */
-extern struct segment *t1_ClosePath ( struct segment *p0, int lastonly );
-#if 0
-struct conicsegment *t1_Conic(); /* conic curve path segment */
-
-struct conicsegment *t1_RoundConic(); /* ditto, specified another way */
-struct conicsegment *t1_ArcP3(); /* circular path segment with three points */
-struct conicsegment *t1_ArcCA(); /* ditto, with center point and angle */
-#endif
-/* Bezier third order curve path segment */
-extern struct beziersegment *t1_Bezier ( struct segment *B, struct segment *C,
- struct segment *D );
-/* produce a font 'hint' path segment */
-extern struct hintsegment *t1_Hint ( struct XYspace *S, float ref, float width,
- char orientation, char hinttype,
- char adjusttype, char direction,
- int label );
-/* reverse the complete order of paths */
-extern struct segment *t1_Reverse ( struct segment *p );
-/* reverse only sub-paths; moves unchanged */
-extern struct segment *t1_ReverseSubPaths ( struct segment *p );
-/* subtract two location objects */
-extern struct segment *t1_SubLoc ( struct segment *p1, struct segment *p2 );
-/* Drop the first segment in a path */
-extern struct segment *t1_DropSegment ( struct segment *path );
-/* return the first segment in a path */
-extern struct segment *t1_HeadSegment ( struct segment *path );
-/* Query location; return its (x,y) */
-extern void t1_QueryLoc ( struct segment *P, struct XYspace *S, double *xP,
- double *yP );
-/* Query segment at head of a path */
-extern void t1_QueryPath ( struct segment *path, int *typeP,
- struct segment **Bp, struct segment **Cp,
- struct segment **Dp, double *fP );
-/* Query the bounding box of a path */
-extern void t1_QueryBounds ( struct segment *p0, struct XYspace *S,
- double *xminP, double *yminP,
- double *xmaxP, double *ymaxP );
-
-/*END SHARED*/
-/*SHARED*/
-
-#define CopyPath(p) t1_CopyPath(p)
-#define KillPath(p) t1_KillPath(p)
-#define PathTransform(p,m) t1_PathXform(p,m)
-#define PathDelta(p,pt) t1_PathDelta(p,pt)
-#define BoundingBox(h,w) t1_BoundingBox(h,w)
-#define PathSegment(t,x,y) t1_PathSegment(t,(fractpel)x,(fractpel)y)
-#define JoinSegment(b,t,x,y,a) t1_JoinSegment(b,t,(fractpel)x,(fractpel)y,a)
-#define Hypoteneuse(dx,dy) t1_Hypoteneuse(dx,dy)
-#define BoxPath(S,h,w) t1_BoxPath(S,h,w)
-
-/* duplicate a path */
-extern struct segment *t1_CopyPath ( struct segment *p0 );
-/* destroy a path */
-extern void t1_KillPath ( struct segment *p );
-/* transform a path arbitrarily */
-extern struct segment *t1_PathXform ( struct segment *p0, struct XYspace *S );
-/* calculate the ending point of a path */
-extern void t1_PathDelta ( struct segment *p, struct fractpoint *pt );
-/* */
-extern struct segment *t1_BoundingBox ( pel h, pel w );
-/* produce a MOVE or LINE segment */
-extern struct segment *t1_PathSegment ( int type, fractpel x, fractpel y );
-/* join a MOVE or LINE segment to a path */
-extern struct segment *t1_JoinSegment ( struct segment *before, int type, fractpel x, fractpel y, struct segment *after );
-#if 0
-double t1_Hypoteneuse(); /* returns the length of a line */
-#endif
-/* returns a rectangular path */
-extern struct segment *t1_BoxPath ( struct XYspace *S, int h, int w );
-
-/*END SHARED*/
-/*SHARED*/
-
-#define ConsumePath(p) MAKECONSUME(p,KillPath(p))
-#define UniquePath(p) MAKEUNIQUE(p,CopyPath(p))
-
-/*END SHARED*/
-/*SHARED*/
-
-struct segment {
- XOBJ_COMMON /* xobject common data define 3-26-91 PNM */
- unsigned char size; /* size of the structure */
- unsigned char context; /* index to device context */
- struct segment *link; /* pointer to next structure in linked list */
- struct segment *last; /* pointer to last structure in list */
- struct fractpoint dest; /* relative ending location of path segment */
-} ;
-
-#define ISCLOSED(flag) ((flag)&0x80) /* subpath is closed */
-#define LASTCLOSED(flag) ((flag)&0x40) /* last segment in closed subpath */
-
-/*
-NOTE: The ISCLOSED flag is set on the MOVETYPE segment before the
-subpath proper; the LASTCLOSED flag is set on the last segment (LINETYPE)
-in the subpath
-
-We define the ISPATHANCHOR predicate to test that a path handle
-passed by the user is valid:
-*/
-
-#define ISPATHANCHOR(p) (ISPATHTYPE(p->type)&&p->last!=NULL)
-
-/*
-For performance reasons, a user's "location" object is identical to
-a path whose only segment is a move segment. We define a predicate
-to test for this case. See also :hdref refid=location..
-*/
-
-#define ISLOCATION(p) ((p)->type == MOVETYPE && (p)->link == NULL)
-
-/*END SHARED*/
-/*SHARED*/
-
-struct conicsegment {
- XOBJ_COMMON /* xobject common data define 3-26-91 PNM */
- /* type = CONICTYPE */
- unsigned char size; /* as with any 'segment' type */
- unsigned char context; /* as with any 'segment' type */
- struct segment *link; /* as with any 'segment' type */
- struct segment *last; /* as with any 'segment' type */
- struct fractpoint dest; /* Ending point (C point) */
- struct fractpoint M; /* "midpoint" of conic explained above */
- float roundness; /* explained above */
-} ;
-/*END SHARED*/
-/*SHARED*/
-
-struct beziersegment {
- XOBJ_COMMON /* xobject common data define 3-26-91 PNM */
- /* type = BEZIERTYPE */
- unsigned char size; /* as with any 'segment' type */
- unsigned char context; /* as with any 'segment' type */
- struct segment *link; /* as with any 'segment' type */
- struct segment *last; /* as with any 'segment' type */
- struct fractpoint dest; /* ending point (D) */
- struct fractpoint B; /* control point B */
- struct fractpoint C; /* control point C */
-} ;
-
-/*END SHARED*/
-/*SHARED*/
-
-struct hintsegment {
- XOBJ_COMMON /* xobject common data define 3-26-91 PNM */
- /* type = HINTTYPE */
- unsigned char size; /* size of the structure */
- unsigned char context; /* device context */
- struct segment *link; /* pointer to next structure in linked list */
- struct segment *last; /* pointer to last structure in list */
- struct fractpoint dest; /* ALWAYS 0,0 */
- struct fractpoint ref;
- struct fractpoint width;
- char orientation;
- char hinttype;
- char adjusttype;
- char direction;
- int label;
-} ;
-
-/*END SHARED*/
-/*SHARED*/
-
-/*
-CONCAT links the 'p2' path chain on the end of the 'p1' chain. (This macro
-is also used by the STROKES module.)
-*/
-#define CONCAT(p1, p2) { \
- p1->last->link = p2; /* link p2 on end of p1 */ \
- p1->last = p2->last; /* last of new is last of p2 */ \
- p2->last = NULL; } /* only first segment has non-NULL "last" */
-
-/*END SHARED*/
-/* dump a path list */
-extern void t1_DumpPath ( struct segment *p );
diff --git a/nx-X11/lib/font/Type1/pictures.h b/nx-X11/lib/font/Type1/pictures.h
deleted file mode 100644
index 0abc715ce..000000000
--- a/nx-X11/lib/font/Type1/pictures.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* $Xorg: pictures.h,v 1.3 2000/08/17 19:46:31 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/pictures.h,v 1.3 1999/08/22 08:58:53 dawes Exp $ */
-
-/* STUB */
-
-#define CopyPicture(p) p
-#define UniquePicture(p) p
-#define KillPicture(p)
-#define BegHandle(o,m) o
-#define EndHandle(o,m) o
-#define PictureBounds(P) P
-
-struct picture {
- struct fractpoint origin;
- struct fractpoint ending;
-};
-
-#define Phantom(o) t1_Phantom(o)
-#define Snap(o) t1_Snap(o)
-
-extern struct segment *t1_Phantom ( struct segment *p );
-extern struct segment *t1_Snap ( struct segment *p );
diff --git a/nx-X11/lib/font/Type1/range.h b/nx-X11/lib/font/Type1/range.h
deleted file mode 100644
index 496f000da..000000000
--- a/nx-X11/lib/font/Type1/range.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#if XFONT_CID
-#define CID_NAME_MAX 255 /* max # of characters in a file name */
-#define CID_PATH_MAX 1024 /* max # of characters in a path name */
-
-typedef struct spacerange_code {
- unsigned int srcCodeLo;
- unsigned int srcCodeHi;
-} spacerangecode;
-
-typedef struct space_range {
- struct space_range *next;
- int rangecnt;
- struct spacerange_code *spacecode;
-} spacerange;
-
-typedef struct cidrange_code {
- unsigned int srcCodeLo;
- unsigned int srcCodeHi;
- unsigned int dstCIDLo;
-} cidrangecode;
-
-typedef struct cid_range {
- struct cid_range *next;
- int rangecnt;
- struct cidrange_code *range;
-} cidrange;
-#endif
diff --git a/nx-X11/lib/font/Type1/regions.c b/nx-X11/lib/font/Type1/regions.c
deleted file mode 100644
index f8875dafb..000000000
--- a/nx-X11/lib/font/Type1/regions.c
+++ /dev/null
@@ -1,1651 +0,0 @@
-/* $Xorg: regions.c,v 1.3 2000/08/17 19:46:31 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/regions.c,v 3.8tsi Exp $ */
- /* REGIONS CWEB V0023 LOTS */
-/*
-:h1 id=regions.REGIONS Module - Regions Operator Handler
-
-This module is responsible for creating and manipulating regions.
-
-&author. Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com)
-
-
-:h3.Include Files
-
-The included files are:
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef FONTMODULE
-# include "os.h"
-#endif
-#include "objects.h"
-#include "spaces.h"
-#include "paths.h"
-#include "regions.h"
-#include "curves.h"
-#include "lines.h"
-#include "pictures.h"
-#include "fonts.h"
-#include "hints.h"
-#include "strokes.h" /* to pick up 'DoStroke' */
-
-
-static void newfilledge ( struct region *R, fractpel xmin, fractpel xmax,
- fractpel ymin, fractpel ymax, int isdown );
-static struct edgelist *splitedge ( struct edgelist *list, pel y );
-static void vertjoin ( struct edgelist *top, struct edgelist *bottom );
-static int touches ( int h, pel *left, pel *right );
-static int crosses ( int h, pel *left, pel *right );
-static void edgemin ( int h, pel *e1, pel *e2 );
-static void edgemax ( int h, pel *e1, pel *e2 );
-static struct edgelist *NewEdge ( pel xmin, pel xmax, pel ymin, pel ymax,
- pel *xvalues, int isdown );
-static struct edgelist *swathxsort ( struct edgelist *before0,
- struct edgelist *edge );
-/*
-:h3.Functions Provided to the TYPE1IMAGER User
-
-This module provides the following TYPE1IMAGER entry points:
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.Functions Provided to Other Modules
-
-This module provides the following entry points to other modules:
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.Macros Provided to Other Modules
-
-:h4.GOING_TO() - Macro Predicate Needed for Changing Direction, Etc.
-
-The actual generation of run end lists (edge boundaries) is left
-to the low level rasterizing modules, LINES and CURVES. There
-are some global region-type
-questions that occur when doing a low-level
-rasterization:
-:ol.
-:li.Did we just change direction in Y and therefore need to start
-a new edge?
-:li.Did we run out of allocated edge space?
-:li.Do the minimum or maximum X values for the current edge need
-updating?
-:eol.
-In general the REGIONS is not smart enough to answer those questions
-itself. (For example, determining if and when a curve changes direction
-may need detailed curve knowledge.) Yet, this must be done efficiently.
-We provide a macro "GOING_TO" where the invoker tells us where it is
-heading for (x2,y2), plus where it is now (x1,y1), plus the current
-region under construction, and the macro answers the questions above.
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h2.Data Structures Used to Represent Regions
-
-:h3.The "region" Structure
-
-The region structure is an anchor for a linked list of "edgelist"
-structures (see :hdref refid=edgelist..). It also summarizes the
-information in the edgelist structures (for example, the bounding
-box of the region). And, it contains scratch areas used during
-the creation of a region.
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-The ISOPTIMIZED flag tells us if we've put a permanent region in
-'optimal' form.
-*/
-#define ISOPTIMIZED(flag) ((flag)&0x10)
-
-/*
-The ISRECTANGULAR flag tells us if a region is a rectangle. We don't
-always notice rectangles--if this flag is set, the region definitely
-is a rectangle, but some rectangular regions will not have the flag
-set. The flag is used to optimize some paths.
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h4."TT_INFINITY" - A Constant Region Structure of Infinite Extent
-
-Infinity is the complement of a null area:
-Note - removed the refcount = 1 init, replaced with references = 2 3-26-91 PNM
-*/
-static struct region _infinity = { REGIONTYPE,
- ISCOMPLEMENT(ON)+ISINFINITE(ON)+ISPERMANENT(ON)+ISIMMORTAL(ON), 2,
- {0, 0}, {0, 0},
- 0, 0, 0, 0,
- NULL, NULL,
- 0, 0, 0, 0, 0, NULL, NULL,
- NULL, 0, NULL, NULL };
-struct region *TT_INFINITY = &_infinity;
-
-/*
-:h4."EmptyRegion" - A Region Structure with Zero Area
-
-This structure is used to initialize the region to be built in
-Interior():
-Note - replaced refcount = 1 init with references = 2 3-26-91 PNM
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-struct region EmptyRegion = { REGIONTYPE,
- ISPERMANENT(ON)+ISIMMORTAL(ON), 2,
- {0, 0}, {0, 0},
- MAXPEL, MAXPEL, MINPEL, MINPEL,
- NULL, NULL,
- 0, 0, 0, 0, 0, NULL, NULL,
- NULL, 0, NULL, NULL };
-
-/*
-:h3 id=edgelist.The "edgelist" Structure
-
-Regions are represented by a linked list of 'edgelist' structures.
-When a region is complete, the structures are paired, one for the
-left and one for the right edge. While a region is being built,
-this rule may be violated temporarily.
-
-An 'edgelist' structure contains the X values for a given span
-of Y values. The (X,Y) pairs define an edge. We use the crack
-and edge coordinate system, so that integer values of X and Y
-go between pels. The edge is defined between the minimum Y and
-maximum Y.
-
-The linked list is kept sorted from top to bottom, that is, in
-increasing y. Also, if 'e1' is an edgelist structure and 'e2' is the
-next one in the list, they must have exactly the same ymin,ymax values
-or be totally disjoint. These two requirements mean that if e2's ymin
-is less than e1's ymax, it must be exactly equal to e1's ymin. A
-sublist of structures with identical ymin and ymax values is called a
-'swath'.
-
-In addition, edgelist structures are separately linked together based
-on what subpath originally created them; each subpath is kept as a
-separate circular linked list. This information is ignored unless
-continuity checking is invoked. See :hdref refid=subpath. for a
-complete description of this.
-*/
-
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-The "edgelist" structure follows the convention of TYPE1IMAGER user
-objects, having a type field and a flag field as the first two
-elements. However, the user never sees "edgelist" structures
-directly; he is given handles to "region" structures only.
-
-By having a type field, we can use the "copy" feature of Allocate()
-to duplicate edge lists quickly.
-
-We also define two flag bits for this structure. The ISDOWN bit is set
-if the edge is going in the direction of increasing Y. The ISAMBIGUOUS
-bit is set if the edge is identical to its neighbor (edge->link); such
-edges may be "left" when they should be "right", or vice versa,
-unnecessarily confusing the continuity checking logic. The FixSubPaths()
-routine in HINTS will swap ambiguous edges if that avoids crossing edges;
-see :hdref refid=fixsubp..
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-:h3.KillRegion() - Destroys a Region
-
-KillRegion nominally just decrements the reference count to that region.
-If the reference count becomes 0, all memory associated with it is
-freed. We just follow the linked list, freeing as we go, then kill any
-associated (thresholded) picture.
-Note - added conditional return based on references 3-26-91 PNM
-*/
-
-void
-KillRegion(struct region *area) /* area to free */
-{
- register struct edgelist *p; /* loop variable */
- register struct edgelist *next; /* loop variable */
-
- if (area->references < 0)
- Abort("KillRegion: negative reference count");
- if ( (--(area->references) > 1) ||
- ( (area->references == 1) && !ISPERMANENT(area->flag) ) )
- return;
-
- for (p=area->anchor; p != NULL; p=next) {
- next = p->link;
- Free(p);
- }
- if (area->thresholded != NULL)
- KillPicture(area->thresholded);
- Free(area);
-}
-/*
-:h3.CopyRegion() - Makes a Copy of a Region
-*/
-struct region *
-CopyRegion(struct region *area) /* region to duplicate */
-{
- register struct region *r; /* output region built here */
- register struct edgelist *last = NULL; /* loop variable */
- register struct edgelist *p,*newp; /* loop variables */
-
- r = (struct region *)Allocate(sizeof(struct region), area, 0);
- r->anchor = NULL;
-
- for (p=area->anchor; VALIDEDGE(p); p=p->link) {
-
- newp = NewEdge(p->xmin, p->xmax, p->ymin, p->ymax, p->xvalues, ISDOWN(p->flag));
- if (r->anchor == NULL)
- r->anchor = last = newp;
- else
- last->link = newp;
-
- last = newp;
- }
- if (area->thresholded != NULL)
- /* replaced DupPicture with Dup() 3-26-91 PNM */
- r->thresholded = (struct picture *)Dup(area->thresholded);
- return(r);
-}
-/*
-:h4.NewEdge() - Allocates and Returns a New "edgelist" Structure
-
-We allocate space for the X values contiguously with the 'edgelist'
-structure that locates them. That way, we only have to free the
-edgelist structure to free all memory associated with it. Damn
-clever, huh?
-*/
-
-static struct edgelist *
-NewEdge(pel xmin, pel xmax, /* X extent of edge */
- pel ymin, pel ymax, /* Y extent of edge */
- pel *xvalues, /* list of X values for entire edge */
- int isdown) /* flag: TRUE means edge progresses downward */
-{
- static struct edgelist template = {
- EDGETYPE, 0, 1, NULL, NULL,
- 0, 0, 0, 0, NULL };
-
- register struct edgelist *r; /* returned structure */
- register int iy; /* ymin adjusted for 'long' alignment purposes */
-
- if (ymin >= ymax)
- Abort("newedge: height not positive");
-/*
-We are going to copy the xvalues into a newly allocated area. It
-helps performance if the values are all "long" aligned. We can test
-if the xvalues are long aligned by ANDing the address with the
-(sizeof(long) - 1)--if non zero, the xvalues are not aligned well. We
-set 'iy' to the ymin value that would give us good alignment:
-*/
- iy = ymin - (((unsigned long)xvalues) & (sizeof(long)-1)) / sizeof(pel);
-
- r = (struct edgelist *)Allocate(sizeof(struct edgelist), &template,
- (ymax - iy) * sizeof(pel));
-
- if (isdown) r->flag = ISDOWN(ON);
- r->xmin = xmin;
- r->xmax = xmax;
- r->ymin = ymin;
- r->ymax = ymax;
-
- r->xvalues = (pel *) FOLLOWING(r);
- if (ymin != iy) {
- r->xvalues += ymin - iy;
- xvalues -= ymin - iy;
- }
-
-/*
-We must round up (ymax - iy) so we get the ceiling of the number of
-longs. The destination must be able to hold these extra bytes because
-Allocate() makes everything it allocates be in multiples of longs.
-*/
- LONGCOPY(&r[1], xvalues, (ymax - iy) * sizeof(pel) + sizeof(long) - 1);
-
- return(r);
-}
-
-/*
-:h3 id=discard.discard() - Discard All Edges Between Two Edges
-
-At first glance it would seem that we could discard an edgelist
-structure merely by unlinking it from the list and freeing it. You are
-wrong, region-breath! For performance, the X values associated with an
-edge are allocated contiguously with it. So, we free the X values when
-we free a structure. However, once an edge has been split, we are no
-longer sure which control block actually is part of the memory block
-that contains the edges. Rather than trying to decide, we play it safe
-and never free part of a region.
-
-So, to mark a 'edgelist' structure as discarded, we move it to the end
-of the list and set ymin=ymax.
-*/
-
-static void
-discard(struct edgelist *left, /* all edges between here exclusive */
- struct edgelist *right) /* should be discarded */
-{
- register struct edgelist *beg,*end,*p;
-
- beg = left->link;
- if (beg == right)
- return;
-
- for (p = beg; p != right; p = p->link) {
- if (p->link == NULL && right != NULL)
- Abort("discard(): ran off end");
- p->ymin = p->ymax = 32767;
- end = p;
- }
- /*
- * now put the chain beg/end at the end of right, if it is not
- * already there:
- */
- if (right != NULL) {
- left->link = right;
- while (right->link != NULL)
- right = right->link;
- right->link = beg;
- }
- end->link = NULL;
-}
-
-/*
-:h4.Unwind() - Discards Edges That Fail the Winding Rule Test
-
-The winding rule says that upward going edges should be paired with
-downward going edges only, and vice versa. So, if two upward edges
-or two downward edges are nominally left/right pairs, Unwind() should
-discard the second one. Everything should balance; we should discard
-an even number of edges; of course, we abort if we don't.
-*/
-static void
-Unwind(struct edgelist *area) /* input area modified in place */
-{
- register struct edgelist *last = NULL,*next; /* struct before and after current one */
- register int y; /* ymin of current swath */
- register int count,newcount; /* winding count registers */
-
- while (VALIDEDGE(area)) {
-
- count = 0;
- y = area->ymin;
-
- do {
- next = area->link;
-
- if (ISDOWN(area->flag))
- newcount = count + 1;
- else
- newcount = count - 1;
-
- if (count == 0 || newcount == 0)
- last = area;
- else
- discard(last, next);
-
- count = newcount;
- area = next;
-
- } while (area != NULL && area->ymin == y);
-
- if (count != 0)
- Abort("Unwind: uneven edges");
- }
-}
-/*
-:h2.Building Regions
-
-:h3.Interior() - Iterate Through a Path, Building a Region
-
-This routine is the workhorse driver routine that iterates through a
-path, calling the appropriate stepping routines to actually produce the
-run end "edgelist" structures.
-
-:ol.
-:li."Interior" calls StepLine or StepConic or StepBezier as appropriate
-to produce run ends.
-:li.Occasionally these routines will notice a change in Y direction
-and will call ChangeDirection (through the GOING_TO macro); this is
-a call back to the REGIONS module.
-:li.ChangeDirection will call whatever function is in the region
-structure; for Interior, this function is 'newfilledge'.
-:li.Newfilledge will call NewEdge to create a new edgelist structure,
-then, call SortSwath to sort it onto the linked list being built at
-the region "anchor".
-:eol.
-
-By making the function called by ChangeDirection be a parameter of the
-region, we allow the same ChangeDirection logic to be used by stroking.
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-struct region *
-Interior(struct segment *p, /* take interior of this path */
- int fillrule) /* rule to follow if path crosses itself */
-{
- register fractpel x,y; /* keeps ending point of path segment */
- fractpel lastx,lasty; /* previous x,y from path segment before */
- register struct region *R; /* region I will build */
- register struct segment *nextP; /* next segment of path */
- struct fractpoint hint; /* accumulated hint value */
- char tempflag; /* flag; is path temporary? */
- char Cflag; /* flag; should we apply continuity? */
-
- if (p == NULL)
- return(NULL);
-/*
-Establish the 'Cflag' continuity flag based on user's fill rule and
-our own 'Continuity' pragmatic (0: never do continuity, 1: do what
-user asked, >1: do it regardless).
-*/
- if (fillrule > 0) {
- Cflag = Continuity > 0;
- fillrule -= CONTINUITY;
- }
- else
- Cflag = Continuity > 1;
-
- ARGCHECK((fillrule != WINDINGRULE && fillrule != EVENODDRULE),
- "Interior: bad fill rule", NULL, NULL, (1,p), struct region *);
-
- if (p->type == TEXTTYPE)
-/* if (fillrule != EVENODDRULE)
- else */
- return((struct region *)UniquePath(p));
- if (p->type == STROKEPATHTYPE) {
- if (fillrule == WINDINGRULE)
- return((struct region *)DoStroke(p));
- else
- p = CoercePath(p);
- }
-
- R = (struct region *)Allocate(sizeof(struct region), &EmptyRegion, 0);
-
- ARGCHECK(!ISPATHANCHOR(p), "Interior: bad path", p, R, (0), struct region *);
- ARGCHECK((p->type != MOVETYPE), "Interior: path not closed", p, R, (0), struct region *);
-
-
-/* changed definition from !ISPERMANENT to references <= 1 3-26-91 PNM */
- tempflag = (p->references <= 1); /* only first segment in path is so marked */
- if (!ISPERMANENT(p->flag)) p->references -= 1;
-
- R->newedgefcn = newfilledge;
-/*
-Believe it or not, "R" is now completely initialized. We are counting
-on the copy of template to get other fields the way we want them,
-namely
-:ol.
-:li.anchor = NULL
-:li.xmin, ymin, xmax, ymax, to minimum and maximum values respectively.
-:eol.
-Anchor = NULL is very
-important to ChangeDirection.
-See :hdref refid=CD..
-
-To minimize problems of "wrapping" in our pel arithmetic, we keep an
-origin of the region which is the first move. Hopefully, that keeps
-numbers within plus or minus 32K pels.
-*/
- R->origin.x = 0/*TOFRACTPEL(NEARESTPEL(p->dest.x))*/;
- R->origin.y = 0/*TOFRACTPEL(NEARESTPEL(p->dest.y))*/;
- lastx = - R->origin.x;
- lasty = - R->origin.y;
-/*
-ChangeDirection initializes other important fields in R, such as
-lastdy, edge, edgeYstop, edgexmin, and edgexmax. The first segment
-is a MOVETYPE, so it will be called first.
-*/
-/*
-The hints data structure must be initialized once for each path.
-*/
-
- if (ProcessHints)
- InitHints(); /* initialize hint data structure */
-
- while (p != NULL) {
-
- x = lastx + p->dest.x;
- y = lasty + p->dest.y;
-
- nextP = p->link;
-
-/*
-Here we start the hints processing by initializing the hint value to
-zero. If ProcessHints is FALSE, the value will remain zero.
-Otherwise, hint accumulates the computed hint values.
-*/
-
- hint.x = hint.y = 0;
-
-/*
-If we are processing hints, and this is a MOVE segment (other than
-the first on the path), we need to close (reverse) any open hints.
-*/
-
- if (ProcessHints)
- if ((p->type == MOVETYPE) && (p->last == NULL)) {
- CloseHints(&hint);
- }
-
-/*
-Next we run through all the hint segments (if any) attached to this
-segment. If ProcessHints is TRUE, we will accumulate computed hint
-values. In either case, nextP will be advanced to the first non-HINT
-segment (or NULL), and each hint segment will be freed if necessary.
-*/
-
- while ((nextP != NULL) && (nextP->type == HINTTYPE)) {
- if (ProcessHints)
- ProcessHint((struct hintsegment *)nextP,
- x + hint.x, y + hint.y, &hint);
-
- {
- register struct segment *saveP = nextP;
-
- nextP = nextP->link;
- if (tempflag)
- Free(saveP);
- }
- }
-
-/*
-We now apply the full hint value to the ending point of the path segment.
-*/
-
- x += hint.x;
- y += hint.y;
-
- switch(p->type) {
-
- case LINETYPE:
- StepLine(R, lastx, lasty, x, y);
- break;
-
- case CONICTYPE:
- {
-
-/*
-For a conic curve, we apply half the hint value to the conic midpoint.
-*/
-
- }
- break;
-
- case BEZIERTYPE:
- {
- register struct beziersegment *bp = (struct beziersegment *) p;
-
-/*
-For a Bezier curve, we apply the full hint value to the Bezier C point.
-*/
-
- StepBezier(R, lastx, lasty,
- lastx + bp->B.x, lasty + bp->B.y,
- lastx + bp->C.x + hint.x,
- lasty + bp->C.y + hint.y,
- x, y);
- }
- break;
-
- case MOVETYPE:
-/*
-At this point we have encountered a MOVE segment. This breaks the
-path, making it disjoint.
-*/
- if (p->last == NULL) /* i.e., not first in path */
- ChangeDirection(CD_LAST, R, lastx, lasty, (fractpel) 0);
-
- ChangeDirection(CD_FIRST, R, x, y, (fractpel) 0);
-/*
-We'll just double check for closure here. We forgive an appended
-MOVETYPE at the end of the path, if it isn't closed:
-*/
- if (!ISCLOSED(p->flag) && p->link != NULL)
- return((struct region *)ArgErr("Fill: sub-path not closed", p, NULL));
- break;
-
- default:
- Abort("Interior: path type error");
- }
-/*
-We're done with this segment. Advance to the next path segment in
-the list, freeing this one if necessary:
-*/
- lastx = x; lasty = y;
-
- if (tempflag)
- Free(p);
- p = nextP;
- }
- ChangeDirection(CD_LAST, R, lastx, lasty, (fractpel) 0);
- R->ending.x = lastx;
- R->ending.y = lasty;
-/*
-Finally, clean up the region's based on the user's 'fillrule' request:
-*/
- if (Cflag)
- ApplyContinuity(R);
- if (fillrule == WINDINGRULE)
- Unwind(R->anchor);
- return(R);
-}
-/*
-:h3."workedge" Array
-
-This is a statically allocated array where edges are built
-before being copied into more permanent storage by NewEdge().
-*/
-
-#ifndef MAXEDGE
-#define MAXEDGE 1000
-#endif
-
-static pel workedge[MAXEDGE];
-static pel *currentworkarea = workedge;
-static pel currentsize = MAXEDGE;
-
-/*
-:h3 id=cd.ChangeDirection() - Called When Y Direction Changes
-
-The rasterizing routines call this entry point when they detect
-a change in Y. We then build the current edge and sort it into
-emerging edgelist at 'anchor' by calling whatever "newedgefcn"
-is appropriate.
-*/
-
-void
-ChangeDirection(int type, /* CD_FIRST, CD_CONTINUE, or CD_LAST */
- struct region *R, /* region in which we are changing direction */
- fractpel x, fractpel y, /* current beginning x,y */
- fractpel dy) /* direction and magnitude of change in y */
-{
- register fractpel ymin,ymax; /* minimum and maximum Y since last call */
- register pel iy; /* nearest integer pel to 'y' */
- register pel idy; /* nearest integer pel to 'dy' */
- register int ydiff; /* allowed Y difference in 'currentworkarea' */
-
- if (type != CD_FIRST) {
-
- if (R->lastdy > 0) {
- ymin = R->firsty;
- ymax = y;
- }
- else {
- ymin = y;
- ymax = R->firsty;
- }
-
- if (ymax < ymin)
- Abort("negative sized edge?");
-
-
- (*R->newedgefcn)(R, R->edgexmin, R->edgexmax, ymin, ymax,
- R->lastdy > 0);
-
- }
-
- R->firsty = y;
- R->firstx = x;
- R->lastdy = dy;
-
- iy = NEARESTPEL(y);
- idy = NEARESTPEL(dy);
- if (currentworkarea != workedge && idy < MAXEDGE && idy > -MAXEDGE) {
- NonObjectFree(currentworkarea);
- currentworkarea = workedge;
- currentsize = MAXEDGE;
- }
- ydiff = currentsize - 1;
- if (dy > 0) {
- R->edge = &currentworkarea[-iy];
- R->edgeYstop = TOFRACTPEL(ydiff + iy) + FPHALF;
- }
- else {
- R->edge = &currentworkarea[ydiff - iy];
- R->edgeYstop = TOFRACTPEL(iy - ydiff) - FPHALF;
- }
- R->edgexmax = R->edgexmin = x;
-/*
-If this is the end of a subpath, we complete the subpath circular
-chain:
-*/
- if (type == CD_LAST && R->lastedge != NULL) {
- register struct edgelist *e = R->firstedge;
-
- while (e->subpath != NULL)
- e = e->subpath;
- e->subpath = R->lastedge;
- R->lastedge = R->firstedge = NULL;
- }
-}
-/*
-:h3 id=newfill.newfilledge() - Called When We Have a New Edge While Filling
-
-This is the prototypical "newedge" function passed to "Rasterize" and
-stored in "newedgefcn" in the region being built.
-
-If the edge is non-null, we sort it onto the list of edges we are
-building at "anchor".
-
-This function also has to keep the bounding box of the region
-up to date.
-*/
-
-static void
-newfilledge(struct region *R, /* region being built */
- fractpel xmin, fractpel xmax, /* X range of this edge */
- fractpel ymin, fractpel ymax, /* Y range of this edge */
- int isdown) /* flag: TRUE means edge goes down, else up */
-{
-
- register pel pelxmin,pelymin,pelxmax,pelymax; /* pel versions of bounds */
- register struct edgelist *edge; /* newly created edge */
-
- pelymin = NEARESTPEL(ymin);
- pelymax = NEARESTPEL(ymax);
- if (pelymin == pelymax)
- return;
-
- pelxmin = NEARESTPEL(xmin);
- pelxmax = NEARESTPEL(xmax);
-
- if (pelxmin < R->xmin) R->xmin = pelxmin;
- if (pelxmax > R->xmax) R->xmax = pelxmax;
- if (pelymin < R->ymin) R->ymin = pelymin;
- if (pelymax > R->ymax) R->ymax = pelymax;
-
- edge = NewEdge(pelxmin, pelxmax, pelymin, pelymax, &R->edge[pelymin], isdown);
- edge->subpath = R->lastedge;
- R->lastedge = edge;
- if (R->firstedge == NULL)
- R->firstedge = edge;
-
- R->anchor = SortSwath(R->anchor, edge, swathxsort);
-
-}
-
-/*
-:h2.Sorting Edges
-
-:h3.SortSwath() - Vertically Sort an Edge into a Region
-
-This routine sorts an edge or a pair of edges into a growing region,
-so that the region maintains its top-to-bottom, left-to-right form.
-The rules for sorting horizontally may vary depending on what you
-are doing, but the rules for vertical sorting are always the same.
-This routine is passed an argument that is a function that will
-perform the horizontal sort on demand (for example, swathxsort() or
-SwathUnion()).
-
-This is a recursive routine. A new edge (or edge pair) may overlap
-the list I am building in strange and wonderful ways. Edges may
-cross. When this happens, my strategy is to split the incoming edge
-(or the growing list) in two at that point, execute the actual sort on
-the top part of the split, and recursively call myself to figure out
-exactly where the bottom part belongs.
-*/
-
-#define TOP(e) ((e)->ymin) /* the top of an edge (for readability */
-#define BOTTOM(e) ((e)->ymax) /* the bottom of an edge (for readability */
-
-struct edgelist *
-SortSwath(struct edgelist *anchor, /* list being built */
- struct edgelist *edge, /* incoming edge or pair of edges */
- SwathFunc swathfcn) /* horizontal sorter */
-{
- register struct edgelist *before,*after;
- struct edgelist base;
-
- if (anchor == NULL)
- return(edge);
-
- before = &base;
- before->ymin = before->ymax = MINPEL;
- before->link = after = anchor;
-
-/*
-If the incoming edge is above the current list, we connect the current
-list to the bottom of the incoming edge. One slight complication is
-if the incoming edge overlaps into the current list. Then, we
-first split the incoming edge in two at the point of overlap and recursively
-call ourselves to sort the bottom of the split into the current list:
-*/
- if (TOP(edge) < TOP(after)) {
- if (BOTTOM(edge) > TOP(after)) {
-
- after = SortSwath(after, splitedge(edge, TOP(after)), swathfcn);
- }
- vertjoin(edge, after);
- return(edge);
- }
-/*
-At this point the top of edge is not higher than the top of the list,
-which we keep in 'after'. We move the 'after' point down the list,
-until the top of the edge occurs in the swath beginning with 'after'.
-
-If the bottom of 'after' is below the bottom of the edge, we have to
-split the 'after' swath into two parts, at the bottom of the edge.
-If the bottom of 'after' is above the bottom of the swath,
-*/
-
- while (VALIDEDGE(after)) {
-
- if (TOP(after) == TOP(edge)) {
- if (BOTTOM(after) > BOTTOM(edge))
- vertjoin(after, splitedge(after, BOTTOM(edge)));
- else if (BOTTOM(after) < BOTTOM(edge)) {
- after = SortSwath(after,
- splitedge(edge, BOTTOM(after)), swathfcn);
- }
- break;
- }
- else if (TOP(after) > TOP(edge)) {
- if (BOTTOM(edge) > TOP(after)) {
- after = SortSwath(after,
- splitedge(edge, TOP(after)), swathfcn);
- }
- break;
- }
- else if (BOTTOM(after) > TOP(edge))
- vertjoin(after, splitedge(after, TOP(edge)));
-
- before = after;
- after = after->link;
- }
-
-/*
-At this point 'edge' exactly corresponds in height to the current
-swath pointed to by 'after'.
-*/
- if (after != NULL && TOP(after) == TOP(edge)) {
- before = (*swathfcn)(before, edge);
- after = before->link;
- }
-/*
-At this point 'after' contains all the edges after 'edge', and 'before'
-contains all the edges before. Whew! A simple matter now of adding
-'edge' to the linked list in its rightful place:
-*/
- before->link = edge;
- if (RegionDebug > 1) {
- while (edge->link != NULL) {
- edge = edge->link;
- }
- }
- else
- for (; edge->link != NULL; edge = edge->link) { ; }
-
- edge->link = after;
- return(base.link);
-}
-
-/*
-:h3.splitedge() - Split an Edge or Swath in Two at a Given Y Value
-
-This function returns the edge or swath beginning at the Y value, and
-is guaranteed not to change the address of the old swath while splitting
-it.
-*/
-
-static struct edgelist *
-splitedge(struct edgelist *list, /* area to split */
- pel y) /* Y value to split list at */
-{
- register struct edgelist *new; /* anchor for newly built list */
- register struct edgelist *last = NULL; /* end of newly built list */
- register struct edgelist *r; /* temp pointer to new structure */
- register struct edgelist *lastlist; /* temp pointer to last 'list' value */
-
- lastlist = new = NULL;
-
- while (list != NULL) {
- if (y < list->ymin)
- break;
- if (y >= list->ymax)
- Abort("splitedge: above top of list");
- if (y == list->ymin)
- Abort("splitedge: would be null");
-
- r = (struct edgelist *)Allocate(sizeof(struct edgelist), list, 0);
-/*
-At this point 'r' points to a copy of the single structure at 'list'.
-We will make 'r' be the new split 'edgelist'--the lower half.
-We don't bother to correct 'xmin' and 'xmax', we'll take the
-the pessimistic answer that results from using the old values.
-*/
- r->ymin = y;
- r->xvalues = list->xvalues + (y - list->ymin);
-/*
-Note that we do not need to allocate new memory for the X values,
-they can remain with the old "edgelist" structure. We do have to
-update that old structure so it is not as high:
-*/
- list->ymax = y;
-/*
-Insert 'r' in the subpath chain:
-*/
- r->subpath = list->subpath;
- list->subpath = r;
-/*
-Now attach 'r' to the list we are building at 'new', and advance
-'list' to point to the next element in the old list:
-*/
- if (new == NULL)
- new = r;
- else
- last->link = r;
- last = r;
- lastlist = list;
- list = list->link;
- }
-/*
-At this point we have a new list built at 'new'. We break the old
-list at 'lastlist', and add the broken off part to the end of 'new'.
-Then, we return the caller a pointer to 'new':
-*/
- if (new == NULL)
- Abort("null splitedge");
- lastlist->link = NULL;
- last->link = list;
- return(new);
-}
-
-/*
-:h3.vertjoin() - Join Two Disjoint Edge Lists Vertically
-
-The two edges must be disjoint vertically.
-*/
-static void vertjoin(top, bottom)
- register struct edgelist *top; /* uppermost region */
- register struct edgelist *bottom; /* bottommost region */
-{
- if (BOTTOM(top) > TOP(bottom))
- Abort("vertjoin not disjoint");
-
- for (; top->link != NULL; top=top->link) { ; }
-
- top->link = bottom;
- return;
-}
-
-/*
-:h3.swathxsort() - Sorting by X Values
-
-We need to sort 'edge' into its rightful
-place in the swath by X value, taking care that we do not accidentally
-advance to the next swath while searching for the correct X value. Like
-all swath functions, this function returns a pointer to the edge
-BEFORE the given edge in the sort.
-*/
-
-static struct edgelist *
-swathxsort(struct edgelist *before0, /* edge before this swath */
- struct edgelist *edge) /* input edge */
-{
- register struct edgelist *before;
- register struct edgelist *after;
- register pel y = 0;
-
- before = before0;
- after = before->link;
-
- while (after != NULL && TOP(after) == TOP(edge)) {
-
- register pel *x1,*x2;
-
- y = TOP(edge);
- x1 = after->xvalues;
- x2 = edge->xvalues;
-
- while (y < BOTTOM(edge) && *x1 == *x2) {
- x1++; x2++; y++;
- }
- if (y >= BOTTOM(edge)) {
- edge->flag |= ISAMBIGUOUS(ON);
- after->flag |= ISAMBIGUOUS(ON);
- break;
- }
-
- if (*x1 >= *x2)
- break;
-
- before = after;
- after = after->link;
- }
-
-/*
-At this point, 'edge' is between 'before' and 'after'. If 'edge' didn't
-cross either of those other edges, we would be done. We check for
-crossing. If it does cross, we split the problem up by calling SortSwath
-recursively with the part of the edge that is below the crossing point:
-*/
-{
- register int h0,h; /* height of edge--number of scans */
-
- h0 = h = BOTTOM(edge) - y;
- y -= TOP(edge);
-
- if (h0 <= 0) {
- return(before);
- }
-
- if (TOP(before) == TOP(edge))
- h -= crosses(h, &before->xvalues[y], &edge->xvalues[y]);
- if (after != NULL && TOP(after) == TOP(edge))
- h -= crosses(h, &edge->xvalues[y], &after->xvalues[y]);
-
- if (h < h0) {
- SortSwath(before0->link,
- splitedge(edge, TOP(edge) + y + h),
- swathxsort);
-
- }
-}
-
- return(before);
-}
-/*
-:h3.SwathUnion() - Union Two Edges by X Value
-
-We have a left and right edge that must be unioned into a growing
-swath. If they are totally disjoint, they are just added in. The
-fun comes in they overlap the existing edges. Then some edges
-will disappear.
-*/
-
-struct edgelist *
-SwathUnion(struct edgelist *before0, /* edge before the swath */
- struct edgelist *edge) /* list of two edges to be unioned */
-{
- register int h; /* saves height of edge */
- register struct edgelist *rightedge; /* saves right edge of 'edge' */
- register struct edgelist *before,*after; /* edge before and after */
- int h0; /* saves initial height */
-
- h0 = h = edge->ymax - edge->ymin;
- if (h <= 0)
- Abort("SwathUnion: 0 height swath?");
-
- before = before0;
- after = before->link;
-
- while (after != NULL && TOP(after) == TOP(edge)) {
- register struct edgelist *right;
-
- right = after->link;
- if (right->xvalues[0] >= edge->xvalues[0])
- break;
- before = right;
- after = before->link;
- }
-/*
-This is the picture at this point. 'L' indicates a left hand edge,
-'R' indicates the right hand edge.
-'<--->' indicates the degree of uncertainty as to its placement
-relative to other edges:
-:xmp atomic.
- before after
- R <---L----> R L R L R
- <---L---> <------R-------------------------->
- edge
-:exmp.
-In case the left of 'edge' touches 'before', we need to reduce
-the height by that amount.
-*/
- if (TOP(before) == TOP(edge))
- h -= touches(h, before->xvalues, edge->xvalues);
-
- rightedge = edge->link;
-
- if (after == NULL || TOP(after) != TOP(edge) ||
- after->xvalues[0] > rightedge->xvalues[0]) {
-/*
-On this side of the the above 'if', the new edge is disjoint from the
-existing edges in the swath. This is the picture:
-:xmp atomic.
- before after
- R L R L R L R
- L R
- edge
-:exmp.
-We will verify it remains disjoint for the entire height. If the
-situation changes somewhere down the edge, we split the edge at that
-point and recursively call ourselves (through 'SortSwath') to figure
-out the new situation:
-*/
- if (after != NULL && TOP(after) == TOP(edge))
- h -= touches(h, rightedge->xvalues, after->xvalues);
- if (h < h0)
- SortSwath(before0->link, splitedge(edge, edge->ymin + h), t1_SwathUnion);
- /* go to "return" this edge pair; it is totally disjoint */
- }
- else {
-/*
-At this point, at the 'else', we know that the
-new edge overlaps one or more pairs in the existing swath. Here is
-a picture of our knowledge and uncertainties:
-:xmp atomic.
- before after
- R L R L R L R
- <---L---> <---R------------------->
- edge
-:exmp.
-We need to move 'after' along until it is to the right of the
-right of 'edge'. ('After' should always point to a left edge of a pair:)
-*/
- register struct edgelist *left; /* variable to keep left edge in */
-
- do {
- left = after;
- after = (after->link)->link;
-
- } while (after != NULL && TOP(after) == TOP(edge)
- && after->xvalues[0] <= rightedge->xvalues[0]);
-/*
-At this point this is the picture:
-:xmp atomic.
- before left after
- R L R L R L R
- <---L---> <---R--->
- edge
-:exmp.
-We need to verify that the situation stays like this all the way
-down the edge. Again, if the
-situation changes somewhere down the edge, we split the edge at that
-point and recursively call ourselves (through 'SortSwath') to figure
-out the new situation:
-*/
-
- h -= crosses(h, left->xvalues, rightedge->xvalues);
- h -= crosses(h, edge->xvalues, ((before->link)->link)->xvalues);
-
- if (after != NULL && TOP(after) == TOP(edge))
-
- h -= touches(h, rightedge->xvalues, after->xvalues);
-
-/*
-OK, if we touched either of our neighbors we need to split at that point
-and recursively sort the split edge onto the list. One tricky part
-is that when we recursively sort, 'after' will change if it was not
-in our current swath:
-*/
- if (h < h0) {
- SortSwath(before0->link,
- splitedge(edge, edge->ymin + h),
- t1_SwathUnion);
-
- if (after == NULL || TOP(after) != TOP(edge))
- for (after = before0->link;
- TOP(after) == TOP(edge);
- after = after->link) { ; }
- }
-/*
-Now we need to augment 'edge' by the left and right of the overlapped
-swath, and to discard all edges between before and after, because they
-were overlapped and have been combined with the new incoming 'edge':
-*/
- edge->xmin = MIN(edge->xmin, (before->link)->xmin);
- edge->xmax = MIN(edge->xmax, (before->link)->xmax);
- edgemin(h, edge->xvalues, (before->link)->xvalues);
- rightedge->xmin = MAX(rightedge->xmin, (left->link)->xmin);
- rightedge->xmax = MAX(rightedge->xmax, (left->link)->xmax);
- edgemax(h, rightedge->xvalues, (left->link)->xvalues);
- discard(before, after);
- }
- return(before);
-}
-#ifdef notused
-/*
-:h3.swathrightmost() - Simply Sorts New Edge to Rightmost of Swath
-
-Like all swath functions, this function returns a pointer to the edge
-BEFORE the given edge in the sort.
-*/
-
-static struct edgelist *
-swathrightmost(struct edgelist *before, /* edge before this swath */
- struct edgelist *edge) /* input edge */
-{
- register struct edgelist *after;
-
- after = before->link;
-
- while (after != NULL && TOP(after) == TOP(edge)) {
- before = after;
- after = after->link;
- }
-
- return(before);
-
-}
-#endif
-/*
-:h3.touches() - Returns the Remaining Height When Two Edges Touch
-
-So, it will return 0 if they never touch. Allows incredibly(?) mnemonic
-if (touches(...)) construct.
-*/
-
-static int
-touches(int h, pel *left, pel *right)
-{
- for (; h > 0; h--)
- if (*left++ >= *right++)
- break;
- return(h);
-}
-/*
-:h3.crosses() - Returns the Remaining Height When Two Edges Cross
-
-So, it will return 0 if they never cross.
-*/
-
-static int
-crosses(int h, pel *left, pel *right)
-{
- for (; h > 0; h--)
- if (*left++ > *right++)
- break;
- return(h);
-}
-/*
-:h3.cedgemin() - Stores the Mininum of an Edge and an X Value
-*/
-
-static void
-cedgemin(int h, pel *e1, pel x)
-{
- for (; --h >= 0; e1++)
- if (*e1 > x)
- *e1 = x;
-}
-/*
-:h3.cedgemax() - Stores the Maximum of an Edge and an X Value
-*/
-
-static void
-cedgemax(int h, pel *e1, pel x)
-{
- for (; --h >= 0; e1++)
- if (*e1 < x)
- *e1 = x;
-}
-/*
-:h3.edgemin() - Stores the Mininum of Two Edges in First Edge
-*/
-
-static void
-edgemin(int h, pel *e1, pel *e2)
-{
- for (; --h >= 0; e1++,e2++)
- if (*e1 > *e2)
- *e1 = *e2;
-}
-/*
-:h3.edgemax() - Stores the Maximum of Two Edges in First Edge
-*/
-
-static void
-edgemax(int h, pel *e1, pel *e2)
-{
- for (; --h >= 0; e1++,e2++)
- if (*e1 < *e2)
- *e1 = *e2;
-}
-
-/*
-:h2.Changing the Representation of Regions
-
-For convenience and/or performance, we sometimes like to change the way
-regions are represented. This does not change the object itself, just
-the representation, so these transformations can be made on a permanent
-region.
-
-*/
-
-void
-MoveEdges(struct region *R, /* region to modify */
- fractpel dx, fractpel dy) /* delta X and Y to move edge list by */
-{
- register struct edgelist *edge; /* for looping through edges */
-
- R->origin.x += dx;
- R->origin.y += dy;
- R->ending.x += dx;
- R->ending.y += dy;
- if (R->thresholded != NULL) {
- R->thresholded->origin.x -= dx;
- R->thresholded->origin.y -= dy;
- }
-/*
-From now on we will deal with dx and dy as integer pel values:
-*/
- dx = NEARESTPEL(dx);
- dy = NEARESTPEL(dy);
- if (dx == 0 && dy == 0)
- return;
-
- R->xmin += dx;
- R->xmax += dx;
- R->ymin += dy;
- R->ymax += dy;
-
- for (edge = R->anchor; VALIDEDGE(edge); edge = edge->link) {
- edge->ymin += dy;
- edge->ymax += dy;
- if (dx != 0) {
- register int h; /* loop index; height of edge */
- register pel *Xp; /* loop pointer to X values */
-
- edge->xmin += dx;
- edge->xmax += dx;
- for (Xp = edge->xvalues, h = edge->ymax - edge->ymin;
- --h >= 0; )
- *Xp++ += dx;
- }
- }
-}
-
-/*
-:h3.UnJumble() - Sort a Region Top to Bottom
-
-It is an open question whether it pays in general to do this.
-*/
-
-void
-UnJumble(struct region *region) /* region to sort */
-{
- register struct edgelist *anchor; /* new lists built here */
- register struct edgelist *edge; /* edge pointer for loop */
- register struct edgelist *next; /* ditto */
-
- anchor = NULL;
-
- for (edge=region->anchor; VALIDEDGE(edge); edge=next) {
- if (edge->link == NULL)
- Abort("UnJumble: unpaired edge?");
- next = edge->link->link;
- edge->link->link = NULL;
- anchor = SortSwath(anchor, edge, t1_SwathUnion);
- }
-
- if (edge != NULL)
- vertjoin(anchor, edge);
-
- region->anchor = anchor;
- region->flag &= ~ISJUMBLED(ON);
-}
-
-/*
-*/
-#ifdef notused
-static void
-OptimizeRegion(struct region *R) /* region to optimize */
-{
- register pel *xP; /* pel pointer for inner loop */
- register int x; /* holds X value */
- register int xmin,xmax; /* holds X range */
- register int h; /* loop counter */
- register struct edgelist *e; /* edgelist pointer for loop */
-
- R->flag |= ISRECTANGULAR(ON);
-
- for (e = R->anchor; VALIDEDGE(e); e=e->link) {
- xmin = MAXPEL;
- xmax = MINPEL;
- for (h = e->ymax - e->ymin, xP = e->xvalues; --h >= 0;) {
- x = *xP++;
- if (x < xmin) xmin = x;
- if (x > xmax) xmax = x;
- }
- if (xmin != xmax || (xmin != R->xmin && xmax != R->xmax))
- R->flag &= ~ISRECTANGULAR(ON);
- if (xmin < e->xmin || xmax > e->xmax)
- Abort("Tighten: existing edge bound was bad");
- if (xmin < R->xmin || xmax > R->xmax)
- Abort("Tighten: existing region bound was bad");
- e->xmin = xmin;
- e->xmax = xmax;
- }
- R->flag |= ISOPTIMIZED(ON);
-}
-#endif
-
-/*
-:h2.Miscelaneous Routines
-
-:h3.MoreWorkArea() - Allocate New Space for "edge"
-
-Our strategy is to temporarily allocate an array to hold this
-unexpectedly large edge. ChangeDirection frees this array any time
-it gets a shorter 'dy'.
-*/
-
-/*ARGSUSED*/
-void
-MoreWorkArea(struct region *R, /* region we are generating */
- fractpel x1, fractpel y1, /* starting point of line */
- fractpel x2, fractpel y2) /* ending point of line */
-{
- register int idy; /* integer dy of line */
-
- idy = NEARESTPEL(y1) - NEARESTPEL(y2);
- if (idy < 0) idy = - idy;
-
- /*
- * we must add one to the delta for the number of run ends we
- * need to store:
- */
- if (++idy > currentsize) {
- if (currentworkarea != workedge)
- NonObjectFree(currentworkarea);
- currentworkarea = (pel *)Allocate(0, NULL, idy * sizeof(pel));
- currentsize = idy;
- }
- ChangeDirection(CD_CONTINUE, R, x1, y1, y2 - y1);
-}
-
-/*
-:h3.BoxClip() - Clip a Region to a Rectangle
-
-BoxClip also duplicates the region if it is permanent. Note the
-clipping box is specified in REGION coordinates, that is, in
-coordinates relative to the region (0,0) point
-*/
-
-struct region *
-BoxClip(struct region *R, /* region to clip */
- pel xmin, pel ymin, /* upper left hand corner of rectangle */
- pel xmax, pel ymax) /* lower right hand corner */
-{
- struct edgelist anchor; /* pretend edgelist to facilitate discards */
- register struct edgelist *e,*laste;
-
- R = UniqueRegion(R);
-
- if (xmin > R->xmin) {
- R->xmin = xmin;
- }
- if (xmax < R->xmax) {
- R->xmax = xmax;
- }
-
- if (ymin > R->ymin) {
- R->ymin = ymin;
- }
- if (ymax < R->ymax) {
- R->ymax = ymax;
- }
-
-
- laste = &anchor;
- anchor.link = R->anchor;
-
- for (e = R->anchor; VALIDEDGE(e); e = e->link) {
- if (TOP(e) < ymin) {
- e->xvalues += ymin - e->ymin;
- e->ymin = ymin;
- }
- if (BOTTOM(e) > ymax)
- e->ymax = ymax;
- if (TOP(e) >= BOTTOM(e)) {
- discard(laste, e->link->link);
- e = laste;
- continue;
- }
- if (e->xmin < xmin) {
- cedgemax(BOTTOM(e) - TOP(e), e->xvalues, xmin);
- e->xmin = xmin;
- e->xmax = MAX(e->xmax, xmin);
- }
- if (e->xmax > xmax) {
- cedgemin(BOTTOM(e) - TOP(e), e->xvalues, xmax);
- e->xmin = MIN(e->xmin, xmax);
- e->xmax = xmax;
- }
- laste = e;
- }
-
- R->anchor = anchor.link;
-
- return(R);
-}
-
-#ifdef notdef
-/*
-:h3.CoerceRegion() - Force a TextPath Structure to Become a Region
-
-We also save the newly created region in the textpath structure, if the
-structure was permanent. Then we don't have to do this again. Why not
-save it all the time? Well, we certainly could, but I suspect it
-wouldn't pay. We would have to make this region permanent (because we
-couldn't have it be consumed) and this would probably require
-unnecessary CopyRegions in most cases.
-*/
-
-struct region *
-CoerceRegion(struct textpath *tp) /* input TEXTTYPE */
-{
- struct segment *path; /* temporary character path */
- struct region *R; /* returned region */
-
-
- R = Interior(path, EVENODDRULE);
- return(R);
-}
-#endif
-
-/*
-:h3.RegionBounds() - Returns Bounding Box of a Region
-*/
-
-struct segment *
-RegionBounds(struct region *R)
-{
- register struct segment *path; /* returned path */
-
- path = BoxPath(IDENTITY, R->ymax - R->ymin, R->xmax - R->xmin);
- path = Join(PathSegment(MOVETYPE, R->origin.x + TOFRACTPEL(R->xmin),
- R->origin.y + TOFRACTPEL(R->ymin) ),
- path);
- return(path);
-}
-
-/*
-:h2.Formatting/Dump Routines for Debug
-
-:h3.DumpArea() - Display a Region
-*/
-void
-DumpArea(struct region *area)
-{
- DumpEdges(area->anchor);
-}
-
-#define INSWATH(p, y0, y1) (p != NULL && p->ymin == y0 && p->ymax == y1)
-/*
-:h3.DumpEdges() - Display Run End Lists (Edge Lists)
-*/
-
-/*
-:h3.edgecheck() - For Debug, Verify that an Edge Obeys the Rules
-*/
-
-/*ARGSUSED*/
-static void
-edgecheck(struct edgelist *edge, int oldmin, int oldmax)
-{
- if (edge->type != EDGETYPE)
- Abort("EDGE ERROR: non EDGETYPE in list");
-/*
-The following check is not valid if the region is jumbled so I took it
-out:
-*/
-/* if (edge->ymin < oldmax && edge->ymin != oldmin)
- Abort("EDGE ERROR: overlapping swaths"); */
-}
-
-void
-DumpEdges(struct edgelist *edges)
-{
- register struct edgelist *p,*p2;
- register pel ymin = MINPEL;
- register pel ymax = MINPEL;
-
- if (edges == NULL) {
- return;
- }
- if (RegionDebug <= 1) {
- for (p=edges; p != NULL; p = p->link) {
- edgecheck(p, ymin, ymax);
- ymin = p->ymin; ymax = p->ymax;
- }
- }
- else {
-
- for (p2=edges; p2 != NULL; ) {
-
- edgecheck(p2, ymin, ymax);
- ymin = p2->ymin;
- ymax = p2->ymax;
-
- while (INSWATH(p2, ymin, ymax))
- p2 = p2->link;
- }
- }
-}
diff --git a/nx-X11/lib/font/Type1/regions.h b/nx-X11/lib/font/Type1/regions.h
deleted file mode 100644
index 96ad1a53a..000000000
--- a/nx-X11/lib/font/Type1/regions.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/* $Xorg: regions.h,v 1.3 2000/08/17 19:46:32 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/regions.h,v 1.7 2001/01/17 19:43:23 dawes Exp $ */
-/*SHARED*/
-
-#define Interior(p,rule) t1_Interior(p,rule)
-#define Union(a1,a2) t1_Union(a1,a2)
-#define Intersect(a1,a2) t1_Intersect(a1,a2)
-#define Complement(area) t1_Complement(area)
-#define Overlap(a1,a2) t1_OverLap(a1,a2)
-
-
-/* returns the interior of a closed path */
-extern struct region *t1_Interior ( struct segment *p, int fillrule );
-#if 0
-struct region *t1_Union(); /* set union of paths or regions */
-struct region *t1_Intersect(); /* set intersection of regions */
-struct region *t1_Complement(); /* complement of a region */
-int t1_Overlap(); /* returns a Boolean; TRUE if regions overlap */
-#endif
-
-#define TT_INFINITY t1_Infinity
-
-/*END SHARED*/
-/*SHARED*/
-
-#define ChangeDirection(type,R,x,y,dy) t1_ChangeDirection(type,R,x,y,dy)
-
-/* called when we change direction in Y */
-extern void t1_ChangeDirection ( int type, struct region *R, fractpel x,
- fractpel y, fractpel dy );
-#define CD_FIRST -1 /* enumeration of ChangeDirection type */
-#define CD_CONTINUE 0 /* enumeration of ChangeDirection type */
-#define CD_LAST 1 /* enumeration of ChangeDirection type */
-
-#define MoreWorkArea(R,x1,y1,x2,y2) t1_MoreWorkArea(R,x1,y1,x2,y2)
-#define KillRegion(area) t1_KillRegion(area)
-#define CopyRegion(area) t1_CopyRegion(area)
-#define BoxClip(R,xmin,ymin,xmax,ymax) t1_BoxClip(R,xmin,ymin,xmax,ymax)
-#define SortSwath(a,p,f) t1_SortSwath(a,p,f)
-#define SwathUnion(b,e) t1_SwathUnion(b,e)
-#define RegionBounds(r) t1_RegionBounds(r)
-#define CoerceRegion(p) t1_CoerceRegion(p)
-#define MoveEdges(R,dx,dy) t1_MoveEdges(R,dx,dy)
-#define UnJumble(R) t1_UnJumble(R)
-
-typedef struct edgelist *(*SwathFunc)(struct edgelist *, struct edgelist *);
-
-/* get longer edge list for stepping */
-extern void t1_MoreWorkArea ( struct region *R, fractpel x1, fractpel y1,
- fractpel x2, fractpel y2 );
-/* duplicate a region */
-extern struct region *t1_CopyRegion ( struct region *area );
-/* destroy a region */
-extern void t1_KillRegion ( struct region *area );
-/* clip a region to a rectangle */
-extern struct region *t1_BoxClip ( struct region *R, pel xmin, pel ymin,
- pel xmax, pel ymax );
-/* sort edges onto growing edge list */
-extern struct edgelist *t1_SortSwath ( struct edgelist *anchor,
- struct edgelist *edge,
- SwathFunc swathfcn );
-/* 'union' two edges into a swath */
-extern struct edgelist *t1_SwathUnion ( struct edgelist *before0,
- struct edgelist *edge );
-/* returns bounding box of a region */
-extern struct segment *t1_RegionBounds ( struct region *R );
-#ifdef notdef
-/* force text to become a true region */
-struct region *t1_CoerceRegion(struct textpath *tp);
-#endif
-/* moves the edge values in a region */
-extern void t1_MoveEdges ( struct region *R, fractpel dx, fractpel dy );
-/* sort the edges and reset the jumbled flag */
-extern void t1_UnJumble ( struct region *region );
-
-
-/*END SHARED*/
-/*SHARED*/
-
-#define GOING_TO(R, x1, y1, x2, y2, dy) { \
- if (dy < 0) { \
- if (R->lastdy >= 0) \
- ChangeDirection(CD_CONTINUE, R, x1, y1, dy); \
- if (y2 < R->edgeYstop) \
- MoreWorkArea(R, x1, y1, x2, y2); \
- } \
- else if (dy > 0) { \
- if (R->lastdy <= 0) \
- ChangeDirection(CD_CONTINUE, R, x1, y1, dy); \
- if (y2 > R->edgeYstop) \
- MoreWorkArea(R, x1, y1, x2, y2); \
- } \
- else /* dy == 0 */ ChangeDirection(CD_CONTINUE, R, x1, y1, dy); \
- if (x2 < R->edgexmin) R->edgexmin = x2; \
- else if (x2 > R->edgexmax) R->edgexmax = x2; \
-}
-
-#ifndef FONTMODULE
-#ifndef __sxg__
-#include <limits.h>
-#endif
-#endif
-#ifdef SHRT_MIN
-#define MINPEL SHRT_MIN
-#else
-#define MINPEL ((pel)(-1<<(8*sizeof(pel)-1))) /* smallest value fitting in a pel */
-#endif
-#ifdef SHRT_MAX
-#define MAXPEL SHRT_MAX
-#else
-#define MAXPEL ((pel)((1<<(8*sizeof(pel)-1))-1))/* largest value fitting in a pel */
-#endif
-
-/*
-The "Unique"-type macro is different (unique?) for regions, because some
-regions structures are shared among several objects, and might have
-to be made unique for that reason (i.e., references > 1).
-*/
-
-#define ConsumeRegion(R) MAKECONSUME(R,KillRegion(R))
-#define UniqueRegion(R) MAKEUNIQUE(R,CopyRegion(R))
-
-
-/*END SHARED*/
-/*SHARED*/
-
-typedef void (*NewEdgeFunc)(struct region *,
- fractpel, fractpel, fractpel, fractpel, int);
-
-struct region {
- XOBJ_COMMON /* xobject common data define 3-26-91 PNM */
- /* type = REGIONTYPE */
- struct fractpoint origin; /* beginning handle: X,Y origin of region */
- struct fractpoint ending; /* ending handle: X,Y change after painting region */
- pel xmin,ymin; /* minimum X,Y of region */
- pel xmax,ymax; /* mat1_mum X,Y of region */
- struct edgelist *anchor; /* list of edges that bound the region */
- struct picture *thresholded; /* region defined by thresholded picture*/
-/*
-Note that the ending handle and the bounding box values are stored
-relative to 'origin'.
-
-The above elements describe a region. The following elements are
-scratchpad areas used while the region is being built:
-*/
- fractpel lastdy; /* direction of last segment */
- fractpel firstx,firsty; /* starting point of current edge */
- fractpel edgexmin,edgexmax; /* x extent of current edge */
- struct edgelist *lastedge,*firstedge; /* last and first edges in subpath */
- pel *edge; /* pointer to array of X values for edge */
- fractpel edgeYstop; /* Y value where 'edges' array ends */
- NewEdgeFunc newedgefcn; /* function to use when building a new edge */
- struct strokeinfo *strokeinfo; /* scratchpad info during stroking only */
-} ;
-/*
-The ISCOMPLEMENT flag indicates the region is reversed--it is the
-"outside" of the nominal region.
-*/
-#define ISCOMPLEMENT(flag) ((flag)&0x80)
-/*
-The ISJUMBLED flag indicates the region is not sorted top-to-bottom.
-*/
-#define ISJUMBLED(flag) ((flag)&0x40)
-/*
-The ISINFINITE flag allows a quick check for an INFINITE region, which
-is frequently intersected.
-*/
-#define ISINFINITE(flag) ((flag)&0x20)
-
-/*END SHARED*/
-/*SHARED*/
-
-#define ISRECTANGULAR(flag) ((flag)&0x08)
-
-/*END SHARED*/
-/*SHARED*/
-
-#define EmptyRegion t1_EmptyRegion
-
-/*END SHARED*/
-/*SHARED*/
-
-struct edgelist {
- XOBJ_COMMON /* xobject common data define 3-26-91 PNM */
- /* type = EDGETYPE */
- struct edgelist *link; /* pointer to next in linked list */
- struct edgelist *subpath; /* informational link for "same subpath" */
- pel xmin,xmax; /* range of edge in X */
- pel ymin,ymax; /* range of edge in Y */
- pel *xvalues; /* pointer to ymax-ymin X values */
-} ;
-/*
-The end of the list is marked by either "link" being NULL, or by
-ymin == ymax. See :hdref refid=discard.. We define the VALIDEDGE
-predicate to test for the opposite of these conditions:
-*/
-
-#define VALIDEDGE(p) ((p)!=NULL&&(p)->ymin<(p)->ymax)
-
-/*END SHARED*/
-/*SHARED*/
-
-#define ISDOWN(f) ((f)&0x80)
-
-#define ISAMBIGUOUS(f) ((f)&0x40)
-
-/*END SHARED*/
-/*SHARED*/
-
-/*
-Interior() rule enumerations:
-*/
-#define WINDINGRULE -2
-#define EVENODDRULE -3
-
-#define CONTINUITY 0x80 /* can be added to above rules; e.g. WINDINGRULE+CONTINUITY */
-
-/*END SHARED*/
-
-/* dump a region structure */
-extern void t1_DumpArea ( struct region *area );
-/* dump a region's edge list */
-extern void t1_DumpEdges ( struct edgelist *edges );
diff --git a/nx-X11/lib/font/Type1/scanfont.c b/nx-X11/lib/font/Type1/scanfont.c
deleted file mode 100644
index 8db497959..000000000
--- a/nx-X11/lib/font/Type1/scanfont.c
+++ /dev/null
@@ -1,2370 +0,0 @@
-/* $XdotOrg: xc/lib/font/Type1/scanfont.c,v 1.5 2005/07/09 23:30:06 keithp Exp $ */
-/* $Xorg: scanfont.c,v 1.3 2000/08/17 19:46:32 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* Author: Katherine A. Hitchcock IBM Almaden Research Laboratory */
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/scanfont.c,v 1.16 2003/05/27 22:26:46 tsi Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#ifndef FONTMODULE
-#include <string.h>
-#include <limits.h>
-#else
-#include "Xdefs.h" /* Bool declaration */
-#include "Xmd.h" /* INT32 declaration */
-#include "xf86_ansic.h"
-#endif
-#include "t1stdio.h"
-#include "util.h"
-#include "token.h"
-#if XFONT_CID
-#include "range.h"
-#endif
-#include "objects.h"
-#include "spaces.h"
-#include "fontfcn.h"
-#include "blues.h"
-
-#if XFONT_CID
-#define CID_BUFSIZE 80
-
-extern psfont *FDArrayP;
-static spacerange *spacerangeP;
-static cidrange *notdefrangeP;
-static cidrange *cidrangeP;
-extern int FDArrayIndex;
-static boolean CIDWantFontInfo;
-static psobj inputFile1;
-#endif
-
-static int rc;
-static boolean InPrivateDict;
-static boolean WantFontInfo;
-static boolean TwoSubrs;
-static psobj inputFile;
-static psobj filterFile;
-static psobj *inputP;
-
-
-/**********************************************************************/
-/* Init_BuiltInEncoding() */
-/* */
-/* Initializes the StandardEncoding and ISOLatin1Encoding vector. */
-/* */
-/**********************************************************************/
-typedef struct /* Builtin Standard Encoding */
-{
- int index;
- char *name;
-} EncodingTable;
-
-static EncodingTable StdEnc[] = {
- { 040 , "space" },
- { 041 , "exclam" },
- { 042 , "quotedbl" },
- { 043 , "numbersign" },
- { 044 , "dollar" },
- { 045 , "percent" },
- { 046 , "ampersand" },
- { 047 , "quoteright" },
- { 050 , "parenleft" },
- { 051 , "parenright" },
- { 052 , "asterisk" },
- { 053 , "plus" },
- { 054 , "comma" },
- { 055 , "hyphen" },
- { 056 , "period" },
- { 057 , "slash" },
- { 060 , "zero" },
- { 061 , "one" },
- { 062 , "two" },
- { 063 , "three" },
- { 064 , "four" },
- { 065 , "five" },
- { 066 , "six" },
- { 067 , "seven" },
- { 070 , "eight" },
- { 071 , "nine" },
- { 072 , "colon" },
- { 073 , "semicolon" },
- { 074 , "less" },
- { 075 , "equal" },
- { 076 , "greater" },
- { 077 , "question" },
- { 0100 , "at" },
- { 0101 , "A" },
- { 0102 , "B" },
- { 0103 , "C" },
- { 0104 , "D" },
- { 0105 , "E" },
- { 0106 , "F" },
- { 0107 , "G" },
- { 0110 , "H" },
- { 0111 , "I" },
- { 0112 , "J" },
- { 0113 , "K" },
- { 0114 , "L" },
- { 0115 , "M" },
- { 0116 , "N" },
- { 0117 , "O" },
- { 0120 , "P" },
- { 0121 , "Q" },
- { 0122 , "R" },
- { 0123 , "S" },
- { 0124 , "T" },
- { 0125 , "U" },
- { 0126 , "V" },
- { 0127 , "W" },
- { 0130 , "X" },
- { 0131 , "Y" },
- { 0132 , "Z" },
- { 0133 , "bracketleft" },
- { 0134 , "backslash" },
- { 0135 , "bracketright" },
- { 0136 , "asciicircum" },
- { 0137 , "underscore" },
- { 0140 , "quoteleft" },
- { 0141 , "a" },
- { 0142 , "b" },
- { 0143 , "c" },
- { 0144 , "d" },
- { 0145 , "e" },
- { 0146 , "f" },
- { 0147 , "g" },
- { 0150 , "h" },
- { 0151 , "i" },
- { 0152 , "j" },
- { 0153 , "k" },
- { 0154 , "l" },
- { 0155 , "m" },
- { 0156 , "n" },
- { 0157 , "o" },
- { 0160 , "p" },
- { 0161 , "q" },
- { 0162 , "r" },
- { 0163 , "s" },
- { 0164 , "t" },
- { 0165 , "u" },
- { 0166 , "v" },
- { 0167 , "w" },
- { 0170 , "x" },
- { 0171 , "y" },
- { 0172 , "z" },
- { 0173 , "braceleft" },
- { 0174 , "bar" },
- { 0175 , "braceright" },
- { 0176 , "asciitilde" },
- { 0241 , "exclamdown" },
- { 0242 , "cent" },
- { 0243 , "sterling" },
- { 0244 , "fraction" },
- { 0245 , "yen" },
- { 0246 , "florin" },
- { 0247 , "section" },
- { 0250 , "currency" },
- { 0251 , "quotesingle" },
- { 0252 , "quotedblleft" },
- { 0253 , "guillemotleft" },
- { 0254 , "guilsinglleft" },
- { 0255 , "guilsinglright" },
- { 0256 , "fi" },
- { 0257 , "fl" },
- { 0261 , "endash" },
- { 0262 , "dagger" },
- { 0263 , "daggerdbl" },
- { 0264 , "periodcentered" },
- { 0266 , "paragraph" },
- { 0267 , "bullet" },
- { 0270 , "quotesinglbase" },
- { 0271 , "quotedblbase" },
- { 0272 , "quotedblright" },
- { 0273 , "guillemotright" },
- { 0274 , "ellipsis" },
- { 0275 , "perthousand" },
- { 0277 , "questiondown" },
- { 0301 , "grave" },
- { 0302 , "acute" },
- { 0303 , "circumflex" },
- { 0304 , "tilde" },
- { 0305 , "macron" },
- { 0306 , "breve" },
- { 0307 , "dotaccent" },
- { 0310 , "dieresis" },
- { 0312 , "ring" },
- { 0313 , "cedilla" },
- { 0315 , "hungarumlaut" },
- { 0316 , "ogonek" },
- { 0317 , "caron" },
- { 0320 , "emdash" },
- { 0341 , "AE" },
- { 0343 , "ordfeminine" },
- { 0350 , "Lslash" },
- { 0351 , "Oslash" },
- { 0352 , "OE" },
- { 0353 , "ordmasculine" },
- { 0361 , "ae" },
- { 0365 , "dotlessi" },
- { 0370 , "lslash" },
- { 0371 , "oslash" },
- { 0372 , "oe" },
- { 0373 , "germandbls" },
- { 0, 0 }
-};
-
-static EncodingTable ISO8859Enc[] = {
- { 32, "space" },
- { 33, "exclam" },
- { 34, "quotedbl" },
- { 35, "numbersign" },
- { 36, "dollar" },
- { 37, "percent" },
- { 38, "ampersand" },
- { 39, "quoteright" },
- { 40, "parenleft" },
- { 41, "parenright" },
- { 42, "asterisk" },
- { 43, "plus" },
- { 44, "comma" },
- { 45, "minus" },
- { 46, "period" },
- { 47, "slash" },
- { 48, "zero" },
- { 49, "one" },
- { 50, "two" },
- { 51, "three" },
- { 52, "four" },
- { 53, "five" },
- { 54, "six" },
- { 55, "seven" },
- { 56, "eight" },
- { 57, "nine" },
- { 58, "colon" },
- { 59, "semicolon" },
- { 60, "less" },
- { 61, "equal" },
- { 62, "greater" },
- { 63, "question" },
- { 64, "at" },
- { 65, "A" },
- { 66, "B" },
- { 67, "C" },
- { 68, "D" },
- { 69, "E" },
- { 70, "F" },
- { 71, "G" },
- { 72, "H" },
- { 73, "I" },
- { 74, "J" },
- { 75, "K" },
- { 76, "L" },
- { 77, "M" },
- { 78, "N" },
- { 79, "O" },
- { 80, "P" },
- { 81, "Q" },
- { 82, "R" },
- { 83, "S" },
- { 84, "T" },
- { 85, "U" },
- { 86, "V" },
- { 87, "W" },
- { 88, "X" },
- { 89, "Y" },
- { 90, "Z" },
- { 91, "bracketleft" },
- { 92, "backslash" },
- { 93, "bracketright" },
- { 94, "asciicircum" },
- { 95, "underscore" },
- { 96, "quoteleft" },
- { 97, "a" },
- { 98, "b" },
- { 99, "c" },
- { 100, "d" },
- { 101, "e" },
- { 102, "f" },
- { 103, "g" },
- { 104, "h" },
- { 105, "i" },
- { 106, "j" },
- { 107, "k" },
- { 108, "l" },
- { 109, "m" },
- { 110, "n" },
- { 111, "o" },
- { 112, "p" },
- { 113, "q" },
- { 114, "r" },
- { 115, "s" },
- { 116, "t" },
- { 117, "u" },
- { 118, "v" },
- { 119, "w" },
- { 120, "x" },
- { 121, "y" },
- { 122, "z" },
- { 123, "braceleft" },
- { 124, "bar" },
- { 125, "braceright" },
- { 126, "asciitilde" },
- { 160, "space" },
- { 161, "exclamdown" },
- { 162, "cent" },
- { 163, "sterling" },
- { 164, "currency" },
- { 165, "yen" },
- { 166, "brokenbar" },
- { 167, "section" },
- { 168, "dieresis" },
- { 169, "copyright" },
- { 170, "ordfeminine" },
- { 171, "guillemotleft" },
- { 172, "logicalnot" },
- { 173, "hyphen" },
- { 174, "registered" },
- { 175, "macron" },
- { 176, "degree" },
- { 177, "plusminus" },
- { 178, "twosuperior" },
- { 179, "threesuperior" },
- { 180, "acute" },
- { 181, "mu" },
- { 182, "paragraph" },
- { 183, "periodcentered" },
- { 184, "cedilla" },
- { 185, "onesuperior" },
- { 186, "ordmasculine" },
- { 187, "guillemotright" },
- { 188, "onequarter" },
- { 189, "onehalf" },
- { 190, "threequarters" },
- { 191, "questiondown" },
- { 192, "Agrave" },
- { 193, "Aacute" },
- { 194, "Acircumflex" },
- { 195, "Atilde" },
- { 196, "Adieresis" },
- { 197, "Aring" },
- { 198, "AE" },
- { 199, "Ccedilla" },
- { 200, "Egrave" },
- { 201, "Eacute" },
- { 202, "Ecircumflex" },
- { 203, "Edieresis" },
- { 204, "Igrave" },
- { 205, "Iacute" },
- { 206, "Icircumflex" },
- { 207, "Idieresis" },
- { 208, "Eth" },
- { 209, "Ntilde" },
- { 210, "Ograve" },
- { 211, "Oacute" },
- { 212, "Ocircumflex" },
- { 213, "Otilde" },
- { 214, "Odieresis" },
- { 215, "multiply" },
- { 216, "Oslash" },
- { 217, "Ugrave" },
- { 218, "Uacute" },
- { 219, "Ucircumflex" },
- { 220, "Udieresis" },
- { 221, "Yacute" },
- { 222, "Thorn" },
- { 223, "germandbls" },
- { 224, "agrave" },
- { 225, "aacute" },
- { 226, "acircumflex" },
- { 227, "atilde" },
- { 228, "adieresis" },
- { 229, "aring" },
- { 230, "ae" },
- { 231, "ccedilla" },
- { 232, "egrave" },
- { 233, "eacute" },
- { 234, "ecircumflex" },
- { 235, "edieresis" },
- { 236, "igrave" },
- { 237, "iacute" },
- { 238, "icircumflex" },
- { 239, "idieresis" },
- { 240, "eth" },
- { 241, "ntilde" },
- { 242, "ograve" },
- { 243, "oacute" },
- { 244, "ocircumflex" },
- { 245, "otilde" },
- { 246, "odieresis" },
- { 247, "divide" },
- { 248, "oslash" },
- { 249, "ugrave" },
- { 250, "uacute" },
- { 251, "ucircumflex" },
- { 252, "udieresis" },
- { 253, "yacute" },
- { 254, "thorn" },
- { 255, "ydieresis" },
- { 0, 0 }
-};
-
-static psobj *StdEncArrayP = NULL;
-psobj *ISOLatin1EncArrayP = NULL;
-
-static psobj *
-MakeEncodingArrayP(EncodingTable *encodingTable)
-{
- int i;
- psobj *encodingArrayP;
-
- encodingArrayP = (psobj *)vm_alloc(256*(sizeof(psobj)));
- if (!encodingArrayP)
- return NULL;
-
- /* initialize everything to .notdef */
- for (i=0; i<256;i++)
- objFormatName(&(encodingArrayP[i]),7, ".notdef");
-
- for (i=0; encodingTable[i].name; i++)
- {
- objFormatName(&(encodingArrayP[encodingTable[i].index]),
- strlen(encodingTable[i].name),
- encodingTable[i].name);
- }
-
- return(encodingArrayP);
-}
-
-boolean
-Init_BuiltInEncoding(void)
-{
- StdEncArrayP = MakeEncodingArrayP(StdEnc);
- ISOLatin1EncArrayP = MakeEncodingArrayP(ISO8859Enc);
- return (StdEncArrayP && ISOLatin1EncArrayP);
-}
-
-/********************************************************************/
-/***================================================================***/
-static int
-getNextValue(int valueType)
-{
- scan_token(inputP);
- if (tokenType != valueType) {
- return(SCAN_ERROR);
- }
- return(SCAN_OK);
-
-}
-/***================================================================***/
-/* This routine will set the global rc if there is an error */
-/***================================================================***/
-static int
-getInt(void)
-{
- scan_token(inputP);
- if (tokenType != TOKEN_INTEGER) {
- rc = SCAN_ERROR;
- return(0);
- }
- else {
- return( tokenValue.integer);
- }
-
-}
-/***================================================================***/
-/*
- * See Sec 10.3 of ``Adobe Type 1 Font Format'' v1.1,
- * for parsing Encoding.
- */
-static int
-getEncoding(psobj *arrayP)
-{
- scan_token(inputP);
- if ((tokenType == TOKEN_NAME && (tokenLength==16 || tokenLength==17)))
- {
- if((tokenLength==16) && (!strncmp(tokenStartP,"StandardEncoding",16)))
- arrayP->data.valueP = (char *) StdEncArrayP;
- else
- arrayP->data.valueP = (char *) ISOLatin1EncArrayP;
- arrayP->len = 256;
- return(SCAN_OK);
- }
- else if ( (tokenType == TOKEN_LEFT_BRACE) ||
- (tokenType == TOKEN_LEFT_BRACKET) )
- {
- /* Array of literal names */
-
- psobj *objP;
- int i;
-
- objP = (psobj *)vm_alloc(256*(sizeof(psobj)));
- if (!(objP)) return(SCAN_OUT_OF_MEMORY);
-
- arrayP->data.valueP = (char *) objP;
- arrayP->len = 256;
-
- for (i=0; i<256; i++, objP++)
- {
- scan_token(inputP);
-
- if (tokenType != TOKEN_LITERAL_NAME)
- return(SCAN_ERROR);
-
- if (!(vm_alloc(tokenLength)) ) return(SCAN_OUT_OF_MEMORY);
- objFormatName(objP,tokenLength,tokenStartP);
- }
-
- scan_token(inputP);
- if ( (tokenType == TOKEN_RIGHT_BRACE) ||
- (tokenType == TOKEN_RIGHT_BRACKET) )
- return(SCAN_OK);
- }
- else
- {
- /* Must be sequences of ``dup <index> <charactername> put" */
-
- psobj *objP;
- int i;
-
- objP = (psobj *)vm_alloc(256*(sizeof(psobj)));
- if (!(objP)) return(SCAN_OUT_OF_MEMORY);
-
- arrayP->data.valueP = (char *) objP;
- arrayP->len = 256;
-
- for (i=0; i<256; i++)
- objFormatName(objP + i, 7, ".notdef");
-
- while (TRUE)
- {
- scan_token(inputP);
-
- switch (tokenType)
- {
- case TOKEN_NAME:
- if (tokenLength == 3)
- {
- if (strncmp(tokenStartP,"dup",3) == 0)
- {
- /* get <index> */
- scan_token(inputP);
- if (tokenType != TOKEN_INTEGER ||
- tokenValue.integer < 0 ||
- tokenValue.integer > 255)
- return (SCAN_ERROR);
- i = tokenValue.integer;
-
- /* get <characer_name> */
- scan_token(inputP);
- if (tokenType != TOKEN_LITERAL_NAME)
- return(SCAN_ERROR);
-
- if (!(vm_alloc(tokenLength)) )
- return(SCAN_OUT_OF_MEMORY);
- objFormatName(objP + i,tokenLength,tokenStartP);
-
- /* get "put" */
- scan_token(inputP);
- if (tokenType != TOKEN_NAME)
- return(SCAN_ERROR);
- }
- else if (strncmp(tokenStartP,"def",3) == 0)
- return (SCAN_OK);
- }
- break;
- case TOKEN_EOF:
- case TOKEN_NONE:
- case TOKEN_INVALID:
- return (SCAN_ERROR);
- }
- }
- }
-
- return (SCAN_ERROR);
-}
-/***================================================================***/
-#if XFONT_CID
-static int
-getFDArray(psobj *arrayP)
-{
- int rc;
-
- /* get the number of items in the FDArray */
- scan_token(inputP);
- if (tokenType == TOKEN_INTEGER) {
- /* an FD array must contain at least one element */
- if (tokenValue.integer <= 0)
- return(SCAN_ERROR);
- arrayP->len = tokenValue.integer;
- } else
- return(SCAN_ERROR);
-
- /* get the token "array" */
- scan_token(inputP);
- if (tokenType != TOKEN_NAME || strncmp(tokenStartP, "array", 5) != 0)
- return(SCAN_ERROR);
-
- /* format the array in memory, save pointer to the beginning */
- arrayP->data.valueP = tokenStartP;
-
- /* allocate FDArray */
- /* No integer overflow since arrayP->len is unsigned short */
- FDArrayP = (psfont *)vm_alloc(arrayP->len*(sizeof(psfont)));
- if (!(FDArrayP)) return(SCAN_OUT_OF_MEMORY);
-
- /* get a specified number of font dictionaries */
- for (FDArrayIndex = 0; FDArrayIndex < arrayP->len; FDArrayIndex++) {
- /* get "dup" */
- scan_token(inputP);
- if (tokenType != TOKEN_NAME || strncmp(tokenStartP, "dup", 3) != 0)
- return(SCAN_ERROR);
- /* get an integer digit */
- scan_token(inputP);
- if (tokenType != TOKEN_INTEGER)
- return(SCAN_ERROR);
-
- /* read a CID version of a Type 1 font */
- if (!CIDType1fontfcnA(&rc))
- return(rc);
-
- /* get "put" */
- scan_token(inputP);
- if (tokenType != TOKEN_NAME || strncmp(tokenStartP, "put", 3) != 0)
- return(SCAN_ERROR);
- }
- return(SCAN_OK);
-}
-#endif
-
-static int
-getArray(psobj *arrayP)
-{
- int N; /* count the items in the array */
- psobj *objP;
-
- /* That is totally a kludge. If some stupid font file has
- * /foo/foo # ftp://ftp.cdrom.com/pub/os2/fonts/future.zip
- * we will treat it as /foo.
- * H.J. */
- char tmp [1024];
-
- strncpy (tmp, tokenStartP, sizeof (tmp));
- tmp [sizeof (tmp) - 1] = '\0';
-
-restart:
- scan_token(inputP);
- switch (tokenType)
- {
- case TOKEN_LEFT_BRACE:
- case TOKEN_LEFT_BRACKET:
- break;
-
- case TOKEN_LITERAL_NAME:
- tokenStartP[tokenLength] = '\0';
- if (strcmp (tokenStartP, tmp) == 0)
- {
- /* Ok, We see /foo/foo. Let's restart. */
- goto restart;
- }
-
- default:
- return(SCAN_ERROR);
- }
- /* format the array in memory, save pointer to the beginning */
- arrayP->data.valueP = tokenStartP;
- /* loop, picking up next object, until right BRACE or BRACKET */
- N = 0;
- do {
- scan_token(inputP);
- if ( (tokenType == TOKEN_RIGHT_BRACE) ||
- (tokenType == TOKEN_RIGHT_BRACKET) ) {
- /* save then number of items in the array */
- arrayP->len = N;
- return(SCAN_OK);
- }
- /* allocate the space for the object */
- objP = (psobj *)vm_alloc(sizeof(psobj));
- if (!(objP)) return(SCAN_OUT_OF_MEMORY);
-
- /* array is an array of numbers, (real or integer) */
- if (tokenType == TOKEN_REAL) {
- objFormatReal(objP, tokenValue.real);
- }
- else
- if (tokenType == TOKEN_INTEGER) {
- objFormatInteger(objP, tokenValue.integer);
- }
- else return(SCAN_ERROR);
- N++;
- } while ( 1>0 );
- /* NOTREACHED*/
-}
-/***================================================================***/
-static int
-getName(char *nameP)
-{
- do {
- scan_token(inputP);
- if (tokenType <= TOKEN_NONE) {
- if (tokenTooLong) return(SCAN_OUT_OF_MEMORY);
- return(SCAN_ERROR);
- }
- } while ((tokenType != TOKEN_NAME) ||
- (0 != strncmp(tokenStartP,nameP,strlen(nameP))) );
- /* found */
- return(SCAN_OK);
-}
-/***================================================================***/
-static int
-getNbytes(int N)
-{
- int I;
-
-
- tokenStartP = vm_next_byte();
- tokenMaxP = tokenStartP + MIN(vm_free_bytes(), MAX_STRING_LEN);
- if (N > vm_free_bytes()) {
- return(SCAN_OUT_OF_MEMORY);
- }
- I = T1Read(tokenStartP,1,N,inputP->data.fileP);
- if ( I != N ) return(SCAN_FILE_EOF);
- return(SCAN_OK);
-}
-
-/***================================================================***/
-/* getLiteralName(nameObjP) */
-/* scan for next literal. */
-/* if we encounter the name 'end' then terminate and say ok. */
-/* It means that the CharStrings does not have as many characters */
-/* as the dictionary said it would and that is ok. */
-/***================================================================***/
-static int
-getLiteralName(psobj *nameObjP)
-{
- do {
- scan_token(inputP);
- if (tokenType <= TOKEN_NONE) {
- if (tokenTooLong) return(SCAN_OUT_OF_MEMORY);
- return(SCAN_ERROR);
- }
- if (tokenType == TOKEN_NAME) {
- if (0 == strncmp(tokenStartP,"end",3) ) {
- return(SCAN_END);
- }
- }
- } while (tokenType != TOKEN_LITERAL_NAME) ;
- nameObjP->len = tokenLength;
- /* allocate all the names in the CharStrings Structure */
- if (!(vm_alloc(tokenLength)) ) return(SCAN_OUT_OF_MEMORY);
- nameObjP->data.valueP = tokenStartP;
- /* found */
- return(SCAN_OK);
-}
-
-/***================================================================***/
-/*
- * BuildSubrs routine
- */
-/***================================================================***/
-
-static int
-BuildSubrs(psfont *FontP)
-{
- int N; /* number of values in Subrs */
- int I; /* index into Subrs */
- int i; /* loop thru Subrs */
- int J; /* length of Subrs entry */
- psobj *arrayP;
-
- /* next token should be a positive int */
- /* note: rc is set by getInt. */
- N = getInt();
- if (rc) return(rc);
- if (N < 0 ) return(SCAN_ERROR);
- /* if we already have a Subrs, then skip the second one */
- /* The second one is for hiresolution devices. */
- if (FontP->Subrs.data.arrayP != NULL) {
- TwoSubrs = TRUE;
- /* process all the Subrs, but do not update anything */
- /* can not just skip them because of the binary data */
- for (i=0;i<N;i++) {
- /* look for dup */
- rc = getName("dup");
- if (rc) return(rc);
- /* get 2 integers */
- I = getInt();
- if (rc) return(rc);
- J = getInt();
- if (rc) return(rc);
- if ( (I < 0) || (J < 0 ) ) return (SCAN_ERROR);
- /* get the next token, it should be RD or -|, either is ok */
- rc = getNextValue(TOKEN_NAME);
- if ( rc != SCAN_OK ) return(rc);
- rc = getNbytes(J);
- if (rc) return(rc);
- }
- return(SCAN_OK);
- }
- if (N > INT_MAX / sizeof(psobj))
- return (SCAN_ERROR);
- arrayP = (psobj *)vm_alloc(N*sizeof(psobj));
- if (!(arrayP) ) return(SCAN_OUT_OF_MEMORY);
- FontP->Subrs.len = N;
- FontP->Subrs.data.arrayP = arrayP;
- /* get N values for Subrs */
- for (i=0;i<N;i++) {
- /* look for dup */
- rc = getName("dup");
- if (rc) return(rc);
- /* get 2 integers */
- I = getInt();
- if (rc) return(rc);
- J = getInt();
- if (rc) return(rc);
- if ( (I < 0) || (J < 0 ) ) return (SCAN_ERROR);
- arrayP[I].len = J;
- /* get the next token, it should be RD or -|, either is ok */
- rc = getNextValue(TOKEN_NAME);
- if ( rc != SCAN_OK ) return(rc);
- rc = getNbytes(J);
- if (rc == SCAN_OK) {
- arrayP[I].data.valueP = tokenStartP;
- if ( !(vm_alloc(J)) ) return(SCAN_OUT_OF_MEMORY);
- }
- else return(rc);
- }
- return(SCAN_OK);
-
-}
-/***================================================================***/
-/***================================================================***/
-/*
- * BuildCharStrings routine
- */
-/***================================================================***/
-
-static int
-BuildCharStrings(psfont *FontP)
-{
- int N; /* number of values in CharStrings */
- int i; /* loop thru Subrs */
- int J; /* length of Subrs entry */
- psdict *dictP;
-
- /* next token should be a positive int */
- N = getInt();
- if (rc) {
- /* check if file had TwoSubrs, hi resolution stuff is in file*/
- if (TwoSubrs) {
- do {
- scan_token(inputP);
- if (tokenType <= TOKEN_NONE) {
- if (tokenTooLong) return(SCAN_OUT_OF_MEMORY);
- return(SCAN_ERROR);
- }
- } while (tokenType != TOKEN_INTEGER);
- N = tokenValue.integer;
- }
- else return(rc); /* if next token was not an Int */
- }
- if (N<=0 || N > INT_MAX / sizeof(psdict)) return(SCAN_ERROR);
- /* save number of entries in the dictionary */
-
- dictP = (psdict *)vm_alloc((N+1)*sizeof(psdict));
- if (!(dictP)) return(SCAN_OUT_OF_MEMORY);
- FontP->CharStringsP = dictP;
- dictP[0].key.len = N;
- /* get N values for CharStrings */
- for (i=1;i<=N;i++) {
- /* look for next literal name */
- rc = getLiteralName(&(dictP[i].key));
- if (rc) return(rc);
- /* get 1 integer */
- J = getInt();
- if (rc) return(rc); /* if next token was not an Int */
- if (J<0) return (SCAN_ERROR);
- dictP[i].value.len = J;
- /* get the next token, it should be RD or -|, either is ok */
- rc = getNextValue(TOKEN_NAME);
- if ( rc != SCAN_OK ) return(rc);
- rc = getNbytes(J);
- if (rc == SCAN_OK) {
- dictP[i].value.data.valueP = tokenStartP;
- if ( !(vm_alloc(J)) ) return(SCAN_OUT_OF_MEMORY);
- }
- else return(rc);
- }
- return(SCAN_OK);
-
-}
-/***================================================================***/
-#if XFONT_CID
-/***================================================================***/
-/*
- * BuildCIDFontInfo Dictionary
- */
-/***================================================================***/
-static int
-BuildCIDFontInfo(cidfont *CIDfontP)
-{
- psdict *dictP;
-
- /* allocate the private dictionary (max number of entries + 1) */
- dictP = (psdict *)vm_alloc(20*sizeof(psdict));
- if (!(dictP)) return(SCAN_OUT_OF_MEMORY);
-
- CIDfontP->CIDfontInfoP = dictP;
- CIDfontP->CIDfontInfoP[0].key.len = 18; /* number of actual entries */
- objFormatName(&(dictP[CIDCOUNT].key),8,"CIDCount");
- objFormatInteger(&(dictP[CIDCOUNT].value),-1);
- objFormatName(&(dictP[CIDFONTNAME].key),11,"CIDFontName");
- objFormatName(&(dictP[CIDFONTNAME].value),0,NULL);
- objFormatName(&(dictP[CIDFONTTYPE].key),11,"CIDFontType");
- objFormatInteger(&(dictP[CIDFONTTYPE].value),-1);
- objFormatName(&(dictP[CIDVERSION].key),14,"CIDFontVersion");
- objFormatInteger(&(dictP[CIDVERSION].value),-1);
- objFormatName(&(dictP[CIDREGISTRY].key),8,"Registry");
- objFormatString(&(dictP[CIDREGISTRY].value),0,NULL);
- objFormatName(&(dictP[CIDORDERING].key),8,"Ordering");
- objFormatString(&(dictP[CIDORDERING].value),0,NULL);
- objFormatName(&(dictP[CIDSUPPLEMENT].key),10,"Supplement");
- objFormatInteger(&(dictP[CIDSUPPLEMENT].value),-1);
- objFormatName(&(dictP[CIDMAPOFFSET].key),12,"CIDMapOffset");
- objFormatInteger(&(dictP[CIDMAPOFFSET].value),-1);
- objFormatName(&(dictP[CIDFDARRAY].key),7,"FDArray");
- objFormatArray(&(dictP[CIDFDARRAY].value),0,NULL);
- objFormatName(&(dictP[CIDFDBYTES].key),7,"FDBytes");
- objFormatInteger(&(dictP[CIDFDBYTES].value),-1);
- objFormatName(&(dictP[CIDFONTBBOX].key),8,"FontBBox");
- objFormatArray(&(dictP[CIDFONTBBOX].value),0,NULL);
- objFormatName(&(dictP[CIDFULLNAME].key),8,"FullName");
- objFormatString(&(dictP[CIDFULLNAME].value),0,NULL);
- objFormatName(&(dictP[CIDFAMILYNAME].key),10,"FamilyName");
- objFormatString(&(dictP[CIDFAMILYNAME].value),0,NULL);
- objFormatName(&(dictP[CIDWEIGHT].key),6,"Weight");
- objFormatString(&(dictP[CIDWEIGHT].value),0,NULL);
- objFormatName(&(dictP[CIDNOTICE].key),6,"Notice");
- objFormatString(&(dictP[CIDNOTICE].value),0,NULL);
- objFormatName(&(dictP[CIDGDBYTES].key),7,"GDBytes");
- objFormatInteger(&(dictP[CIDGDBYTES].value),-1);
- objFormatName(&(dictP[CIDUIDBASE].key),7,"UIDBase");
- objFormatInteger(&(dictP[CIDUIDBASE].value),0);
- objFormatName(&(dictP[CIDXUID].key),4,"XUID");
- objFormatInteger(&(dictP[CIDXUID].value),0);
- return(SCAN_OK);
-}
-/***================================================================***/
-/*
- * BuildCMapInfo Dictionary
- */
-/***================================================================***/
-static int
-BuildCMapInfo(cmapres *CMapP)
-{
- psdict *dictP;
-
- /* allocate the private dictionary (max number of entries + 1) */
- dictP = (psdict *)vm_alloc(20*sizeof(psdict));
- if (!(dictP)) return(SCAN_OUT_OF_MEMORY);
-
- CMapP->CMapInfoP = dictP;
- CMapP->CMapInfoP[0].key.len = 8; /* number of actual entries */
- objFormatName(&(dictP[CMAPREGISTRY].key),8,"Registry");
- objFormatString(&(dictP[CMAPREGISTRY].value),0,NULL);
- objFormatName(&(dictP[CMAPORDERING].key),8,"Ordering");
- objFormatString(&(dictP[CMAPORDERING].value),0,NULL);
- objFormatName(&(dictP[CMAPSUPPLEMENT].key),10,"Supplement");
- objFormatInteger(&(dictP[CMAPSUPPLEMENT].value),-1);
- objFormatName(&(dictP[CMAPNAME].key),8,"CMapName");
- objFormatString(&(dictP[CMAPNAME].value),0,NULL);
- objFormatName(&(dictP[CMAPVERSION].key),11,"CMapVersion");
- objFormatInteger(&(dictP[CMAPVERSION].value),-1);
- objFormatName(&(dictP[CMAPTYPE].key),8,"CMapType");
- objFormatInteger(&(dictP[CMAPTYPE].value),-1);
- objFormatName(&(dictP[CMAPWMODE].key),5,"WMode");
- objFormatInteger(&(dictP[CMAPWMODE].value),-1);
- objFormatName(&(dictP[CMAPCIDCOUNT].key),8,"CIDCount");
- objFormatInteger(&(dictP[CMAPCIDCOUNT].value),-1);
- return(SCAN_OK);
-}
-#endif
-
-/***================================================================***/
-/*
- * BuildFontInfo Dictionary
- */
-/***================================================================***/
-static int
-BuildFontInfo(psfont *fontP)
-{
- psdict *dictP;
-
- /* allocate the private dictionary */
- dictP = (psdict *)vm_alloc(20*sizeof(psdict));
- if (!(dictP)) return(SCAN_OUT_OF_MEMORY);
-
- fontP->fontInfoP = dictP;
- fontP->fontInfoP[0].key.len = 17; /* number of actual entries */
- objFormatName(&(dictP[FONTNAME].key),8,"FontName");
- objFormatName(&(dictP[FONTNAME].value),0,NULL);
- objFormatName(&(dictP[PAINTTYPE].key),9,"PaintType");
- objFormatInteger(&(dictP[PAINTTYPE].value),0);
- objFormatName(&(dictP[FONTTYPENUM].key),8,"FontType");
- objFormatInteger(&(dictP[FONTTYPENUM].value),0);
- objFormatName(&(dictP[FONTMATRIX].key),10,"FontMatrix");
- objFormatArray(&(dictP[FONTMATRIX].value),0,NULL);
- objFormatName(&(dictP[FONTBBOX].key),8,"FontBBox");
- objFormatArray(&(dictP[FONTBBOX].value),0,NULL);
- objFormatName(&(dictP[ENCODING].key),8,"Encoding");
- objFormatEncoding(&(dictP[ENCODING].value),0,NULL);
- objFormatName(&(dictP[UNIQUEID].key),8,"UniqueID");
- objFormatInteger(&(dictP[UNIQUEID].value),0);
- objFormatName(&(dictP[STROKEWIDTH].key),11,"StrokeWidth");
- objFormatReal(&(dictP[STROKEWIDTH].value),0.0);
- objFormatName(&(dictP[VERSION].key),7,"version");
- objFormatString(&(dictP[VERSION].value),0,NULL);
- objFormatName(&(dictP[NOTICE].key),6,"Notice");
- objFormatString(&(dictP[NOTICE].value),0,NULL);
- objFormatName(&(dictP[FULLNAME].key),8,"FullName");
- objFormatString(&(dictP[FULLNAME].value),0,NULL);
- objFormatName(&(dictP[FAMILYNAME].key),10,"FamilyName");
- objFormatString(&(dictP[FAMILYNAME].value),0,NULL);
- objFormatName(&(dictP[WEIGHT].key),6,"Weight");
- objFormatString(&(dictP[WEIGHT].value),0,NULL);
- objFormatName(&(dictP[ITALICANGLE].key),11,"ItalicAngle");
- objFormatReal(&(dictP[ITALICANGLE].value),0.0);
- objFormatName(&(dictP[ISFIXEDPITCH].key),12,"isFixedPitch");
- objFormatBoolean(&(dictP[ISFIXEDPITCH].value),FALSE);
- objFormatName(&(dictP[UNDERLINEPOSITION].key),17,"UnderlinePosition");
- objFormatReal(&(dictP[UNDERLINEPOSITION].value),0.0);
- objFormatName(&(dictP[UNDERLINETHICKNESS].key),18,"UnderlineThickness");
- objFormatReal(&(dictP[UNDERLINETHICKNESS].value),0.0);
- return(SCAN_OK);
-}
-#if XFONT_CID
-/***================================================================***/
-/*
- * BuildCIDType1Private Dictionary
- */
-/***================================================================***/
-static int
-BuildCIDType1Private(psfont *fontP)
-{
- psdict *Private;
-
- /* allocate the private dictionary */
- Private = (psdict *)vm_alloc(21*sizeof(psdict));
-
- if (!(Private)) return(SCAN_OUT_OF_MEMORY);
-
- fontP->Private = Private;
- fontP->Private[0].key.len = 20; /* number of actual entries */
-
- objFormatName(&(Private[CIDT1MINFEATURE].key),10,"MinFeature");
- objFormatArray(&(Private[CIDT1MINFEATURE].value),0,NULL);
- objFormatName(&(Private[CIDT1LENIV].key),5,"lenIV");
- objFormatInteger(&(Private[CIDT1LENIV].value),DEFAULTLENIV);
- objFormatName(&(Private[CIDT1LANGGROUP].key),13,"LanguageGroup");
- objFormatInteger(&(Private[CIDT1LANGGROUP].value),DEFAULTLANGUAGEGROUP);
- objFormatName(&(Private[CIDT1BLUEVALUES].key),10,"BlueValues");
- objFormatArray(&(Private[CIDT1BLUEVALUES].value),0,NULL);
- objFormatName(&(Private[CIDT1OTHERBLUES].key),10,"OtherBlues");
- objFormatArray(&(Private[CIDT1OTHERBLUES].value),0,NULL);
- objFormatName(&(Private[CIDT1BLUESCALE].key),9,"BlueScale");
- objFormatReal(&(Private[CIDT1BLUESCALE].value),DEFAULTBLUESCALE);
- objFormatName(&(Private[CIDT1BLUEFUZZ].key),8,"BlueFuzz");
- objFormatInteger(&(Private[CIDT1BLUEFUZZ].value),DEFAULTBLUEFUZZ);
- objFormatName(&(Private[CIDT1BLUESHIFT].key),9,"BlueShift");
- objFormatInteger(&(Private[CIDT1BLUESHIFT].value),DEFAULTBLUESHIFT);
- objFormatName(&(Private[CIDT1FAMBLUES].key),11,"FamilyBlues");
- objFormatArray(&(Private[CIDT1FAMBLUES].value),0,NULL);
- objFormatName(&(Private[CIDT1FAMOTHERBLUES].key),16,"FamilyOtherBlues");
- objFormatArray(&(Private[CIDT1FAMOTHERBLUES].value),0,NULL);
- objFormatName(&(Private[CIDT1STDHW].key),5,"StdHW");
- objFormatArray(&(Private[CIDT1STDHW].value),0,NULL);
- objFormatName(&(Private[CIDT1STDVW].key),5,"StdVW");
- objFormatArray(&(Private[CIDT1STDVW].value),0,NULL);
- objFormatName(&(Private[CIDT1STEMSNAPH].key),9,"StemSnapH");
- objFormatArray(&(Private[CIDT1STEMSNAPH].value),0,NULL);
- objFormatName(&(Private[CIDT1STEMSNAPV].key),9,"StemSnapV");
- objFormatArray(&(Private[CIDT1STEMSNAPV].value),0,NULL);
- /* skip password */
- objFormatName(&(Private[CIDT1SUBMAPOFF].key),13,"SubrMapOffset");
- objFormatInteger(&(Private[CIDT1SUBMAPOFF].value),0);
- objFormatName(&(Private[CIDT1SDBYTES].key),7,"SDBytes");
- objFormatInteger(&(Private[CIDT1SDBYTES].value),0);
- objFormatName(&(Private[CIDT1SUBRCNT].key),9,"SubrCount");
- objFormatInteger(&(Private[CIDT1SUBRCNT].value),0);
- objFormatName(&(Private[CIDT1FORCEBOLD].key),9,"ForceBold");
- objFormatBoolean(&(Private[CIDT1FORCEBOLD].value),DEFAULTFORCEBOLD);
- objFormatName(&(Private[CIDT1RNDSTEMUP].key),9,"RndStemUp");
- objFormatBoolean(&(Private[CIDT1RNDSTEMUP].value),DEFAULTRNDSTEMUP);
- objFormatName(&(Private[CIDT1EXPFACTOR].key),15,"ExpansionFactor");
- objFormatReal(&(Private[CIDT1EXPFACTOR].value),
- DEFAULTEXPANSIONFACTOR);
- return(SCAN_OK);
-}
-#endif
-/***================================================================***/
-/*
- * BuildPrivate Dictionary
- */
-/***================================================================***/
-static int
-BuildPrivate(psfont *fontP)
-{
- psdict *Private;
-
- /* allocate the private dictionary */
- Private = (psdict *)vm_alloc(20*sizeof(psdict));
-
- if (!(Private)) return(SCAN_OUT_OF_MEMORY);
-
- fontP->Private = Private;
- fontP->Private[0].key.len = 16; /* number of actual entries */
-
- objFormatName(&(Private[BLUEVALUES].key),10,"BlueValues");
- objFormatArray(&(Private[BLUEVALUES].value),0,NULL);
- objFormatName(&(Private[OTHERBLUES].key),10,"OtherBlues");
- objFormatArray(&(Private[OTHERBLUES].value),0,NULL);
- objFormatName(&(Private[FAMILYBLUES].key),11,"FamilyBlues");
- objFormatArray(&(Private[FAMILYBLUES].value),0,NULL);
- objFormatName(&(Private[FAMILYOTHERBLUES].key),16,"FamilyOtherBlues");
- objFormatArray(&(Private[FAMILYOTHERBLUES].value),0,NULL);
- objFormatName(&(Private[BLUESCALE].key),9,"BlueScale");
- objFormatReal(&(Private[BLUESCALE].value),DEFAULTBLUESCALE);
- objFormatName(&(Private[BLUESHIFT].key),9,"BlueShift");
- objFormatInteger(&(Private[BLUESHIFT].value),DEFAULTBLUESHIFT);
- objFormatName(&(Private[BLUEFUZZ].key),8,"BlueFuzz");
- objFormatInteger(&(Private[BLUEFUZZ].value),DEFAULTBLUEFUZZ);
- objFormatName(&(Private[STDHW].key),5,"StdHW");
- objFormatArray(&(Private[STDHW].value),0,NULL);
- objFormatName(&(Private[STDVW].key),5,"StdVW");
- objFormatArray(&(Private[STDVW].value),0,NULL);
- objFormatName(&(Private[STEMSNAPH].key),9,"StemSnapH");
- objFormatArray(&(Private[STEMSNAPH].value),0,NULL);
- objFormatName(&(Private[STEMSNAPV].key),9,"StemSnapV");
- objFormatArray(&(Private[STEMSNAPV].value),0,NULL);
- objFormatName(&(Private[FORCEBOLD].key),9,"ForceBold");
- objFormatBoolean(&(Private[FORCEBOLD].value),DEFAULTFORCEBOLD);
- objFormatName(&(Private[LANGUAGEGROUP].key),13,"LanguageGroup");
- objFormatInteger(&(Private[LANGUAGEGROUP].value),DEFAULTLANGUAGEGROUP);
- objFormatName(&(Private[LENIV].key),5,"lenIV");
- objFormatInteger(&(Private[LENIV].value),DEFAULTLENIV);
- objFormatName(&(Private[RNDSTEMUP].key),9,"RndStemUp");
- objFormatBoolean(&(Private[RNDSTEMUP].value),DEFAULTRNDSTEMUP);
- objFormatName(&(Private[EXPANSIONFACTOR].key),9,"ExpansionFactor");
- objFormatReal(&(Private[EXPANSIONFACTOR].value),
- DEFAULTEXPANSIONFACTOR);
- return(SCAN_OK);
-}
-/***================================================================***/
-/**********************************************************************/
-/* GetType1Blues(fontP) */
-/* */
-/* Routine to support font-level hints. */
-/* */
-/* Gets all the Blues information from the Private dictionary */
-/* for the font. */
-/* */
-/* */
-/**********************************************************************/
-static int
-GetType1Blues(psfont *fontP)
-{
- psdict *PrivateDictP; /* the Private dict relating to hints */
- struct blues_struct *blues; /* ptr for the blues struct we will allocate */
- int i;
- psobj *HintEntryP;
-
-
-
- /* get the Private dictionary pointer */
- PrivateDictP = fontP->Private;
-
- /* allocate the memory for the blues structure */
- blues = (struct blues_struct *) vm_alloc(sizeof(struct blues_struct));
-
- if (!blues) return(SCAN_OUT_OF_MEMORY);
-
- /* Make fontP's blues ptr point to this newly allocated structure. */
- fontP->BluesP = blues;
-
- /* fill in the BlueValues array */
- HintEntryP = &(PrivateDictP[BLUEVALUES].value);
- /* check to see if the entry exists and if it's an array */
- if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 ))
- blues->numBlueValues = 0;
- else {
- /* get the number of values in the array */
- if (HintEntryP->len > NUMBLUEVALUES) {
- blues->numBlueValues = NUMBLUEVALUES;
- } else
- blues->numBlueValues = HintEntryP->len;
- for (i = 0; i<= blues->numBlueValues-1; ++i) {
- if (objPIsInteger(&HintEntryP->data.arrayP[i]))
- blues->BlueValues[i] =
- HintEntryP->data.arrayP[i].data.integer;
- else if (objPIsReal(&HintEntryP->data.arrayP[i]))
- blues->BlueValues[i] =
- HintEntryP->data.arrayP[i].data.real;
- else
- blues->BlueValues[i] = 0;
- }
- }
-
- /* fill in the OtherBlues array */
- HintEntryP = &(PrivateDictP[OTHERBLUES].value);
- /* check to see if the entry exists and if it's an array */
- if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 ))
- blues->numOtherBlues = 0;
- else {
- /* get the number of values in the array */
- if (HintEntryP->len > NUMOTHERBLUES) {
- blues->numOtherBlues = NUMOTHERBLUES;
- } else
- blues->numOtherBlues = HintEntryP->len;
- for (i = 0; i<= blues->numOtherBlues-1; ++i) {
- if (objPIsInteger(&HintEntryP->data.arrayP[i]))
- blues->OtherBlues[i] =
- HintEntryP->data.arrayP[i].data.integer;
- else if (objPIsReal(&HintEntryP->data.arrayP[i]))
- blues->OtherBlues[i] =
- HintEntryP->data.arrayP[i].data.real;
- else
- blues->OtherBlues[i] = 0;
- }
- }
-
- /* fill in the FamilyBlues array */
- HintEntryP = &(PrivateDictP[FAMILYBLUES].value);
- /* check to see if the entry exists and if it's an array */
- if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 ))
- blues->numFamilyBlues = 0;
- else {
- /* get the number of values in the array */
- if (HintEntryP->len > NUMFAMILYBLUES) {
- blues->numFamilyBlues = NUMFAMILYBLUES;
- } else
- blues->numFamilyBlues = HintEntryP->len;
- for (i = 0; i<= blues->numFamilyBlues-1; ++i) {
- if (objPIsInteger(&HintEntryP->data.arrayP[i]))
- blues->FamilyBlues[i] =
- HintEntryP->data.arrayP[i].data.integer;
- else if (objPIsReal(&HintEntryP->data.arrayP[i]))
- blues->FamilyBlues[i] =
- HintEntryP->data.arrayP[i].data.real;
- else
- blues->FamilyBlues[i] = 0;
- }
- }
-
- /* fill in the FamilyOtherBlues array */
- HintEntryP = &(PrivateDictP[FAMILYOTHERBLUES].value);
- /* check to see if the entry exists and if it's an array */
- if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 ))
- blues->numFamilyOtherBlues = 0;
- else {
- /* get the number of values in the array */
- if (HintEntryP->len > NUMFAMILYOTHERBLUES) {
- blues->numFamilyOtherBlues = NUMFAMILYOTHERBLUES;
- } else
- blues->numFamilyOtherBlues = HintEntryP->len;
- for (i = 0; i<= blues->numFamilyOtherBlues-1; ++i) {
- if (objPIsInteger(&HintEntryP->data.arrayP[i]))
- blues->FamilyOtherBlues[i] =
- HintEntryP->data.arrayP[i].data.integer;
- else if (objPIsReal(&HintEntryP->data.arrayP[i]))
- blues->FamilyOtherBlues[i] =
- HintEntryP->data.arrayP[i].data.real;
- else
- blues->FamilyOtherBlues[i] = 0;
- }
- }
-
- /* fill in the StemSnapH array */
- HintEntryP = &(PrivateDictP[STEMSNAPH].value);
- /* check to see if the entry exists and if it's an array */
- if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 ))
- blues->numStemSnapH = 0;
- else {
- /* get the number of values in the array */
- if (HintEntryP->len > NUMSTEMSNAPH) {
- blues->numStemSnapH = NUMSTEMSNAPH;
- } else
- blues->numStemSnapH = HintEntryP->len;
- for (i = 0; i<= blues->numStemSnapH-1; ++i) {
- if (objPIsInteger(&HintEntryP->data.arrayP[i]))
- blues->StemSnapH[i] =
- HintEntryP->data.arrayP[i].data.integer;
- else if (objPIsReal(&HintEntryP->data.arrayP[i]))
- blues->StemSnapH[i] =
- HintEntryP->data.arrayP[i].data.real;
- else
- blues->StemSnapH[i] = 0;
- }
- }
-
- /* fill in the StemSnapV array */
- HintEntryP = &(PrivateDictP[STEMSNAPV].value);
- /* check to see if the entry exists and if it's an array */
- if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 ))
- blues->numStemSnapV = 0;
- else {
- /* get the number of values in the array */
- if (HintEntryP->len > NUMSTEMSNAPV) {
- blues->numStemSnapV = NUMSTEMSNAPV;
- } else
- blues->numStemSnapV = HintEntryP->len;
- for (i = 0; i<= blues->numStemSnapV-1; ++i) {
- if (objPIsInteger(&HintEntryP->data.arrayP[i]))
- blues->StemSnapV[i] =
- HintEntryP->data.arrayP[i].data.integer;
- else if (objPIsReal(&HintEntryP->data.arrayP[i]))
- blues->StemSnapV[i] =
- HintEntryP->data.arrayP[i].data.real;
- else
- blues->StemSnapV[i] = 0;
- }
- }
-
- /* fill in the StdVW array */
- HintEntryP = &(PrivateDictP[STDVW].value);
- /* check to see if the entry exists and if it's an array */
- if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 ))
- /* a value of zero signifies no entry */
- blues->StdVW = 0;
- else {
- if (HintEntryP->len > NUMSTDVW) {
- }
- if (objPIsInteger(&HintEntryP->data.arrayP[0]))
- blues->StdVW = HintEntryP->data.arrayP[0].data.integer;
- else if (objPIsReal(&HintEntryP->data.arrayP[0]))
- blues->StdVW = HintEntryP->data.arrayP[0].data.real;
- else
- blues->StdVW = 0;
- }
-
- /* fill in the StdHW array */
- HintEntryP = &(PrivateDictP[STDHW].value);
- /* check to see if the entry exists and if it's an array */
- if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 ))
- /* a value of zero signifies no entry */
- blues->StdHW = 0;
- else {
- if (HintEntryP->len > NUMSTDHW) {
- }
- if (objPIsInteger(&HintEntryP->data.arrayP[0]))
- blues->StdHW = HintEntryP->data.arrayP[0].data.integer;
- else if (objPIsReal(&HintEntryP->data.arrayP[0]))
- blues->StdHW = HintEntryP->data.arrayP[0].data.real;
- else
- blues->StdHW = 0;
- }
-
-
- /* get the ptr to the BlueScale entry */
- HintEntryP = &(PrivateDictP[BLUESCALE].value);
- /* put the BlueScale in the blues structure */
- if (objPIsInteger(HintEntryP)) /* Must be integer! */
- blues->BlueScale = HintEntryP->data.integer;
- else if (objPIsReal(HintEntryP)) /* Error? */
- blues->BlueScale = HintEntryP->data.real;
- else
- blues->BlueScale = DEFAULTBLUESCALE;
-
- /* get the ptr to the BlueShift entry */
- HintEntryP = &(PrivateDictP[BLUESHIFT].value);
- if (objPIsInteger(HintEntryP)) /* Must be integer! */
- blues->BlueShift = HintEntryP->data.integer;
- else if (objPIsReal(HintEntryP)) /* Error? */
- blues->BlueShift = HintEntryP->data.real;
- else
- blues->BlueShift = DEFAULTBLUESHIFT;
-
- /* get the ptr to the BlueFuzz entry */
- HintEntryP = &(PrivateDictP[BLUEFUZZ].value);
- if (objPIsInteger(HintEntryP)) /* Must be integer! */
- blues->BlueFuzz = HintEntryP->data.integer;
- else if (objPIsReal(HintEntryP)) /* Error? */
- blues->BlueFuzz = HintEntryP->data.real;
- else
- blues->BlueFuzz = DEFAULTBLUEFUZZ;
-
- /* get the ptr to the ForceBold entry */
- HintEntryP = &(PrivateDictP[FORCEBOLD].value);
- if (objPIsBoolean(HintEntryP)) /* Must be integer! */
- blues->ForceBold = HintEntryP->data.boolean;
- else
- blues->ForceBold = DEFAULTFORCEBOLD;
-
- /* get the ptr to the LanguageGroup entry */
- HintEntryP = &(PrivateDictP[LANGUAGEGROUP].value);
- if (objPIsInteger(HintEntryP)) /* Must be integer! */
- blues->LanguageGroup = HintEntryP->data.integer;
- else
- blues->LanguageGroup = DEFAULTLANGUAGEGROUP;
-
- /* get the ptr to the RndStemUp entry */
- HintEntryP = &(PrivateDictP[RNDSTEMUP].value);
- if (objPIsBoolean(HintEntryP)) /* Must be integer! */
- blues->RndStemUp = HintEntryP->data.boolean;
- else
- blues->RndStemUp = DEFAULTRNDSTEMUP;
-
- /* get the ptr to the lenIV entry */
- HintEntryP = &(PrivateDictP[LENIV].value);
- if (objPIsInteger(HintEntryP)) /* Must be integer! */
- blues->lenIV = HintEntryP->data.integer;
- else
- blues->lenIV = DEFAULTLENIV;
-
- /* get the ptr to the ExpansionFactor entry */
- HintEntryP = &(PrivateDictP[EXPANSIONFACTOR].value);
- if (objPIsInteger(HintEntryP))
- blues->ExpansionFactor = HintEntryP->data.integer;
- else if (objPIsReal(HintEntryP))
- blues->ExpansionFactor = HintEntryP->data.real;
- else
- blues->ExpansionFactor = DEFAULTEXPANSIONFACTOR;
- return(SCAN_OK);
-}
-/**********************************************************************/
-/* GetType1CharString(fontP,code) */
-/* */
-/* Look up code in the standard encoding vector and return */
-/* the charstring associated with the character name. */
-/* */
-/* fontP is the psfont structure. */
-/* */
-/* Returns a psobj (string) */
-/**********************************************************************/
-psobj *
-GetType1CharString(psfont *fontP, unsigned char code)
-{
- int N; /* the 'Nth' entry in the CharStrings */
- psobj *charnameP; /* points to psobj that is name of character*/
-
- psdict *CharStringsDictP; /* dictionary with char strings */
- psobj *theStringP; /* the definition for the code */
-
-
-
- if (StdEncArrayP == NULL) {
- return(NULL);
- }
- /* use the code to index into the standard encoding vector */
- charnameP = &(StdEncArrayP[code]);
-
- /* test if the encoding array points to a name */
- if (!(objPIsName(charnameP)) ) {
- return(NULL);
- }
-
- /* Now that we have the character name out of the standardencoding */
- /* get the character definition out of the current font */
- CharStringsDictP = fontP->CharStringsP;
-
- /* search the chars string for this charname as key */
- N = SearchDictName(CharStringsDictP,charnameP);
- if (N<=0) {
- return(NULL);
- }
- /* OK, the nth item is the psobj that is the string for this char */
- theStringP = &(CharStringsDictP[N].value);
-
- return(theStringP);
-}
-
-/***================================================================***/
-/*
- * FindDictValue
- */
-/***================================================================***/
-
-static int
-FindDictValue(psdict *dictP)
-{
- psobj LitName;
- int N;
- int V;
-
- /* we have just scanned a token and it is a literal name */
- /* need to check if that name is in Private dictionary */
- objFormatName(&LitName,tokenLength,tokenStartP);
- /* is it in the dictP */
- N = SearchDictName(dictP,&LitName);
- /* if found */
- if ( N > 0 ) {
- /* what type */
- switch (dictP[N].value.type) {
- case OBJ_ENCODING:
- V = getEncoding(&(dictP[N].value));
- if ( V != SCAN_OK ) return(V);
- break;
- case OBJ_ARRAY:
-#if XFONT_CID
- if (0 == strncmp(tokenStartP,"FDArray",7))
- V = getFDArray(&(dictP[N].value));
- else
- V = getArray(&(dictP[N].value));
-#else
- V = getArray(&(dictP[N].value));
-#endif
- if ( V != SCAN_OK ) return(V);
- break;
- case OBJ_INTEGER:
- /* next value in integer */
- dictP[N].value.data.integer = getInt();
- if (rc) return(rc); /* if next token was not an Int */
- break;
- case OBJ_REAL:
- /* next value must be real or int, store as a real */
- scan_token(inputP);
- if (tokenType == TOKEN_REAL) {
- dictP[N].value.data.real = tokenValue.real;
- }
- else
- if (tokenType == TOKEN_INTEGER) {
- dictP[N].value.data.real = tokenValue.integer;
- }
- else return(SCAN_ERROR);
- break;
- case OBJ_NAME:
- V = getNextValue(TOKEN_LITERAL_NAME);
- if ( V != SCAN_OK ) return(V);
- if (!(vm_alloc(tokenLength)) ) return(SCAN_OUT_OF_MEMORY);
- objFormatName(&(dictP[N].value),tokenLength,tokenStartP);
- break;
- case OBJ_STRING:
- V = getNextValue(TOKEN_STRING);
- if ( V != SCAN_OK ) return(V);
- if (!(vm_alloc(tokenLength)) ) return(SCAN_OUT_OF_MEMORY);
- objFormatString(&(dictP[N].value),tokenLength,tokenStartP);
- break;
- case OBJ_BOOLEAN:
- scan_token(inputP);
- if (tokenType != TOKEN_NAME) {
- return(SCAN_ERROR);
- }
- if (0 == strncmp(tokenStartP,"true",4) ) {
- dictP[N].value.data.boolean =TRUE;
- }
- else
- if (0 == strncmp(tokenStartP,"false",5) ) {
- dictP[N].value.data.boolean =FALSE;
- }
- else return(SCAN_ERROR);
- break;
-
- default:
- return(SCAN_ERROR);
- }
- }
- /* Name is not in dictionary. That is ok. */
- return(SCAN_OK);
-
-}
-/***================================================================***/
-
-#if XFONT_CID
-/*
- * -------------------------------------------------------------------
- * Scan the next token and convert it into an object
- * Result is placed on the Operand Stack as next object
- * -------------------------------------------------------------------
- */
-int
-scan_cidfont(cidfont *CIDFontP, cmapres *CMapP)
-{
- char filename[CID_PATH_MAX];
- char cmapfile[CID_PATH_MAX];
- char buf[CID_BUFSIZE];
- char filetype[3];
- FILE *fileP;
- FILE *fileP1;
- char *nameP;
- int namelen;
- int i, j;
- int cread, rangecnt;
- unsigned int char_row, char_col;
-
- filetype[0] = 'r';
- filetype[1] = 'b';
- filetype[2] = '\0';
-
- /* copy the filename and remove leading or trailing blanks */
- /* point to name and search for leading blanks */
- nameP= CIDFontP->CIDFontFileName.data.nameP;
- namelen = CIDFontP->CIDFontFileName.len;
- while (nameP[0] == ' ') {
- nameP++;
- namelen--;
- }
- /* now remove any trailing blanks */
- while ((namelen>0) && ( nameP[namelen-1] == ' ')) {
- namelen--;
- }
- strncpy(filename,nameP,namelen);
- filename[namelen] = '\0';
- /* file name is now constructed */
- inputFile.data.fileP = NULL;
- filterFile.data.fileP = NULL;
-
- /* check whether a CIDFont file */
- if ((fileP = fopen(filename,filetype))) {
- cread = fread(buf, 1, CID_BUFSIZE, fileP);
- fclose(fileP);
- if (cread > 17) {
- if (strncmp(buf, "%!", 2) ||
- strstr(buf, "Resource-CIDFont") == NULL)
- return(SCAN_FILE_OPEN_ERROR);
- } else
- return(SCAN_FILE_OPEN_ERROR);
- } else
- return(SCAN_FILE_OPEN_ERROR);
-
- /* copy the CMap file name and remove leading or trailing blanks */
- /* point to name and search for leading blanks */
- nameP = CMapP->CMapFileName.data.nameP;
- namelen = CMapP->CMapFileName.len;
- while (nameP[0] == ' ') {
- nameP++;
- namelen--;
- }
- /* now remove any trailing blanks */
- while ((namelen>0) && ( nameP[namelen-1] == ' ')) {
- namelen--;
- }
- strncpy(cmapfile,nameP,namelen);
- cmapfile[namelen] = '\0';
- /* CMap file name is now constructed */
- inputFile1.data.fileP = NULL;
-
- /* check whether a CMap file */
- if ((fileP1 = fopen(cmapfile,filetype))) {
- cread = fread(buf, 1, CID_BUFSIZE, fileP1);
- fclose(fileP1);
- if (cread > 17) {
- if (strncmp(buf, "%!", 2) ||
- strstr(buf, "Resource-CMap") == NULL)
- return(SCAN_FILE_OPEN_ERROR);
- } else
- return(SCAN_FILE_OPEN_ERROR);
- } else
- return(SCAN_FILE_OPEN_ERROR);
-
- /* read the specified CMap file */
- inputP = &inputFile1;
-
- if (!(fileP1 = fopen(cmapfile,filetype)))
- return(SCAN_FILE_OPEN_ERROR);
-
- objFormatFile(inputP,fileP1);
-
- if ((rc = BuildCMapInfo(CMapP)) != 0)
- return(rc);
-
- /* Assume everything will be OK */
- rc = 0;
- rangecnt = 0;
-
- do {
- /* Scan the next token */
- scan_token(inputP);
- if (tokenType == TOKEN_INTEGER)
- rangecnt = tokenValue.integer;
-
- if (rangecnt < 0 || rangecnt > INT_MAX / sizeof(spacerangecode)) {
- rc = SCAN_ERROR;
- break;
- }
- /* ==> tokenLength, tokenTooLong, tokenType, and */
- /* tokenValue are now set */
-
- switch (tokenType) {
- case TOKEN_EOF:
- case TOKEN_NONE:
- case TOKEN_INVALID:
- /* in this case we are done */
- if (tokenTooLong) return(SCAN_OUT_OF_MEMORY);
- rc = SCAN_ERROR;
- break;
- case TOKEN_LITERAL_NAME:
- /* Look up the name */
- tokenStartP[tokenLength] = '\0';
-
- rc = FindDictValue(CMapP->CMapInfoP);
- /* we are not going to report errors except out of memory */
- if (rc != SCAN_OUT_OF_MEMORY)
- rc = SCAN_OK;
- break;
- case TOKEN_NAME:
- if (0 == strncmp(tokenStartP,"begincodespacerange",19)) {
- CIDFontP->spacerangecnt++;
- spacerangeP = (spacerange *)vm_alloc(sizeof(spacerange));
- if (!spacerangeP) {
- rc = SCAN_OUT_OF_MEMORY;
- break;
- }
- spacerangeP->next = NULL;
- spacerangeP->rangecnt = rangecnt;
- spacerangeP->spacecode =
- (spacerangecode *)vm_alloc(rangecnt*sizeof(spacerangecode));
- if (!spacerangeP->spacecode) {
- rc = SCAN_OUT_OF_MEMORY;
- break;
- }
- for (i = 0; i < rangecnt; i++) {
- scan_token(inputP);
- if (tokenType != TOKEN_HEX_STRING) {
- rc = SCAN_ERROR;
- break;
- }
- spacerangeP->spacecode[i].srcCodeLo = 0;
- for (j = 0; j < tokenLength; j++)
- spacerangeP->spacecode[i].srcCodeLo +=
- (unsigned char)tokenStartP[j] << (8 * (tokenLength - 1 - j));
-
- scan_token(inputP);
- if (tokenType != TOKEN_HEX_STRING) {
- rc = SCAN_ERROR;
- break;
- }
- spacerangeP->spacecode[i].srcCodeHi = 0;
- for (j = 0; j < tokenLength; j++)
- spacerangeP->spacecode[i].srcCodeHi +=
- (unsigned char)tokenStartP[j] << (8 * (tokenLength - 1 - j));
- }
-
- if (CIDFontP->spacerangeP) {
- if (CIDFontP->spacerangeP->next == NULL)
- CIDFontP->spacerangeP->next = spacerangeP;
- else {
- spacerangeP->next = CIDFontP->spacerangeP->next;
- CIDFontP->spacerangeP->next = spacerangeP;
- }
- } else
- CIDFontP->spacerangeP = spacerangeP;
-
- /* read "endcodespacerange" */
- scan_token(inputP);
- if (tokenType != TOKEN_NAME || (tokenType == TOKEN_NAME &&
- (strncmp(tokenStartP,"endcodespacerange",17) != 0))) {
- rc = SCAN_ERROR;
- break;
- }
- }
- if (0 == strncmp(tokenStartP,"begincidrange",13)) {
- CIDFontP->cidrangecnt++;
- cidrangeP = (cidrange *)vm_alloc(sizeof(cidrange));
- if (!cidrangeP) {
- rc = SCAN_OUT_OF_MEMORY;
- break;
- }
- cidrangeP->next = NULL;
- cidrangeP->rangecnt = rangecnt;
- cidrangeP->range =
- (cidrangecode *)vm_alloc(rangecnt*sizeof(cidrangecode));
- if (!cidrangeP->range) {
- rc = SCAN_OUT_OF_MEMORY;
- break;
- }
- for (i = 0; i < rangecnt; i++) {
- scan_token(inputP);
- if (tokenType != TOKEN_HEX_STRING) {
- rc = SCAN_ERROR;
- break;
- }
- cidrangeP->range[i].srcCodeLo = 0;
- for (j = 0; j < tokenLength; j++)
- cidrangeP->range[i].srcCodeLo +=
- (unsigned char)tokenStartP[j] << (8 * (tokenLength - 1 - j));
- char_row = (cidrangeP->range[i].srcCodeLo >> 8) & 0xff;
- char_col = cidrangeP->range[i].srcCodeLo & 0xff;
- if (char_row < CMapP->firstRow)
- CMapP->firstRow = char_row;
- if (char_row > CMapP->lastRow)
- CMapP->lastRow = char_row;
- if (char_col < CMapP->firstCol)
- CMapP->firstCol = char_col;
- if (char_col > CMapP->lastCol)
- CMapP->lastCol = char_col;
- scan_token(inputP);
- if (tokenType != TOKEN_HEX_STRING) {
- rc = SCAN_ERROR;
- break;
- }
- cidrangeP->range[i].srcCodeHi = 0;
- for (j = 0; j < tokenLength; j++)
- cidrangeP->range[i].srcCodeHi +=
- (unsigned char)tokenStartP[j] << (8 * (tokenLength - 1 - j));
- char_row = (cidrangeP->range[i].srcCodeHi >> 8) & 0xff;
- char_col = cidrangeP->range[i].srcCodeHi & 0xff;
- if (char_row < CMapP->firstRow)
- CMapP->firstRow = char_row;
- if (char_row > CMapP->lastRow)
- CMapP->lastRow = char_row;
- if (char_col < CMapP->firstCol)
- CMapP->firstCol = char_col;
- if (char_col > CMapP->lastCol)
- CMapP->lastCol = char_col;
- scan_token(inputP);
- if (tokenType != TOKEN_INTEGER) {
- rc = SCAN_ERROR;
- break;
- }
- cidrangeP->range[i].dstCIDLo = tokenValue.integer;
- }
-
- if (CIDFontP->cidrangeP) {
- if (CIDFontP->cidrangeP->next == NULL)
- CIDFontP->cidrangeP->next = cidrangeP;
- else {
- cidrangeP->next = CIDFontP->cidrangeP->next;
- CIDFontP->cidrangeP->next = cidrangeP;
- }
- } else
- CIDFontP->cidrangeP = cidrangeP;
-
- /* read "endcidrange" */
- scan_token(inputP);
- if (tokenType != TOKEN_NAME || (tokenType == TOKEN_NAME &&
- (strncmp(tokenStartP,"endcidrange",11) != 0))) {
- rc = SCAN_ERROR;
- break;
- }
- }
-
- if (0 == strncmp(tokenStartP,"beginnotdefrange",16)) {
- CIDFontP->notdefrangecnt++;
- notdefrangeP = (cidrange *)vm_alloc(sizeof(cidrange));
- if (!notdefrangeP) {
- rc = SCAN_OUT_OF_MEMORY;
- break;
- }
- notdefrangeP->next = 0;
- notdefrangeP->rangecnt = rangecnt;
- notdefrangeP->range =
- (cidrangecode *)vm_alloc(rangecnt*sizeof(cidrangecode));
- if (!notdefrangeP->range) {
- rc = SCAN_OUT_OF_MEMORY;
- break;
- }
- for (i = 0; i < rangecnt; i++) {
- scan_token(inputP);
- if (tokenType != TOKEN_HEX_STRING) {
- rc = SCAN_ERROR;
- break;
- }
- notdefrangeP->range[i].srcCodeLo = 0;
- for (j = 0; j < tokenLength; j++)
- notdefrangeP->range[i].srcCodeLo = (int)(tokenStartP[j] <<
- (8 * (tokenLength - 1 - j)));
- scan_token(inputP);
- if (tokenType != TOKEN_HEX_STRING) {
- rc = SCAN_ERROR;
- break;
- }
- notdefrangeP->range[i].srcCodeHi = 0;
- for (j = 0; j < tokenLength; j++)
- notdefrangeP->range[i].srcCodeHi = (int)(tokenStartP[j] <<
- (8 * (tokenLength - 1 - j)));
- scan_token(inputP);
- if (tokenType != TOKEN_INTEGER) {
- rc = SCAN_ERROR;
- break;
- }
- notdefrangeP->range[i].dstCIDLo = tokenValue.integer;
- }
- if (CIDFontP->notdefrangeP) {
- if (CIDFontP->notdefrangeP->next == NULL)
- CIDFontP->notdefrangeP->next = notdefrangeP;
- else {
- notdefrangeP->next = CIDFontP->notdefrangeP->next;
- CIDFontP->notdefrangeP->next = notdefrangeP;
- }
- } else
- CIDFontP->notdefrangeP = notdefrangeP;
-
- /* read "endnotdefrange" */
- scan_token(inputP);
- if (tokenType != TOKEN_NAME || (tokenType == TOKEN_NAME &&
- (strncmp(tokenStartP,"endnotdefrange",14) != 0))) {
- rc = SCAN_ERROR;
- break;
- }
- }
-
- if (0 == strncmp(tokenStartP,"endcmap",7)) {
- if (CMapP->CMapInfoP[CMAPREGISTRY].value.data.valueP == NULL ||
- CMapP->CMapInfoP[CMAPORDERING].value.data.valueP == NULL ||
- CMapP->CMapInfoP[CMAPSUPPLEMENT].value.data.integer == -1) {
- rc = SCAN_ERROR;
- break;
- } else {
- rc = SCAN_FILE_EOF;
- break;
- }
- }
- break;
- }
- }
- while (rc == 0);
- fclose(inputP->data.fileP);
- if (tokenTooLong)
- rc = SCAN_OUT_OF_MEMORY;
- if (rc == SCAN_OUT_OF_MEMORY) return(rc);
-
- /* open the specified CIDFont file */
- if (!(fileP = fopen(filename,filetype)))
- return(SCAN_FILE_OPEN_ERROR);
-
- inputP = &inputFile;
- objFormatFile(inputP,fileP);
- CIDWantFontInfo = TRUE;
- TwoSubrs = FALSE;
- rc = BuildCIDFontInfo(CIDFontP);
- if (rc != 0) return(rc);
-
- /* Assume everything will be OK */
- rc = 0;
-
- /* Loop until complete font is read */
- do {
- /* Scan the next token */
- scan_token(inputP);
-
- /* ==> tokenLength, tokenTooLong, tokenType, and tokenValue are */
- /* now set */
-
- switch (tokenType) {
- case TOKEN_EOF:
- case TOKEN_NONE:
- case TOKEN_INVALID:
- /* in this case we are done */
- if (tokenTooLong) return(SCAN_OUT_OF_MEMORY);
- rc = SCAN_ERROR;
- break;
- case TOKEN_LITERAL_NAME:
- /* Look up the name */
- tokenStartP[tokenLength] = '\0';
-
- if (CIDWantFontInfo) {
- rc = FindDictValue(CIDFontP->CIDfontInfoP);
- /* we are not going to report errors except out of memory */
- if (rc != SCAN_OUT_OF_MEMORY)
- rc = SCAN_OK;
- break;
- }
- break;
- case TOKEN_STRING:
- tokenStartP[tokenLength] = '\0';
- if (0 == strncmp(tokenStartP,"Binary",6)) {
- CIDFontP->binarydata = 1;
- scan_token(inputP);
- if (tokenType == TOKEN_INTEGER)
- CIDFontP->bytecnt = tokenValue.integer;
- else {
- rc = SCAN_ERROR;
- break;
- }
- } else if (0 == strncmp(tokenStartP,"Hex",3)) {
- /* not yet supported */
- rc = SCAN_ERROR;
- break;
-#if 0
- /* uncomment when the hex format is supported */
- CIDFontP->binarydata = 0;
- scan_token(inputP);
- if (tokenType == TOKEN_INTEGER)
- CIDFontP->bytecnt = tokenValue.integer;
- else {
- rc = SCAN_ERROR;
- break;
- }
-#endif
- }
- break;
- case TOKEN_NAME:
- /* end of PostScript and beginning of data */
- if (0 == strncmp(tokenStartP,"StartData",9)) {
- /* every CIDFont must have an FDArray */
- /* check whether other required dictionary entries were found */
- if (CIDFontP->CIDfontInfoP[CIDFDARRAY].value.data.arrayP == NULL ||
- CIDFontP->CIDfontInfoP[CIDFONTNAME].value.data.nameP == NULL ||
- CIDFontP->CIDfontInfoP[CIDFONTTYPE].value.data.integer == -1 ||
- CIDFontP->CIDfontInfoP[CIDVERSION].value.data.integer == -1 ||
- CIDFontP->CIDfontInfoP[CIDREGISTRY].value.data.valueP == NULL ||
- CIDFontP->CIDfontInfoP[CIDORDERING].value.data.valueP == NULL ||
- CIDFontP->CIDfontInfoP[CIDSUPPLEMENT].value.data.integer == -1 ||
- CIDFontP->CIDfontInfoP[CIDFONTBBOX].value.data.arrayP == NULL ||
- CIDFontP->CIDfontInfoP[CIDMAPOFFSET].value.data.integer == -1 ||
- CIDFontP->CIDfontInfoP[CIDFDBYTES].value.data.integer == -1 ||
- CIDFontP->CIDfontInfoP[CIDGDBYTES].value.data.integer == -1 ||
- CIDFontP->CIDfontInfoP[CIDCOUNT].value.data.integer == -1) {
- rc = SCAN_ERROR;
- break;
- } else {
- /* do Registry and Ordering entries match? */
- if (strcmp(CIDFontP->CIDfontInfoP[CIDREGISTRY].value.data.valueP,
- CMapP->CMapInfoP[CMAPREGISTRY].value.data.valueP) != 0 ||
- strcmp(CIDFontP->CIDfontInfoP[CIDORDERING].value.data.valueP,
- CMapP->CMapInfoP[CMAPORDERING].value.data.valueP) != 0) {
- rc = SCAN_ERROR;
- break;
- } else {
- fclose(inputP->data.fileP);
- return(SCAN_OK);
- }
- }
- }
- break;
- }
-
- }
- while (rc ==0);
- fclose(inputP->data.fileP);
- if (tokenTooLong) return(SCAN_OUT_OF_MEMORY);
- return(rc);
-}
-
-/*
- * -------------------------------------------------------------------
- * Scan the next token and convert it into an object
- * Result is placed on the Operand Stack as next object
- * -------------------------------------------------------------------
- */
-int
-scan_cidtype1font(psfont *FontP)
-{
- int i;
- int begincnt = 0; /* counter for the number of unpaired begin operators */
- int currentfilefound = 0;
-
- WantFontInfo = TRUE;
- InPrivateDict = FALSE;
- TwoSubrs = FALSE;
- rc = BuildFontInfo(FontP);
- if (rc != 0) return(rc);
-
- /* Assume everything will be OK */
- rc = 0;
- filterFile.data.fileP = NULL;
-
- /* Loop until complete font is read */
- do {
- /* Scan the next token */
- scan_token(inputP);
-
- /* ==> tokenLength, tokenTooLong, tokenType, and tokenValue are */
- /* now set */
-
- switch (tokenType) {
- case TOKEN_EOF:
- case TOKEN_NONE:
- case TOKEN_INVALID:
- /* in this case we are done */
- if (tokenTooLong) return(SCAN_OUT_OF_MEMORY);
- rc = SCAN_ERROR;
- break;
- case TOKEN_LITERAL_NAME:
- /* Look up the name */
- tokenStartP[tokenLength] = '\0';
- if (InPrivateDict ) {
- rc = FindDictValue(FontP->Private);
- /* we are not going to report errors */
- /* Sometimes the font file may test a value such as */
- /* testing to see if the font is alreadly loaded with */
- /* same UniqueID. We would faile on /UniqueID get */
- /* because we are expecting a int to follow UniqueID*/
- /* If the correct object type does not follow a Name*/
- /* then we will skip over it without reporting error except */
- /* out of memory */
- if (rc != SCAN_OUT_OF_MEMORY)
- rc = SCAN_OK;
- break;
- } /* end of reading Private dictionary */
- else
- if (0 == strncmp(tokenStartP,"Private",7) ) {
- InPrivateDict = TRUE;
- rc = BuildCIDType1Private(FontP);
- break;
- }
- else
- if (WantFontInfo) {
- rc = FindDictValue(FontP->fontInfoP);
- /* we are not going to report errors except out of memory */
- if (rc != SCAN_OUT_OF_MEMORY)
- rc = SCAN_OK;
- break;
- }
- break;
- case TOKEN_NAME:
- if (0 == strncmp(tokenStartP,"currentfile",11)) {
- currentfilefound = 1;
- break;
- } else if (0 == strncmp(tokenStartP,"eexec",5)) {
- if (currentfilefound == 1) {
- currentfilefound = 0;
- filterFile.data.fileP = CIDeexec(inputP->data.fileP);
- if (filterFile.data.fileP == NULL) {
- fclose(inputFile.data.fileP);
- return(SCAN_FILE_OPEN_ERROR);
- }
- inputP = &filterFile;
- } else {
- rc = SCAN_ERROR;
- break;
- }
- } else if (0 == strncmp(tokenStartP,"begin",5)) {
- begincnt++;
- currentfilefound = 0;
- } else if (0 == strncmp(tokenStartP,"end",3)) {
- currentfilefound = 0;
- begincnt--;
- if (begincnt == 0) {
- if (filterFile.data.fileP != NULL) {
- scan_token(inputP); /* get 'currentfile' */
- scan_token(inputP); /* get 'closefile' */
- inputP = &inputFile;
- resetDecrypt();
- inputP->data.fileP->b_cnt =
- F_BUFSIZ - (inputP->data.fileP->b_ptr -
- inputP->data.fileP->b_base);
- if (inputP->data.fileP->b_cnt > 0) {
- for (i = 0; i < inputP->data.fileP->b_cnt; i++)
- if (*(inputP->data.fileP->b_ptr + i) == '%')
- break;
- if (i < inputP->data.fileP->b_cnt) {
- inputP->data.fileP->b_cnt -= i;
- inputP->data.fileP->b_ptr += i;
- } else
- inputP->data.fileP->b_cnt = 0;
- }
- }
- rc = SCAN_OK;
- return(rc);
- }
- if (begincnt < 0) {
- rc = SCAN_ERROR;
- break;
- }
- }
- break;
- }
-
- }
- while (rc == 0);
- if (tokenTooLong) return(SCAN_OUT_OF_MEMORY);
- return(rc);
-}
-#endif
-
-/*
- * -------------------------------------------------------------------
- * Scan the next token and convert it into an object
- * Result is placed on the Operand Stack as next object
- * -------------------------------------------------------------------
- */
-int
-scan_font(psfont *FontP)
-{
-
-
- char filename[128];
- char filetype[3];
- FILE *fileP;
- char *nameP;
- int namelen;
- int V;
- int i;
- boolean starthex80;
-
- starthex80 = FALSE;
- filetype[0] = 'r';
- filetype[1] = 'b';
- filetype[2] = '\0';
- /* copy the filename and remove leading or trailing blanks */
- /* point to name and search for leading blanks */
- nameP= FontP->FontFileName.data.nameP;
- namelen = FontP->FontFileName.len;
- while (nameP[0] == ' ') {
- nameP++;
- namelen--;
- }
- /* now remove any trailing blanks */
- while ((namelen>0) && ( nameP[namelen-1] == ' ')) {
- namelen--;
- }
- strncpy(filename,nameP,namelen);
- filename[namelen] = '\0';
- /* file name is now constructed */
- inputFile.data.fileP = NULL;
- filterFile.data.fileP = NULL;
-
- inputP = &inputFile;
- if ((fileP = T1Open(filename,filetype))) {
- /* get the first byte of file */
- V = _XT1getc(fileP);
- /* if file starts with x'80' then skip next 5 bytes */
- if ( V == 0X80 ) {
- for (i=0;i<5;i++) V = _XT1getc(fileP);
- starthex80 = TRUE;
- }
- else T1Ungetc(V,fileP);
- objFormatFile(inputP,fileP);
- }
- else {
- return(SCAN_FILE_OPEN_ERROR);
- };
-
- WantFontInfo = TRUE;
- InPrivateDict = FALSE;
- TwoSubrs = FALSE;
- rc = BuildFontInfo(FontP);
- if (rc != 0) return(rc);
-
- /* Assume everything will be OK */
- rc = 0;
-
- /* Loop until complete font is read */
- do {
- /* Scan the next token */
- scan_token(inputP);
-
- /* ==> tokenLength, tokenTooLong, tokenType, and tokenValue are */
- /* now set */
-
- switch (tokenType) {
- case TOKEN_EOF:
- case TOKEN_NONE:
- case TOKEN_INVALID:
- /* in this case we are done */
- if (tokenTooLong) return(SCAN_OUT_OF_MEMORY);
- rc = SCAN_ERROR;
- break;
- case TOKEN_LITERAL_NAME:
- /* Look up the name */
- tokenStartP[tokenLength] = '\0';
- if (InPrivateDict ) {
- if (0== strncmp(tokenStartP,"Subrs",5) ) {
- rc = BuildSubrs(FontP);
- break;
- }
- if (0== strncmp(tokenStartP,"CharStrings",11) ) {
- rc = BuildCharStrings(FontP);
- if ( (rc == SCAN_OK) ||(rc == SCAN_END) ) {
- T1Close(inputP->data.fileP);
- /* Build the Blues Structure */
- rc = GetType1Blues(FontP);
- /* whatever the return code, return it */
- /* all the work is done. This is the normal exit.*/
- return(rc);
- }
- break;
- }
- rc = FindDictValue(FontP->Private);
- /* we are not going to report errors */
- /* Sometimes the font file may test a value such as */
- /* testing to see if the font is alreadly loaded with */
- /* same UniqueID. We would faile on /UniqueID get */
- /* because we are expecting a int to follow UniqueID*/
- /* If the correct object type does not follow a Name*/
- /* then we will skip over it without reporting error except */
- /* when out of memory */
- if (rc != SCAN_OUT_OF_MEMORY)
- rc = SCAN_OK;
- break;
- } /* end of reading Private dictionary */
- else
- if (0== strncmp(tokenStartP,"Private",7) ) {
- InPrivateDict = TRUE;
- rc = BuildPrivate(FontP);
- break;
- }
- else
- if (WantFontInfo) {
- rc = FindDictValue(FontP->fontInfoP);
- /* we are not going to report errors except out of memory */
- if (rc != SCAN_OUT_OF_MEMORY)
- rc = SCAN_OK;
- break;
- }
- break;
- case TOKEN_NAME:
- if (0 == strncmp(tokenStartP,"eexec",5) ) {
- /* if file started with x'80', check next 5 bytes */
- if (starthex80) {
- V = _XT1getc(fileP);
- if ( V == 0X80 ) {
- for (i=0;i<5;i++) V = _XT1getc(fileP);
- }
- else T1Ungetc(V,fileP);
- }
- filterFile.data.fileP = T1eexec(inputP->data.fileP);
- if (filterFile.data.fileP == NULL) {
- T1Close(inputFile.data.fileP);
- return(SCAN_FILE_OPEN_ERROR);
- }
- inputP = &filterFile;
-
- WantFontInfo = FALSE;
- }
- break;
- }
-
- }
- while (rc ==0);
- T1Close(inputP->data.fileP);
- if (tokenTooLong) return(SCAN_OUT_OF_MEMORY);
- return(rc);
-}
-
diff --git a/nx-X11/lib/font/Type1/spaces.c b/nx-X11/lib/font/Type1/spaces.c
deleted file mode 100644
index 55cc96f67..000000000
--- a/nx-X11/lib/font/Type1/spaces.c
+++ /dev/null
@@ -1,998 +0,0 @@
-/* $Xorg: spaces.c,v 1.4 2000/08/17 19:46:32 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/spaces.c,v 3.10tsi Exp $ */
- /* SPACES CWEB V0021 ******** */
-/*
-:h1 id=spaces.SPACES Module - Handles Coordinate Spaces
-
-This module is responsible for handling the TYPE1IMAGER "XYspace" object.
-
-&author. Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com)
-
-
-:h3.Include Files
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef FONTMODULE
-#include "Xdefs.h" /* Bool declaration ??? */
-#include "Xmd.h" /* INT32 declaration ??? */
-#include "os.h"
-#include "xf86_ansic.h"
-#else
-#include "X11/Xos.h"
-#include <stdio.h>
-#endif
-#include "objects.h"
-#include "spaces.h"
-#include "paths.h"
-#include "pictures.h"
-#include "fonts.h"
-#include "arith.h"
-#include "trig.h"
-
-static void FindFfcn ( double cx, double cy,
- convertFunc *fcnP );
-static void FindIfcn ( double cx, double cy,
- fractpel *icxP, fractpel *icyP,
- iconvertFunc *fcnP );
-
-/*
-:h3.Entry Points Provided to the TYPE1IMAGER User
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-:h3.Entry Points Provided to Other Modules
-*/
-
-/*
-In addition, other modules call the SPACES module through function
-vectors in the "XYspace" structure. The entry points accessed that
-way are "FConvert()", "IConvert()", and "ForceFloat()".
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h3.Macros and Typedefs Provided to Other Modules
-
-:h4.Duplicating and Killing Spaces
-
-Destroying XYspaces is so simple we can do it with a
-macro:
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-On the other hand, duplicating XYspaces is slightly more difficult
-because of the need to keep a unique ID in the space, see
-:hdref refid=dupspace..
-
-:h4.Fixed Point Pel Representation
-
-We represent pel positions with fixed point numbers. This does NOT
-mean integer, but truly means fixed point, with a certain number
-of binary digits (FRACTBITS) representing the fractional part of the
-pel.
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-/*
-:h2.Data Structures for Coordinate Spaces and Points
-*/
-/*
-:h3 id=matrix.Matrices
-
-TYPE1IMAGER uses 2x2 transformation matrices. We'll use C notation for
-such a matrix (M[2][2]), the first index being rows, the second columns.
-*/
-
-/*
-:h3.The "doublematrix" Structure
-
-We frequently find it desirable to store both a matrix and its
-inverse. We store these in a "doublematrix" structure.
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-:h3.The "XYspace" Structure
-
-The XYspace structure represents the XYspace object.
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-#define RESERVED 10 /* 'n' IDs are reserved for invalid & immortal spaces */
-/*
-*/
-#define NEXTID ((SpaceID < RESERVED) ? (SpaceID = RESERVED) : ++SpaceID)
-
-static unsigned int SpaceID = 1;
-
-struct XYspace *
-CopySpace(struct XYspace *S)
-{
- S = (struct XYspace *)Allocate(sizeof(struct XYspace), S, 0);
- S->ID = NEXTID;
- return(S);
-}
-/*
-:h3.The "fractpoint" Structure
-
-A fractional point is just a "fractpel" x and y:
-*/
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-:h3.Lazy Evaluation of Matrix Inverses
-
-Calculating the inverse of a matrix is somewhat involved, and we usually
-do not need them. So, we flag whether or not the space has the inverse
-already calculated:
-*/
-
-#define HASINVERSE(flag) ((flag)&0x80)
-
-/*
-The following macro forces a space to have an inverse:
-*/
-
-#define CoerceInverse(S) if (!HASINVERSE((S)->flag)) { \
- MatrixInvert((S)->tofract.normal, (S)->tofract.inverse); (S)->flag |= HASINVERSE(ON); }
-/*
-:h3.IDENTITY Space
-
-IDENTITY space is (logically) the space corresponding to the identity
-transformation matrix. However, since all our transformation matrices
-have a common FRACTFLOAT scale factor to convert to 'fractpel's, that
-is actually what we store in 'tofract' matrix of IDENTITY:
-*/
-
-static struct XYspace identity = { SPACETYPE, ISPERMANENT(ON) + ISIMMORTAL(ON)
- + HASINVERSE(ON), 2, /* added 3-26-91 PNM */
- NULL, NULL,
- NULL, NULL, NULL, NULL,
- INVALIDID + 1, 0,
- {{{FRACTFLOAT, 0.0}, {0.0, FRACTFLOAT}},
- {{1.0/FRACTFLOAT, 0.0}, {0.0, 1.0/FRACTFLOAT}}},
- {{0, 0}, {0, 0}}};
-struct XYspace *IDENTITY = &identity;
-
-/*
-*/
-#define MAXCONTEXTS 16
-
-static struct doublematrix contexts[MAXCONTEXTS];
-
-#ifdef notdef
-
-static int nextcontext = 1;
-
-/*SHARED LINE(S) ORIGINATED HERE*/
-
-/*
-:h3.FindDeviceContext() - Find the Context Given a Device
-
-This routine, given a device, returns the index of the device's
-transformation matrix in the context array. If it cannot find it,
-it will allocate a new array entry and fill it out.
-*/
-
-static int
-FindDeviceContext(pointer device) /* device token */
-{
- double M[2][2]; /* temporary matrix */
- float Xres,Yres; /* device resolution */
- int orient = -1; /* device orientation */
- int rc = -1; /* return code for QueryDeviceState */
-
- if (rc != 0) /* we only bother with this check once */
- Abort("Context: QueryDeviceState didn't work");
-
- M[0][0] = M[1][0] = M[0][1] = M[1][1] = 0.0;
-
- switch (orient) {
- case 0:
- M[0][0] = Xres; M[1][1] = -Yres;
- break;
- case 1:
- M[1][0] = Yres; M[0][1] = Xres;
- break;
- case 2:
- M[0][0] = -Xres; M[1][1] = Yres;
- break;
- case 3:
- M[1][0] = -Yres; M[0][1] = -Xres;
- break;
- default:
- Abort("QueryDeviceState returned invalid orientation");
- }
- return(FindContext(M));
-}
-
-/*
-:h3.FindContext() - Find the Context Given a Matrix
-
-This routine, given a matrix, returns the index of that matrix matrix in
-the context array. If it cannot find it, it will allocate a new array
-entry and fill it out.
-*/
-
-int
-FindContext(double M[2][2]) /* array to search for */
-{
- register int i; /* loop variable for search */
- for (i=0; i < nextcontext; i++)
- if (M[0][0] == contexts[i].normal[0][0] && M[1][0] == contexts[i].normal[1][0]
- && M[0][1] == contexts[i].normal[0][1] && M[1][1] == contexts[i].normal[1][1])
- break;
-
- if (i >= nextcontext) {
- if (i >= MAXCONTEXTS)
- Abort("Context: out of them");
- LONGCOPY(contexts[i].normal, M, sizeof(contexts[i].normal));
- MatrixInvert(M, contexts[i].inverse);
- nextcontext++;
- }
-
- return(i);
-}
-
-/*
-:h3.Context() - Create a Coordinate Space for a Device
-
-This user operator is implemented by first finding the device context
-array index, then transforming IDENTITY space to create an appropriate
-cooridnate space.
-*/
-
-struct XYspace *
-Context(pointer device, /* device token */
- double units) /* multiples of one inch */
-{
- double M[2][2]; /* device transformation matrix */
- register int n; /* will hold device context number */
- register struct XYspace *S; /* XYspace constructed */
-
- ARGCHECK((device == NULL), "Context of NULLDEVICE not allowed",
- NULL, IDENTITY, (0), struct XYspace *);
- ARGCHECK((units == 0.0), "Context: bad units", NULL, IDENTITY, (0), struct XYspace *);
-
- n = FindDeviceContext(device);
-
- LONGCOPY(M, contexts[n].normal, sizeof(M));
-
- M[0][0] *= units;
- M[0][1] *= units;
- M[1][0] *= units;
- M[1][1] *= units;
-
- S = (struct XYspace *)Xform(IDENTITY, M);
-
- S->context = n;
- return(S);
-}
-#endif
-
-/*
-:h3.ConsiderContext() - Adjust a Matrix to Take Out Device Transform
-
-Remember, we have :f/x times U times D/ and :f/M/ and and we want :f/x
-times U times M times D/. An easy way to do this is to calculate
-:f/D sup <-1> times M times D/, because:
-:formula.
-x times U times D times D sup <-1> times M times D = x times U times M times D
-:formula.
-So this subroutine, given an :f/M/and an object, finds the :f/D/ for that
-object and modifies :f/M/ so it is :f/D sup <-1> times M times D/.
-*/
-
-static void
-ConsiderContext(struct xobject *obj, /* object to be transformed */
- double M[2][2]) /* matrix (may be changed) */
-{
- register int context = 0; /* index in contexts array */
-
- if (obj == NULL) return;
-
- if (ISPATHTYPE(obj->type)) {
- struct segment *path = (struct segment *) obj;
-
- context = path->context;
- }
- else if (obj->type == SPACETYPE) {
- struct XYspace *S = (struct XYspace *) obj;
-
- context = S->context;
- }
- else if (obj->type == PICTURETYPE) {
-
- }
- else
- context = NULLCONTEXT;
-
- if (context != NULLCONTEXT) {
- MatrixMultiply(contexts[context].inverse, M, M);
- MatrixMultiply(M, contexts[context].normal, M);
- }
-}
-
-/*
-:h2.Conversion from User's X,Y to "fractpel" X,Y
-
-When the user is building paths (lines, moves, curves, etc.) he passes
-the control points (x,y) for the paths together with an XYspace. We
-must convert from the user's (x,y) to our internal representation
-which is in pels (fractpels, actually). This involves transforming
-the user's (x,y) under the coordinate space transformation. It is
-important that we do this quickly. So, we store pointers to different
-conversion functions right in the XYspace structure. This allows us
-to have simpler special case functions for the more commonly
-encountered types of transformations.
-
-:h3.Convert(), IConvert(), and ForceFloat() - Called Through "XYspace" Structure
-
-These are functions that fit in the "convert" and "iconvert" function
-pointers in the XYspace structure. They call the "xconvert", "yconvert",
-"ixconvert", and "iyconvert" as appropriate to actually do the work.
-These secondary routines come in many flavors to handle different
-special cases as quickly as possible.
-*/
-
-static void
-FXYConvert(struct fractpoint *pt, /* point to set */
- struct XYspace *S, /* relevant coordinate space */
- double x, double y) /* user's coordinates of point */
-{
- pt->x = (*S->xconvert)(S->tofract.normal[0][0], S->tofract.normal[1][0], x, y);
- pt->y = (*S->yconvert)(S->tofract.normal[0][1], S->tofract.normal[1][1], x, y);
-}
-
-static void
-IXYConvert(struct fractpoint *pt, /* point to set */
- struct XYspace *S, /* relevant coordinate space */
- long x, long y) /* user's coordinates of point */
-{
- pt->x = (*S->ixconvert)(S->itofract[0][0], S->itofract[1][0], x, y);
- pt->y = (*S->iyconvert)(S->itofract[0][1], S->itofract[1][1], x, y);
-}
-
-/*
-ForceFloat is a substitute for IConvert(), when we just do not have
-enough significant digits in the coefficients to get high enough
-precision in the answer with fixed point arithmetic. So, we force the
-integers to floats, and do the arithmetic all with floats:
-*/
-
-static void
-ForceFloat(struct fractpoint *pt, /* point to set */
- struct XYspace *S, /* relevant coordinate space */
- long x, long y) /* user's coordinates of point */
-{
- (*S->convert)(pt, S, (double) x, (double) y);
-}
-
-/*
-:h3.FXYboth(), FXonly(), FYonly() - Floating Point Conversion
-
-These are the routines we use when the user has given us floating
-point numbers for x and y. FXYboth() is the general purpose routine;
-FXonly() and FYonly() are special cases when one of the coefficients
-is 0.0.
-*/
-
-static fractpel
-FXYboth(double cx, double cy, /* x and y coefficients */
- double x, double y) /* user x,y */
-{
- register double r; /* temporary float */
-
- r = x * cx + y * cy;
- return((fractpel) r);
-}
-
-/*ARGSUSED*/
-static fractpel
-FXonly(double cx, double cy, /* x and y coefficients */
- double x, double y) /* user x,y */
-{
- register double r; /* temporary float */
-
- r = x * cx;
- return((fractpel) r);
-}
-
-/*ARGSUSED*/
-static fractpel
-FYonly(double cx, double cy, /* x and y coefficients */
- double x, double y) /* user x,y */
-{
- register double r; /* temporary float */
-
- r = y * cy;
- return((fractpel) r);
-}
-
-/*
-:h3.IXYboth(), IXonly(), IYonly() - Simple Integer Conversion
-
-These are the routines we use when the user has given us integers for
-x and y, and the coefficients have enough significant digits to
-provide precise answers with only "long" (32 bit?) multiplication.
-IXYboth() is the general purpose routine; IXonly() and IYonly() are
-special cases when one of the coefficients is 0.
-*/
-
-static fractpel
-IXYboth(fractpel cx, fractpel cy, /* x and y coefficients */
- long x, long y) /* user x,y */
-{
- return(x * cx + y * cy);
-}
-
-/*ARGSUSED*/
-static fractpel
-IXonly(fractpel cx, fractpel cy, /* x and y coefficients */
- long x, long y) /* user x,y */
-{
- return(x * cx);
-}
-
-/*ARGSUSED*/
-static fractpel
-IYonly(fractpel cx, fractpel cy, /* x and y coefficients */
- long x, long y) /* user x,y */
-{
- return(y * cy);
-}
-
-
-/*
-:h3.FPXYboth(), FPXonly(), FPYonly() - More Involved Integer Conversion
-
-These are the routines we use when the user has given us integers for
-x and y, but the coefficients do not have enough significant digits to
-provide precise answers with only "long" (32 bit?) multiplication.
-We have increased the number of significant bits in the coefficients
-by FRACTBITS; therefore we must use "double long" (64 bit?)
-multiplication by calling FPmult(). FPXYboth() is the general purpose
-routine; FPXonly() and FPYonly() are special cases when one of the
-coefficients is 0.
-
-Note that it is perfectly possible for us to calculate X with the
-"FP" method and Y with the "I" method, or vice versa. It all depends
-on how the functions in the XYspace structure are filled out.
-*/
-
-static fractpel
-FPXYboth(fractpel cx, fractpel cy, /* x and y coefficients */
- long x, long y) /* user x,y */
-{
- return( FPmult(x, cx) + FPmult(y, cy) );
-}
-
-/*ARGSUSED*/
-static fractpel
-FPXonly(fractpel cx, fractpel cy, /* x and y coefficients */
- long x, long y) /* user x,y */
-{
- return( FPmult(x, cx) );
-}
-
-/*ARGSUSED*/
-static fractpel
-FPYonly(fractpel cx, fractpel cy, /* x and y coefficients */
- long x, long y) /* user x,y */
-{
- return( FPmult(y, cy) );
-}
-
-
-
-/*
-:h3.FillOutFcns() - Determine the Appropriate Functions to Use for Conversion
-
-This function fills out the "convert" and "iconvert" function pointers
-in an XYspace structure, and also fills the "helper"
-functions that actually do the work.
-*/
-
-static void
-FillOutFcns(struct XYspace *S) /* functions will be set in this structure */
-{
- S->convert = FXYConvert;
- S->iconvert = IXYConvert;
-
- FindFfcn(S->tofract.normal[0][0], S->tofract.normal[1][0], &S->xconvert);
- FindFfcn(S->tofract.normal[0][1], S->tofract.normal[1][1], &S->yconvert);
- FindIfcn(S->tofract.normal[0][0], S->tofract.normal[1][0],
- &S->itofract[0][0], &S->itofract[1][0], &S->ixconvert);
- FindIfcn(S->tofract.normal[0][1], S->tofract.normal[1][1],
- &S->itofract[0][1], &S->itofract[1][1], &S->iyconvert);
-
- if (S->ixconvert == NULL || S->iyconvert == NULL)
- S->iconvert = ForceFloat;
-}
-
-/*
-:h4.FindFfcn() - Subroutine of FillOutFcns() to Fill Out Floating Functions
-
-This function tests for the special case of one of the coefficients
-being zero:
-*/
-
-static void
-FindFfcn(double cx, double cy, /* x and y coefficients */
- convertFunc *fcnP) /* pointer to function to set */
-{
- if (cx == 0.0)
- *fcnP = FYonly;
- else if (cy == 0.0)
- *fcnP = FXonly;
- else
- *fcnP = FXYboth;
-}
-
-/*
-:h4.FindIfcn() - Subroutine of FillOutFcns() to Fill Out Integer Functions
-
-There are two types of integer functions, the 'I' type and the 'FP' type.
-We use the I type functions when we are satisfied with simple integer
-arithmetic. We used the FP functions when we feel we need higher
-precision (but still fixed point) arithmetic. If all else fails,
-we store a NULL indicating that this we should do the conversion in
-floating point.
-*/
-
-static void
-FindIfcn(double cx, double cy, /* x and y coefficients */
- fractpel *icxP, fractpel *icyP, /* fixed point coefficients to set */
- iconvertFunc *fcnP) /* pointer to function to set */
-{
- register fractpel imax; /* maximum of cx and cy */
-
- *icxP = cx;
- *icyP = cy;
-
- if (cx != (float) (*icxP) || cy != (float) (*icyP)) {
-/*
-At this point we know our integer approximations of the coefficients
-are not exact. However, we will still use them if the maximum
-coefficient will not fit in a 'fractpel'. Of course, we have little
-choice at that point, but we haven't lost that much precision by
-staying with integer arithmetic. We have enough significant digits
-so that
-any error we introduce is less than one part in 2:sup/16/.
-*/
-
- imax = MAX(ABS(*icxP), ABS(*icyP));
- if (imax < (fractpel) (1<<(FRACTBITS-1)) ) {
-/*
-At this point we know our integer approximations just do not have
-enough significant digits for accuracy. We will add FRACTBITS
-significant digits to the coefficients (by multiplying them by
-1<<FRACTBITS) and go to the "FP" form of the functions. First, we
-check to see if we have ANY significant digits at all (that is, if
-imax == 0). If we don't, we suspect that adding FRACTBITS digits
-won't help, so we punt the whole thing.
-*/
- if (imax == 0) {
- *fcnP = NULL;
- return;
- }
- cx *= FRACTFLOAT;
- cy *= FRACTFLOAT;
- *icxP = cx;
- *icyP = cy;
- *fcnP = FPXYboth;
- }
- else
- *fcnP = IXYboth;
- }
- else
- *fcnP = IXYboth;
-/*
-Now we check for special cases where one coefficient is zero (after
-integer conversion):
-*/
- if (*icxP == 0)
- *fcnP = (*fcnP == FPXYboth) ? FPYonly : IYonly;
- else if (*icyP == 0)
- *fcnP = (*fcnP == FPXYboth) ? FPXonly : IXonly;
-}
-/*
-:h3.UnConvert() - Find User Coordinates From FractPoints
-
-The interesting thing with this routine is that we avoid calculating
-the matrix inverse of the device transformation until we really need
-it, which is to say, until this routine is called for the first time
-with a given coordinate space.
-
-We also only calculate it only once. If the inverted matrix is valid,
-we don't calculate it; if not, we do. We never expect matrices with
-zero determinants, so by convention, we mark the matrix is invalid by
-marking both X terms zero.
-*/
-
-void
-UnConvert(struct XYspace *S, /* relevant coordinate space */
- struct fractpoint *pt, /* device coordinates */
- double *xp, double *yp) /* where to store resulting x,y */
-{
- double x,y;
-
- CoerceInverse(S);
- x = pt->x;
- y = pt->y;
- *xp = S->tofract.inverse[0][0] * x + S->tofract.inverse[1][0] * y;
- *yp = S->tofract.inverse[0][1] * x + S->tofract.inverse[1][1] * y;
-}
-
-/*
-:h2.Transformations
-*/
-/*
-:h3 id=xform.Xform() - Transform Object in X and Y
-
-TYPE1IMAGER wants transformations of objects like paths to be identical
-to transformations of spaces. For example, if you scale a line(1,1)
-by 10 it should yield the same result as generating the line(1,1) in
-a coordinate space that has been scaled by 10.
-
-We handle fonts by storing the accumulated transform, for example, SR
-(accumulating on the right). Then when we map the font through space TD,
-for example, we multiply the accumulated font transform on the left by
-the space transform on the right, yielding SRTD in this case. We will
-get the same result if we did S, then R, then T on the space and mapping
-an unmodified font through that space.
-*/
-
-struct xobject *
-t1_Xform(struct xobject *obj, /* object to transform */
- double M[2][2]) /* transformation matrix */
-{
- if (obj == NULL)
- return(NULL);
-
- if (obj->type == FONTTYPE) {
- register struct font *F = (struct font *) obj;
-
- F = UniqueFont(F);
- return((struct xobject*)F);
- }
- if (obj->type == PICTURETYPE) {
-/*
-In the case of a picture, we choose both to update the picture's
-transformation matrix and keep the handles up to date.
-*/
- register struct picture *P = (struct picture *) obj;
- register struct segment *handles; /* temporary path to transform handles */
-
- P = UniquePicture(P);
- handles = PathSegment(LINETYPE, P->origin.x, P->origin.y);
- handles = Join(handles,
- PathSegment(LINETYPE, P->ending.x, P->ending.y) );
- handles = (struct segment *)Xform((struct xobject *) handles, M);
- P->origin = handles->dest;
- P->ending = handles->link->dest;
- KillPath(handles);
- return((struct xobject *)P);
- }
-
- if (ISPATHTYPE(obj->type)) {
- struct XYspace pseudo; /* local temporary space */
- PseudoSpace(&pseudo, M);
- return((struct xobject *) PathTransform((struct segment *)obj,
- &pseudo));
- }
-
-
- if (obj->type == SPACETYPE) {
- register struct XYspace *S = (struct XYspace *) obj;
-
-/* replaced ISPERMANENT(S->flag) with S->references > 1 3-26-91 PNM */
- if (S->references > 1)
- S = CopySpace(S);
- else
- S->ID = NEXTID;
-
- MatrixMultiply(S->tofract.normal, M, S->tofract.normal);
- /*
- * mark inverted matrix invalid:
- */
- S->flag &= ~HASINVERSE(ON);
-
- FillOutFcns(S);
- return((struct xobject *) S);
- }
-
- return(ArgErr("Untransformable object", obj, obj));
-}
-
-/*
-:h3.Transform() - Transform an Object
-
-This is the external user's entry point.
-*/
-struct xobject *
-t1_Transform(struct xobject *obj,
- double cxx, double cyx, /* 2x2 transform matrix elements */
- double cxy, double cyy) /* in row order */
-{
- double M[2][2];
-
- M[0][0] = cxx;
- M[0][1] = cyx;
- M[1][0] = cxy;
- M[1][1] = cyy;
- ConsiderContext(obj, M);
- return(Xform(obj, M));
-}
-/*
-:h3.Scale() - Special Case of Transform()
-
-This is a user operator.
-*/
-
-struct xobject *
-t1_Scale(struct xobject *obj, /* object to scale */
- double sx, double sy) /* scale factors in x and y */
-{
- double M[2][2];
-
- M[0][0] = sx;
- M[1][1] = sy;
- M[1][0] = M[0][1] = 0.0;
- ConsiderContext(obj, M);
- return(Xform(obj, M));
-}
-
-/*
-:h3 id=rotate.Rotate() - Special Case of Transform()
-
-We special-case different settings of 'degrees' for performance
-and accuracy within the DegreeSin() and DegreeCos() routines themselves.
-*/
-
-#ifdef notdef
-struct xobject *
-xiRotate(struct xobject *obj, /* object to be transformed */
- double degrees) /* degrees of COUNTER-clockwise rotation */
-{
- double M[2][2];
-
- M[0][0] = M[1][1] = DegreeCos(degrees);
- M[1][0] = - (M[0][1] = DegreeSin(degrees));
- ConsiderContext(obj, M);
- return(Xform(obj, M));
-}
-#endif
-
-/*
-:h3.PseudoSpace() - Build a Coordinate Space from a Matrix
-
-Since we have built all this optimized code that, given an (x,y) and
-a coordinate space, yield transformed (x,y), it seems a shame not to
-use the same logic when we need to multiply an (x,y) by an arbitrary
-matrix that is not (initially) part of a coordinate space. This
-subroutine takes the arbitrary matrix and builds a coordinate
-space, with all its nifty function pointers.
-*/
-
-void
-PseudoSpace(struct XYspace *S, /* coordinate space structure to fill out */
- double M[2][2]) /* matrix that will become 'tofract.normal' */
-{
- S->type = SPACETYPE;
- S->flag = ISPERMANENT(ON) + ISIMMORTAL(ON);
- S->references = 2; /* 3-26-91 added PNM */
- S->tofract.normal[0][0] = M[0][0];
- S->tofract.normal[1][0] = M[1][0];
- S->tofract.normal[0][1] = M[0][1];
- S->tofract.normal[1][1] = M[1][1];
-
- FillOutFcns(S);
-}
-
-/*
-:h2 id=matrixa.Matrix Arithmetic
-
-Following the convention in Newman and Sproull, :hp1/Interactive
-Computer Graphics/,
-matrices are organized:
-:xmp.
- | cxx cyx |
- | cxy cyy |
-:exmp.
-A point is horizontal, for example:
-:xmp.
- [ x y ]
-:exmp.
-This means that:
-:formula/x prime = cxx times x + cxy times y/
-:formula/y prime = cyx times x + cyy times y/
-I've seen the other convention, where transform matrices are
-transposed, equally often in the literature.
-*/
-
-/*
-:h3.MatrixMultiply() - Implements Multiplication of Two Matrices
-
-Implements matrix multiplication, A * B = C.
-
-To remind myself, matrix multiplication goes rows of A times columns
-of B.
-The output matrix may be the same as one of the input matrices.
-*/
-void
-MatrixMultiply(double A[2][2], double B[2][2], /* input matrices */
- double C[2][2]) /* output matrix */
-{
- register double txx,txy,tyx,tyy;
-
- txx = A[0][0] * B[0][0] + A[0][1] * B[1][0];
- txy = A[1][0] * B[0][0] + A[1][1] * B[1][0];
- tyx = A[0][0] * B[0][1] + A[0][1] * B[1][1];
- tyy = A[1][0] * B[0][1] + A[1][1] * B[1][1];
-
- C[0][0] = txx;
- C[1][0] = txy;
- C[0][1] = tyx;
- C[1][1] = tyy;
-}
-/*
-:h3.MatrixInvert() - Invert a Matrix
-
-My reference for matrix inversion was :hp1/Elementary Linear Algebra/
-by Paul C. Shields, Worth Publishers, Inc., 1968.
-*/
-void
-MatrixInvert(double M[2][2], /* input matrix */
- double Mprime[2][2]) /* output inverted matrix */
-{
- register double D; /* determinant of matrix M */
- register double txx,txy,tyx,tyy;
-
- txx = M[0][0];
- txy = M[1][0];
- tyx = M[0][1];
- tyy = M[1][1];
-
- D = M[1][1] * M[0][0] - M[1][0] * M[0][1];
- if (D == 0.0)
- Abort("MatrixInvert: can't");
-
- Mprime[0][0] = tyy / D;
- Mprime[1][0] = -txy / D;
- Mprime[0][1] = -tyx / D;
- Mprime[1][1] = txx / D;
-}
-/*
-:h2.Initialization, Queries, and Debug
-*/
-/*
-:h3.InitSpaces() - Initialize Constant Spaces
-
-For compatibility, we initialize a coordinate space called USER which
-maps 72nds of an inch to pels on the default device.
-*/
-
-struct XYspace *USER = &identity;
-
-void
-InitSpaces(void)
-{
- IDENTITY->type = SPACETYPE;
- FillOutFcns(IDENTITY);
-
- contexts[NULLCONTEXT].normal[1][0]
- = contexts[NULLCONTEXT].normal[0][1]
- = contexts[NULLCONTEXT].inverse[1][0]
- = contexts[NULLCONTEXT].inverse[0][1] = 0.0;
- contexts[NULLCONTEXT].normal[0][0]
- = contexts[NULLCONTEXT].normal[1][1]
- = contexts[NULLCONTEXT].inverse[0][0]
- = contexts[NULLCONTEXT].inverse[1][1] = 1.0;
-
- USER->flag |= ISIMMORTAL(ON);
- CoerceInverse(USER);
-}
-/*
-:h3.QuerySpace() - Returns the Transformation Matrix of a Space
-
-Since the tofract matrix of an XYspace includes the scale factor
-necessary to produce fractpel results (i.e., FRACTFLOAT), this
-must be taken out before we return the matrix to the user. Fortunately,
-this is simple: just multiply by the inverse of IDENTITY!
-*/
-
-void
-QuerySpace(struct XYspace *S, /* space asked about */
- double *cxxP, double *cyxP, /* where to put answer */
- double *cxyP, double *cyyP)
-{
- double M[2][2]; /* temp matrix to build user's answer */
-
- if (S->type != SPACETYPE) {
- ArgErr("QuerySpace: not a space", S, NULL);
- return;
- }
- MatrixMultiply(S->tofract.normal, IDENTITY->tofract.inverse, M);
- *cxxP = M[0][0];
- *cxyP = M[1][0];
- *cyxP = M[0][1];
- *cyyP = M[1][1];
-}
-
-/*
-:h3.FormatFP() - Format a Fixed Point Pel
-
-We format the pel as "dddd.XXXX", where XX's are hexidecimal digits,
-and the dd's are decimal digits. This might be a little confusing
-mixing hexidecimal and decimal like that, but it is convenient
-to use for debug.
-
-We make sure we have N (FRACTBITS/4) digits past the decimal point.
-*/
-#define FRACTMASK ((1<<FRACTBITS)-1) /* mask for fractional part */
-
-void
-FormatFP(char *string, /* output string */
- fractpel fpel) /* fractional pel input */
-{
- char temp[8];
- register char *s;
- register char *sign;
-
- if (fpel < 0) {
- sign = "-";
- fpel = -fpel;
- }
- else
- sign = "";
-
- sprintf(temp, "000%lx", fpel & FRACTMASK);
- s = temp + strlen(temp) - (FRACTBITS/4);
-
- sprintf(string, "%s%d.%sx", sign, (int)(fpel >> FRACTBITS), s);
-}
-
-/*
-:h3.DumpSpace() - Display a Coordinate Space
-*/
-/*ARGSUSED*/
-void
-DumpSpace(struct XYspace *S)
-{
-}
diff --git a/nx-X11/lib/font/Type1/spaces.h b/nx-X11/lib/font/Type1/spaces.h
deleted file mode 100644
index ef78f2f47..000000000
--- a/nx-X11/lib/font/Type1/spaces.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/* $Xorg: spaces.h,v 1.3 2000/08/17 19:46:32 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/spaces.h,v 3.3 1999/08/22 08:58:53 dawes Exp $ */
-
-/*SHARED*/
-
-#define USER t1_User
-#define IDENTITY t1_Identity
-
-#define Context(d,u) t1_Context(d,u)
-#define Transform(o,f1,f2,f3,f4) t1_Transform(o,f1,f2,f3,f4)
-#define Rotate(o,d) t1_Rotate(o,d)
-#define Scale(o,sx,sy) t1_Scale(o,sx,sy)
-#define QuerySpace(S,f1,f2,f3,f4) t1_QuerySpace(S,f1,f2,f3,f4)
-#define Warp(s1,o,s2) t1_Warp(s1,o,s2)
-
-/* IDENTITY space */
-extern struct XYspace *IDENTITY;
-
-/* creates a coordinate space for a device */
-extern struct XYspace *Context(pointer device, double units);
-/* transform an object */
-extern struct xobject *t1_Transform ( struct xobject *obj, double cxx,
- double cyx, double cxy, double cyy );
-#if 0
-struct xobject *t1_Rotate(); /* rotate an object */
-#endif
-/* scale an object */
-extern struct xobject *t1_Scale ( struct xobject *obj, double sx, double sy );
-#if 0
-struct xobject *t1_Warp(); /* transform like delta of two spaces */
-#endif
-/* returns coordinate space matrix */
-extern void t1_QuerySpace ( struct XYspace *S, double *cxxP, double *cyxP,
- double *cxyP, double *cyyP );
-
-/*END SHARED*/
-/*SHARED*/
-
-/* #define KillSpace(s) Free(s)
-Note - redefined KillSpace() to check references !
-3-26-91 PNM */
-
-#define KillSpace(s) if ( (--(s->references) == 0) ||\
- ( (s->references == 1) && ISPERMANENT(s->flag) ) )\
- Free(s)
-
-#define ConsumeSpace(s) MAKECONSUME(s,KillSpace(s))
-#define UniqueSpace(s) MAKEUNIQUE(s,CopySpace(s))
-
-/*END SHARED*/
-/*SHARED*/
-
-typedef short pel; /* integer pel locations */
-typedef long fractpel; /* fractional pel locations */
-
-#define FRACTBITS 16 /* number of fractional bits in 'fractpel' */
-/*
-We define the following macros to convert from 'fractpel' to 'pel' and
-vice versa:
-*/
-#define TOFRACTPEL(p) (((fractpel)p)<<FRACTBITS)
-#define FPHALF (1<<(FRACTBITS-1))
-#define NEARESTPEL(fp) (((fp)+FPHALF)>>FRACTBITS)
-#define FRACTFLOAT (double)(1L<<FRACTBITS)
-
-/*END SHARED*/
-/*SHARED*/
-
-struct doublematrix {
- double normal[2][2];
- double inverse[2][2];
-} ;
-
-/*END SHARED*/
-/*SHARED*/
-
-struct fractpoint {
- fractpel x,y;
-} ;
-
-/*SHARED*/
-
-typedef fractpel (*convertFunc)(double, double, double, double);
-typedef fractpel (*iconvertFunc)(fractpel, fractpel, long, long);
-
-struct XYspace {
- XOBJ_COMMON /* xobject common data define 3-26-91 PNM */
- /* type = SPACETYPE */
- void (*convert)(struct fractpoint *, struct XYspace *, double, double); /* calculate "fractpoint" X,Y from float X,Y */
- void (*iconvert)(struct fractpoint *, struct XYspace *, long, long); /* calculate "fractpoint" X,Y from int X,Y */
- convertFunc xconvert; /* subroutine of convert */
- convertFunc yconvert; /* subroutine of convert */
- iconvertFunc ixconvert; /* subroutine of iconvert */
- iconvertFunc iyconvert; /* subroutine of iconvert */
- int ID; /* unique identifier (used in font caching) */
- unsigned char context; /* device context of coordinate space */
- struct doublematrix tofract; /* xform to get to fractional pels */
- fractpel itofract[2][2]; /* integer version of "tofract.normal" */
-} ;
-
-#define INVALIDID 0 /* no valid space will have this ID */
-
-/*END SHARED*/
-/*END SHARED*/
-/*SHARED*/
-
-#define DeviceResolution t1_DeviceResolution
-#define InitSpaces t1_InitSpaces
-#define CopySpace(s) t1_CopySpace(s)
-#define Xform(o,M) t1_Xform(o,M)
-#define UnConvert(S,pt,xp,yp) t1_UnConvert(S,pt,xp,yp)
-#define MatrixMultiply(A,B,C) t1_MMultiply(A,B,C)
-#define MatrixInvert(A,B) t1_MInvert(A,B)
-#define PseudoSpace(S,M) t1_PseudoSpace(S,M)
-#define FindContext(M) t1_FindContext(M)
-
-/* initialize pre-defined coordinate spaces */
-extern void t1_InitSpaces ( void );
-/* duplicate a coordinate space */
-extern struct XYspace *t1_CopySpace ( struct XYspace *S );
-/* transform object by matrix */
-extern struct xobject *t1_Xform ( struct xobject *obj, double M[2][2] );
-/* return user coordinates from device coordinates */
-extern void t1_UnConvert ( struct XYspace *S, struct fractpoint *pt,
- double *xp, double *yp );
-/* multiply two matrices */
-extern void t1_MMultiply ( double A[2][2], double B[2][2], double C[2][2] );
-/* invert a matrix */
-extern void t1_MInvert ( double M[2][2], double Mprime[2][2] );
-/* force a coordinate space from a matrix */
-extern void t1_PseudoSpace ( struct XYspace *S, double M[2][2] );
-/* return the "context" represented by a matrix */
-int t1_FindContext(double M[2][2]);
-
-/*END SHARED*/
-/*SHARED*/
-
-#define NULLCONTEXT 0
-
-/*END SHARED*/
-
-/* dump a coordinate space structure */
-extern void t1_DumpSpace ( struct XYspace *S );
-/* dump a format a "fractpel" coordinate */
-extern void t1_FormatFP ( char *string, fractpel fpel );
diff --git a/nx-X11/lib/font/Type1/strokes.h b/nx-X11/lib/font/Type1/strokes.h
deleted file mode 100644
index c374e16db..000000000
--- a/nx-X11/lib/font/Type1/strokes.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* $Xorg: strokes.h,v 1.3 2000/08/17 19:46:32 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/*STUB*/
-
-#define CopyLineStyle(s) s
-#define CopyStrokePath(p) p
-#define KillStrokePath(p)
-#define KillLineStyle(s)
-#define CoercePath(sp) sp
-#define DoStroke(sp) sp
-
diff --git a/nx-X11/lib/font/Type1/t1funcs.c b/nx-X11/lib/font/Type1/t1funcs.c
deleted file mode 100644
index 9de819a0d..000000000
--- a/nx-X11/lib/font/Type1/t1funcs.c
+++ /dev/null
@@ -1,1668 +0,0 @@
-/* $Xorg: t1funcs.c,v 1.5 2001/02/09 02:04:01 xorgcvs Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License, subject to the license given below, to use,
- * copy, modify, and distribute this software * and its
- * documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice appear
- * in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software
- * without specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Author: Jeffrey B. Lotspiech, IBM Almaden Research Center
- * Modeled on spfuncs.c by Dave Lemke, Network Computing Devices, Inc
- * which contains the following copyright and permission notices:
- *
- * Copyright 1990, 1991 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of Network Computing Devices
- * or Digital not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- * Network Computing Devices or Digital make no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * NETWORK COMPUTING DEVICES AND DIGITAL DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES OR DIGITAL BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/t1funcs.c,v 3.33 2003/07/19 13:16:40 tsi Exp $ */
-
-/*
-
-Copyright 1987, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#ifndef FONTMODULE
-#include <string.h>
-#if XFONT_CID
-#include <stdlib.h>
-#include <sys/types.h>
-#include <dirent.h>
-#endif
-#ifdef _XOPEN_SOURCE
-#include <math.h>
-#else
-#define _XOPEN_SOURCE /* to get prototype for hypot on some systems */
-#include <math.h>
-#undef _XOPEN_SOURCE
-#endif
-#include "X11/Xfuncs.h"
-#ifdef USE_MMAP
-#include <sys/types.h>
-#include <sys/mman.h>
-#endif
-#else
-#include "Xmd.h"
-#include "Xdefs.h"
-#endif
-
-#ifdef FONTMODULE
-#include "os.h"
-#include "xf86_ansic.h"
-#endif
-
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/fontutil.h>
-#include <X11/fonts/FSproto.h>
-#include <X11/fonts/fontenc.h>
-#include "t1unicode.h"
-
-#if XFONT_CID
-#include "range.h"
-#endif
-
-#include "objects.h"
-#include "spaces.h"
-#include "paths.h"
-#include "regions.h"
-#include "t1stdio.h"
-#include "util.h"
-#include "fontfcn.h"
-#include "t1intf.h"
-
-
-static int Type1GetGlyphs ( FontPtr pFont, unsigned long count,
- unsigned char *chars, FontEncoding charEncoding,
- unsigned long *glyphCount, CharInfoPtr *glyphs );
-
-#if XFONT_CID
-#define CMapDir "/CMap/"
-#define CFMDir "/CFM/"
-#define CIDFontDir "/CIDFont/"
-#endif
-
-static int Type1GetMetrics ( FontPtr pFont, unsigned long count,
- unsigned char *chars,
- FontEncoding charEncoding,
- unsigned long *glyphCount,
- xCharInfo **glyphs );
-
-
-#define minchar(p) ((p).min_char_low + ((p).min_char_high << 8))
-#define maxchar(p) ((p).max_char_low + ((p).max_char_high << 8))
-
-static void fillrun ( char *p, pel x0, pel x1, int bit );
-
-extern psfont *FontP;
-extern psobj *ISOLatin1EncArrayP;
-
-#if XFONT_CID
-extern char CurCIDFontName[];
-extern char CurCMapName[];
-
-static CharInfoPtr CIDGetGlyph ( FontPtr pFont, unsigned int charcode,
- CharInfoPtr pci );
-
-extern cidfont *CIDFontP;
-extern cmapres *CMapP;
-#endif
-
-static void fill ( char *dest, int h, int w, struct region *area, int byte,
- int bit, int wordsize );
-
-#if XFONT_CID
-int
-CIDOpenScalable (FontPathElementPtr fpe,
- FontPtr *ppFont,
- int flags,
- FontEntryPtr entry,
- char *fileName,
- FontScalablePtr vals,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- FontPtr non_cachable_font) /* We don't do licensing */
-{
- FontPtr pFont;
- int bit,
- byte,
- glyph,
- scan,
- image;
- long *pool; /* memory pool for ximager objects */
- int size; /* for memory size calculations */
- struct XYspace *S; /* coordinate space for character */
- register int i;
- int nchars, len, rc;
- cidglyphs *cid;
- char *p;
- double t1 = .001, t2 = 0.0, t3 = 0.0, t4 = .001;
- double sxmult;
- char CIDFontName[CID_NAME_MAX];
- char CMapName[CID_NAME_MAX];
- char cidfontname[CID_PATH_MAX];
- char cmapname[CID_PATH_MAX];
- char *path;
- char cidfontpath[CID_PATH_MAX];
- char cmappath[CID_PATH_MAX];
-#if defined(HAVE_CFM) || defined(CID_ALL_CHARS)
- char cfmdir[CID_PATH_MAX];
- char cfmfilename[CID_NAME_MAX];
-#endif
-#if defined(CID_ALL_CHARS)
- char *cf;
-#else
- long sAscent, sDescent;
-#endif
-
- /* check the font name */
- len = strlen(fileName);
- if (len <= 0 || len > CID_NAME_MAX - 1)
- return BadFontName;
-
-#if defined(HAVE_CFM) || defined(CID_ALL_CHARS)
- strcpy(cfmdir, fileName);
- p = strrchr(cfmdir, '/');
- if (p) *p = '\0';
-#endif
-
- path = fileName;
- if (!(fileName = strrchr(fileName, '/')))
- return BadFontName;
-
- len = fileName - path;
- strncpy(cidfontpath, path, len);
- cidfontpath[len] = '\0';
- strcpy(cmappath, cidfontpath);
- strcat(cmappath, CMapDir);
-#ifdef HAVE_CFM
- strcpy(cfmdir, cidfontpath);
- strcat(cfmdir, CFMDir);
-#endif
- strcat(cidfontpath, CIDFontDir);
-
- fileName++;
-
- /* extract the CIDFontName and CMapName from the font name */
- /* check for <CIDFontName>--<CMapName> */
- if ((p = strstr(fileName, "--"))) {
- if (p == fileName)
- return BadFontName;
- else {
- strcpy(CIDFontName, fileName);
- CIDFontName[p - fileName] = '\0';
- p += 2;
- i = 0;
- while (*p && *p != '.')
- CMapName[i++] = *p++;
- CMapName[i] = '\0';
- if ((len = strlen(CMapName)) <= 0)
- return BadFontName;
- }
- } else
- return BadFontName;
-
- /* The CMap files whose names end with -V are not yet supported */
- len = strlen(CMapName);
- if ((len >= 2 && CMapName[len - 2] == '-' && CMapName[len - 1] == 'V') ||
- (len == 1 && CMapName[len - 1] == 'V'))
- return BadFontName;
-
- /* Reject ridiculously small font sizes that will blow up the math */
- if (hypot(vals->pixel_matrix[0], vals->pixel_matrix[1]) < 1.0 ||
- hypot(vals->pixel_matrix[2], vals->pixel_matrix[3]) < 1.0)
- return BadFontName;
-
-#ifdef CID_ALL_CHARS
- if ((cf = getenv("CFMDIR")) == NULL)
- strcat(cfmdir, CFMDir);
- else {
- strcpy(cfmdir, cf);
- strcat(cfmdir, "/");
- }
-#endif
-
-#if defined(HAVE_CFM) || defined(CID_ALL_CHARS)
- strcpy(cfmfilename, cfmdir);
- strcat(cfmfilename, CIDFontName);
- strcat(cfmfilename, "--");
- strcat(cfmfilename, CMapName);
- strcat(cfmfilename, ".cfm");
-#endif
-
- /* create a full-path name for a CIDFont file */
- if (strlen(cidfontpath) + strlen(CIDFontName) + 2 >
- CID_PATH_MAX)
- return BadFontName;
- strcpy(cidfontname, cidfontpath);
- strcat(cidfontname, CIDFontName);
-
- /* create a full-path name for a CMap file */
- if (strlen(cmappath) + strlen(CMapName) + 2 > CID_PATH_MAX)
- return BadFontName;
- strcpy(cmapname, cmappath);
- strcat(cmapname, CMapName);
-
- /* set up default values */
- FontDefaultFormat(&bit, &byte, &glyph, &scan);
- /* get any changes made from above */
- rc = CheckFSFormat(format, fmask, &bit, &byte, &scan, &glyph, &image);
- if (rc != Successful)
- return rc;
-
-#define PAD(bits, pad) (((bits)+(pad)-1)&-(pad))
-
- if (!(pFont = CreateFontRec()))
- return AllocError;
-
- cid = (cidglyphs *)xalloc(sizeof(cidglyphs));
- if (cid == NULL) {
- DestroyFontRec(pFont);
- return AllocError;
- }
- bzero(cid, sizeof(cidglyphs));
-
- /* heuristic for "maximum" size of pool we'll need: */
- size = 200000 + 600 *
- (int)hypot(vals->pixel_matrix[2], vals->pixel_matrix[3])
- * sizeof(short);
- if (size < 0 || NULL == (pool = (long *) xalloc(size))) {
- xfree(cid);
- DestroyFontRec(pFont);
- return AllocError;
- }
-
- addmemory(pool, size);
-
- /* load font if not already loaded */
- if (!CIDfontfcnA(cidfontname, cmapname, &rc)) {
- FontP = NULL;
- delmemory();
- xfree(pool);
- xfree(cid);
- DestroyFontRec(pFont);
- return Type1ReturnCodeToXReturnCode(rc);
- }
-
- FontP = NULL;
-
- S = (struct XYspace *) t1_Transform((struct xobject *)IDENTITY,
- t1, t2, t3, t4);
-
- S = (struct XYspace *) Permanent(t1_Transform((struct xobject *)S,
- vals->pixel_matrix[0],
- -vals->pixel_matrix[1],
- vals->pixel_matrix[2],
- -vals->pixel_matrix[3]));
-
- /* multiplier for computation of raw values */
- sxmult = hypot(vals->pixel_matrix[0], vals->pixel_matrix[1]);
- if (sxmult > EPS) sxmult = 1000.0 / sxmult;
-
- pFont->info.firstRow = CMapP->firstRow;
- pFont->info.firstCol = CMapP->firstCol;
- pFont->info.lastRow = CMapP->lastRow;
- pFont->info.lastCol = CMapP->lastCol;
-
- nchars = (pFont->info.lastRow - pFont->info.firstRow + 1) *
- (pFont->info.lastCol - pFont->info.firstCol + 1);
-
- delmemory();
- xfree(pool);
-
- if (pFont->info.firstCol > pFont->info.lastCol)
- {
- xfree(cid);
- DestroyFontRec(pFont);
- return BadFontName;
- }
-
- cid->glyphs = (CharInfoRec **)xalloc(nchars*sizeof(CharInfoRec *));
- if (cid->glyphs == NULL) {
- xfree(cid);
- DestroyFontRec(pFont);
- return AllocError;
- }
- bzero(cid->glyphs, nchars*sizeof(CharInfoRec *));
-
- pFont->info.defaultCh = 0;
- pFont->format = format;
-
- pFont->bit = bit;
- pFont->byte = byte;
- pFont->glyph = glyph;
- pFont->scan = scan;
-
- pFont->get_metrics = CIDGetMetrics;
- pFont->get_glyphs = CIDGetGlyphs;
- pFont->unload_font = CIDCloseFont;
- pFont->unload_glyphs = NULL;
- pFont->refcnt = 0;
-
- len = strlen(cidfontname);
- cid->CIDFontName = (char *)xalloc(len + 1);
- if (cid->CIDFontName == NULL) {
- xfree(cid->glyphs);
- xfree(cid);
- DestroyFontRec(pFont);
- return AllocError;
- }
- strcpy(cid->CIDFontName, cidfontname);
-
- len = strlen(cmapname);
- cid->CMapName = (char *)xalloc(len + 1);
- if (cid->CMapName == NULL) {
- xfree(cid->CIDFontName);
- xfree(cid->glyphs);
- xfree(cid);
- DestroyFontRec(pFont);
- return AllocError;
- }
- strcpy(cid->CMapName, cmapname);
-
- cid->pixel_matrix[0] = vals->pixel_matrix[0];
- cid->pixel_matrix[1] = vals->pixel_matrix[1];
- cid->pixel_matrix[2] = vals->pixel_matrix[2];
- cid->pixel_matrix[3] = vals->pixel_matrix[3];
-
- pFont->fontPrivate = (unsigned char *)cid;
-
- pFont->info.fontAscent =
- (CIDFontP->CIDfontInfoP[CIDFONTBBOX].value.data.arrayP[3].data.integer *
- vals->pixel_matrix[3] +
- (CIDFontP->CIDfontInfoP[CIDFONTBBOX].value.data.arrayP[3].data.integer >
- 0 ? 500 : -500)) / 1000;
-
- pFont->info.fontDescent =
- -(int)((double)CIDFontP->CIDfontInfoP[CIDFONTBBOX].value.data.arrayP[1].data.integer
- * vals->pixel_matrix[3] +
- (CIDFontP->CIDfontInfoP[CIDFONTBBOX].value.data.arrayP[1].data.integer >
- 0 ? 500 : -500)) / 1000;
-
- /* Adobe does not put isFixedPitch entries in CID-keyed fonts. */
- /* CID-keyed are not constant-width fonts. */
- pFont->info.constantWidth = 0;
-
-#ifndef CID_ALL_CHARS
- sAscent = CIDFontP->CIDfontInfoP[CIDFONTBBOX].value.data.arrayP[3].data.integer;
- sDescent = -CIDFontP->CIDfontInfoP[CIDFONTBBOX].value.data.arrayP[1].data.integer;
-#endif
-
- if (strncmp(entry->name.name, "-bogus", 6)) {
-#ifdef CID_ALL_CHARS
- ComputeBoundsAllChars(pFont, cfmfilename, sxmult);
-#else
-#ifdef HAVE_CFM
- CIDFillFontInfo(pFont, vals, cidfontname, entry->name.name, cmapname,
- cfmfilename, sAscent, sDescent, sxmult);
-#else
- CIDFillFontInfo(pFont, vals, cidfontname, entry->name.name, cmapname,
- sAscent, sDescent, sxmult);
-#endif /* HAVE_CFM */
-#endif /* CID_ALL_CHARS */
- }
-
- *ppFont = pFont;
-
- return Successful;
-}
-#endif
-
-/*ARGSUSED*/
-int
-Type1OpenScalable (FontPathElementPtr fpe,
- FontPtr *ppFont,
- int flags,
- FontEntryPtr entry,
- char *fileName,
- FontScalablePtr vals,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- FontPtr non_cachable_font) /* We don't do licensing */
-{
- FontPtr pFont;
- int bit,
- byte,
- glyph,
- scan,
- image;
- int pad,wordsize; /* scan & image in bits */
- long *pool; /* memory pool for ximager objects */
- int size; /* for memory size calculations */
- struct XYspace *S; /* coordinate space for character */
- struct region *area;
- CharInfoRec *glyphs;
- int len, rc, count = 0, i = 0;
- struct type1font *type1;
- char *p;
- FontMapPtr mapping = NULL;
- int no_mapping;
- psobj *fontmatrix;
- long x0, total_width = 0, total_raw_width = 0;
- double x1, y1, t1 = .001, t2 = 0.0, t3 = 0.0, t4 = .001;
- double sxmult;
-
- /* Reject ridiculously small font sizes that will blow up the math */
- if (hypot(vals->pixel_matrix[0], vals->pixel_matrix[1]) < 1.0 ||
- hypot(vals->pixel_matrix[2], vals->pixel_matrix[3]) < 1.0)
- return BadFontName;
-
- /* set up default values */
- FontDefaultFormat(&bit, &byte, &glyph, &scan);
- /* get any changes made from above */
- rc = CheckFSFormat(format, fmask, &bit, &byte, &scan, &glyph, &image);
- if (rc != Successful)
- return rc;
-
- pad = glyph * 8;
- wordsize = scan * 8;
-
-#define PAD(bits, pad) (((bits)+(pad)-1)&-(pad))
-
- pFont = CreateFontRec();
- if (pFont == NULL)
- return AllocError;
-
- type1 = (struct type1font *)xalloc(sizeof(struct type1font));
- if (type1 == NULL) {
- DestroyFontRec(pFont);
- return AllocError;
- }
- bzero(type1, sizeof(struct type1font));
-
- /* heuristic for "maximum" size of pool we'll need: */
-#if XFONT_CID
- size = 400000 + 600 *
-#else
- size = 200000 + 600 *
-#endif
- (int)hypot(vals->pixel_matrix[2], vals->pixel_matrix[3])
- * sizeof(short);
- if (size < 0 || NULL == (pool = (long *) xalloc(size))) {
- xfree(type1);
- DestroyFontRec(pFont);
- return AllocError;
- }
-
- addmemory(pool, size);
-
-
- glyphs = type1->glyphs;
-
- /* load font if not already loaded */
- if (!fontfcnA(fileName, &rc)) {
- delmemory();
- xfree(type1);
- DestroyFontRec(pFont);
- xfree(pool);
- return Type1ReturnCodeToXReturnCode(rc);
- }
-
- fontmatrix = &FontP->fontInfoP[FONTMATRIX].value;
- if (objPIsArray(fontmatrix) && fontmatrix->len == 6)
- {
-#define assign(n,d,f) if (objPIsInteger(fontmatrix->data.arrayP + n)) \
- d = fontmatrix->data.arrayP[n].data.integer; \
- else if (objPIsReal(fontmatrix->data.arrayP + n)) \
- d = fontmatrix->data.arrayP[n].data.real; \
- else d = f;
-
- assign(0, t1, .001);
- assign(1, t2, 0.0);
- assign(2, t3, 0.0);
- assign(3, t4, .001);
- }
-
- S = (struct XYspace *) t1_Transform((struct xobject *)IDENTITY,
- t1, t2, t3, t4);
-
- S = (struct XYspace *) Permanent(t1_Transform((struct xobject *)S,
- vals->pixel_matrix[0],
- -vals->pixel_matrix[1],
- vals->pixel_matrix[2],
- -vals->pixel_matrix[3]));
-
-
- /* multiplier for computation of raw values */
- sxmult = hypot(vals->pixel_matrix[0], vals->pixel_matrix[1]);
- if (sxmult > EPS) sxmult = 1000.0 / sxmult;
-
- no_mapping=0;
- p = FontEncFromXLFD(entry->name.name, entry->name.length);
-
- if(p==0) { /* XLFD does not specify an encoding */
- mapping=0;
- no_mapping=2; /* ISO 8859-1 */
- }
-
- if(!strcmp(p, "adobe-fontspecific")) {
- mapping=0;
- no_mapping=1; /* font's native encoding vector */
- }
-
- pFont->info.firstCol = 255;
- pFont->info.lastCol = 0;
-
- if(!no_mapping) {
- mapping = FontEncMapFind(p,
- FONT_ENCODING_POSTSCRIPT, -1, -1,
- fileName);
- if(!mapping)
- mapping = FontEncMapFind(p,
- FONT_ENCODING_UNICODE, -1, -1,
- fileName);
- if(!mapping)
- goto NoEncoding;
- else
- no_mapping=0;
- }
-
- for (i=0; i < 256; i++) {
- long h,w;
- long paddedW;
- int j;
- char *codename;
-
- if(no_mapping == 1) {
- codename = FontP->fontInfoP[ENCODING].
- value.data.arrayP[i].data.valueP;
- len = FontP->fontInfoP[ENCODING].
- value.data.arrayP[i].len;
- } else if(no_mapping) {
- codename = unicodetoPSname(i);
- len = codename ? strlen(codename) : 0;
- } else {
- if(mapping->type == FONT_ENCODING_UNICODE) {
- codename = unicodetoPSname(FontEncRecode(i, mapping));
- } else
- codename = FontEncName(i, mapping);
- len=codename?strlen(codename):0;
- }
-
- /* Avoid multiply rasterising the undefined glyph */
- if(len==7 && !strncmp(codename, ".notdef", 7)) {
- len=0;
- codename=0;
- }
-
- /* But do rasterise it at least once */
- if(len==0) {
- if(i==0) {
- codename=".notdef";
- len=7;
- } else
- continue;
- }
-
- /* See if this character is in the list of ranges specified
- in the XLFD name */
- if(i!=0) {
- for (j = 0; j < vals->nranges; j++)
- if (i >= minchar(vals->ranges[j]) &&
- i <= maxchar(vals->ranges[j]))
- break;
-
- /* If not, don't realize it. */
- if (vals->nranges && j == vals->nranges)
- continue;
- }
-
- rc = 0;
- area = (struct region *)fontfcnB(S, (unsigned char *)codename,
- &len, &rc);
- if (rc < 0) {
- rc = Type1ReturnCodeToXReturnCode(rc);
- break;
- }
- else if (rc > 0)
- continue;
-
- if (area == NULL)
- continue;
-
- if (pFont->info.firstCol > i)
- pFont->info.firstCol = i;
- if (pFont->info.lastCol < i)
- pFont->info.lastCol = i;
-
- h = area->ymax - area->ymin;
- w = area->xmax - area->xmin;
- paddedW = PAD(w, pad);
-
- if (h > 0 && w > 0) {
- size = h * paddedW / 8;
- glyphs[i].bits = (char *)xalloc(size);
- if (glyphs[i].bits == NULL) {
- rc = AllocError;
- break;
- }
- }
- else {
- size = 0;
- h = w = 0;
- area->xmin = area->xmax = 0;
- area->ymax = area->ymax = 0;
- }
-
- glyphs[i].metrics.leftSideBearing = area->xmin;
- x1 = (double)(x0 = area->ending.x - area->origin.x);
- y1 = (double)(area->ending.y - area->origin.y);
- glyphs[i].metrics.characterWidth =
- (x0 + (x0 > 0 ? FPHALF : -FPHALF)) / (1 << FRACTBITS);
- if (!glyphs[i].metrics.characterWidth && size == 0)
- {
- /* Zero size and zero extents: presumably caused by
- the choice of transformation. Let's create a
- small bitmap so we're not mistaken for an undefined
- character. */
- h = w = 1;
- size = paddedW = PAD(w, pad);
- glyphs[i].bits = (char *)xalloc(size);
- if (glyphs[i].bits == NULL) {
- rc = AllocError;
- break;
- }
- }
- glyphs[i].metrics.attributes =
- NEARESTPEL((long)(hypot(x1, y1) * sxmult));
- total_width += glyphs[i].metrics.attributes;
- total_raw_width += abs((int)(INT16)glyphs[i].metrics.attributes);
- count++;
- glyphs[i].metrics.rightSideBearing = w + area->xmin;
- glyphs[i].metrics.descent = area->ymax - NEARESTPEL(area->origin.y);
- glyphs[i].metrics.ascent = h - glyphs[i].metrics.descent;
-
-
- bzero(glyphs[i].bits, size);
- if (h > 0 && w > 0) {
- fill(glyphs[i].bits, h, paddedW, area, byte, bit, wordsize );
- }
-
- Destroy(area);
- }
- NoEncoding:
-
- delmemory();
- xfree(pool);
-
- if (pFont->info.firstCol > pFont->info.lastCol)
- {
- xfree(type1);
- DestroyFontRec(pFont);
- return BadFontName;
- }
-
- if (i != 256) {
- for (i--; i >= 0; i--)
- if (glyphs[i].bits != NULL)
- xfree(glyphs[i].bits);
- xfree(type1);
- DestroyFontRec(pFont);
- return rc;
- }
- type1->pDefault = NULL;
-
- pFont->format = format;
-
- pFont->bit = bit;
- pFont->byte = byte;
- pFont->glyph = glyph;
- pFont->scan = scan;
-
- pFont->info.firstRow = 0;
- pFont->info.lastRow = 0;
-
- pFont->get_metrics = Type1GetMetrics;
- pFont->get_glyphs = Type1GetGlyphs;
- pFont->unload_font = Type1CloseFont;
- pFont->unload_glyphs = NULL;
- pFont->refcnt = 0;
-
- pFont->fontPrivate = (unsigned char *) type1;
-
- if (count)
- {
- total_raw_width = (total_raw_width * 10 + count / 2) / count;
- if (total_width < 0)
- {
- /* Predominant direction is R->L */
- total_raw_width = -total_raw_width;
- }
- vals->width = (int)((double)total_raw_width *
- vals->pixel_matrix[0] / 1000.0 +
- (vals->pixel_matrix[0] > 0 ? .5 : -.5));
- }
-
- T1FillFontInfo(pFont, vals, fileName, entry->name.name, total_raw_width);
-
- *ppFont = pFont;
- return Successful;
-}
-
-#if XFONT_CID
-unsigned int
-getCID(FontPtr pFont, unsigned int charcode)
-{
- unsigned int cidcode = 0;
- Bool charvalid = FALSE;
- cidglyphs *cid;
- int i, j;
- unsigned int char_row, char_col, rangelo_row, rangelo_col, k;
- unsigned int rangehi_row, rangehi_col;
- spacerange *spacerangeP;
- cidrange *notdefrangeP, *cidrangeP;
-
- cid = (cidglyphs *)pFont->fontPrivate;
-
- if (cid == NULL)
- return cidcode;
-
- char_row = (charcode >> 8) & 0xff;
- char_col = charcode & 0xff;
-
- spacerangeP = CIDFontP->spacerangeP;
- for (i = 0; i < CIDFontP->spacerangecnt; i++) {
- for (j = 0; j < spacerangeP->rangecnt; j++) {
- rangelo_row =
- (spacerangeP->spacecode[j].srcCodeLo >> 8) & 0xff;
- rangelo_col = spacerangeP->spacecode[j].srcCodeLo & 0xff;
- rangehi_row =
- (spacerangeP->spacecode[j].srcCodeHi >> 8) & 0xff;
- rangehi_col = spacerangeP->spacecode[j].srcCodeHi & 0xff;
- if (char_row >= rangelo_row && char_row <= rangehi_row &&
- char_col >= rangelo_col && char_col <= rangehi_col) {
- charvalid = TRUE;
- break;
- }
- }
- if (charvalid) break;
- spacerangeP = spacerangeP->next;
- }
-
- if (charvalid) {
- charvalid = FALSE;
- cidrangeP = CIDFontP->cidrangeP;
- for (i = 0; i < CIDFontP->cidrangecnt; i++) {
- for (j = 0; j < cidrangeP->rangecnt; j++) {
- rangelo_row =
- (cidrangeP->range[j].srcCodeLo >> 8) & 0xff;
- rangelo_col = cidrangeP->range[j].srcCodeLo & 0xff;
- rangehi_row =
- (cidrangeP->range[j].srcCodeHi >> 8) & 0xff;
- rangehi_col = cidrangeP->range[j].srcCodeHi & 0xff;
- if (char_row >= rangelo_row && char_row <= rangehi_row &&
- char_col >= rangelo_col && char_col <= rangehi_col) {
- charvalid = TRUE;
- for (k = cidrangeP->range[j].srcCodeLo;
- k <= cidrangeP->range[j].srcCodeHi; k++) {
- if (k == charcode)
- cidcode = cidrangeP->range[j].dstCIDLo + k -
- cidrangeP->range[j].srcCodeLo;
- }
- break;
- }
- }
- if (charvalid) break;
- cidrangeP = cidrangeP->next;
- }
- }
-
- if (charvalid) {
- charvalid = FALSE;
- notdefrangeP = CIDFontP->notdefrangeP;
- for (i = 0; i < CIDFontP->notdefrangecnt; i++) {
- for (j = 0; j < notdefrangeP->rangecnt; j++) {
- rangelo_row =
- (notdefrangeP->range[j].srcCodeLo >> 8) & 0xff;
- rangelo_col = notdefrangeP->range[j].srcCodeLo & 0xff;
- rangehi_row =
- (notdefrangeP->range[j].srcCodeHi >> 8) & 0xff;
- rangehi_col = notdefrangeP->range[j].srcCodeHi & 0xff;
- if (char_row >= rangelo_row && char_row <= rangehi_row &&
- char_col >= rangelo_col && char_col <= rangehi_col) {
- charvalid = TRUE;
- for (k = notdefrangeP->range[j].srcCodeLo;
- k <= notdefrangeP->range[j].srcCodeHi; k++) {
- if (k == charcode)
- /* the whole range is mapped to a single CID code */
- cidcode = notdefrangeP->range[j].dstCIDLo;
- }
- break;
- }
- }
- if (charvalid) break;
- notdefrangeP = notdefrangeP->next;
- }
- }
-
- /* If you specify a CMap that has more CIDs than a specified CIDFont, */
- /* the program could go beyond the number of entries in CIDMap. Make */
- /* sure that that does not happen. */
- if (cidcode < CIDFontP->CIDfontInfoP[CIDCOUNT].value.data.integer)
- return cidcode;
- else
- return 0;
-}
-
-static CharInfoPtr
-CIDGetGlyph(FontPtr pFont, unsigned int charcode, CharInfoPtr pci)
-{
- int rc;
- CharInfoPtr cp = NULL;
- unsigned int cidcode;
-
- /* character code -> CID */
- cidcode = getCID(pFont, charcode);
-
- cp = CIDGetGlyphInfo(pFont, cidcode, pci, &rc);
-
- if (rc != Successful && cidcode) {
- cidcode = 0;
- cp = CIDGetGlyphInfo(pFont, cidcode, pci, &rc);
- }
-
- return cp;
-}
-
-int
-CIDGetGlyphs(FontPtr pFont,
- unsigned long count,
- unsigned char *chars,
- FontEncoding charEncoding,
- unsigned long *glyphCount, /* RETURN */
- CharInfoPtr *glyphs) /* RETURN */
-{
- unsigned int code, char_row, char_col;
- CharInfoPtr *glyphsBase;
- register unsigned int c;
- CharInfoPtr pci;
- CharInfoPtr pDefault;
- cidglyphs *cid;
- register int firstCol;
- int rc = 0;
- int cid_valid = 0;
-
- cid = (cidglyphs *)pFont->fontPrivate;
-
- FontP = NULL;
-
- firstCol = pFont->info.firstCol;
- pDefault = cid->pDefault;
- glyphsBase = glyphs;
-
- switch (charEncoding) {
-
-#define EXIST(pci) \
- ((pci)->metrics.attributes || \
- (pci)->metrics.ascent != -(pci)->metrics.descent || \
- (pci)->metrics.leftSideBearing != (pci)->metrics.rightSideBearing)
-
- case Linear8Bit:
- case TwoD8Bit:
- if (pFont->info.firstRow > 0)
- break;
- while (count--) {
- c = (*chars++);
- if (c >= firstCol && c <= pFont->info.lastCol) {
- code = c - firstCol;
- if (!(pci = (CharInfoRec *)cid->glyphs[code]) ||
- ((long)pci->bits == CID_BITMAP_UNDEFINED)) {
- /* load font if not already loaded */
- if(!cid_valid) {
- if(!CIDfontfcnA(cid->CIDFontName, cid->CMapName, &rc)) { FontP = NULL;
- return Type1ReturnCodeToXReturnCode(rc);
- }
- cid_valid = 1;
- }
- pci = CIDGetGlyph(pFont, c, pci);
- }
- if (pci && EXIST(pci)) {
- *glyphs++ = pci;
- cid->glyphs[code] = pci;
- } else if (pDefault) {
- *glyphs++ = pDefault;
- cid->glyphs[code] = pDefault;
- }
- } else if (pDefault)
- *glyphs++ = pDefault;
- }
- break;
- case Linear16Bit:
- while (count--) {
- char_row = *chars++;
- char_col = *chars++;
- c = char_row << 8;
- c = (c | char_col);
- if (pFont->info.firstRow <= char_row && char_row <=
- pFont->info.lastRow && pFont->info.firstCol <= char_col &&
- char_col <= pFont->info.lastCol) {
- code = pFont->info.lastCol - pFont->info.firstCol + 1;
- char_row = char_row - pFont->info.firstRow;
- char_col = char_col - pFont->info.firstCol;
- code = char_row * code + char_col;
- if (!(pci = (CharInfoRec *)cid->glyphs[code]) ||
- ((long)pci->bits == CID_BITMAP_UNDEFINED)) {
- /* load font if not already loaded */
- if(!cid_valid) {
- if(!CIDfontfcnA(cid->CIDFontName, cid->CMapName, &rc)) { FontP = NULL;
- return Type1ReturnCodeToXReturnCode(rc);
- }
- cid_valid = 1;
- }
- pci = CIDGetGlyph(pFont, c, pci);
- }
- if (pci && EXIST(pci)) {
- *glyphs++ = pci;
- cid->glyphs[code] = pci;
- } else if (pDefault) {
- *glyphs++ = pDefault;
- cid->glyphs[code] = pDefault;
- }
- } else if (pDefault)
- *glyphs++ = pDefault;
- }
- break;
-
- case TwoD16Bit:
- while (count--) {
- char_row = (*chars++);
- char_col = (*chars++);
- c = char_row << 8;
- c = (c | char_col);
- if (pFont->info.firstRow <= char_row && char_row <=
- pFont->info.lastRow && pFont->info.firstCol <= char_col &&
- char_col <= pFont->info.lastCol) {
- code = pFont->info.lastCol - pFont->info.firstCol + 1;
- char_row = char_row - pFont->info.firstRow;
- char_col = char_col - pFont->info.firstCol;
- code = char_row * code + char_col;
- if (!(pci = (CharInfoRec *)cid->glyphs[code]) ||
- ((long)pci->bits == CID_BITMAP_UNDEFINED)) {
- /* load font if not already loaded */
- if(!cid_valid) {
- if(!CIDfontfcnA(cid->CIDFontName, cid->CMapName, &rc)) { FontP = NULL;
- return Type1ReturnCodeToXReturnCode(rc);
- }
- cid_valid = 1;
- }
- pci = CIDGetGlyph(pFont, c, pci);
- }
- if (pci && EXIST(pci)) {
- *glyphs++ = pci;
- cid->glyphs[code] = pci;
- } else if (pDefault) {
- *glyphs++ = pDefault;
- cid->glyphs[code] = pDefault;
- }
- } else if (pDefault)
- *glyphs++ = pDefault;
- }
- break;
- }
- *glyphCount = glyphs - glyphsBase;
- return Successful;
-
-#undef EXIST
-}
-#endif
-
-static int
-Type1GetGlyphs(FontPtr pFont,
- unsigned long count,
- unsigned char *chars,
- FontEncoding charEncoding,
- unsigned long *glyphCount, /* RETURN */
- CharInfoPtr *glyphs) /* RETURN */
-{
- unsigned int firstRow;
- unsigned int numRows;
- CharInfoPtr *glyphsBase;
- register unsigned int c;
- register CharInfoPtr pci;
- unsigned int r;
- CharInfoPtr pDefault;
- register struct type1font *type1Font;
- register int firstCol;
-
- type1Font = (struct type1font *) pFont->fontPrivate;
- firstCol = pFont->info.firstCol;
- pDefault = type1Font->pDefault;
- glyphsBase = glyphs;
-
- switch (charEncoding) {
-
-#define EXIST(pci) \
- ((pci)->metrics.attributes || \
- (pci)->metrics.ascent != -(pci)->metrics.descent || \
- (pci)->metrics.leftSideBearing != (pci)->metrics.rightSideBearing)
-
- case Linear8Bit:
- case TwoD8Bit:
- if (pFont->info.firstRow > 0)
- break;
- while (count--) {
- c = (*chars++);
- if (c >= firstCol &&
- (pci = &type1Font->glyphs[c]) &&
- EXIST(pci))
- *glyphs++ = pci;
- else if (pDefault)
- *glyphs++ = pDefault;
- }
- break;
- case Linear16Bit:
- while (count--) {
- c = *chars++ << 8;
- c = (c | *chars++);
- if (c < 256 && c >= firstCol &&
- (pci = &type1Font->glyphs[c]) &&
- EXIST(pci))
- *glyphs++ = pci;
- else if (pDefault)
- *glyphs++ = pDefault;
- }
- break;
-
- case TwoD16Bit:
- firstRow = pFont->info.firstRow;
- numRows = pFont->info.lastRow - firstRow + 1;
- while (count--) {
- r = (*chars++) - firstRow;
- c = (*chars++);
- if (r < numRows && c < 256 && c >= firstCol &&
- (pci = &type1Font->glyphs[(r << 8) + c]) &&
- EXIST(pci))
- *glyphs++ = pci;
- else if (pDefault)
- *glyphs++ = pDefault;
- }
- break;
- }
- *glyphCount = glyphs - glyphsBase;
- return Successful;
-
-#undef EXIST
-}
-
-#if XFONT_CID
-static CharInfoRec nonExistantChar;
-
-int
-CIDGetMetrics(FontPtr pFont,
- unsigned long count,
- unsigned char *chars,
- FontEncoding charEncoding,
- unsigned long *glyphCount, /* RETURN */
- xCharInfo **glyphs) /* RETURN */
-{
- int ret;
- cidglyphs *cid;
- CharInfoPtr oldDefault;
- char cidafmname[CID_PATH_MAX];
- char CIDFontName[CID_NAME_MAX];
- char *ptr;
-
- cid = (cidglyphs *)pFont->fontPrivate;
-
- strcpy(cidafmname, cid->CIDFontName);
- if (!(ptr = strrchr(cidafmname, '/')))
- return BadFontName;
-
- *ptr = '\0';
-
- strcpy(CIDFontName, ptr + 1);
-
- if (!(ptr = strrchr(cidafmname, '/')))
- return BadFontName;
-
- *ptr = '\0';
-
- strcat(cidafmname, "/AFM/");
- strcat(cidafmname, CIDFontName);
-
- strcat(cidafmname, ".afm");
-
- oldDefault = cid->pDefault;
- cid->pDefault = &nonExistantChar;
-
- ret = CIDGetAFM(pFont, count, chars, charEncoding, glyphCount, (CharInfoPtr
-*)glyphs, cidafmname);
- if (ret != Successful)
- ret = CIDGetGlyphs(pFont, count, chars, charEncoding, glyphCount,
- (CharInfoPtr *)glyphs);
-
- *ptr = 0;
- cid->pDefault = oldDefault;
- return ret;
-}
-#endif
-
-static int
-Type1GetMetrics(FontPtr pFont,
- unsigned long count,
- unsigned char *chars,
- FontEncoding charEncoding,
- unsigned long *glyphCount, /* RETURN */
- xCharInfo **glyphs) /* RETURN */
-{
- static CharInfoRec nonExistantChar;
-
- int ret;
- struct type1font *type1Font;
- CharInfoPtr oldDefault;
-
- type1Font = (struct type1font *) pFont->fontPrivate;
- oldDefault = type1Font->pDefault;
- type1Font->pDefault = &nonExistantChar;
- ret = Type1GetGlyphs(pFont, count, chars, charEncoding, glyphCount, (CharInfoPtr *) glyphs);
- type1Font->pDefault = oldDefault;
- return ret;
-}
-
-#if XFONT_CID
-void
-CIDCloseFont(FontPtr pFont)
-{
- register int i;
- cidglyphs *cid;
- int nchars;
-
- if (pFont) {
-
- cid = (cidglyphs *)pFont->fontPrivate;
-
- if (cid) {
-
- if (cid->CIDFontName && !strcmp(cid->CIDFontName, CurCIDFontName)
- && cid->CMapName && !strcmp(cid->CMapName, CurCMapName)){
- strcpy(CurCIDFontName, ""); /* initialize to none */
- strcpy(CurCMapName, ""); /* initialize to none */
- }
-
- if (cid->CIDFontName)
- xfree(cid->CIDFontName);
-
- if (cid->CMapName)
- xfree(cid->CMapName);
-
- nchars = (pFont->info.lastRow - pFont->info.firstRow + 1) *
- (pFont->info.lastCol - pFont->info.firstCol + 1);
-
- for (i = 0; i < nchars; i++) {
- if (cid->glyphs[i] && (cid->glyphs[i] != &nonExistantChar)) {
- if (cid->glyphs[i]->bits)
- xfree(cid->glyphs[i]->bits);
- xfree(cid->glyphs[i]);
- }
- }
-
- if (cid->glyphs)
- xfree(cid->glyphs);
-
- if (cid->AFMinfo)
- xfree(cid->AFMinfo);
-#ifdef USE_MMAP
- if (cid->CIDdata)
- munmap(cid->CIDdata, cid->CIDsize);
-#endif
- xfree(cid);
- }
-
- if (pFont->info.props)
- xfree(pFont->info.props);
-
- if (pFont->info.isStringProp)
- xfree(pFont->info.isStringProp);
-
- DestroyFontRec(pFont);
- }
-}
-#endif
-
-void
-Type1CloseFont(FontPtr pFont)
-{
- register int i;
- struct type1font *type1;
-
- type1 = (struct type1font *) pFont->fontPrivate;
- for (i=0; i < 256; i++)
- if (type1->glyphs[i].bits != NULL)
- xfree(type1->glyphs[i].bits);
- xfree(type1);
-
- if (pFont->info.props)
- xfree(pFont->info.props);
-
- if (pFont->info.isStringProp)
- xfree(pFont->info.isStringProp);
-
- DestroyFontRec(pFont);
-}
-
-static void
-fill(char *dest, /* destination bitmap */
- int h, int w, /* dimensions of 'dest', w padded */
- struct region *area, /* region to write to 'dest' */
- int byte, int bit, /* flags; LSBFirst or MSBFirst */
- int wordsize) /* number of bits per word for LSB/MSB purposes */
-{
- register struct edgelist *edge; /* for looping through edges */
- register char *p; /* current scan line in 'dest' */
- register int y; /* for looping through scans */
- register int wbytes = w / 8; /* number of bytes in width */
- register pel *leftP,*rightP; /* pointers to X values, left and right */
- int xmin = area->xmin; /* upper left X */
- int ymin = area->ymin; /* upper left Y */
-
- for (edge = area->anchor; VALIDEDGE(edge); edge = edge->link->link) {
-
- p = dest + (edge->ymin - ymin) * wbytes;
- leftP = edge->xvalues;
- rightP = edge->link->xvalues;
-
- for (y = edge->ymin; y < edge->ymax; y++) {
- fillrun(p, *leftP++ - xmin, *rightP++ - xmin, bit);
- p += wbytes;
- }
- }
-/*
-Now, as an afterthought, we'll go reorganize if odd byte order requires
-it:
-*/
- if (byte == LSBFirst && wordsize != 8) {
- register int i;
-
- switch (wordsize) {
- case 16:
- {
- register unsigned short data,*p;
-
- p = (unsigned short *) dest;
-
- for (i = h * w /16; --i >= 0;) {
- data = *p;
- *p++ = (data << 8) + (data >> 8);
- }
- break;
- }
- case 64:
- case 32:
- {
- register unsigned long data,*p;
-
- p = (unsigned long *) dest;
-
- for (i = h * w / 32; --i >= 0;) {
- data = *p;
- *p++ = (data << 24) + (data >> 24)
- + (0xFF00 & (data >> 8))
- + (0xFF0000 & (data << 8));
- }
- if (wordsize == 64) {
-
- p = (unsigned long *) dest;
-
- for (i = h * w / 64; --i >= 0;) {
- data = *p++;
- p[-1] = p[0];
- *p++ = data;
- }
- }
- break;
- }
- default:
- Abort("xiFill: unknown format");
- }
- }
-
-}
-
-#define ALLONES 0xFF
-
-static void
-fillrun(char *p, /* address of this scan line */
- pel x0, pel x1, /* left and right X */
- int bit) /* format: LSBFirst or MSBFirst */
-{
- register int startmask,endmask; /* bits to set in first and last char*/
- register int middle; /* number of chars between start and end + 1 */
-
- if (x1 <= x0)
- return;
- middle = x1/8 - x0/8;
- p += x0/8;
- x0 &= 7; x1 &= 7;
- if (bit == LSBFirst) {
- startmask = ALLONES << x0;
- endmask = ~(ALLONES << x1);
- }
- else {
- startmask = ALLONES >> x0;
- endmask = ~(ALLONES >> x1);
- }
- if (middle == 0)
- *p++ |= startmask & endmask;
- else {
- *p++ |= startmask;
- while (--middle > 0)
- *p++ = (char)ALLONES;
- *p |= endmask;
- }
-}
-
-#define CAPABILITIES (CAP_MATRIX | CAP_CHARSUBSETTING)
-
-#if XFONT_CID
-FontRendererRec CIDRendererInfo[] = {
- { ".cid", 4, NULL, CIDOpenScalable,
- NULL, CIDGetInfoScalable, 0, CAPABILITIES }
-};
-#endif
-
-#if XFONT_CID
-FontRendererRec Type1RendererInfo[] = {
-#else
-static FontRendererRec renderers[] = {
-#endif
- { ".pfa", 4, NULL, Type1OpenScalable,
- NULL, Type1GetInfoScalable, 0, CAPABILITIES },
- { ".pfb", 4, NULL, Type1OpenScalable,
- NULL, Type1GetInfoScalable, 0, CAPABILITIES }
-};
-
-#if XFONT_CID
-void
-CIDRegisterFontFileFunctions(void)
-{
- int i;
-
- Type1InitStdProps();
- for (i=0; i < sizeof(CIDRendererInfo) / sizeof(FontRendererRec); i++)
- FontFileRegisterRenderer(&CIDRendererInfo[i]);
-}
-#endif
-
-void
-Type1RegisterFontFileFunctions(void)
-{
- int i;
-
-#if XFONT_CID
- Type1InitStdProps();
- for (i=0; i < sizeof(Type1RendererInfo) / sizeof(FontRendererRec); i++)
- FontFilePriorityRegisterRenderer(&Type1RendererInfo[i], -10);
-#else
- T1InitStdProps();
- for (i=0; i < sizeof(renderers) / sizeof(FontRendererRec); i++)
- FontFilePriorityRegisterRenderer(&renderers[i], -10);
-#endif
-}
-
-int
-Type1ReturnCodeToXReturnCode(int rc)
-{
- switch(rc) {
- case SCAN_OK:
- return Successful;
- case SCAN_FILE_EOF:
- /* fall through to BadFontFormat */
- case SCAN_ERROR:
- return BadFontFormat;
- case SCAN_OUT_OF_MEMORY:
- return AllocError;
- case SCAN_FILE_OPEN_ERROR:
- return BadFontName;
- case SCAN_TRUE:
- case SCAN_FALSE:
- case SCAN_END:
- /* fall through */
- default:
- /* this should not happen */
-#if XFONT_CID
- ErrorF("Font return code cannot be converted to X return code: %d\n", rc);
-#else
- ErrorF("Type1 return code not convertable to X return code: %d\n", rc);
-#endif
- return rc;
- }
-}
-
-#if XFONT_CID
-CharInfoPtr
-CIDRenderGlyph(FontPtr pFont, psobj *charstringP, psobj *subarrayP,
- struct blues_struct *bluesP, CharInfoPtr pci, int *mode)
-{
- int bit,
- byte,
- glyph,
- scan,
- image;
- int pad,wordsize; /* scan & image in bits */
- long *pool; /* memory pool for ximager objects */
- int size; /* for memory size calculations */
- struct XYspace *S; /* coordinate space for character */
- struct region *area;
- CharInfoRec *glyphs;
- int len, rc;
- long x0;
- double x1, y1, t1 = .001, t2 = 0.0, t3 = 0.0, t4 = .001;
- double sxmult;
- long h,w;
- long paddedW;
- cidglyphs *cid;
- fsBitmapFormat format = 0;
- fsBitmapFormatMask fmask = 0;
-
- cid = (cidglyphs *)pFont->fontPrivate;
-
- /* set up default values */
- FontDefaultFormat(&bit, &byte, &glyph, &scan);
- /* get any changes made from above */
- rc = CheckFSFormat(format, fmask, &bit, &byte, &scan, &glyph, &image);
- if (rc != Successful) {
- *mode = rc;
- return(NULL);
- }
-
- pad = glyph * 8;
- wordsize = scan * 8;
-
-#define PAD(bits, pad) (((bits)+(pad)-1)&-(pad))
-
- /* heuristic for "maximum" size of pool we'll need: */
- size = 200000 + 600 *
- (int)hypot(cid->pixel_matrix[2], cid->pixel_matrix[3])
- * sizeof(short);
- if (size < 0 || NULL == (pool = (long *) xalloc(size))) {
- *mode = AllocError;
- return(NULL);
- }
-
- addmemory(pool, size);
-
- if (pci && (long)pci->bits == CID_BITMAP_UNDEFINED)
- glyphs = pci;
- else {
- if (!(glyphs = (CharInfoRec *)xalloc(sizeof(CharInfoRec)))) {
- delmemory();
- xfree(pool);
- *mode = AllocError;
- return(NULL);
- }
- bzero(glyphs, sizeof(CharInfoRec));
- }
-
- S = (struct XYspace *) t1_Transform((struct xobject *)IDENTITY,
- t1, t2, t3, t4);
-
- S = (struct XYspace *) Permanent(t1_Transform((struct xobject *)S,
- cid->pixel_matrix[0],
- -cid->pixel_matrix[1],
- cid->pixel_matrix[2],
- -cid->pixel_matrix[3]));
-
- /* multiplier for computation of raw values */
- sxmult = hypot(cid->pixel_matrix[0], cid->pixel_matrix[1]);
- if (sxmult > EPS) sxmult = 1000.0 / sxmult;
-
- rc = 0;
- area = (struct region *)CIDfontfcnC(S, charstringP, subarrayP, bluesP,
- &len, &rc);
- if (rc < 0 || area == NULL) {
- delmemory();
- xfree(pool);
- if (pci != glyphs) xfree(glyphs);
- *mode = Type1ReturnCodeToXReturnCode(rc);
- return(NULL);
- }
-
- h = area->ymax - area->ymin;
- w = area->xmax - area->xmin;
- paddedW = PAD(w, pad);
-
- if (h > 0 && w > 0) {
- size = h * paddedW / 8;
- glyphs[0].bits = (char *)xalloc(size);
- if (glyphs[0].bits == NULL) {
- Destroy(area);
- delmemory();
- xfree(pool);
- if (pci != glyphs) xfree(glyphs);
- *mode = AllocError;
- return(NULL);
- }
- bzero(glyphs[0].bits, size);
- }
- else {
- size = 0;
- h = w = 0;
- area->xmin = area->xmax = 0;
- area->ymax = area->ymax = 0;
- glyphs[0].bits = NULL;
- }
-
- glyphs[0].metrics.leftSideBearing = area->xmin;
- x1 = (double)(x0 = area->ending.x - area->origin.x);
- y1 = (double)(area->ending.y - area->origin.y);
- glyphs[0].metrics.characterWidth =
- (x0 + (x0 > 0 ? FPHALF : -FPHALF)) / (1 << FRACTBITS);
- if (!glyphs[0].metrics.characterWidth && size == 0)
- {
- /* Zero size and zero extents: presumably caused by
- the choice of transformation. Let's create a
- small bitmap so we're not mistaken for an undefined
- character. */
- h = w = 1;
- size = paddedW = PAD(w, pad);
- glyphs[0].bits = (char *)xalloc(size);
- if (glyphs[0].bits == NULL) {
- Destroy(area);
- delmemory();
- xfree(pool);
- if (pci != glyphs) xfree(glyphs);
- *mode = AllocError;
- return(NULL);
- }
- bzero(glyphs[0].bits, size);
- }
- glyphs[0].metrics.attributes =
- NEARESTPEL((long)(hypot(x1, y1) * sxmult));
- glyphs[0].metrics.rightSideBearing = w + area->xmin;
- glyphs[0].metrics.descent = area->ymax - NEARESTPEL(area->origin.y);
- glyphs[0].metrics.ascent = h - glyphs[0].metrics.descent;
-
- if (h > 0 && w > 0)
- fill(glyphs[0].bits, h, paddedW, area, byte, bit, wordsize);
- Destroy(area);
- delmemory();
- xfree(pool);
- *mode = Successful;
- return(glyphs);
-}
-#endif
diff --git a/nx-X11/lib/font/Type1/t1hdigit.h b/nx-X11/lib/font/Type1/t1hdigit.h
deleted file mode 100644
index e05f0de5d..000000000
--- a/nx-X11/lib/font/Type1/t1hdigit.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* $Xorg: t1hdigit.h,v 1.3 2000/08/17 19:46:33 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* Indicators for special characters in the p_hdigit.h tables */
-#define HERROR (0xfe)
-#define HWHITE_SPACE (0xfd)
-#define HRIGHT_ANGLE (0xfc)
-#define LAST_HDIGIT (0xf0)
-
-/* Declarations for the tables */
-#define HighHexP (HighHex+1)
-extern unsigned char HighHex[];
-#define LowHexP (LowHex+1)
-extern unsigned char LowHex[];
diff --git a/nx-X11/lib/font/Type1/t1imager.h b/nx-X11/lib/font/Type1/t1imager.h
deleted file mode 100644
index 9730f9a47..000000000
--- a/nx-X11/lib/font/Type1/t1imager.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* $Xorg: t1imager.h,v 1.3 2000/08/17 19:46:33 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/t1imager.h,v 1.4 2001/01/17 19:43:23 dawes Exp $ */
-
-
-#include "objects.h"
-#include "spaces.h"
-#include "paths.h"
-#include "regions.h"
-
-typedef struct xobject *xobject;
-typedef struct segment *path;
-typedef struct region *region;
-typedef struct XYspace *XYspace;
-
-
-#ifndef NULL
-#include <stddef.h>
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-
-#define WINDINGRULE -2
-#define EVENODDRULE -3
-
-#define CONTINUITY 0x80 /* can be added to above rules; e.g. WINDINGRULE+CONTINUITY */
-
-
-/*
-Generic null object definition:
-*/
-#define NULLOBJECT ((xobject)NULL)
-
-/*
-Null path definition:
-*/
-#define NULLPATH NULLOBJECT
-
-/*
-Full page and null region definition:
-*/
-#define INFINITY t1_Infinity
-#ifndef NOEXTERNS
-extern region *INFINITY;
-#endif
-#define NULLREGION NULLOBJECT
-
-#define FF_PARSE_ERROR 5
-#define FF_PATH 1
-
diff --git a/nx-X11/lib/font/Type1/t1info.c b/nx-X11/lib/font/Type1/t1info.c
deleted file mode 100644
index 322572ee2..000000000
--- a/nx-X11/lib/font/Type1/t1info.c
+++ /dev/null
@@ -1,1096 +0,0 @@
-/* $Xorg: t1info.c,v 1.4 2001/02/09 02:04:01 xorgcvs Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License, subject to the license given below, to use,
- * copy, modify, and distribute this software * and its
- * documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice appear
- * in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software
- * without specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Author: Carol H. Thompson IBM Almaden Research Center
- * Modeled on spinfo.c by Dave Lemke, Network Computing Devices, Inc
- * which contains the following copyright and permission notices:
- *
- * Copyright 1990, 1991 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of Network Computing Devices or Digital
- * not be used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission. Network Computing
- * Devices and Digital make no representations about the suitability of this
- * software for any purpose. It is provided "as is" without express or
- * implied warranty.
- *
- * NETWORK COMPUTING DEVICES AND DIGITAL DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES OR DIGITAL BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/t1info.c,v 1.18tsi Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/fontutil.h>
-#ifndef FONTMODULE
-#include <stdio.h>
-#ifndef BUILDCID
-#include <math.h>
-#endif
-#else
-#include "xf86_ansic.h"
-#endif
-#include <X11/fonts/FSproto.h>
-
-#if XFONT_CID
-#ifndef FONTMODULE
-#ifdef _XOPEN_SOURCE
-#include <math.h>
-#else
-#define _XOPEN_SOURCE
-#include <math.h>
-#undef _XOPEN_SOURCE
-#endif
-#endif
-#include "objects.h"
-#include "spaces.h"
-#include "range.h"
-#endif
-
-#if XFONT_CID
-#include "util.h"
-#include "fontfcn.h"
-
-#if defined(HAVE_CFM) || defined(CID_ALL_CHARS)
-#ifndef DEFAULT_CFM_DIR
-#define DEFAULT_CFM_DIR "./"
-#endif
-char cfmDefaultDir[] = DEFAULT_CFM_DIR;
-#define CFMMAGIC 0x91239123
-#endif
-#endif
-#include "t1intf.h"
-
-#define DECIPOINTSPERINCH 722.7
-#define DEFAULTRES 75
-#define DEFAULTPOINTSIZE 120
-
-enum scaleType {
- atom, truncate_atom, pixel_size, point_size, resolution_x,
- resolution_y, average_width
-};
-
-#if XFONT_CID
-extern cidfont *CIDFontP;
-static int stdpropsinit = 0;
-
-typedef struct cfm_rec {
- xCharInfo maxbounds;
- xCharInfo minbounds;
- xCharInfo ink_maxbounds;
- xCharInfo ink_minbounds;
- INT32 totalrw;
- INT16 maxo;
- INT16 alle;
-} cfmrec;
-#endif
-
-typedef struct _fontProp {
- char *name;
- long atom;
- enum scaleType type;
-} fontProp;
-
-static fontProp fontNamePropTable[] = { /* Example: */
- { "FOUNDRY", 0, atom }, /* adobe */
- { "FAMILY_NAME", 0, atom }, /* times roman */
- { "WEIGHT_NAME", 0, atom }, /* bold */
- { "SLANT", 0, atom }, /* i */
- { "SETWIDTH_NAME", 0, atom }, /* normal */
- { "ADD_STYLE_NAME", 0, atom }, /* */
- { "PIXEL_SIZE", 0, pixel_size }, /* 18 */
- { "POINT_SIZE", 0, point_size }, /* 180 */
- { "RESOLUTION_X", 0, resolution_x }, /* 72 */
- { "RESOLUTION_Y", 0, resolution_y }, /* 72 */
- { "SPACING", 0, atom }, /* p */
- { "AVERAGE_WIDTH", 0, average_width }, /* 0 */
- { "CHARSET_REGISTRY", 0, atom }, /* ISO8859 */
- { "CHARSET_ENCODING", 0, truncate_atom } /* 1 */
-};
-
-/* NOTICE: Following array is closely related to the sequence of defines
- following it. */
-static fontProp extraProps[] = {
- { "FONT", 0, },
- { "COPYRIGHT", 0, },
- { "RAW_PIXEL_SIZE", 0, },
- { "RAW_POINT_SIZE", 0, },
- { "RAW_ASCENT", 0, },
- { "RAW_DESCENT", 0, },
- { "RAW_AVERAGE_WIDTH", 0, },
- { "FACE_NAME", 0, },
- { "FONT_TYPE", 0, },
- { "RASTERIZER_NAME", 0, }
-};
-
-/* this is a bit kludgy */
-#define FONTPROP 0
-#define COPYRIGHTPROP 1
-#define RAWPIXELPROP 2
-#define RAWPOINTPROP 3
-#define RAWASCENTPROP 4
-#define RAWDESCENTPROP 5
-#define RAWWIDTHPROP 6
-#define FACE_NAMEPROP 7
-#define FONT_TYPEPROP 8
-#define RASTERIZER_NAMEPROP 9
-
-#define NNAMEPROPS (sizeof(fontNamePropTable) / sizeof(fontProp))
-#define NEXTRAPROPS (sizeof(extraProps) / sizeof(fontProp))
-
-#define NPROPS (NNAMEPROPS + NEXTRAPROPS)
-
-/*ARGSUSED*/
-static void
-FillHeader(FontInfoPtr pInfo, FontScalablePtr Vals)
-{
- /* OpenScalable in T1FUNCS sets the following:
- pInfo->firstCol,
- pInfo->firstRow,
- pInfo->lastCol, and
- pInfo->lastRow. */
- /* the following are ununsed
- pInfo->pad. */
-
- /* Items we should handle better someday +++ */
- pInfo->defaultCh = 0;
- pInfo->drawDirection = LeftToRight;
- if (Vals->point_matrix[0] == Vals->point_matrix[3])
- pInfo->anamorphic = 0;
- else
- pInfo->anamorphic = 1;
- pInfo->inkMetrics = 0; /* no ink metrics here */
- pInfo->cachable = 1; /* no licensing (yet) */
-}
-
-static void
-adjust_min_max(xCharInfo *minc, xCharInfo *maxc, xCharInfo *tmp)
-{
-#define MINMAX(field,ci) \
- if (minc->field > (ci)->field) \
- minc->field = (ci)->field; \
- if (maxc->field < (ci)->field) \
- maxc->field = (ci)->field;
-
- MINMAX(ascent, tmp);
- MINMAX(descent, tmp);
- MINMAX(leftSideBearing, tmp);
- MINMAX(rightSideBearing, tmp);
- MINMAX(characterWidth, tmp);
-
- /* Do MINMAX for attributes field. Since that field is CARD16,
- we'll cast to a signed integer */
- if ((INT16)minc->attributes > (INT16)tmp->attributes)
- minc->attributes = tmp->attributes;
- if ((INT16)maxc->attributes < (INT16)tmp->attributes)
- maxc->attributes = tmp->attributes;
-
-#undef MINMAX
-}
-
-static void
-ComputeBounds(FontInfoPtr pInfo, CharInfoPtr pChars, FontScalablePtr Vals)
-{
- int i;
- xCharInfo minchar, maxchar;
- int numchars = 0;
- int totchars;
- int overlap;
- int maxlap;
-
- minchar.ascent = minchar.descent =
- minchar.leftSideBearing = minchar.rightSideBearing =
- minchar.characterWidth = minchar.attributes = 32767;
- maxchar.ascent = maxchar.descent =
- maxchar.leftSideBearing = maxchar.rightSideBearing =
- maxchar.characterWidth = maxchar.attributes = -32767;
-
- maxlap = -32767;
- totchars = pInfo->lastCol - pInfo->firstCol + 1;
- pChars += pInfo->firstCol;
- pInfo->allExist = 1;
- for (i = 0; i < totchars; i++,pChars++) {
- xCharInfo *pmetrics = &pChars->metrics;
-
- if (pmetrics->attributes ||
- pmetrics->ascent != -pmetrics->descent ||
- pmetrics->leftSideBearing != pmetrics->rightSideBearing) {
- numchars++;
- adjust_min_max(&minchar, &maxchar, pmetrics);
- overlap = pmetrics->rightSideBearing - pmetrics->characterWidth;
- if (overlap > maxlap) maxlap = overlap;
- }
- else pInfo->allExist = 0;
- }
-
- /* If we're monospaced, round the average width field to the
- nearest pixel */
- if (minchar.characterWidth == maxchar.characterWidth)
- Vals->width = minchar.characterWidth * 10;
-
- pInfo->maxbounds = maxchar;
- pInfo->minbounds = minchar;
- pInfo->ink_maxbounds = maxchar;
- pInfo->ink_minbounds = minchar;
- pInfo->maxOverlap = maxlap + -(minchar.leftSideBearing);
-
- /* Set the pInfo flags */
- /* Properties set by FontComputeInfoAccelerators:
- pInfo->noOverlap;
- pInfo->terminalFont;
- pInfo->constantMetrics;
- pInfo->constantWidth;
- pInfo->inkInside;
-
- */
- FontComputeInfoAccelerators (pInfo);
-}
-
-#if XFONT_CID
-#ifdef CID_ALL_CHARS
-void
-ComputeBoundsAllChars(FontPtr pFont, char *cfmfilename, double sxmult)
-{
- FILE *cfm;
- CARD32 magic;
- int count = 0;
- int maxlap, overlap, i, j, k, ret;
- xCharInfo minchar, maxchar;
- cidrange *cidrangeP;
- unsigned char ccode[2];
- unsigned long ccount;
- xCharInfo *pmetrics;
- long total_raw_width = 0, total_width = 0;
- char cfmd[CID_PATH_MAX];
- cfmrec *cfmp;
- char *p;
-
- if (!(cfm = fopen(cfmfilename, "w"))) {
- fprintf(stderr,
- "Unable to open the file %s. You are probably not logged in as root.\n",
- cfmfilename);
- p = strrchr(cfmfilename, '/');
- if (p == NULL) exit(1);
- strcpy(cfmd, cfmDefaultDir);
- strcat(cfmd, p + 1);
- if (!(cfm = fopen(cfmd, "w"))) {
- fprintf(stderr,
- "Switching to current directory. Unable to open the file %s.\n",
- cfmd);
- exit(1);
- }
- }
-
- if ((cfmp = (cfmrec *)xalloc(sizeof(cfmrec))) == NULL) {
- fprintf(stderr, "Unable to allocate memory.");
- exit(1);
- }
- bzero(cfmp, sizeof(cfmrec));
-
- minchar.ascent = minchar.descent =
- minchar.leftSideBearing = minchar.rightSideBearing =
- minchar.characterWidth = minchar.attributes = 32767;
- maxchar.ascent = maxchar.descent =
- maxchar.leftSideBearing = maxchar.rightSideBearing =
- maxchar.characterWidth = maxchar.attributes = -32767;
-
- maxlap = -32767;
- cfmp->alle = 1;
- cidrangeP = CIDFontP->cidrangeP;
-
- /* go through all character codes specified in a given CMap */
- for (i = 0; i < CIDFontP->cidrangecnt; i++) {
- for (j = 0; j < cidrangeP->rangecnt; j++) {
- for (k = cidrangeP->range[j].srcCodeLo;
- k <= cidrangeP->range[j].srcCodeHi; k++) {
- ccode[0] = (k >> 8) & 0xff;
- ccode[1] = k & 0xff;
- ret = CIDGetMetrics(pFont, 1, ccode, Linear16Bit, &ccount, &pmetrics);
- if (ret != Successful || (ret == Successful && pmetrics == NULL))
- continue;
- total_width += pmetrics->attributes;
- total_raw_width += abs((int)(INT16)pmetrics->attributes);
- if (pmetrics->attributes ||
- pmetrics->ascent != -pmetrics->descent ||
- pmetrics->leftSideBearing != pmetrics->rightSideBearing) {
- count++;
- adjust_min_max(&minchar, &maxchar, pmetrics);
- overlap = pmetrics->rightSideBearing - pmetrics->characterWidth;
- if (overlap > maxlap) maxlap = overlap;
- }
- else cfmp->alle = 0;
- }
- }
- }
-
- if (count)
- {
- total_raw_width = (total_raw_width * 10 + count / 2) / count;
- if (total_width < 0)
- {
- /* Predominant direction is R->L */
- total_raw_width = -total_raw_width;
- }
- }
-
- cfmp->totalrw = (INT32)total_raw_width;
-
- cfmp->maxbounds.leftSideBearing =
- floor((double)maxchar.leftSideBearing * sxmult + 0.5);
- cfmp->maxbounds.rightSideBearing =
- floor((double)maxchar.rightSideBearing * sxmult + 0.5);
- cfmp->maxbounds.characterWidth =
- floor((double)maxchar.characterWidth * sxmult + 0.5);
- cfmp->maxbounds.ascent =
- floor((double)maxchar.ascent * sxmult + 0.5);
- cfmp->maxbounds.descent =
- floor((double)maxchar.descent * sxmult);
- cfmp->maxbounds.attributes = maxchar.attributes;
-
- cfmp->minbounds.leftSideBearing =
- floor((double)minchar.leftSideBearing * sxmult + 0.5);
- cfmp->minbounds.rightSideBearing =
- floor((double)minchar.rightSideBearing * sxmult + 0.5);
- cfmp->minbounds.characterWidth =
- floor((double)minchar.characterWidth * sxmult + 0.5);
- cfmp->minbounds.ascent =
- floor((double)minchar.ascent * sxmult + 0.5);
- cfmp->minbounds.descent =
- floor((double)minchar.descent * sxmult + 0.5);
- cfmp->minbounds.attributes = minchar.attributes;
-
- cfmp->ink_maxbounds.leftSideBearing =
- floor((double)maxchar.leftSideBearing * sxmult + 0.5);
- cfmp->ink_maxbounds.rightSideBearing =
- floor((double)maxchar.rightSideBearing * sxmult + 0.5);
- cfmp->ink_maxbounds.characterWidth =
- floor((double)maxchar.characterWidth * sxmult + 0.5);
- cfmp->ink_maxbounds.ascent =
- floor((double)maxchar.ascent * sxmult + 0.5);
- cfmp->ink_maxbounds.descent =
- floor((double)maxchar.descent * sxmult + 0.5);
- cfmp->ink_maxbounds.attributes = maxchar.attributes;
-
- cfmp->ink_minbounds.leftSideBearing =
- floor((double)minchar.leftSideBearing * sxmult + 0.5);
- cfmp->ink_minbounds.rightSideBearing =
- floor((double)minchar.rightSideBearing * sxmult + 0.5);
- cfmp->ink_minbounds.characterWidth =
- floor((double)minchar.characterWidth * sxmult + 0.5);
- cfmp->ink_minbounds.ascent =
- floor((double)minchar.ascent * sxmult + 0.5);
- cfmp->ink_minbounds.descent =
- floor((double)minchar.descent * sxmult + 0.5);
- cfmp->ink_minbounds.attributes = minchar.attributes;
-
- cfmp->maxo = (INT32)(maxlap + -(minchar.leftSideBearing));
-
- magic = CFMMAGIC;
- fwrite(&magic, sizeof(CARD32), 1, cfm);
- fwrite(cfmp, sizeof(cfmrec), 1, cfm);
- xfree(cfmp);
- fclose(cfm);
-}
-#else
-static long
-ComputeBoundsAll(FontPtr pFont)
-{
- int count = 0;
- int maxlap, overlap, i, j, k, ret;
- xCharInfo minchar, maxchar;
- cidrange *cidrangeP;
- unsigned char ccode[2];
- unsigned long ccount;
- xCharInfo *pmetrics;
- CharInfoRec *cinfo[1];
- long total_raw_width = 0, total_width = 0;
- FontInfoPtr pInfo = &(pFont->info);
-
- minchar.ascent = minchar.descent =
- minchar.leftSideBearing = minchar.rightSideBearing =
- minchar.characterWidth = minchar.attributes = 32767;
- maxchar.ascent = maxchar.descent =
- maxchar.leftSideBearing = maxchar.rightSideBearing =
- maxchar.characterWidth = maxchar.attributes = -32767;
-
- maxlap = -32767;
- pInfo->allExist = 1;
- cidrangeP = CIDFontP->cidrangeP;
-
- /* go through all character codes specified in a given CMap */
- for (i = 0; i < CIDFontP->cidrangecnt; i++) {
- for (j = 0; j < cidrangeP->rangecnt; j++) {
- for (k = cidrangeP->range[j].srcCodeLo;
- k <= cidrangeP->range[j].srcCodeHi; k++) {
- ccode[0] = (k >> 8) & 0xff;
- ccode[1] = k & 0xff;
- ret = CIDGetMetrics(pFont, 1, ccode, Linear16Bit, &ccount, (xCharInfo **)cinfo);
- if (ret != Successful || cinfo == NULL)
- continue;
- pmetrics = &cinfo[0]->metrics;
- total_width += pmetrics->attributes;
- total_raw_width += abs((int)(INT16)pmetrics->attributes);
- if (pmetrics->attributes ||
- pmetrics->ascent != -pmetrics->descent ||
- pmetrics->leftSideBearing != pmetrics->rightSideBearing) {
- count++;
- adjust_min_max(&minchar, &maxchar, pmetrics);
- overlap = pmetrics->rightSideBearing - pmetrics->characterWidth;
- if (overlap > maxlap) maxlap = overlap;
- }
- else pInfo->allExist = 0;
- }
- }
- }
-
- if (count)
- {
- total_raw_width = (total_raw_width * 10 + count / 2) / count;
- if (total_width < 0)
- {
- /* Predominant direction is R->L */
- total_raw_width = -total_raw_width;
- }
- }
-
- pInfo->maxbounds.leftSideBearing = maxchar.leftSideBearing;
- pInfo->maxbounds.rightSideBearing = maxchar.rightSideBearing;
- pInfo->maxbounds.characterWidth = maxchar.characterWidth;
- pInfo->maxbounds.ascent = maxchar.ascent;
- pInfo->maxbounds.descent = maxchar.descent;
- pInfo->maxbounds.attributes = maxchar.attributes;
-
- pInfo->minbounds.leftSideBearing = minchar.leftSideBearing;
- pInfo->minbounds.rightSideBearing = minchar.rightSideBearing;
- pInfo->minbounds.characterWidth = minchar.characterWidth;
- pInfo->minbounds.ascent = minchar.ascent;
- pInfo->minbounds.descent = minchar.descent;
- pInfo->minbounds.attributes = minchar.attributes;
-
- pInfo->ink_maxbounds.leftSideBearing = maxchar.leftSideBearing;
- pInfo->ink_maxbounds.rightSideBearing = maxchar.rightSideBearing;
- pInfo->ink_maxbounds.characterWidth = maxchar.characterWidth;
- pInfo->ink_maxbounds.ascent = maxchar.ascent;
- pInfo->ink_maxbounds.descent = maxchar.descent;
- pInfo->ink_maxbounds.attributes = maxchar.attributes;
-
- pInfo->ink_minbounds.leftSideBearing = minchar.leftSideBearing;
- pInfo->ink_minbounds.rightSideBearing = minchar.rightSideBearing;
- pInfo->ink_minbounds.characterWidth = minchar.characterWidth;
- pInfo->ink_minbounds.ascent = minchar.ascent;
- pInfo->ink_minbounds.descent = minchar.descent;
- pInfo->ink_minbounds.attributes = minchar.attributes;
-
- pInfo->maxOverlap = maxlap + -(minchar.leftSideBearing);
-
- return total_raw_width;
-}
-#endif
-#endif
-
-static void
-ComputeProps(FontInfoPtr pInfo, FontScalablePtr Vals, char *Filename,
- long *sAscent, long *sDescent)
-{
- int infoint;
- int infoBBox[4];
- int rc;
-
- QueryFontLib(Filename, "isFixedPitch", &infoint, &rc);
- if (!rc) {
- pInfo->constantWidth = infoint;
- }
- QueryFontLib((char *)0, "FontBBox", infoBBox, &rc);
- if (!rc) {
- pInfo->fontAscent =
- (int)((double)infoBBox[3] * Vals->pixel_matrix[3] +
- (infoBBox[3] > 0 ? 500 : -500)) / 1000;
- pInfo->fontDescent =
- -(int)((double)infoBBox[1] * Vals->pixel_matrix[3] +
- (infoBBox[1] > 0 ? 500 : -500)) / 1000;
- *sAscent = infoBBox[3];
- *sDescent = -infoBBox[1];
- }
-}
-
-#if XFONT_CID
-#ifndef CID_ALL_CHARS
-static void
-CIDComputeStdProps(FontInfoPtr pInfo, FontScalablePtr Vals,
- char *Filename, char *Cmapname, char *Fontname,
- long sAscent, long sDescent, long sWidth)
-{
- FontPropPtr pp;
- int i,
- nprops;
- fontProp *fpt;
- char *is_str;
- char *ptr1 = NULL,
- *ptr2;
- char *ptr3;
- char *infostrP;
- int rc;
- char scaledName[CID_PATH_MAX];
-
- strcpy (scaledName, Fontname);
- /* Fill in our copy of the fontname from the Vals structure */
- FontParseXLFDName (scaledName, Vals, FONT_XLFD_REPLACE_VALUE);
-
- /* This form of the properties is used by the X-client; the X-server
- doesn't care what they are. */
- nprops = pInfo->nprops = NPROPS;
- pInfo->isStringProp = (char *) xalloc(sizeof(char) * nprops);
- pInfo->props = (FontPropPtr) xalloc(sizeof(FontPropRec) * nprops);
- if (!pInfo->isStringProp || !pInfo->props) {
- xfree(pInfo->isStringProp);
- pInfo->isStringProp = (char *) 0;
- xfree(pInfo->props);
- pInfo->props = (FontPropPtr) 0;
- pInfo->nprops = 0;
- return;
- }
- bzero(pInfo->isStringProp, (sizeof(char) * nprops));
-
- ptr2 = scaledName;
- for (i = NNAMEPROPS, pp = pInfo->props, fpt = fontNamePropTable, is_str = pInfo->isStringProp;
- i;
- i--, pp++, fpt++, is_str++) {
-
- if (*ptr2)
- {
- ptr1 = ptr2 + 1;
- if (!(ptr2 = strchr(ptr1, '-'))) ptr2 = strchr(ptr1, '\0');
- }
-
- pp->name = fpt->atom;
- switch (fpt->type) {
- case atom: /* Just copy info from scaledName */
- *is_str = TRUE;
- pp->value = MakeAtom(ptr1, ptr2 - ptr1, TRUE);
- break;
- case truncate_atom:
- *is_str = TRUE;
- for (ptr3 = ptr1; *ptr3; ptr3++)
- if (*ptr3 == '[')
- break;
- pp->value = MakeAtom(ptr1, ptr3 - ptr1, TRUE);
- break;
- case pixel_size:
- pp->value = (int)(fabs(Vals->pixel_matrix[3]) + .5);
- break;
- case point_size:
- pp->value = (int)(fabs(Vals->point_matrix[3]) * 10.0 + .5);
- break;
- case resolution_x:
- pp->value = Vals->x;
- break;
- case resolution_y:
- pp->value = Vals->y;
- break;
- case average_width:
- pp->value = Vals->width;
- break;
- }
- }
-
- for (i = 0, fpt = extraProps;
- i < NEXTRAPROPS;
- i++, is_str++, pp++, fpt++) {
- pp->name = fpt->atom;
- switch (i) {
- case FONTPROP:
- *is_str = TRUE;
- pp->value = MakeAtom(scaledName, strlen(scaledName), TRUE);
- break;
- case COPYRIGHTPROP:
- *is_str = TRUE;
- CIDQueryFontLib(Filename, Cmapname, "Notice", &infostrP, &rc);
- if (rc || !infostrP) {
- infostrP = "Copyright Notice not available";
- }
- pp->value = MakeAtom(infostrP, strlen(infostrP), TRUE);
- break;
- case FACE_NAMEPROP:
- *is_str = TRUE;
- CIDQueryFontLib(Filename, Cmapname, "CIDFontName", &infostrP, &rc);
- if (rc || !infostrP) {
- infostrP = "(unknown)";
- }
- pp->value = MakeAtom(infostrP, strlen(infostrP), TRUE);
- break;
- case FONT_TYPEPROP:
- *is_str = TRUE;
- infostrP = "CIDFont";
- pp->value = MakeAtom(infostrP, strlen(infostrP), TRUE);
- break;
- case RASTERIZER_NAMEPROP:
- *is_str = TRUE;
- infostrP = "X Consortium Type 1 Rasterizer";
- pp->value = MakeAtom(infostrP, strlen(infostrP), TRUE);
- break;
- case RAWPIXELPROP:
- *is_str = FALSE;
- pp->value = 1000;
- break;
- case RAWPOINTPROP:
- *is_str = FALSE;
- pp->value = (long)(72270.0 / (double)Vals->y + .5);
- break;
- case RAWASCENTPROP:
- *is_str = FALSE;
- pp->value = sAscent;
- break;
- case RAWDESCENTPROP:
- *is_str = FALSE;
- pp->value = sDescent;
- break;
- case RAWWIDTHPROP:
- *is_str = FALSE;
- pp->value = sWidth;
- break;
- }
- }
-}
-#endif
-#endif
-
-static void
-ComputeStdProps(FontInfoPtr pInfo, FontScalablePtr Vals,
- char *Filename, char *Fontname,
- long sAscent, long sDescent, long sWidth)
-{
- FontPropPtr pp;
- int i,
- nprops;
- fontProp *fpt;
- char *is_str;
- char *ptr1 = NULL,
- *ptr2;
- char *ptr3;
- char *infostrP;
- int rc;
- char scaledName[MAXFONTNAMELEN];
-
- strcpy (scaledName, Fontname);
- /* Fill in our copy of the fontname from the Vals structure */
- FontParseXLFDName (scaledName, Vals, FONT_XLFD_REPLACE_VALUE);
-
- /* This form of the properties is used by the X-client; the X-server
- doesn't care what they are. */
- nprops = pInfo->nprops = NPROPS;
- pInfo->isStringProp = (char *) xalloc(sizeof(char) * nprops);
- pInfo->props = (FontPropPtr) xalloc(sizeof(FontPropRec) * nprops);
- if (!pInfo->isStringProp || !pInfo->props) {
- xfree(pInfo->isStringProp);
- pInfo->isStringProp = (char *) 0;
- xfree(pInfo->props);
- pInfo->props = (FontPropPtr) 0;
- return;
- }
- bzero(pInfo->isStringProp, (sizeof(char) * nprops));
-
- ptr2 = scaledName;
- for (i = NNAMEPROPS, pp = pInfo->props, fpt = fontNamePropTable, is_str = pInfo->isStringProp;
- i;
- i--, pp++, fpt++, is_str++) {
-
- if (*ptr2)
- {
- ptr1 = ptr2 + 1;
- if (!(ptr2 = strchr(ptr1, '-'))) ptr2 = strchr(ptr1, '\0');
- }
-
- pp->name = fpt->atom;
- switch (fpt->type) {
- case atom: /* Just copy info from scaledName */
- *is_str = TRUE;
- pp->value = MakeAtom(ptr1, ptr2 - ptr1, TRUE);
- break;
- case truncate_atom:
- *is_str = TRUE;
- for (ptr3 = ptr1; *ptr3; ptr3++)
- if (*ptr3 == '[')
- break;
- pp->value = MakeAtom(ptr1, ptr3 - ptr1, TRUE);
- break;
- case pixel_size:
- pp->value = (int)(fabs(Vals->pixel_matrix[3]) + .5);
- break;
- case point_size:
- pp->value = (int)(fabs(Vals->point_matrix[3]) * 10.0 + .5);
- break;
- case resolution_x:
- pp->value = Vals->x;
- break;
- case resolution_y:
- pp->value = Vals->y;
- break;
- case average_width:
- pp->value = Vals->width;
- break;
- }
- }
-
- for (i = 0, fpt = extraProps;
- i < NEXTRAPROPS;
- i++, is_str++, pp++, fpt++) {
- pp->name = fpt->atom;
- switch (i) {
- case FONTPROP:
- *is_str = TRUE;
- pp->value = MakeAtom(scaledName, strlen(scaledName), TRUE);
- break;
- case COPYRIGHTPROP:
- *is_str = TRUE;
- QueryFontLib(Filename, "Notice", &infostrP, &rc);
- if (rc || !infostrP) {
- infostrP = "Copyright Notice not available";
- }
- pp->value = MakeAtom(infostrP, strlen(infostrP), TRUE);
- break;
- case FACE_NAMEPROP:
- *is_str = TRUE;
- QueryFontLib(Filename, "FontName", &infostrP, &rc);
- if (rc || !infostrP) {
- infostrP = "(unknown)";
- }
- pp->value = MakeAtom(infostrP, strlen(infostrP), TRUE);
- break;
- case FONT_TYPEPROP:
- *is_str = TRUE;
- infostrP = "Type 1";
- pp->value = MakeAtom(infostrP, strlen(infostrP), TRUE);
- break;
- case RASTERIZER_NAMEPROP:
- *is_str = TRUE;
- infostrP = "X Consortium Type 1 Rasterizer";
- pp->value = MakeAtom(infostrP, strlen(infostrP), TRUE);
- break;
- case RAWPIXELPROP:
- *is_str = FALSE;
- pp->value = 1000;
- break;
- case RAWPOINTPROP:
- *is_str = FALSE;
- pp->value = (long)(72270.0 / (double)Vals->y + .5);
- break;
- case RAWASCENTPROP:
- *is_str = FALSE;
- pp->value = sAscent;
- break;
- case RAWDESCENTPROP:
- *is_str = FALSE;
- pp->value = sDescent;
- break;
- case RAWWIDTHPROP:
- *is_str = FALSE;
- pp->value = sWidth;
- break;
- }
- }
-}
-
-#if XFONT_CID
-/*ARGSUSED*/
-int
-CIDGetInfoScalable(FontPathElementPtr fpe,
- FontInfoPtr pInfo,
- FontEntryPtr entry,
- FontNamePtr fontName,
- char *fileName,
- FontScalablePtr Vals)
-{
- FontPtr pfont;
- int flags = 0;
- long format = 0; /* It doesn't matter what format for just info */
- long fmask = 0;
- int ret;
-
- ret = CIDOpenScalable(fpe, &pfont, flags, entry, fileName, Vals,
- format, fmask, NULL);
- if (ret != Successful)
- return ret;
- *pInfo = pfont->info;
-
- /* XXX - Set pointers in pfont->info to NULL so they are not freed. */
- pfont->info.props = NULL;
- pfont->info.isStringProp = NULL;
-
- CIDCloseFont(pfont);
- return Successful;
-}
-#endif
-
-/*ARGSUSED*/
-int
-Type1GetInfoScalable(FontPathElementPtr fpe,
- FontInfoPtr pInfo,
- FontEntryPtr entry,
- FontNamePtr fontName,
- char *fileName,
- FontScalablePtr Vals)
-{
- FontPtr pfont;
- int flags = 0;
- long format = 0; /* It doesn't matter what format for just info */
- long fmask = 0;
- int ret;
-
- ret = Type1OpenScalable(fpe, &pfont, flags, entry, fileName, Vals,
- format, fmask , NULL);
- if (ret != Successful)
- return ret;
- *pInfo = pfont->info;
-
- /* XXX - Set pointers in pfont->info to NULL so they are not freed. */
- pfont->info.props = NULL;
- pfont->info.isStringProp = NULL;
-
- Type1CloseFont(pfont);
- return Successful;
-}
-
-#if XFONT_CID
-#ifndef CID_ALL_CHARS
-void
-CIDFillFontInfo(FontPtr pFont, FontScalablePtr Vals,
- char *Filename, char *Fontname, char *Cmapname,
-#ifdef HAVE_CFM
- char *cfmfilename,
-#endif
- long sAscent, long sDescent, double sxmult)
-{
-#ifdef HAVE_CFM
- FILE *cfm;
- cfmrec *cfmp;
- int gotcfm = 0;
- CARD32 magic;
-#endif
- long sWidth = 0;
- FontInfoPtr pInfo = &pFont->info;
-
- FillHeader(pInfo, Vals);
-
-#ifdef HAVE_CFM
- if ((cfm = fopen(cfmfilename,"r"))) {
- fread(&magic,sizeof(CARD32),1,cfm);
- if(magic == CFMMAGIC) {
- if ((cfmp = (cfmrec *)xalloc(sizeof(cfmrec))) != NULL) {
- fread(cfmp,sizeof(cfmrec),1,cfm);
- sWidth = (long)cfmp->totalrw;
- pInfo->allExist = cfmp->alle;
- if (sxmult != 0) {
- pInfo->maxbounds.leftSideBearing =
- floor((double)cfmp->maxbounds.leftSideBearing /
- sxmult + 0.5);
- pInfo->maxbounds.rightSideBearing =
- floor((double)cfmp->maxbounds.rightSideBearing /
- sxmult + 0.5);
- pInfo->maxbounds.characterWidth =
- floor((double)cfmp->maxbounds.characterWidth /
- sxmult + 0.5);
- pInfo->maxbounds.ascent =
- floor((double)cfmp->maxbounds.ascent /
- sxmult + 0.5);
- pInfo->maxbounds.descent =
- floor((double)cfmp->maxbounds.descent /
- sxmult + 0.5);
- pInfo->maxbounds.attributes =
- cfmp->maxbounds.attributes;
-
- pInfo->minbounds.leftSideBearing =
- cfmp->minbounds.leftSideBearing / sxmult;
- pInfo->minbounds.rightSideBearing =
- cfmp->minbounds.rightSideBearing / sxmult;
- pInfo->minbounds.characterWidth =
- cfmp->minbounds.characterWidth / sxmult;
- pInfo->minbounds.ascent =
- cfmp->minbounds.ascent / sxmult;
- pInfo->minbounds.descent =
- cfmp->minbounds.descent / sxmult;
- pInfo->minbounds.attributes = cfmp->minbounds.attributes;
-
- pInfo->ink_maxbounds.leftSideBearing =
- cfmp->ink_maxbounds.leftSideBearing / sxmult;
- pInfo->ink_maxbounds.rightSideBearing =
- cfmp->ink_maxbounds.rightSideBearing / sxmult;
- pInfo->ink_maxbounds.characterWidth =
- cfmp->ink_maxbounds.characterWidth / sxmult;
- pInfo->ink_maxbounds.ascent =
- cfmp->ink_maxbounds.ascent / sxmult;
- pInfo->ink_maxbounds.descent =
- cfmp->ink_maxbounds.descent / sxmult;
- pInfo->ink_maxbounds.attributes =
- cfmp->ink_maxbounds.attributes;
-
- pInfo->ink_minbounds.leftSideBearing =
- cfmp->ink_minbounds.leftSideBearing / sxmult;
- pInfo->ink_minbounds.rightSideBearing =
- cfmp->ink_minbounds.rightSideBearing / sxmult;
- pInfo->ink_minbounds.characterWidth =
- cfmp->ink_minbounds.characterWidth / sxmult;
- pInfo->ink_minbounds.ascent =
- cfmp->ink_minbounds.ascent / sxmult;
- pInfo->ink_minbounds.descent =
- cfmp->ink_minbounds.descent / sxmult;
- pInfo->ink_minbounds.attributes =
- cfmp->ink_minbounds.attributes;
- pInfo->ink_minbounds.attributes =
- cfmp->ink_minbounds.attributes;
-
- pInfo->maxOverlap = (short)cfmp->maxo;
-
- gotcfm = 1;
- }
- xfree(cfmp);
- }
- }
- fclose(cfm);
- }
-
- if (!gotcfm)
-#endif
- sWidth = ComputeBoundsAll(pFont);
-
- FontComputeInfoAccelerators(pInfo);
-
- CIDComputeStdProps(pInfo, Vals, Filename, Cmapname, Fontname, sAscent,
- sDescent, sWidth);
-}
-#endif /* CID_ALL_CHARS */
-#endif /* BUILDCID */
-
-void
-T1FillFontInfo(FontPtr pFont, FontScalablePtr Vals,
- char *Filename, char *Fontname, long sWidth)
-{
- FontInfoPtr pInfo = &pFont->info;
- struct type1font *p = (struct type1font *)pFont->fontPrivate;
- long sAscent, sDescent; /* Scalable 1000-pixel values */
-
- FillHeader(pInfo, Vals);
-
- ComputeBounds(pInfo, p->glyphs, Vals);
-
- ComputeProps(pInfo, Vals, Filename, &sAscent, &sDescent);
- ComputeStdProps(pInfo, Vals, Filename, Fontname, sAscent, sDescent, sWidth);
-}
-
-/* Called once, at renderer registration time */
-void
-#if XFONT_CID
-Type1InitStdProps(void)
-#else
-T1InitStdProps(void)
-#endif
-{
- int i;
- fontProp *t;
-
-#if XFONT_CID
- if (!stdpropsinit) {
- stdpropsinit = 1;
- i = sizeof(fontNamePropTable) / sizeof(fontProp);
- for (t = fontNamePropTable; i; i--, t++)
- t->atom = MakeAtom(t->name, (unsigned) strlen(t->name), TRUE);
- i = sizeof(extraProps) / sizeof(fontProp);
- for (t = extraProps; i; i--, t++)
- t->atom = MakeAtom(t->name, (unsigned) strlen(t->name), TRUE);
- }
-#else
- i = sizeof(fontNamePropTable) / sizeof(fontProp);
- for (t = fontNamePropTable; i; i--, t++)
- t->atom = MakeAtom(t->name, (unsigned) strlen(t->name), TRUE);
- i = sizeof(extraProps) / sizeof(fontProp);
- for (t = extraProps; i; i--, t++)
- t->atom = MakeAtom(t->name, (unsigned) strlen(t->name), TRUE);
-#endif
-}
diff --git a/nx-X11/lib/font/Type1/t1intf.h b/nx-X11/lib/font/Type1/t1intf.h
deleted file mode 100644
index 831acc55d..000000000
--- a/nx-X11/lib/font/Type1/t1intf.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/* $Xorg: t1intf.h,v 1.3 2000/08/17 19:46:33 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/t1intf.h,v 1.6 2001/01/17 19:43:23 dawes Exp $ */
-
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#if XFONT_CID
-#include "AFM.h"
-#endif
-
-struct type1font {
- CharInfoPtr pDefault;
- CharInfoRec glyphs[256];
-};
-
-#if XFONT_CID
-typedef struct cid_glyphs {
- char *CIDFontName;
- char *CMapName;
- long dataoffset;
- double pixel_matrix[4];
- CharInfoPtr pDefault;
- CharInfoRec **glyphs;
- FontInfo *AFMinfo;
-#ifdef USE_MMAP
- unsigned char *CIDdata;
- long CIDsize;
-#endif
-} cidglyphs;
-#endif
-
-/*
- * Function prototypes
- */
-/* t1funcs.c */
-#if XFONT_CID
-extern int CIDOpenScalable ( FontPathElementPtr fpe, FontPtr *ppFont,
- int flags, FontEntryPtr entry, char *fileName,
- FontScalablePtr vals, fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- FontPtr non_cachable_font );
-#endif
-extern int Type1OpenScalable ( FontPathElementPtr fpe, FontPtr *ppFont,
- int flags, FontEntryPtr entry, char *fileName,
- FontScalablePtr vals, fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- FontPtr non_cachable_font );
-#if XFONT_CID
-extern unsigned int getCID ( FontPtr pFont, unsigned int charcode );
-extern int CIDGetGlyphs ( FontPtr pFont, unsigned long count,
- unsigned char *chars, FontEncoding charEncoding,
- unsigned long *glyphCount, CharInfoPtr *glyphs );
-extern int CIDGetMetrics ( FontPtr pFont, unsigned long count,
- unsigned char *chars, FontEncoding charEncoding,
- unsigned long *glyphCount, xCharInfo **glyphs );
-extern void CIDCloseFont ( FontPtr pFont );
-#endif
-extern void Type1CloseFont ( FontPtr pFont );
-extern int Type1ReturnCodeToXReturnCode ( int rc );
-#if XFONT_CID
-extern CharInfoPtr CIDRenderGlyph ( FontPtr pFont, psobj *charstringP,
- psobj *subarrayP,
- struct blues_struct *bluesP,
- CharInfoPtr pci, int *mode );
-#endif
-
-/* t1info.c */
-#ifdef CID_ALL_CHARS
-extern void ComputeBoundsAllChars ( FontPtr pFont, char *cfmfilename, double sxmult );
-#endif
-#if XFONT_CID
-extern int CIDGetInfoScalable ( FontPathElementPtr fpe, FontInfoPtr pInfo,
- FontEntryPtr entry, FontNamePtr fontName,
- char *fileName, FontScalablePtr Vals );
-#endif
-extern int Type1GetInfoScalable ( FontPathElementPtr fpe, FontInfoPtr pInfo,
- FontEntryPtr entry, FontNamePtr fontName,
- char *fileName, FontScalablePtr Vals );
-#if XFONT_CID
-extern void CIDFillFontInfo ( FontPtr pFont, FontScalablePtr Vals,
- char *Filename, char *Fontname, char *Cmapname,
-#ifdef HAVE_CFM
- char *cfmfilename,
-#endif
- long sAscent, long sDescent, double sxmult );
-#endif
-extern void T1FillFontInfo ( FontPtr pFont, FontScalablePtr Vals,
- char *Filename, char *Fontname, long sWidth );
-extern void Type1InitStdProps ( void );
-
-/* cidchar.c */
-extern CharInfoPtr CIDGetGlyphInfo ( FontPtr pFont, unsigned int cidcode,
- CharInfoPtr pci, int *rc );
-extern int CIDGetAFM ( FontPtr pFont, unsigned long count,
- unsigned char *chars, FontEncoding charEncoding,
- unsigned long *glyphCount, CharInfoPtr *glyphs,
- char *cidafmfile );
diff --git a/nx-X11/lib/font/Type1/t1io.c b/nx-X11/lib/font/Type1/t1io.c
deleted file mode 100644
index 42b8bb6be..000000000
--- a/nx-X11/lib/font/Type1/t1io.c
+++ /dev/null
@@ -1,388 +0,0 @@
-/* $Xorg: t1io.c,v 1.3 2000/08/17 19:46:33 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- * Author: Carol H. Thompson IBM Almaden Research Center
- */
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/t1io.c,v 3.8 2001/01/17 19:43:23 dawes Exp $ */
-/*******************************************************************
-* I/O package for Type 1 font reading
-********************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#ifndef STATIC
-#define STATIC static
-#endif
-
-#ifndef FONTMODULE
-#include <fcntl.h>
-#include <unistd.h>
-#else
-#include "Xdefs.h"
-#include "Xmd.h" /* INT32 declaration */
-#include "xf86_ansic.h"
-#endif
-#include "t1stdio.h"
-#include "t1hdigit.h"
-#ifdef WIN32
-#include <X11/Xw32defs.h>
-#endif
-#include <X11/Xdefs.h>
-
-/* Constants and variables used in the decryption */
-#define c1 ((unsigned short)52845)
-#define c2 ((unsigned short)22719)
-static unsigned short r;
-static int asc, Decrypt;
-static int extrach;
-static int haveextrach;
-
-/* Our single FILE structure and buffer for this package */
-STATIC F_FILE TheFile;
-STATIC unsigned char TheBuffer[F_BUFSIZ];
-
-/* Our routines */
-static int T1Decrypt ( unsigned char *p, int len );
-static int T1Fill ( F_FILE *f );
-
-#if XFONT_CID
-void
-resetDecrypt(void)
-{
- Decrypt = 0;
-}
-#endif
-
-/* -------------------------------------------------------------- */
-/*ARGSUSED*/
-F_FILE *
-T1Open(char *fn, /* Pointer to filename */
- char *mode) /* Pointer to open mode string */
-{
- F_FILE *of = &TheFile;
- int oflags = O_RDONLY; /* We know we are only reading */
-
- Decrypt = 0;
-
-#ifdef O_BINARY /* VMS or DOS */
- oflags |= O_BINARY;
-#endif
- of->fd = open(fn, oflags, 0);
- if (of->fd < 0)
- return NULL;
-
- /* Initialize the buffer information of our file descriptor */
- of->b_base = TheBuffer;
- of->b_size = F_BUFSIZ;
- of->b_ptr = NULL;
- of->b_cnt = 0;
- of->flags = 0;
- of->error = 0;
- haveextrach = 0;
- return &TheFile;
-} /* end Open */
-
-/* -------------------------------------------------------------- */
-int /* Read one character */
-T1Getc(F_FILE *f) /* Stream descriptor */
-{
- if (f->b_base == NULL) return EOF; /* already closed */
-
- if (f->flags & UNGOTTENC) { /* there is an ungotten c */
- f->flags &= ~UNGOTTENC;
- return (int) f->ungotc;
- }
-
- if (f->b_cnt == 0) /* Buffer needs to be (re)filled */
- f->b_cnt = T1Fill(f);
- if (f->b_cnt > 0) return (f->b_cnt--, (int) *(f->b_ptr++));
- else {
- f->flags |= FIOEOF;
- return EOF;
- }
-} /* end Getc */
-
-/* -------------------------------------------------------------- */
-int /* Put back one character */
-T1Ungetc(int c,
- F_FILE *f) /* Stream descriptor */
-{
- if (c != EOF) {
- f->ungotc = c;
- f->flags |= UNGOTTENC; /* set flag */
- f->flags &= ~FIOEOF; /* reset EOF */
- }
- return c;
-} /* end Ungetc */
-
-/* -------------------------------------------------------------- */
-int /* Read n items into caller's buffer */
-T1Read(char *buffP, /* Buffer to be filled */
- int size, /* Size of each item */
- int n, /* Number of items to read */
- F_FILE *f) /* Stream descriptor */
-{
- int bytelen, cnt, i;
- F_char *p = (F_char *)buffP;
- int icnt; /* Number of characters to read */
-
- if (f->b_base == NULL) return 0; /* closed */
- icnt = (size!=1)?n*size:n; /* Number of bytes we want */
-
- if (f->flags & UNGOTTENC) { /* there is an ungotten c */
- f->flags &= ~UNGOTTENC;
- *(p++) = f->ungotc;
- icnt--; bytelen = 1;
- }
- else bytelen = 0;
-
- while (icnt > 0) {
- /* First use any bytes we have buffered in the stream buffer */
- if ((cnt=f->b_cnt) > 0) {
- if (cnt > icnt) cnt = icnt;
- for (i=0; i<cnt; i++) *(p++) = *(f->b_ptr++);
- f->b_cnt -= cnt;
- icnt -= cnt;
- bytelen += cnt;
- }
-
- if ((icnt == 0) || (f->flags & FIOEOF)) break;
-
- f->b_cnt = T1Fill(f);
- }
- return ((size!=1)?bytelen/size:bytelen);
-} /* end Read */
-
-/* -------------------------------------------------------------- */
-int /* Close the file */
-T1Close(F_FILE *f) /* Stream descriptor */
-{
- if (f->b_base == NULL) return 0; /* already closed */
- f->b_base = NULL; /* no valid stream */
- return close(f->fd);
-} /* end Close */
-
-
-/* -------------------------------------------------------------- */
-F_FILE * /* Initialization */
-T1eexec(F_FILE *f) /* Stream descriptor */
-{
- int i, c;
- int H;
- unsigned char *p;
- unsigned char randomP[8];
-
- r = 55665; /* initial key */
- asc = 1; /* indicate ASCII form */
-
- /* Consume the 4 random bytes, determining if we are also to
- ASCIIDecodeHex as we process our input. (See pages 63-64
- of the Adobe Type 1 Font Format book.) */
-
- /* Skip over any initial white space chars */
- while (HighHexP[c=_XT1getc(f)] == HWHITE_SPACE) ;
-
- /* If ASCII, the next 7 chars are guaranteed consecutive */
- randomP[0] = c; /* store first non white space char */
- T1Read((pointer)(randomP+1), 1, 3, f); /* read 3 more, for a total of 4 */
- /* store first four chars */
- for (i=0,p=randomP; i<4; i++) { /* Check 4 valid ASCIIEncode chars */
- if (HighHexP[*p++] > LAST_HDIGIT) { /* non-ASCII byte */
- asc = 0;
- break;
- }
- }
- if (asc) { /* ASCII form, convert first eight bytes to binary */
- T1Read((pointer)(randomP+4), 1, 4, f); /* Need four more */
- for (i=0,p=randomP; i<4; i++) { /* Convert */
- H = HighHexP[*p++];
- randomP[i] = H | LowHexP[*p++];
- }
- }
-
- /* Adjust our key */
- for (i=0,p=randomP; i<4; i++) {
- r = (*p++ + r) * c1 + c2;
- }
-
- /* Decrypt the remaining buffered bytes */
- f->b_cnt = T1Decrypt(f->b_ptr, f->b_cnt);
- Decrypt = 1;
- return (T1Feof(f))?NULL:f;
-} /* end eexec */
-
-#if XFONT_CID
-F_FILE * /* Initialization */
-CIDeexec(F_FILE *f) /* Stream descriptor */
-{
- int i, c;
- int H;
- unsigned char *p;
- unsigned char randomP[8];
-
- r = 55665; /* initial key */
- asc = 1; /* indicate ASCII form */
-
- /* Consume the 4 random bytes, determining if we are also to
- ASCIIDecodeHex as we process our input. (See pages 63-64
- of the Adobe Type 1 Font Format book.) */
-
- /* Skip over any initial white space chars */
- while (HighHexP[c=_XT1getc(f)] == HWHITE_SPACE) ;
-
- /* If ASCII, the next 7 chars are guaranteed consecutive */
- randomP[0] = c; /* store first non white space char */
- T1Read((pointer)(randomP+1), 1, 3, f); /* read 3 more, for a total of 4 */
- /* store first four chars */
- for (i=0,p=randomP; i<4; i++) { /* Check 4 valid ASCIIEncode chars */
- if (HighHexP[*p++] > LAST_HDIGIT) { /* non-ASCII byte */
- asc = 0;
- break;
- }
- }
- if (asc) { /* ASCII form, convert first eight bytes to binary */
- T1Read((pointer)(randomP+4), 1, 4, f); /* Need four more */
- for (i=0,p=randomP; i<4; i++) { /* Convert */
- H = HighHexP[*p++];
- randomP[i] = H | LowHexP[*p++];
- }
- }
-
- /* Adjust our key */
- for (i=0,p=randomP; i<4; i++) {
- r = (*p++ + r) * c1 + c2;
- }
-
- /* Decrypt up to, but not including, the first '%' sign */
- if (f->b_cnt > 0) {
- for (i = 0; i < f->b_cnt; i++)
- if (*(f->b_ptr + i) == '%')
- break;
-
- if (i < f->b_cnt) {
- if (i == 0)
- f->b_cnt = 0;
- else
- f->b_cnt = T1Decrypt(f->b_ptr, i);
- } else
- f->b_cnt = T1Decrypt(f->b_ptr, f->b_cnt);
- }
- Decrypt = 1;
- return (T1Feof(f))?NULL:f;
-} /* end eexec */
-#endif
-
-/* -------------------------------------------------------------- */
-STATIC int
-T1Decrypt(unsigned char *p, int len)
-{
- int n;
- int H = 0, L;
- unsigned char *inp = p;
- unsigned char *tblP;
-
- if (asc) {
- if (haveextrach) {
- H = extrach;
- tblP = LowHexP;
- }
- else tblP = HighHexP;
- for (n=0; len>0; len--) {
- L = tblP[*inp++];
- if (L == HWHITE_SPACE) continue;
- if (L > LAST_HDIGIT) break;
- if (tblP == HighHexP) { /* Got first hexit value */
- H = L;
- tblP = LowHexP;
- } else { /* Got second hexit value; compute value and store it */
- n++;
- tblP = HighHexP;
- H |= L;
- /* H is an int, 0 <= H <= 255, so all of this will work */
- *p++ = H ^ (r >> 8);
- r = (H + r) * c1 + c2;
- }
- }
- if (tblP != HighHexP) { /* We had an odd number of hexits */
- extrach = H;
- haveextrach = 1;
- } else haveextrach = 0;
- return n;
- } else {
- for (n = len; n>0; n--) {
- H = *inp++;
- *p++ = H ^ (r >> 8);
- r = (H + r) * c1 + c2;
- }
- return len;
- }
-} /* end Decrypt */
-
-/* -------------------------------------------------------------- */
-STATIC int /* Refill stream buffer */
-T1Fill(F_FILE *f) /* Stream descriptor */
-{
- int rc;
-
- rc = read(f->fd, f->b_base, F_BUFSIZ);
- /* propagate any error or eof to current file */
- if (rc <= 0) {
- if (rc == 0) /* means EOF */
- f->flags |= FIOEOF;
- else {
- f->error = (short)-rc;
- f->flags |= FIOERROR;
- rc = 0;
- }
- }
- f->b_ptr = f->b_base;
- if (Decrypt) rc = T1Decrypt(f->b_base, rc);
- return rc;
-} /* end Fill */
diff --git a/nx-X11/lib/font/Type1/t1malloc.c b/nx-X11/lib/font/Type1/t1malloc.c
deleted file mode 100644
index 20d4212cd..000000000
--- a/nx-X11/lib/font/Type1/t1malloc.c
+++ /dev/null
@@ -1,759 +0,0 @@
-/* $Xorg: t1malloc.c,v 1.3 2000/08/17 19:46:34 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
- * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
- * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
- * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
- * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
- * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/t1malloc.c,v 1.11 2002/02/18 20:51:57 herrb Exp $ */
- /* MALLOC CWEB V0004 LOTS */
-/*
-:h1.MALLOC - Fast Memory Allocation
-
-This module is meant to provide portable C-style memory allocation
-routines (malloc/free).
-
-&author. Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com)
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifndef FONTMODULE
-#include <stdio.h>
-#else
-#include "Xdefs.h" /* Bool declaration */
-#include "Xmd.h" /* INT32 declaration */
-#include "os.h"
-#include "xf86_ansic.h"
-#endif
-#include "objects.h" /* get #define for Abort() */
-
-
-/*
-:h3.Define NULL
-
-In the beginning, C compilers made no assumptions about NULL. It was
-even theoretically possible that NULL would not be 0. ANSI has tied
-this down a bit. The following definition seems to be the most
-popular (in terms of reducing compiler complaints), however, if your
-compiler is unhappy about it, you can redefine it on the command line:
-*/
-#ifndef NULL
-#include <stddef.h>
-#endif
-/*
-Of course, NULL is important because xiMalloc() is defined to return
-NULL when out of memory.
-
-:h2.Data Structures Used to Manage Free Memory
-
-:h3.The "freeblock" Structure
-
-The list of available memory blocks is a doubly-linked list. Each
-block begins with the following structure:
-*/
-
-struct freeblock {
- long size; /* number of 'longs' in block,
- including this header */
- struct freeblock *fore; /* forward in doubly-linked list */
- struct freeblock *back; /* backward in doubly-linked list */
-} ;
-/*
-In addition, each free block has a TRAILER that is simply the 'size'
-repeated. Thus 'size' is found at the beginning of the block and at the
-end of the block (size-1 longs away). 'size' includes both the header
-and the trailer.
-
-When a block is allocated, its 'size' is turned negative (both at the
-beginning and at the end). Thus, checking whether two blocks may be
-combined is very simple. We merely examine both neighboring blocks'
-size to see if they are positive (and hence available for combination).
-
-The memory address returned to the user is therefore one "long" below the
-size, and one extra "long" is added to the end of the block (beyond what
-the user requested) to store the trailing size.
-
-:h3."firstfree" and "lastfree", the Anchors to the Free List
-
-"firstfree" points to the first available free block; "lastfree" points
-to the end of the chain of available blocks. These are linked together
-by initialization code; see :hdref refid=addmem..
-*/
-
-static struct freeblock firstfree = { 0L, NULL, NULL };
-static struct freeblock lastfree = { 0L, NULL, NULL };
-
-/*
-:h3."firstcombined" and "uncombined", Keeping Track of Uncombined Blocks
-
-This module is designed to make the combining of adjacent free memory
-blocks be very fast. Nonetheless, combining blocks is naturally the
-most expensive part of any memory system. In an X system,
-it is worthwhile to defer the combination for a while, because
-frequently we will end up asking for a block of exactly the same
-size that we recently returned and we can save ourselves some work.
-
-"MAXUNCOMBINED" is the maximum number of uncombined blocks that we will
-allow at any time:
-*/
-
-#define MAXUNCOMBINED 3
-
-/*
-"firstcombined" is a pointer into the free list. The uncombined blocks
-are always at the front of the list. "firstcombined" points to the
-first block that has been combined.
-*/
-static struct freeblock *firstcombined = &lastfree;
-static short uncombined = 0; /* current number of uncombined blocks */
-
-/*
-Uncombined blocks have a negative 'size'; in this they are like
-allocated blocks.
-
-We store a distinctive hex pattern in 'size' when we combine a block
-to help us debug:
-*/
-#define COMBINED 0xBADBAD
-
-/*
-:h3.DEBUGWORDS - Extra Memory Saved With Each Block for Debug
-
-We add 'DEBUGWORDS' words to each allocated block to put interesting
-debug information:
-*/
-#ifndef DEBUGWORDS
-#define DEBUGWORDS 0
-#endif
-
-/*
-:h3.MINEXCESS - Amount of "Excess" We Would be Willing to Ignore
-
-When we search the free list to find memory for a user request, we
-frequently find an area that is bigger than what the user has asked for.
-Normally we put the remaining words (the excess) back on the free list.
-However, if the area is just slightly bigger than what the user needs,
-it is counter-productive to do this, as the small amount recovered tends
-to hurt by increasing memory fragmentation rather than help by providing
-more available memory. "MINEXCESS" is the number of words that must be
-recovered before we would bother to put the excess back on the free
-list. If there is not enough excess, we just give the user more than he
-asked for.
-*/
-
-#define MINEXCESS (7 + DEBUGWORDS)
-
-/*
-:h3.Some Flags for Debug
-*/
-
-long AvailableWords = 0; /* number of words available in memory */
-char mallocdebug = 0; /* a flag that enables some chatty printf's */
-
-/*
-:h3.Prototypes of static functions
-*/
-
-static void combine ( void );
-static void freeuncombinable ( long *addr, long size );
-static void unhook ( struct freeblock *p );
-static void dumpchain ( void );
-#ifdef notused
-static void reportarea ( long *area );
-#endif
-
-/*
-:h3.whocalledme() - Debug for Memory Leaks
-
-This routine is 68000-specific; it copies the value of the application's
-curOper variable (which is often a pointer to a character string), and
-the first part of the stack at the time malloc was called into the
-DEBUGWORDS area reserved with each block.
-We use it to see who is malloc-ing memory without free-ing it.
-*/
-
-#if DEBUGWORDS
-
-static void
-whocalledme(long *addr, /* address of memory block */
- long *stack) /* address of malloc's parameter on stack */
-{
- register long size; /* size of memory block */
- register int i; /* loop index */
- extern char *curOper; /* ptr to last operator (kept by appl.) */
-
- stack--;
- size = - *addr;
-
- addr += size - 1 - DEBUGWORDS;
- *addr++ = (long) curOper;
- for (i=0; i < DEBUGWORDS-1; i++)
- *addr++ = *stack++;
-}
-#else
-
-#define whocalledme(addr, stack)
-
-#endif
-/*
-:h2.xiFree() - User-Callable "Return Memory" Routine
-
-The actual beginning of the block is one 'long' before the address we
-gave to the user. The block begins and ends with '-size' in words.
-*/
-
-void
-xiFree(long *addr) /* user's memory to be returned */
-{
- register long size; /* amount of memory in this block */
- register struct freeblock *p; /* identical to 'addr' */
-
- if (addr == NULL) { /* common "mistake", so allow it (CHT) */
- printf("\nxiFree(NULL)?\n");
- return;
- }
-
- size = *--addr;
-/*
-Make sure this address looks OK; 'size' must be less than zero (meaning
-the block is allocated) and should be repeated at the end of the block.
-*/
- if (size >= 0)
- Abort("free: bad size");
- if (addr[-1 - size] != size)
- Abort("free: mismatched size");
-/*
-Now make this a 'freeblock' structure and tack it on the FRONT of the
-free list (where uncombined blocks go):
-*/
- AvailableWords -= size; /* actually INCREASES AvailableWords */
- p = (struct freeblock *) addr;
- p->back = &firstfree;
- (p->fore = firstfree.fore)->back = p;
- firstfree.fore = p;
-/*
-If we have too many uncombined blocks, call combine() to combine one.
-*/
- if (++uncombined > MAXUNCOMBINED) {
- combine();
- if (mallocdebug) {
- printf("xiFree(%p) with combine, ", (void *)addr);
- dumpchain();
- }
- }
- else {
- if (mallocdebug) {
- printf("xiFree(%p), ", (void *)addr);
- dumpchain();
- }
- }
-
- return;
-}
-
-/*
-:h3.combine() - Subroutine of xiFree() to Combine Blocks
-
-This routine tries to combine the block just before 'firstcombined'.
-In any event, that block will be moved to the end of the list (after
-'firstcombined').
-*/
-
-static void
-combine(void)
-{
- register struct freeblock *p; /* block we will try to combine */
- register long *addr; /* identical to 'p' for 'long' access */
- register long size; /* size of this block */
- register long size2; /* size of potential combinee */
-
- p = firstcombined->back;
- if (p == &firstfree)
- Abort("why are we combining?");
-
- addr = (long *) p;
- size = - p->size;
- if (--uncombined < 0)
- Abort("too many combine()s");
-
- if (addr[-1] < 0 && addr[size] < 0) {
-/*
-We special case the situation where no combining can be done. Then, we
-just mark the chain "combined" (i.e., positive size), move the
-'firstcombined' pointer back in the chain, and return.
-*/
- addr[0] = addr[size - 1] = size;
- firstcombined = (struct freeblock *) addr;
- return;
- }
-/*
-Otherwise, we unhook this pointer from the chain:
-*/
- unhook(p);
-/*
-First we attempt to combine this with the block immediately above:
-*/
- size2 = addr[-1];
- if (size2 > 0) { /* i.e., block above is free */
- *addr = COMBINED; /* might help debug */
- addr -= size2;
- if (addr[0] != size2)
- Abort("bad block above");
- unhook((struct freeblock *)addr);
- size += size2;
- }
-/*
-At this point 'addr' and 'size' may be the original block, or it may be
-the newly combined block. Now we attempt to combine it with the block
-below:
-*/
- p = (struct freeblock *) (addr + size);
- size2 = p->size;
-
- if (size2 > 0) { /* i.e., block below is free */
- p->size = COMBINED;
- if (size2 != ((long *) p)[size2 - 1])
- Abort("bad block below");
- unhook(p);
- size += size2;
- }
-/*
-Finally we take the newly combined block and put it on the end of the
-chain by calling the "freeuncombinable" subroutine:
-*/
- freeuncombinable(addr, size);
-}
-
-/*
-:h3.freeuncombinable() - Free a Block That Need Not be Combined
-
-This block is "uncombinable" either because we have already combined
-it with its eligible neighbors, or perhaps because we know it has
-no neighbors.
-*/
-
-static void
-freeuncombinable(long *addr, /* address of the block to be freed */
- long size) /* size of block in words */
-{
- register struct freeblock *p; /* a convenient synonym for 'addr' */
-
-/*
-Mark block allocated and combined by setting its 'size' positive:
-*/
- addr[size - 1] = addr[0] = size;
-/*
-Now tack the block on the end of the doubly-linked free list:
-*/
- p = (struct freeblock *) addr;
- p->fore = &lastfree;
- (p->back = lastfree.back)->fore = p;
- lastfree.back = p;
-/*
-If we have previously had no combined blocks, we must update
-'firstcombined' to point to this block:
-*/
- if (firstcombined->fore == NULL)
- firstcombined = p;
-}
-
-/*
-:h3.unhook() - Unhook a Block from the Doubly-linked List
-
-The only tricky thing here is to make sure that 'firstcombined' is
-updated if this block happened to be the old 'firstcombined'. (We
-would never be unhooking 'firstfree' or 'lastfree', so we do not
-have to worry about the end cases.)
-*/
-
-static void
-unhook(struct freeblock *p) /* block to unhook */
-{
- p->back->fore = p->fore;
- p->fore->back = p->back;
-
- if (firstcombined == p)
- firstcombined = p->fore;
-}
-/*
-:h2.xiMalloc() - Main User Entry Point for Getting Memory
-
-We have two slightly different versions of xiMalloc(). In the case
-where we have TYPE1IMAGER and a font cache, we are prepared, when nominally
-out of memory, to loop calling TYPE1IMAGER's GimeSpace() to release font
-cache.
-*/
-
-/* The following code put in by MDC on 11/10/90 */
-
-#ifdef TYPE1IMAGER
-
-static char *malloc_local(unsigned size);
-
-char *
-xiMalloc(unsigned size)
-{
- char *memaddr;
-
- while ( (memaddr = malloc_local(size)) == NULL ) {
- /* Ask TYPE1IMAGER to give us some of its cache back */
- if ( I_GimeSpace() == 0 ) break; /* We are really, really, out of memory */
- }
-
- return(memaddr);
-}
-#endif
-
-/*
-Now begins the real workhorse xiMalloc() (called 'malloc_local' if
-we are taking advantage of TYPE1IMAGER). Its argument is an unsigned;
-at least that lets users with 16-bit integers get a 64K chunk of
-memory, and it is also compatible with the definition of a "size_t"
-in most systems.
-*/
-#ifdef TYPE1IMAGER
-static char *
-malloc_local(unsigned Size) /* number of bytes the user requested */
-#else
-char *
-xiMalloc(unsigned Size)
-#endif
-{
- register long size = (long)Size; /* a working register for size */
- register struct freeblock *p; /* tentative block to be returned */
- register long excess; /* words in excess of user request */
- register long *area; /* a convenient synonym for 'p' */
-
-/*
-First, we increase 'size' to allow for the two size fields we will
-save with the block, plus any information for debug purposes.
-Then we ensure that the block will be large enough to hold our
-'freeblock' information. Finally we convert it to be in words
-(longs), not bytes, increased to span an integral number of double
-words, so that all memory blocks dispensed with be properly aligned.
-*/
- size += 2*sizeof(long) + DEBUGWORDS*sizeof(long);
- if (size < sizeof(struct freeblock) + sizeof(long))
- size = sizeof(struct freeblock) + sizeof(long);
- size = ((unsigned) (size + sizeof(double) - 1) / sizeof(double)) * (sizeof(double)/sizeof(long));
-
-/*
-For speed, we will try first to give the user back a very recently
-returned block--one that is on the front of the chain before
-'firstcombined'. These blocks still have negative sizes, and need
-only to be "unhook"ed:
-*/
- size = -size;
- for (p=firstfree.fore; p != firstcombined; p=p->fore) {
- if (p->size == size) {
- unhook(p);
- uncombined--;
- if (mallocdebug) {
- printf("fast xiMalloc(%ld) = %p, ", size,
- (void *)p);
- dumpchain();
- }
- AvailableWords += size; /* decreases AvailableWords */
- whocalledme(p, &Size);
- return((char *)&p->fore);
- }
- }
-/*
-Well, if we get here, there are no uncombined blocks matching the user's
-request. So, we search the rest of the chain for a block that is big
-enough. ('size' becomes positive again):
-*/
- size = -size;
- for (;; p = p->fore) {
-/*
-If we hit the end of the chain (p->size == 0), we are probably out of
-memory. However, we should first try to combine any memory that has
-not yet been combined before we give that pessimistic answer. If
-we succeed in combining, we can call ourselves recursively to try to
-allocate the requested amount:
-*/
- if (p->size == 0) {
- if (uncombined <= 0)
- return(NULL);
- while (firstfree.fore != firstcombined)
- combine();
- return(xiMalloc(sizeof(long) * (size - 2 - DEBUGWORDS)));
- }
-/*
-Otherwise, we keep searching until we find a big enough block:
-*/
- if (p->size >= size)
- break;
- }
-/*
-At this point, 'p' contains a block at least as big as what the user
-requested, so we take it off the free chain. If it is excessively big,
-we return the excess to the free chain:
-*/
- unhook(p);
- excess = p->size - size;
- area = (long *) p;
-
- if (excess > MINEXCESS)
- freeuncombinable(area + size, excess);
- else
- size = p->size;
-
- AvailableWords -= size;
-/*
-Mark first and last word of block with the negative of the size, to
-flag that this block is allocated:
-*/
- area[size - 1] = area[0] = - size;
-
- if (mallocdebug) {
- printf("slow xiMalloc(%ld) @ %p, ", size, (void *)area);
- dumpchain();
- }
- whocalledme(area, &Size);
-/*
-The address we return to the user is one 'long' BELOW the address of
-the block. This protects our 'size' field, so we can tell the size
-of the block when he returns it to us with xiFree(). Also, he better not
-touch the 'size' field at the end of the block either. (That would be
-nasty of him, as he would be touching memory outside of the bytes he
-requested).
-*/
- return((char *) (area + 1));
-}
-
-/*
-:h2 id=addmem.addmemory() - Initialize Free Memory
-
-This routine should be called at initialization to initialize the
-free chain. There is no standard way to do this in C.
-We want the memory dispensed by malloc to be aligned on a double word
-boundary (because some machines either require alignment, or are
-more efficient if accesses are aligned). Since the total size of
-any block created by malloc is an integral number of double words,
-all we have to do to ensure alignment is to adjust each large block
-added to the free chain to start on an odd long-word boundary.
-(Malloc's size field will occupy the odd long and the user's memory
-will then begin on an even boundary.) Since we fill in additional
-size fields at the beginning and end of each of the large freeblocks,
-we need only adjust the address passed to addmemory to a double word
-boundary.
-*/
-
-#define MAXAREAS 10 /* there can be this many calls to addmemory() */
-
-static long *freearea[MAXAREAS] = { NULL }; /* so we can report later */
-
-void
-addmemory(long *addr, /* beginning of free area */
- long size) /* number of bytes of free area */
-{
- register int i; /* loop index variable */
- register long *aaddr; /* aligned beginning of free area */
-
-#if DEBUGWORDS
- printf("malloc has DEBUGWORDS=%d\n", DEBUGWORDS);
-#endif
-/*
-First link together firstfree and lastfree if necessary:
-*/
- if (firstfree.fore == NULL) {
- firstfree.fore = &lastfree;
- lastfree.back = &firstfree;
- }
-/*
-We'll record where the area was that was given to us for later reports:
-*/
- for (i=0; i < MAXAREAS; i++)
- if (freearea[i] == NULL) break;
- if (i >= MAXAREAS)
- Abort("too many addmemory()s");
- aaddr = (long *) ( ((long) addr + sizeof(double) - 1) & - (long)sizeof(double) );
- size -= (char *) aaddr - (char *) addr;
- freearea[i] = aaddr;
-/*
-Convert 'size' to number of longs, and store '-size' guards at the
-beginning and end of this area so we will not accidentally recombine the
-first or last block:
-*/
- size /= sizeof(long);
-
- AvailableWords += size - 2;
-
- aaddr[size - 1] = aaddr[0] = -size;
-/*
-Finally, call 'freeuncombinable' to put the remaining memory on the
-free list:
-*/
- freeuncombinable(aaddr + 1, size - 2);
-}
-
-/*
-:h3.delmemory() - Delete Memory Pool
-*/
-void
-delmemory(void)
-{
- register int i;
-
- AvailableWords = 0;
- firstfree.fore = &lastfree;
- lastfree.back = &firstfree;
- firstcombined = &lastfree;
- uncombined = 0;
- for (i=0; i<MAXAREAS; i++)
- freearea[i] = NULL;
-}
-
-/*
-:h2.Debug Routines
-
-:h3.dumpchain() - Print the Chain of Free Blocks
-*/
-
-static void
-dumpchain(void)
-{
- register struct freeblock *p; /* current free block */
- register long size; /* size of block */
- register struct freeblock *back; /* block before 'p' */
- register int i; /* temp variable for counting */
-
- printf("DUMPING FAST FREE LIST:\n");
- back = &firstfree;
- for (p = firstfree.fore, i=uncombined; p != firstcombined;
- p = p->fore) {
- if (--i < 0)
- Abort("too many uncombined areas");
- size = p->size;
- printf(". . . area @ %p, size = %ld\n", (void *)p, -size);
- if (size >= 0 || size != ((int *) p)[-1 - size])
- Abort("dumpchain: bad size");
- if (p->back != back)
- Abort("dumpchain: bad back");
- back = p;
- }
- printf("DUMPING COMBINED FREE LIST:\n");
- for (; p != &lastfree; p = p->fore) {
- size = p->size;
- printf(". . . area @ %p, size = %ld\n", (void *)p, size);
- if (size <= 0 || size != ((int *) p)[size - 1])
- Abort("dumpchain: bad size");
- if (p->back != back)
- Abort("dumpchain: bad back");
- back = p;
- }
- if (back != lastfree.back)
- Abort("dumpchain: bad lastfree");
-}
-
-#ifdef notused
-/*
-:h3.reportarea() - Display a Contiguous Set of Memory Blocks
-*/
-
-static void
-reportarea(long *area) /* start of blocks (from addmemory) */
-{
- register long size; /* size of current block */
- register long wholesize; /* size of original area */
- register struct freeblock *p; /* pointer to block */
-
- if (area == NULL)
- return;
- wholesize = - *area++;
- wholesize -= 2;
-
- while (wholesize > 0) {
- size = *area;
- if (size < 0) {
- register int i,j;
-
- size = -size;
- printf("Allocated %5ld bytes at %p, first words=%08lx %08lx\n",
- size * sizeof(long), area + 1, area[1], area[2]);
-#if DEBUGWORDS
- printf(" ...Last operator: %s\n",
- (char *)area[size-DEBUGWORDS-1]);
-#endif
- for (i = size - DEBUGWORDS; i < size - 2; i += 8) {
- printf(" ...");
- for (j=0; j<8; j++)
- printf(" %08lx", area[i+j]);
- printf("\n");
- }
-
- }
- else {
- printf("Free %ld bytes at %p\n", size * sizeof(long),
- area);
- if (size == 0)
- Abort("zero sized memory block");
-
- for (p = firstfree.fore; p != NULL; p = p->fore)
- if ((long *) p == area) break;
- if ((long *) p != area)
- Abort("not found on forward chain");
-
- for (p = lastfree.back; p != NULL; p = p->back)
- if ((long *) p == area) break;
- if ((long *) p != area)
- Abort("not found on backward chain");
- }
- if (area[0] != area[size - 1])
- Abort("unmatched check sizes");
- area += size;
- wholesize -= size;
- }
-}
-
-/*
-:h3.MemReport() - Display All of Memory
-*/
-
-void
-MemReport(void)
-{
- register int i;
-
- dumpchain();
-
- for (i=0; i<MAXAREAS; i++)
- reportarea(freearea[i]);
-}
-
-/*
-:h3.MemBytesAvail - Display Number of Bytes Now Available
-*/
-
-void
-MemBytesAvail(void)
-{
- printf("There are now %ld bytes available\n", AvailableWords *
- sizeof(long) );
-}
-#endif
diff --git a/nx-X11/lib/font/Type1/t1snap.c b/nx-X11/lib/font/Type1/t1snap.c
deleted file mode 100644
index 5618b581b..000000000
--- a/nx-X11/lib/font/Type1/t1snap.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* $Xorg: t1snap.c,v 1.3 2000/08/17 19:46:34 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/t1snap.c,v 1.3 1999/08/22 08:58:54 dawes Exp $ */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "objects.h"
-#include "spaces.h"
-#include "paths.h"
-#include "pictures.h"
-
-/*
-:h2.Handle Functions
-
-:h3.Phantom() - Returns a Move Segment Equivalent to Handles
-
-This is a user operator. Its new name is QueryHandle.
-*/
-
-struct segment *
-t1_Phantom(struct segment *p) /* object to take the Phantom of */
-{
- struct fractpoint pt; /* handle size will built here */
-
- if (p == NULL)
- pt.x = pt.y = 0;
- else
- PathDelta(p, &pt);
-
- return(PathSegment(MOVETYPE, pt.x, pt.y));
-}
-
-/*
-:h3.Snap() - Force Ending Handle of Object to Origin
-
-This is a user operator.
-*/
-
-struct segment *
-t1_Snap(struct segment *p) /* path to snap */
-{
- struct fractpoint pt; /* for finding length of path */
-
- if (p == NULL)
- return(NULL);
- p = UniquePath(p);
-
- PathDelta(p, &pt);
- if (p->last->type == MOVETYPE) {
- p->last->dest.x -= pt.x;
- p->last->dest.y -= pt.y;
- }
- else
- p = JoinSegment(p, MOVETYPE, -pt.x, -pt.y, NULL);
- return(p);
-}
diff --git a/nx-X11/lib/font/Type1/t1stdio.h b/nx-X11/lib/font/Type1/t1stdio.h
deleted file mode 100644
index 2ed083253..000000000
--- a/nx-X11/lib/font/Type1/t1stdio.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* $Xorg: t1stdio.h,v 1.3 2000/08/17 19:46:34 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/t1stdio.h,v 1.9 2001/01/17 19:43:24 dawes Exp $ */
-/* T1IO FILE structure and related stuff */
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#ifdef XFree86LOADER
-#undef FILE
-#endif
-#define FILE F_FILE
-typedef unsigned char F_char;
-
-typedef struct F_FILE {
- F_char *b_base; /* Pointer to beginning of buffer */
- long b_size; /* Size of the buffer */
- F_char *b_ptr; /* Pointer to next char in buffer */
- long b_cnt; /* Number of chars remaining in buffer */
- F_char flags; /* other flags; != 0 means getc must call fgetc */
- F_char ungotc; /* Place for ungotten char; flag set if present */
- short error; /* error status */
- int fd; /* underlying file descriptor */
-} F_FILE;
-
-
-/* defines for flags */
-#define UNGOTTENC (0x01)
-#define FIOEOF (0x80)
-#define FIOERROR (0x40)
-
-#ifndef NULL
-#include <stddef.h>
-#endif
-
-#define EOF (-1) /* end of file */
-#define F_BUFSIZ (512)
-
-#define _XT1getc(f) \
- ( \
- ( ((f)->b_cnt > 0) && ((f)->flags == 0) ) ? \
- ( (f)->b_cnt--, (unsigned int)*( (f)->b_ptr++ ) ) : \
- T1Getc(f) \
- )
-
-#define T1Feof(f) (((f)->flags & FIOEOF) && ((f)->b_cnt==0))
-
-#if XFONT_CID
-extern F_FILE *CIDeexec ( FILE *f );
-#endif
-
-extern FILE *T1Open ( char *fn, char *mode );
-extern int T1Getc ( FILE *f );
-extern int T1Ungetc ( int c, FILE *f );
-extern int T1Read ( char *buffP, int size, int n, FILE *f );
-extern int T1Close ( FILE *f );
-extern FILE *T1eexec ( FILE *f );
-extern void resetDecrypt ( void );
-
-#undef fclose
-#undef fopen
-#undef ungetc
-#undef fgetc
-#undef fread
-#undef feof
-#undef ferror
-#define fclose(f) T1Close(f)
-#define fopen(name,mode) T1Open(name,mode)
-#define ungetc(c,f) T1Ungetc(c,f)
-#define fgetc(f) T1Getc(f)
-
-#define fread(bufP,size,n,f) T1Read(bufP,size,n,f)
-#define feof(f) (((f)->flags & FIOEOF) && ((f)->b_cnt==0))
-#define ferror(f) (((f)->flags & FIOERROR)?(f)->error:0)
diff --git a/nx-X11/lib/font/Type1/t1stub.c b/nx-X11/lib/font/Type1/t1stub.c
deleted file mode 100644
index 2fb1d797f..000000000
--- a/nx-X11/lib/font/Type1/t1stub.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* $Xorg: t1stub.c,v 1.3 2000/08/17 19:46:34 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/t1stub.c,v 1.8 2001/01/17 19:43:24 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef FONTMODULE
-#include "Xdefs.h" /* Bool declaration */
-#include "Xmd.h" /* INT32 declaration */
-#include "os.h"
-#include "xf86_ansic.h"
-#else
-#include <stdio.h>
-#endif
-#include "objects.h" /* get #define for Abort() */
-
-static void
-xiStub(void)
-{
- printf("xiStub called\n");
- Abort("xiStub called");
-}
-
-void
-t1_DumpText(void)
-{
- xiStub();
-}
diff --git a/nx-X11/lib/font/Type1/t1test.c b/nx-X11/lib/font/Type1/t1test.c
deleted file mode 100644
index 1da74168f..000000000
--- a/nx-X11/lib/font/Type1/t1test.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/* $Xorg: t1test.c,v 1.3 2000/08/17 19:46:34 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/FSproto.h>
-
-#define DECIPOINTSPERINCH 722.7
-#define DEFAULTRES 75
-#define DEFAULTPOINTSIZE 120
-
-FontScalableRec vals;
-FontEntryRec entry;
-
-int main(argc, argv)
- int argc;
- char *argv[];
-{
- int h;
- char temp[80];
- char file[80];
- char glyphcode[1];
- FontPtr fontptr;
- CharInfoRec *glyphs[1];
- int count;
- int code;
- int rc = -1;
-
- T1FillVals(&vals);
- Type1RegisterFontFileFunctions();
- entry.name.name = "-adobe-utopia-medium-r-normal--0-0-0-0-p-0-iso8859-1";
-
- for (;;) {
- printf("T1TEST: ");
- gets(temp);
- glyphcode[0] = '\0';
-
- switch(temp[0]) {
-
- case 'c':
- if (1 != sscanf(&temp[2], "%c", glyphcode))
- printf("glyph code?\n");
- break;
-
- case 'x':
- if (1 != sscanf(&temp[2], "%x", &code))
- printf("glyph code?\n");
- else
- glyphcode[0] = code;
- break;
-
- case 'd':
- if (1 != sscanf(&temp[2], "%d", &code))
- printf("glyph code?\n");
- else
- glyphcode[0] = code;
- break;
-
- case 'h':
- if (1 != sscanf(&temp[2], "%d", &h))
- printf("height?\n");
- vals.pixel = h;
- rc = Type1OpenScalable(NULL, &fontptr, 0, &entry, file, &vals, 0, 0);
- break;
-
- case 'f':
- if (1 != sscanf(&temp[2], "%s", file))
- printf("file name?\n");
- rc = Type1OpenScalable(NULL, &fontptr, 0, &entry, file, &vals, 0, 0);
- break;
-
- case 't':
- if (1 != sscanf(&temp[2], "%s", file))
- printf("file name?\n");
- vals.pixel = 8;
- rc = Type1OpenScalable(NULL, &fontptr, 0, &entry, file, &vals, 0, 0);
- if (rc != Successful) break;
- vals.pixel = 20;
- rc = Type1OpenScalable(NULL, &fontptr, 0, &entry, file, &vals, 0, 0);
- if (rc != Successful) break;
- vals.pixel = 50;
- rc = Type1OpenScalable(NULL, &fontptr, 0, &entry, file, &vals, 0, 0);
- glyphcode[0] = 'A';
- printf("From font '%s':\n", file);
- break;
-
- case 'q':
- return 0;
-
- default:
- printf("unknown command '%c', must one of 'qfchdxt'\n", temp[0]);
-
- }
- if (rc == Successful) {
- if (glyphcode[0] != '\0') {
- (*fontptr->get_glyphs)(fontptr, 1, glyphcode, 0, &count, glyphs);
- if (count > 0)
- Display(glyphs[0]);
- else
- printf("Code %x not valid in this font\n", glyphcode[0]);
- }
- }
- else
- printf("Bad font (rc = %d, file='%s')\n", rc, file);
- }
-}
-
-static void Display(glyph)
- CharInfoRec *glyph;
-{
- int h,w;
- unsigned char *p;
- int data;
- int i;
-
- p = glyph->bits;
-
- printf("Metrics: left=%d, right=%d, w=%d, above=%d, below=%d\n",
- glyph->metrics.leftSideBearing,
- glyph->metrics.rightSideBearing,
- glyph->metrics.characterWidth,
- glyph->metrics.ascent,
- glyph->metrics.descent);
-
- for (h=glyph->metrics.ascent + glyph->metrics.descent; --h >= 0;) {
- w = glyph->metrics.rightSideBearing - glyph->metrics.leftSideBearing;
- while (w > 0) {
- data = *p++;
- for (i=0; i<8; i++) {
- if (--w < 0)
- break;
- if (data & 0x80)
- printf("X");
- else
- printf(".");
- data <<= 1;
- }
- }
- printf("\n");
- }
-}
-
-T1FillVals(vals)
- FontScalablePtr vals;
-{
- FontResolutionPtr res;
- int x_res = DEFAULTRES;
- int y_res = DEFAULTRES;
- int pointsize = DEFAULTPOINTSIZE; /* decipoints */
- int num_res;
-
- /* Must have x, y, and pixel */
- if (!vals->x || !vals->y || !vals->pixel) {
- res = GetClientResolutions(&num_res);
- if (num_res) {
- if (res->x_resolution)
- x_res = res->x_resolution;
- if (res->y_resolution)
- y_res = res->y_resolution;
- if (res->point_size)
- pointsize = res->point_size;
- }
- if (!vals->x)
- vals->x = x_res;
- if (!vals->y)
- vals->y = y_res;
- if (!vals->point) {
- if (!vals->pixel) vals->point = pointsize;
- else vals->point = (vals->pixel * DECIPOINTSPERINCH) / vals->y;
- }
- if (!vals->pixel)
- vals->pixel = (vals->point * vals->y) / DECIPOINTSPERINCH;
- /* Make sure above arithmetic is normally in range and will
- round properly. +++ */
- }
-}
-
-int CheckFSFormat(format, fmask, bit, byte, scan, glyph, image)
- int format,fmask,*bit,*byte,*scan,*glyph,*image;
-{
- *bit = *byte = 1;
- *glyph = *scan = *image = 1;
- return Successful;
-
-}
-
-char *MakeAtom(p)
- char *p;
-{
- return p;
-}
-
-
-FontResolutionPtr GetClientResolutions(resP)
- int *resP;
-{
- *resP = 0;
-};
-
-char *Xalloc(size)
- int size;
-{
- extern char *malloc();
- return(malloc(size));
-}
-
-void Xfree()
-{
- free();
-}
-
-FontDefaultFormat() { ; }
-
-FontFileRegisterRenderer() { ; }
-
-GenericGetBitmaps() { ; }
-GenericGetExtents() { ; }
-
-FontParseXLFDName() { ; }
-FontComputeInfoAccelerators() { ; }
diff --git a/nx-X11/lib/font/Type1/t1unicode.c b/nx-X11/lib/font/Type1/t1unicode.c
deleted file mode 100644
index 136cc4441..000000000
--- a/nx-X11/lib/font/Type1/t1unicode.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
-Copyright (c) 1998 by Juliusz Chroboczek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-/* $XFree86$ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "t1unicode.h"
-
-static char* table_32[] =
-{ "space", "exclam", "quotedbl", "numbersign", "dollar", "percent",
- "ampersand", "quotesingle", "parenleft", "parenright", "asterisk",
- "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two",
- "three", "four", "five", "six", "seven", "eight", "nine", "colon",
- "semicolon", "less", "equal", "greater", "question", "at", "A", "B",
- "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P",
- "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft",
- "backslash", "bracketright", "asciicircum", "underscore", "grave",
- "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
- "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
- "braceleft", "bar", "braceright", "asciitilde", 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, "space", "exclamdown", "cent", "sterling", "currency", "yen",
- "brokenbar", "section", "dieresis", "copyright", "ordfeminine",
- "guillemotleft", "logicalnot", "hyphen", "registered", "macron",
- "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu",
- "paragraph", "periodcentered", "cedilla", "onesuperior",
- "ordmasculine", "guillemotright", "onequarter", "onehalf",
- "threequarters", "questiondown", "Agrave", "Aacute", "Acircumflex",
- "Atilde", "Adieresis", "Aring", "AE", "Ccedilla", "Egrave", "Eacute",
- "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex",
- "Idieresis", "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex",
- "Otilde", "Odieresis", "multiply", "Oslash", "Ugrave", "Uacute",
- "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls", "agrave",
- "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae",
- "ccedilla", "egrave", "eacute", "ecircumflex", "edieresis", "igrave",
- "iacute", "icircumflex", "idieresis", "eth", "ntilde", "ograve",
- "oacute", "ocircumflex", "otilde", "odieresis", "divide", "oslash",
- "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn",
- "ydieresis", "Amacron", "amacron", "Abreve", "abreve", "Aogonek",
- "aogonek", "Cacute", "cacute", "Ccircumflex", "ccircumflex",
- "Cdotaccent", "cdotaccent", "Ccaron", "ccaron", "Dcaron", "dcaron",
- "Dcroat", "dcroat", "Emacron", "emacron", "Ebreve", "ebreve",
- "Edotaccent", "edotaccent", "Eogonek", "eogonek", "Ecaron", "ecaron",
- "Gcircumflex", "gcircumflex", "Gbreve", "gbreve", "Gdotaccent",
- "gdotaccent", "Gcommaaccent", "gcommaaccent", "Hcircumflex",
- "hcircumflex", "Hbar", "hbar", "Itilde", "itilde", "Imacron",
- "imacron", "Ibreve", "ibreve", "Iogonek", "iogonek", "Idotaccent",
- "dotlessi", "IJ", "ij", "Jcircumflex", "jcircumflex", "Kcommaaccent",
- "kcommaaccent", "kgreenlandic", "Lacute", "lacute", "Lcommaaccent",
- "lcommaaccent", "Lcaron", "lcaron", "Ldot", "ldot", "Lslash",
- "lslash", "Nacute", "nacute", "Ncommaaccent", "ncommaaccent",
- "Ncaron", "ncaron", "napostrophe", "Eng", "eng", "Omacron", "omacron",
- "Obreve", "obreve", "Ohungarumlaut", "ohungarumlaut", "OE", "oe",
- "Racute", "racute", "Rcommaaccent", "rcommaaccent", "Rcaron",
- "rcaron", "Sacute", "sacute", "Scircumflex", "scircumflex",
- "Scommaaccent", "scommaaccent", "Scaron", "scaron", "Tcommaaccent",
- "tcommaaccent", "Tcaron", "tcaron", "Tbar", "tbar", "Utilde",
- "utilde", "Umacron", "umacron", "Ubreve", "ubreve", "Uring", "uring",
- "Uhungarumlaut", "uhungarumlaut", "Uogonek", "uogonek", "Wcircumflex",
- "wcircumflex", "Ycircumflex", "ycircumflex", "Ydieresis", "Zacute",
- "zacute", "Zdotaccent", "zdotaccent", "Zcaron", "zcaron", "longs", 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "florin", 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "Ohorn", "ohorn", 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, "Uhorn", "uhorn", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "Gcaron",
- "gcaron", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- "Aringacute", "aringacute", "AEacute", "aeacute", "Oslashacute",
- "oslashacute", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, "afii57929", "afii64937", 0, 0, 0, 0, 0, 0,
- 0, 0, "circumflex", "caron", 0, "macron", 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, "breve", "dotaccent", "ring", "ogonek", "tilde",
- "hungarumlaut", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "gravecomb",
- "acutecomb", 0, "tildecomb", 0, 0, 0, 0, 0, "hookabovecomb", 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- "dotbelowcomb", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, "tonos", "dieresistonos", "Alphatonos",
- "anoteleia", "Epsilontonos", "Etatonos", "Iotatonos", 0,
- "Omicrontonos", 0, "Upsilontonos", "Omegatonos", "iotadieresistonos",
- "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta",
- "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho",
- 0, "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega",
- "Iotadieresis", "Upsilondieresis", "alphatonos", "epsilontonos",
- "etatonos", "iotatonos", "upsilondieresistonos", "alpha", "beta",
- "gamma", "delta", "epsilon", "zeta", "eta", "theta", "iota", "kappa",
- "lambda", "mu", "nu", "xi", "omicron", "pi", "rho", "sigma1", "sigma",
- "tau", "upsilon", "phi", "chi", "psi", "omega", "iotadieresis",
- "upsilondieresis", "omicrontonos", "upsilontonos", "omegatonos", 0, 0,
- "theta1", "Upsilon1", 0, 0, "phi1", "omega1", 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "afii10023", "afii10051",
- "afii10052", "afii10053", "afii10054", "afii10055", "afii10056",
- "afii10057", "afii10058", "afii10059", "afii10060", "afii10061", 0,
- "afii10062", "afii10145", "afii10017", "afii10018", "afii10019",
- "afii10020", "afii10021", "afii10022", "afii10024", "afii10025",
- "afii10026", "afii10027", "afii10028", "afii10029", "afii10030",
- "afii10031", "afii10032", "afii10033", "afii10034", "afii10035",
- "afii10036", "afii10037", "afii10038", "afii10039", "afii10040",
- "afii10041", "afii10042", "afii10043", "afii10044", "afii10045",
- "afii10046", "afii10047", "afii10048", "afii10049", "afii10065",
- "afii10066", "afii10067", "afii10068", "afii10069", "afii10070",
- "afii10072", "afii10073", "afii10074", "afii10075", "afii10076",
- "afii10077", "afii10078", "afii10079", "afii10080", "afii10081",
- "afii10082", "afii10083", "afii10084", "afii10085", "afii10086",
- "afii10087", "afii10088", "afii10089", "afii10090", "afii10091",
- "afii10092", "afii10093", "afii10094", "afii10095", "afii10096",
- "afii10097", 0, "afii10071", "afii10099", "afii10100", "afii10101",
- "afii10102", "afii10103", "afii10104", "afii10105", "afii10106",
- "afii10107", "afii10108", "afii10109", 0, "afii10110", "afii10193", 0,
- 0, "afii10146", "afii10194", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- "afii10147", "afii10195", "afii10148", "afii10196", 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- "afii10050", "afii10098", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "afii10846", 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- "afii57799", "afii57801", "afii57800", "afii57802", "afii57793",
- "afii57794", "afii57795", "afii57798", "afii57797", "afii57806", 0,
- "afii57796", "afii57807", "afii57839", "afii57645", "afii57841",
- "afii57842", "afii57804", "afii57803", "afii57658", 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, "afii57664", "afii57665", "afii57666", "afii57667",
- "afii57668", "afii57669", "afii57670", "afii57671", "afii57672",
- "afii57673", "afii57674", "afii57675", "afii57676", "afii57677",
- "afii57678", "afii57679", "afii57680", "afii57681", "afii57682",
- "afii57683", "afii57684", "afii57685", "afii57686", "afii57687",
- "afii57688", "afii57689", "afii57690", 0, 0, 0, 0, 0, "afii57716",
- "afii57717", "afii57718", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "afii57388", 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, "afii57403", 0, 0, 0, "afii57407", 0, "afii57409",
- "afii57410", "afii57411", "afii57412", "afii57413", "afii57414",
- "afii57415", "afii57416", "afii57417", "afii57418", "afii57419",
- "afii57420", "afii57421", "afii57422", "afii57423", "afii57424",
- "afii57425", "afii57426", "afii57427", "afii57428", "afii57429",
- "afii57430", "afii57431", "afii57432", "afii57433", "afii57434", 0, 0,
- 0, 0, 0, "afii57440", "afii57441", "afii57442", "afii57443",
- "afii57444", "afii57445", "afii57446", "afii57470", "afii57448",
- "afii57449", "afii57450", "afii57451", "afii57452", "afii57453",
- "afii57454", "afii57455", "afii57456", "afii57457", "afii57458", 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "afii57392", "afii57393",
- "afii57394", "afii57395", "afii57396", "afii57397", "afii57398",
- "afii57399", "afii57400", "afii57401", "afii57381", 0, 0, "afii63167",
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "afii57511", 0, 0, 0, 0, "afii57506",
- 0, 0, 0, 0, 0, 0, 0, "afii57507", 0, "afii57512", 0, 0, 0, 0, 0, 0, 0,
- 0, "afii57513", 0, 0, 0, 0, 0, 0, "afii57508", 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, "afii57505", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "afii57509", 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, "afii57514", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "afii57519", 0, 0, "afii57534", 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-static char* table_2000[] = /* general punctuation, s*scripts, currency */
-{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "afii61664", "afii301", "afii299",
- "afii300", 0, 0, "figuredash", "endash", "emdash", "afii00208", 0,
- "underscoredbl", "quoteleft", "quoteright", "quotesinglbase",
- "quotereversed", "quotedblleft", "quotedblright", "quotedblbase", 0,
- "dagger", "daggerdbl", "bullet", 0, "onedotenleader",
- "twodotenleader", "ellipsis", 0, 0, 0, 0, 0, "afii61573", "afii61574",
- "afii61575", 0, "perthousand", 0, "minute", "second", 0, 0, 0, 0, 0,
- "guilsinglleft", "guilsinglright", 0, "exclamdbl", 0, 0, 0, 0, 0, 0,
- 0, "fraction", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, "zerosuperior", 0, 0, 0, "foursuperior", "fivesuperior",
- "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", 0, 0,
- 0, "parenleftsuperior", "parenrightsuperior", "nsuperior",
- "zeroinferior", "oneinferior", "twoinferior", "threeinferior",
- "fourinferior", "fiveinferior", "sixinferior", "seveninferior",
- "eightinferior", "nineinferior", 0, 0, 0, "parenleftinferior",
- "parenrightinferior", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, "colonmonetary", 0, "franc", "lira", 0, 0, "peseta", 0, 0,
- "afii57636", "dong", "Euro", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-static char* table_2500[]= /* line and box drawing */
-{ "SF100000", 0, "SF110000", 0, 0, 0, 0, 0, 0, 0, 0, 0, "SF010000", 0,
- 0, 0, "SF030000", 0, 0, 0, "SF020000", 0, 0, 0, "SF040000", 0, 0, 0,
- "SF080000", 0, 0, 0, 0, 0, 0, 0, "SF090000", 0, 0, 0, 0, 0, 0, 0,
- "SF060000", 0, 0, 0, 0, 0, 0, 0, "SF070000", 0, 0, 0, 0, 0, 0, 0,
- "SF050000", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- "SF430000", "SF240000", "SF510000", "SF520000", "SF390000",
- "SF220000", "SF210000", "SF250000", "SF500000", "SF490000",
- "SF380000", "SF280000", "SF270000", "SF260000", "SF360000",
- "SF370000", "SF420000", "SF190000", "SF200000", "SF230000",
- "SF470000", "SF480000", "SF410000", "SF450000", "SF460000",
- "SF400000", "SF540000", "SF530000", "SF440000", 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "upblock", 0, 0, 0, "dnblock", 0,
- 0, 0, "block", 0, 0, 0, "lfblock", 0, 0, 0, "rtblock", "ltshade",
- "shade", "dkshade", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-static char* table_FB00[] = /* alphabetic presentation forms */
-{ "ff", "fi", "fl", "ffi", "ffl", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "afii57705", 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, "afii57694", "afii57695", 0, 0, 0, 0, 0, 0, 0, 0, 0,
- "afii57723", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, "afii57700", 0, 0, 0, 0 };
-
-char*
-unicodetoPSname(unsigned short code)
-{
- if(code<32) return 0;
- else if(code<0x6FF) return table_32[code-32];
- else if(code<0x2000) return 0;
- else if(code<0x20D0) return table_2000[code-0x2000];
- else if(code==0x2116) return "afii61352"; /* numero sign, for Koi */
- else if(code==0x2122) return "trademark";
- else if(code<0x2500) return 0;
- else if(code<0x25A0) return table_2500[code-0x2500];
- else if(code<0xFB00) return 0;
- else if(code<0xFB50) return table_FB00[code-0xFB00];
- else return 0;
-}
diff --git a/nx-X11/lib/font/Type1/t1unicode.h b/nx-X11/lib/font/Type1/t1unicode.h
deleted file mode 100644
index bad0274a0..000000000
--- a/nx-X11/lib/font/Type1/t1unicode.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Copyright (c) 1998 by Juliusz Chroboczek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-/* $XFree86$ */
-
-char *unicodetoPSname(unsigned short code);
diff --git a/nx-X11/lib/font/Type1/token.c b/nx-X11/lib/font/Type1/token.c
deleted file mode 100644
index 71a968b30..000000000
--- a/nx-X11/lib/font/Type1/token.c
+++ /dev/null
@@ -1,1208 +0,0 @@
-/* $Xorg: token.c,v 1.4 2000/08/17 19:46:34 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/token.c,v 1.5tsi Exp $ */
-/* Authors: Sig Nin & Carol Thompson IBM Almaden Research Laboratory */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "t1stdio.h"
-#include "util.h"
-#include "digit.h"
-#include "token.h"
-#include "tokst.h"
-#include "hdigit.h"
-
-/*
- * -------------------------------------------------------------------
- * Globals
- * -------------------------------------------------------------------
- */
-
-/* These variables are set by the caller */
-char *tokenStartP; /* Pointer to token buffer in VM */
-char *tokenMaxP; /* Pointer to last byte in buffer + 1 */
-
-/* These variables are set by TOKEN */
-int tokenLength; /* Characters in token */
-boolean tokenTooLong; /* Token too long for buffer */
-int tokenType; /* Type of token identified */
-psvalue tokenValue; /* Token value */
-
-/*
- * -------------------------------------------------------------------
- * Private variables
- * -------------------------------------------------------------------
- */
-
-static FILE *inputFileP; /* Current input file */
-
-
-/* Token */
-static char *tokenCharP; /* Pointer to next character in token */
-
-/*
- * -------------------------------------------------------------------
- * Private routines for manipulating numbers
- * -------------------------------------------------------------------
- */
-
-#define Exp10(e) \
-((e) == 0\
- ? (double)(1.0)\
- : (-64 <= (e) && (e) <= 63\
- ? Exp10T[(e)+64]\
- : P10(e)\
- )\
-)
-
-static double Exp10T[128] = {
- 1e-64, 1e-63, 1e-62, 1e-61, 1e-60, 1e-59, 1e-58, 1e-57,
- 1e-56, 1e-55, 1e-54, 1e-53, 1e-52, 1e-51, 1e-50, 1e-49,
- 1e-48, 1e-47, 1e-46, 1e-45, 1e-44, 1e-43, 1e-42, 1e-41,
- 1e-40, 1e-39, 1e-38, 1e-37, 1e-36, 1e-35, 1e-34, 1e-33,
- 1e-32, 1e-31, 1e-30, 1e-29, 1e-28, 1e-27, 1e-26, 1e-25,
- 1e-24, 1e-23, 1e-22, 1e-21, 1e-20, 1e-19, 1e-18, 1e-17,
- 1e-16, 1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9,
- 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1,
- 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7,
- 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15,
- 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22, 1e23,
- 1e24, 1e25, 1e26, 1e27, 1e28, 1e29, 1e30, 1e31,
- 1e32, 1e33, 1e34, 1e35, 1e36, 1e37, 1e38, 1e39,
- 1e40, 1e41, 1e42, 1e43, 1e44, 1e45, 1e46, 1e47,
- 1e48, 1e49, 1e50, 1e51, 1e52, 1e53, 1e54, 1e55,
- 1e56, 1e57, 1e58, 1e59, 1e60, 1e61, 1e62, 1e63
-};
-
-static double
-P10(long exponent)
-{
- double value, power;
-
- if (exponent < 0) {
- power = 0.1;
- value = (exponent & 1 ? power : 1.0);
- exponent++;
- exponent = -(exponent >> 1); /* portable C for -(exponent/2) */
- }
- else {
- power = 10.0;
- value = (exponent & 1 ? power : 1.0);
- exponent = exponent >> 1;
- }
-
- while(exponent > 0) {
- power *= power;
- if (exponent & 1)
- value *= power;
- exponent >>= 1;
- }
-
- return(value);
-}
-
-/*
- * -------------------------------------------------------------------
- * Private routines and macros for manipulating the input
- * -------------------------------------------------------------------
- */
-
-/* Get next character from the input --
- *
- */
-#define next_ch() (_XT1getc(inputFileP))
-
-/* Push a character back into the input --
- *
- * Ungetc of EOF will fail, but that's ok: the next getc will
- * return EOF.
- *
- * NOTE: These macros are presently written to return the character
- * pushed, or EOF if none was pushed. However, they are not
- * required to return anything in particular, and callers should
- * not rely on the returned value.
- */
-#define back_ch(ch) (T1Ungetc(ch, inputFileP))
-
-/* Push a character back into the input if it was not white space.
- * If it is a carriage return (\r) then check next char for
- * linefeed and consume them both, otherwise put next char back.
- *
- */
-#define back_ch_not_white(ch) \
-(\
-isWHITE_SPACE(ch)\
- ? ((ch == '\r')\
- ? (((ch = next_ch()) == '\n')\
- ? EOF\
- : back_ch(ch)\
- )\
- : EOF\
- )\
- : back_ch(ch)\
-)
-
-/*
- * -------------------------------------------------------------------
- * Private routines and macros for manipulating the token buffer
- * -------------------------------------------------------------------
- */
-
-/* Add a character to the token
- * ---- use ONLY when you KNOW that this character will
- * be stored within the token buffer.
- */
-#define save_unsafe_ch(ch) (*tokenCharP++ = ch)
-
-/* Add a character to the token, if not too long to fit */
-#define save_ch(ch) \
-((tokenCharP < tokenMaxP)\
- ? save_unsafe_ch(ch)\
- : (tokenTooLong = TRUE)\
-)
-
-#define save_ch_no_inc(ch) \
-if (tokenCharP < tokenMaxP) *tokenCharP = ch
-
-/*
- * -------------------------------------------------------------------
- * Action Routines
- *
- * These routines all
- * -- take int ch as a parameter
- * -- return int ch if no token was recognized, DONE otherwise
- * -- leave the next character in the input, if returning DONE
- * -------------------------------------------------------------------
- */
-
-#define DONE (256)
-
-/* Get the next input character */
-static int
-next_char(int ch)
-{
- return(next_ch());
-}
-
-/* Add character to token */
-static int
-add_char(int ch)
-{
- save_ch(ch);
- return(next_ch());
-}
-
-
-/* -------------------------------------------------------------------
- * Skip white space and comments
- */
-
-/* Skip white space */
-static int
-skip_space(int ch)
-{
- do {
- ch = next_ch();
- } while(isWHITE_SPACE(ch));
- return(ch);
-}
-
-/* Skip comments */
-static int
-skip_comment(int ch)
-{
- do {
- ch = next_ch();
- } while(isCOMMENT(ch));
- return(ch);
-}
-
-/* -------------------------------------------------------------------
- * Collect value elements for a number
- */
-
-/* decimal integer or real number mantissa */
-static int m_sign;
-static long m_value;
-static long m_scale;
-
-/* real number exponent */
-static int e_sign;
-static long e_value;
-
-/* radix number */
-static long r_base;
-static long r_value;
-static long r_scale;
-
-static int
-add_sign(int ch)
-{
- m_sign = ch;
- save_unsafe_ch(ch);
- return(next_ch());
-}
-
-static int
-add_1st_digits(int ch)
-{
- m_sign = '+';
- return(add_digits(ch));
-}
-
-static int
-add_digits(int ch)
-{
- long value, p_value, scale;
- int digit;
-
- /* On entry, expect m_sign to be set to '+' or '-';
- * ch is a decimal digit.
- * Expect at most one character saved at this point,
- * a sign. This routine will save up to 10 more
- * characters without checking the buffer boundary.
- */
-
- value = ch - '0';
- save_unsafe_ch(ch);
- ch = next_ch();
-
- while(isDECIMAL_DIGIT(ch) && value < (MAX_INTEGER/10)) {
- value = (value << 3) + (value << 1) + (ch - '0');
- save_unsafe_ch(ch);
- ch = next_ch();
- }
-
- /* Quick exit for small integers --
- * |x| <= 10*((MAX_INTEGER/10)-1)+9
- * |x| <= 2,147,483,639 for 32 bit integers
- */
- if (isNUMBER_ENDER(ch)) {
- back_ch_not_white(ch);
- tokenValue.integer = (m_sign == '-' ? -value : value);
- tokenType = TOKEN_INTEGER;
- return(DONE);
- }
-
- /* Handle additional digits. Beyond the boundary case,
- * 10*(MAX_INTEGER/10) <= |number| <= MAX_INTEGER
- * just count the digits: the number is too large to
- * represent as an integer and will be returned as a real.
- * The mantissa of a real holds fewer bits than an integer.
- */
- p_value = value;
- value = (m_sign == '-' ? -value : value);
- scale = 0;
-
- if (isDECIMAL_DIGIT(ch)) {
-
- /* Handle the boundary case */
- if (p_value == (MAX_INTEGER/10)) {
- digit = ch - '0';
-
- /* Must handle positive and negative values separately */
- /* for 2's complement arithmetic */
- if (value > 0) {
- if (digit <= MAX_INTEGER%10)
- value = (value << 3) + (value << 1) + digit;
- else
- ++scale; /* Too big, just count it */
- }
- else {
- /* Use positive % operands for portability */
- if (digit <= -(MIN_INTEGER+10)%10)
- value = (value << 3) + (value << 1) - digit;
- else
- ++scale; /* Too big, just count it */
- }
- }
- else
- ++scale; /* Not boundary case, just count digit */
-
- save_unsafe_ch(ch);
- ch = next_ch();
-
- /* Continue scanning digits, but can't store them */
- while(isDECIMAL_DIGIT(ch)) {
- ++scale;
- save_ch(ch);
- ch = next_ch();
- }
- }
-
- /* Continue from here scanning radix integer or real */
- m_value = value;
- m_scale = scale;
-
- /* Initialize for possible real */
- e_sign = '+';
- e_value = 0;
-
- return(ch);
-}
-
-static int
-add_1st_decpt(int ch)
-{
- m_sign = '+';
- return(add_decpt(ch));
-}
-
-static int
-add_decpt(int ch)
-{
- /* On entry, expect m_sign to be set to '+' or '-' */
- m_value = 0;
- m_scale = 0;
- save_unsafe_ch(ch);
- return(next_ch());
-}
-
-static int
-add_fraction(int ch)
-{
- long value, scale;
- int digit;
-
- /* On entry, expect m_value and m_scale to be initialized,
- * and m_sign to be set to '+' or '-'. Expect m_value and m_sign
- * to be consistent (this is not checked).
- */
- value = m_value;
- scale = m_scale;
-
- /* Scan leading zeroes */
- if (value == 0) {
- while(ch == '0') {
- --scale;
- save_ch(ch);
- ch = next_ch();
- }
-
- /* Scan first significant digit */
- if (isDECIMAL_DIGIT(ch)) {
- --scale;
- value = ch - '0';
- value = (m_sign == '-' ? -value : value);
- save_ch(ch);
- ch = next_ch();
- }
- else
- /* no significant digits -- number is zero */
- scale = 0;
- }
- /* value != 0 || value == 0 && !isDECIMAL_DIGIT(ch) */
-
- /* Scan additional significant digits */
- if (isDECIMAL_DIGIT(ch)) {
- if (value > 0) {
- while(isDECIMAL_DIGIT(ch) && value < (MAX_INTEGER/10)) {
- --scale;
- value = (value << 3) + (value << 1) + (ch - '0');
- save_ch(ch);
- ch = next_ch();
- }
- /* Check boundary case */
- if (isDECIMAL_DIGIT(ch) && value == (MAX_INTEGER/10)) {
- digit = ch - '0';
- if (digit <= MAX_INTEGER%10) {
- --scale;
- value = (value << 3) + (value << 1) + digit;
- save_ch(ch);
- ch = next_ch();
- }
- }
- }
- else {
- /* value < 0 */
- while(isDECIMAL_DIGIT(ch) && value > -(-(MIN_INTEGER+10)/10+1)) {
- /* Use positive / operands for portability */
- --scale;
- value = (value << 3) + (value << 1) - (ch - '0');
- save_ch(ch);
- ch = next_ch();
- }
- /* Check boundary case */
- if (isDECIMAL_DIGIT(ch)
- && value == -(-(MIN_INTEGER+10)/10+1)) {
- digit = ch - '0';
- if (digit <= -(MIN_INTEGER+10)%10) {
- /* Use positive % operands for portability */
- --scale;
- value = (value << 3) + (value << 1) - digit;
- save_ch(ch);
- ch = next_ch();
- }
- }
- }
-
- /* Additional digits can be discarded */
- while(isDECIMAL_DIGIT(ch)) {
- save_ch(ch);
- ch = next_ch();
- }
- }
-
- /* Store results */
- m_value = value;
- m_scale = scale;
-
- /* Initialize for possible real */
- e_sign = '+';
- e_value = 0;
-
- return(ch);
-}
-
-static int
-add_e_sign(int ch)
-{
- e_sign = ch;
- save_ch(ch);
- return(next_ch());
-}
-
-static int
-add_exponent(int ch)
-{
- long value, p_value;
- long scale = 0;
- int digit;
-
- /* On entry, expect e_sign to be set to '+' or '-' */
-
- value = ch - '0';
- save_ch(ch);
- ch = next_ch();
-
- while(isDECIMAL_DIGIT(ch) && value < (MAX_INTEGER/10)) {
- value = (value << 3) + (value << 1) + (ch - '0');
- save_ch(ch);
- ch = next_ch();
- }
-
- p_value = value;
- value = (e_sign == '-' ? -value : value);
-
- /* Handle additional digits. Beyond the boundary case,
- * 10*(MAX_INTEGER/10) <= |number| <= MAX_INTEGER
- * just count the digits: the number is too large to
- * represent as an integer.
- */
- if (isDECIMAL_DIGIT(ch)) {
-
- /* Examine boundary case */
- if (p_value == (MAX_INTEGER/10)) {
- digit = ch - '0';
-
- /* Must handle positive and negative values separately */
- /* for 2's complement arithmetic */
- if (value > 0) {
- if (digit <= MAX_INTEGER%10)
- value = (value << 3) + (value << 1) + digit;
- else
- ++scale; /* Too big, just count it */
- }
- else {
- /* Use positive % operands for portability */
- if (digit <= -(MIN_INTEGER+10)%10)
- value = (value << 3) + (value << 1) - digit;
- else
- ++scale; /* Too big, just count it */
- }
- }
- else
- ++scale; /* Not boundary case, just count digit */
-
- save_ch(ch);
- ch = next_ch();
-
- /* Continue scanning digits, but can't store any more */
- while(isDECIMAL_DIGIT(ch)) {
- ++scale;
- save_ch(ch);
- ch = next_ch();
- }
- }
-
- /* Store results */
- e_value = value;
-
- return(ch);
-}
-
-static int
-add_radix(int ch)
-{
- if (2 <= m_value && m_value <= 36 && m_scale == 0) {
- r_base = m_value;
- save_ch(ch);
- return(next_ch());
- }
- else {
- /* Radix invalid, complete a name token */
- return(AAH_NAME(ch));
- }
-}
-
-static int
-add_r_digits(int ch)
-{
- unsigned long value;
- long radix, scale;
- int digit;
-
- /* NOTE: The syntax of a radix number allows only for
- * values of zero or more. The value will be stored as
- * a 32 bit integer, which PostScript then interprets
- * as signed. This means, for example, that the numbers:
- *
- * 8#37777777777
- * 10#4294967295
- * 16#FFFFFFFF
- * 36#1Z141Z3
- *
- * are all interpreted as -1. This routine implements this
- * idea explicitly: it accumulates the number's value
- * as unsigned, then casts it to signed when done.
- */
-
- /* Expect r_base to be initialized */
- radix = r_base;
- value = 0;
- scale = 0;
-
- /* Scan leading zeroes */
- while(ch == '0') {
- save_ch(ch);
- ch = next_ch();
- }
-
- /* Handle first non-zero digit */
- if ((digit=digit_value[ch]) < radix) {
- value = digit;
- save_ch(ch);
- ch = next_ch();
-
- /* Add digits until boundary case reached */
- while((digit=digit_value[ch]) < radix
- && value < (MAX_ULONG / radix)) {
- value = value * radix + digit;
- save_ch(ch);
- ch = next_ch();
- };
-
- /* Scan remaining digits */
- if ((digit=digit_value[ch]) < radix) {
-
- /* Examine boundary case ---
- * radix*(MAX_ULONG/radix) <= number <= MAX_ULONG
- */
- if (value == (MAX_ULONG/radix) && digit <= MAX_ULONG%radix)
- value = value * radix + digit;
- else
- ++scale;
-
- /* Continue scanning digits, but can't store them */
- save_ch(ch);
- ch = next_ch();
- while(digit_value[ch] < radix) {
- ++scale;
- save_ch(ch);
- ch = next_ch();
- }
- }
- }
-
- /* Store result */
- r_value = (long) value; /* result is signed */
- r_scale = scale;
-
- return(ch);
-}
-
-/* -------------------------------------------------------------------
- * Complete a number; set token type and done flag.
- * Put current input character back, if it is not white space.
- */
-
-/* Done: Radix Number */
-static int
-RADIX_NUMBER(int ch)
-{
- back_ch_not_white(ch);
- if (r_scale == 0) {
- tokenValue.integer = r_value;
- tokenType = TOKEN_INTEGER;
- }
- else {
- tokenType = TOKEN_NAME;
- }
- return(DONE);
-}
-
-/* Done: Integer */
-static int
-INTEGER(int ch)
-{
- back_ch_not_white(ch);
- if (m_scale == 0) {
- tokenValue.integer = m_value;
- tokenType = TOKEN_INTEGER;
- }
- else {
- tokenValue.real = (double)(m_value) * Exp10(m_scale);
- tokenType = TOKEN_REAL;
- }
- return(DONE);
-}
-
-/* Done: Real */
-static int
-REAL(int ch)
-{
- double temp;
-
- back_ch_not_white(ch);
-
- /* HAZARD: exponent overflow of intermediate result
- * (e.g., in 370 floating point); this should not be a problem
- * with IEEE floating point. Reduce exponent overflow hazard by
- * combining m_scale and e_value first, if they have different signs,
- * or multiplying m_value and one of the other factors, if both
- * m_scale and e_value are negative.
- */
- if ((m_scale >= 0 && e_value <= 0)
- || (m_scale <= 0 && e_value >= 0)) {
- tokenValue.real = (double)(m_value) * Exp10(m_scale + e_value);
- }
- else {
- temp = (double)(m_value) * Exp10(m_scale);
- tokenValue.real = temp * Exp10(e_value);
- }
-
- tokenType = TOKEN_REAL;
- return(DONE);
-}
-
-
-/* -------------------------------------------------------------------
- * Assemble a hex string; set token type and done flag.
- */
-
-/* Done: Hex String */
-static int
-HEX_STRING(int ch)
-{
- int value;
-
- while(TRUE) {
-
- /* Process odd digit */
- ch = next_ch();
- if (!isHEX_DIGIT(ch)) {
-
- /* Skip white space */
- while(isWHITE_SPACE(ch))
- ch = next_ch();
-
- /* Check for terminator */
- if (!isHEX_DIGIT(ch)) {
- break;
- }
- }
- value = digit_value[ch] << 4;
-
- /* Process even digit */
- ch = next_ch();
- if (!isHEX_DIGIT(ch)) {
-
- /* Skip white space */
- while(isWHITE_SPACE(ch))
- ch = next_ch();
-
- /* Check for terminator */
- if (!isHEX_DIGIT(ch)) {
- save_ch(value);
- break;
- }
- }
- save_ch(value + digit_value[ch]);
- }
-
- /* Classify result, based on why loop ended */
- if (ch == '>')
- tokenType = TOKEN_HEX_STRING;
- else {
- /* save the invalid character for error reporting */
- save_ch(ch);
- tokenType = TOKEN_INVALID;
- }
-
- return(DONE);
-}
-
-/* -------------------------------------------------------------------
- * Assemble a string; set token type and done flag
- */
-
-/* Save a backslash-coded character in a string --
- *
- * Store the proper character for special cases
- * "\b", "\f", "\n", "\r", and "\t".
- *
- * Decode and store octal-coded character, up to
- * three octal digits, "\o", "\oo", and "\ooo".
- *
- * The sequence "\<newline>" is a line continuation,
- * so consume both without storing anything.
- *
- * The sequence "\<EOF>" is an error; exit without
- * storing anything and let the caller handle it.
- *
- * For other characters, including the sequences
- * "\\", "\(", and "\)", simply store the second
- * character.
- */
-static void
-save_digraph(int ch)
-{
- int value;
-
- switch (ch) {
-
- case 'b': /* backspace */
- ch = '\b';
- break;
-
- case 'f': /* formfeed */
- ch = '\f';
- break;
-
- case 'n': /* newline */
- ch = '\n';
- break;
-
- case 'r': /* carriage return */
- ch = '\r';
- break;
-
- case 't': /* horizontal tab */
- ch = '\t';
- break;
-
- case '\n': /* line continuation -- consume it */
- return;
-
- case '\r': /* carriage return -- consume it */
- ch = next_ch(); /* look at next character, is it \n? */
- if (ch == '\n') return;
- back_ch(ch); /* if not a line feed, then return it */
- return;
-
- case EOF: /* end of file -- forget it */
- return;
-
- default:
- /* scan up to three octal digits to get value */
- if (isOCTAL_DIGIT(ch)) {
- value = digit_value[ch];
- ch = next_ch();
- if (isOCTAL_DIGIT(ch)) {
- value = (value << 3) + digit_value[ch];
- ch = next_ch();
- if (isOCTAL_DIGIT(ch))
- value = (value << 3) + digit_value[ch];
- else
- back_ch(ch);
- }
- else
- back_ch(ch);
- ch = value;
- }
- }
-
- /* Found a character to save */
- save_ch(ch);
-}
-
-/* Done: String */
-static int
-STRING(int ch)
-{
- int nest_level = 1;
-
- tokenType = TOKEN_STRING;
-
- do {
-
- ch = next_ch();
- while(!isSTRING_SPECIAL(ch)) {
- save_ch(ch);
- ch = next_ch();
- };
-
- switch (ch) {
-
- case '(':
- ++nest_level;
- save_ch(ch);
- break;
-
- case ')':
- if (--nest_level > 0)
- save_ch(ch);
- break;
-
- case '\\':
- save_digraph(next_ch());
- break;
-
- case '\r':
- /* All carriage returns (\r) are turned into linefeeds (\n)*/
- ch = next_ch(); /* get the next one, is it \n? */
- if (ch != '\n') { /* if not, then put it back. */
- back_ch(ch);
- }
- save_ch('\n'); /* in either case, save a linefeed */
- break;
-
-
- case EOF:
- tokenType = TOKEN_INVALID; /* Unterminated string */
- nest_level = 0;
- break;
- }
-
- } while(nest_level > 0);
-
- /* If there's room, add a 0-byte termination without increasing string
- length. This fixes certain dependencies on 0-terminated strings */
- save_ch_no_inc(0);
-
- return(DONE);
-}
-
-
-/* -------------------------------------------------------------------
- * Assemble a name; set token type and done flag.
- * Put current input character back, if it is not white space.
- */
-
-/* Done: Name
- * (Safe version used to complete name tokens that
- * start out looking like something else).
- */
-
-static int
-AAH_NAME(int ch)
-{
- do {
- save_ch(ch);
- ch = next_ch();
- } while(isNAME(ch));
-
- back_ch_not_white(ch);
- tokenType = TOKEN_NAME;
- return(DONE);
-}
-
-/* Done: Name */
-static int
-NAME(int ch)
-{
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- while(isNAME(ch)) {
- save_ch(ch);
- ch = next_ch();
- }
- }
- }
- }
- }
- }
- }
-
- back_ch_not_white(ch);
- tokenType = TOKEN_NAME;
- return(DONE);
-}
-
-/* Done: Literal Name */
-static int
-LITERAL_NAME(int ch)
-{
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- while(isNAME(ch)) {
- save_ch(ch);
- ch = next_ch();
- }
- }
- }
- }
- }
- }
- }
-
- back_ch_not_white(ch);
- tokenType = TOKEN_LITERAL_NAME;
- return(DONE);
-}
-
-/* Done: immediate Name */
-static int
-IMMED_NAME(int ch)
-{
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- if (isNAME(ch)) {
- save_unsafe_ch(ch);
- ch = next_ch();
- while(isNAME(ch)) {
- save_ch(ch);
- ch = next_ch();
- }
- }
- }
- }
- }
- }
- }
-
- back_ch_not_white(ch);
- tokenType = TOKEN_IMMED_NAME;
- return(DONE);
-}
-
-/* Done: Name found while looking for something else */
-static int
-OOPS_NAME(int ch)
-{
- back_ch_not_white(ch);
- tokenType = TOKEN_NAME;
- return(DONE);
-}
-
-
-/* -------------------------------------------------------------------
- * Complete a miscellaneous token; set token type and done flag.
- */
-
-/* Done: Unmatched Right Angle-Bracket */
-static int
-RIGHT_ANGLE(int ch)
-{
- tokenType = TOKEN_RIGHT_ANGLE;
- return(DONE);
-}
-
-/* Done: Unmatched Right Parenthesis */
-static int
-RIGHT_PAREN(int ch)
-{
- tokenType = TOKEN_RIGHT_PAREN;
- return(DONE);
-}
-
-/* Done: Left Brace */
-static int
-LEFT_BRACE(int ch)
-{
- tokenType = TOKEN_LEFT_BRACE;
- return(DONE);
-}
-
-/* Done: Right Brace */
-static int
-RIGHT_BRACE(int ch)
-{
- tokenType = TOKEN_RIGHT_BRACE;
- return(DONE);
-}
-
-/* Done: Left Bracket */
-static int
-LEFT_BRACKET(int ch)
-{
- save_unsafe_ch(ch);
- tokenType = TOKEN_LEFT_BRACKET;
- return(DONE);
-}
-
-/* Done: Right Bracket */
-static int
-RIGHT_BRACKET(int ch)
-{
- save_unsafe_ch(ch);
- tokenType = TOKEN_RIGHT_BRACKET;
- return(DONE);
-}
-
-/* Done: Break */
-static int
-BREAK_SIGNAL(int ch)
-{
- tokenType = TOKEN_BREAK;
- return(DONE);
-}
-
-/* Done: No Token Found */
-static int
-NO_TOKEN(int ch)
-{
- tokenType = TOKEN_EOF;
- return(DONE);
-}
-
-
-/*
- * -------------------------------------------------------------------
- * scan_token -- scan one token from the input. It uses a simple
- * finite state machine to recognize token classes.
- *
- * The input is from a file.
- *
- * On entry --
- *
- * inputP -> input PostScript object, a file.
- * tokenStartP -> buffer in VM for accumulating the token.
- * tokenMaxP -> last character in the token buffer
- *
- * On exit --
- *
- * tokenLength = number of characters in the token
- * tokenTooLong = TRUE if the token did not fit in the buffer
- * tokenType = code for the type of token parsed.
- * tokenValue = converted value of a numeric token.
- *
- *
- * -------------------------------------------------------------------
- */
-void
-scan_token(psobj *inputP)
-{
- int ch;
- unsigned char *stateP = s0;
- unsigned char entry;
- int (*actionP)(int);
-
- /* Define input source */
- inputFileP = inputP->data.fileP;
- if (inputFileP == NULL) {
- tokenType = TOKEN_EOF;
- return;
- }
-
- /* Ensure enough space for most cases
- * (so we don't have to keep checking)
- * The length needs to cover the maximum number
- * of save_unsafe_ch() calls that might be executed.
- * That number is 11 (a sign and 10 decimal digits, e.g.,
- * when scanning -2147483648), but use MAX_NAME_LEN
- * in case someone changes that without checking.
- */
- tokenStartP = vm_next_byte();
- tokenMaxP = tokenStartP + MIN(vm_free_bytes(), MAX_STRING_LEN);
-
- if ((tokenMaxP-tokenStartP) < (MAX_NAME_LEN)) {
- tokenLength = 0;
- tokenTooLong = TRUE;
- tokenType = TOKEN_NONE;
- tokenValue.integer = 0;
- return;
- }
-
- /* Reset token */
- tokenCharP = tokenStartP;
- tokenTooLong = FALSE;
-
- /* Scan one token */
- ch = next_ch();
- do {
- entry = stateP[ch];
- stateP = classActionTable[entry].nextStateP;
- actionP = classActionTable[entry].actionRoutineP;
- ch = (*actionP)(ch);
- } while(ch != DONE);
-
-
- /* Return results */
- tokenLength = tokenCharP - tokenStartP;
-}
diff --git a/nx-X11/lib/font/Type1/token.h b/nx-X11/lib/font/Type1/token.h
deleted file mode 100644
index 663982889..000000000
--- a/nx-X11/lib/font/Type1/token.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* $Xorg: token.h,v 1.3 2000/08/17 19:46:34 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/token.h,v 1.3 1999/08/22 08:58:54 dawes Exp $ */
-
-#ifndef TOKEN_H
-#define TOKEN_H
-
-/* Special characters */
-#define CONTROL_C (3)
-
-/* Token type codes */
-#define TOKEN_INVALID (-3)
-#define TOKEN_BREAK (-2)
-#define TOKEN_EOF (-1)
-#define TOKEN_NONE (0)
-#define TOKEN_LEFT_PAREN (1)
-#define TOKEN_RIGHT_PAREN (2)
-#define TOKEN_LEFT_ANGLE (3)
-#define TOKEN_RIGHT_ANGLE (4)
-#define TOKEN_LEFT_BRACE (5)
-#define TOKEN_RIGHT_BRACE (6)
-#define TOKEN_LEFT_BRACKET (7)
-#define TOKEN_RIGHT_BRACKET (8)
-#define TOKEN_NAME (9)
-#define TOKEN_LITERAL_NAME (10)
-#define TOKEN_INTEGER (11)
-#define TOKEN_REAL (12)
-#define TOKEN_RADIX_NUMBER (13)
-#define TOKEN_HEX_STRING (14)
-#define TOKEN_STRING (15)
-#define TOKEN_IMMED_NAME (16)
-
-/* Token routines */
-extern void scan_token( psobj *inputP );
-
-/*
- * -------------------------------------------------------------------------
- * Globals shared -- (everyone else KEEP YOUR MITTS OFF THEM!)
- * -------------------------------------------------------------------------
- */
-
-/* These variables are set by the caller */
-extern char *tokenStartP; /* Pointer to token buffer in VM */
-extern char *tokenMaxP; /* Pointer to end of VM we may use + 1 */
-
-/* These variables are set by P_TOKEN */
-extern int tokenLength; /* Characters in token */
-extern boolean tokenTooLong; /* Token too long for space available */
-extern int tokenType; /* Type of token identified */
-extern psvalue tokenValue; /* Token value */
-
-#endif /* TOKEN_H */
diff --git a/nx-X11/lib/font/Type1/tokst.h b/nx-X11/lib/font/Type1/tokst.h
deleted file mode 100644
index 02166afde..000000000
--- a/nx-X11/lib/font/Type1/tokst.h
+++ /dev/null
@@ -1,510 +0,0 @@
-/* $Xorg: tokst.h,v 1.3 2000/08/17 19:46:34 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* $XFree86: xc/lib/font/Type1/tokst.h,v 1.3 1999/08/22 08:58:54 dawes Exp $ */
-
-/* -------------------------------------- */
-/* --- MACHINE GENERATED, DO NOT EDIT --- */
-/* -------------------------------------- */
-
-#ifndef TOKST
-#define TOKST 1
-
-/*
- * State Index Tables --
- *
- * These tables map the input character to the
- * proper entry in the Class Action Table.
- * There is one table for each state.
- *
- */
-#define s0 (si0+2)
-static unsigned char si0[258] = { 0x10,0x11,
- 0x02,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x02,0x02,0x0F,0x0F,0x02,0x0F,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
- 0x02,0x0F,0x0F,0x0F,0x0F,0x03,0x0F,0x0F,0x05,0x0B,0x0F,0x0D,0x0F,0x0D,0x0E,0x04,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x0F,0x0F,0x08,0x0F,0x0C,0x0F,
- 0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0A,0x0F,0x0F,
- 0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x0F,0x09,0x0F,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F
-};
-
-#define s1 (si1+2)
-static unsigned char si1[258] = { 0x14,0x15,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
- 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13
-};
-
-#define s2 (si2+2)
-static unsigned char si2[258] = { 0x1B,0x1C,
- 0x16,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x16,0x16,0x1A,0x1A,0x16,0x1A,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
- 0x16,0x1A,0x1A,0x1A,0x1A,0x17,0x1A,0x1A,0x17,0x17,0x1A,0x1A,0x1A,0x1A,0x19,0x17,
- 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1A,0x1A,0x17,0x1A,0x17,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x17,0x1A,0x17,0x1A,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x17,0x1A,0x17,0x1A,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
- 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A
-};
-
-#define s3 (si3+2)
-static unsigned char si3[258] = { 0x23,0x24,
- 0x1D,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1D,0x1D,0x22,0x22,0x1D,0x22,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
- 0x1D,0x22,0x22,0x20,0x22,0x1E,0x22,0x22,0x1E,0x1E,0x22,0x22,0x22,0x22,0x1F,0x1E,
- 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1E,0x22,0x1E,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1E,0x22,0x1E,0x22,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1E,0x22,0x1E,0x22,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
- 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22
-};
-
-#define s4 (si4+2)
-static unsigned char si4[258] = { 0x29,0x2A,
- 0x25,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x25,0x25,0x28,0x28,0x25,0x28,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
- 0x25,0x28,0x28,0x28,0x28,0x26,0x28,0x28,0x26,0x26,0x28,0x28,0x28,0x28,0x28,0x26,
- 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x26,0x28,0x26,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x26,0x28,0x26,0x28,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x26,0x28,0x26,0x28,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
- 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28
-};
-
-#define s5 (si5+2)
-static unsigned char si5[258] = { 0x30,0x31,
- 0x2B,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2B,0x2B,0x2F,0x2F,0x2B,0x2F,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
- 0x2B,0x2F,0x2F,0x2F,0x2F,0x2C,0x2F,0x2F,0x2C,0x2C,0x2F,0x2F,0x2F,0x2F,0x2F,0x2C,
- 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2F,0x2F,0x2C,0x2F,0x2C,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2C,0x2F,0x2C,0x2F,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2C,0x2F,0x2C,0x2F,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
- 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F
-};
-
-#define s6 (si6+2)
-static unsigned char si6[258] = { 0x36,0x37,
- 0x32,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x32,0x32,0x35,0x35,0x32,0x35,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
- 0x32,0x35,0x35,0x35,0x35,0x33,0x35,0x35,0x33,0x33,0x35,0x35,0x35,0x35,0x35,0x33,
- 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x33,0x35,0x33,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x33,0x35,0x33,0x35,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x33,0x35,0x33,0x35,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
- 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35
-};
-
-#define s7 (si7+2)
-static unsigned char si7[258] = { 0x3D,0x3E,
- 0x38,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x38,0x38,0x3C,0x3C,0x38,0x3C,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,
- 0x38,0x3C,0x3C,0x3C,0x3C,0x39,0x3C,0x3C,0x39,0x39,0x3C,0x3A,0x3C,0x3A,0x3C,0x39,
- 0x3B,0x3B,0x3B,0x3B,0x3B,0x3B,0x3B,0x3B,0x3B,0x3B,0x3C,0x3C,0x39,0x3C,0x39,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x39,0x3C,0x39,0x3C,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x39,0x3C,0x39,0x3C,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,
- 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C
-};
-
-#define s8 (si8+2)
-static unsigned char si8[258] = { 0x43,0x44,
- 0x3F,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3F,0x3F,0x42,0x42,0x3F,0x42,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
- 0x3F,0x42,0x42,0x42,0x42,0x40,0x42,0x42,0x40,0x40,0x42,0x42,0x42,0x42,0x42,0x40,
- 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x40,0x42,0x40,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x42,0x40,0x42,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x42,0x40,0x42,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
- 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42
-};
-
-#define s9 (si9+2)
-static unsigned char si9[258] = { 0x48,0x49,
- 0x45,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x45,0x45,0x47,0x47,0x45,0x47,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,
- 0x45,0x47,0x47,0x47,0x47,0x46,0x47,0x47,0x46,0x46,0x47,0x47,0x47,0x47,0x47,0x46,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x46,0x47,0x46,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x46,0x47,0x46,0x47,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x46,0x47,0x46,0x47,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,
- 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47
-};
-
-#define s10 (si10+2)
-static unsigned char si10[258] = { 0x4E,0x4F,
- 0x4A,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4A,0x4A,0x4D,0x4D,0x4A,0x4D,0x4D,
- 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,
- 0x4A,0x4D,0x4D,0x4D,0x4D,0x4B,0x4D,0x4D,0x4B,0x4B,0x4D,0x4D,0x4D,0x4D,0x4D,0x4B,
- 0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4D,0x4D,0x4B,0x4D,0x4B,0x4D,
- 0x4D,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,
- 0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4B,0x4D,0x4B,0x4D,0x4D,
- 0x4D,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,
- 0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4B,0x4D,0x4B,0x4D,0x4D,
- 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,
- 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,
- 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,
- 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,
- 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,
- 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,
- 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,
- 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D
-};
-
-#define s11 (si11+2)
-static unsigned char si11[258] = { 0x53,0x54,
- 0x50,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x50,0x50,0x52,0x52,0x50,0x52,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
- 0x50,0x52,0x52,0x52,0x52,0x51,0x52,0x52,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x51,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x51,0x52,0x51,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x51,0x52,0x51,0x52,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x51,0x52,0x51,0x52,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
- 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52
-};
-
-/*
- * Class Action Table --
- *
- * The entries in the Class Action Table indicate the
- * action routine to be called, and the next state to
- * enter, for each relevant character class in each.
- * state. There are several entries for each state.
- *
- */
-static int AAH_NAME ( int ch );
-static int BREAK_SIGNAL ( int ch );
-static int HEX_STRING ( int ch );
-static int IMMED_NAME ( int ch );
-static int INTEGER ( int ch );
-static int LEFT_BRACE ( int ch );
-static int LEFT_BRACKET ( int ch );
-static int LITERAL_NAME ( int ch );
-static int NAME ( int ch );
-static int NO_TOKEN ( int ch );
-static int OOPS_NAME ( int ch );
-static int RADIX_NUMBER ( int ch );
-static int REAL ( int ch );
-static int RIGHT_ANGLE ( int ch );
-static int RIGHT_BRACE ( int ch );
-static int RIGHT_BRACKET ( int ch );
-static int RIGHT_PAREN ( int ch );
-static int STRING ( int ch );
-static int add_1st_decpt ( int ch );
-static int add_1st_digits ( int ch );
-static int add_char ( int ch );
-static int add_decpt ( int ch );
-static int add_digits ( int ch );
-static int add_exponent ( int ch );
-static int add_e_sign ( int ch );
-static int add_fraction ( int ch );
-static int add_radix ( int ch );
-static int add_r_digits ( int ch );
-static int add_sign ( int ch );
-static int next_char ( int ch );
-static int skip_comment ( int ch );
-static int skip_space ( int ch );
-
-static struct cat {
- int (*actionRoutineP)(int);
- unsigned char *nextStateP;
-} classActionTable[] = {
-
- /* s0: Classify initial character */
- /* 00 ALPHA */ {NAME, s0}, /* executable name */
- /* 01 DIGIT */ {add_1st_digits, s3}, /* number? */
- /* 02 WHITE_SPACE */ {skip_space, s0}, /* skip white space */
- /* 03 PERCENT */ {skip_comment, s0}, /* comment? */
- /* 04 SLASH */ {next_char, s1}, /* literal or imm name */
- /* 05 LEFT_PAREN */ {STRING, s0}, /* string */
- /* 06 LEFT_BRACE */ {LEFT_BRACE, s0}, /* begin procedure body */
- /* 07 LEFT_BRACKET */ {LEFT_BRACKET, s0}, /* begin array */
- /* 08 LEFT_ANGLE */ {HEX_STRING, s0}, /* hex string? */
- /* 09 RIGHT_BRACE */ {RIGHT_BRACE, s0}, /* end procedure body */
- /* 0A RIGHT_BRACKET */ {RIGHT_BRACKET, s0}, /* end array */
- /* 0B RIGHT_PAREN */ {RIGHT_PAREN, s0}, /* unmatched right paren */
- /* 0C RIGHT_ANGLE */ {RIGHT_ANGLE, s0}, /* unmatched right angle */
- /* 0D SIGN */ {add_sign, s2}, /* signed number? */
- /* 0E DECIMAL_POINT */ {add_1st_decpt, s4}, /* real number? */
- /* 0F ANY */ {NAME, s0}, /* executable name */
- /* 10 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */
- /* 11 EOF */ {NO_TOKEN, s0}, /* no token found */
-
- /* s1: Further classify a '/' */
- /* 12 SLASH */ {IMMED_NAME, s0}, /* immediate name */
- /* 13 ANY */ {LITERAL_NAME, s0}, /* literal name */
- /* 14 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */
- /* 15 EOF */ {OOPS_NAME, s0}, /* isolated sign */
-
- /* s2: sign */
- /* 16 WHITE_SPACE */ {OOPS_NAME, s0}, /* isolated sign */
- /* 17 SPECIAL */ {OOPS_NAME, s0}, /* isolated sign */
- /* 18 DIGIT */ {add_digits, s3}, /* number? */
- /* 19 DECIMAL_POINT */ {add_decpt, s4}, /* real number? */
- /* 1A ANY */ {NAME, s0}, /* executable name */
- /* 1B BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */
- /* 1C EOF */ {OOPS_NAME, s0}, /* isolated sign */
-
- /* s3: sign? digit+ */
- /* 1D WHITE_SPACE */ {INTEGER, s0}, /* n-digit integer */
- /* 1E SPECIAL */ {INTEGER, s0}, /* n-digit integer */
- /* 1F DECIMAL_POINT */ {add_char, s5}, /* real number? */
- /* 20 POUND */ {add_radix, s10}, /* radix number? */
- /* 21 eE */ {add_char, s7}, /* real with exponent? */
- /* 22 ANY */ {AAH_NAME, s0}, /* executable name */
- /* 23 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */
- /* 24 EOF */ {INTEGER, s0}, /* n-digit integer */
-
- /* s4: sign? . */
- /* 25 WHITE_SPACE */ {OOPS_NAME, s0}, /* isolated +. or -. */
- /* 26 SPECIAL */ {OOPS_NAME, s0}, /* isolated +. or -. */
- /* 27 DIGIT */ {add_fraction, s6}, /* number? */
- /* 28 ANY */ {NAME, s0}, /* executable name */
- /* 29 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */
- /* 2A EOF */ {OOPS_NAME, s0}, /* isolated +. or -. */
-
- /* s5: sign? digit+ . */
- /* 2B WHITE_SPACE */ {REAL, s0}, /* real with fraction */
- /* 2C SPECIAL */ {REAL, s0}, /* real with fraction */
- /* 2D eE */ {add_char, s7}, /* real with exponent? */
- /* 2E DIGIT */ {add_fraction, s6}, /* number? */
- /* 2F ANY */ {AAH_NAME, s0}, /* executable name */
- /* 30 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */
- /* 31 EOF */ {REAL, s0}, /* real with fraction */
-
- /* s6: sign? (digit+ . digit+) | (. digit+) */
- /* 32 WHITE_SPACE */ {REAL, s0}, /* real with fraction */
- /* 33 SPECIAL */ {REAL, s0}, /* real with fraction */
- /* 34 eE */ {add_char, s7}, /* real with exponent? */
- /* 35 ANY */ {AAH_NAME, s0}, /* executable name */
- /* 36 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */
- /* 37 EOF */ {REAL, s0}, /* real with fraction */
-
- /* s7: sign? ((digit+ (. digit*)?) | (. digit+)) Ee */
- /* 38 WHITE_SPACE */ {OOPS_NAME, s0}, /* invalid real number */
- /* 39 SPECIAL */ {OOPS_NAME, s0}, /* invalid real number */
- /* 3A SIGN */ {add_e_sign, s8}, /* real w signed exponent? */
- /* 3B DIGIT */ {add_exponent, s9}, /* real w exponent ? */
- /* 3C ANY */ {AAH_NAME, s0}, /* executable name */
- /* 3D BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */
- /* 3E EOF */ {OOPS_NAME, s0}, /* invalid real number */
-
- /* s8: sign? (digit+ (. digit*)? | (digit* . digit+) Ee sign */
- /* 3F WHITE_SPACE */ {OOPS_NAME, s0}, /* invalid real number */
- /* 40 SPECIAL */ {OOPS_NAME, s0}, /* invalid real number */
- /* 41 DIGIT */ {add_exponent, s9}, /* real w exponent? */
- /* 42 ANY */ {AAH_NAME, s0}, /* executable name */
- /* 43 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */
- /* 44 EOF */ {OOPS_NAME, s0}, /* invalid real number */
-
- /* s9: sign? (digit+ (. digit*)? | (digit* . digit+) Ee sign? digit+ */
- /* 45 WHITE_SPACE */ {REAL, s0}, /* real w exponent */
- /* 46 SPECIAL */ {REAL, s0}, /* real w exponent */
- /* 47 ANY */ {AAH_NAME, s0}, /* executable name */
- /* 48 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */
- /* 49 EOF */ {REAL, s0}, /* real w exponent */
-
- /* s10: digit+ # */
- /* 4A WHITE_SPACE */ {OOPS_NAME, s0}, /* invalid radix number */
- /* 4B SPECIAL */ {OOPS_NAME, s0}, /* invalid radix number */
- /* 4C R_DIGIT */ {add_r_digits, s11}, /* radix number? */
- /* 4D ANY */ {AAH_NAME, s0}, /* executable name */
- /* 4E BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */
- /* 4F EOF */ {OOPS_NAME, s0}, /* invalid radix number */
-
- /* s11: digit+ # r_digit+ */
- /* 50 WHITE_SPACE */ {RADIX_NUMBER, s0}, /* radix number */
- /* 51 SPECIAL */ {RADIX_NUMBER, s0}, /* radix number */
- /* 52 ANY */ {AAH_NAME, s0}, /* executable name */
- /* 53 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */
- /* 54 EOF */ {RADIX_NUMBER, s0} /* radix number */
-};
-
-/*
- * Character Classification Tables --
- *
- * The entries in the Character Classification Tables
- * map character codes to character classes. The
- * tables contains one entry per code. The bits in
- * each entry indicate which classes the character
- * code belongs to.
- *
- * The macros 'isInCLASS(ch)' generate code to test
- * whether 'ch' is a character in 'CLASS'.
- *
- */
-/* Membership macros for classes defined in table 1 ... */
-#define isRADIX_DIGIT(c) ((isInP1[c] & 0x80) != 0)
-#define isHEX_DIGIT(c) ((isInP1[c] & 0x40) != 0)
-#define isDECIMAL_DIGIT(c) ((isInP1[c] & 0x10) != 0)
-#define isOCTAL_DIGIT(c) ((isInP1[c] & 0x20) != 0)
-
-/* Membership macros for classes defined in table 2 ... */
-#define isWHITE_SPACE(c) ((isInP2[c] & 0x80) != 0)
-#define isCOMMENT(c) ((isInP2[c] & 0x40) != 0)
-#define isNAME(c) ((isInP2[c] & 0x20) != 0)
-#define isSTRING_SPECIAL(c) ((isInP2[c] & 0x10) != 0)
-#define isNUMBER_ENDER(c) ((isInP2[c] & 0x08) != 0)
-
-#define isInP1 (isInT1+2)
-static unsigned char isInT1[258] = { 0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xD0,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-};
-
-#define isInP2 (isInT2+2)
-static unsigned char isInT2[258] = { 0x18,0x18,
- 0xC8,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xC8,0x88,0x60,0x60,0x98,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0xC8,0x60,0x60,0x60,0x60,0x48,0x60,0x60,0x58,0x58,0x60,0x60,0x60,0x60,0x60,0x48,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x48,0x60,0x48,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x48,0x70,0x48,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x48,0x60,0x48,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60
-};
-
-#endif
diff --git a/nx-X11/lib/font/Type1/trig.h b/nx-X11/lib/font/Type1/trig.h
deleted file mode 100644
index d569ed067..000000000
--- a/nx-X11/lib/font/Type1/trig.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* $Xorg: trig.h,v 1.3 2000/08/17 19:46:34 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/*SHARED*/
-
-/* $XFree86: xc/lib/font/Type1/trig.h,v 1.2 1998/07/25 06:57:00 dawes Exp $ */
-
-#undef DegreeCos
-#undef DegreeSin
-#undef sqrt
-
-#define DegreeCos(d) xiStub()
-#define DegreeSin(d) xiStub()
-#define sqrt(d) xiStub()
-
diff --git a/nx-X11/lib/font/Type1/type1.c b/nx-X11/lib/font/Type1/type1.c
deleted file mode 100644
index b3fa4965a..000000000
--- a/nx-X11/lib/font/Type1/type1.c
+++ /dev/null
@@ -1,1892 +0,0 @@
-/* $Xorg: type1.c,v 1.4 2000/08/17 19:46:34 cpqbld Exp $ */
-/* Copyright International Business Machines, Corp. 1991
- * All Rights Reserved
- * Copyright Lexmark International, Inc. 1991
- * All Rights Reserved
- * Portions Copyright (c) 1990 Adobe Systems Incorporated.
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM or Lexmark or Adobe
- * not be used in advertising or publicity pertaining to distribution of
- * the software without specific, written prior permission.
- *
- * IBM, LEXMARK, AND ADOBE PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY
- * WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE
- * ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING
- * ANY DUTY TO SUPPORT OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY
- * PORTION OF THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM,
- * LEXMARK, OR ADOBE) ASSUMES THE ENTIRE COST OF ALL SERVICING, REPAIR AND
- * CORRECTION. IN NO EVENT SHALL IBM, LEXMARK, OR ADOBE BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/type1.c,v 1.9tsi Exp $ */
-
-/*********************************************************************/
-/* */
-/* Type 1 module - Converting fonts in Adobe Type 1 Font Format */
-/* to scaled and hinted paths for rasterization. */
-/* Files: type1.c, type1.h, and blues.h. */
-/* */
-/* Authors: Sten F. Andler, IBM Almaden Research Center */
-/* (Type 1 interpreter, stem & flex hints) */
-/* */
-/* Patrick A. Casey, Lexmark International, Inc. */
-/* (Font level hints & stem hints) */
-/* */
-/*********************************************************************/
-
-/******************/
-/* Include Files: */
-/******************/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#ifndef FONTMODULE
-#include <stdio.h> /* a system-dependent include, usually */
-#include <math.h>
-#else
-#include "Xdefs.h"
-#include "Xmd.h"
-#include "xf86_ansic.h"
-#endif
-#include "objects.h"
-#include "spaces.h"
-#include "paths.h"
-#include "fonts.h" /* understands about TEXTTYPEs */
-#include "pictures.h" /* understands about handles */
-#include "range.h"
-
-typedef struct xobject xobject;
-#include "util.h" /* PostScript objects */
-#include "fontfcn.h"
-#include "blues.h" /* Blues structure for font-level hints */
-
-/**********************************/
-/* Type1 Constants and Structures */
-/**********************************/
-#define MAXSTACK 24 /* Adobe Type1 limit */
-#define MAXCALLSTACK 10 /* Adobe Type1 limit */
-#define MAXPSFAKESTACK 32 /* Max depth of fake PostScript stack (local) */
-#define MAXSTRLEN 512 /* Max length of a Type 1 string (local) */
-#define MAXLABEL 256 /* Maximum number of new hints */
-#if XFONT_CID
-#define MAXSTEMS 500 /* Maximum number of VSTEM and HSTEM hints */
-#else
-#define MAXSTEMS 128 /* Maximum number of VSTEM and HSTEM hints */
-#endif
-#define EPS 0.001 /* Small number for comparisons */
-
-/************************************/
-/* Adobe Type 1 CharString commands */
-/************************************/
-#define HSTEM 1
-#define VSTEM 3
-#define VMOVETO 4
-#define RLINETO 5
-#define HLINETO 6
-#define VLINETO 7
-#define RRCURVETO 8
-#define CLOSEPATH 9
-#define CALLSUBR 10
-#define RETURN 11
-#define ESCAPE 12
-#define HSBW 13
-#define ENDCHAR 14
-#define RMOVETO 21
-#define HMOVETO 22
-#define VHCURVETO 30
-#define HVCURVETO 31
-
-/*******************************************/
-/* Adobe Type 1 CharString Escape commands */
-/*******************************************/
-#define DOTSECTION 0
-#define VSTEM3 1
-#define HSTEM3 2
-#define SEAC 6
-#define SBW 7
-#define DIV 12
-#define CALLOTHERSUBR 16
-#define POP 17
-#define SETCURRENTPOINT 33
-
-/*****************/
-/* Useful macros */
-/*****************/
-
-#define FABS(x) fabs(x)
-
-#define CEIL(x) ceil(x)
-
-#define FLOOR(x) floor(x)
-
-#define ROUND(x) FLOOR((x) + 0.5)
-
-#define ODD(x) (((int)(x)) & 01)
-
-#define Error {errflag = TRUE; return;}
-#define ErrorRet(ret) {errflag = TRUE; return (ret);}
-
-/********************/
-/* global variables */
-/********************/
-struct stem { /* representation of a STEM hint */
- int vertical; /* TRUE if vertical, FALSE otherwise */
- double x, dx; /* interval of vertical stem */
- double y, dy; /* interval of horizontal stem */
- struct segment *lbhint, *lbrevhint; /* left or bottom hint adjustment */
- struct segment *rthint, *rtrevhint; /* right or top hint adjustment */
-};
-
-struct xobject *Type1Char(char *env, struct XYspace *S,
- psobj *charstrP, psobj *subrsP, psobj *osubrsP,
- struct blues_struct *bluesP, int *modeP);
-#if XFONT_CID
-struct xobject *CIDChar(char *env, struct XYspace *S,
- psobj *charstrP, psobj *subrsP, psobj *osubrsP,
- struct blues_struct *bluesP, int *modeP);
-#endif
-
-static double escapementX, escapementY;
-static double sidebearingX, sidebearingY;
-static double accentoffsetX, accentoffsetY;
-
-static struct segment *path;
-static int errflag;
-
-/*************************************************/
-/* Global variables to hold Type1Char parameters */
-/*************************************************/
-static char *Environment;
-static struct XYspace *CharSpace;
-static psobj *CharStringP, *SubrsP;
-
-/************************/
-/* Forward declarations */
-/************************/
-static struct segment *Applyhint ( struct segment *p, int stemnumber,
- int half );
-static struct segment *Applyrevhint ( struct segment *p, int stemnumber,
- int half );
-static void CallOtherSubr ( int othersubrno );
-static void CallSubr ( int subrno );
-static struct segment *CenterStem ( double edge1, double edge2 );
-static void ClearCallStack ( void );
-static void ClearPSFakeStack ( void );
-static void ClearStack ( void );
-static void ComputeAlignmentZones ( void );
-static void ComputeStem ( int stemno );
-static void Decode ( int Code );
-static unsigned char Decrypt ( unsigned char cipher );
-static double Div ( double num1, double num2 );
-static void DoClosePath ( void );
-static void DoCommand ( int Code );
-static int DoRead ( int *CodeP );
-static void DotSection ( void );
-static void EndChar ( void );
-static void Escape ( int Code );
-static struct segment *FindStems ( double x, double y, double dx, double dy );
-static void FinitStems ( void );
-static void FlxProc ( double c1x2, double c1y2, double c3x0, double c3y0,
- double c3x1, double c3y1, double c3x2, double c3y2,
- double c4x0, double c4y0, double c4x1, double c4y1,
- double c4x2, double c4y2, double epY, double epX,
- int idmin );
-static void FlxProc1 ( void );
-static void FlxProc2 ( void );
-static void HintReplace ( void );
-static void HStem ( double y, double dy );
-static void InitStems ( void );
-static void PopCall ( psobj **CurrStrPP, int *CurrIndexP,
- unsigned short *CurrKeyP );
-static double PSFakePop ( void );
-static void PSFakePush ( double Num );
-static void Push ( double Num );
-static void PushCall ( psobj *CurrStrP, int CurrIndex,
- unsigned short CurrKey );
-static void Return ( void );
-static void RLineTo ( double dx, double dy );
-static void RMoveTo ( double dx, double dy );
-static void RRCurveTo ( double dx1, double dy1, double dx2, double dy2,
- double dx3, double dy3 );
-static void Sbw ( double sbx, double sby, double wx, double wy );
-static void Seac ( double asb, double adx, double ady, unsigned char bchar,
- unsigned char achar );
-static void SetCurrentPoint ( double x, double y );
-static void StartDecrypt ( void );
-static void VStem ( double x, double dx );
-
-/*****************************************/
-/* statics for Flex procedures (FlxProc) */
-/*****************************************/
-static struct segment *FlxOldPath; /* save path before Flex feature */
-
-/******************************************************/
-/* statics for Font level hints (Blues) (see blues.h) */
-/******************************************************/
-static struct blues_struct *blues; /* the blues structure */
-static struct alignmentzone alignmentzones[MAXALIGNMENTZONES];
-static int numalignmentzones; /* total number of alignment zones */
-
-/****************************************************************/
-/* Subroutines for the Font level hints (Alignment zones, etc.) */
-/****************************************************************/
-
-/******************************************/
-/* Fill in the alignment zone structures. */
-/******************************************/
-static void
-ComputeAlignmentZones(void)
-{
- int i;
- double dummy, bluezonepixels, familyzonepixels;
- struct segment *p;
-
- numalignmentzones = 0; /* initialize total # of zones */
-
- /* do the BlueValues zones */
- for (i = 0; i < blues->numBlueValues; i +=2, ++numalignmentzones) {
- /* the 0th & 1st numbers in BlueValues are for a bottom zone */
- /* the rest are topzones */
- if (i == 0) /* bottom zone */
- alignmentzones[numalignmentzones].topzone = FALSE;
- else /* top zone */
- alignmentzones[numalignmentzones].topzone = TRUE;
- if (i < blues->numFamilyBlues) { /* we must consider FamilyBlues */
- p = ILoc(CharSpace,0,blues->BlueValues[i] - blues->BlueValues[i+1]);
- QueryLoc(p, IDENTITY, &dummy, &bluezonepixels);
- Destroy(p);
- p = ILoc(CharSpace,0,blues->FamilyBlues[i]-blues->FamilyBlues[i+1]);
- QueryLoc(p, IDENTITY, &dummy, &familyzonepixels);
- Destroy(p);
- /* is the difference in size of the zones less than 1 pixel? */
- if (FABS(bluezonepixels - familyzonepixels) < 1.0) {
- /* use the Family zones */
- alignmentzones[numalignmentzones].bottomy =
- blues->FamilyBlues[i];
- alignmentzones[numalignmentzones].topy =
- blues->FamilyBlues[i+1];
- continue;
- }
- }
- /* use this font's Blue zones */
- alignmentzones[numalignmentzones].bottomy = blues->BlueValues[i];
- alignmentzones[numalignmentzones].topy = blues->BlueValues[i+1];
- }
-
- /* do the OtherBlues zones */
- for (i = 0; i < blues->numOtherBlues; i +=2, ++numalignmentzones) {
- /* all of the OtherBlues zones are bottom zones */
- alignmentzones[numalignmentzones].topzone = FALSE;
- if (i < blues->numFamilyOtherBlues) {/* consider FamilyOtherBlues */
- p = ILoc(CharSpace,0,blues->OtherBlues[i] - blues->OtherBlues[i+1]);
- QueryLoc(p, IDENTITY, &dummy, &bluezonepixels);
- Destroy(p);
- p = ILoc(CharSpace,0,blues->FamilyOtherBlues[i] -
- blues->FamilyOtherBlues[i+1]);
- QueryLoc(p, IDENTITY, &dummy, &familyzonepixels);
- Destroy(p);
- /* is the difference in size of the zones less than 1 pixel? */
- if (FABS(bluezonepixels - familyzonepixels) < 1.0) {
- /* use the Family zones */
- alignmentzones[numalignmentzones].bottomy =
- blues->FamilyOtherBlues[i];
- alignmentzones[numalignmentzones].topy =
- blues->FamilyOtherBlues[i+1];
- continue;
- }
- }
- /* use this font's Blue zones (as opposed to the Family Blues */
- alignmentzones[numalignmentzones].bottomy = blues->OtherBlues[i];
- alignmentzones[numalignmentzones].topy = blues->OtherBlues[i+1];
- }
-}
-
-/**********************************************************************/
-/* Subroutines and statics for handling of the VSTEM and HSTEM hints. */
-/**********************************************************************/
-static int InDotSection; /* DotSection flag */
-static struct stem stems[MAXSTEMS]; /* All STEM hints */
-static int numstems; /* Number of STEM hints */
-static int currstartstem; /* The current starting stem. */
-static int oldvert, oldhor; /* Remember hint in effect */
-static int oldhorhalf, oldverthalf; /* Remember which half of the stem */
-static double wsoffsetX, wsoffsetY; /* White space offset - for VSTEM3,HSTEM3 */
-static int wsset; /* Flag for whether we've set wsoffsetX,Y */
-
-static void
-InitStems(void) /* Initialize the STEM hint data structures */
-{
- InDotSection = FALSE;
- currstartstem = numstems = 0;
- oldvert = oldhor = -1;
-}
-
-static void
-FinitStems(void) /* Terminate the STEM hint data structures */
-{
- int i;
-
- for (i = 0; i < numstems; i++) {
- Destroy(stems[i].lbhint);
- Destroy(stems[i].lbrevhint);
- Destroy(stems[i].rthint);
- Destroy(stems[i].rtrevhint);
- }
-}
-
-/*******************************************************************/
-/* Compute the dislocation that a stemhint should cause for points */
-/* inside the stem. */
-/*******************************************************************/
-static void
-ComputeStem(int stemno)
-{
- int verticalondevice, idealwidth;
- double stemstart, stemwidth;
- struct segment *p;
- int i;
- double stembottom, stemtop, flatposition;
- double Xpixels, Ypixels;
- double unitpixels, onepixel;
- int suppressovershoot, enforceovershoot;
- double stemshift, flatpospixels, overshoot;
- double widthdiff; /* Number of character space units to adjust width */
- double lbhintvalue, rthintvalue;
- double cxx, cyx, cxy, cyy; /* Transformation matrix */
- int rotated; /* TRUE if character is on the side, FALSE if upright */
-
- /************************************************/
- /* DETERMINE ORIENTATION OF CHARACTER ON DEVICE */
- /************************************************/
-
- QuerySpace(CharSpace, &cxx, &cyx, &cxy, &cyy); /* Transformation matrix */
-
- if (FABS(cxx) < 0.00001 || FABS(cyy) < 0.00001)
- rotated = TRUE; /* Char is on side (90 or 270 degrees), possibly oblique. */
- else if (FABS(cyx) < 0.00001 || FABS(cxy) < 0.00001)
- rotated = FALSE; /* Char is upright (0 or 180 degrees), possibly oblique. */
- else {
- stems[stemno].lbhint = NULL; /* Char is at non-axial angle, ignore hints. */
- stems[stemno].lbrevhint = NULL;
- stems[stemno].rthint = NULL;
- stems[stemno].rtrevhint = NULL;
- return;
- }
-
- /* Determine orientation of stem */
-
- if (stems[stemno].vertical) {
- verticalondevice = !rotated;
- stemstart = stems[stemno].x;
- stemwidth = stems[stemno].dx;
- } else {
- verticalondevice = rotated;
- stemstart = stems[stemno].y;
- stemwidth = stems[stemno].dy;
- }
-
- /* Determine how many pixels (non-negative) correspond to 1 character space
- unit (unitpixels), and how many character space units (non-negative)
- correspond to one pixel (onepixel). */
-
- if (stems[stemno].vertical)
- p = ILoc(CharSpace, 1, 0);
- else
- p = ILoc(CharSpace, 0, 1);
- QueryLoc(p, IDENTITY, &Xpixels, &Ypixels);
- Destroy(p);
- if (verticalondevice)
- unitpixels = FABS(Xpixels);
- else
- unitpixels = FABS(Ypixels);
-
- onepixel = 1.0 / unitpixels;
-
- /**********************/
- /* ADJUST STEM WIDTHS */
- /**********************/
-
- widthdiff = 0.0;
-
- /* Find standard stem with smallest width difference from this stem */
- if (stems[stemno].vertical) { /* vertical stem */
- if (blues->StdVW != 0) /* there is an entry for StdVW */
- widthdiff = blues->StdVW - stemwidth;
- for (i = 0; i < blues->numStemSnapV; ++i) { /* now look at StemSnapV */
- if (blues->StemSnapV[i] - stemwidth < widthdiff)
- /* this standard width is the best match so far for this stem */
- widthdiff = blues->StemSnapV[i] - stemwidth;
- }
- } else { /* horizontal stem */
- if (blues->StdHW != 0) /* there is an entry for StdHW */
- widthdiff = blues->StdHW - stemwidth;
- for (i = 0; i < blues->numStemSnapH; ++i) { /* now look at StemSnapH */
- if (blues->StemSnapH[i] - stemwidth < widthdiff)
- /* this standard width is the best match so far for this stem */
- widthdiff = blues->StemSnapH[i] - stemwidth;
- }
- }
-
- /* Only expand or contract stems if they differ by less than 1 pixel from
- the closest standard width, otherwise make the width difference = 0. */
- if (FABS(widthdiff) > onepixel)
- widthdiff = 0.0;
-
- /* Expand or contract stem to the nearest integral number of pixels. */
- idealwidth = ROUND((stemwidth + widthdiff) * unitpixels);
- /* Ensure that all stems are at least one pixel wide. */
- if (idealwidth == 0)
- idealwidth = 1;
- /* Apply ForceBold to vertical stems. */
- if (blues->ForceBold && stems[stemno].vertical)
- /* Force this vertical stem to be at least DEFAULTBOLDSTEMWIDTH wide. */
- if (idealwidth < DEFAULTBOLDSTEMWIDTH)
- idealwidth = DEFAULTBOLDSTEMWIDTH;
- /* Now compute the number of character space units necessary */
- widthdiff = idealwidth * onepixel - stemwidth;
-
- /*********************************************************************/
- /* ALIGNMENT ZONES AND OVERSHOOT SUPPRESSION - HORIZONTAL STEMS ONLY */
- /*********************************************************************/
-
- stemshift = 0.0;
-
- if (!stems[stemno].vertical) {
-
- /* Get bottom and top boundaries of the stem. */
- stembottom = stemstart;
- stemtop = stemstart + stemwidth;
-
- /* Find out if this stem intersects an alignment zone (the BlueFuzz */
- /* entry in the Private dictionary specifies the number of character */
- /* units to extend (in both directions) the effect of an alignment */
- /* zone on a horizontal stem. The default value of BlueFuzz is 1. */
- for (i = 0; i < numalignmentzones; ++i) {
- if (alignmentzones[i].topzone) {
- if (stemtop >= alignmentzones[i].bottomy &&
- stemtop <= alignmentzones[i].topy + blues->BlueFuzz) {
- break; /* We found a top-zone */
- }
- } else {
- if (stembottom <= alignmentzones[i].topy &&
- stembottom >= alignmentzones[i].bottomy - blues->BlueFuzz) {
- break; /* We found a bottom-zone */
- }
- }
- }
-
- if (i < numalignmentzones) { /* We found an intersecting zone (number i). */
- suppressovershoot = FALSE;
- enforceovershoot = FALSE;
-
- /* When 1 character space unit is rendered smaller than BlueScale
- device units (pixels), we must SUPPRESS overshoots. Otherwise,
- if the top (or bottom) of this stem is more than BlueShift character
- space units away from the flat position, we must ENFORCE overshoot. */
-
- if (unitpixels < blues->BlueScale)
- suppressovershoot = TRUE;
- else
- if (alignmentzones[i].topzone) {
- if (stemtop >= alignmentzones[i].bottomy + blues->BlueShift)
- enforceovershoot = TRUE;
- } else
- if (stembottom <= alignmentzones[i].topy - blues->BlueShift)
- enforceovershoot = TRUE;
-
- /*************************************************/
- /* ALIGN THE FLAT POSITION OF THE ALIGNMENT ZONE */
- /*************************************************/
-
- /* Compute the position of the alignment zone's flat position in
- device space and the amount of shift needed to align it on a
- pixel boundary. Move all stems this amount. */
-
- if (alignmentzones[i].topzone)
- flatposition = alignmentzones[i].bottomy;
- else
- flatposition = alignmentzones[i].topy;
-
- /* Find the flat position in pixels */
- flatpospixels = flatposition * unitpixels;
-
- /* Find the stem shift necessary to align the flat
- position on a pixel boundary, and use this shift for all stems */
- stemshift = (ROUND(flatpospixels) - flatpospixels) * onepixel;
-
- /************************************************/
- /* HANDLE OVERSHOOT ENFORCEMENT AND SUPPRESSION */
- /************************************************/
-
- /* Compute overshoot amount (non-negative) */
- if (alignmentzones[i].topzone)
- overshoot = stemtop - flatposition;
- else
- overshoot = flatposition - stembottom;
-
- if (overshoot > 0.0) {
- /* ENFORCE overshoot by shifting the entire stem (if necessary) so that
- it falls at least one pixel beyond the flat position. */
-
- if (enforceovershoot)
- if (overshoot < onepixel) {
- if (alignmentzones[i].topzone)
- stemshift += onepixel - overshoot;
- else
- stemshift -= onepixel - overshoot;
- }
- /* SUPPRESS overshoot by aligning the stem to the alignment zone's
- flat position. */
-
- if (suppressovershoot) {
- if (alignmentzones[i].topzone)
- stemshift -= overshoot;
- else
- stemshift += overshoot;
- }
- }
-
- /************************************************************/
- /* COMPUTE HINT VALUES FOR EACH SIDE OF THE HORIZONTAL STEM */
- /************************************************************/
-
- /* If the stem was aligned by a topzone, we expand or contract the stem
- only at the bottom - since the stem top was aligned by the zone.
- If the stem was aligned by a bottomzone, we expand or contract the stem
- only at the top - since the stem bottom was aligned by the zone. */
- if (alignmentzones[i].topzone) {
- lbhintvalue = stemshift - widthdiff; /* bottom */
- rthintvalue = stemshift; /* top */
- } else {
- lbhintvalue = stemshift; /* bottom */
- rthintvalue = stemshift + widthdiff; /* top */
- }
-
- stems[stemno].lbhint = (struct segment *)Permanent(Loc(CharSpace, 0.0, lbhintvalue));
- stems[stemno].lbrevhint = (struct segment *)Permanent(Loc(CharSpace, 0.0, -lbhintvalue));
- stems[stemno].rthint = (struct segment *)Permanent(Loc(CharSpace, 0.0, rthintvalue));
- stems[stemno].rtrevhint = (struct segment *)Permanent(Loc(CharSpace, 0.0, -rthintvalue));
-
- return;
-
- } /* endif (i < numalignmentzones) */
-
- /* We didn't find any alignment zones intersecting this stem, so
- proceed with normal stem alignment below. */
-
- } /* endif (!stems[stemno].vertical) */
-
- /* Align stem with pixel boundaries on device */
- stemstart = stemstart - widthdiff / 2;
- stemshift = ROUND(stemstart * unitpixels) * onepixel - stemstart;
-
- /* Adjust the boundaries of the stem */
- lbhintvalue = stemshift - widthdiff / 2; /* left or bottom */
- rthintvalue = stemshift + widthdiff / 2; /* right or top */
-
- if (stems[stemno].vertical) {
- stems[stemno].lbhint = (struct segment *)Permanent(Loc(CharSpace, lbhintvalue, 0.0));
- stems[stemno].lbrevhint = (struct segment *)Permanent(Loc(CharSpace, -lbhintvalue, 0.0));
- stems[stemno].rthint = (struct segment *)Permanent(Loc(CharSpace, rthintvalue, 0.0));
- stems[stemno].rtrevhint = (struct segment *)Permanent(Loc(CharSpace, -rthintvalue, 0.0));
- } else {
- stems[stemno].lbhint = (struct segment *)Permanent(Loc(CharSpace, 0.0, lbhintvalue));
- stems[stemno].lbrevhint = (struct segment *)Permanent(Loc(CharSpace, 0.0, -lbhintvalue));
- stems[stemno].rthint = (struct segment *)Permanent(Loc(CharSpace, 0.0, rthintvalue));
- stems[stemno].rtrevhint = (struct segment *)Permanent(Loc(CharSpace, 0.0, -rthintvalue));
- }
-}
-
-#define LEFT 1
-#define RIGHT 2
-#define BOTTOM 3
-#define TOP 4
-
-/*********************************************************************/
-/* Adjust a point using the given stem hint. Use the left/bottom */
-/* hint value or the right/top hint value depending on where the */
-/* point lies in the stem. */
-/*********************************************************************/
-static struct segment *
-Applyhint(struct segment *p, int stemnumber, int half)
-{
- if (half == LEFT || half == BOTTOM)
- return Join(p, stems[stemnumber].lbhint); /* left or bottom hint */
- else
- return Join(p, stems[stemnumber].rthint); /* right or top hint */
-}
-
-/*********************************************************************/
-/* Adjust a point using the given reverse hint. Use the left/bottom */
-/* hint value or the right/top hint value depending on where the */
-/* point lies in the stem. */
-/*********************************************************************/
-static struct segment *
-Applyrevhint(struct segment *p, int stemnumber, int half)
-{
- if (half == LEFT || half == BOTTOM)
- return Join(p, stems[stemnumber].lbrevhint); /* left or bottom hint */
- else
- return Join(p, stems[stemnumber].rtrevhint); /* right or top hint */
-}
-
-/***********************************************************************/
-/* Find the vertical and horizontal stems that the current point */
-/* (x, y) may be involved in. At most one horizontal and one vertical */
-/* stem can apply to a single point, since there are no overlaps */
-/* allowed. */
-/* The actual hintvalue is returned as a location. */
-/* Hints are ignored inside a DotSection. */
-/***********************************************************************/
-static struct segment *
-FindStems(double x, double y, double dx, double dy)
-{
- int i;
- int newvert, newhor;
- struct segment *p;
- int newhorhalf, newverthalf;
-
- if (InDotSection) return(NULL);
-
- newvert = newhor = -1;
- newhorhalf = newverthalf = -1;
-
- for (i = currstartstem; i < numstems; i++) {
- if (stems[i].vertical) { /* VSTEM hint */
- if ((x >= stems[i].x - EPS) &&
- (x <= stems[i].x+stems[i].dx + EPS)) {
- newvert = i;
- if (dy != 0.0) {
- if (dy < 0) newverthalf = LEFT;
- else newverthalf = RIGHT;
- } else {
- if (x < stems[i].x+stems[i].dx / 2) newverthalf = LEFT;
- else newverthalf = RIGHT;
- }
- }
- } else { /* HSTEM hint */
- if ((y >= stems[i].y - EPS) &&
- (y <= stems[i].y+stems[i].dy + EPS)) {
- newhor = i;
- if (dx != 0.0) {
- if (dx < 0) newhorhalf = TOP;
- else newhorhalf = BOTTOM;
- } else {
- if (y < stems[i].y+stems[i].dy / 2) newhorhalf = BOTTOM;
- else newhorhalf = TOP;
- }
- }
- }
- }
-
- p = NULL;
-
- if (newvert == -1 && oldvert == -1) ; /* Outside of any hints */
- else if (newvert == oldvert &&
- newverthalf == oldverthalf); /* No hint change */
- else if (oldvert == -1) { /* New vertical hint in effect */
- p = Applyhint(p, newvert, newverthalf);
- } else if (newvert == -1) { /* Old vertical hint no longer in effect */
- p = Applyrevhint(p, oldvert, oldverthalf);
- } else { /* New vertical hint in effect, old hint no longer in effect */
- p = Applyrevhint(p, oldvert, oldverthalf);
- p = Applyhint(p, newvert, newverthalf);
- }
-
- if (newhor == -1 && oldhor == -1) ; /* Outside of any hints */
- else if (newhor == oldhor &&
- newhorhalf == oldhorhalf) ; /* No hint change */
- else if (oldhor == -1) { /* New horizontal hint in effect */
- p = Applyhint(p, newhor, newhorhalf);
- } else if (newhor == -1) { /* Old horizontal hint no longer in effect */
- p = Applyrevhint(p, oldhor, oldhorhalf);
- }
- else { /* New horizontal hint in effect, old hint no longer in effect */
- p = Applyrevhint(p, oldhor, oldhorhalf);
- p = Applyhint(p, newhor, newhorhalf);
- }
-
- oldvert = newvert; oldverthalf = newverthalf;
- oldhor = newhor; oldhorhalf = newhorhalf;
-
- return p;
-}
-
-/******************************************************/
-/* Subroutines and statics for the Type1Char routines */
-/******************************************************/
-
-static int strindex; /* index into PostScript string being interpreted */
-static double currx, curry; /* accumulated x and y values for hints */
-
-struct callstackentry {
- psobj *currstrP; /* current CharStringP */
- int currindex; /* current strindex */
- unsigned short currkey; /* current decryption key */
- };
-
-static double Stack[MAXSTACK];
-static int Top;
-static struct callstackentry CallStack[MAXCALLSTACK];
-static int CallTop;
-static double PSFakeStack[MAXPSFAKESTACK];
-static int PSFakeTop;
-
-static void
-ClearStack(void)
-{
- Top = -1;
-}
-
-static void
-Push(double Num)
-{
- if (++Top < MAXSTACK) Stack[Top] = Num;
- else Error;
-}
-
-static void
-ClearCallStack(void)
-{
- CallTop = -1;
-}
-
-static void
-PushCall(psobj *CurrStrP, int CurrIndex, unsigned short CurrKey)
-{
- if (++CallTop < MAXCALLSTACK) {
- CallStack[CallTop].currstrP = CurrStrP; /* save CharString pointer */
- CallStack[CallTop].currindex = CurrIndex; /* save CharString index */
- CallStack[CallTop].currkey = CurrKey; /* save decryption key */
- }
- else Error;
-}
-
-static void
-PopCall(psobj **CurrStrPP, int *CurrIndexP, unsigned short *CurrKeyP)
-{
- if (CallTop >= 0) {
- *CurrStrPP = CallStack[CallTop].currstrP; /* restore CharString pointer */
- *CurrIndexP = CallStack[CallTop].currindex; /* restore CharString index */
- *CurrKeyP = CallStack[CallTop--].currkey; /* restore decryption key */
- }
- else Error;
-}
-
-static void
-ClearPSFakeStack(void)
-{
- PSFakeTop = -1;
-}
-
-/* PSFakePush: Pushes a number onto the fake PostScript stack */
-static void
-PSFakePush(double Num)
-{
- if (++PSFakeTop < MAXPSFAKESTACK) PSFakeStack[PSFakeTop] = Num;
- else Error;
-}
-
-/* PSFakePop: Removes a number from the top of the fake PostScript stack */
-static double
-PSFakePop (void)
-{
- if (PSFakeTop >= 0) return(PSFakeStack[PSFakeTop--]);
- else ErrorRet(0.0);
- /*NOTREACHED*/
-}
-
-/***********************************************************************/
-/* Center a stem on the pixel grid -- used by HStem3 and VStem3 */
-/***********************************************************************/
-static struct segment *
-CenterStem(double edge1, double edge2)
-{
- int idealwidth, verticalondevice;
- double leftx, lefty, rightx, righty, center, width;
- double widthx, widthy;
- double shift, shiftx, shifty;
- double Xpixels, Ypixels;
- struct segment *p;
-
- p = Loc(CharSpace, edge1, 0.0);
- QueryLoc(p, IDENTITY, &leftx, &lefty);
-
- p = Join(p, Loc(CharSpace, edge2, 0.0));
- QueryLoc(p, IDENTITY, &rightx, &righty);
- Destroy(p);
-
- widthx = FABS(rightx - leftx);
- widthy = FABS(righty - lefty);
-
- if (widthy <= EPS) { /* verticalondevice hint */
- verticalondevice = TRUE;
- center = (rightx + leftx) / 2.0;
- width = widthx;
- }
- else if (widthx <= EPS) { /* horizontal hint */
- verticalondevice = FALSE;
- center = (righty + lefty) / 2.0;
- width = widthy;
- }
- else { /* neither horizontal nor verticalondevice and not oblique */
- return (NULL);
- }
-
- idealwidth = ROUND(width);
- if (idealwidth == 0) idealwidth = 1;
- if (ODD(idealwidth)) { /* is ideal width odd? */
- /* center stem over pixel */
- shift = FLOOR(center) + 0.5 - center;
- }
- else {
- /* align stem on pixel boundary */
- shift = ROUND(center) - center;
- }
-
- if (verticalondevice) {
- shiftx = shift;
- shifty = 0.0;
- } else {
- shifty = shift;
- shiftx = 0.0;
- }
-
- p = Loc(IDENTITY, shiftx, shifty);
- QueryLoc(p, CharSpace, &Xpixels, &Ypixels);
- wsoffsetX = Xpixels; wsoffsetY = Ypixels;
- currx += wsoffsetX; curry += wsoffsetY;
-
- return (p);
-}
-
-/*-----------------------------------------------------------------------
- Decrypt - From Adobe Type 1 book page 63, with some modifications
------------------------------------------------------------------------*/
-#define KEY 4330 /* Initial key (seed) for CharStrings decryption */
-#define C1 52845 /* Multiplier for pseudo-random number generator */
-#define C2 22719 /* Constant for pseudo-random number generator */
-
-static unsigned short r; /* Pseudo-random sequence of keys */
-
-static unsigned char
-Decrypt(unsigned char cipher)
-{
- unsigned char plain;
-
- plain = cipher ^ (r >> 8);
- r = (cipher + r) * C1 + C2;
- return plain;
-}
-
-/* Get the next byte from the codestring being interpreted */
-static int
-DoRead(int *CodeP)
-{
- if (strindex >= CharStringP->len) return(FALSE); /* end of string */
- *CodeP = Decrypt((unsigned char) CharStringP->data.stringP[strindex++]);
- return(TRUE);
-}
-
-/* Strip blues->lenIV bytes from CharString and update encryption key */
-/* (the lenIV entry in the Private dictionary specifies the number of */
-/* random bytes at the beginning of each CharString; default is 4) */
-static void
-StartDecrypt(void)
-{
- int Code;
-
- r = KEY; /* Initial key (seed) for CharStrings decryption */
- for (strindex = 0; strindex < blues->lenIV;)
- if (!DoRead(&Code)) /* Read a byte and update decryption key */
- Error;
-}
-
-static void
-Decode(int Code)
-{
- int Code1, Code2, Code3, Code4;
-
- if (Code <= 31) /* Code is [0,31] */
- DoCommand(Code);
- else if (Code <= 246) /* Code is [32,246] */
- Push((double)(Code - 139));
- else if (Code <= 250) { /* Code is [247,250] */
- if (!DoRead(&Code2)) goto ended;
- Push((double)(((Code - 247) << 8) + Code2 + 108));
- }
- else if (Code <= 254) { /* Code is [251,254] */
- if (!DoRead(&Code2)) goto ended;
- Push((double)( -((Code - 251) << 8) - Code2 - 108));
- }
- else { /* Code is 255 */
- if (!DoRead(&Code1)) goto ended;
- if (!DoRead(&Code2)) goto ended;
- if (!DoRead(&Code3)) goto ended;
- if (!DoRead(&Code4)) goto ended;
- Push((double)((((((Code1<<8) + Code2)<<8) + Code3)<<8) + Code4));
- }
- return;
-
-ended: Error;
-}
-
-/* Interpret a command code */
-static void
-DoCommand(int Code)
-{
- switch(Code) {
- case HSTEM: /* |- y dy HSTEM |- */
- /* Vertical range of a horizontal stem zone */
- if (Top < 1) Error;
- HStem(Stack[0], Stack[1]);
- ClearStack();
- break;
- case VSTEM: /* |- x dx VSTEM |- */
- /* Horizontal range of a vertical stem zone */
- if (Top < 1) Error;
- VStem(Stack[0], Stack[1]);
- ClearStack();
- break;
- case VMOVETO: /* |- dy VMOVETO |- */
- /* Vertical MOVETO, equivalent to 0 dy RMOVETO */
- if (Top < 0) Error;
- RMoveTo(0.0, Stack[0]);
- ClearStack();
- break;
- case RLINETO: /* |- dx dy RLINETO |- */
- /* Like RLINETO in PostScript */
- if (Top < 1) Error;
- RLineTo(Stack[0], Stack[1]);
- ClearStack();
- break;
- case HLINETO: /* |- dx HLINETO |- */
- /* Horizontal LINETO, equivalent to dx 0 RLINETO */
- if (Top < 0) Error;
- RLineTo(Stack[0], 0.0);
- ClearStack();
- break;
- case VLINETO: /* |- dy VLINETO |- */
- /* Vertical LINETO, equivalent to 0 dy RLINETO */
- if (Top < 0) Error;
- RLineTo(0.0, Stack[0]);
- ClearStack();
- break;
- case RRCURVETO:
- /* |- dx1 dy1 dx2 dy2 dx3 dy3 RRCURVETO |- */
- /* Relative RCURVETO, equivalent to dx1 dy1 */
- /* (dx1+dx2) (dy1+dy2) (dx1+dx2+dx3) */
- /* (dy1+dy2+dy3) RCURVETO in PostScript */
- if (Top < 5) Error;
- RRCurveTo(Stack[0], Stack[1], Stack[2], Stack[3],
- Stack[4], Stack[5]);
- ClearStack();
- break;
- case CLOSEPATH: /* - CLOSEPATH |- */
- /* Closes a subpath without repositioning the */
- /* current point */
- DoClosePath();
- ClearStack();
- break;
- case CALLSUBR: /* subr# CALLSUBR - */
- /* Calls a CharString subroutine with index */
- /* subr# from the Subrs array */
- if (Top < 0) Error;
- CallSubr((int)Stack[Top--]);
- break;
- case RETURN: /* - RETURN - */
- /* Returns from a Subrs array CharString */
- /* subroutine called with CALLSUBR */
- Return();
- break;
- case ESCAPE: /* ESCAPE to two-byte command code */
- if (!DoRead(&Code)) Error;
- Escape(Code);
- break;
- case HSBW: /* |- sbx wx HSBW |- */
- /* Set the left sidebearing point to (sbx,0), */
- /* set the character width vector to (wx,0). */
- /* Equivalent to sbx 0 wx 0 SBW. Space */
- /* character should have sbx = 0 */
- if (Top < 1) Error;
- Sbw(Stack[0], 0.0, Stack[1], 0.0);
- ClearStack();
- break;
- case ENDCHAR: /* - ENDCHAR |- */
- /* Finishes a CharString outline */
- EndChar();
- ClearStack();
- break;
- case RMOVETO: /* |- dx dy RMOVETO |- */
- /* Behaves like RMOVETO in PostScript */
- if (Top < 1) Error;
- RMoveTo(Stack[0], Stack[1]);
- ClearStack();
- break;
- case HMOVETO: /* |- dx HMOVETO |- */
- /* Horizontal MOVETO. Equivalent to dx 0 RMOVETO */
- if (Top < 0) Error;
- RMoveTo(Stack[0], 0.0);
- ClearStack();
- break;
- case VHCURVETO: /* |- dy1 dx2 dy2 dx3 VHCURVETO |- */
- /* Vertical-Horizontal CURVETO, equivalent to */
- /* 0 dy1 dx2 dy2 dx3 0 RRCURVETO */
- if (Top < 3) Error;
- RRCurveTo(0.0, Stack[0], Stack[1], Stack[2],
- Stack[3], 0.0);
- ClearStack();
- break;
- case HVCURVETO: /* |- dx1 dx2 dy2 dy3 HVCURVETO |- */
- /* Horizontal-Vertical CURVETO, equivalent to */
- /* dx1 0 dx2 dy2 0 dy3 RRCURVETO */
- if (Top < 3) Error;
- RRCurveTo(Stack[0], 0.0, Stack[1], Stack[2], 0.0, Stack[3]);
- ClearStack();
- break;
- default: /* Unassigned command code */
- ClearStack();
- Error;
- }
-}
-
-static void
-Escape(int Code)
-{
- int i, Num;
- struct segment *p;
-
- switch(Code) {
- case DOTSECTION: /* - DOTSECTION |- */
- /* Brackets an outline section for the dots in */
- /* letters such as "i", "j", and "!". */
- DotSection();
- ClearStack();
- break;
- case VSTEM3: /* |- x0 dx0 x1 dx1 x2 dx2 VSTEM3 |- */
- /* Declares the horizontal ranges of three */
- /* vertical stem zones between x0 and x0+dx0, */
- /* x1 and x1+dx1, and x2 and x2+dx2. */
- if (Top < 5) Error;
- if (!wsset && ProcessHints) {
- /* Shift the whole character so that the middle stem is centered. */
- p = CenterStem(Stack[2] + sidebearingX, Stack[3]);
- path = Join(path, p);
- wsset = 1;
- }
-
- VStem(Stack[0], Stack[1]);
- VStem(Stack[2], Stack[3]);
- VStem(Stack[4], Stack[5]);
- ClearStack();
- break;
- case HSTEM3: /* |- y0 dy0 y1 dy1 y2 dy2 HSTEM3 |- */
- /* Declares the vertical ranges of three hori- */
- /* zontal stem zones between y0 and y0+dy0, */
- /* y1 and y1+dy1, and y2 and y2+dy2. */
- if (Top < 5) Error;
- HStem(Stack[0], Stack[1]);
- HStem(Stack[2], Stack[3]);
- HStem(Stack[4], Stack[5]);
- ClearStack();
- break;
- case SEAC: /* |- asb adx ady bchar achar SEAC |- */
- /* Standard Encoding Accented Character. */
- if (Top < 4) Error;
- Seac(Stack[0], Stack[1], Stack[2],
- (unsigned char) Stack[3],
- (unsigned char) Stack[4]);
- ClearStack();
- break;
- case SBW: /* |- sbx sby wx wy SBW |- */
- /* Set the left sidebearing point to (sbx,sby), */
- /* set the character width vector to (wx,wy). */
- if (Top < 3) Error;
- Sbw(Stack[0], Stack[1], Stack[2], Stack[3]);
- ClearStack();
- break;
- case DIV: /* num1 num2 DIV quotient */
- /* Behaves like DIV in the PostScript language */
- if (Top < 1) Error;
- Stack[Top-1] = Div(Stack[Top-1], Stack[Top]);
- Top--;
- break;
- case CALLOTHERSUBR:
- /* arg1 ... argn n othersubr# CALLOTHERSUBR - */
- /* Make calls on the PostScript interpreter */
- if (Top < 1) Error;
- Num = Stack[Top-1];
- if (Top < Num+1) Error;
- for (i = 0; i < Num; i++) PSFakePush(Stack[Top - i - 2]);
- Top -= Num + 2;
-#if XFONT_CID
- if ((int)Stack[Top + Num + 2] > 3)
- ClearPSFakeStack();
- else
- CallOtherSubr((int)Stack[Top + Num + 2]);
-#else
- CallOtherSubr((int)Stack[Top + Num + 2]);
-#endif
- break;
- case POP: /* - POP number */
- /* Removes a number from the top of the */
- /* PostScript interpreter stack and pushes it */
- /* onto the Type 1 BuildChar operand stack */
- Push(PSFakePop());
- break;
- case SETCURRENTPOINT: /* |- x y SETCURRENTPOINT |- */
- /* Sets the current point to (x,y) in absolute */
- /* character space coordinates without per- */
- /* forming a CharString MOVETO command */
- if (Top < 1) Error;
- SetCurrentPoint(Stack[0], Stack[1]);
- ClearStack();
- break;
- default: /* Unassigned escape code command */
- ClearStack();
- Error;
- }
-}
-
-/* |- y dy HSTEM |- */
-/* Declares the vertical range of a horizontal stem zone */
-/* between coordinates y and y + dy */
-/* y is relative to the left sidebearing point */
-static void
-HStem(double y, double dy)
-{
- if (ProcessHints) {
- if (numstems >= MAXSTEMS) Error;
- if (dy < 0.0) {y += dy; dy = -dy;}
- stems[numstems].vertical = FALSE;
- stems[numstems].x = 0.0;
- stems[numstems].y = sidebearingY + y + wsoffsetY;
- stems[numstems].dx = 0.0;
- stems[numstems].dy = dy;
- ComputeStem(numstems);
- numstems++;
- }
-}
-
-/* |- x dx VSTEM |- */
-/* Declares the horizontal range of a vertical stem zone */
-/* between coordinates x and x + dx */
-/* x is relative to the left sidebearing point */
-
-static void
-VStem(double x, double dx)
-{
- if (ProcessHints) {
- if (numstems >= MAXSTEMS) Error;
- if (dx < 0.0) {x += dx; dx = -dx;}
- stems[numstems].vertical = TRUE;
- stems[numstems].x = sidebearingX + x + wsoffsetX;
- stems[numstems].y = 0.0;
- stems[numstems].dx = dx;
- stems[numstems].dy = 0.0;
- ComputeStem(numstems);
- numstems++;
- }
-}
-
-/* |- dx dy RLINETO |- */
-/* Behaves like RLINETO in PostScript */
-static void
-RLineTo(double dx, double dy)
-{
- struct segment *B;
-
- B = Loc(CharSpace, dx, dy);
-
- if (ProcessHints) {
- currx += dx;
- curry += dy;
- /* B = Join(B, FindStems(currx, curry)); */
- B = Join(B, FindStems(currx, curry, dx, dy));
- }
-
- path = Join(path, Line(B));
-}
-
-/* |- dx1 dy1 dx2 dy2 dx3 dy3 RRCURVETO |- */
-/* Relative RCURVETO, equivalent to dx1 dy1 */
-/* (dx1+dx2) (dy1+dy2) (dx1+dx2+dx3) */
-/* (dy1+dy2+dy3) RCURVETO in PostScript */
-static void
-RRCurveTo(double dx1, double dy1, double dx2, double dy2,
- double dx3, double dy3)
-{
- struct segment *B, *C, *D;
-
- B = Loc(CharSpace, dx1, dy1);
- C = Loc(CharSpace, dx2, dy2);
- D = Loc(CharSpace, dx3, dy3);
-
- if (ProcessHints) {
- /* For a Bezier curve, we apply the full hint value to
- the Bezier C point (and thereby D point). */
- currx += dx1 + dx2 + dx3;
- curry += dy1 + dy2 + dy3;
- /* C = Join(C, FindStems(currx, curry)); */
- C = Join(C, FindStems(currx, curry, dx3, dy3));
- }
-
- /* Since XIMAGER is not completely relative, */
- /* we need to add up the delta values */
-
- C = Join(C, (struct segment *)Dup(B));
- D = Join(D, (struct segment *)Dup(C));
-
- path = Join(path, (struct segment *)Bezier(B, C, D));
-}
-
-/* - CLOSEPATH |- */
-/* Closes a subpath WITHOUT repositioning the */
-/* current point */
-static void
-DoClosePath(void)
-{
- struct segment *CurrentPoint;
-
- CurrentPoint = Phantom(path);
- path = ClosePath(path);
- path = Join(Snap(path), CurrentPoint);
-}
-
-/* subr# CALLSUBR - */
-/* Calls a CharString subroutine with index */
-/* subr# from the Subrs array */
-static void
-CallSubr(int subrno)
-{
- if ((subrno < 0) || (subrno >= SubrsP->len))
- Error;
- PushCall(CharStringP, strindex, r);
- CharStringP = &SubrsP->data.arrayP[subrno];
- StartDecrypt();
-}
-
-/* - RETURN - */
-/* Returns from a Subrs array CharString */
-/* subroutine called with CALLSUBR */
-static void
-Return(void)
-{
- PopCall(&CharStringP, &strindex, &r);
-}
-
-/* - ENDCHAR |- */
-/* Finishes a CharString outline */
-/* Executes SETCHACHEDEVICE using a bounding box */
-/* it computes directly from the character outline */
-/* and using the width information acquired from a previous */
-/* HSBW or SBW. It then calls a special version of FILL */
-/* or STROKE depending on the value of PaintType in the */
-/* font dictionary */
-static void
-EndChar(void)
-{
- /* There is no need to compute and set bounding box for
- the cache, since XIMAGER does that on the fly. */
-
- /* Perform a Closepath just in case the command was left out */
- path = ClosePath(path);
-
- /* Set character width */
- path = Join(Snap(path), Loc(CharSpace, escapementX, escapementY));
-
-}
-
-/* |- dx dy RMOVETO |- */
-/* Behaves like RMOVETO in PostScript */
-static void
-RMoveTo(double dx, double dy)
-{
- struct segment *B;
-
- B = Loc(CharSpace, dx, dy);
-
- if (ProcessHints) {
- currx += dx;
- curry += dy;
- /* B = Join(B, FindStems(currx, curry)); */
- B = Join(B, FindStems(currx, curry, 0.0, 0.0));
- }
-
- path = Join(path, B);
-}
-
-/* - DOTSECTION |- */
-/* Brackets an outline section for the dots in */
-/* letters such as "i", "j", and "!". */
-static void
-DotSection(void)
-{
- InDotSection = !InDotSection;
-}
-
-/* |- asb adx ady bchar achar SEAC |- */
-/* Standard Encoding Accented Character. */
-static void
-Seac(double asb, double adx, double ady,
- unsigned char bchar, unsigned char achar)
-{
- int Code;
- struct segment *mypath;
-
- /* Move adx - asb, ady over and up from base char's sbpoint. */
- /* (We use adx - asb to counteract the accents sb shift.) */
- /* The variables accentoffsetX/Y modify sidebearingX/Y in Sbw(). */
- /* Note that these incorporate the base character's sidebearing shift by */
- /* using the current sidebearingX, Y values. */
- accentoffsetX = sidebearingX + adx - asb;
- accentoffsetY = sidebearingY + ady;
-
- /* Set path = NULL to avoid complaints from Sbw(). */
- path = NULL;
-
- /* Go find the CharString for the accent's code via an upcall */
- CharStringP = GetType1CharString((psfont *)Environment, achar);
- StartDecrypt();
-
- ClearStack();
- ClearPSFakeStack();
- ClearCallStack();
-
- for (;;) {
- if (!DoRead(&Code)) break;
- Decode(Code);
- if (errflag) return;
- }
- /* Copy snapped path to mypath and set path to NULL as above. */
- mypath = Snap(path);
- path = NULL;
-
- /* We must reset these to null now. */
- accentoffsetX = accentoffsetY = 0;
-
- /* go find the CharString for the base char's code via an upcall */
- CharStringP = GetType1CharString((psfont *)Environment, bchar);
- StartDecrypt();
-
- ClearStack();
- ClearPSFakeStack();
- ClearCallStack();
-
- FinitStems();
- InitStems();
-
- for (;;) {
- if (!DoRead(&Code)) break;
- Decode(Code);
- if (errflag) return;
- }
- path = Join(mypath, path);
-}
-
-
-/* |- sbx sby wx wy SBW |- */
-/* Set the left sidebearing point to (sbx,sby), */
-/* set the character width vector to (wx,wy). */
-static void
-Sbw(double sbx, double sby, double wx, double wy)
-{
- escapementX = wx; /* Character width vector */
- escapementY = wy;
-
- /* Sidebearing values are sbx, sby args, plus accent offset from Seac(). */
- sidebearingX = sbx + accentoffsetX;
- sidebearingY = sby + accentoffsetY;
-
- path = Join(path, Loc(CharSpace, sidebearingX, sidebearingY));
- if (ProcessHints) {currx = sidebearingX; curry = sidebearingY;}
-}
-
- /* num1 num2 DIV quotient */
-/* Behaves like DIV in the PostScript language */
-static double
-Div(double num1, double num2)
-{
- return(num1 / num2);
-}
-
-/*
- The following four subroutines (FlxProc, FlxProc1, FlxProc2, and
- HintReplace) are C versions of the OtherSubrs Programs, which were
- were published in the Adobe Type 1 Font Format book.
-
- The Flex outline fragment is described by
- c1: (x0, y0) = c3: (x0, yshrink(y0)) or (xshrink(x0), y0)
- " (x1, y1) = " (x1, yshrink(y1)) or (xshrink(x1), y1)
- " (x2, y2) - reference point
- c2: (x0, y0) = c4: (x0, yshrink(y0)) or (xshrink(x0), y0)
- " (x1, y1) = " (x1, yshrink(y1)) or (xshrink(x1), y1)
- " (x2, y2) = " (x2, y2), rightmost endpoint
- c3: (x0, y0) - control point, 1st Bezier curve
- " (x1, y1) - control point, -"-
- " (x2, y2) - end point, -"-
- c4: (x0, y0) - control point, 2nd Bezier curve
- " (x1, y1) - control point, -"-
- " (x2, y2) - end point, -"-
- ep: (epY, epX) - final endpoint (should be same as c4: (x2, y2))
- idmin - minimum Flex height (1/100 pixel) at which to render curves
-*/
-
-#define dtransform(dxusr,dyusr,dxdev,dydev) { \
- register struct segment *point = Loc(CharSpace, dxusr, dyusr); \
- QueryLoc(point, IDENTITY, dxdev, dydev); \
- Destroy(point); \
-}
-
-#define itransform(xdev,ydev,xusr,yusr) { \
- register struct segment *point = Loc(IDENTITY, xdev, ydev); \
- QueryLoc(point, CharSpace, xusr, yusr); \
- Destroy(point); \
-}
-
-#define transform(xusr,yusr,xdev,ydev) dtransform(xusr,yusr,xdev,ydev)
-
-#define PaintType (0)
-
-#define lineto(x,y) { \
- struct segment *CurrentPoint; \
- double CurrentX, CurrentY; \
- CurrentPoint = Phantom(path); \
- QueryLoc(CurrentPoint, CharSpace, &CurrentX, &CurrentY); \
- Destroy(CurrentPoint); \
- RLineTo(x - CurrentX, y - CurrentY); \
-}
-
-#define curveto(x0,y0,x1,y1,x2,y2) { \
- struct segment *CurrentPoint; \
- double CurrentX, CurrentY; \
- CurrentPoint = Phantom(path); \
- QueryLoc(CurrentPoint, CharSpace, &CurrentX, &CurrentY); \
- Destroy(CurrentPoint); \
- RRCurveTo(x0 - CurrentX, y0 - CurrentY, x1 - x0, y1 - y0, x2 - x1, y2 - y1); \
-}
-
-#define xshrink(x) ((x - c4x2) * shrink +c4x2)
-#define yshrink(y) ((y - c4y2) * shrink +c4y2)
-
-#define PickCoords(flag) \
- if (flag) { /* Pick "shrunk" coordinates */ \
- x0 = c1x0; y0 = c1y0; \
- x1 = c1x1; y1 = c1y1; \
- x2 = c1x2; y2 = c1y2; \
- x3 = c2x0; y3 = c2y0; \
- x4 = c2x1; y4 = c2y1; \
- x5 = c2x2; y5 = c2y2; \
- } else { /* Pick original coordinates */ \
- x0 = c3x0; y0 = c3y0; \
- x1 = c3x1; y1 = c3y1; \
- x2 = c3x2; y2 = c3y2; \
- x3 = c4x0; y3 = c4y0; \
- x4 = c4x1; y4 = c4y1; \
- x5 = c4x2; y5 = c4y2; \
- }
-
-/* FlxProc() = OtherSubrs[0]; Main part of Flex */
-/* Calling sequence: 'idmin epX epY 3 0 callothersubr' */
-/* Computes Flex values, and renders the Flex path, */
-/* and returns (leaves) ending coordinates on stack */
-static void
-FlxProc(double c1x2, double c1y2, double c3x0, double c3y0,
- double c3x1, double c3y1, double c3x2, double c3y2,
- double c4x0, double c4y0, double c4x1, double c4y1,
- double c4x2, double c4y2, double epY, double epX, int idmin)
-{
- double dmin;
- double c1x0, c1y0, c1x1, c1y1;
- double c2x0, c2y0, c2x1, c2y1, c2x2, c2y2;
- char yflag;
- double x0, y0, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5;
- double cxx, cyx, cxy, cyy; /* Transformation matrix */
- int flipXY;
- double x, y;
- double erosion = 1; /* Device parameter */
- /* Erosion may have different value specified in 'internaldict' */
- double shrink;
- double dX, dY;
- char erode;
- double eShift;
- double cx, cy;
- double ex, ey;
-
- c1x0 = c1y0 = c1x1 = c1y1 = c2x0 = c2y0 = c2x1 = c2y1 = c2x2 = c2y2 = 0.0;
-
- Destroy(path);
- path = FlxOldPath; /* Restore previous path (stored in FlxProc1) */
-
- if (ProcessHints) {
- dmin = ABS(idmin) / 100.0; /* Minimum Flex height in pixels */
-
- c2x2 = c4x2; c2y2 = c4y2; /* Point c2 = c4 */
-
- yflag = FABS(c1y2 - c3y2) > FABS(c1x2 - c3x2); /* Flex horizontal? */
-
- QuerySpace(CharSpace, &cxx, &cyx, &cxy, &cyy); /* Transformation matrix */
-
- if (FABS(cxx) < 0.00001 || FABS(cyy) < 0.00001)
- flipXY = -1; /* Char on side */
- else if (FABS(cyx) < 0.00001 || FABS(cxy) < 0.00001)
- flipXY = 1; /* Char upright */
- else
- flipXY = 0; /* Char at angle */
-
- if (yflag) { /* Flex horizontal */
- if (flipXY == 0 || c3y2 == c4y2) { /* Char at angle or Flex height = 0 */
- PickCoords(FALSE); /* Pick original control points */
- } else {
- shrink = FABS((c1y2 - c4y2) / (c3y2 - c4y2)); /* Slope */
-
- c1x0 = c3x0; c1y0 = yshrink(c3y0);
- c1x1 = c3x1; c1y1 = yshrink(c3y1);
- c2x0 = c4x0; c2y0 = yshrink(c4y0);
- c2x1 = c4x1; c2y1 = yshrink(c4y1);
-
- dtransform(0.0, ROUND(c3y2-c1y2), &x, &y); /* Flex height in pixels */
- dY = FABS((flipXY == 1) ? y : x);
- PickCoords(dY < dmin); /* If Flex small, pick 'shrunk' control points */
-
- if (FABS(y2 - c1y2) > 0.001) { /* Flex 'non-zero'? */
- transform(c1x2, c1y2, &x, &y);
-
- if (flipXY == 1) {
- cx = x; cy = y;
- } else {
- cx = y; cy = x;
- }
-
- dtransform(0.0, ROUND(y2-c1y2), &x, &y);
- dY = (flipXY == 1) ? y : x;
- if (ROUND(dY) != 0)
- dY = ROUND(dY);
- else
- dY = (dY < 0) ? -1 : 1;
-
- erode = PaintType != 2 && erosion >= 0.5;
- if (erode)
- cy -= 0.5;
- ey = cy + dY;
- ey = CEIL(ey) - ey;
- ey = ey + FLOOR(cy + dY);
- if (erode)
- ey += 0.5;
-
- if (flipXY == 1) {
- itransform(cx, ey, &x, &y);
- } else {
- itransform(ey, cx, &x, &y);
- }
-
- eShift = y - y2;
- y1 += eShift;
- y2 += eShift;
- y3 += eShift;
- }
- }
- } else { /* Flex vertical */
- if (flipXY == 0 || c3x2 == c4x2) { /* Char at angle or Flex height = 0 */
- PickCoords(FALSE); /* Pick original control points */
- } else {
- shrink = FABS((c1x2 - c4x2) / (c3x2 - c4x2)); /* Slope */
-
- c1x0 = xshrink(c3x0); c1y0 = c3y0;
- c1x1 = xshrink(c3x1); c1y1 = c3y1;
- c2x0 = xshrink(c4x0); c2y0 = c4y0;
- c2x1 = xshrink(c4x1); c2y1 = c4y1;
-
- dtransform(ROUND(c3x2 - c1x2), 0.0, &x, &y); /* Flex height in pixels */
- dX = FABS((flipXY == -1) ? y : x);
- PickCoords(dX < dmin); /* If Flex small, pick 'shrunk' control points */
-
- if (FABS(x2 - c1x2) > 0.001) {
- transform(c1x2, c1y2, &x, &y);
- if (flipXY == -1) {
- cx = y; cy = x;
- } else {
- cx = x; cy = y;
- }
-
- dtransform(ROUND(x2-c1x2), 0.0, &x, &y);
- dX = (flipXY == -1) ? y : x;
- if (ROUND(dX) != 0)
- dX = ROUND(dX);
- else
- dX = (dX < 0) ? -1 : 1;
-
- erode = PaintType != 2 && erosion >= 0.5;
- if (erode)
- cx -= 0.5;
- ex = cx + dX;
- ex = CEIL(ex) - ex;
- ex = ex + FLOOR(cx + dX);
- if (erode)
- ex += 0.5;
-
- if (flipXY == -1) {
- itransform(cy, ex, &x, &y);
- } else {
- itransform(ex, cy, &x, &y);
- }
-
- eShift = x - x2;
- x1 += eShift;
- x2 += eShift;
- x3 += eShift;
- }
- }
- }
-
- if (x2 == x5 || y2 == y5) {
- lineto(x5, y5);
- } else {
- curveto(x0, y0, x1, y1, x2, y2);
- curveto(x3, y3, x4, y4, x5, y5);
- }
- } else { /* ProcessHints is off */
- PickCoords(FALSE); /* Pick original control points */
- curveto(x0, y0, x1, y1, x2, y2);
- curveto(x3, y3, x4, y4, x5, y5);
- }
-
- PSFakePush(epY);
- PSFakePush(epX);
-}
-
-/* FlxProc1() = OtherSubrs[1]; Part of Flex */
-/* Calling sequence: '0 1 callothersubr' */
-/* Saves and clears path, then restores currentpoint */
-static void
-FlxProc1(void)
-{
- struct segment *CurrentPoint;
-
- CurrentPoint = Phantom(path);
-
- FlxOldPath = path;
- path = CurrentPoint;
-}
-
-/* FlxProc2() = OtherSubrs[2]; Part of Flex */
-/* Calling sequence: '0 2 callothersubr' */
-/* Returns currentpoint on stack */
-static void
-FlxProc2(void)
-{
- struct segment *CurrentPoint;
- double CurrentX, CurrentY;
-
- CurrentPoint = Phantom(path);
- QueryLoc(CurrentPoint, CharSpace, &CurrentX, &CurrentY);
- Destroy(CurrentPoint);
-
- /* Push CurrentPoint on fake PostScript stack */
- PSFakePush(CurrentX);
- PSFakePush(CurrentY);
-}
-
-/* HintReplace() = OtherSubrs[3]; Hint Replacement */
-/* Calling sequence: 'subr# 1 3 callothersubr pop callsubr' */
-/* Reinitializes stem hint structure */
-static void
-HintReplace(void)
-{
- /* Effectively retire the current stems, but keep them around for */
- /* revhint use in case we are in a stem when we replace hints. */
- currstartstem = numstems;
-
- /* 'subr#' is left on PostScript stack (for 'pop callsubr') */
-}
-
-/* arg1 ... argn n othersubr# CALLOTHERSUBR - */
-/* Make calls on the PostScript interpreter (or call equivalent C code) */
-/* NOTE: The n arguments have been pushed on the fake PostScript stack */
-static void
-CallOtherSubr(int othersubrno)
-{
- switch(othersubrno) {
- case 0: /* OtherSubrs[0]; Main part of Flex */
- if (PSFakeTop < 16) Error;
- ClearPSFakeStack();
- FlxProc(
- PSFakeStack[0], PSFakeStack[1], PSFakeStack[2], PSFakeStack[3],
- PSFakeStack[4], PSFakeStack[5], PSFakeStack[6], PSFakeStack[7],
- PSFakeStack[8], PSFakeStack[9], PSFakeStack[10], PSFakeStack[11],
- PSFakeStack[12], PSFakeStack[13], PSFakeStack[14], PSFakeStack[15],
- (int) PSFakeStack[16]
- );
- break;
- case 1: /* OtherSubrs[1]; Part of Flex */
- FlxProc1();
- break;
- case 2: /* OtherSubrs[2]; Part of Flex */
- FlxProc2();
- break;
- case 3: /* OtherSubrs[3]; Hint Replacement */
- HintReplace();
- break;
- default: { /* call OtherSubrs[4] or higher if PostScript is present */
- }
- }
-}
-
-/* |- x y SETCURRENTPOINT |- */
-/* Sets the current point to (x,y) in absolute */
-/* character space coordinates without per- */
-/* forming a CharString MOVETO command */
-static void
-SetCurrentPoint(double x, double y)
-{
- currx = x;
- curry = y;
-}
-
-/* The Type1Char routine for use by PostScript. */
-/************************************************/
-struct xobject *
-Type1Char(char *env, struct XYspace *S, psobj *charstrP, psobj *subrsP,
- psobj *osubrsP,
- struct blues_struct *bluesP, /* FontID's ptr to the blues struct */
- int *modeP)
-{
- int Code;
-
- path = NULL;
- errflag = FALSE;
-
- /* Make parameters available to all Type1 routines */
- Environment = env;
- CharSpace = S; /* used when creating path elements */
- CharStringP = charstrP;
- SubrsP = subrsP;
-
- blues = bluesP;
-
- /* compute the alignment zones */
- ComputeAlignmentZones();
-
- StartDecrypt();
-
- ClearStack();
- ClearPSFakeStack();
- ClearCallStack();
-
- InitStems();
-
- currx = curry = 0;
- escapementX = escapementY = 0;
- sidebearingX = sidebearingY = 0;
- accentoffsetX = accentoffsetY = 0;
- wsoffsetX = wsoffsetY = 0; /* No shift to preserve whitspace. */
- wsset = 0; /* wsoffsetX,Y haven't been set yet. */
-
- for (;;) {
- if (!DoRead(&Code)) break;
- Decode(Code);
- if (errflag) break;
- }
-
- FinitStems();
-
-
- /* Clean up if an error has occurred */
- if (errflag) {
- if (path != NULL) {
- Destroy(path); /* Reclaim storage */
- path = NULL; /* Indicate that character could not be built */
- }
- }
-
- return((struct xobject *) path);
-}
-
-#if XFONT_CID
-struct xobject *
-CIDChar(char *env, struct XYspace *S,
- psobj *charstrP, psobj *subrsP, psobj *osubrsP,
- struct blues_struct *bluesP, /* FontID's ptr to the blues struct */
- int *modeP)
-{
- int Code;
-
- path = NULL;
- errflag = FALSE;
-
- /* Make parameters available to all CID routines */
- Environment = env;
- CharSpace = S; /* used when creating path elements */
- CharStringP = charstrP;
- SubrsP = subrsP;
-
- blues = bluesP;
-
- /* compute the alignment zones */
- ComputeAlignmentZones();
-
- StartDecrypt();
-
- ClearStack();
- ClearPSFakeStack();
- ClearCallStack();
-
- InitStems();
-
- currx = curry = 0;
- escapementX = escapementY = 0;
- sidebearingX = sidebearingY = 0;
- accentoffsetX = accentoffsetY = 0;
- wsoffsetX = wsoffsetY = 0; /* No shift to preserve whitspace. */
- wsset = 0; /* wsoffsetX,Y haven't been set yet. */
-
- for (;;) {
- if (!DoRead(&Code)) break;
- Decode(Code);
- if (errflag) break;
- }
-
- FinitStems();
-
- /* Clean up if an error has occurred */
- if (errflag) {
- if (path != NULL) {
- Destroy(path); /* Reclaim storage */
- path = NULL; /* Indicate that character could not be built */
- }
- }
-
- return((struct xobject *) path);
-}
-#endif
diff --git a/nx-X11/lib/font/Type1/util.c b/nx-X11/lib/font/Type1/util.c
deleted file mode 100644
index 7c5a81dee..000000000
--- a/nx-X11/lib/font/Type1/util.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/* $Xorg: util.c,v 1.3 2000/08/17 19:46:34 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/util.c,v 1.5 1999/08/21 13:47:53 dawes Exp $ */
-/* Author: Katherine A. Hitchcock IBM Almaden Research Laboratory */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#ifndef FONTMODULE
-#include <stdio.h>
-#else
-#include "Xdefs.h"
-#include "Xmd.h"
-#include "xf86_ansic.h"
-#endif
-#include "util.h"
-#include <X11/fonts/fontmisc.h> /* for xalloc/xfree */
-
-static char *vm_base = NULL; /* Start of virtual memory area */
- char *vm_next = NULL; /* Pointer to first free byte */
- long vm_free = 0; /* Count of free bytes */
- long vm_size = 0; /* Total size of memory */
-
-/*
- * Initialize memory.
- */
-boolean
-vm_init(int cnt)
-{
-#if XFONT_CID
- if (vm_base == NULL || (vm_base != NULL && vm_size != cnt)) {
- if (vm_base != NULL) xfree(vm_base);
- vm_next = vm_base = (char *)xalloc (cnt);
- } else
- vm_next = vm_base;
-#else
- vm_next = vm_base = (char *)xalloc (cnt);
-#endif
-
- if (vm_base != NULL) {
- vm_free = cnt;
- vm_size = cnt;
- return(TRUE);
- }
- else
- return(FALSE);
-
-}
-
-char *
-vm_alloc(int bytes)
-{
- char *answer;
-
- /* Round to next word multiple */
- bytes = (bytes + 7) & ~7;
-
- /* Allocate the space, if it is available */
- if (bytes > 0 && bytes <= vm_free) {
- answer = vm_next;
- vm_free -= bytes;
- vm_next += bytes;
- }
- else
- answer = NULL;
-
- return(answer);
-}
-
-/*
- * Format an Integer object
- */
-void
-objFormatInteger(psobj *objP, int value)
-{
- if (objP != NULL) {
- objP->type = OBJ_INTEGER;
- objP->len = 0;
- objP->data.integer = value;
- }
-}
-
-/*
- * Format a Real object
- */
-void
-objFormatReal(psobj *objP, float value)
-{
- if (objP != NULL) {
- objP->type = OBJ_REAL;
- objP->len = 0;
- objP->data.real = value;
- }
-}
-
-/*
- * Format a Boolean object
- */
-void
-objFormatBoolean(psobj *objP, boolean value)
-{
- if (objP != NULL) {
- objP->type = OBJ_BOOLEAN;
- objP->len = 0;
- objP->data.boolean = value;
- }
-}
-
-/*
- * Format an Encoding object
- */
-void
-objFormatEncoding(psobj *objP, int length, psobj *valueP)
-{
- if (objP != NULL) {
- objP->type = OBJ_ENCODING;
- objP->len = length;
- objP->data.arrayP = valueP;
- }
-}
-
-/*
- * Format an Array object
- */
-void
-objFormatArray(psobj *objP, int length, psobj *valueP)
-{
- if (objP != NULL) {
- objP->type = OBJ_ARRAY;
- objP->len = length;
- objP->data.arrayP = valueP;
- }
-}
-
-
-/*
- * Format a String object
- */
-void
-objFormatString(psobj *objP, int length, char *valueP)
-{
- if (objP != NULL) {
- objP->type = OBJ_STRING;
- objP->len = length;
- objP->data.valueP = valueP;
- }
-}
-
-/*
- * Format a Name object
- */
-void
-objFormatName(psobj *objP, int length, char *valueP)
-{
- if (objP != NULL) {
- objP->type = OBJ_NAME;
- objP->len = length;
- objP->data.nameP = valueP;
- }
-}
-
-/*
- * Format a File object
- */
-void
-objFormatFile(psobj *objP, FILE *valueP)
-{
- if (objP != NULL) {
- objP->type = OBJ_FILE;
- objP->len = 0;
- objP->data.fileP = valueP;
- }
-}
-
diff --git a/nx-X11/lib/font/Type1/util.h b/nx-X11/lib/font/Type1/util.h
deleted file mode 100644
index a1a8b3e6b..000000000
--- a/nx-X11/lib/font/Type1/util.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/* $Xorg: util.h,v 1.3 2000/08/17 19:46:34 cpqbld Exp $ */
-/* Copyright International Business Machines,Corp. 1991
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software
- * and its documentation for any purpose and without fee is
- * hereby granted, provided that the above copyright notice
- * appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation,
- * and that the name of IBM not be used in advertising or
- * publicity pertaining to distribution of the software without
- * specific, written prior permission.
- *
- * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
- * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
- * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
- * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
- * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
- * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
- * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
- * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* Copyright (c) 1994-1999 Silicon Graphics, Inc. All Rights Reserved.
- *
- * The contents of this file are subject to the CID Font Code Public Licence
- * Version 1.0 (the "License"). You may not use this file except in compliance
- * with the Licence. You may obtain a copy of the License at Silicon Graphics,
- * Inc., attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA
- * 94043 or at http://www.sgi.com/software/opensource/cid/license.html.
- *
- * Software distributed under the License is distributed on an "AS IS" basis.
- * ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED
- * WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE OR OF
- * NON-INFRINGEMENT. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Software is CID font code that was developed by Silicon
- * Graphics, Inc.
- */
-/* $XFree86: xc/lib/font/Type1/util.h,v 1.4 1999/08/22 08:58:55 dawes Exp $ */
-
-#ifndef UTIL_H
-#define UTIL_H
-
-#ifdef BUILDCID
-#define XFONT_CID 1
-#endif
-
-#ifndef boolean
-typedef int boolean;
-#endif
-
-#ifndef TRUE
-#define TRUE (1)
-#endif
-
-#ifndef FALSE
-#define FALSE (0)
-#endif
-
-/***================================================================***/
-/* Portable definitions for 2's complement machines.
- * NOTE: These really should be based on PostScript types,
- * for example, sizeof(ps_integer), or sizeof(ps_unsigned)
- */
-#define MAX_ULONG (~(unsigned long)(0))
-/* This code is portable, assuming K&R C and 2's complement arithmetic */
-#define MAX_INTEGER \
- ((long)((((unsigned long) 1)<<(sizeof(unsigned long)*8-1))-1))
-#define MIN_INTEGER ((-MAX_INTEGER)-1)
-
-#define MAX_ARRAY_CNT (65535)
-#define MAX_DICT_CNT (65535)
-#define MAX_STRING_LEN (65535)
-#define MAX_NAME_LEN (128)
-
-/* this is the size of memory allocated for reading fonts */
-
-#if XFONT_CID
-#define VM_SIZE (100*1024)
-#else
-#define VM_SIZE (50*1024)
-#endif
-/***================================================================***/
-
-#ifndef MIN
-#define MIN(a,b) (((a)<(b)) ? a : b )
-#endif
-
-/***================================================================***/
-/* Routines for managing virtual memory */
-/***================================================================***/
-
-extern boolean vm_init ( int cnt );
-extern long vm_free;
-extern long vm_size;
-extern char *vm_next;
-extern char *vm_alloc ( int bytes );
-
-/***================================================================***/
-/* Macros for managing virtual memory */
-/***================================================================***/
-#define vm_next_byte() (vm_next)
-#define vm_free_bytes() (vm_free)
-#define vm_avail(B) (B <= vm_free)
-
-
-
-/***================================================================***/
-/* Types of PostScript objects */
-/***================================================================***/
-#define OBJ_INTEGER (0)
-#define OBJ_REAL (1)
-#define OBJ_BOOLEAN (2)
-#define OBJ_ARRAY (3)
-#define OBJ_STRING (4)
-#define OBJ_NAME (5)
-#define OBJ_FILE (6)
-#define OBJ_ENCODING (7)
-
-/***================================================================***/
-/* Value of PostScript objects */
-/***================================================================***/
-typedef union ps_value {
- char *valueP; /* value pointer for unspecified type */
- int value; /* value for unspecified type */
- int integer; /* when type is OBJ_INTEGER */
- float real; /* when type is OBJ_REAL */
- int boolean; /* when type is OBJ_BOOLEAN */
- struct ps_obj *arrayP; /* when type is OBJ_ARRAY */
- unsigned char *stringP; /* when type is OBJ_STRING */
- char *nameP; /* when type is OBJ_NAME */
- FILE *fileP; /* when type is OBJ_FILE */
-} psvalue;
-
-/***================================================================***/
-/* Definition of a PostScript object */
-/***================================================================***/
-typedef struct ps_obj {
- char type;
- char unused;
- unsigned short len;
- union ps_value data;
-} psobj;
-
-/***================================================================***/
-/* Definition of a PostScript Dictionary Entry */
-/***================================================================***/
-typedef struct ps_dict {
- psobj key;
- psobj value;
-} psdict;
-
-/***================================================================***/
-/* Macros for testing type of PostScript objects */
-/***================================================================***/
-#define objIsInteger(o) ((o).type == OBJ_INTEGER)
-#define objIsReal(o) ((o).type == OBJ_REAL)
-#define objIsBoolean(o) ((o).type == OBJ_BOOLEAN)
-#define objIsArray(o) ((o).type == OBJ_ARRAY)
-#define objIsString(o) ((o).type == OBJ_STRING)
-#define objIsName(o) ((o).type == OBJ_NAME)
-#define objIsFile(o) ((o).type == OBJ_FILE)
-
-/***================================================================***/
-/* Macros for setting type of PostScript objects */
-/***================================================================***/
-#define objSetInteger(o) ((o).type = OBJ_INTEGER)
-#define objSetReal(o) ((o).type = OBJ_REAL)
-#define objSetBoolean(o) ((o).type = OBJ_BOOLEAN)
-#define objSetArray(o) ((o).type = OBJ_ARRAY)
-#define objSetString(o) ((o).type = OBJ_STRING)
-#define objSetName(o) ((o).type = OBJ_NAME)
-#define objSetFile(o) ((o).type = OBJ_FILE)
-
-/***================================================================***/
-/* Macros for testing type of PostScript objects (pointer access) */
-/***================================================================***/
-#define objPIsInteger(o) ((o)->type == OBJ_INTEGER)
-#define objPIsReal(o) ((o)->type == OBJ_REAL)
-#define objPIsBoolean(o) ((o)->type == OBJ_BOOLEAN)
-#define objPIsArray(o) ((o)->type == OBJ_ARRAY)
-#define objPIsString(o) ((o)->type == OBJ_STRING)
-#define objPIsName(o) ((o)->type == OBJ_NAME)
-#define objPIsFile(o) ((o)->type == OBJ_FILE)
-
-/***================================================================***/
-/* Macros for setting type of PostScript objects (pointer access) */
-/***================================================================***/
-#define objPSetInteger(o) ((o)->type = OBJ_INTEGER)
-#define objPSetReal(o) ((o)->type = OBJ_REAL)
-#define objPSetBoolean(o) ((o)->type = OBJ_BOOLEAN)
-#define objPSetArray(o) ((o)->type = OBJ_ARRAY)
-#define objPSetString(o) ((o)->type = OBJ_STRING)
-#define objPSetName(o) ((o)->type = OBJ_NAME)
-#define objPSetFile(o) ((o)->type = OBJ_FILE)
-
-/***================================================================***/
-/* Prototypes of object formatting functions */
-/***================================================================***/
-extern void objFormatInteger ( psobj *objP, int value );
-extern void objFormatReal ( psobj *objP, float value );
-extern void objFormatBoolean ( psobj *objP, boolean value );
-extern void objFormatEncoding ( psobj *objP, int length, psobj *valueP );
-extern void objFormatArray ( psobj *objP, int length, psobj *valueP );
-extern void objFormatString ( psobj *objP, int length, char *valueP );
-extern void objFormatName ( psobj *objP, int length, char *valueP );
-extern void objFormatFile ( psobj *objP, FILE *valueP );
-
-#endif
diff --git a/nx-X11/lib/font/bitmap/Imakefile b/nx-X11/lib/font/bitmap/Imakefile
deleted file mode 100644
index 9acbe7796..000000000
--- a/nx-X11/lib/font/bitmap/Imakefile
+++ /dev/null
@@ -1,71 +0,0 @@
-XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:46:34 cpqbld Exp $
-
-
-
-
-XCOMM $XFree86: xc/lib/font/bitmap/Imakefile,v 1.11 2001/04/03 17:51:59 paulo Exp $
-
-#if BuildServer && DoLoadableServer
-#define IHaveSubdirs
-#define NoLibSubdirs
-#define PassCDebugFlags
-SUBDIRS = module
-#endif
-
-BDFSRCS=bdfread.c bdfutils.c
-BDFOBJS=bdfread.o bdfutils.o
-#ifndef KDriveXServer
-BDFDEFS=-DBDFFORMAT
-
-SNFSRCS=snfread.c
-SNFOBJS=snfread.o
-SNFDEFS=-DSNFFORMAT
-#endif
-
-PCFSRCS=pcfread.c pcfwrite.c
-PCFOBJS=pcfread.o pcfwrite.o
-PCFDEFS=-DPCFFORMAT
-
-
- INCLUDES = -I$(FONTINCSRC) -I../include
- HEADERS = bdfint.h pcf.h
-#ifdef FontFormatDefines
- FORMAT_DEFS = FontFormatDefines
-#endif
-#if GzipFontCompression
- GZIP_DEFS = -DX_GZIP_FONT_COMPRESSION
-#endif
- DEFINES = $(BDFDEFS) $(PCFDEFS) $(SNFDEFS)
-
- SRCS = $(BDFSRCS) bitmap.c bitmaputil.c bitscale.c \
- bitmapfunc.c $(PCFSRCS) $(SNFSRCS) \
- fontink.c
-
- OBJS = $(BDFOBJS) bitmap.o bitmaputil.o bitscale.o \
- bitmapfunc.o $(PCFOBJS) $(SNFOBJS) \
- fontink.o
-
-#if BuildFontLib
-#define DoNormalLib NormalLibFont
-#define DoSharedLib SharedLibFont
-#define DoDebugLib DebugLibFont
-#define DoProfileLib ProfileLibFont
-#include <Library.tmpl>
-LibraryObjectRule()
-
-SpecialCLibObjectRule(bitmapfunc,$(ICONFIGFILES),$(GZIP_DEFS))
-SpecialCLibObjectRule(bitscale,$(ICONFIGFILES),$(GZIP_DEFS))
-
-SubdirLibraryRule($(OBJS))
-NormalLintTarget($(SRCS))
-#endif
-
-#if BuildServer && DoLoadableServer
-MakeSubdirs($(SUBDIRS))
-DependSubdirs($(SUBDIRS))
-#endif
-
-BuildIncludes($(HEADERS),X11/fonts,../..)
-InstallMultipleFlags($(HEADERS),$(INCDIR)/X11/fonts,$(INSTINCFLAGS))
-
-DependTarget()
diff --git a/nx-X11/lib/font/bitmap/bdfint.h b/nx-X11/lib/font/bitmap/bdfint.h
deleted file mode 100644
index d41c4a556..000000000
--- a/nx-X11/lib/font/bitmap/bdfint.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* $Xorg: bdfint.h,v 1.4 2001/02/09 02:04:01 xorgcvs Exp $ */
-
-/*
-
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/bitmap/bdfint.h,v 1.4 2001/01/17 19:43:26 dawes Exp $ */
-
-#ifndef BDFINT_H
-#define BDFINT_H
-
-#define bdfIsPrefix(buf,str) (!strncmp((char *)buf,str,strlen(str)))
-#define bdfStrEqual(s1,s2) (!strcmp(s1,s2))
-
-#define BDF_GENPROPS 6
-#define NullProperty ((FontPropPtr)0)
-
-/*
- * This structure holds some properties we need to generate if they aren't
- * specified in the BDF file and some other values read from the file
- * that we'll need to calculate them. We need to keep track of whether
- * or not we've read them.
- */
-typedef struct BDFSTAT {
- int linenum;
- char *fileName;
- char fontName[MAXFONTNAMELEN];
- float pointSize;
- int resolution_x;
- int resolution_y;
- int digitCount;
- int digitWidths;
- int exHeight;
-
- FontPropPtr fontProp;
- FontPropPtr pointSizeProp;
- FontPropPtr resolutionXProp;
- FontPropPtr resolutionYProp;
- FontPropPtr resolutionProp;
- FontPropPtr xHeightProp;
- FontPropPtr weightProp;
- FontPropPtr quadWidthProp;
- BOOL haveFontAscent;
- BOOL haveFontDescent;
- BOOL haveDefaultCh;
-} bdfFileState;
-
-extern void bdfError ( char * message, ... );
-extern void bdfWarning ( char *message, ... );
-extern unsigned char * bdfGetLine ( FontFilePtr file, unsigned char *buf,
- int len );
-extern Atom bdfForceMakeAtom ( char *str, int *size );
-extern Atom bdfGetPropertyValue ( char *s );
-extern int bdfIsInteger ( char *str );
-extern unsigned char bdfHexByte ( unsigned char *s );
-extern Bool bdfSpecialProperty ( FontPtr pFont, FontPropPtr prop,
- char isString, bdfFileState *bdfState );
-extern int bdfReadFont( FontPtr pFont, FontFilePtr file,
- int bit, int byte, int glyph, int scan );
-extern int bdfReadFontInfo( FontInfoPtr pFontInfo, FontFilePtr file );
-
-extern void FontCharInkMetrics ( FontPtr pFont, CharInfoPtr pCI,
- xCharInfo *pInk );
-extern void FontCharReshape ( FontPtr pFont, CharInfoPtr pSrc,
- CharInfoPtr pDst );
-
-#endif /* BDFINT_H */
diff --git a/nx-X11/lib/font/bitmap/bdfread.c b/nx-X11/lib/font/bitmap/bdfread.c
deleted file mode 100644
index bccabd7df..000000000
--- a/nx-X11/lib/font/bitmap/bdfread.c
+++ /dev/null
@@ -1,967 +0,0 @@
-/* $Xorg: bdfread.c,v 1.5 2001/02/09 02:04:01 xorgcvs Exp $ */
-
-/************************************************************************
-Copyright 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-************************************************************************/
-
-/*
-
-Copyright 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/bitmap/bdfread.c,v 1.12tsi Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef FONTMODULE
-#include <ctype.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/fontutil.h>
-/* use bitmap structure */
-#include <X11/fonts/bitmap.h>
-#include <X11/fonts/bdfint.h>
-
-#if HAVE_STDINT_H
-#include <stdint.h>
-#elif !defined(INT32_MAX)
-#define INT32_MAX 0x7fffffff
-#endif
-
-#define INDICES 256
-#define MAXENCODING 0xFFFF
-#define BDFLINELEN 1024
-
-static Bool bdfPadToTerminal(FontPtr pFont);
-extern int bdfFileLineNum;
-
-/***====================================================================***/
-
-static Bool
-bdfReadBitmap(CharInfoPtr pCI, FontFilePtr file, int bit, int byte,
- int glyph, int scan, CARD32 *sizes)
-{
- int widthBits,
- widthBytes,
- widthHexChars;
- int height,
- row;
- int i,
- inLineLen,
- nextByte;
- unsigned char *pInBits,
- *picture,
- *line = NULL;
- unsigned char lineBuf[BDFLINELEN];
-
- widthBits = GLYPHWIDTHPIXELS(pCI);
- height = GLYPHHEIGHTPIXELS(pCI);
-
- widthBytes = BYTES_PER_ROW(widthBits, glyph);
- if (widthBytes * height > 0) {
- picture = (unsigned char *) xalloc(widthBytes * height);
- if (!picture) {
- bdfError("Couldn't allocate picture (%d*%d)\n", widthBytes, height);
- goto BAILOUT;
- }
- } else
- picture = NULL;
- pCI->bits = (char *) picture;
-
- if (sizes) {
- for (i = 0; i < GLYPHPADOPTIONS; i++)
- sizes[i] += BYTES_PER_ROW(widthBits, (1 << i)) * height;
- }
- nextByte = 0;
- widthHexChars = BYTES_PER_ROW(widthBits, 1);
-
-/* 5/31/89 (ef) -- hack, hack, hack. what *am* I supposed to do with */
-/* 0 width characters? */
-
- for (row = 0; row < height; row++) {
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if (!line)
- break;
-
- if (widthBits == 0) {
- if ((!line) || (bdfIsPrefix(line, "ENDCHAR")))
- break;
- else
- continue;
- }
- pInBits = line;
- inLineLen = strlen((char *) pInBits);
-
- if (inLineLen & 1) {
- bdfError("odd number of characters in hex encoding\n");
- line[inLineLen++] = '0';
- line[inLineLen] = '\0';
- }
- inLineLen >>= 1;
- i = inLineLen;
- if (i > widthHexChars)
- i = widthHexChars;
- for (; i > 0; i--, pInBits += 2)
- picture[nextByte++] = bdfHexByte(pInBits);
-
- /* pad if line is too short */
- if (inLineLen < widthHexChars) {
- for (i = widthHexChars - inLineLen; i > 0; i--)
- picture[nextByte++] = 0;
- } else {
- unsigned char mask;
-
- mask = 0xff << (8 - (widthBits & 0x7));
- if (mask && picture[nextByte - 1] & ~mask) {
- picture[nextByte - 1] &= mask;
- }
- }
-
- if (widthBytes > widthHexChars) {
- i = widthBytes - widthHexChars;
- while (i-- > 0)
- picture[nextByte++] = 0;
- }
- }
-
- if ((line && (!bdfIsPrefix(line, "ENDCHAR"))) || (height == 0))
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
-
- if ((!line) || (!bdfIsPrefix(line, "ENDCHAR"))) {
- bdfError("missing 'ENDCHAR'\n");
- goto BAILOUT;
- }
- if (nextByte != height * widthBytes) {
- bdfError("bytes != rows * bytes_per_row (%d != %d * %d)\n",
- nextByte, height, widthBytes);
- goto BAILOUT;
- }
- if (picture != NULL) {
- if (bit == LSBFirst)
- BitOrderInvert(picture, nextByte);
- if (bit != byte) {
- if (scan == 2)
- TwoByteSwap(picture, nextByte);
- else if (scan == 4)
- FourByteSwap(picture, nextByte);
- }
- }
- return (TRUE);
-BAILOUT:
- if (picture)
- xfree(picture);
- pCI->bits = NULL;
- return (FALSE);
-}
-
-/***====================================================================***/
-
-static Bool
-bdfSkipBitmap(FontFilePtr file, int height)
-{
- unsigned char *line;
- int i = 0;
- unsigned char lineBuf[BDFLINELEN];
-
- do {
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- i++;
- } while (line && !bdfIsPrefix(line, "ENDCHAR") && i <= height);
-
- if (i > 1 && line && !bdfIsPrefix(line, "ENDCHAR")) {
- bdfError("Error in bitmap, missing 'ENDCHAR'\n");
- return (FALSE);
- }
- return (TRUE);
-}
-
-/***====================================================================***/
-
-static void
-bdfFreeFontBits(FontPtr pFont)
-{
- BitmapFontPtr bitmapFont;
- BitmapExtraPtr bitmapExtra;
- int i, nencoding;
-
- bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
- bitmapExtra = (BitmapExtraPtr) bitmapFont->bitmapExtra;
- xfree(bitmapFont->ink_metrics);
- if(bitmapFont->encoding) {
- nencoding = (pFont->info.lastCol - pFont->info.firstCol + 1) *
- (pFont->info.lastRow - pFont->info.firstRow + 1);
- for(i=0; i<NUM_SEGMENTS(nencoding); i++)
- xfree(bitmapFont->encoding[i]);
- }
- xfree(bitmapFont->encoding);
- for (i = 0; i < bitmapFont->num_chars; i++)
- xfree(bitmapFont->metrics[i].bits);
- xfree(bitmapFont->metrics);
- if (bitmapExtra)
- {
- xfree (bitmapExtra->glyphNames);
- xfree (bitmapExtra->sWidths);
- xfree (bitmapExtra);
- }
- xfree(pFont->info.props);
- xfree(bitmapFont);
-}
-
-
-static Bool
-bdfReadCharacters(FontFilePtr file, FontPtr pFont, bdfFileState *pState,
- int bit, int byte, int glyph, int scan)
-{
- unsigned char *line;
- register CharInfoPtr ci;
- int i,
- ndx,
- nchars,
- nignored;
- unsigned int char_row, char_col;
- int numEncodedGlyphs = 0;
- CharInfoPtr *bdfEncoding[256];
- BitmapFontPtr bitmapFont;
- BitmapExtraPtr bitmapExtra;
- CARD32 *bitmapsSizes;
- unsigned char lineBuf[BDFLINELEN];
- int nencoding;
-
- bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
- bitmapExtra = (BitmapExtraPtr) bitmapFont->bitmapExtra;
-
- if (bitmapExtra) {
- bitmapsSizes = bitmapExtra->bitmapsSizes;
- for (i = 0; i < GLYPHPADOPTIONS; i++)
- bitmapsSizes[i] = 0;
- } else
- bitmapsSizes = NULL;
-
- bzero(bdfEncoding, sizeof(bdfEncoding));
- bitmapFont->metrics = NULL;
- ndx = 0;
-
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
-
- if ((!line) || (sscanf((char *) line, "CHARS %d", &nchars) != 1)) {
- bdfError("bad 'CHARS' in bdf file\n");
- return (FALSE);
- }
- if (nchars < 1) {
- bdfError("invalid number of CHARS in BDF file\n");
- return (FALSE);
- }
- if (nchars > INT32_MAX / sizeof(CharInfoRec)) {
- bdfError("Couldn't allocate pCI (%d*%d)\n", nchars,
- sizeof(CharInfoRec));
- goto BAILOUT;
- }
- ci = (CharInfoPtr) xalloc(nchars * sizeof(CharInfoRec));
- if (!ci) {
- bdfError("Couldn't allocate pCI (%d*%d)\n", nchars,
- sizeof(CharInfoRec));
- goto BAILOUT;
- }
- bzero((char *)ci, nchars * sizeof(CharInfoRec));
- bitmapFont->metrics = ci;
-
- if (bitmapExtra) {
- bitmapExtra->glyphNames = (Atom *) xalloc(nchars * sizeof(Atom));
- if (!bitmapExtra->glyphNames) {
- bdfError("Couldn't allocate glyphNames (%d*%d)\n",
- nchars, sizeof(Atom));
- goto BAILOUT;
- }
- }
- if (bitmapExtra) {
- bitmapExtra->sWidths = (int *) xalloc(nchars * sizeof(int));
- if (!bitmapExtra->sWidths) {
- bdfError("Couldn't allocate sWidth (%d *%d)\n",
- nchars, sizeof(int));
- return FALSE;
- }
- }
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- pFont->info.firstRow = 256;
- pFont->info.lastRow = 0;
- pFont->info.firstCol = 256;
- pFont->info.lastCol = 0;
- nignored = 0;
- for (ndx = 0; (ndx < nchars) && (line) && (bdfIsPrefix(line, "STARTCHAR"));) {
- int t;
- int wx; /* x component of width */
- int wy; /* y component of width */
- int bw; /* bounding-box width */
- int bh; /* bounding-box height */
- int bl; /* bounding-box left */
- int bb; /* bounding-box bottom */
- int enc,
- enc2; /* encoding */
- unsigned char *p; /* temp pointer into line */
- char charName[100];
- int ignore;
-
- if (sscanf((char *) line, "STARTCHAR %99s", charName) != 1) {
- bdfError("bad character name in BDF file\n");
- goto BAILOUT; /* bottom of function, free and return error */
- }
- if (bitmapExtra)
- bitmapExtra->glyphNames[ndx] = bdfForceMakeAtom(charName, NULL);
-
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if (!line || (t = sscanf((char *) line, "ENCODING %d %d", &enc, &enc2)) < 1) {
- bdfError("bad 'ENCODING' in BDF file\n");
- goto BAILOUT;
- }
- if (enc < -1 || (t == 2 && enc2 < -1)) {
- bdfError("bad ENCODING value");
- goto BAILOUT;
- }
- if (t == 2 && enc == -1)
- enc = enc2;
- ignore = 0;
- if (enc == -1) {
- if (!bitmapExtra) {
- nignored++;
- ignore = 1;
- }
- } else if (enc > MAXENCODING) {
- bdfError("char '%s' has encoding too large (%d)\n",
- charName, enc);
- } else {
- char_row = (enc >> 8) & 0xFF;
- char_col = enc & 0xFF;
- if (char_row < pFont->info.firstRow)
- pFont->info.firstRow = char_row;
- if (char_row > pFont->info.lastRow)
- pFont->info.lastRow = char_row;
- if (char_col < pFont->info.firstCol)
- pFont->info.firstCol = char_col;
- if (char_col > pFont->info.lastCol)
- pFont->info.lastCol = char_col;
- if (bdfEncoding[char_row] == (CharInfoPtr *) NULL) {
- bdfEncoding[char_row] =
- (CharInfoPtr *) xalloc(256 * sizeof(CharInfoPtr));
- if (!bdfEncoding[char_row]) {
- bdfError("Couldn't allocate row %d of encoding (%d*%d)\n",
- char_row, INDICES, sizeof(CharInfoPtr));
- goto BAILOUT;
- }
- for (i = 0; i < 256; i++)
- bdfEncoding[char_row][i] = (CharInfoPtr) NULL;
- }
- if (bdfEncoding[char_row] != NULL) {
- bdfEncoding[char_row][char_col] = ci;
- numEncodedGlyphs++;
- }
- }
-
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if ((!line) || (sscanf((char *) line, "SWIDTH %d %d", &wx, &wy) != 2)) {
- bdfError("bad 'SWIDTH'\n");
- goto BAILOUT;
- }
- if (wy != 0) {
- bdfError("SWIDTH y value must be zero\n");
- goto BAILOUT;
- }
- if (bitmapExtra)
- bitmapExtra->sWidths[ndx] = wx;
-
-/* 5/31/89 (ef) -- we should be able to ditch the character and recover */
-/* from all of these. */
-
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if ((!line) || (sscanf((char *) line, "DWIDTH %d %d", &wx, &wy) != 2)) {
- bdfError("bad 'DWIDTH'\n");
- goto BAILOUT;
- }
- if (wy != 0) {
- bdfError("DWIDTH y value must be zero\n");
- goto BAILOUT;
- }
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if ((!line) || (sscanf((char *) line, "BBX %d %d %d %d", &bw, &bh, &bl, &bb) != 4)) {
- bdfError("bad 'BBX'\n");
- goto BAILOUT;
- }
- if ((bh < 0) || (bw < 0)) {
- bdfError("character '%s' has a negative sized bitmap, %dx%d\n",
- charName, bw, bh);
- goto BAILOUT;
- }
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if ((line) && (bdfIsPrefix(line, "ATTRIBUTES"))) {
- for (p = line + strlen("ATTRIBUTES ");
- (*p == ' ') || (*p == '\t');
- p++)
- /* empty for loop */ ;
- ci->metrics.attributes = (bdfHexByte(p) << 8) + bdfHexByte(p + 2);
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- } else
- ci->metrics.attributes = 0;
-
- if (!line || !bdfIsPrefix(line, "BITMAP")) {
- bdfError("missing 'BITMAP'\n");
- goto BAILOUT;
- }
- /* collect data for generated properties */
- if ((strlen(charName) == 1)) {
- if ((charName[0] >= '0') && (charName[0] <= '9')) {
- pState->digitWidths += wx;
- pState->digitCount++;
- } else if (charName[0] == 'x') {
- pState->exHeight = (bh + bb) <= 0 ? bh : bh + bb;
- }
- }
- if (!ignore) {
- ci->metrics.leftSideBearing = bl;
- ci->metrics.rightSideBearing = bl + bw;
- ci->metrics.ascent = bh + bb;
- ci->metrics.descent = -bb;
- ci->metrics.characterWidth = wx;
- ci->bits = NULL;
- bdfReadBitmap(ci, file, bit, byte, glyph, scan, bitmapsSizes);
- ci++;
- ndx++;
- } else
- bdfSkipBitmap(file, bh);
-
- line = bdfGetLine(file, lineBuf, BDFLINELEN); /* get STARTCHAR or
- * ENDFONT */
- }
-
- if (ndx + nignored != nchars) {
- bdfError("%d too few characters\n", nchars - (ndx + nignored));
- goto BAILOUT;
- }
- nchars = ndx;
- bitmapFont->num_chars = nchars;
- if ((line) && (bdfIsPrefix(line, "STARTCHAR"))) {
- bdfError("more characters than specified\n");
- goto BAILOUT;
- }
- if ((!line) || (!bdfIsPrefix(line, "ENDFONT"))) {
- bdfError("missing 'ENDFONT'\n");
- goto BAILOUT;
- }
- if (numEncodedGlyphs == 0)
- bdfWarning("No characters with valid encodings\n");
-
- nencoding = (pFont->info.lastRow - pFont->info.firstRow + 1) *
- (pFont->info.lastCol - pFont->info.firstCol + 1);
- bitmapFont->encoding =
- (CharInfoPtr **) xcalloc(NUM_SEGMENTS(nencoding),
- sizeof(CharInfoPtr*));
- if (!bitmapFont->encoding) {
- bdfError("Couldn't allocate ppCI (%d,%d)\n",
- NUM_SEGMENTS(nencoding),
- sizeof(CharInfoPtr*));
- goto BAILOUT;
- }
- pFont->info.allExist = TRUE;
- i = 0;
- for (char_row = pFont->info.firstRow;
- char_row <= pFont->info.lastRow;
- char_row++) {
- if (bdfEncoding[char_row] == (CharInfoPtr *) NULL) {
- pFont->info.allExist = FALSE;
- i += pFont->info.lastCol - pFont->info.firstCol + 1;
- } else {
- for (char_col = pFont->info.firstCol;
- char_col <= pFont->info.lastCol;
- char_col++) {
- if (!bdfEncoding[char_row][char_col])
- pFont->info.allExist = FALSE;
- else {
- if (!bitmapFont->encoding[SEGMENT_MAJOR(i)]) {
- bitmapFont->encoding[SEGMENT_MAJOR(i)]=
- (CharInfoPtr*)xcalloc(BITMAP_FONT_SEGMENT_SIZE,
- sizeof(CharInfoPtr));
- if (!bitmapFont->encoding[SEGMENT_MAJOR(i)])
- goto BAILOUT;
- }
- ACCESSENCODINGL(bitmapFont->encoding,i) =
- bdfEncoding[char_row][char_col];
- }
- i++;
- }
- }
- }
- for (i = 0; i < 256; i++)
- if (bdfEncoding[i])
- xfree(bdfEncoding[i]);
- return (TRUE);
-BAILOUT:
- for (i = 0; i < 256; i++)
- if (bdfEncoding[i])
- xfree(bdfEncoding[i]);
- /* bdfFreeFontBits will clean up the rest */
- return (FALSE);
-}
-
-/***====================================================================***/
-
-static Bool
-bdfReadHeader(FontFilePtr file, bdfFileState *pState)
-{
- unsigned char *line;
- char namebuf[BDFLINELEN];
- unsigned char lineBuf[BDFLINELEN];
-
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if (!line || sscanf((char *) line, "STARTFONT %s", namebuf) != 1 ||
- !bdfStrEqual(namebuf, "2.1")) {
- bdfError("bad 'STARTFONT'\n");
- return (FALSE);
- }
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if (!line || sscanf((char *) line, "FONT %[^\n]", pState->fontName) != 1) {
- bdfError("bad 'FONT'\n");
- return (FALSE);
- }
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if (!line || !bdfIsPrefix(line, "SIZE")) {
- bdfError("missing 'SIZE'\n");
- return (FALSE);
- }
- if (sscanf((char *) line, "SIZE %f%d%d", &pState->pointSize,
- &pState->resolution_x, &pState->resolution_y) != 3) {
- bdfError("bad 'SIZE'\n");
- return (FALSE);
- }
- if (pState->pointSize < 1 ||
- pState->resolution_x < 1 || pState->resolution_y < 1) {
- bdfError("SIZE values must be > 0\n");
- return (FALSE);
- }
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if (!line || !bdfIsPrefix(line, "FONTBOUNDINGBOX")) {
- bdfError("missing 'FONTBOUNDINGBOX'\n");
- return (FALSE);
- }
- return (TRUE);
-}
-
-/***====================================================================***/
-
-static Bool
-bdfReadProperties(FontFilePtr file, FontPtr pFont, bdfFileState *pState)
-{
- int nProps, props_left,
- nextProp;
- char *stringProps;
- FontPropPtr props;
- char namebuf[BDFLINELEN],
- secondbuf[BDFLINELEN],
- thirdbuf[BDFLINELEN];
- unsigned char *line;
- unsigned char lineBuf[BDFLINELEN];
- BitmapFontPtr bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
-
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if (!line || !bdfIsPrefix(line, "STARTPROPERTIES")) {
- bdfError("missing 'STARTPROPERTIES'\n");
- return (FALSE);
- }
- if (sscanf((char *) line, "STARTPROPERTIES %d", &nProps) != 1) {
- bdfError("bad 'STARTPROPERTIES'\n");
- return (FALSE);
- }
- pFont->info.isStringProp = NULL;
- pFont->info.props = NULL;
- pFont->info.nprops = 0;
-
- stringProps = (char *) xalloc((nProps + BDF_GENPROPS) * sizeof(char));
- pFont->info.isStringProp = stringProps;
- if (stringProps == NULL) {
- bdfError("Couldn't allocate stringProps (%d*%d)\n",
- (nProps + BDF_GENPROPS), sizeof(Bool));
- goto BAILOUT;
- }
- pFont->info.props = props = (FontPropPtr) xalloc((nProps + BDF_GENPROPS) *
- sizeof(FontPropRec));
- if (props == NULL) {
- bdfError("Couldn't allocate props (%d*%d)\n", nProps + BDF_GENPROPS,
- sizeof(FontPropRec));
- goto BAILOUT;
- }
- bzero((char *)props, (nProps + BDF_GENPROPS) * sizeof(FontPropRec));
-
- nextProp = 0;
- props_left = nProps;
- while (props_left-- > 0) {
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if (line == NULL || bdfIsPrefix(line, "ENDPROPERTIES")) {
- bdfError("\"STARTPROPERTIES %d\" followed by only %d properties\n",
- nProps, nProps - props_left - 1);
- goto BAILOUT;
- }
- while (*line && isspace(*line))
- line++;
-
- switch (sscanf((char *) line, "%s%s%s", namebuf, secondbuf, thirdbuf)) {
- default:
- bdfError("missing '%s' parameter value\n", namebuf);
- goto BAILOUT;
-
- case 2:
- /*
- * Possibilites include: valid quoted string with no white space
- * valid integer value invalid value
- */
- if (secondbuf[0] == '"') {
- stringProps[nextProp] = TRUE;
- props[nextProp].value =
- bdfGetPropertyValue((char *)line + strlen(namebuf) + 1);
- if (!props[nextProp].value)
- goto BAILOUT;
- break;
- } else if (bdfIsInteger(secondbuf)) {
- stringProps[nextProp] = FALSE;
- props[nextProp].value = atoi(secondbuf);
- break;
- } else {
- bdfError("invalid '%s' parameter value\n", namebuf);
- goto BAILOUT;
- }
-
- case 3:
- /*
- * Possibilites include: valid quoted string with some white space
- * invalid value (reject even if second string is integer)
- */
- if (secondbuf[0] == '"') {
- stringProps[nextProp] = TRUE;
- props[nextProp].value =
- bdfGetPropertyValue((char *)line + strlen(namebuf) + 1);
- if (!props[nextProp].value)
- goto BAILOUT;
- break;
- } else {
- bdfError("invalid '%s' parameter value\n", namebuf);
- goto BAILOUT;
- }
- }
- props[nextProp].name = bdfForceMakeAtom(namebuf, NULL);
- if (props[nextProp].name == None) {
- bdfError("Empty property name.\n");
- goto BAILOUT;
- }
- if (!bdfSpecialProperty(pFont, &props[nextProp],
- stringProps[nextProp], pState))
- nextProp++;
- }
-
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- if (!line || !bdfIsPrefix(line, "ENDPROPERTIES")) {
- bdfError("missing 'ENDPROPERTIES'\n");
- goto BAILOUT;
- }
- if (!pState->haveFontAscent || !pState->haveFontDescent) {
- bdfError("missing 'FONT_ASCENT' or 'FONT_DESCENT' properties\n");
- goto BAILOUT;
- }
- if (bitmapFont->bitmapExtra) {
- bitmapFont->bitmapExtra->info.fontAscent = pFont->info.fontAscent;
- bitmapFont->bitmapExtra->info.fontDescent = pFont->info.fontDescent;
- }
- if (!pState->pointSizeProp) {
- props[nextProp].name = bdfForceMakeAtom("POINT_SIZE", NULL);
- props[nextProp].value = (INT32) (pState->pointSize * 10.0);
- stringProps[nextProp] = FALSE;
- pState->pointSizeProp = &props[nextProp];
- nextProp++;
- }
- if (!pState->fontProp) {
- props[nextProp].name = bdfForceMakeAtom("FONT", NULL);
- props[nextProp].value = (INT32) bdfForceMakeAtom(pState->fontName, NULL);
- stringProps[nextProp] = TRUE;
- pState->fontProp = &props[nextProp];
- nextProp++;
- }
- if (!pState->weightProp) {
- props[nextProp].name = bdfForceMakeAtom("WEIGHT", NULL);
- props[nextProp].value = -1; /* computed later */
- stringProps[nextProp] = FALSE;
- pState->weightProp = &props[nextProp];
- nextProp++;
- }
- if (!pState->resolutionProp &&
- pState->resolution_x == pState->resolution_y) {
- props[nextProp].name = bdfForceMakeAtom("RESOLUTION", NULL);
- props[nextProp].value = (INT32) ((pState->resolution_x * 100.0) / 72.27);
- stringProps[nextProp] = FALSE;
- pState->resolutionProp = &props[nextProp];
- nextProp++;
- }
- if (!pState->resolutionXProp) {
- props[nextProp].name = bdfForceMakeAtom("RESOLUTION_X", NULL);
- props[nextProp].value = (INT32) pState->resolution_x;
- stringProps[nextProp] = FALSE;
- pState->resolutionProp = &props[nextProp];
- nextProp++;
- }
- if (!pState->resolutionYProp) {
- props[nextProp].name = bdfForceMakeAtom("RESOLUTION_Y", NULL);
- props[nextProp].value = (INT32) pState->resolution_y;
- stringProps[nextProp] = FALSE;
- pState->resolutionProp = &props[nextProp];
- nextProp++;
- }
- if (!pState->xHeightProp) {
- props[nextProp].name = bdfForceMakeAtom("X_HEIGHT", NULL);
- props[nextProp].value = -1; /* computed later */
- stringProps[nextProp] = FALSE;
- pState->xHeightProp = &props[nextProp];
- nextProp++;
- }
- if (!pState->quadWidthProp) {
- props[nextProp].name = bdfForceMakeAtom("QUAD_WIDTH", NULL);
- props[nextProp].value = -1; /* computed later */
- stringProps[nextProp] = FALSE;
- pState->quadWidthProp = &props[nextProp];
- nextProp++;
- }
- pFont->info.nprops = nextProp;
- return (TRUE);
-BAILOUT:
- if (pFont->info.isStringProp) {
- xfree(pFont->info.isStringProp);
- pFont->info.isStringProp = NULL;
- }
- if (pFont->info.props) {
- xfree(pFont->info.props);
- pFont->info.props = NULL;
- }
- while (line && bdfIsPrefix(line, "ENDPROPERTIES"))
- line = bdfGetLine(file, lineBuf, BDFLINELEN);
- return (FALSE);
-}
-
-/***====================================================================***/
-
-static void
-bdfUnloadFont(FontPtr pFont)
-{
- bdfFreeFontBits (pFont);
- DestroyFontRec(pFont);
-}
-
-int
-bdfReadFont(FontPtr pFont, FontFilePtr file,
- int bit, int byte, int glyph, int scan)
-{
- bdfFileState state;
- xCharInfo *min,
- *max;
- BitmapFontPtr bitmapFont;
-
- pFont->fontPrivate = 0;
-
- bzero(&state, sizeof(bdfFileState));
- bdfFileLineNum = 0;
-
- if (!bdfReadHeader(file, &state))
- goto BAILOUT;
-
- bitmapFont = (BitmapFontPtr) xalloc(sizeof(BitmapFontRec));
- if (!bitmapFont) {
- bdfError("Couldn't allocate bitmapFontRec (%d)\n", sizeof(BitmapFontRec));
- goto BAILOUT;
- }
- bzero((char *)bitmapFont, sizeof(BitmapFontRec));
-
- pFont->fontPrivate = (pointer) bitmapFont;
- bitmapFont->metrics = 0;
- bitmapFont->ink_metrics = 0;
- bitmapFont->bitmaps = 0;
- bitmapFont->encoding = 0;
- bitmapFont->pDefault = NULL;
-
- bitmapFont->bitmapExtra = (BitmapExtraPtr) xalloc(sizeof(BitmapExtraRec));
- if (!bitmapFont->bitmapExtra) {
- bdfError("Couldn't allocate bitmapExtra (%d)\n", sizeof(BitmapExtraRec));
- goto BAILOUT;
- }
- bzero((char *)bitmapFont->bitmapExtra, sizeof(BitmapExtraRec));
-
- bitmapFont->bitmapExtra->glyphNames = 0;
- bitmapFont->bitmapExtra->sWidths = 0;
-
- if (!bdfReadProperties(file, pFont, &state))
- goto BAILOUT;
-
- if (!bdfReadCharacters(file, pFont, &state, bit, byte, glyph, scan))
- goto BAILOUT;
-
- if (state.haveDefaultCh) {
- unsigned int r, c, cols;
-
- r = pFont->info.defaultCh >> 8;
- c = pFont->info.defaultCh & 0xFF;
- if (pFont->info.firstRow <= r && r <= pFont->info.lastRow &&
- pFont->info.firstCol <= c && c <= pFont->info.lastCol) {
- cols = pFont->info.lastCol - pFont->info.firstCol + 1;
- r = r - pFont->info.firstRow;
- c = c - pFont->info.firstCol;
- bitmapFont->pDefault = ACCESSENCODING(bitmapFont->encoding,
- r * cols + c);
- }
- }
- pFont->bit = bit;
- pFont->byte = byte;
- pFont->glyph = glyph;
- pFont->scan = scan;
- pFont->info.anamorphic = FALSE;
- pFont->info.cachable = TRUE;
- bitmapComputeFontBounds(pFont);
- if (FontCouldBeTerminal(&pFont->info)) {
- bdfPadToTerminal(pFont);
- bitmapComputeFontBounds(pFont);
- }
- FontComputeInfoAccelerators(&pFont->info);
- if (bitmapFont->bitmapExtra)
- FontComputeInfoAccelerators(&bitmapFont->bitmapExtra->info);
- if (pFont->info.constantMetrics) {
- if (!bitmapAddInkMetrics(pFont)) {
- bdfError("Failed to add bitmap ink metrics\n");
- goto BAILOUT;
- }
- }
- if (bitmapFont->bitmapExtra)
- bitmapFont->bitmapExtra->info.inkMetrics = pFont->info.inkMetrics;
-
- bitmapComputeFontInkBounds(pFont);
-/* ComputeFontAccelerators (pFont); */
-
- /* generate properties */
- min = &pFont->info.ink_minbounds;
- max = &pFont->info.ink_maxbounds;
- if (state.xHeightProp && (state.xHeightProp->value == -1))
- state.xHeightProp->value = state.exHeight ?
- state.exHeight : min->ascent;
-
- if (state.quadWidthProp && (state.quadWidthProp->value == -1))
- state.quadWidthProp->value = state.digitCount ?
- (INT32) (state.digitWidths / state.digitCount) :
- (min->characterWidth + max->characterWidth) / 2;
-
- if (state.weightProp && (state.weightProp->value == -1))
- state.weightProp->value = bitmapComputeWeight(pFont);
-
- pFont->get_glyphs = bitmapGetGlyphs;
- pFont->get_metrics = bitmapGetMetrics;
- pFont->unload_font = bdfUnloadFont;
- pFont->unload_glyphs = NULL;
- return Successful;
-BAILOUT:
- if (pFont->fontPrivate)
- bdfFreeFontBits (pFont);
- return AllocError;
-}
-
-int
-bdfReadFontInfo(FontInfoPtr pFontInfo, FontFilePtr file)
-{
- FontRec font;
- int ret;
-
- bzero(&font, sizeof (FontRec));
-
- ret = bdfReadFont(&font, file, MSBFirst, LSBFirst, 1, 1);
- if (ret == Successful) {
- *pFontInfo = font.info;
- font.info.props = 0;
- font.info.isStringProp = 0;
- font.info.nprops = 0;
- bdfFreeFontBits (&font);
- }
- return ret;
-}
-
-static Bool
-bdfPadToTerminal(FontPtr pFont)
-{
- BitmapFontPtr bitmapFont;
- BitmapExtraPtr bitmapExtra;
- int i;
- int new_size;
- CharInfoRec new;
- int w,
- h;
-
- bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
-
- bzero(&new, sizeof(CharInfoRec));
- new.metrics.ascent = pFont->info.fontAscent;
- new.metrics.descent = pFont->info.fontDescent;
- new.metrics.leftSideBearing = 0;
- new.metrics.rightSideBearing = pFont->info.minbounds.characterWidth;
- new.metrics.characterWidth = new.metrics.rightSideBearing;
- new_size = BYTES_FOR_GLYPH(&new, pFont->glyph);
-
- for (i = 0; i < bitmapFont->num_chars; i++) {
- new.bits = (char *) xalloc(new_size);
- if (!new.bits) {
- bdfError("Couldn't allocate bits (%d)\n", new_size);
- return FALSE;
- }
- FontCharReshape(pFont, &bitmapFont->metrics[i], &new);
- new.metrics.attributes = bitmapFont->metrics[i].metrics.attributes;
- xfree(bitmapFont->metrics[i].bits);
- bitmapFont->metrics[i] = new;
- }
- bitmapExtra = bitmapFont->bitmapExtra;
- if (bitmapExtra) {
- w = GLYPHWIDTHPIXELS(&new);
- h = GLYPHHEIGHTPIXELS(&new);
- for (i = 0; i < GLYPHPADOPTIONS; i++)
- bitmapExtra->bitmapsSizes[i] = bitmapFont->num_chars *
- (BYTES_PER_ROW(w, 1 << i) * h);
- }
- return TRUE;
-}
diff --git a/nx-X11/lib/font/bitmap/bdfutils.c b/nx-X11/lib/font/bitmap/bdfutils.c
deleted file mode 100644
index a0c5ae949..000000000
--- a/nx-X11/lib/font/bitmap/bdfutils.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/* $Xorg: bdfutils.c,v 1.5 2001/02/09 02:04:02 xorgcvs Exp $ */
-/************************************************************************
-Copyright 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-************************************************************************/
-
-/*
-
-Copyright 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/bitmap/bdfutils.c,v 1.10 2001/12/14 19:56:45 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef FONTMODULE
-#include <ctype.h>
-#include <stdio.h>
-#include <stdarg.h>
-#endif
-
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/fontstruct.h>
-/* use bitmap structure */
-#include <X11/fonts/bitmap.h>
-#include <X11/fonts/bdfint.h>
-
-int bdfFileLineNum;
-
-/***====================================================================***/
-
-void
-bdfError(char* message, ...)
-{
- va_list args;
-
- va_start (args, message);
- fprintf(stderr, "BDF Error on line %d: ", bdfFileLineNum);
- vfprintf(stderr, message, args);
- va_end (args);
-}
-
-/***====================================================================***/
-
-void
-bdfWarning(char *message, ...)
-{
- va_list args;
-
- va_start (args, message);
- fprintf(stderr, "BDF Warning on line %d: ", bdfFileLineNum);
- vfprintf(stderr, message, args);
- va_end (args);
-}
-
-/*
- * read the next (non-comment) line and keep a count for error messages.
- * Returns buf, or NULL if EOF.
- */
-
-unsigned char *
-bdfGetLine(FontFilePtr file, unsigned char *buf, int len)
-{
- int c;
- unsigned char *b;
-
- for (;;) {
- b = buf;
- while ((c = FontFileGetc(file)) != FontFileEOF) {
- if (c == '\r')
- continue;
- if (c == '\n') {
- bdfFileLineNum++;
- break;
- }
- if (b - buf >= (len - 1))
- break;
- *b++ = c;
- }
- *b = '\0';
- if (c == FontFileEOF)
- return NULL;
- if (b != buf && !bdfIsPrefix(buf, "COMMENT"))
- break;
- }
- return buf;
-}
-
-/***====================================================================***/
-
-Atom
-bdfForceMakeAtom(char *str, int *size)
-{
- register int len = strlen(str);
- Atom the_atom;
-
- if (size != NULL)
- *size += len + 1;
- the_atom = MakeAtom(str, len, TRUE);
- if (the_atom == None)
- bdfError("Atom allocation failed\n");
- return the_atom;
-}
-
-/***====================================================================***/
-
-/*
- * Handle quoted strings.
- */
-
-Atom
-bdfGetPropertyValue(char *s)
-{
- register char *p,
- *pp;
- char *orig_s = s;
- Atom atom;
-
- /* strip leading white space */
- while (*s && (*s == ' ' || *s == '\t'))
- s++;
- if (*s == 0) {
- return bdfForceMakeAtom(s, NULL);
- }
- if (*s != '"') {
- pp = s;
- /* no white space in value */
- for (pp = s; *pp; pp++)
- if (*pp == ' ' || *pp == '\t' || *pp == '\015' || *pp == '\n') {
- *pp = 0;
- break;
- }
- return bdfForceMakeAtom(s, NULL);
- }
- /* quoted string: strip outer quotes and undouble inner quotes */
- s++;
- pp = p = (char *) xalloc((unsigned) strlen(s) + 1);
- if (pp == NULL) {
- bdfError("Couldn't allocate property value string (%d)\n", strlen(s) + 1);
- return None;
- }
- while (*s) {
- if (*s == '"') {
- if (*(s + 1) != '"') {
- *p++ = 0;
- atom = bdfForceMakeAtom(pp, NULL);
- xfree(pp);
- return atom;
- } else {
- s++;
- }
- }
- *p++ = *s++;
- }
- xfree (pp);
- bdfError("unterminated quoted string property: %s\n", (pointer) orig_s);
- return None;
-}
-
-/***====================================================================***/
-
-/*
- * return TRUE if string is a valid integer
- */
-int
-bdfIsInteger(char *str)
-{
- char c;
-
- c = *str++;
- if (!(isdigit(c) || c == '-' || c == '+'))
- return (FALSE);
-
- while ((c = *str++))
- if (!isdigit(c))
- return (FALSE);
-
- return (TRUE);
-}
-
-/***====================================================================***/
-
-/*
- * make a byte from the first two hex characters in glyph picture
- */
-
-unsigned char
-bdfHexByte(unsigned char *s)
-{
- unsigned char b = 0;
- register char c;
- int i;
-
- for (i = 2; i; i--) {
- c = *s++;
- if ((c >= '0') && (c <= '9'))
- b = (b << 4) + (c - '0');
- else if ((c >= 'A') && (c <= 'F'))
- b = (b << 4) + 10 + (c - 'A');
- else if ((c >= 'a') && (c <= 'f'))
- b = (b << 4) + 10 + (c - 'a');
- else
- bdfError("bad hex char '%c'", c);
- }
- return b;
-}
-
-/***====================================================================***/
-
-/*
- * check for known special property values
- */
-
-static char *SpecialAtoms[] = {
- "FONT_ASCENT",
-#define BDF_FONT_ASCENT 0
- "FONT_DESCENT",
-#define BDF_FONT_DESCENT 1
- "DEFAULT_CHAR",
-#define BDF_DEFAULT_CHAR 2
- "POINT_SIZE",
-#define BDF_POINT_SIZE 3
- "RESOLUTION",
-#define BDF_RESOLUTION 4
- "X_HEIGHT",
-#define BDF_X_HEIGHT 5
- "WEIGHT",
-#define BDF_WEIGHT 6
- "QUAD_WIDTH",
-#define BDF_QUAD_WIDTH 7
- "FONT",
-#define BDF_FONT 8
- "RESOLUTION_X",
-#define BDF_RESOLUTION_X 9
- "RESOLUTION_Y",
-#define BDF_RESOLUTION_Y 10
- 0,
-};
-
-Bool
-bdfSpecialProperty(FontPtr pFont, FontPropPtr prop,
- char isString, bdfFileState *bdfState)
-{
- char **special;
- char *name;
-
- name = NameForAtom(prop->name);
- for (special = SpecialAtoms; *special; special++)
- if (!strcmp(name, *special))
- break;
-
- switch (special - SpecialAtoms) {
- case BDF_FONT_ASCENT:
- if (!isString) {
- pFont->info.fontAscent = prop->value;
- bdfState->haveFontAscent = TRUE;
- }
- return TRUE;
- case BDF_FONT_DESCENT:
- if (!isString) {
- pFont->info.fontDescent = prop->value;
- bdfState->haveFontDescent = TRUE;
- }
- return TRUE;
- case BDF_DEFAULT_CHAR:
- if (!isString) {
- pFont->info.defaultCh = prop->value;
- bdfState->haveDefaultCh = TRUE;
- }
- return TRUE;
- case BDF_POINT_SIZE:
- bdfState->pointSizeProp = prop;
- return FALSE;
- case BDF_RESOLUTION:
- bdfState->resolutionProp = prop;
- return FALSE;
- case BDF_X_HEIGHT:
- bdfState->xHeightProp = prop;
- return FALSE;
- case BDF_WEIGHT:
- bdfState->weightProp = prop;
- return FALSE;
- case BDF_QUAD_WIDTH:
- bdfState->quadWidthProp = prop;
- return FALSE;
- case BDF_FONT:
- bdfState->fontProp = prop;
- return FALSE;
- case BDF_RESOLUTION_X:
- bdfState->resolutionXProp = prop;
- return FALSE;
- case BDF_RESOLUTION_Y:
- bdfState->resolutionYProp = prop;
- return FALSE;
- default:
- return FALSE;
- }
-}
diff --git a/nx-X11/lib/font/bitmap/bitmap.c b/nx-X11/lib/font/bitmap/bitmap.c
deleted file mode 100644
index d238f4d30..000000000
--- a/nx-X11/lib/font/bitmap/bitmap.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/* $Xorg: bitmap.c,v 1.4 2001/02/09 02:04:02 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/bitmap/bitmap.c,v 1.6 2001/01/17 19:43:27 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/bitmap.h>
-
-int
-bitmapGetGlyphs(FontPtr pFont, unsigned long count, unsigned char *chars,
- FontEncoding charEncoding,
- unsigned long *glyphCount, /* RETURN */
- CharInfoPtr *glyphs) /* RETURN */
-{
- BitmapFontPtr bitmapFont;
- unsigned int firstCol;
- register unsigned int numCols;
- unsigned int firstRow;
- unsigned int numRows;
- CharInfoPtr *glyphsBase;
- register unsigned int c;
- register CharInfoPtr pci;
- unsigned int r;
- CharInfoPtr **encoding;
- CharInfoPtr pDefault;
-
- bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
- encoding = bitmapFont->encoding;
- pDefault = bitmapFont->pDefault;
- firstCol = pFont->info.firstCol;
- numCols = pFont->info.lastCol - firstCol + 1;
- glyphsBase = glyphs;
- switch (charEncoding) {
-
- case Linear8Bit:
- case TwoD8Bit:
- if (pFont->info.firstRow > 0)
- break;
- if (pFont->info.allExist && pDefault) {
- while (count--) {
- c = (*chars++) - firstCol;
- if (c < numCols)
- *glyphs++ = ACCESSENCODING(encoding,c);
- else
- *glyphs++ = pDefault;
- }
- } else {
- while (count--) {
- c = (*chars++) - firstCol;
- if (c < numCols && (pci = ACCESSENCODING(encoding,c)))
- *glyphs++ = pci;
- else if (pDefault)
- *glyphs++ = pDefault;
- }
- }
- break;
- case Linear16Bit:
- if (pFont->info.allExist && pDefault) {
- while (count--) {
- c = *chars++ << 8;
- c = (c | *chars++) - firstCol;
- if (c < numCols)
- *glyphs++ = ACCESSENCODING(encoding,c);
- else
- *glyphs++ = pDefault;
- }
- } else {
- while (count--) {
- c = *chars++ << 8;
- c = (c | *chars++) - firstCol;
- if (c < numCols && (pci = ACCESSENCODING(encoding,c)))
- *glyphs++ = pci;
- else if (pDefault)
- *glyphs++ = pDefault;
- }
- }
- break;
-
- case TwoD16Bit:
- firstRow = pFont->info.firstRow;
- numRows = pFont->info.lastRow - firstRow + 1;
- while (count--) {
- r = (*chars++) - firstRow;
- c = (*chars++) - firstCol;
- if (r < numRows && c < numCols &&
- (pci = ACCESSENCODING(encoding, r * numCols + c)))
- *glyphs++ = pci;
- else if (pDefault)
- *glyphs++ = pDefault;
- }
- break;
- }
- *glyphCount = glyphs - glyphsBase;
- return Successful;
-}
-
-static CharInfoRec nonExistantChar;
-
-int
-bitmapGetMetrics(FontPtr pFont, unsigned long count, unsigned char *chars,
- FontEncoding charEncoding,
- unsigned long *glyphCount, /* RETURN */
- xCharInfo **glyphs) /* RETURN */
-{
- int ret;
- xCharInfo *ink_metrics;
- CharInfoPtr metrics;
- BitmapFontPtr bitmapFont;
- CharInfoPtr oldDefault;
- int i;
-
- bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
- oldDefault = bitmapFont->pDefault;
- bitmapFont->pDefault = &nonExistantChar;
- ret = bitmapGetGlyphs(pFont, count, chars, charEncoding, glyphCount, (CharInfoPtr *) glyphs);
- if (ret == Successful) {
- if (bitmapFont->ink_metrics) {
- metrics = bitmapFont->metrics;
- ink_metrics = bitmapFont->ink_metrics;
- for (i = 0; i < *glyphCount; i++) {
- if (glyphs[i] != (xCharInfo *) & nonExistantChar)
- glyphs[i] = ink_metrics + (((CharInfoPtr) glyphs[i]) - metrics);
- }
- }
- }
- bitmapFont->pDefault = oldDefault;
- return ret;
-}
diff --git a/nx-X11/lib/font/bitmap/bitmapfunc.c b/nx-X11/lib/font/bitmap/bitmapfunc.c
deleted file mode 100644
index e6187e5ee..000000000
--- a/nx-X11/lib/font/bitmap/bitmapfunc.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/* $Xorg: bitmapfunc.c,v 1.5 2001/02/09 02:04:02 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-
-/* $XFree86: xc/lib/font/bitmap/bitmapfunc.c,v 3.17 2002/09/19 13:21:58 tsi Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-/*
- * Translate monolithic #defines to modular definitions
- */
-
-#ifdef PCFFORMAT
-#define XFONT_PCFFORMAT 1
-#endif
-
-#ifdef SNFFORMAT
-#define XFONT_SNFFORMAT 1
-#endif
-
-#ifdef BDFFORMAT
-#define XFONT_BDFFORMAT 1
-#endif
-
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/bitmap.h>
-#include <X11/fonts/fontutil.h>
-#include <X11/fonts/bdfint.h>
-#include <X11/fonts/pcf.h>
-#include "snfstr.h"
-
-typedef struct _BitmapFileFunctions {
- int (*ReadFont) (FontPtr /* pFont */, FontFilePtr /* file */,
- int /* bit */, int /* byte */,
- int /* glyph */, int /* scan */);
- int (*ReadInfo) ( FontInfoPtr /* pFontInfo */,
- FontFilePtr /* file */ );
-} BitmapFileFunctionsRec, *BitmapFileFunctionsPtr;
-
-
-/*
- * the readers[] and renderers[] arrays must be in the same order,
- * and also in the same order as scale[] and find_scale[] in bitscale.c
- *
- */
-static BitmapFileFunctionsRec readers[] = {
-#if XFONT_PCFFORMAT
- { pcfReadFont, pcfReadFontInfo} ,
- { pcfReadFont, pcfReadFontInfo} ,
-#ifdef X_GZIP_FONT_COMPRESSION
- { pcfReadFont, pcfReadFontInfo} ,
-#endif
-#endif
-#if XFONT_SNFFORMAT
- { snfReadFont, snfReadFontInfo},
- { snfReadFont, snfReadFontInfo},
-#ifdef X_GZIP_FONT_COMPRESSION
- { snfReadFont, snfReadFontInfo} ,
-#endif
-#endif
-#if XFONT_BDFFORMAT
- { bdfReadFont, bdfReadFontInfo} ,
- { bdfReadFont, bdfReadFontInfo} ,
-#ifdef X_GZIP_FONT_COMPRESSION
- { bdfReadFont, bdfReadFontInfo} ,
-#endif
-#endif
-#if XFONT_PCFFORMAT
- { pmfReadFont, pcfReadFontInfo} ,
-#endif
-};
-
-
-#define CAPABILITIES (CAP_MATRIX | CAP_CHARSUBSETTING)
-
-static FontRendererRec renderers[] = {
-#if XFONT_PCFFORMAT
- { ".pcf", 4, BitmapOpenBitmap, BitmapOpenScalable,
- BitmapGetInfoBitmap, BitmapGetInfoScalable, 0,
- CAPABILITIES },
- { ".pcf.Z", 6, BitmapOpenBitmap, BitmapOpenScalable,
- BitmapGetInfoBitmap, BitmapGetInfoScalable, 0,
- CAPABILITIES },
-#ifdef X_GZIP_FONT_COMPRESSION
- { ".pcf.gz", 7,
- BitmapOpenBitmap, BitmapOpenScalable,
- BitmapGetInfoBitmap, BitmapGetInfoScalable, 0,
- CAPABILITIES },
-#endif
-#endif
-#if XFONT_SNFFORMAT
- { ".snf", 4, BitmapOpenBitmap, BitmapOpenScalable,
- BitmapGetInfoBitmap, BitmapGetInfoScalable, 0,
- CAPABILITIES },
- { ".snf.Z", 6, BitmapOpenBitmap, BitmapOpenScalable,
- BitmapGetInfoBitmap, BitmapGetInfoScalable, 0,
- CAPABILITIES },
-#ifdef X_GZIP_FONT_COMPRESSION
- { ".snf.gz", 7, BitmapOpenBitmap, BitmapOpenScalable,
- BitmapGetInfoBitmap, BitmapGetInfoScalable, 0,
- CAPABILITIES },
-#endif
-#endif
-#if XFONT_BDFFORMAT
- { ".bdf", 4, BitmapOpenBitmap, BitmapOpenScalable,
- BitmapGetInfoBitmap, BitmapGetInfoScalable, 0,
- CAPABILITIES },
- { ".bdf.Z", 6, BitmapOpenBitmap, BitmapOpenScalable,
- BitmapGetInfoBitmap, BitmapGetInfoScalable, 0,
- CAPABILITIES },
-#ifdef X_GZIP_FONT_COMPRESSION
- { ".bdf.gz", 7, BitmapOpenBitmap, BitmapOpenScalable,
- BitmapGetInfoBitmap, BitmapGetInfoScalable, 0,
- CAPABILITIES },
-#endif
-#endif
-#if XFONT_PCFFORMAT
- { ".pmf", 4, BitmapOpenBitmap, BitmapOpenScalable,
- BitmapGetInfoBitmap, BitmapGetInfoScalable, 0,
- CAPABILITIES }
-#endif
-};
-
-int
-BitmapOpenBitmap (FontPathElementPtr fpe, FontPtr *ppFont, int flags,
- FontEntryPtr entry, char *fileName,
- fsBitmapFormat format, fsBitmapFormatMask fmask,
- FontPtr non_cachable_font) /* We don't do licensing */
-{
- FontFilePtr file;
- FontPtr pFont;
- int i;
- int ret;
- int bit,
- byte,
- glyph,
- scan,
- image;
-
- i = BitmapGetRenderIndex(entry->u.bitmap.renderer);
- file = FontFileOpen (fileName);
- if (!file)
- return BadFontName;
- if (!(pFont = CreateFontRec())) {
- fprintf(stderr, "Error: Couldn't allocate pFont (%ld)\n",
- (unsigned long)sizeof(FontRec));
- FontFileClose (file);
- return AllocError;
- }
- /* set up default values */
- FontDefaultFormat(&bit, &byte, &glyph, &scan);
- /* get any changes made from above */
- ret = CheckFSFormat(format, fmask, &bit, &byte, &scan, &glyph, &image);
-
- /* Fill in font record. Data format filled in by reader. */
- pFont->refcnt = 0;
-
- ret = (*readers[i].ReadFont) (pFont, file, bit, byte, glyph, scan);
-
- FontFileClose (file);
- if (ret != Successful) {
- xfree(pFont);
- } else {
- *ppFont = pFont;
- }
- return ret;
-}
-
-int
-BitmapGetInfoBitmap (FontPathElementPtr fpe, FontInfoPtr pFontInfo,
- FontEntryPtr entry, char *fileName)
-{
- FontFilePtr file;
- int i;
- int ret;
- FontRendererPtr renderer;
-
- renderer = FontFileMatchRenderer (fileName);
- if (!renderer)
- return BadFontName;
- i = BitmapGetRenderIndex(renderer);
- file = FontFileOpen (fileName);
- if (!file)
- return BadFontName;
- ret = (*readers[i].ReadInfo) (pFontInfo, file);
- FontFileClose (file);
- return ret;
-}
-
-#define numRenderers (sizeof renderers / sizeof renderers[0])
-
-void
-BitmapRegisterFontFileFunctions (void)
-{
- int i;
-
- for (i = 0; i < numRenderers; i++)
- FontFileRegisterRenderer (&renderers[i]);
-}
-
-/*
- * compute offset into renderers array - used to find the font reader,
- * the font info reader, and the bitmap scaling routine. All users
- * of this routine must be kept in step with the renderer array.
- */
-int
-BitmapGetRenderIndex(FontRendererPtr renderer)
-{
- return renderer - renderers;
-}
diff --git a/nx-X11/lib/font/bitmap/bitmaputil.c b/nx-X11/lib/font/bitmap/bitmaputil.c
deleted file mode 100644
index 3487f7f92..000000000
--- a/nx-X11/lib/font/bitmap/bitmaputil.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/* $Xorg: bitmaputil.c,v 1.5 2001/02/09 02:04:02 xorgcvs Exp $ */
-
-/*
-
-Copyright 1990, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/bitmap/bitmaputil.c,v 1.10 2002/09/24 20:52:48 tsi Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/bitmap.h>
-#include <X11/fonts/bdfint.h>
-
-#ifndef MAXSHORT
-#define MAXSHORT 32767
-#endif
-
-#ifndef MINSHORT
-#define MINSHORT -32768
-#endif
-
-static xCharInfo initMinMetrics = {
-MAXSHORT, MAXSHORT, MAXSHORT, MAXSHORT, MAXSHORT, 0xFFFF};
-static xCharInfo initMaxMetrics = {
-MINSHORT, MINSHORT, MINSHORT, MINSHORT, MINSHORT, 0x0000};
-
-#define MINMAX(field,ci) \
- if (minbounds->field > (ci)->field) \
- minbounds->field = (ci)->field; \
- if (maxbounds->field < (ci)->field) \
- maxbounds->field = (ci)->field;
-
-#define COMPUTE_MINMAX(ci) \
- if ((ci)->ascent || (ci)->descent || \
- (ci)->leftSideBearing || (ci)->rightSideBearing || \
- (ci)->characterWidth) \
- { \
- MINMAX(ascent, (ci)); \
- MINMAX(descent, (ci)); \
- MINMAX(leftSideBearing, (ci)); \
- MINMAX(rightSideBearing, (ci)); \
- MINMAX(characterWidth, (ci)); \
- }
-
-void
-bitmapComputeFontBounds(FontPtr pFont)
-{
- BitmapFontPtr bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
- int nchars;
- int r,
- c;
- CharInfoPtr ci;
- int maxOverlap;
- int overlap;
- xCharInfo *minbounds,
- *maxbounds;
- int i;
- int numneg = 0, numpos = 0;
-
- if (bitmapFont->bitmapExtra) {
- minbounds = &bitmapFont->bitmapExtra->info.minbounds;
- maxbounds = &bitmapFont->bitmapExtra->info.maxbounds;
- } else {
- minbounds = &pFont->info.minbounds;
- maxbounds = &pFont->info.maxbounds;
- }
- *minbounds = initMinMetrics;
- *maxbounds = initMaxMetrics;
- maxOverlap = MINSHORT;
- nchars = bitmapFont->num_chars;
- for (i = 0, ci = bitmapFont->metrics; i < nchars; i++, ci++) {
- COMPUTE_MINMAX(&ci->metrics);
- if (ci->metrics.characterWidth < 0)
- numneg++;
- else
- numpos++;
- minbounds->attributes &= ci->metrics.attributes;
- maxbounds->attributes |= ci->metrics.attributes;
- overlap = ci->metrics.rightSideBearing - ci->metrics.characterWidth;
- if (maxOverlap < overlap)
- maxOverlap = overlap;
- }
- if (bitmapFont->bitmapExtra) {
- if (numneg > numpos)
- bitmapFont->bitmapExtra->info.drawDirection = RightToLeft;
- else
- bitmapFont->bitmapExtra->info.drawDirection = LeftToRight;
- bitmapFont->bitmapExtra->info.maxOverlap = maxOverlap;
- minbounds = &pFont->info.minbounds;
- maxbounds = &pFont->info.maxbounds;
- *minbounds = initMinMetrics;
- *maxbounds = initMaxMetrics;
- i = 0;
- maxOverlap = MINSHORT;
- for (r = pFont->info.firstRow; r <= pFont->info.lastRow; r++) {
- for (c = pFont->info.firstCol; c <= pFont->info.lastCol; c++) {
- ci = ACCESSENCODING(bitmapFont->encoding, i);
- if (ci) {
- COMPUTE_MINMAX(&ci->metrics);
- if (ci->metrics.characterWidth < 0)
- numneg++;
- else
- numpos++;
- minbounds->attributes &= ci->metrics.attributes;
- maxbounds->attributes |= ci->metrics.attributes;
- overlap = ci->metrics.rightSideBearing -
- ci->metrics.characterWidth;
- if (maxOverlap < overlap)
- maxOverlap = overlap;
- }
- i++;
- }
- }
- }
- if (numneg > numpos)
- pFont->info.drawDirection = RightToLeft;
- else
- pFont->info.drawDirection = LeftToRight;
- pFont->info.maxOverlap = maxOverlap;
-}
-
-void
-bitmapComputeFontInkBounds(FontPtr pFont)
-{
- BitmapFontPtr bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
- int nchars;
- int r,
- c;
- CharInfoPtr cit;
- xCharInfo *ci;
- int offset;
- xCharInfo *minbounds,
- *maxbounds;
- int i;
-
- if (!bitmapFont->ink_metrics) {
- if (bitmapFont->bitmapExtra) {
- bitmapFont->bitmapExtra->info.ink_minbounds = bitmapFont->bitmapExtra->info.minbounds;
- bitmapFont->bitmapExtra->info.ink_maxbounds = bitmapFont->bitmapExtra->info.maxbounds;
- }
- pFont->info.ink_minbounds = pFont->info.minbounds;
- pFont->info.ink_maxbounds = pFont->info.maxbounds;
- } else {
- if (bitmapFont->bitmapExtra) {
- minbounds = &bitmapFont->bitmapExtra->info.ink_minbounds;
- maxbounds = &bitmapFont->bitmapExtra->info.ink_maxbounds;
- } else {
- minbounds = &pFont->info.ink_minbounds;
- maxbounds = &pFont->info.ink_maxbounds;
- }
- *minbounds = initMinMetrics;
- *maxbounds = initMaxMetrics;
- nchars = bitmapFont->num_chars;
- for (i = 0, ci = bitmapFont->ink_metrics; i < nchars; i++, ci++) {
- COMPUTE_MINMAX(ci);
- minbounds->attributes &= ci->attributes;
- maxbounds->attributes |= ci->attributes;
- }
- if (bitmapFont->bitmapExtra) {
- minbounds = &pFont->info.ink_minbounds;
- maxbounds = &pFont->info.ink_maxbounds;
- *minbounds = initMinMetrics;
- *maxbounds = initMaxMetrics;
- i=0;
- for (r = pFont->info.firstRow; r <= pFont->info.lastRow; r++) {
- for (c = pFont->info.firstCol; c <= pFont->info.lastCol; c++) {
- cit = ACCESSENCODING(bitmapFont->encoding, i);
- if (cit) {
- offset = cit - bitmapFont->metrics;
- ci = &bitmapFont->ink_metrics[offset];
- COMPUTE_MINMAX(ci);
- minbounds->attributes &= ci->attributes;
- maxbounds->attributes |= ci->attributes;
- }
- i++;
- }
- }
- }
- }
-}
-
-Bool
-bitmapAddInkMetrics(FontPtr pFont)
-{
- BitmapFontPtr bitmapFont;
- int i;
-
- bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
- bitmapFont->ink_metrics = (xCharInfo *) xalloc(bitmapFont->num_chars * sizeof(xCharInfo));
- if (!bitmapFont->ink_metrics) {
- fprintf(stderr, "Error: Couldn't allocate ink_metrics (%d*%ld)\n",
- bitmapFont->num_chars, (unsigned long)sizeof(xCharInfo));
- return FALSE;
- }
- for (i = 0; i < bitmapFont->num_chars; i++)
- FontCharInkMetrics(pFont, &bitmapFont->metrics[i], &bitmapFont->ink_metrics[i]);
- pFont->info.inkMetrics = TRUE;
- return TRUE;
-}
-
-/* ARGSUSED */
-int
-bitmapComputeWeight(FontPtr pFont)
-{
- return 10;
-}
diff --git a/nx-X11/lib/font/bitmap/bitscale.c b/nx-X11/lib/font/bitmap/bitscale.c
deleted file mode 100644
index 8f7247eaf..000000000
--- a/nx-X11/lib/font/bitmap/bitscale.c
+++ /dev/null
@@ -1,1978 +0,0 @@
-/* $Xorg: bitscale.c,v 1.5 2001/02/09 02:04:02 xorgcvs Exp $ */
-/*
-
-Copyright 1991, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/bitmap/bitscale.c,v 3.29tsi Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-/*
- * Translate monolithic #defines to modular definitions
- */
-
-#ifdef PCFFORMAT
-#define XFONT_PCFFORMAT 1
-#endif
-
-#ifdef SNFFORMAT
-#define XFONT_SNFFORMAT 1
-#endif
-
-#ifdef BDFFORMAT
-#define XFONT_BDFFORMAT 1
-#endif
-
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/bitmap.h>
-#include <X11/fonts/fontutil.h>
-#ifndef FONTMODULE
-#ifdef _XOPEN_SOURCE
-#include <math.h>
-#else
-#define _XOPEN_SOURCE /* to get prototype for hypot on some systems */
-#include <math.h>
-#undef _XOPEN_SOURCE
-#endif
-#endif
-
-#ifndef MAX
-#define MAX(a,b) (((a)>(b)) ? a : b)
-#endif
-
-/* Should get this from elsewhere */
-extern unsigned long serverGeneration;
-
-static void bitmapUnloadScalable (FontPtr pFont);
-static void ScaleBitmap ( FontPtr pFont, CharInfoPtr opci,
- CharInfoPtr pci, double *inv_xform,
- double widthMult, double heightMult );
-static FontPtr BitmapScaleBitmaps(FontPtr pf, FontPtr opf,
- double widthMult, double heightMult,
- FontScalablePtr vals);
-static FontPtr PrinterScaleBitmaps(FontPtr pf, FontPtr opf,
- double widthMult, double heightMult,
- FontScalablePtr vals);
-
-enum scaleType {
- atom, truncate_atom, pixel_size, point_size, resolution_x,
- resolution_y, average_width, scaledX, scaledY, unscaled, fontname,
- raw_ascent, raw_descent, raw_pixelsize, raw_pointsize,
- raw_average_width, uncomputed
-};
-
-typedef struct _fontProp {
- char *name;
- Atom atom;
- enum scaleType type;
-} fontProp;
-
-typedef FontPtr (*ScaleFunc) ( FontPtr /* pf */,
- FontPtr /* opf */,
- double /* widthMult */,
- double /* heightMult */,
- FontScalablePtr /* vals */);
-
-/* These next two arrays must be kept in step with the renderer array */
-ScaleFunc scale[] =
-{
-#if XFONT_PCFFORMAT
- BitmapScaleBitmaps,
- BitmapScaleBitmaps,
-#ifdef X_GZIP_FONT_COMPRESSION
- BitmapScaleBitmaps,
-#endif
-#endif
-#if XFONT_SNFFORMAT
- BitmapScaleBitmaps,
- BitmapScaleBitmaps,
-#ifdef X_GZIP_FONT_COMPRESSION
- BitmapScaleBitmaps,
-#endif
-#endif
-#if XFONT_BDFFORMAT
- BitmapScaleBitmaps,
- BitmapScaleBitmaps,
-#ifdef X_GZIP_FONT_COMPRESSION
- BitmapScaleBitmaps,
-#endif
-#endif
-#if XFONT_PCFFORMAT
- PrinterScaleBitmaps,
-#endif
-};
-
-static FontEntryPtr FindBestToScale ( FontPathElementPtr fpe,
- FontEntryPtr entry,
- FontScalablePtr vals,
- FontScalablePtr best,
- double *dxp, double *dyp,
- double *sdxp, double *sdyp,
- FontPathElementPtr *fpep );
-static FontEntryPtr FindPmfToScale ( FontPathElementPtr fpe,
- FontEntryPtr entry,
- FontScalablePtr vals,
- FontScalablePtr best,
- double *dxp, double *dyp,
- double *sdxp, double *sdyp,
- FontPathElementPtr *fpep );
-
-typedef FontEntryPtr (*FindToScale) (FontPathElementPtr fpe,
- FontEntryPtr entry,
- FontScalablePtr vals,
- FontScalablePtr best,
- double *dxp, double *dyp,
- double *sdxp, double *sdyp,
- FontPathElementPtr *fpep);
-FindToScale find_scale[] =
-{
-#if XFONT_PCFFORMAT
- FindBestToScale,
- FindBestToScale,
-#ifdef X_GZIP_FONT_COMPRESSION
- FindBestToScale,
-#endif
-#endif
-#if XFONT_SNFFORMAT
- FindBestToScale,
- FindBestToScale,
-#ifdef X_GZIP_FONT_COMPRESSION
- FindBestToScale,
-#endif
-#endif
-#if XFONT_BDFFORMAT
- FindBestToScale,
- FindBestToScale,
-#ifdef X_GZIP_FONT_COMPRESSION
- FindBestToScale,
-#endif
-#endif
-#if XFONT_PCFFORMAT
- FindPmfToScale,
-#endif
-};
-
-static unsigned long bitscaleGeneration = 0; /* initialization flag */
-
-static fontProp fontNamePropTable[] = {
- { "FOUNDRY", 0, atom },
- { "FAMILY_NAME", 0, atom },
- { "WEIGHT_NAME", 0, atom },
- { "SLANT", 0, atom },
- { "SETWIDTH_NAME", 0, atom },
- { "ADD_STYLE_NAME", 0, atom },
- { "PIXEL_SIZE", 0, pixel_size },
- { "POINT_SIZE", 0, point_size },
- { "RESOLUTION_X", 0, resolution_x },
- { "RESOLUTION_Y", 0, resolution_y },
- { "SPACING", 0, atom },
- { "AVERAGE_WIDTH", 0, average_width },
- { "CHARSET_REGISTRY", 0, atom },
- { "CHARSET_ENCODING", 0, truncate_atom },
- { "FONT", 0, fontname },
- { "RAW_ASCENT", 0, raw_ascent },
- { "RAW_DESCENT", 0, raw_descent },
- { "RAW_PIXEL_SIZE", 0, raw_pixelsize },
- { "RAW_POINT_SIZE", 0, raw_pointsize },
- { "RAW_AVERAGE_WIDTH", 0, raw_average_width }
-};
-
-#define TRANSFORM_POINT(matrix, x, y, dest) \
- ((dest)[0] = (matrix)[0] * (x) + (matrix)[2] * (y), \
- (dest)[1] = (matrix)[1] * (x) + (matrix)[3] * (y))
-
-#define CHECK_EXTENT(lsb, rsb, desc, asc, data) \
- ((lsb) > (data)[0] ? (lsb) = (data)[0] : 0 , \
- (rsb) < (data)[0] ? (rsb) = (data)[0] : 0, \
- (-desc) > (data)[1] ? (desc) = -(data)[1] : 0 , \
- (asc) < (data)[1] ? (asc) = (data)[1] : 0)
-
-#define NPROPS (sizeof(fontNamePropTable) / sizeof(fontProp))
-
-/* Warning: order of the next two tables is critically interdependent.
- Location of "unscaled" properties at the end of fontPropTable[]
- is important. */
-
-static fontProp fontPropTable[] = {
- { "MIN_SPACE", 0, scaledX },
- { "NORM_SPACE", 0, scaledX },
- { "MAX_SPACE", 0, scaledX },
- { "END_SPACE", 0, scaledX },
- { "AVG_CAPITAL_WIDTH", 0, scaledX },
- { "AVG_LOWERCASE_WIDTH", 0, scaledX },
- { "QUAD_WIDTH", 0, scaledX },
- { "FIGURE_WIDTH", 0, scaledX },
- { "SUPERSCRIPT_X", 0, scaledX },
- { "SUPERSCRIPT_Y", 0, scaledY },
- { "SUBSCRIPT_X", 0, scaledX },
- { "SUBSCRIPT_Y", 0, scaledY },
- { "SUPERSCRIPT_SIZE", 0, scaledY },
- { "SUBSCRIPT_SIZE", 0, scaledY },
- { "SMALL_CAP_SIZE", 0, scaledY },
- { "UNDERLINE_POSITION", 0, scaledY },
- { "UNDERLINE_THICKNESS", 0, scaledY },
- { "STRIKEOUT_ASCENT", 0, scaledY },
- { "STRIKEOUT_DESCENT", 0, scaledY },
- { "CAP_HEIGHT", 0, scaledY },
- { "X_HEIGHT", 0, scaledY },
- { "ITALIC_ANGLE", 0, unscaled },
- { "RELATIVE_SETWIDTH", 0, unscaled },
- { "RELATIVE_WEIGHT", 0, unscaled },
- { "WEIGHT", 0, unscaled },
- { "DESTINATION", 0, unscaled },
- { "PCL_FONT_NAME", 0, unscaled },
- { "_ADOBE_POSTSCRIPT_FONTNAME", 0, unscaled }
-};
-
-/* sleazy way to shut up the compiler */
-#define zerohack (enum scaleType)0
-
-static fontProp rawFontPropTable[] = {
- { "RAW_MIN_SPACE", 0, },
- { "RAW_NORM_SPACE", 0, },
- { "RAW_MAX_SPACE", 0, },
- { "RAW_END_SPACE", 0, },
- { "RAW_AVG_CAPITAL_WIDTH", 0, },
- { "RAW_AVG_LOWERCASE_WIDTH", 0, },
- { "RAW_QUAD_WIDTH", 0, },
- { "RAW_FIGURE_WIDTH", 0, },
- { "RAW_SUPERSCRIPT_X", 0, },
- { "RAW_SUPERSCRIPT_Y", 0, },
- { "RAW_SUBSCRIPT_X", 0, },
- { "RAW_SUBSCRIPT_Y", 0, },
- { "RAW_SUPERSCRIPT_SIZE", 0, },
- { "RAW_SUBSCRIPT_SIZE", 0, },
- { "RAW_SMALL_CAP_SIZE", 0, },
- { "RAW_UNDERLINE_POSITION", 0, },
- { "RAW_UNDERLINE_THICKNESS", 0, },
- { "RAW_STRIKEOUT_ASCENT", 0, },
- { "RAW_STRIKEOUT_DESCENT", 0, },
- { "RAW_CAP_HEIGHT", 0, },
- { "RAW_X_HEIGHT", 0, }
-};
-
-static void
-initFontPropTable(void)
-{
- int i;
- fontProp *t;
-
- i = sizeof(fontNamePropTable) / sizeof(fontProp);
- for (t = fontNamePropTable; i; i--, t++)
- t->atom = MakeAtom(t->name, (unsigned) strlen(t->name), TRUE);
-
- i = sizeof(fontPropTable) / sizeof(fontProp);
- for (t = fontPropTable; i; i--, t++)
- t->atom = MakeAtom(t->name, (unsigned) strlen(t->name), TRUE);
-
- i = sizeof(rawFontPropTable) / sizeof(fontProp);
- for (t = rawFontPropTable; i; i--, t++)
- t->atom = MakeAtom(t->name, (unsigned) strlen(t->name), TRUE);
-}
-
-#if 0
-static FontEntryPtr
-GetScalableEntry (FontPathElementPtr fpe, FontNamePtr name)
-{
- FontDirectoryPtr dir;
-
- dir = (FontDirectoryPtr) fpe->private;
- return FontFileFindNameInDir (&dir->scalable, name);
-}
-#endif
-
-static double
-get_matrix_horizontal_component(double *matrix)
-{
- return hypot(matrix[0], matrix[1]);
-}
-
-static double
-get_matrix_vertical_component(double *matrix)
-{
- return hypot(matrix[2], matrix[3]);
-}
-
-
-static Bool
-ComputeScaleFactors(FontScalablePtr from, FontScalablePtr to,
- double *dx, double *dy, double *sdx, double *sdy,
- double *rescale_x)
-{
- double srcpixelset, destpixelset, srcpixel, destpixel;
-
- srcpixelset = get_matrix_horizontal_component(from->pixel_matrix);
- destpixelset = get_matrix_horizontal_component(to->pixel_matrix);
- srcpixel = get_matrix_vertical_component(from->pixel_matrix);
- destpixel = get_matrix_vertical_component(to->pixel_matrix);
-
- if (srcpixelset >= EPS)
- {
- *dx = destpixelset / srcpixelset;
- *sdx = 1000.0 / srcpixelset;
- }
- else
- *sdx = *dx = 0;
-
- *rescale_x = 1.0;
-
- /* If client specified a width, it overrides setsize; in this
- context, we interpret width as applying to the font before any
- rotation, even though that's not what is ultimately returned in
- the width field. */
- if (from->width > 0 && to->width > 0 && fabs(*dx) > EPS)
- {
- double rescale = (double)to->width / (double)from->width;
-
- /* If the client specified a transformation matrix, the rescaling
- for width does *not* override the setsize. Instead, just check
- for consistency between the setsize from the matrix and the
- setsize that would result from rescaling according to the width.
- This assumes (perhaps naively) that the width is correctly
- reported in the name. As an interesting side effect, this test
- may result in choosing a different source bitmap (one that
- scales consistently between the setsize *and* the width) than it
- would choose if a width were not specified. Sort of a hidden
- multiple-master functionality. */
- if ((to->values_supplied & PIXELSIZE_MASK) == PIXELSIZE_ARRAY ||
- (to->values_supplied & POINTSIZE_MASK) == POINTSIZE_ARRAY)
- {
- /* Reject if resulting width difference is >= 1 pixel */
- if (fabs(rescale * from->width - *dx * from->width) >= 10)
- return FALSE;
- }
- else
- {
- *rescale_x = rescale/(*dx);
- *dx = rescale;
- }
- }
-
- if (srcpixel >= EPS)
- {
- *dy = destpixel / srcpixel;
- *sdy = 1000.0 / srcpixel;
- }
- else
- *sdy = *dy = 0;
-
- return TRUE;
-}
-
-/* favor enlargement over reduction because of aliasing resulting
- from reduction */
-#define SCORE(m,s) \
-if (m >= 1.0) { \
- if (m == 1.0) \
- score += (16 * s); \
- else if (m == 2.0) \
- score += (4 * s); \
- else \
- score += (int)(((double)(3 * s)) / m); \
-} else { \
- score += (int)(((double)(2 * s)) * m); \
-}
-
-/* don't need to favor enlargement when looking for bitmap that can
- be used unscalable */
-#define SCORE2(m,s) \
-if (m >= 1.0) \
- score += (int)(((double)(8 * s)) / m); \
-else \
- score += (int)(((double)(8 * s)) * m);
-
-static FontEntryPtr
-FindBestToScale(FontPathElementPtr fpe, FontEntryPtr entry,
- FontScalablePtr vals, FontScalablePtr best,
- double *dxp, double *dyp,
- double *sdxp, double *sdyp,
- FontPathElementPtr *fpep)
-{
- FontScalableRec temp;
- int source, i;
- int best_score, best_unscaled_score,
- score;
- double dx = 0.0, sdx = 0.0, dx_amount = 0.0,
- dy = 0.0, sdy = 0.0, dy_amount = 0.0,
- best_dx = 0.0, best_sdx = 0.0, best_dx_amount = 0.0,
- best_dy = 0.0, best_sdy = 0.0, best_dy_amount = 0.0,
- best_unscaled_sdx = 0.0, best_unscaled_sdy = 0.0,
- rescale_x = 0.0, best_rescale_x = 0.0,
- best_unscaled_rescale_x = 0.0;
- FontEntryPtr zero;
- FontNameRec zeroName;
- char zeroChars[MAXFONTNAMELEN];
- FontDirectoryPtr dir;
- FontScaledPtr scaled;
- FontScalableExtraPtr extra;
- FontScaledPtr best_scaled, best_unscaled;
- FontPathElementPtr best_fpe = NULL, best_unscaled_fpe = NULL;
- FontEntryPtr bitmap = NULL;
- FontEntryPtr result;
- int aliascount = 20;
- FontPathElementPtr bitmap_fpe = NULL;
- FontNameRec xlfdName;
-
- /* find the best match */
- rescale_x = 1.0;
- best_scaled = 0;
- best_score = 0;
- best_unscaled = 0;
- best_unscaled_score = -1;
- best_dx_amount = best_dy_amount = HUGE_VAL;
- memcpy (zeroChars, entry->name.name, entry->name.length);
- zeroChars[entry->name.length] = '\0';
- zeroName.name = zeroChars;
- FontParseXLFDName (zeroChars, &temp, FONT_XLFD_REPLACE_ZERO);
- zeroName.length = strlen (zeroChars);
- zeroName.ndashes = entry->name.ndashes;
- xlfdName.name = vals->xlfdName;
- xlfdName.length = strlen(xlfdName.name);
- xlfdName.ndashes = FontFileCountDashes(xlfdName.name, xlfdName.length);
- restart_bestscale_loop: ;
- /*
- * Look through all the registered bitmap sources for
- * the same zero name as ours; entries along that one
- * can be scaled as desired.
- */
- for (source = 0; source < FontFileBitmapSources.count; source++)
- {
- /* There might already be a bitmap that satisfies the request
- but didn't have a zero name that was found by the scalable
- font matching logic. Keep track if there is. */
- if (bitmap == NULL && vals->xlfdName != NULL)
- {
- bitmap_fpe = FontFileBitmapSources.fpe[source];
- dir = (FontDirectoryPtr) bitmap_fpe->private;
- bitmap = FontFileFindNameInDir (&dir->nonScalable, &xlfdName);
- if (bitmap && bitmap->type != FONT_ENTRY_BITMAP)
- {
- if (bitmap->type == FONT_ENTRY_ALIAS && aliascount > 0)
- {
- aliascount--;
- xlfdName.name = bitmap->u.alias.resolved;
- xlfdName.length = strlen(xlfdName.name);
- xlfdName.ndashes = FontFileCountDashes(xlfdName.name,
- xlfdName.length);
- bitmap = NULL;
- goto restart_bestscale_loop;
- }
- else
- bitmap = NULL;
- }
- }
-
- if (FontFileBitmapSources.fpe[source] == fpe)
- zero = entry;
- else
- {
- dir = (FontDirectoryPtr) FontFileBitmapSources.fpe[source]->private;
- zero = FontFileFindNameInDir (&dir->scalable, &zeroName);
- if (!zero)
- continue;
- }
- extra = zero->u.scalable.extra;
- for (i = 0; i < extra->numScaled; i++)
- {
- scaled = &extra->scaled[i];
- if (!scaled->bitmap)
- continue;
- if (!ComputeScaleFactors(&scaled->vals, vals, &dx, &dy, &sdx, &sdy,
- &rescale_x))
- continue;
- score = 0;
- dx_amount = dx;
- dy_amount = dy;
- SCORE(dy_amount, 10);
- SCORE(dx_amount, 1);
- if ((score > best_score) ||
- ((score == best_score) &&
- ((dy_amount < best_dy_amount) ||
- ((dy_amount == best_dy_amount) &&
- (dx_amount < best_dx_amount)))))
- {
- best_fpe = FontFileBitmapSources.fpe[source];
- best_scaled = scaled;
- best_score = score;
- best_dx = dx;
- best_dy = dy;
- best_sdx = sdx;
- best_sdy = sdy;
- best_dx_amount = dx_amount;
- best_dy_amount = dy_amount;
- best_rescale_x = rescale_x;
- }
- /* Is this font a candidate for use without ugly rescaling? */
- if (fabs(dx) > EPS && fabs(dy) > EPS &&
- fabs(vals->pixel_matrix[0] * rescale_x -
- scaled->vals.pixel_matrix[0]) < 1 &&
- fabs(vals->pixel_matrix[1] * rescale_x -
- scaled->vals.pixel_matrix[1]) < EPS &&
- fabs(vals->pixel_matrix[2] -
- scaled->vals.pixel_matrix[2]) < EPS &&
- fabs(vals->pixel_matrix[3] -
- scaled->vals.pixel_matrix[3]) < 1)
- {
- /* Yes. The pixel sizes are close on the diagonal and
- extremely close off the diagonal. */
- score = 0;
- SCORE2(vals->pixel_matrix[3] /
- scaled->vals.pixel_matrix[3], 10);
- SCORE2(vals->pixel_matrix[0] * rescale_x /
- scaled->vals.pixel_matrix[0], 1);
- if (score > best_unscaled_score)
- {
- best_unscaled_fpe = FontFileBitmapSources.fpe[source];
- best_unscaled = scaled;
- best_unscaled_sdx = sdx / dx;
- best_unscaled_sdy = sdy / dy;
- best_unscaled_score = score;
- best_unscaled_rescale_x = rescale_x;
- }
- }
- }
- }
- if (best_unscaled)
- {
- *best = best_unscaled->vals;
- *fpep = best_unscaled_fpe;
- *dxp = 1.0;
- *dyp = 1.0;
- *sdxp = best_unscaled_sdx;
- *sdyp = best_unscaled_sdy;
- rescale_x = best_unscaled_rescale_x;
- result = best_unscaled->bitmap;
- }
- else if (best_scaled)
- {
- *best = best_scaled->vals;
- *fpep = best_fpe;
- *dxp = best_dx;
- *dyp = best_dy;
- *sdxp = best_sdx;
- *sdyp = best_sdy;
- rescale_x = best_rescale_x;
- result = best_scaled->bitmap;
- }
- else
- result = NULL;
-
- if (bitmap != NULL && (result == NULL || *dxp != 1.0 || *dyp != 1.0))
- {
- *fpep = bitmap_fpe;
- FontParseXLFDName (bitmap->name.name, best, FONT_XLFD_REPLACE_NONE);
- if (ComputeScaleFactors(best, best, dxp, dyp, sdxp, sdyp, &rescale_x))
- result = bitmap;
- else
- result = NULL;
- }
-
- if (result && rescale_x != 1.0)
- {
- /* We have rescaled horizontally due to an XLFD width field. Change
- the matrix appropriately */
- vals->pixel_matrix[0] *= rescale_x;
- vals->pixel_matrix[1] *= rescale_x;
-#ifdef NOTDEF
- /* This would force the pointsize and pixelsize fields in the
- FONT property to display as matrices to more accurately
- report the font being supplied. It might also break existing
- applications that expect a single number in that field. */
- vals->values_supplied =
- vals->values_supplied & ~(PIXELSIZE_MASK | POINTSIZE_MASK) |
- PIXELSIZE_ARRAY;
-#else /* NOTDEF */
- vals->values_supplied = vals->values_supplied & ~POINTSIZE_MASK;
-#endif /* NOTDEF */
- /* Recompute and reround the FontScalablePtr values after
- rescaling for the new width. */
- FontFileCompleteXLFD(vals, vals);
- }
-
- return result;
-}
-
-static FontEntryPtr
-FindPmfToScale(FontPathElementPtr fpe, FontEntryPtr entry,
- FontScalablePtr vals, FontScalablePtr best,
- double *dxp, double *dyp,
- double *sdxp, double *sdyp,
- FontPathElementPtr *fpep)
-{
- FontEntryPtr result = NULL;
- FontScaledPtr scaled;
- FontScalableExtraPtr extra;
- int i;
-
- extra = entry->u.scalable.extra;
- for (i = 0; i < extra->numScaled; i++)
- {
- double rescale_x;
-
- scaled = &extra->scaled[i];
- if (!scaled->bitmap)
- continue;
- if (!ComputeScaleFactors(&scaled->vals, vals, dxp, dyp, sdxp, sdyp,
- &rescale_x))
- continue;
- *best = scaled->vals;
- *fpep = fpe;
- result = scaled->bitmap;
- if (rescale_x != 1.0)
- {
- /* We have rescaled horizontally due to an XLFD width field. Change
- the matrix appropriately */
- vals->pixel_matrix[0] *= rescale_x;
- vals->pixel_matrix[1] *= rescale_x;
-#ifdef NOTDEF
- /* This would force the pointsize and pixelsize fields in the
- FONT property to display as matrices to more accurately
- report the font being supplied. It might also break existing
- applications that expect a single number in that field. */
- vals->values_supplied =
- vals->values_supplied & ~(PIXELSIZE_MASK | POINTSIZE_MASK) |
- PIXELSIZE_ARRAY;
-#else /* NOTDEF */
- vals->values_supplied = vals->values_supplied & ~POINTSIZE_MASK;
-#endif /* NOTDEF */
- /* Recompute and reround the FontScalablePtr values after
- rescaling for the new width. */
- FontFileCompleteXLFD(vals, vals);
- }
- break;
- }
- return result;
-}
-
-static long
-doround(double x)
-{
- return (x >= 0) ? (long)(x + .5) : (long)(x - .5);
-}
-
-static int
-computeProps(FontPropPtr pf, char *wasStringProp,
- FontPropPtr npf, char *isStringProp,
- unsigned int nprops, double xfactor, double yfactor,
- double sXfactor, double sYfactor)
-{
- int n;
- int count;
- fontProp *t;
- double rawfactor = 0.0;
-
- for (count = 0; nprops > 0; nprops--, pf++, wasStringProp++) {
- n = sizeof(fontPropTable) / sizeof(fontProp);
- for (t = fontPropTable; n && (t->atom != pf->name); n--, t++);
- if (!n)
- continue;
-
- switch (t->type) {
- case scaledX:
- npf->value = doround(xfactor * (double)pf->value);
- rawfactor = sXfactor;
- break;
- case scaledY:
- npf->value = doround(yfactor * (double)pf->value);
- rawfactor = sYfactor;
- break;
- case unscaled:
- npf->value = pf->value;
- npf->name = pf->name;
- npf++;
- count++;
- *isStringProp++ = *wasStringProp;
- break;
- default:
- break;
- }
- if (t->type != unscaled)
- {
- npf->name = pf->name;
- npf++;
- count++;
- npf->value = doround(rawfactor * (double)pf->value);
- npf->name = rawFontPropTable[t - fontPropTable].atom;
- npf++;
- count++;
- *isStringProp++ = *wasStringProp;
- *isStringProp++ = *wasStringProp;
- }
- }
- return count;
-}
-
-
-static int
-ComputeScaledProperties(FontInfoPtr sourceFontInfo, /* the font to be scaled */
- char *name, /* name of resulting font */
- FontScalablePtr vals,
- double dx, double dy, /* scale factors in x and y */
- double sdx, double sdy, /* directions */
- long sWidth, /* 1000-pixel average width */
- FontPropPtr *pProps, /* returns properties;
- preallocated */
- char **pIsStringProp) /* return booleans;
- preallocated */
-{
- int n;
- char *ptr1 = NULL, *ptr2 = NULL;
- char *ptr3;
- FontPropPtr fp;
- fontProp *fpt;
- char *isStringProp;
- int nProps;
-
- if (bitscaleGeneration != serverGeneration) {
- initFontPropTable();
- bitscaleGeneration = serverGeneration;
- }
- nProps = NPROPS + 1 + sizeof(fontPropTable) / sizeof(fontProp) +
- sizeof(rawFontPropTable) / sizeof(fontProp);
- fp = (FontPropPtr) xalloc(sizeof(FontPropRec) * nProps);
- *pProps = fp;
- if (!fp) {
- fprintf(stderr, "Error: Couldn't allocate font properties (%ld*%d)\n",
- (unsigned long)sizeof(FontPropRec), nProps);
- return 1;
- }
- isStringProp = (char *) xalloc (nProps);
- *pIsStringProp = isStringProp;
- if (!isStringProp)
- {
- fprintf(stderr, "Error: Couldn't allocate isStringProp (%d)\n", nProps);
- xfree (fp);
- return 1;
- }
- ptr2 = name;
- for (fpt = fontNamePropTable, n = NPROPS;
- n;
- fp++, fpt++, n--, isStringProp++)
- {
-
- if (*ptr2)
- {
- ptr1 = ptr2 + 1;
- if (!(ptr2 = strchr(ptr1, '-'))) ptr2 = strchr(ptr1, '\0');
- }
-
- *isStringProp = 0;
- switch (fpt->type) {
- case atom:
- fp->value = MakeAtom(ptr1, ptr2 - ptr1, TRUE);
- *isStringProp = 1;
- break;
- case truncate_atom:
- for (ptr3 = ptr1; *ptr3; ptr3++)
- if (*ptr3 == '[')
- break;
- if (!*ptr3) ptr3 = ptr2;
- fp->value = MakeAtom(ptr1, ptr3 - ptr1, TRUE);
- *isStringProp = 1;
- break;
- case pixel_size:
- fp->value = doround(vals->pixel_matrix[3]);
- break;
- case point_size:
- fp->value = doround(vals->point_matrix[3] * 10.0);
- break;
- case resolution_x:
- fp->value = vals->x;
- break;
- case resolution_y:
- fp->value = vals->y;
- break;
- case average_width:
- fp->value = vals->width;
- break;
- case fontname:
- fp->value = MakeAtom(name, strlen(name), TRUE);
- *isStringProp = 1;
- break;
- case raw_ascent:
- fp->value = sourceFontInfo->fontAscent * sdy;
- break;
- case raw_descent:
- fp->value = sourceFontInfo->fontDescent * sdy;
- break;
- case raw_pointsize:
- fp->value = (long)(72270.0 / (double)vals->y + .5);
- break;
- case raw_pixelsize:
- fp->value = 1000;
- break;
- case raw_average_width:
- fp->value = sWidth;
- break;
- default:
- break;
- }
- fp->name = fpt->atom;
- }
- n = NPROPS;
- n += computeProps(sourceFontInfo->props, sourceFontInfo->isStringProp,
- fp, isStringProp, sourceFontInfo->nprops, dx, dy,
- sdx, sdy);
- return n;
-}
-
-
-static int
-compute_xform_matrix(FontScalablePtr vals, double dx, double dy,
- double *xform, double *inv_xform,
- double *xmult, double *ymult)
-{
- double det;
- double pixel = get_matrix_vertical_component(vals->pixel_matrix);
- double pixelset = get_matrix_horizontal_component(vals->pixel_matrix);
-
- if (pixel < EPS || pixelset < EPS) return 0;
-
- /* Initialize the transformation matrix to the scaling factors */
- xform[0] = dx / pixelset;
- xform[1] = xform[2] = 0.0;
- xform[3] = dy / pixel;
-
-/* Inline matrix multiply -- somewhat ugly to minimize register usage */
-#define MULTIPLY_XFORM(a,b,c,d) \
-{ \
- register double aa = (a), bb = (b), cc = (c), dd = (d); \
- register double temp; \
- temp = aa * xform[0] + cc * xform[1]; \
- aa = aa * xform[2] + cc * xform[3]; \
- xform[1] = bb * xform[0] + dd * xform[1]; \
- xform[3] = bb * xform[2] + dd * xform[3]; \
- xform[0] = temp; \
- xform[2] = aa; \
-}
-
- /* Rescale the transformation matrix for size of source font */
- MULTIPLY_XFORM(vals->pixel_matrix[0],
- vals->pixel_matrix[1],
- vals->pixel_matrix[2],
- vals->pixel_matrix[3]);
-
- *xmult = xform[0];
- *ymult = xform[3];
-
-
- if (inv_xform == NULL) return 1;
-
- /* Compute the determinant for use in inverting the matrix. */
- det = xform[0] * xform[3] - xform[1] * xform[2];
-
- /* If the determinant is tiny or zero, give up */
- if (fabs(det) < EPS) return 0;
-
- /* Compute the inverse */
- inv_xform[0] = xform[3] / det;
- inv_xform[1] = -xform[1] / det;
- inv_xform[2] = -xform[2] / det;
- inv_xform[3] = xform[0] / det;
-
- return 1;
-}
-
-/*
- * ScaleFont
- * returns a pointer to the new scaled font, or NULL (due to AllocError).
- */
-static FontPtr
-ScaleFont(FontPtr opf, /* originating font */
- double widthMult, /* glyphs width scale factor */
- double heightMult, /* glyphs height scale factor */
- double sWidthMult, /* scalable glyphs width scale factor */
- double sHeightMult, /* scalable glyphs height scale factor */
- FontScalablePtr vals,
- double *newWidthMult, /* return: X component of glyphs width
- scale factor */
- double *newHeightMult, /* return: Y component of glyphs height
- scale factor */
- long *sWidth) /* return: average 1000-pixel width */
-{
- FontPtr pf;
- FontInfoPtr pfi,
- opfi;
- BitmapFontPtr bitmapFont,
- obitmapFont;
- CharInfoPtr pci,
- opci;
- int nchars = 0; /* how many characters in the font */
- int i;
- int firstCol, lastCol, firstRow, lastRow;
- double xform[4], inv_xform[4];
- double xmult, ymult;
- int totalwidth = 0, totalchars = 0;
-#define OLDINDEX(i) (((i)/(lastCol - firstCol + 1) + \
- firstRow - opf->info.firstRow) * \
- (opf->info.lastCol - opf->info.firstCol + 1) + \
- (i)%(lastCol - firstCol + 1) + \
- firstCol - opf->info.firstCol)
-
- *sWidth = 0;
-
- opfi = &opf->info;
- obitmapFont = (BitmapFontPtr) opf->fontPrivate;
-
- bitmapFont = 0;
- if (!(pf = CreateFontRec())) {
- fprintf(stderr, "Error: Couldn't allocate FontRec (%ld)\n",
- (unsigned long)sizeof(FontRec));
- goto bail;
- }
- pf->refcnt = 0;
- pf->bit = opf->bit;
- pf->byte = opf->byte;
- pf->glyph = opf->glyph;
- pf->scan = opf->scan;
-
- pf->get_glyphs = bitmapGetGlyphs;
- pf->get_metrics = bitmapGetMetrics;
- pf->unload_font = bitmapUnloadScalable;
- pf->unload_glyphs = NULL;
-
- pfi = &pf->info;
- *pfi = *opfi;
- /* If charset subsetting specified in vals, determine what our range
- needs to be for the output font */
- if (vals->nranges)
- {
- int i;
-
- pfi->allExist = 0;
- firstCol = 255;
- lastCol = 0;
- firstRow = 255;
- lastRow = 0;
-
- for (i = 0; i < vals->nranges; i++)
- {
- if (vals->ranges[i].min_char_high != vals->ranges[i].max_char_high)
- {
- firstCol = opfi->firstCol;
- lastCol = opfi->lastCol;
- }
- if (firstCol > vals->ranges[i].min_char_low)
- firstCol = vals->ranges[i].min_char_low;
- if (lastCol < vals->ranges[i].max_char_low)
- lastCol = vals->ranges[i].max_char_low;
- if (firstRow > vals->ranges[i].min_char_high)
- firstRow = vals->ranges[i].min_char_high;
- if (lastRow < vals->ranges[i].max_char_high)
- lastRow = vals->ranges[i].max_char_high;
- }
-
- if (firstCol > lastCol || firstRow > lastRow)
- goto bail;
-
- if (firstCol < opfi->firstCol)
- firstCol = opfi->firstCol;
- if (lastCol > opfi->lastCol)
- lastCol = opfi->lastCol;
- if (firstRow < opfi->firstRow)
- firstRow = opfi->firstRow;
- if (lastRow > opfi->lastRow)
- lastRow = opfi->lastRow;
- }
- else
- {
- firstCol = opfi->firstCol;
- lastCol = opfi->lastCol;
- firstRow = opfi->firstRow;
- lastRow = opfi->lastRow;
- }
-
- bitmapFont = (BitmapFontPtr) xalloc(sizeof(BitmapFontRec));
- if (!bitmapFont) {
- fprintf(stderr, "Error: Couldn't allocate bitmapFont (%ld)\n",
- (unsigned long)sizeof(BitmapFontRec));
- goto bail;
- }
- nchars = (lastRow - firstRow + 1) * (lastCol - firstCol + 1);
- pfi->firstRow = firstRow;
- pfi->lastRow = lastRow;
- pfi->firstCol = firstCol;
- pfi->lastCol = lastCol;
- pf->fontPrivate = (pointer) bitmapFont;
- bitmapFont->version_num = obitmapFont->version_num;
- bitmapFont->num_chars = nchars;
- bitmapFont->num_tables = obitmapFont->num_tables;
- bitmapFont->metrics = 0;
- bitmapFont->ink_metrics = 0;
- bitmapFont->bitmaps = 0;
- bitmapFont->encoding = 0;
- bitmapFont->bitmapExtra = 0;
- bitmapFont->pDefault = 0;
- bitmapFont->metrics = (CharInfoPtr) xalloc(nchars * sizeof(CharInfoRec));
- if (!bitmapFont->metrics) {
- fprintf(stderr, "Error: Couldn't allocate metrics (%d*%ld)\n",
- nchars, (unsigned long)sizeof(CharInfoRec));
- goto bail;
- }
- bitmapFont->encoding =
- (CharInfoPtr **) xcalloc(NUM_SEGMENTS(nchars),
- sizeof(CharInfoPtr*));
- if (!bitmapFont->encoding) {
- fprintf(stderr, "Error: Couldn't allocate encoding (%d*%ld)\n",
- nchars, (unsigned long)sizeof(CharInfoPtr));
- goto bail;
- }
-
-#undef MAXSHORT
-#define MAXSHORT 32767
-#undef MINSHORT
-#define MINSHORT -32768
-
- pfi->anamorphic = FALSE;
- if (heightMult != widthMult)
- pfi->anamorphic = TRUE;
- pfi->cachable = TRUE;
-
- if (!compute_xform_matrix(vals, widthMult, heightMult, xform,
- inv_xform, &xmult, &ymult))
- goto bail;
-
- pfi->fontAscent = opfi->fontAscent * ymult;
- pfi->fontDescent = opfi->fontDescent * ymult;
-
- pfi->minbounds.leftSideBearing = MAXSHORT;
- pfi->minbounds.rightSideBearing = MAXSHORT;
- pfi->minbounds.ascent = MAXSHORT;
- pfi->minbounds.descent = MAXSHORT;
- pfi->minbounds.characterWidth = MAXSHORT;
- pfi->minbounds.attributes = MAXSHORT;
-
- pfi->maxbounds.leftSideBearing = MINSHORT;
- pfi->maxbounds.rightSideBearing = MINSHORT;
- pfi->maxbounds.ascent = MINSHORT;
- pfi->maxbounds.descent = MINSHORT;
- pfi->maxbounds.characterWidth = MINSHORT;
- pfi->maxbounds.attributes = MINSHORT;
-
- /* Compute the transformation and inverse transformation matrices.
- Can fail if the determinant is zero. */
-
- pci = bitmapFont->metrics;
- for (i = 0; i < nchars; i++)
- {
- if ((opci = ACCESSENCODING(obitmapFont->encoding,OLDINDEX(i))))
- {
- double newlsb, newrsb, newdesc, newasc, point[2];
-
-#define minchar(p) ((p).min_char_low + ((p).min_char_high << 8))
-#define maxchar(p) ((p).max_char_low + ((p).max_char_high << 8))
-
- if (vals->nranges)
- {
- int row = i / (lastCol - firstCol + 1) + firstRow;
- int col = i % (lastCol - firstCol + 1) + firstCol;
- int ch = (row << 8) + col;
- int j;
- for (j = 0; j < vals->nranges; j++)
- if (ch >= minchar(vals->ranges[j]) &&
- ch <= maxchar(vals->ranges[j]))
- break;
- if (j == vals->nranges)
- {
- continue;
- }
- }
-
- if (opci->metrics.leftSideBearing == 0 &&
- opci->metrics.rightSideBearing == 0 &&
- opci->metrics.ascent == 0 &&
- opci->metrics.descent == 0 &&
- opci->metrics.characterWidth == 0)
- {
- continue;
- }
-
- if(!bitmapFont->encoding[SEGMENT_MAJOR(i)]) {
- bitmapFont->encoding[SEGMENT_MAJOR(i)]=
- (CharInfoPtr*)xcalloc(BITMAP_FONT_SEGMENT_SIZE,
- sizeof(CharInfoPtr));
- if(!bitmapFont->encoding[SEGMENT_MAJOR(i)])
- goto bail;
- }
- ACCESSENCODINGL(bitmapFont->encoding, i) = pci;
-
- /* Compute new extents for this glyph */
- TRANSFORM_POINT(xform,
- opci->metrics.leftSideBearing,
- -opci->metrics.descent,
- point);
- newlsb = point[0];
- newrsb = newlsb;
- newdesc = -point[1];
- newasc = -newdesc;
- TRANSFORM_POINT(xform,
- opci->metrics.leftSideBearing,
- opci->metrics.ascent,
- point);
- CHECK_EXTENT(newlsb, newrsb, newdesc, newasc, point);
- TRANSFORM_POINT(xform,
- opci->metrics.rightSideBearing,
- -opci->metrics.descent,
- point);
- CHECK_EXTENT(newlsb, newrsb, newdesc, newasc, point);
- TRANSFORM_POINT(xform,
- opci->metrics.rightSideBearing,
- opci->metrics.ascent,
- point);
- CHECK_EXTENT(newlsb, newrsb, newdesc, newasc, point);
-
- pci->metrics.leftSideBearing = (int)floor(newlsb);
- pci->metrics.rightSideBearing = (int)floor(newrsb + .5);
- pci->metrics.descent = (int)ceil(newdesc);
- pci->metrics.ascent = (int)floor(newasc + .5);
- /* Accumulate total width of characters before transformation,
- to ascertain predominant direction of font. */
- totalwidth += opci->metrics.characterWidth;
- pci->metrics.characterWidth =
- doround((double)opci->metrics.characterWidth * xmult);
- pci->metrics.attributes =
- doround((double)opci->metrics.characterWidth * sWidthMult);
- if (!pci->metrics.characterWidth)
- {
- /* Since transformation may shrink width, height, and
- escapement to zero, make sure existing characters
- are not mistaken for undefined characters. */
-
- if (pci->metrics.rightSideBearing ==
- pci->metrics.leftSideBearing)
- pci->metrics.rightSideBearing++;
- if (pci->metrics.ascent == -pci->metrics.descent)
- pci->metrics.ascent++;
- }
-
- pci++;
- }
- }
-
-
- /*
- * For each character, set the per-character metrics, scale the glyph, and
- * check per-font minbounds and maxbounds character information.
- */
-
- pci = bitmapFont->metrics;
- for (i = 0; i < nchars; i++)
- {
- if ((pci = ACCESSENCODING(bitmapFont->encoding,i)) &&
- (opci = ACCESSENCODING(obitmapFont->encoding,OLDINDEX(i))))
- {
- totalchars++;
- *sWidth += abs((int)(INT16)pci->metrics.attributes);
-#define MINMAX(field) \
- if (pfi->minbounds.field > pci->metrics.field) \
- pfi->minbounds.field = pci->metrics.field; \
- if (pfi->maxbounds.field < pci->metrics.field) \
- pfi->maxbounds.field = pci->metrics.field
-
- MINMAX(leftSideBearing);
- MINMAX(rightSideBearing);
- MINMAX(ascent);
- MINMAX(descent);
- MINMAX(characterWidth);
-
- /* Hack: Cast attributes into a signed quantity. Tread lightly
- for now and don't go changing the global Xproto.h file */
- if ((INT16)pfi->minbounds.attributes >
- (INT16)pci->metrics.attributes)
- pfi->minbounds.attributes = pci->metrics.attributes;
- if ((INT16)pfi->maxbounds.attributes <
- (INT16)pci->metrics.attributes)
- pfi->maxbounds.attributes = pci->metrics.attributes;
-#undef MINMAX
- }
- }
- pfi->ink_minbounds = pfi->minbounds;
- pfi->ink_maxbounds = pfi->maxbounds;
- if (totalchars)
- {
- *sWidth = (*sWidth * 10 + totalchars / 2) / totalchars;
- if (totalwidth < 0)
- {
- /* Dominant direction is R->L */
- *sWidth = -*sWidth;
- }
-
- if (pfi->minbounds.characterWidth == pfi->maxbounds.characterWidth)
- vals->width = pfi->minbounds.characterWidth * 10;
- else
- vals->width = doround((double)*sWidth * vals->pixel_matrix[0] /
- 1000.0);
- }
- else
- {
- vals->width = 0;
- *sWidth = 0;
- }
- FontComputeInfoAccelerators (pfi);
-
- if (pfi->defaultCh != (unsigned short) NO_SUCH_CHAR) {
- unsigned int r,
- c,
- cols;
-
- r = pfi->defaultCh >> 8;
- c = pfi->defaultCh & 0xFF;
- if (pfi->firstRow <= r && r <= pfi->lastRow &&
- pfi->firstCol <= c && c <= pfi->lastCol) {
- cols = pfi->lastCol - pfi->firstCol + 1;
- r = r - pfi->firstRow;
- c = c - pfi->firstCol;
- bitmapFont->pDefault =
- ACCESSENCODING(bitmapFont->encoding, r * cols + c);
- }
- }
-
- *newWidthMult = xmult;
- *newHeightMult = ymult;
- return pf;
-bail:
- if (pf)
- xfree(pf);
- if (bitmapFont) {
- xfree(bitmapFont->metrics);
- xfree(bitmapFont->ink_metrics);
- xfree(bitmapFont->bitmaps);
- if(bitmapFont->encoding)
- for(i=0; i<NUM_SEGMENTS(nchars); i++)
- xfree(bitmapFont->encoding[i]);
- xfree(bitmapFont->encoding);
- }
- return NULL;
-}
-
-static void
-ScaleBitmap(FontPtr pFont, CharInfoPtr opci, CharInfoPtr pci,
- double *inv_xform, double widthMult, double heightMult)
-{
- register char *bitmap, /* The bits */
- *newBitmap;
- register int bpr, /* Padding information */
- newBpr;
- int width, /* Extents information */
- height,
- newWidth,
- newHeight;
- register int row, /* Loop variables */
- col;
- INT32 deltaX, /* Increments for resampling loop */
- deltaY;
- INT32 xValue, /* Subscripts for resampling loop */
- yValue;
- double point[2];
- unsigned char *char_grayscale = 0;
- INT32 *diffusion_workspace = NULL, *thisrow = NULL,
- *nextrow = NULL, pixmult = 0;
- int box_x = 0, box_y = 0;
-
- static unsigned char masklsb[] =
- { 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80 };
- static unsigned char maskmsb[] =
- { 0x80, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1 };
- unsigned char *mask = (pFont->bit == LSBFirst ? masklsb : maskmsb);
-
-
- bitmap = opci->bits;
- newBitmap = pci->bits;
- width = GLYPHWIDTHPIXELS(opci);
- height = GLYPHHEIGHTPIXELS(opci);
- newWidth = GLYPHWIDTHPIXELS(pci);
- newHeight = GLYPHHEIGHTPIXELS(pci);
- if (!newWidth || !newHeight || !width || !height)
- return;
-
- bpr = BYTES_PER_ROW(width, pFont->glyph);
- newBpr = BYTES_PER_ROW(newWidth, pFont->glyph);
-
- if (widthMult > 0.0 && heightMult > 0.0 &&
- (widthMult < 1.0 || heightMult < 1.0))
- {
- /* We are reducing in one or both dimensions. In an attempt to
- reduce aliasing, we'll antialias by passing the original
- glyph through a low-pass box filter (which results in a
- grayscale image), then use error diffusion to create bitonal
- output in the resampling loop. */
-
- /* First compute the sizes of the box filter */
- widthMult = ceil(1.0 / widthMult);
- heightMult = ceil(1.0 / heightMult);
- box_x = width / 2;
- box_y = height / 2;
- if (widthMult < (double)box_x) box_x = (int)widthMult;
- if (heightMult < (double)box_y) box_y = (int)heightMult;
- /* The pixmult value (below) is used to darken the image before
- we perform error diffusion: a necessary concession to the
- fact that it's very difficult to generate readable halftoned
- glyphs. The degree of darkening is proportional to the size
- of the blurring filter, hence inversely proportional to the
- darkness of the lightest gray that results from antialiasing.
- The result is that characters that exercise this logic (those
- generated by reducing from a larger source font) tend to err
- on the side of being too bold instead of being too light to
- be readable. */
- pixmult = box_x * box_y * 192;
-
- if (box_x > 1 || box_y > 1)
- {
- /* Looks like we need to anti-alias. Create a workspace to
- contain the grayscale character plus an additional row and
- column for scratch */
- char_grayscale =
- (unsigned char *)xalloc((width + 1) * (height + 1));
- if (char_grayscale)
- {
- diffusion_workspace =
- (INT32 *)xalloc((newWidth + 2) * 2 * sizeof(int));
- if (!diffusion_workspace)
- {
- fprintf(stderr, "Warning: Couldn't allocate diffusion"
- " workspace (%ld)\n",
- (newWidth + 2) * 2 * (unsigned long)sizeof(int));
- xfree(char_grayscale);
- char_grayscale = (unsigned char *)0;
- }
- /* Initialize our error diffusion workspace for later use */
- bzero((char *)diffusion_workspace + sizeof(INT32),
- (newWidth + 3) * sizeof(int));
- thisrow = diffusion_workspace + 1;
- nextrow = diffusion_workspace + newWidth + 3;
- } else {
- fprintf(stderr, "Warning: Couldn't allocate character grayscale (%d)\n", (width + 1) * (height + 1));
- }
- }
- }
-
- if (char_grayscale)
- {
- /* We will be doing antialiasing. First copy the bitmap into
- our buffer, mapping input range [0,1] to output range
- [0,255]. */
- register unsigned char *srcptr, *dstptr;
- srcptr = (unsigned char *)bitmap;
- dstptr = char_grayscale;
- for (row = 0; row < height; row++)
- {
- for (col = 0; col < width; col++)
- *dstptr++ = (srcptr[col >> 3] & mask[col & 0x7]) ? 255 : 0;
- srcptr += bpr; /* On to next row of source */
- dstptr++; /* Skip scratch column in dest */
- }
- if (box_x > 1)
- {
- /* Our box filter has a width > 1... let's filter the rows */
-
- int right_width = box_x / 2;
- int left_width = box_x - right_width - 1;
-
- for (row = 0; row < height; row++)
- {
- int sum = 0;
- int left_size = 0, right_size = 0;
-
- srcptr = char_grayscale + (width + 1) * row;
- dstptr = char_grayscale + (width + 1) * height; /* scratch */
-
- /* We've computed the shape of our full box filter. Now
- compute the right-hand part of the moving sum */
- for (right_size = 0; right_size < right_width; right_size++)
- sum += srcptr[right_size];
-
- /* Now start moving the sum, growing the box filter, and
- dropping averages into our scratch buffer */
- for (left_size = 0; left_size < left_width; left_size++)
- {
- sum += srcptr[right_width];
- *dstptr++ = sum / (left_size + right_width + 1);
- srcptr++;
- }
-
- /* The box filter has reached full width... continue
- computation of moving average until the right side
- hits the wall. */
- for (col = left_size; col + right_size < width; col++)
- {
- sum += srcptr[right_width];
- *dstptr++ = sum / box_x;
- sum -= srcptr[-left_width];
- srcptr++;
- }
-
- /* Collapse the right side of the box filter */
- for (; right_size > 0; right_size--)
- {
- *dstptr++ = sum / (left_width + right_size);
- sum -= srcptr[-left_width];
- srcptr++;
- }
-
- /* Done with the row... copy dest back over source */
- memmove(char_grayscale + (width + 1) * row,
- char_grayscale + (width + 1) * height,
- width);
- }
- }
- if (box_y > 1)
- {
- /* Our box filter has a height > 1... let's filter the columns */
-
- int bottom_height = box_y / 2;
- int top_height = box_y - bottom_height - 1;
-
- for (col = 0; col < width; col++)
- {
- int sum = 0;
- int top_size = 0, bottom_size = 0;
-
- srcptr = char_grayscale + col;
- dstptr = char_grayscale + width; /* scratch */
-
- /* We've computed the shape of our full box filter. Now
- compute the bottom part of the moving sum */
- for (bottom_size = 0;
- bottom_size < bottom_height;
- bottom_size++)
- sum += srcptr[bottom_size * (width + 1)];
-
- /* Now start moving the sum, growing the box filter, and
- dropping averages into our scratch buffer */
- for (top_size = 0; top_size < top_height; top_size++)
- {
- sum += srcptr[bottom_height * (width + 1)];
- *dstptr = sum / (top_size + bottom_height + 1);
- dstptr += width + 1;
- srcptr += width + 1;
- }
-
- /* The box filter has reached full height... continue
- computation of moving average until the bottom
- hits the wall. */
- for (row = top_size; row + bottom_size < height; row++)
- {
- sum += srcptr[bottom_height * (width + 1)];
- *dstptr = sum / box_y;
- dstptr += width + 1;
- sum -= srcptr[-top_height * (width + 1)];
- srcptr += width + 1;
- }
-
- /* Collapse the bottom of the box filter */
- for (; bottom_size > 0; bottom_size--)
- {
- *dstptr = sum / (top_height + bottom_size);
- dstptr += width + 1;
- sum -= srcptr[-top_height * (width + 1)];
- srcptr += width + 1;
- }
-
- /* Done with the column... copy dest back over source */
-
- dstptr = char_grayscale + col;
- srcptr = char_grayscale + width; /* scratch */
- for (row = 0; row < height; row++)
- {
- *dstptr = *srcptr;
- dstptr += width + 1;
- srcptr += width + 1;
- }
- }
- }
-
- /* Increase the grayvalue to increase ink a bit */
- srcptr = char_grayscale;
- for (row = 0; row < height; row++)
- {
- for (col = 0; col < width; col++)
- {
- register int pixvalue = (int)*srcptr * pixmult / 256;
- if (pixvalue > 255) pixvalue = 255;
- *srcptr = pixvalue;
- srcptr++;
- }
- srcptr++;
- }
- }
-
- /* Compute the increment values for the resampling loop */
- TRANSFORM_POINT(inv_xform, 1, 0, point);
- deltaX = (INT32)(point[0] * 65536.0);
- deltaY = (INT32)(-point[1] * 65536.0);
-
- /* Resampling loop: resamples original glyph for generation of new
- glyph in transformed coordinate system. */
-
- for (row = 0; row < newHeight; row++)
- {
- /* Compute inverse transformation for start of this row */
- TRANSFORM_POINT(inv_xform,
- (double)(pci->metrics.leftSideBearing) + .5,
- (double)(pci->metrics.ascent - row) - .5,
- point);
-
- /* Adjust for coordinate system to get resampling point */
- point[0] -= opci->metrics.leftSideBearing;
- point[1] = opci->metrics.ascent - point[1];
-
- /* Convert to integer coordinates */
- xValue = (INT32)(point[0] * 65536.0);
- yValue = (INT32)(point[1] * 65536.0);
-
- if (char_grayscale)
- {
- INT32 *temp;
- for (col = 0; col < newWidth; col++)
- {
- register int x = xValue >> 16, y = yValue >> 16;
- int pixvalue, error;
-
- pixvalue = ((x >= 0 && x < width && y >= 0 && y < height) ?
- char_grayscale[x + y * (width + 1)] : 0) +
- thisrow[col] / 16;
- if (pixvalue > 255) pixvalue = 255;
- else if (pixvalue < 0) pixvalue = 0;
-
- /* Choose the bit value and set resulting error value */
- if (pixvalue >= 128)
- {
- newBitmap[(col >> 3) + row * newBpr] |= mask[col & 0x7];
- error = pixvalue - 255;
- }
- else
- error = -pixvalue;
-
- /* Diffuse the error */
- thisrow[col + 1] += error * 7;
- nextrow[col - 1] += error * 3;
- nextrow[col] += error * 5;
- nextrow[col + 1] = error;
-
- xValue += deltaX;
- yValue += deltaY;
- }
-
- /* Add in error values that fell off either end */
- nextrow[0] += nextrow[-1];
- nextrow[newWidth - 2] += thisrow[newWidth];
- nextrow[newWidth - 1] += nextrow[newWidth];
- nextrow[newWidth] = 0;
-
- temp = nextrow;
- nextrow = thisrow;
- thisrow = temp;
- nextrow[-1] = nextrow[0] = 0;
- }
- else
- {
- for (col = 0; col < newWidth; col++)
- {
- register int x = xValue >> 16, y = yValue >> 16;
-
- if (x >= 0 && x < width && y >= 0 && y < height)
- {
- /* Use point-sampling for rescaling. */
-
- if (bitmap[(x >> 3) + y * bpr] & mask[x & 0x7])
- newBitmap[(col >> 3) + row * newBpr] |= mask[col & 0x7];
- }
-
- xValue += deltaX;
- yValue += deltaY;
- }
- }
- }
-
-
- if (char_grayscale)
- {
- xfree(char_grayscale);
- xfree(diffusion_workspace);
- }
-}
-
-static FontPtr
-BitmapScaleBitmaps(FontPtr pf, /* scaled font */
- FontPtr opf, /* originating font */
- double widthMult, /* glyphs width scale factor */
- double heightMult, /* glyphs height scale factor */
- FontScalablePtr vals)
-{
- register int i;
- int nchars = 0;
- char *glyphBytes;
- BitmapFontPtr bitmapFont,
- obitmapFont;
- CharInfoPtr pci,
- opci;
- FontInfoPtr pfi;
- int glyph;
- unsigned bytestoalloc = 0;
- int firstCol, lastCol, firstRow, lastRow;
-
- double xform[4], inv_xform[4];
- double xmult, ymult;
-
- bitmapFont = (BitmapFontPtr) pf->fontPrivate;
- obitmapFont = (BitmapFontPtr) opf->fontPrivate;
-
- if (!compute_xform_matrix(vals, widthMult, heightMult, xform,
- inv_xform, &xmult, &ymult))
- goto bail;
-
- pfi = &pf->info;
- firstCol = pfi->firstCol;
- lastCol = pfi->lastCol;
- firstRow = pfi->firstRow;
- lastRow = pfi->lastRow;
-
- nchars = (lastRow - firstRow + 1) * (lastCol - firstCol + 1);
- glyph = pf->glyph;
- for (i = 0; i < nchars; i++)
- {
- if ((pci = ACCESSENCODING(bitmapFont->encoding, i)))
- bytestoalloc += BYTES_FOR_GLYPH(pci, glyph);
- }
-
- /* Do we add the font malloc stuff for VALUE ADDED ? */
- /* Will need to remember to free in the Unload routine */
-
-
- bitmapFont->bitmaps = (char *) xalloc(bytestoalloc);
- if (!bitmapFont->bitmaps) {
- fprintf(stderr, "Error: Couldn't allocate bitmaps (%d)\n", bytestoalloc);
- goto bail;
- }
- bzero(bitmapFont->bitmaps, bytestoalloc);
-
- glyphBytes = bitmapFont->bitmaps;
- for (i = 0; i < nchars; i++)
- {
- if ((pci = ACCESSENCODING(bitmapFont->encoding, i)) &&
- (opci = ACCESSENCODING(obitmapFont->encoding, OLDINDEX(i))))
- {
- pci->bits = glyphBytes;
- ScaleBitmap (pf, opci, pci, inv_xform,
- widthMult, heightMult);
- glyphBytes += BYTES_FOR_GLYPH(pci, glyph);
- }
- }
- return pf;
-
-bail:
- if (pf)
- xfree(pf);
- if (bitmapFont) {
- xfree(bitmapFont->metrics);
- xfree(bitmapFont->ink_metrics);
- xfree(bitmapFont->bitmaps);
- if(bitmapFont->encoding)
- for(i=0; i<NUM_SEGMENTS(nchars); i++)
- xfree(bitmapFont->encoding[i]);
- xfree(bitmapFont->encoding);
- }
- return NULL;
-}
-
-static FontPtr
-PrinterScaleBitmaps(FontPtr pf, /* scaled font */
- FontPtr opf, /* originating font */
- double widthMult, /* glyphs width scale factor */
- double heightMult, /* glyphs height scale factor */
- FontScalablePtr vals)
-{
- register int i;
- int nchars = 0;
- char *glyphBytes;
- BitmapFontPtr bitmapFont,
- obitmapFont;
- CharInfoPtr pci;
- FontInfoPtr pfi;
- int glyph;
- unsigned bytestoalloc = 0;
- int firstCol, lastCol, firstRow, lastRow;
-
- double xform[4], inv_xform[4];
- double xmult, ymult;
-
- bitmapFont = (BitmapFontPtr) pf->fontPrivate;
- obitmapFont = (BitmapFontPtr) opf->fontPrivate;
-
- if (!compute_xform_matrix(vals, widthMult, heightMult, xform,
- inv_xform, &xmult, &ymult))
- goto bail;
-
- pfi = &pf->info;
- firstCol = pfi->firstCol;
- lastCol = pfi->lastCol;
- firstRow = pfi->firstRow;
- lastRow = pfi->lastRow;
-
- nchars = (lastRow - firstRow + 1) * (lastCol - firstCol + 1);
- glyph = pf->glyph;
- for (i = 0; i < nchars; i++)
- {
- if ((pci = ACCESSENCODING(bitmapFont->encoding, i)))
- bytestoalloc = MAX(bytestoalloc,BYTES_FOR_GLYPH(pci, glyph));
- }
-
- /* Do we add the font malloc stuff for VALUE ADDED ? */
- /* Will need to remember to free in the Unload routine */
-
-
- bitmapFont->bitmaps = (char *) xalloc(bytestoalloc);
- if (!bitmapFont->bitmaps) {
- fprintf(stderr, "Error: Couldn't allocate bitmaps (%d)\n", bytestoalloc);
- goto bail;
- }
- bzero(bitmapFont->bitmaps, bytestoalloc);
-
- glyphBytes = bitmapFont->bitmaps;
- for (i = 0; i < nchars; i++)
- {
- if ((pci = ACCESSENCODING(bitmapFont->encoding, i)) &&
- (ACCESSENCODING(obitmapFont->encoding, OLDINDEX(i))))
- {
- pci->bits = glyphBytes;
- }
- }
- return pf;
-
-bail:
- if (pf)
- xfree(pf);
- if (bitmapFont) {
- xfree(bitmapFont->metrics);
- xfree(bitmapFont->ink_metrics);
- xfree(bitmapFont->bitmaps);
- if(bitmapFont->encoding)
- for(i=0; i<NUM_SEGMENTS(nchars); i++)
- xfree(bitmapFont->encoding[i]);
- xfree(bitmapFont->encoding);
- }
- return NULL;
-}
-
-#ifdef NOTDEF
-/*
- * exported interfaces
- */
-
-FontFileLoadName(FontFileDirPtr *dirs, int ndirs, char *name, FontPtr *pfont,
- fsBitmapFormat format, fsBitmapFormatMask fmask)
-{
- FontFileNamePtr fname;
- char full_name[1024];
- int ret = BadFontName;
- int i;
-
- i = 0;
- while (i < ndirs) {
- if (fname = FontFileFindNameInDir(dirs[i], name)) {
- if (!fname->alias) {
- if (!fname->font) {
- strcpy(full_name, dirs[i]->dir);
- strcat(full_name, fname->file);
- ret = FontFileLoad(pfont, full_name, format, fmask);
- if (ret == Successful) {
- fname->font = *pfont;
- (*pfont)->fpePrivate = (pointer) fname;
- }
- return ret;
- }
- *pfont = fname->font;
- return Successful;
- }
- name = fname->file;
- i = 0;
- } else
- i++;
- }
- return BadFontName;
-}
-#endif
-
-/* ARGSUSED */
-int
-BitmapOpenScalable (FontPathElementPtr fpe,
- FontPtr *pFont,
- int flags,
- FontEntryPtr entry,
- char *fileName, /* unused */
- FontScalablePtr vals,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- FontPtr non_cachable_font) /* We don't do licensing */
-{
- FontScalableRec best;
- FontPtr font = NullFont;
- double dx, sdx,
- dy, sdy,
- savedX, savedY;
- FontPropPtr props;
- char *isStringProp;
- int propCount;
- int status;
- long sWidth;
-
- FontEntryPtr scaleFrom;
- FontPathElementPtr scaleFPE;
- FontPtr sourceFont;
- char fontName[MAXFONTNAMELEN];
-
- /* Can't deal with mix-endian fonts yet */
-
-#ifdef NOTDEF /* XXX need better test */
- if ((format & BitmapFormatByteOrderMask) !=
- (format & BitmapFormatBitOrderMask))
- return NullFontFileName;
-#endif
-
- /* Reject outrageously small font sizes to keep the math from
- blowing up. */
- if (get_matrix_vertical_component(vals->pixel_matrix) < 1.0 ||
- get_matrix_horizontal_component(vals->pixel_matrix) < 1.0)
- return BadFontName;
-
- scaleFrom = (*find_scale[BitmapGetRenderIndex(entry->u.bitmap.renderer)])
- (fpe, entry, vals, &best, &dx, &dy, &sdx, &sdy, &scaleFPE);
-
- if (!scaleFrom)
- return BadFontName;
-
- status = FontFileOpenBitmap(scaleFPE, &sourceFont, LoadAll, scaleFrom,
- format, fmask);
-
- if (status != Successful)
- return BadFontName;
-
- if (!vals->width)
- vals->width = best.width * dx;
-
- /* Compute the scaled font */
-
- savedX = dx;
- savedY = dy;
- font = ScaleFont(sourceFont, dx, dy, sdx, sdy, vals, &dx, &dy, &sWidth);
- if (font)
- font = (*scale[ BitmapGetRenderIndex(entry->u.bitmap.renderer) ])
- (font, sourceFont, savedX, savedY, vals);
-
- if (!font)
- {
- if (!sourceFont->refcnt)
- FontFileCloseFont((FontPathElementPtr) 0, sourceFont);
- return AllocError;
- }
-
- /* Prepare font properties for the new font */
-
- strcpy (fontName, scaleFrom->name.name);
- FontParseXLFDName (fontName, vals, FONT_XLFD_REPLACE_VALUE);
-
- propCount = ComputeScaledProperties(&sourceFont->info, fontName, vals,
- dx, dy, sdx, sdy, sWidth, &props,
- &isStringProp);
-
- if (!sourceFont->refcnt)
- FontFileCloseFont((FontPathElementPtr) 0, sourceFont);
-
- if (propCount && (!props || !isStringProp))
- {
- font->info.nprops = 0;
- font->info.props = (FontPropPtr)0;
- font->info.isStringProp = (char *)0;
- bitmapUnloadScalable(font);
- return AllocError;
- }
-
- font->info.props = props;
- font->info.nprops = propCount;
- font->info.isStringProp = isStringProp;
-
- *pFont = font;
- return Successful;
-}
-
-int
-BitmapGetInfoScalable (FontPathElementPtr fpe,
- FontInfoPtr pFontInfo,
- FontEntryPtr entry,
- FontNamePtr fontName,
- char *fileName,
- FontScalablePtr vals)
-{
- FontPtr pfont;
- int flags = 0;
- long format = 0; /* It doesn't matter what format for just info */
- long fmask = 0;
- int ret;
-
- ret = BitmapOpenScalable(fpe, &pfont, flags, entry, fileName, vals,
- format, fmask, NULL);
- if (ret != Successful)
- return ret;
- *pFontInfo = pfont->info;
-
- pfont->info.nprops = 0;
- pfont->info.props = NULL;
- pfont->info.isStringProp = NULL;
-
- (*pfont->unload_font)(pfont);
- return Successful;
-}
-
-static void
-bitmapUnloadScalable (FontPtr pFont)
-{
- BitmapFontPtr bitmapFont;
- FontInfoPtr pfi;
- int i, nencoding;
-
- bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
- pfi = &pFont->info;
- xfree (pfi->props);
- xfree (pfi->isStringProp);
- if(bitmapFont->encoding) {
- nencoding = (pFont->info.lastCol - pFont->info.firstCol + 1) *
- (pFont->info.lastRow - pFont->info.firstRow + 1);
- for(i=0; i<NUM_SEGMENTS(nencoding); i++)
- xfree(bitmapFont->encoding[i]);
- }
- xfree (bitmapFont->encoding);
- xfree (bitmapFont->bitmaps);
- xfree (bitmapFont->ink_metrics);
- xfree (bitmapFont->metrics);
- xfree (pFont->fontPrivate);
- DestroyFontRec (pFont);
-}
diff --git a/nx-X11/lib/font/bitmap/fontink.c b/nx-X11/lib/font/bitmap/fontink.c
deleted file mode 100644
index a9606f039..000000000
--- a/nx-X11/lib/font/bitmap/fontink.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/* $Xorg: fontink.c,v 1.4 2001/02/09 02:04:02 xorgcvs Exp $ */
-
-/*
-
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/bitmap/fontink.c,v 1.6 2001/01/17 19:43:27 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/bitmap.h>
-#include <X11/fonts/bdfint.h>
-
-static unsigned char ink_mask_msb[8] = {
- 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01,
-};
-
-static unsigned char ink_mask_lsb[8] = {
- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-};
-
-void
-FontCharInkMetrics(FontPtr pFont, CharInfoPtr pCI, xCharInfo *pInk)
-{
- int leftBearing,
- ascent,
- descent;
- register int vpos,
- hpos,
- bpos = 0;
- int bitmapByteWidth,
- bitmapByteWidthPadded;
- int bitmapBitWidth;
- int span;
- register unsigned char *p;
- unsigned char *ink_mask = 0;
- register int bmax;
- register unsigned char charbits;
-
- if (pFont->bit == MSBFirst)
- ink_mask = ink_mask_msb;
- else if (pFont->bit == LSBFirst)
- ink_mask = ink_mask_lsb;
- pInk->characterWidth = pCI->metrics.characterWidth;
- pInk->attributes = pCI->metrics.attributes;
-
- leftBearing = pCI->metrics.leftSideBearing;
- ascent = pCI->metrics.ascent;
- descent = pCI->metrics.descent;
- bitmapBitWidth = GLYPHWIDTHPIXELS(pCI);
- bitmapByteWidth = GLYPHWIDTHBYTES(pCI);
- bitmapByteWidthPadded = BYTES_PER_ROW(bitmapBitWidth, pFont->glyph);
- span = bitmapByteWidthPadded - bitmapByteWidth;
-
- p = (unsigned char *) pCI->bits;
- for (vpos = descent + ascent; --vpos >= 0;) {
- for (hpos = bitmapByteWidth; --hpos >= 0;) {
- if (*p++ != 0)
- goto found_ascent;
- }
- p += span;
- }
- /*
- * special case -- font with no bits gets all zeros
- */
- pInk->leftSideBearing = leftBearing;
- pInk->rightSideBearing = leftBearing;
- pInk->ascent = 0;
- pInk->descent = 0;
- return;
-found_ascent:
- pInk->ascent = vpos - descent + 1;
-
- p = ((unsigned char *) pCI->bits) + bitmapByteWidthPadded *
- (descent + ascent - 1) + bitmapByteWidth;
-
- for (vpos = descent + ascent; --vpos >= 0;) {
- for (hpos = bitmapByteWidth; --hpos >= 0;) {
- if (*--p != 0)
- goto found_descent;
- }
- p -= span;
- }
-found_descent:
- pInk->descent = vpos - ascent + 1;
-
- bmax = 8;
- for (hpos = 0; hpos < bitmapByteWidth; hpos++) {
- charbits = 0;
- p = (unsigned char *) pCI->bits + hpos;
- for (vpos = descent + ascent; --vpos >= 0; p += bitmapByteWidthPadded)
- charbits |= *p;
- if (charbits) {
- if (hpos == bitmapByteWidth - 1)
- bmax = bitmapBitWidth - (hpos << 3);
- p = ink_mask;
- for (bpos = bmax; --bpos >= 0;) {
- if (charbits & *p++)
- goto found_left;
- }
- }
- }
-found_left:
- pInk->leftSideBearing = leftBearing + (hpos << 3) + bmax - bpos - 1;
-
- bmax = bitmapBitWidth - ((bitmapByteWidth - 1) << 3);
- for (hpos = bitmapByteWidth; --hpos >= 0;) {
- charbits = 0;
- p = (unsigned char *) pCI->bits + hpos;
- for (vpos = descent + ascent; --vpos >= 0; p += bitmapByteWidthPadded)
- charbits |= *p;
- if (charbits) {
- p = ink_mask + bmax;
- for (bpos = bmax; --bpos >= 0;) {
- if (charbits & *--p)
- goto found_right;
- }
- }
- bmax = 8;
- }
-found_right:
- pInk->rightSideBearing = leftBearing + (hpos << 3) + bpos + 1;
-}
-
-#define ISBITONMSB(x, line) ((line)[(x)/8] & (1 << (7-((x)%8))))
-#define SETBITMSB(x, line) ((line)[(x)/8] |= (1 << (7-((x)%8))))
-#define ISBITONLSB(x, line) ((line)[(x)/8] & (1 << ((x)%8)))
-#define SETBITLSB(x, line) ((line)[(x)/8] |= (1 << ((x)%8)))
-
-#define Min(a,b) ((a)<(b)?(a):(b))
-#define Max(a,b) ((a)>(b)?(a):(b))
-
-void
-FontCharReshape(FontPtr pFont, CharInfoPtr pSrc, CharInfoPtr pDst)
-{
- int x,
- y;
- unsigned char *in_line,
- *out_line;
- unsigned char *oldglyph,
- *newglyph;
- int inwidth;
- int outwidth,
- outheight;
- int out_bytes,
- in_bytes;
- int y_min,
- y_max,
- x_min,
- x_max;
-
- newglyph = (unsigned char *) pDst->bits;
- outwidth = pDst->metrics.rightSideBearing - pDst->metrics.leftSideBearing;
- outheight = pDst->metrics.descent + pDst->metrics.ascent;
- out_bytes = BYTES_PER_ROW(outwidth, pFont->glyph);
-
- oldglyph = (unsigned char *) pSrc->bits;
- inwidth = pSrc->metrics.rightSideBearing - pSrc->metrics.leftSideBearing;
- in_bytes = BYTES_PER_ROW(inwidth, pFont->glyph);
-
- bzero(newglyph, out_bytes * outheight);
- in_line = oldglyph;
- out_line = newglyph;
- y_min = Max(-pSrc->metrics.ascent, -pDst->metrics.ascent);
- y_max = Min(pSrc->metrics.descent, pDst->metrics.descent);
- x_min = Max(pSrc->metrics.leftSideBearing, pDst->metrics.leftSideBearing);
- x_max = Min(pSrc->metrics.rightSideBearing, pDst->metrics.rightSideBearing);
- in_line += (y_min + pSrc->metrics.ascent) * in_bytes;
- out_line += (y_min + pDst->metrics.ascent) * out_bytes;
- if (pFont->bit == MSBFirst) {
- for (y = y_min; y < y_max; y++) {
- for (x = x_min; x < x_max; x++) {
- if (ISBITONMSB(x - pSrc->metrics.leftSideBearing, in_line))
- SETBITMSB(x - pDst->metrics.leftSideBearing, out_line);
- }
- in_line += in_bytes;
- out_line += out_bytes;
- }
- } else {
- for (y = y_min; y < y_max; y++) {
- for (x = x_min; x < x_max; x++) {
- if (ISBITONLSB(x - pSrc->metrics.leftSideBearing, in_line))
- SETBITLSB(x - pDst->metrics.leftSideBearing, out_line);
- }
- in_line += in_bytes;
- out_line += out_bytes;
- }
- }
-}
diff --git a/nx-X11/lib/font/bitmap/module/Imakefile b/nx-X11/lib/font/bitmap/module/Imakefile
deleted file mode 100644
index 29a49c644..000000000
--- a/nx-X11/lib/font/bitmap/module/Imakefile
+++ /dev/null
@@ -1,45 +0,0 @@
-XCOMM $XFree86: xc/lib/font/bitmap/module/Imakefile,v 1.5 1999/12/03 19:17:18 eich Exp $
-
-#define IHaveModules
-#include <Server.tmpl>
-
- INCLUDES = -I$(FONTINCSRC) -I../../include -I$(SERVERSRC)/include \
- -I$(XINCLUDESRC) -I../
- HEADERS =
- DEFINES = -DFONTMODULE -DBDFFORMAT -DSNFFORMAT -DPCFFORMAT
-
-#ifdef FontFormatDefines
- FORMAT_DEFS = FontFormatDefines
-#endif
-#if GzipFontCompression
- GZIP_DEFS = -DX_GZIP_FONT_COMPRESSION
-#endif
-
- SRCS = bdfread.c bdfutils.c bitmap.c bitmaputil.c bitscale.c \
- bitmapfunc.c pcfread.c pcfwrite.c snfread.c \
- fontink.c bitmapmod.c
-
- OBJS = bdfread.o bdfutils.o bitmap.o bitmaputil.o bitscale.o \
- bitmapfunc.o pcfread.o pcfwrite.o snfread.o \
- fontink.o bitmapmod.o
-
-SpecialCObjectRule(bitmapfunc,$(ICONFIGFILES),$(GZIP_DEFS))
-
-LinkSourceFile(bdfread.c,..)
-LinkSourceFile(bdfutils.c,..)
-LinkSourceFile(bitmap.c,..)
-LinkSourceFile(bitmaputil.c,..)
-LinkSourceFile(bitscale.c,..)
-LinkSourceFile(bitmapfunc.c,..)
-LinkSourceFile(pcfread.c,..)
-LinkSourceFile(pcfwrite.c,..)
-LinkSourceFile(snfread.c,..)
-LinkSourceFile(fontink.c,..)
-
-ModuleObjectRule()
-LibraryModuleTarget(bitmap,$(OBJS))
-InstallLibraryModule(bitmap,$(MODULEDIR),fonts)
-
-DependTarget()
-
-InstallDriverSDKLibraryModule(bitmap,$(DRIVERSDKMODULEDIR),fonts)
diff --git a/nx-X11/lib/font/bitmap/module/bitmapmod.c b/nx-X11/lib/font/bitmap/module/bitmapmod.c
deleted file mode 100644
index 0ae9ff7ad..000000000
--- a/nx-X11/lib/font/bitmap/module/bitmapmod.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 1998 The XFree86 Project, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of the XFree86 Project shall
- * not be used in advertising or otherwise to promote the sale, use or other
- * dealings in this Software without prior written authorization from the
- * XFree86 Project.
- */
-/* $XFree86: xc/lib/font/bitmap/module/bitmapmod.c,v 1.7 1999/01/26 05:53:47 dawes Exp $ */
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <X11/Xdefs.h>
-
-#include <X11/fonts/fontmod.h>
-#include "xf86Module.h"
-
-static MODULESETUPPROTO(bitmapSetup);
-
- /*
- * This is the module data function that is accessed when loading
- * libbitmap as a module.
- */
-
-static XF86ModuleVersionInfo VersRec =
-{
- "bitmap",
- MODULEVENDORSTRING,
- MODINFOSTRING1,
- MODINFOSTRING2,
- XORG_VERSION_CURRENT,
- 1, 0, 0,
- ABI_CLASS_FONT, /* Font module */
- ABI_FONT_VERSION,
- MOD_CLASS_FONT,
- {0,0,0,0} /* signature, to be patched into the file by a tool */
-};
-
-XF86ModuleData bitmapModuleData = { &VersRec, bitmapSetup, NULL };
-
-extern void BitmapRegisterFontFileFunctions(void);
-
-FontModule bitmapModule = {
- BitmapRegisterFontFileFunctions,
- "Bitmap",
- NULL
-};
-
-static pointer
-bitmapSetup(pointer mod, pointer opts, int *errmaj, int *errmin)
-{
- bitmapModule.module = mod;
- LoadFont(&bitmapModule);
-
- /* Need a non-NULL return */
- return (pointer)1;
-}
diff --git a/nx-X11/lib/font/bitmap/pcf.h b/nx-X11/lib/font/bitmap/pcf.h
deleted file mode 100644
index 33b0ceff1..000000000
--- a/nx-X11/lib/font/bitmap/pcf.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* $Xorg: pcf.h,v 1.4 2001/02/09 02:04:02 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/bitmap/pcf.h,v 1.4 2001/12/14 19:56:47 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifndef _PCF_H_
-#define _PCF_H_
-
-/*
- * Information used to read/write PCF fonts
- */
-
-typedef struct _PCFTable {
- CARD32 type;
- CARD32 format;
- CARD32 size;
- CARD32 offset;
-} PCFTableRec, *PCFTablePtr;
-
-#define PCF_FILE_VERSION (('p'<<24)|('c'<<16)|('f'<<8)|1)
-#define PCF_FORMAT_MASK 0xffffff00
-
-#define PCF_DEFAULT_FORMAT 0x00000000
-#define PCF_INKBOUNDS 0x00000200
-#define PCF_ACCEL_W_INKBOUNDS 0x00000100
-#define PCF_COMPRESSED_METRICS 0x00000100
-
-#define PCF_FORMAT_MATCH(a,b) (((a)&PCF_FORMAT_MASK) == ((b)&PCF_FORMAT_MASK))
-
-#define PCF_GLYPH_PAD_MASK (3<<0)
-#define PCF_BYTE_MASK (1<<2)
-#define PCF_BIT_MASK (1<<3)
-#define PCF_SCAN_UNIT_MASK (3<<4)
-
-#define PCF_BYTE_ORDER(f) (((f) & PCF_BYTE_MASK)?MSBFirst:LSBFirst)
-#define PCF_BIT_ORDER(f) (((f) & PCF_BIT_MASK)?MSBFirst:LSBFirst)
-#define PCF_GLYPH_PAD_INDEX(f) ((f) & PCF_GLYPH_PAD_MASK)
-#define PCF_GLYPH_PAD(f) (1<<PCF_GLYPH_PAD_INDEX(f))
-#define PCF_SCAN_UNIT_INDEX(f) (((f) & PCF_SCAN_UNIT_MASK) >> 4)
-#define PCF_SCAN_UNIT(f) (1<<PCF_SCAN_UNIT_INDEX(f))
-#define PCF_FORMAT_BITS(f) ((f) & (PCF_GLYPH_PAD_MASK|PCF_BYTE_MASK|PCF_BIT_MASK|PCF_SCAN_UNIT_MASK))
-
-#define PCF_SIZE_TO_INDEX(s) ((s) == 4 ? 2 : (s) == 2 ? 1 : 0)
-#define PCF_INDEX_TO_SIZE(b) (1<<b)
-
-#define PCF_FORMAT(bit,byte,glyph,scan) (\
- (PCF_SIZE_TO_INDEX(scan) << 4) | \
- (((bit) == MSBFirst ? 1 : 0) << 3) | \
- (((byte) == MSBFirst ? 1 : 0) << 2) | \
- (PCF_SIZE_TO_INDEX(glyph) << 0))
-
-#define PCF_PROPERTIES (1<<0)
-#define PCF_ACCELERATORS (1<<1)
-#define PCF_METRICS (1<<2)
-#define PCF_BITMAPS (1<<3)
-#define PCF_INK_METRICS (1<<4)
-#define PCF_BDF_ENCODINGS (1<<5)
-#define PCF_SWIDTHS (1<<6)
-#define PCF_GLYPH_NAMES (1<<7)
-#define PCF_BDF_ACCELERATORS (1<<8)
-
-extern int pcfReadFont ( FontPtr pFont, FontFilePtr file,
- int bit, int byte, int glyph, int scan );
-extern int pcfReadFontInfo ( FontInfoPtr pFontInfo, FontFilePtr file );
-extern int pmfReadFont ( FontPtr pFont, FontFilePtr file,
- int bit, int byte, int glyph, int scan );
-extern int pcfWriteFont ( FontPtr pFont, FontFilePtr file );
-extern void pcfError ( const char *, ... );
-
-#endif /* _PCF_H_ */
diff --git a/nx-X11/lib/font/bitmap/pcfread.c b/nx-X11/lib/font/bitmap/pcfread.c
deleted file mode 100644
index 75916dae8..000000000
--- a/nx-X11/lib/font/bitmap/pcfread.c
+++ /dev/null
@@ -1,997 +0,0 @@
-/* $Xorg: pcfread.c,v 1.5 2001/02/09 02:04:02 xorgcvs Exp $ */
-/*
-
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/bitmap/pcfread.c,v 1.21 2003/11/17 22:20:22 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/bitmap.h>
-#include <X11/fonts/pcf.h>
-
-#ifndef MAX
-#define MAX(a,b) (((a)>(b)) ? a : b)
-#endif
-
-#include <stdarg.h>
-
-void
-pcfError(const char* message, ...)
-{
- va_list args;
-
- va_start(args, message);
-
- fprintf(stderr, "PCF Error: ");
- vfprintf(stderr, message, args);
- va_end(args);
-}
-
-/* Read PCF font files */
-
-static void pcfUnloadFont ( FontPtr pFont );
-static int position;
-
-
-#define IS_EOF(file) ((file)->eof == BUFFILEEOF)
-
-#define FONT_FILE_GETC_ERR(f) (tmp = FontFileGetc(f), BAIL_ON_EOF)
-
-static int
-pcfGetLSB32(FontFilePtr file)
-{
- int c;
-
- c = FontFileGetc(file);
- c |= FontFileGetc(file) << 8;
- c |= FontFileGetc(file) << 16;
- c |= FontFileGetc(file) << 24;
- position += 4;
- return c;
-}
-
-static int
-pcfGetINT32(FontFilePtr file, CARD32 format)
-{
- int c;
-
- if (PCF_BYTE_ORDER(format) == MSBFirst) {
- c = FontFileGetc(file) << 24;
- c |= FontFileGetc(file) << 16;
- c |= FontFileGetc(file) << 8;
- c |= FontFileGetc(file);
- } else {
- c = FontFileGetc(file);
- c |= FontFileGetc(file) << 8;
- c |= FontFileGetc(file) << 16;
- c |= FontFileGetc(file) << 24;
- }
- position += 4;
- return c;
-}
-
-static int
-pcfGetINT16(FontFilePtr file, CARD32 format)
-{
- int c;
-
- if (PCF_BYTE_ORDER(format) == MSBFirst) {
- c = FontFileGetc(file) << 8;
- c |= FontFileGetc(file);
- } else {
- c = FontFileGetc(file);
- c |= FontFileGetc(file) << 8;
- }
- position += 2;
- return c;
-}
-
-#define pcfGetINT8(file, format) (position++, FontFileGetc(file))
-
-static PCFTablePtr
-pcfReadTOC(FontFilePtr file, int *countp)
-{
- CARD32 version;
- PCFTablePtr tables;
- int count;
- int i;
-
- position = 0;
- version = pcfGetLSB32(file);
- if (version != PCF_FILE_VERSION)
- return (PCFTablePtr) NULL;
- count = pcfGetLSB32(file);
- if (IS_EOF(file)) return (PCFTablePtr) NULL;
- tables = (PCFTablePtr) xalloc(count * sizeof(PCFTableRec));
- if (!tables) {
- pcfError("pcfReadTOC(): Couldn't allocate tables (%d*%d)\n", count, sizeof(PCFTableRec));
- return (PCFTablePtr) NULL;
- }
- for (i = 0; i < count; i++) {
- tables[i].type = pcfGetLSB32(file);
- tables[i].format = pcfGetLSB32(file);
- tables[i].size = pcfGetLSB32(file);
- tables[i].offset = pcfGetLSB32(file);
- if (IS_EOF(file)) goto Bail;
- }
-
- *countp = count;
- return tables;
-
- Bail:
- xfree(tables);
- return (PCFTablePtr) NULL;
-}
-
-/*
- * PCF supports two formats for metrics, both the regular
- * jumbo size, and 'lite' metrics, which are useful
- * for most fonts which have even vaguely reasonable
- * metrics
- */
-
-static Bool
-pcfGetMetric(FontFilePtr file, CARD32 format, xCharInfo *metric)
-{
- metric->leftSideBearing = pcfGetINT16(file, format);
- metric->rightSideBearing = pcfGetINT16(file, format);
- metric->characterWidth = pcfGetINT16(file, format);
- metric->ascent = pcfGetINT16(file, format);
- metric->descent = pcfGetINT16(file, format);
- metric->attributes = pcfGetINT16(file, format);
- if (IS_EOF(file)) return FALSE;
-
- return TRUE;
-}
-
-static Bool
-pcfGetCompressedMetric(FontFilePtr file, CARD32 format, xCharInfo *metric)
-{
- metric->leftSideBearing = pcfGetINT8(file, format) - 0x80;
- metric->rightSideBearing = pcfGetINT8(file, format) - 0x80;
- metric->characterWidth = pcfGetINT8(file, format) - 0x80;
- metric->ascent = pcfGetINT8(file, format) - 0x80;
- metric->descent = pcfGetINT8(file, format) - 0x80;
- metric->attributes = 0;
- if (IS_EOF(file)) return FALSE;
-
- return TRUE;
-}
-
-/*
- * Position the file to the begining of the specified table
- * in the font file
- */
-static Bool
-pcfSeekToType(FontFilePtr file, PCFTablePtr tables, int ntables,
- CARD32 type, CARD32 *formatp, CARD32 *sizep)
-{
- int i;
-
- for (i = 0; i < ntables; i++)
- if (tables[i].type == type) {
- if (position > tables[i].offset)
- return FALSE;
- if (!FontFileSkip(file, tables[i].offset - position))
- return FALSE;
- position = tables[i].offset;
- *sizep = tables[i].size;
- *formatp = tables[i].format;
- return TRUE;
- }
- return FALSE;
-}
-
-static Bool
-pcfHasType (PCFTablePtr tables, int ntables, CARD32 type)
-{
- int i;
-
- for (i = 0; i < ntables; i++)
- if (tables[i].type == type)
- return TRUE;
- return FALSE;
-}
-
-/*
- * pcfGetProperties
- *
- * Reads the font properties from the font file, filling in the FontInfo rec
- * supplied. Used by by both ReadFont and ReadFontInfo routines.
- */
-
-static Bool
-pcfGetProperties(FontInfoPtr pFontInfo, FontFilePtr file,
- PCFTablePtr tables, int ntables)
-{
- FontPropPtr props = 0;
- int nprops;
- char *isStringProp = 0;
- CARD32 format;
- int i;
- CARD32 size;
- int string_size;
- char *strings;
-
- /* font properties */
-
- if (!pcfSeekToType(file, tables, ntables, PCF_PROPERTIES, &format, &size))
- goto Bail;
- format = pcfGetLSB32(file);
- if (!PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT))
- goto Bail;
- nprops = pcfGetINT32(file, format);
- if (IS_EOF(file)) goto Bail;
- props = (FontPropPtr) xalloc(nprops * sizeof(FontPropRec));
- if (!props) {
- pcfError("pcfGetProperties(): Couldn't allocate props (%d*%d)\n", nprops, sizeof(FontPropRec));
- goto Bail;
- }
- isStringProp = (char *) xalloc(nprops * sizeof(char));
- if (!isStringProp) {
- pcfError("pcfGetProperties(): Couldn't allocate isStringProp (%d*%d)\n", nprops, sizeof(char));
- goto Bail;
- }
- for (i = 0; i < nprops; i++) {
- props[i].name = pcfGetINT32(file, format);
- isStringProp[i] = pcfGetINT8(file, format);
- props[i].value = pcfGetINT32(file, format);
- if (IS_EOF(file)) goto Bail;
- }
- /* pad the property array */
- /*
- * clever here - nprops is the same as the number of odd-units read, as
- * only isStringProp are odd length
- */
- if (nprops & 3)
- {
- i = 4 - (nprops & 3);
- (void)FontFileSkip(file, i);
- position += i;
- }
- if (IS_EOF(file)) goto Bail;
- string_size = pcfGetINT32(file, format);
- if (IS_EOF(file)) goto Bail;
- strings = (char *) xalloc(string_size);
- if (!strings) {
- pcfError("pcfGetProperties(): Couldn't allocate strings (%d)\n", string_size);
- goto Bail;
- }
- FontFileRead(file, strings, string_size);
- if (IS_EOF(file)) goto Bail;
- position += string_size;
- for (i = 0; i < nprops; i++) {
- props[i].name = MakeAtom(strings + props[i].name,
- strlen(strings + props[i].name), TRUE);
- if (isStringProp[i]) {
- props[i].value = MakeAtom(strings + props[i].value,
- strlen(strings + props[i].value), TRUE);
- }
- }
- xfree(strings);
- pFontInfo->isStringProp = isStringProp;
- pFontInfo->props = props;
- pFontInfo->nprops = nprops;
- return TRUE;
-Bail:
- xfree(isStringProp);
- xfree(props);
- return FALSE;
-}
-
-
-/*
- * pcfReadAccel
- *
- * Fill in the accelerator information from the font file; used
- * to read both BDF_ACCELERATORS and old style ACCELERATORS
- */
-
-static Bool
-pcfGetAccel(FontInfoPtr pFontInfo, FontFilePtr file,
- PCFTablePtr tables, int ntables, CARD32 type)
-{
- CARD32 format;
- CARD32 size;
-
- if (!pcfSeekToType(file, tables, ntables, type, &format, &size) ||
- IS_EOF(file))
- goto Bail;
- format = pcfGetLSB32(file);
- if (!PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT) &&
- !PCF_FORMAT_MATCH(format, PCF_ACCEL_W_INKBOUNDS))
- {
- goto Bail;
- }
- pFontInfo->noOverlap = pcfGetINT8(file, format);
- pFontInfo->constantMetrics = pcfGetINT8(file, format);
- pFontInfo->terminalFont = pcfGetINT8(file, format);
- pFontInfo->constantWidth = pcfGetINT8(file, format);
- pFontInfo->inkInside = pcfGetINT8(file, format);
- pFontInfo->inkMetrics = pcfGetINT8(file, format);
- pFontInfo->drawDirection = pcfGetINT8(file, format);
- pFontInfo->anamorphic = FALSE;
- pFontInfo->cachable = TRUE;
- /* natural alignment */ pcfGetINT8(file, format);
- pFontInfo->fontAscent = pcfGetINT32(file, format);
- pFontInfo->fontDescent = pcfGetINT32(file, format);
- pFontInfo->maxOverlap = pcfGetINT32(file, format);
- if (IS_EOF(file)) goto Bail;
- if (!pcfGetMetric(file, format, &pFontInfo->minbounds))
- goto Bail;
- if (!pcfGetMetric(file, format, &pFontInfo->maxbounds))
- goto Bail;
- if (PCF_FORMAT_MATCH(format, PCF_ACCEL_W_INKBOUNDS)) {
- if (!pcfGetMetric(file, format, &pFontInfo->ink_minbounds))
- goto Bail;
- if (!pcfGetMetric(file, format, &pFontInfo->ink_maxbounds))
- goto Bail;
- } else {
- pFontInfo->ink_minbounds = pFontInfo->minbounds;
- pFontInfo->ink_maxbounds = pFontInfo->maxbounds;
- }
- return TRUE;
-Bail:
- return FALSE;
-}
-
-int
-pcfReadFont(FontPtr pFont, FontFilePtr file,
- int bit, int byte, int glyph, int scan)
-{
- CARD32 format;
- CARD32 size;
- BitmapFontPtr bitmapFont = 0;
- int i;
- PCFTablePtr tables = 0;
- int ntables;
- int nmetrics;
- int nbitmaps;
- int sizebitmaps;
- int nink_metrics;
- CharInfoPtr metrics = 0;
- xCharInfo *ink_metrics = 0;
- char *bitmaps = 0;
- CharInfoPtr **encoding = 0;
- int nencoding = 0;
- int encodingOffset;
- CARD32 bitmapSizes[GLYPHPADOPTIONS];
- CARD32 *offsets = 0;
- Bool hasBDFAccelerators;
-
- pFont->info.nprops = 0;
- pFont->info.props = 0;
- if (!(tables = pcfReadTOC(file, &ntables)))
- goto Bail;
-
- /* properties */
-
- if (!pcfGetProperties(&pFont->info, file, tables, ntables))
- goto Bail;
-
- /* Use the old accelerators if no BDF accelerators are in the file */
-
- hasBDFAccelerators = pcfHasType (tables, ntables, PCF_BDF_ACCELERATORS);
- if (!hasBDFAccelerators)
- if (!pcfGetAccel (&pFont->info, file, tables, ntables, PCF_ACCELERATORS))
- goto Bail;
-
- /* metrics */
-
- if (!pcfSeekToType(file, tables, ntables, PCF_METRICS, &format, &size)) {
- goto Bail;
- }
- format = pcfGetLSB32(file);
- if (!PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT) &&
- !PCF_FORMAT_MATCH(format, PCF_COMPRESSED_METRICS)) {
- goto Bail;
- }
- if (PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT))
- nmetrics = pcfGetINT32(file, format);
- else
- nmetrics = pcfGetINT16(file, format);
- if (IS_EOF(file)) goto Bail;
- metrics = (CharInfoPtr) xalloc(nmetrics * sizeof(CharInfoRec));
- if (!metrics) {
- pcfError("pcfReadFont(): Couldn't allocate metrics (%d*%d)\n", nmetrics, sizeof(CharInfoRec));
- goto Bail;
- }
- for (i = 0; i < nmetrics; i++)
- if (PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT)) {
- if (!pcfGetMetric(file, format, &(metrics + i)->metrics))
- goto Bail;
- } else {
- if (!pcfGetCompressedMetric(file, format, &(metrics + i)->metrics))
- goto Bail;
- }
-
- /* bitmaps */
-
- if (!pcfSeekToType(file, tables, ntables, PCF_BITMAPS, &format, &size))
- goto Bail;
- format = pcfGetLSB32(file);
- if (!PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT))
- goto Bail;
-
- nbitmaps = pcfGetINT32(file, format);
- if (nbitmaps != nmetrics || IS_EOF(file))
- goto Bail;
-
- offsets = (CARD32 *) xalloc(nbitmaps * sizeof(CARD32));
- if (!offsets) {
- pcfError("pcfReadFont(): Couldn't allocate offsets (%d*%d)\n", nbitmaps, sizeof(CARD32));
- goto Bail;
- }
- for (i = 0; i < nbitmaps; i++) {
- offsets[i] = pcfGetINT32(file, format);
- if (IS_EOF(file)) goto Bail;
- }
-
- for (i = 0; i < GLYPHPADOPTIONS; i++) {
- bitmapSizes[i] = pcfGetINT32(file, format);
- if (IS_EOF(file)) goto Bail;
- }
-
- sizebitmaps = bitmapSizes[PCF_GLYPH_PAD_INDEX(format)];
- /* guard against completely empty font */
- bitmaps = xalloc(sizebitmaps ? sizebitmaps : 1);
- if (!bitmaps) {
- pcfError("pcfReadFont(): Couldn't allocate bitmaps (%d)\n", sizebitmaps ? sizebitmaps : 1);
- goto Bail;
- }
- FontFileRead(file, bitmaps, sizebitmaps);
- if (IS_EOF(file)) goto Bail;
- position += sizebitmaps;
-
- if (PCF_BIT_ORDER(format) != bit)
- BitOrderInvert((unsigned char *)bitmaps, sizebitmaps);
- if ((PCF_BYTE_ORDER(format) == PCF_BIT_ORDER(format)) != (bit == byte)) {
- switch (bit == byte ? PCF_SCAN_UNIT(format) : scan) {
- case 1:
- break;
- case 2:
- TwoByteSwap((unsigned char *)bitmaps, sizebitmaps);
- break;
- case 4:
- FourByteSwap((unsigned char *)bitmaps, sizebitmaps);
- break;
- }
- }
- if (PCF_GLYPH_PAD(format) != glyph) {
- char *padbitmaps;
- int sizepadbitmaps;
- int old,
- new;
- xCharInfo *metric;
-
- sizepadbitmaps = bitmapSizes[PCF_SIZE_TO_INDEX(glyph)];
- padbitmaps = (char *) xalloc(sizepadbitmaps);
- if (!padbitmaps) {
- pcfError("pcfReadFont(): Couldn't allocate padbitmaps (%d)\n", sizepadbitmaps);
- goto Bail;
- }
- new = 0;
- for (i = 0; i < nbitmaps; i++) {
- old = offsets[i];
- metric = &metrics[i].metrics;
- offsets[i] = new;
- new += RepadBitmap(bitmaps + old, padbitmaps + new,
- PCF_GLYPH_PAD(format), glyph,
- metric->rightSideBearing - metric->leftSideBearing,
- metric->ascent + metric->descent);
- }
- xfree(bitmaps);
- bitmaps = padbitmaps;
- }
- for (i = 0; i < nbitmaps; i++)
- metrics[i].bits = bitmaps + offsets[i];
-
- xfree(offsets);
- offsets = NULL;
-
- /* ink metrics ? */
-
- ink_metrics = NULL;
- if (pcfSeekToType(file, tables, ntables, PCF_INK_METRICS, &format, &size)) {
- format = pcfGetLSB32(file);
- if (!PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT) &&
- !PCF_FORMAT_MATCH(format, PCF_COMPRESSED_METRICS)) {
- goto Bail;
- }
- if (PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT))
- nink_metrics = pcfGetINT32(file, format);
- else
- nink_metrics = pcfGetINT16(file, format);
- if (IS_EOF(file)) goto Bail;
- if (nink_metrics != nmetrics)
- goto Bail;
- ink_metrics = (xCharInfo *) xalloc(nink_metrics * sizeof(xCharInfo));
- if (!ink_metrics) {
- pcfError("pcfReadFont(): Couldn't allocate ink_metrics (%d*%d)\n", nink_metrics, sizeof(xCharInfo));
- goto Bail;
- }
- for (i = 0; i < nink_metrics; i++)
- if (PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT)) {
- if (!pcfGetMetric(file, format, ink_metrics + i))
- goto Bail;
- } else {
- if (!pcfGetCompressedMetric(file, format, ink_metrics + i))
- goto Bail;
- }
- }
-
- /* encoding */
-
- if (!pcfSeekToType(file, tables, ntables, PCF_BDF_ENCODINGS, &format, &size))
- goto Bail;
- format = pcfGetLSB32(file);
- if (!PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT))
- goto Bail;
-
- pFont->info.firstCol = pcfGetINT16(file, format);
- pFont->info.lastCol = pcfGetINT16(file, format);
- pFont->info.firstRow = pcfGetINT16(file, format);
- pFont->info.lastRow = pcfGetINT16(file, format);
- pFont->info.defaultCh = pcfGetINT16(file, format);
- if (IS_EOF(file)) goto Bail;
- if (pFont->info.firstCol > pFont->info.lastCol ||
- pFont->info.firstRow > pFont->info.lastRow ||
- pFont->info.lastCol-pFont->info.firstCol > 255) goto Bail;
-
- nencoding = (pFont->info.lastCol - pFont->info.firstCol + 1) *
- (pFont->info.lastRow - pFont->info.firstRow + 1);
-
- encoding = (CharInfoPtr **) xcalloc(NUM_SEGMENTS(nencoding),
- sizeof(CharInfoPtr*));
- if (!encoding) {
- pcfError("pcfReadFont(): Couldn't allocate encoding (%d*%d)\n", nencoding, sizeof(CharInfoPtr));
- goto Bail;
- }
-
- pFont->info.allExist = TRUE;
- for (i = 0; i < nencoding; i++) {
- encodingOffset = pcfGetINT16(file, format);
- if (IS_EOF(file)) goto Bail;
- if (encodingOffset == 0xFFFF) {
- pFont->info.allExist = FALSE;
- } else {
- if(!encoding[SEGMENT_MAJOR(i)]) {
- encoding[SEGMENT_MAJOR(i)]=
- (CharInfoPtr*)xcalloc(BITMAP_FONT_SEGMENT_SIZE,
- sizeof(CharInfoPtr));
- if(!encoding[SEGMENT_MAJOR(i)])
- goto Bail;
- }
- ACCESSENCODINGL(encoding, i) = metrics + encodingOffset;
- }
- }
-
- /* BDF style accelerators (i.e. bounds based on encoded glyphs) */
-
- if (hasBDFAccelerators)
- if (!pcfGetAccel (&pFont->info, file, tables, ntables, PCF_BDF_ACCELERATORS))
- goto Bail;
-
- bitmapFont = (BitmapFontPtr) xalloc(sizeof *bitmapFont);
- if (!bitmapFont) {
- pcfError("pcfReadFont(): Couldn't allocate bitmapFont (%d)\n", sizeof *bitmapFont);
- goto Bail;
- }
-
- bitmapFont->version_num = PCF_FILE_VERSION;
- bitmapFont->num_chars = nmetrics;
- bitmapFont->num_tables = ntables;
- bitmapFont->metrics = metrics;
- bitmapFont->ink_metrics = ink_metrics;
- bitmapFont->bitmaps = bitmaps;
- bitmapFont->encoding = encoding;
- bitmapFont->pDefault = (CharInfoPtr) 0;
- if (pFont->info.defaultCh != (unsigned short) NO_SUCH_CHAR) {
- unsigned int r,
- c,
- cols;
-
- r = pFont->info.defaultCh >> 8;
- c = pFont->info.defaultCh & 0xFF;
- if (pFont->info.firstRow <= r && r <= pFont->info.lastRow &&
- pFont->info.firstCol <= c && c <= pFont->info.lastCol) {
- cols = pFont->info.lastCol - pFont->info.firstCol + 1;
- r = r - pFont->info.firstRow;
- c = c - pFont->info.firstCol;
- bitmapFont->pDefault = ACCESSENCODING(encoding, r * cols + c);
- }
- }
- bitmapFont->bitmapExtra = (BitmapExtraPtr) 0;
- pFont->fontPrivate = (pointer) bitmapFont;
- pFont->get_glyphs = bitmapGetGlyphs;
- pFont->get_metrics = bitmapGetMetrics;
- pFont->unload_font = pcfUnloadFont;
- pFont->unload_glyphs = NULL;
- pFont->bit = bit;
- pFont->byte = byte;
- pFont->glyph = glyph;
- pFont->scan = scan;
- xfree(tables);
- return Successful;
-Bail:
- xfree(ink_metrics);
- if(encoding) {
- for(i=0; i<NUM_SEGMENTS(nencoding); i++)
- xfree(encoding[i]);
- }
- xfree(encoding);
- xfree(bitmaps);
- xfree(metrics);
- xfree(pFont->info.props);
- pFont->info.nprops = 0;
- pFont->info.props = 0;
- xfree (pFont->info.isStringProp);
- xfree(bitmapFont);
- xfree(tables);
- xfree(offsets);
- return AllocError;
-}
-
-int
-pcfReadFontInfo(FontInfoPtr pFontInfo, FontFilePtr file)
-{
- PCFTablePtr tables;
- int ntables;
- CARD32 format;
- CARD32 size;
- int nencoding;
- Bool hasBDFAccelerators;
-
- pFontInfo->isStringProp = NULL;
- pFontInfo->props = NULL;
- pFontInfo->nprops = 0;
-
- if (!(tables = pcfReadTOC(file, &ntables)))
- goto Bail;
-
- /* properties */
-
- if (!pcfGetProperties(pFontInfo, file, tables, ntables))
- goto Bail;
-
- /* Use the old accelerators if no BDF accelerators are in the file */
-
- hasBDFAccelerators = pcfHasType (tables, ntables, PCF_BDF_ACCELERATORS);
- if (!hasBDFAccelerators)
- if (!pcfGetAccel (pFontInfo, file, tables, ntables, PCF_ACCELERATORS))
- goto Bail;
-
- /* encoding */
-
- if (!pcfSeekToType(file, tables, ntables, PCF_BDF_ENCODINGS, &format, &size))
- goto Bail;
- format = pcfGetLSB32(file);
- if (!PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT))
- goto Bail;
-
- pFontInfo->firstCol = pcfGetINT16(file, format);
- pFontInfo->lastCol = pcfGetINT16(file, format);
- pFontInfo->firstRow = pcfGetINT16(file, format);
- pFontInfo->lastRow = pcfGetINT16(file, format);
- pFontInfo->defaultCh = pcfGetINT16(file, format);
- if (IS_EOF(file)) goto Bail;
- if (pFontInfo->firstCol > pFontInfo->lastCol ||
- pFontInfo->firstRow > pFontInfo->lastRow ||
- pFontInfo->lastCol-pFontInfo->firstCol > 255) goto Bail;
-
- nencoding = (pFontInfo->lastCol - pFontInfo->firstCol + 1) *
- (pFontInfo->lastRow - pFontInfo->firstRow + 1);
-
- pFontInfo->allExist = TRUE;
- while (nencoding--) {
- if (pcfGetINT16(file, format) == 0xFFFF)
- pFontInfo->allExist = FALSE;
- if (IS_EOF(file)) goto Bail;
- }
- if (IS_EOF(file)) goto Bail;
-
- /* BDF style accelerators (i.e. bounds based on encoded glyphs) */
-
- if (hasBDFAccelerators)
- if (!pcfGetAccel (pFontInfo, file, tables, ntables, PCF_BDF_ACCELERATORS))
- goto Bail;
-
- xfree(tables);
- return Successful;
-Bail:
- pFontInfo->nprops = 0;
- xfree (pFontInfo->props);
- xfree (pFontInfo->isStringProp);
- xfree(tables);
- return AllocError;
-}
-
-static void
-pcfUnloadFont(FontPtr pFont)
-{
- BitmapFontPtr bitmapFont;
- int i,nencoding;
-
- bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
- xfree(bitmapFont->ink_metrics);
- if(bitmapFont->encoding) {
- nencoding = (pFont->info.lastCol - pFont->info.firstCol + 1) *
- (pFont->info.lastRow - pFont->info.firstRow + 1);
- for(i=0; i<NUM_SEGMENTS(nencoding); i++)
- xfree(bitmapFont->encoding[i]);
- }
- xfree(bitmapFont->encoding);
- xfree(bitmapFont->bitmaps);
- xfree(bitmapFont->metrics);
- xfree(pFont->info.isStringProp);
- xfree(pFont->info.props);
- xfree(bitmapFont);
- DestroyFontRec(pFont);
-}
-
-int
-pmfReadFont(FontPtr pFont, FontFilePtr file,
- int bit, int byte, int glyph, int scan)
-{
- CARD32 format;
- CARD32 size;
- BitmapFontPtr bitmapFont = 0;
- int i;
- PCFTablePtr tables = 0;
- int ntables;
- int nmetrics;
- int sizebitmaps;
- int nink_metrics;
- CharInfoPtr metrics = 0;
- xCharInfo *ink_metrics = 0;
- char *bitmaps = 0;
- CharInfoPtr **encoding = 0;
- int nencoding = 0;
- int encodingOffset;
- Bool hasBDFAccelerators;
- CharInfoPtr pci;
-
- pFont->info.nprops = 0;
- pFont->info.props = 0;
-
- if (!(tables = pcfReadTOC(file, &ntables)))
- goto Bail;
-
- /* properties */
-
- if (!pcfGetProperties(&pFont->info, file, tables, ntables))
- goto Bail;
-
- /* Use the old accelerators if no BDF accelerators are in the file */
-
- hasBDFAccelerators = pcfHasType (tables, ntables, PCF_BDF_ACCELERATORS);
- if (!hasBDFAccelerators)
- if (!pcfGetAccel (&pFont->info, file, tables, ntables, PCF_ACCELERATORS))
- goto Bail;
-
- /* metrics */
-
- if (!pcfSeekToType(file, tables, ntables, PCF_METRICS, &format, &size)) {
- goto Bail;
- }
- format = pcfGetLSB32(file);
- if (!PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT) &&
- !PCF_FORMAT_MATCH(format, PCF_COMPRESSED_METRICS)) {
- goto Bail;
- }
- if (PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT))
- nmetrics = pcfGetINT32(file, format);
- else
- nmetrics = pcfGetINT16(file, format);
- if (IS_EOF(file)) goto Bail;
- metrics = (CharInfoPtr) xalloc(nmetrics * sizeof(CharInfoRec));
- if (!metrics) {
- pcfError("pmfReadFont(): Couldn't allocate metrics (%d*%d)\n", nmetrics, sizeof(CharInfoRec));
- goto Bail;
- }
- for (i = 0; i < nmetrics; i++)
- if (PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT)) {
- if (!pcfGetMetric(file, format, &(metrics + i)->metrics))
- goto Bail;
- } else {
- if (!pcfGetCompressedMetric(file, format, &(metrics + i)->metrics))
- goto Bail;
- }
-
- /* Set the bitmaps to all point to the same zero filled array
- * that is the size of the largest bitmap.
- */
-
- pci = metrics;
- sizebitmaps = 0;
- for (i = 0; i < nmetrics; i++)
- {
- sizebitmaps = MAX(sizebitmaps,BYTES_FOR_GLYPH(pci, glyph));
- pci++;
- }
-
-#ifdef FONTMODULE
- sizebitmaps = 1024; /* Default - we xalloc the size anyway */
-#else
- sizebitmaps = BUFSIZ;
-#endif
- /* guard against completely empty font */
- bitmaps = (char *) xalloc(sizebitmaps);
- if (!bitmaps) {
- pcfError("pmfReadFont(): Couldn't allocate bitmaps (%d)\n", sizebitmaps);
- goto Bail;
- }
-
- memset(bitmaps,0,sizebitmaps);
- for (i = 0; i < nmetrics; i++)
- metrics[i].bits = bitmaps;
-
- /* ink metrics ? */
-
- ink_metrics = NULL;
- if (pcfSeekToType(file, tables, ntables, PCF_INK_METRICS, &format, &size)) {
- format = pcfGetLSB32(file);
- if (!PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT) &&
- !PCF_FORMAT_MATCH(format, PCF_COMPRESSED_METRICS)) {
- goto Bail;
- }
- if (PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT))
- nink_metrics = pcfGetINT32(file, format);
- else
- nink_metrics = pcfGetINT16(file, format);
- if (nink_metrics != nmetrics)
- goto Bail;
- if (IS_EOF(file)) goto Bail;
- ink_metrics = (xCharInfo *) xalloc(nink_metrics * sizeof(xCharInfo));
- if (!ink_metrics) {
- pcfError("pmfReadFont(): Couldn't allocate ink_metrics (%d*%d)\n", nink_metrics, sizeof(xCharInfo));
- goto Bail;
- }
- for (i = 0; i < nink_metrics; i++)
- if (PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT)) {
- if (!pcfGetMetric(file, format, ink_metrics + i))
- goto Bail;
- } else {
- if (!pcfGetCompressedMetric(file, format, ink_metrics + i))
- goto Bail;
- }
- }
-
- /* encoding */
-
- if (!pcfSeekToType(file, tables, ntables, PCF_BDF_ENCODINGS, &format, &size))
- goto Bail;
- format = pcfGetLSB32(file);
- if (!PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT))
- goto Bail;
-
- pFont->info.firstCol = pcfGetINT16(file, format);
- pFont->info.lastCol = pcfGetINT16(file, format);
- pFont->info.firstRow = pcfGetINT16(file, format);
- pFont->info.lastRow = pcfGetINT16(file, format);
- pFont->info.defaultCh = pcfGetINT16(file, format);
- if (IS_EOF(file)) goto Bail;
-
- nencoding = (pFont->info.lastCol - pFont->info.firstCol + 1) *
- (pFont->info.lastRow - pFont->info.firstRow + 1);
-
- encoding = (CharInfoPtr **) xcalloc(NUM_SEGMENTS(nencoding),
- sizeof(CharInfoPtr*));
- if (!encoding) {
- pcfError("pmfReadFont(): Couldn't allocate encoding (%d*%d)\n", nencoding, sizeof(CharInfoPtr));
- goto Bail;
- }
- pFont->info.allExist = TRUE;
- for (i = 0; i < nencoding; i++) {
- encodingOffset = pcfGetINT16(file, format);
- if (IS_EOF(file)) goto Bail;
- if (encodingOffset == 0xFFFF) {
- pFont->info.allExist = FALSE;
- } else {
- if(!encoding[SEGMENT_MAJOR(i)]) {
- encoding[SEGMENT_MAJOR(i)]=
- (CharInfoPtr*)xcalloc(BITMAP_FONT_SEGMENT_SIZE,
- sizeof(CharInfoPtr));
- if(!encoding[SEGMENT_MAJOR(i)])
- goto Bail;
- }
- ACCESSENCODINGL(encoding, i) = metrics + encodingOffset;
- }
- }
- if (IS_EOF(file)) goto Bail;
-
- /* BDF style accelerators (i.e. bounds based on encoded glyphs) */
-
- if (hasBDFAccelerators)
- if (!pcfGetAccel (&pFont->info, file, tables, ntables, PCF_BDF_ACCELERATORS))
- goto Bail;
-
- bitmapFont = (BitmapFontPtr) xalloc(sizeof *bitmapFont);
- if (!bitmapFont) {
- pcfError("pmfReadFont(): Couldn't allocate bitmapFont (%d)\n", sizeof *bitmapFont);
- goto Bail;
- }
-
- bitmapFont->version_num = PCF_FILE_VERSION;
- bitmapFont->num_chars = nmetrics;
- bitmapFont->num_tables = ntables;
- bitmapFont->metrics = metrics;
- bitmapFont->ink_metrics = ink_metrics;
- bitmapFont->bitmaps = bitmaps;
- bitmapFont->encoding = encoding;
- bitmapFont->pDefault = (CharInfoPtr) 0;
- if (pFont->info.defaultCh != (unsigned short) NO_SUCH_CHAR) {
- unsigned int r,
- c,
- cols;
-
- r = pFont->info.defaultCh >> 8;
- c = pFont->info.defaultCh & 0xFF;
- if (pFont->info.firstRow <= r && r <= pFont->info.lastRow &&
- pFont->info.firstCol <= c && c <= pFont->info.lastCol) {
- cols = pFont->info.lastCol - pFont->info.firstCol + 1;
- r = r - pFont->info.firstRow;
- c = c - pFont->info.firstCol;
- bitmapFont->pDefault = ACCESSENCODING(encoding, r * cols + c);
- }
- }
- bitmapFont->bitmapExtra = (BitmapExtraPtr) 0;
- pFont->fontPrivate = (pointer) bitmapFont;
- pFont->get_glyphs = bitmapGetGlyphs;
- pFont->get_metrics = bitmapGetMetrics;
- pFont->unload_font = pcfUnloadFont;
- pFont->unload_glyphs = NULL;
- pFont->bit = bit;
- pFont->byte = byte;
- pFont->glyph = glyph;
- pFont->scan = scan;
- xfree(tables);
- return Successful;
-Bail:
- xfree(ink_metrics);
- if(encoding) {
- for(i=0; i<NUM_SEGMENTS(nencoding); i++)
- xfree(encoding[i]);
- }
- xfree(encoding);
- xfree(bitmaps);
- xfree(metrics);
- xfree(pFont->info.props);
- pFont->info.nprops = 0;
- pFont->info.props = 0;
- xfree (pFont->info.isStringProp);
- xfree(bitmapFont);
- xfree(tables);
- return AllocError;
-}
diff --git a/nx-X11/lib/font/bitmap/pcfwrite.c b/nx-X11/lib/font/bitmap/pcfwrite.c
deleted file mode 100644
index 8d5e9425f..000000000
--- a/nx-X11/lib/font/bitmap/pcfwrite.c
+++ /dev/null
@@ -1,468 +0,0 @@
-/* $Xorg: pcfwrite.c,v 1.5 2001/02/09 02:04:02 xorgcvs Exp $ */
-/*
-
-Copyright 1990, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/bitmap/pcfwrite.c,v 1.11 2003/11/17 22:20:22 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/bitmap.h>
-#include <X11/fonts/pcf.h>
-
-/* Write PCF font files */
-
-static CARD32 current_position;
-
-static int
-pcfWrite(FontFilePtr file, char *b, int c)
-{
- current_position += c;
- return FontFileWrite(file, b, c);
-}
-
-static int
-pcfPutLSB32(FontFilePtr file, int c)
-{
- current_position += 4;
- (void) FontFilePutc(c, file);
- (void) FontFilePutc(c >> 8, file);
- (void) FontFilePutc(c >> 16, file);
- return FontFilePutc(c >> 24, file);
-}
-
-static int
-pcfPutINT32(FontFilePtr file, CARD32 format, int c)
-{
- current_position += 4;
- if (PCF_BYTE_ORDER(format) == MSBFirst) {
- (void) FontFilePutc(c >> 24, file);
- (void) FontFilePutc(c >> 16, file);
- (void) FontFilePutc(c >> 8, file);
- return FontFilePutc(c, file);
- } else {
- (void) FontFilePutc(c, file);
- (void) FontFilePutc(c >> 8, file);
- (void) FontFilePutc(c >> 16, file);
- return FontFilePutc(c >> 24, file);
- }
-}
-
-static int
-pcfPutINT16(FontFilePtr file, CARD32 format, int c)
-{
- current_position += 2;
- if (PCF_BYTE_ORDER(format) == MSBFirst) {
- (void) FontFilePutc(c >> 8, file);
- return FontFilePutc(c, file);
- } else {
- (void) FontFilePutc(c, file);
- return FontFilePutc(c >> 8, file);
- }
-}
-
-/*ARGSUSED*/
-static int
-pcfPutINT8(FontFilePtr file, CARD32 format, int c)
-{
- current_position += 1;
- return FontFilePutc(c, file);
-}
-
-static void
-pcfWriteTOC(FontFilePtr file, PCFTablePtr table, int count)
-{
- CARD32 version;
- int i;
-
- version = PCF_FILE_VERSION;
- pcfPutLSB32(file, version);
- pcfPutLSB32(file, count);
- for (i = 0; i < count; i++) {
- pcfPutLSB32(file, table->type);
- pcfPutLSB32(file, table->format);
- pcfPutLSB32(file, table->size);
- pcfPutLSB32(file, table->offset);
- table++;
- }
-}
-
-static void
-pcfPutCompressedMetric(FontFilePtr file, CARD32 format, xCharInfo *metric)
-{
- pcfPutINT8(file, format, metric->leftSideBearing + 0x80);
- pcfPutINT8(file, format, metric->rightSideBearing + 0x80);
- pcfPutINT8(file, format, metric->characterWidth + 0x80);
- pcfPutINT8(file, format, metric->ascent + 0x80);
- pcfPutINT8(file, format, metric->descent + 0x80);
-}
-
-static void
-pcfPutMetric(FontFilePtr file, CARD32 format, xCharInfo *metric)
-{
- pcfPutINT16(file, format, metric->leftSideBearing);
- pcfPutINT16(file, format, metric->rightSideBearing);
- pcfPutINT16(file, format, metric->characterWidth);
- pcfPutINT16(file, format, metric->ascent);
- pcfPutINT16(file, format, metric->descent);
- pcfPutINT16(file, format, metric->attributes);
-}
-
-static void
-pcfPutBitmap(FontFilePtr file, CARD32 format, CharInfoPtr pCI)
-{
- int count;
- unsigned char *bits;
-
- count = BYTES_FOR_GLYPH(pCI, PCF_GLYPH_PAD(format));
- bits = (unsigned char *) pCI->bits;
- current_position += count;
- while (count--)
- FontFilePutc(*bits++, file);
-}
-
-static void
-pcfPutAccel(FontFilePtr file, CARD32 format, FontInfoPtr pFontInfo)
-{
- pcfPutINT8(file, format, pFontInfo->noOverlap);
- pcfPutINT8(file, format, pFontInfo->constantMetrics);
- pcfPutINT8(file, format, pFontInfo->terminalFont);
- pcfPutINT8(file, format, pFontInfo->constantWidth);
- pcfPutINT8(file, format, pFontInfo->inkInside);
- pcfPutINT8(file, format, pFontInfo->inkMetrics);
- pcfPutINT8(file, format, pFontInfo->drawDirection);
- pcfPutINT8(file, format, 0);
- pcfPutINT32(file, format, pFontInfo->fontAscent);
- pcfPutINT32(file, format, pFontInfo->fontDescent);
- pcfPutINT32(file, format, pFontInfo->maxOverlap);
- pcfPutMetric(file, format, &pFontInfo->minbounds);
- pcfPutMetric(file, format, &pFontInfo->maxbounds);
- if (PCF_FORMAT_MATCH(format, PCF_ACCEL_W_INKBOUNDS)) {
- pcfPutMetric(file, format, &pFontInfo->ink_minbounds);
- pcfPutMetric(file, format, &pFontInfo->ink_maxbounds);
- }
-}
-
-#define S32 4
-#define S16 2
-#define S8 1
-
-#define Pad(s) (RoundUp(s) - (s))
-#define RoundUp(s) (((s) + 3) & ~3)
-
-#define Compressable(i) (-128 <= (i) && (i) <= 127)
-
-#define CanCompressMetric(m) (Compressable((m)->leftSideBearing) && \
- Compressable((m)->rightSideBearing) && \
- Compressable((m)->characterWidth) && \
- Compressable((m)->ascent) && \
- Compressable((m)->descent) && \
- (m)->attributes == 0)
-
-#define CanCompressMetrics(min,max) (CanCompressMetric(min) && CanCompressMetric(max))
-
-static char *
-pcfNameForAtom(Atom a)
-{
- return NameForAtom(a);
-}
-
-int
-pcfWriteFont(FontPtr pFont, FontFilePtr file)
-{
- PCFTableRec tables[32],
- *table;
- CARD32 mask,
- bit;
- int ntables;
- int size;
- CARD32 format;
- int i;
- int cur_table;
- int prop_string_size;
- int glyph_string_size;
- xCharInfo *minbounds,
- *maxbounds;
- xCharInfo *ink_minbounds,
- *ink_maxbounds;
- BitmapFontPtr bitmapFont;
- int nencodings = 0;
- int header_size;
- FontPropPtr offsetProps;
- int prop_pad = 0;
- char *atom_name;
- int glyph;
- CARD32 offset;
-
- bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
- if (bitmapFont->bitmapExtra) {
- minbounds = &bitmapFont->bitmapExtra->info.minbounds;
- maxbounds = &bitmapFont->bitmapExtra->info.maxbounds;
- ink_minbounds = &bitmapFont->bitmapExtra->info.ink_minbounds;
- ink_maxbounds = &bitmapFont->bitmapExtra->info.ink_maxbounds;
- } else {
- minbounds = &pFont->info.minbounds;
- maxbounds = &pFont->info.maxbounds;
- ink_minbounds = &pFont->info.ink_minbounds;
- ink_maxbounds = &pFont->info.ink_maxbounds;
- }
- offsetProps = (FontPropPtr) xalloc(pFont->info.nprops * sizeof(FontPropRec));
- if (!offsetProps) {
- pcfError("pcfWriteFont(): Couldn't allocate offsetProps (%d*%d)", pFont->info.nprops, sizeof(FontPropRec));
- return AllocError;
- }
- prop_string_size = 0;
- for (i = 0; i < pFont->info.nprops; i++) {
- offsetProps[i].name = prop_string_size;
- prop_string_size += strlen(pcfNameForAtom(pFont->info.props[i].name)) + 1;
- if (pFont->info.isStringProp[i]) {
- offsetProps[i].value = prop_string_size;
- prop_string_size += strlen(pcfNameForAtom(pFont->info.props[i].value)) + 1;
- } else
- offsetProps[i].value = pFont->info.props[i].value;
- }
- format = PCF_FORMAT(pFont->bit, pFont->byte, pFont->glyph, pFont->scan);
- mask = 0xFFFFFFF;
- ntables = 0;
- table = tables;
- while (mask) {
- bit = lowbit(mask);
- mask &= ~bit;
- table->type = bit;
- switch (bit) {
- case PCF_PROPERTIES:
- table->format = PCF_DEFAULT_FORMAT | format;
- size = S32 + S32 + (S32 + S8 + S32) * pFont->info.nprops;
- prop_pad = Pad(size);
- table->size = RoundUp(size) + S32 +
- RoundUp(prop_string_size);
- table++;
- break;
- case PCF_ACCELERATORS:
- if (bitmapFont->bitmapExtra->info.inkMetrics)
- table->format = PCF_ACCEL_W_INKBOUNDS | format;
- else
- table->format = PCF_DEFAULT_FORMAT | format;
- table->size = 100;
- table++;
- break;
- case PCF_METRICS:
- if (CanCompressMetrics(minbounds, maxbounds)) {
- table->format = PCF_COMPRESSED_METRICS | format;
- size = S32 + S16 + bitmapFont->num_chars * (5 * S8);
- table->size = RoundUp(size);
- } else {
- table->format = PCF_DEFAULT_FORMAT | format;
- table->size = S32 + S32 + bitmapFont->num_chars * (6 * S16);
- }
- table++;
- break;
- case PCF_BITMAPS:
- table->format = PCF_DEFAULT_FORMAT | format;
- size = S32 + S32 + bitmapFont->num_chars * S32 +
- GLYPHPADOPTIONS * S32 +
- bitmapFont->bitmapExtra->bitmapsSizes[PCF_GLYPH_PAD_INDEX(format)];
- table->size = RoundUp(size);
- table++;
- break;
- case PCF_INK_METRICS:
- if (bitmapFont->ink_metrics) {
- if (CanCompressMetrics(ink_minbounds, ink_maxbounds)) {
- table->format = PCF_COMPRESSED_METRICS | format;
- size = S32 + S16 + bitmapFont->num_chars * (5 * S8);
- table->size = RoundUp(size);
- } else {
- table->format = PCF_DEFAULT_FORMAT | format;
- table->size = S32 + S32 + bitmapFont->num_chars * (6 * S16);
- }
- table++;
- }
- break;
- case PCF_BDF_ENCODINGS:
- table->format = PCF_DEFAULT_FORMAT | format;
- nencodings = (pFont->info.lastRow - pFont->info.firstRow + 1) *
- (pFont->info.lastCol - pFont->info.firstCol + 1);
- size = S32 + 5 * S16 + nencodings * S16;
- table->size = RoundUp(size);
- table++;
- break;
- case PCF_SWIDTHS:
- table->format = PCF_DEFAULT_FORMAT | format;
- table->size = S32 + S32 + bitmapFont->num_chars * S32;
- table++;
- break;
- case PCF_GLYPH_NAMES:
- table->format = PCF_DEFAULT_FORMAT | format;
- glyph_string_size = 0;
- for (i = 0; i < bitmapFont->num_chars; i++)
- glyph_string_size += strlen(pcfNameForAtom(bitmapFont->bitmapExtra->glyphNames[i])) + 1;
- table->size = S32 + S32 + bitmapFont->num_chars * S32 +
- S32 + RoundUp(glyph_string_size);
- table++;
- break;
- case PCF_BDF_ACCELERATORS:
- if (pFont->info.inkMetrics)
- table->format = PCF_ACCEL_W_INKBOUNDS | format;
- else
- table->format = PCF_DEFAULT_FORMAT | format;
- table->size = 100;
- table++;
- break;
- }
- }
- ntables = table - tables;
- offset = 0;
- header_size = S32 + S32 + ntables * (4 * S32);
- offset = header_size;
- for (cur_table = 0, table = tables;
- cur_table < ntables;
- cur_table++, table++) {
- table->offset = offset;
- offset += table->size;
- }
- current_position = 0;
- pcfWriteTOC(file, tables, ntables);
- for (cur_table = 0, table = tables;
- cur_table < ntables;
- cur_table++, table++) {
- if (current_position > table->offset) {
- printf("can't go backwards... %d > %d\n",
- (int)current_position, (int)table->offset);
- xfree(offsetProps);
- return BadFontName;
- }
- while (current_position < table->offset)
- pcfPutINT8(file, format, '\0');
- pcfPutLSB32(file, table->format);
- switch (table->type) {
- case PCF_PROPERTIES:
- pcfPutINT32(file, format, pFont->info.nprops);
- for (i = 0; i < pFont->info.nprops; i++) {
- pcfPutINT32(file, format, offsetProps[i].name);
- pcfPutINT8(file, format, pFont->info.isStringProp[i]);
- pcfPutINT32(file, format, offsetProps[i].value);
- }
- for (i = 0; i < prop_pad; i++)
- pcfPutINT8(file, format, 0);
- pcfPutINT32(file, format, prop_string_size);
- for (i = 0; i < pFont->info.nprops; i++) {
- atom_name = pcfNameForAtom(pFont->info.props[i].name);
- pcfWrite(file, atom_name, strlen(atom_name) + 1);
- if (pFont->info.isStringProp[i]) {
- atom_name = pcfNameForAtom(pFont->info.props[i].value);
- pcfWrite(file, atom_name, strlen(atom_name) + 1);
- }
- }
- break;
- case PCF_ACCELERATORS:
- pcfPutAccel(file, table->format, &bitmapFont->bitmapExtra->info);
- break;
- case PCF_METRICS:
- if (PCF_FORMAT_MATCH(table->format, PCF_COMPRESSED_METRICS)) {
- pcfPutINT16(file, format, bitmapFont->num_chars);
- for (i = 0; i < bitmapFont->num_chars; i++)
- pcfPutCompressedMetric(file, format, &bitmapFont->metrics[i].metrics);
- } else {
- pcfPutINT32(file, format, bitmapFont->num_chars);
- for (i = 0; i < bitmapFont->num_chars; i++)
- pcfPutMetric(file, format, &bitmapFont->metrics[i].metrics);
- }
- break;
- case PCF_BITMAPS:
- pcfPutINT32(file, format, bitmapFont->num_chars);
- glyph = PCF_GLYPH_PAD(format);
- offset = 0;
- for (i = 0; i < bitmapFont->num_chars; i++) {
- pcfPutINT32(file, format, offset);
- offset += BYTES_FOR_GLYPH(&bitmapFont->metrics[i], glyph);
- }
- for (i = 0; i < GLYPHPADOPTIONS; i++) {
- pcfPutINT32(file, format,
- bitmapFont->bitmapExtra->bitmapsSizes[i]);
- }
- for (i = 0; i < bitmapFont->num_chars; i++)
- pcfPutBitmap(file, format, &bitmapFont->metrics[i]);
- break;
- case PCF_INK_METRICS:
- if (PCF_FORMAT_MATCH(table->format, PCF_COMPRESSED_METRICS)) {
- pcfPutINT16(file, format, bitmapFont->num_chars);
- for (i = 0; i < bitmapFont->num_chars; i++)
- pcfPutCompressedMetric(file, format, &bitmapFont->ink_metrics[i]);
- } else {
- pcfPutINT32(file, format, bitmapFont->num_chars);
- for (i = 0; i < bitmapFont->num_chars; i++)
- pcfPutMetric(file, format, &bitmapFont->ink_metrics[i]);
- }
- break;
- case PCF_BDF_ENCODINGS:
- pcfPutINT16(file, format, pFont->info.firstCol);
- pcfPutINT16(file, format, pFont->info.lastCol);
- pcfPutINT16(file, format, pFont->info.firstRow);
- pcfPutINT16(file, format, pFont->info.lastRow);
- pcfPutINT16(file, format, pFont->info.defaultCh);
- for (i = 0; i < nencodings; i++) {
- if (ACCESSENCODING(bitmapFont->encoding,i))
- pcfPutINT16(file, format,
- ACCESSENCODING(bitmapFont->encoding, i) -
- bitmapFont->metrics);
- else
- pcfPutINT16(file, format, 0xFFFF);
- }
- break;
- case PCF_SWIDTHS:
- pcfPutINT32(file, format, bitmapFont->num_chars);
- for (i = 0; i < bitmapFont->num_chars; i++)
- pcfPutINT32(file, format, bitmapFont->bitmapExtra->sWidths[i]);
- break;
- case PCF_GLYPH_NAMES:
- pcfPutINT32(file, format, bitmapFont->num_chars);
- offset = 0;
- for (i = 0; i < bitmapFont->num_chars; i++) {
- pcfPutINT32(file, format, offset);
- offset += strlen(pcfNameForAtom(bitmapFont->bitmapExtra->glyphNames[i])) + 1;
- }
- pcfPutINT32(file, format, offset);
- for (i = 0; i < bitmapFont->num_chars; i++) {
- atom_name = pcfNameForAtom(bitmapFont->bitmapExtra->glyphNames[i]);
- pcfWrite(file, atom_name, strlen(atom_name) + 1);
- }
- break;
- case PCF_BDF_ACCELERATORS:
- pcfPutAccel(file, table->format, &pFont->info);
- break;
- }
- }
-
- xfree(offsetProps);
- return Successful;
-}
diff --git a/nx-X11/lib/font/bitmap/snfread.c b/nx-X11/lib/font/bitmap/snfread.c
deleted file mode 100644
index 01b6bf382..000000000
--- a/nx-X11/lib/font/bitmap/snfread.c
+++ /dev/null
@@ -1,514 +0,0 @@
-/* $Xorg: snfread.c,v 1.5 2001/02/09 02:04:02 xorgcvs Exp $ */
-/************************************************************************
-Copyright 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-************************************************************************/
-
-/*
-
-Copyright 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/bitmap/snfread.c,v 1.12 2003/11/17 22:20:22 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef FONTMODULE
-#include <ctype.h>
-#endif
-
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/bitmap.h>
-#include "snfstr.h"
-
-#include <stdarg.h>
-
-void
-snfError(const char* message, ...)
-{
- va_list args;
-
- va_start(args, message);
-
- fprintf(stderr, "SNF Error: ");
- vfprintf(stderr, message, args);
- va_end(args);
-}
-
-static void snfUnloadFont(FontPtr pFont);
-
-static int
-snfReadCharInfo(FontFilePtr file, CharInfoPtr charInfo, char *base)
-{
- snfCharInfoRec snfCharInfo;
-
-#define Width(m) ((m).rightSideBearing - (m).leftSideBearing)
-#define Height(m) ((m).ascent + (m).descent)
-
- if (FontFileRead(file, (char *) &snfCharInfo, sizeof snfCharInfo) !=
- sizeof(snfCharInfo)) {
- return BadFontName;
- }
- charInfo->metrics = snfCharInfo.metrics;
- if (snfCharInfo.exists)
- charInfo->bits = base + snfCharInfo.byteOffset;
- else
- charInfo->bits = 0;
- return Successful;
-}
-
-static int
-snfReadxCharInfo(FontFilePtr file, xCharInfo *charInfo)
-{
- snfCharInfoRec snfCharInfo;
-
- if (FontFileRead(file, (char *) &snfCharInfo, sizeof snfCharInfo) !=
- sizeof(snfCharInfo)) {
- return BadFontName;
- }
- *charInfo = snfCharInfo.metrics;
- return Successful;
-}
-
-static void
-snfCopyInfo(snfFontInfoPtr snfInfo, FontInfoPtr pFontInfo)
-{
- pFontInfo->firstCol = snfInfo->firstCol;
- pFontInfo->lastCol = snfInfo->lastCol;
- pFontInfo->firstRow = snfInfo->firstRow;
- pFontInfo->lastRow = snfInfo->lastRow;
- pFontInfo->defaultCh = snfInfo->chDefault;
- pFontInfo->noOverlap = snfInfo->noOverlap;
- pFontInfo->terminalFont = snfInfo->terminalFont;
- pFontInfo->constantMetrics = snfInfo->constantMetrics;
- pFontInfo->constantWidth = snfInfo->constantWidth;
- pFontInfo->inkInside = snfInfo->inkInside;
- pFontInfo->inkMetrics = snfInfo->inkMetrics;
- pFontInfo->allExist = snfInfo->allExist;
- pFontInfo->drawDirection = snfInfo->drawDirection;
- pFontInfo->anamorphic = FALSE;
- pFontInfo->cachable = TRUE;
- pFontInfo->maxOverlap = 0;
- pFontInfo->minbounds = snfInfo->minbounds.metrics;
- pFontInfo->maxbounds = snfInfo->maxbounds.metrics;
- pFontInfo->fontAscent = snfInfo->fontAscent;
- pFontInfo->fontDescent = snfInfo->fontDescent;
- pFontInfo->nprops = snfInfo->nProps;
-}
-
-static int
-snfReadProps(snfFontInfoPtr snfInfo, FontInfoPtr pFontInfo, FontFilePtr file)
-{
- char *strings;
- FontPropPtr pfp;
- snfFontPropPtr psnfp;
- char *propspace;
- int bytestoalloc;
- int i;
-
- bytestoalloc = snfInfo->nProps * sizeof(snfFontPropRec) +
- BYTESOFSTRINGINFO(snfInfo);
- propspace = (char *) xalloc(bytestoalloc);
- if (!propspace) {
- snfError("snfReadProps(): Couldn't allocate propspace (%d)\n", bytestoalloc);
- return AllocError;
- }
-
- if (FontFileRead(file, propspace, bytestoalloc) != bytestoalloc) {
- xfree(propspace);
- return BadFontName;
- }
- psnfp = (snfFontPropPtr) propspace;
-
- strings = propspace + BYTESOFPROPINFO(snfInfo);
-
- for (i = 0, pfp = pFontInfo->props; i < snfInfo->nProps; i++, pfp++, psnfp++) {
- pfp->name = MakeAtom(&strings[psnfp->name],
- (unsigned) strlen(&strings[psnfp->name]), 1);
- pFontInfo->isStringProp[i] = psnfp->indirect;
- if (psnfp->indirect)
- pfp->value = (INT32) MakeAtom(&strings[psnfp->value],
- (unsigned) strlen(&strings[psnfp->value]), 1);
- else
- pfp->value = psnfp->value;
- }
-
- xfree(propspace);
- return Successful;
-}
-
-static int
-snfReadHeader(snfFontInfoPtr snfInfo, FontFilePtr file)
-{
- if (FontFileRead(file, (char *) snfInfo, sizeof *snfInfo) != sizeof *snfInfo)
- return BadFontName;
-
- if (snfInfo->version1 != FONT_FILE_VERSION ||
- snfInfo->version2 != FONT_FILE_VERSION)
- return BadFontName;
- return Successful;
-}
-
-static int snf_set;
-static int snf_bit, snf_byte, snf_glyph, snf_scan;
-
-void
-SnfSetFormat (int bit, int byte, int glyph, int scan)
-{
- snf_bit = bit;
- snf_byte = byte;
- snf_glyph = glyph;
- snf_scan = scan;
- snf_set = 1;
-}
-
-static void
-SnfGetFormat (int *bit, int *byte, int *glyph, int *scan)
-{
- if (!snf_set)
- FontDefaultFormat (&snf_bit, &snf_byte, &snf_glyph, &snf_scan);
- *bit = snf_bit;
- *byte = snf_byte;
- *glyph = snf_glyph;
- *scan = snf_scan;
-}
-
-int
-snfReadFont(FontPtr pFont, FontFilePtr file,
- int bit, int byte, int glyph, int scan)
-{
- snfFontInfoRec fi;
- unsigned bytestoalloc;
- int i, j;
- char *fontspace;
- BitmapFontPtr bitmapFont;
- int num_chars;
- int bitmapsSize;
- int ret;
- int metrics_off;
- int encoding_off;
- int props_off;
- int isStringProp_off;
- int ink_off;
- char *bitmaps;
- int def_bit, def_byte, def_glyph, def_scan;
-
- ret = snfReadHeader(&fi, file);
- if (ret != Successful)
- return ret;
-
- SnfGetFormat (&def_bit, &def_byte, &def_glyph, &def_scan);
-
- /*
- * we'll allocate one chunk of memory and split it among the various parts
- * of the font:
- *
- * BitmapFontRec CharInfoRec's Glyphs Encoding DIX Properties Ink CharInfoRec's
- *
- * If the glyphpad is not the same as the font file, then the glyphs
- * are allocated separately, to be later realloc'ed when we know
- * how big to make them.
- */
-
- bitmapsSize = BYTESOFGLYPHINFO(&fi);
- num_chars = n2dChars(&fi);
- bytestoalloc = sizeof(BitmapFontRec); /* bitmapFont */
- metrics_off = bytestoalloc;
- bytestoalloc += num_chars * sizeof(CharInfoRec); /* metrics */
- encoding_off = bytestoalloc;
- bytestoalloc += NUM_SEGMENTS(num_chars) * sizeof(CharInfoPtr**);
- /* encoding */
- props_off = bytestoalloc;
- bytestoalloc += fi.nProps * sizeof(FontPropRec); /* props */
- isStringProp_off = bytestoalloc;
- bytestoalloc += fi.nProps * sizeof(char); /* isStringProp */
- bytestoalloc = (bytestoalloc + 3) & ~3;
- ink_off = bytestoalloc;
- if (fi.inkMetrics)
- bytestoalloc += num_chars * sizeof(xCharInfo); /* ink_metrics */
-
- fontspace = (char *) xalloc(bytestoalloc);
- if (!fontspace) {
- snfError("snfReadFont(): Couldn't allocate fontspace (%d)\n", bytestoalloc);
- return AllocError;
- }
- bitmaps = (char *) xalloc (bitmapsSize);
- if (!bitmaps)
- {
- snfError("snfReadFont(): Couldn't allocate bitmaps (%d)\n", bitmapsSize);
- xfree (fontspace);
- return AllocError;
- }
- /*
- * now fix up pointers
- */
-
- bitmapFont = (BitmapFontPtr) fontspace;
- bitmapFont->num_chars = num_chars;
- bitmapFont->metrics = (CharInfoPtr) (fontspace + metrics_off);
- bitmapFont->encoding = (CharInfoPtr **) (fontspace + encoding_off);
- bitmapFont->bitmaps = bitmaps;
- bitmapFont->pDefault = NULL;
- bitmapFont->bitmapExtra = NULL;
- pFont->info.props = (FontPropPtr) (fontspace + props_off);
- pFont->info.isStringProp = (char *) (fontspace + isStringProp_off);
- if (fi.inkMetrics)
- bitmapFont->ink_metrics = (xCharInfo *) (fontspace + ink_off);
- else
- bitmapFont->ink_metrics = 0;
-
- /*
- * read the CharInfo
- */
-
- ret = Successful;
- memset(bitmapFont->encoding, 0,
- NUM_SEGMENTS(num_chars)*sizeof(CharInfoPtr*));
- for (i = 0; ret == Successful && i < num_chars; i++) {
- ret = snfReadCharInfo(file, &bitmapFont->metrics[i], bitmaps);
- if (bitmapFont->metrics[i].bits) {
- if (!bitmapFont->encoding[SEGMENT_MAJOR(i)]) {
- bitmapFont->encoding[SEGMENT_MAJOR(i)]=
- (CharInfoPtr*)xcalloc(BITMAP_FONT_SEGMENT_SIZE,
- sizeof(CharInfoPtr));
- if (!bitmapFont->encoding[SEGMENT_MAJOR(i)]) {
- ret = AllocError;
- break;
- }
- }
- ACCESSENCODINGL(bitmapFont->encoding,i) = &bitmapFont->metrics[i];
- }
- }
-
- if (ret != Successful) {
- xfree(bitmaps);
- if(bitmapFont->encoding) {
- for(j=0; j<SEGMENT_MAJOR(i); j++)
- xfree(bitmapFont->encoding[i]);
- }
- xfree(fontspace);
- return ret;
- }
- /*
- * read the glyphs
- */
-
- if (FontFileRead(file, bitmaps, bitmapsSize) != bitmapsSize) {
- xfree(bitmaps);
- xfree(fontspace);
- return BadFontName;
- }
-
- if (def_bit != bit)
- BitOrderInvert((unsigned char *)bitmaps, bitmapsSize);
- if ((def_byte == def_bit) != (bit == byte)) {
- switch (bit == byte ? def_scan : scan) {
- case 1:
- break;
- case 2:
- TwoByteSwap((unsigned char *)bitmaps, bitmapsSize);
- break;
- case 4:
- FourByteSwap((unsigned char *)bitmaps, bitmapsSize);
- break;
- }
- }
- if (def_glyph != glyph) {
- char *padbitmaps;
- int sizepadbitmaps;
- int sizechar;
- CharInfoPtr metric;
-
- sizepadbitmaps = 0;
- metric = bitmapFont->metrics;
- for (i = 0; i < num_chars; i++)
- {
- if (metric->bits)
- sizepadbitmaps += BYTES_FOR_GLYPH(metric,glyph);
- metric++;
- }
- padbitmaps = (char *) xalloc(sizepadbitmaps);
- if (!padbitmaps) {
- snfError("snfReadFont(): Couldn't allocate padbitmaps (%d)\n", sizepadbitmaps);
- xfree (bitmaps);
- xfree (fontspace);
- return AllocError;
- }
- metric = bitmapFont->metrics;
- bitmapFont->bitmaps = padbitmaps;
- for (i = 0; i < num_chars; i++) {
- sizechar = RepadBitmap(metric->bits, padbitmaps,
- def_glyph, glyph,
- metric->metrics.rightSideBearing -
- metric->metrics.leftSideBearing,
- metric->metrics.ascent + metric->metrics.descent);
- metric->bits = padbitmaps;
- padbitmaps += sizechar;
- metric++;
- }
- xfree(bitmaps);
- }
-
- /* now read and atom'ize properties */
-
- ret = snfReadProps(&fi, &pFont->info, file);
- if (ret != Successful) {
- xfree(fontspace);
- return ret;
- }
- snfCopyInfo(&fi, &pFont->info);
-
- /* finally, read the ink metrics if the exist */
-
- if (fi.inkMetrics) {
- ret = Successful;
- ret = snfReadxCharInfo(file, &pFont->info.ink_minbounds);
- ret = snfReadxCharInfo(file, &pFont->info.ink_maxbounds);
- for (i = 0; ret == Successful && i < num_chars; i++)
- ret = snfReadxCharInfo(file, &bitmapFont->ink_metrics[i]);
- if (ret != Successful) {
- xfree(fontspace);
- return ret;
- }
- } else {
- pFont->info.ink_minbounds = pFont->info.minbounds;
- pFont->info.ink_maxbounds = pFont->info.maxbounds;
- }
-
- if (pFont->info.defaultCh != (unsigned short) NO_SUCH_CHAR) {
- unsigned int r,
- c,
- cols;
-
- r = pFont->info.defaultCh >> 8;
- c = pFont->info.defaultCh & 0xFF;
- if (pFont->info.firstRow <= r && r <= pFont->info.lastRow &&
- pFont->info.firstCol <= c && c <= pFont->info.lastCol) {
- cols = pFont->info.lastCol - pFont->info.firstCol + 1;
- r = r - pFont->info.firstRow;
- c = c - pFont->info.firstCol;
- bitmapFont->pDefault = &bitmapFont->metrics[r * cols + c];
- }
- }
- bitmapFont->bitmapExtra = (BitmapExtraPtr) 0;
- pFont->fontPrivate = (pointer) bitmapFont;
- pFont->get_glyphs = bitmapGetGlyphs;
- pFont->get_metrics = bitmapGetMetrics;
- pFont->unload_font = snfUnloadFont;
- pFont->unload_glyphs = NULL;
- pFont->bit = bit;
- pFont->byte = byte;
- pFont->glyph = glyph;
- pFont->scan = scan;
- return Successful;
-}
-
-int
-snfReadFontInfo(FontInfoPtr pFontInfo, FontFilePtr file)
-{
- int ret;
- snfFontInfoRec fi;
- int bytestoskip;
- int num_chars;
-
- ret = snfReadHeader(&fi, file);
- if (ret != Successful)
- return ret;
- snfCopyInfo(&fi, pFontInfo);
-
- pFontInfo->props = (FontPropPtr) xalloc(fi.nProps * sizeof(FontPropRec));
- if (!pFontInfo->props) {
- snfError("snfReadFontInfo(): Couldn't allocate props (%d*%d)\n", fi.nProps, sizeof(FontPropRec));
- return AllocError;
- }
- pFontInfo->isStringProp = (char *) xalloc(fi.nProps * sizeof(char));
- if (!pFontInfo->isStringProp) {
- snfError("snfReadFontInfo(): Couldn't allocate isStringProp (%d*%d)\n", fi.nProps, sizeof(char));
- xfree(pFontInfo->props);
- return AllocError;
- }
- num_chars = n2dChars(&fi);
- bytestoskip = num_chars * sizeof(snfCharInfoRec); /* charinfos */
- bytestoskip += BYTESOFGLYPHINFO(&fi);
- (void)FontFileSkip(file, bytestoskip);
-
- ret = snfReadProps(&fi, pFontInfo, file);
- if (ret != Successful) {
- xfree(pFontInfo->props);
- xfree(pFontInfo->isStringProp);
- return ret;
- }
- if (fi.inkMetrics) {
- ret = snfReadxCharInfo(file, &pFontInfo->ink_minbounds);
- if (ret != Successful) {
- xfree(pFontInfo->props);
- xfree(pFontInfo->isStringProp);
- return ret;
- }
- ret = snfReadxCharInfo(file, &pFontInfo->ink_maxbounds);
- if (ret != Successful) {
- xfree(pFontInfo->props);
- xfree(pFontInfo->isStringProp);
- return ret;
- }
- } else {
- pFontInfo->ink_minbounds = pFontInfo->minbounds;
- pFontInfo->ink_maxbounds = pFontInfo->maxbounds;
- }
- return Successful;
-
-}
-
-static void
-snfUnloadFont(FontPtr pFont)
-{
- BitmapFontPtr bitmapFont;
-
- bitmapFont = (BitmapFontPtr) pFont->fontPrivate;
- xfree (bitmapFont->bitmaps);
- xfree (bitmapFont);
- DestroyFontRec (pFont);
-}
-
diff --git a/nx-X11/lib/font/bitmap/snfstr.h b/nx-X11/lib/font/bitmap/snfstr.h
deleted file mode 100644
index 8158089bf..000000000
--- a/nx-X11/lib/font/bitmap/snfstr.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* $Xorg: snfstr.h,v 1.4 2001/02/09 02:04:02 xorgcvs Exp $ */
-/***********************************************************
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-/*
-
-Copyright 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/bitmap/snfstr.h,v 1.5 2001/12/14 19:56:47 dawes Exp $ */
-
-#ifndef SNFSTR_H
-#define SNFSTR_H 1
-
-#include <X11/fonts/fntfilio.h>
-
-/*-
- * This file describes the Server Natural Font format.
- * SNF fonts are both CPU-dependent and frame buffer bit order dependent.
- * This file is used by:
- * 1) the server, to hold font information read out of font files.
- * 2) font converters
- *
- * Each font file contains the following
- * data structures, with no padding in-between.
- *
- * 1) The XFONTINFO structure
- * hand-padded to a two-short boundary.
- * maxbounds.byteoffset is the total number of bytes in the
- * glpyh array
- * maxbounds.bitOffset is thetotal width of the unpadded font
- *
- * 2) The XCHARINFO array
- * indexed directly with character codes, both on disk
- * and in memory.
- *
- * 3) Character glyphs
- * padded in the server-natural way, and
- * ordered in the device-natural way.
- * End of glyphs padded to 32-bit boundary.
- *
- * 4) nProps font properties
- *
- * 5) a sequence of null-terminated strings, for font properties
- */
-
-#define FONT_FILE_VERSION 4
-
-typedef struct _snfFontProp {
- CARD32 name; /* offset of string */
- INT32 value; /* number or offset of string */
- Bool indirect; /* value is a string offset */
-} snfFontPropRec;
-
-/*
- * the following macro definitions describe a font file image in memory
- */
-#define ADDRCharInfoRec( pfi) \
- ((snfCharInfoRec *) &(pfi)[1])
-
-#define ADDRCHARGLYPHS( pfi) \
- (((char *) &(pfi)[1]) + BYTESOFCHARINFO(pfi))
-
-/*
- * pad out glyphs to a CARD32 boundary
- */
-#define ADDRXFONTPROPS( pfi) \
- ((snfFontPropRec *) ((char *)ADDRCHARGLYPHS( pfi) + BYTESOFGLYPHINFO(pfi)))
-
-#define ADDRSTRINGTAB( pfi) \
- ((char *)ADDRXFONTPROPS( pfi) + BYTESOFPROPINFO(pfi))
-
-#define n2dChars(pfi) (((pfi)->lastRow - (pfi)->firstRow + 1) * \
- ((pfi)->lastCol - (pfi)->firstCol + 1))
-#define BYTESOFFONTINFO(pfi) (sizeof(snfFontInfoRec))
-#define BYTESOFCHARINFO(pfi) (sizeof(snfCharInfoRec) * n2dChars(pfi))
-#define BYTESOFPROPINFO(pfi) (sizeof(snfFontPropRec) * (pfi)->nProps)
-#define BYTESOFSTRINGINFO(pfi) ((pfi)->lenStrings)
-#define BYTESOFGLYPHINFO(pfi) (((pfi)->maxbounds.byteOffset+3) & ~0x3)
-#define BYTESOFINKINFO(pfi) (sizeof(snfCharInfoRec) * n2dChars(pfi))
-
-typedef struct _snfFontProp *snfFontPropPtr;
-typedef struct _snfCharInfo *snfCharInfoPtr;
-typedef struct _snfFontInfo *snfFontInfoPtr;
-
-typedef struct _snfCharInfo {
- xCharInfo metrics; /* info preformatted for Queries */
- unsigned byteOffset:24; /* byte offset of the raster from pGlyphs */
- unsigned exists:1; /* true iff glyph exists for this char */
- unsigned pad:7; /* must be zero for now */
-} snfCharInfoRec;
-
-typedef struct _snfFontInfo {
- unsigned int version1; /* version stamp */
- unsigned int allExist;
- unsigned int drawDirection;
- unsigned int noOverlap; /* true if:
- * max(rightSideBearing-characterWidth) <=
- * minbounds->metrics.leftSideBearing */
- unsigned int constantMetrics;
- unsigned int terminalFont; /* Should be deprecated! true if: constant
- * metrics && leftSideBearing == 0 &&
- * rightSideBearing == characterWidth &&
- * ascent == fontAscent && descent ==
- * fontDescent */
- unsigned int linear:1; /* true if firstRow == lastRow */
- unsigned int constantWidth:1; /* true if
- * minbounds->metrics.characterWidth
- * ==
- * maxbounds->metrics.characterWidth */
- unsigned int inkInside:1; /* true if for all defined glyphs:
- * leftSideBearing >= 0 && rightSideBearing <=
- * characterWidth && -fontDescent <= ascent <=
- * fontAscent && -fontAscent <= descent <=
- * fontDescent */
- unsigned int inkMetrics:1; /* ink metrics != bitmap metrics */
- /* used with terminalFont */
- /* see font's pInk{CI,Min,Max} */
- unsigned int padding:28;
- unsigned int firstCol;
- unsigned int lastCol;
- unsigned int firstRow;
- unsigned int lastRow;
- unsigned int nProps;
- unsigned int lenStrings; /* length in bytes of string table */
- unsigned int chDefault; /* default character */
- int fontDescent; /* minimum for quality typography */
- int fontAscent; /* minimum for quality typography */
- snfCharInfoRec minbounds; /* MIN of glyph metrics over all chars */
- snfCharInfoRec maxbounds; /* MAX of glyph metrics over all chars */
- unsigned int pixDepth; /* intensity bits per pixel */
- unsigned int glyphSets; /* number of sets of glyphs, for sub-pixel
- * positioning */
- unsigned int version2; /* version stamp double-check */
-} snfFontInfoRec;
-
-extern void SnfSetFormat ( int bit, int byte, int glyph, int scan );
-extern int snfReadFont ( FontPtr pFont, FontFilePtr file,
- int bit, int byte, int glyph, int scan );
-extern int snfReadFontInfo ( FontInfoPtr pFontInfo, FontFilePtr file );
-extern void snfError( const char* message, ... );
-
-#endif /* SNFSTR_H */
diff --git a/nx-X11/lib/font/builtins/Imakefile b/nx-X11/lib/font/builtins/Imakefile
deleted file mode 100644
index f70434865..000000000
--- a/nx-X11/lib/font/builtins/Imakefile
+++ /dev/null
@@ -1,17 +0,0 @@
-XCOMM $XFree86: xc/lib/font/builtins/Imakefile,v 1.2 1999/11/19 14:59:08 hohndel Exp $
-XCOMM
-XCOMM
-XCOMM $XConsortium: Imakefile /main/14 1996/11/03 19:58:41 kaleb $
-#include <Server.tmpl>
-
- INCLUDES = -I$(FONTINCSRC) -I../include -I$(SERVERSRC)/include
- HEADERS =
-
- SRCS = dir.c file.c fonts.c fpe.c render.c
- OBJS = dir.o file.o fonts.o fpe.o render.o
-
-SubdirLibraryRule($(OBJS))
-NormalLibraryObjectRule()
-NormalLintTarget($(SRCS))
-
-DependTarget()
diff --git a/nx-X11/lib/font/builtins/buildfont b/nx-X11/lib/font/builtins/buildfont
deleted file mode 100644
index aa4602ff8..000000000
--- a/nx-X11/lib/font/builtins/buildfont
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-#
-# Convert a bdf file into C-code suitable for inclusion in
-# builtin fonts
-#
-FONT=$1
-NAME=$2
-echo 'static const char file_'$NAME'[] = {'
-bdftopcf -p1 -u1 $1 |
- compress -b 12 |
- od -b -v -w8 |
- sed 's/^[0-9]*\( *\)/\1\1\1\1/' |
- sed 's/\([0-9][0-9]*\)/'"'"'\\\1'"'"',/g'
-echo '};'
diff --git a/nx-X11/lib/font/builtins/builtin.h b/nx-X11/lib/font/builtins/builtin.h
deleted file mode 100644
index ea98407eb..000000000
--- a/nx-X11/lib/font/builtins/builtin.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Id: builtin.h,v 1.2 1999/11/02 06:16:47 keithp Exp $
- *
- * Copyright 1999 SuSE, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-/* $XFree86: xc/lib/font/builtins/builtin.h,v 1.3 1999/12/30 02:29:49 robin Exp $ */
-
-#include <X11/Xdefs.h>
-#include <X11/fonts/font.h>
-#include <X11/fonts/fontxlfd.h>
-#include <X11/fonts/fntfil.h>
-#include <X11/fonts/fntfilio.h>
-#include <X11/fonts/fntfilst.h>
-
-typedef struct _BuiltinFile {
- const char *name;
- int len;
- const char *bits;
-} BuiltinFileRec, *BuiltinFilePtr;
-
-typedef struct _BuiltinDir {
- char *file_name;
- char *font_name;
-} BuiltinDirRec, *BuiltinDirPtr;
-
-typedef struct _BuiltinAlias {
- char *alias_name;
- char *font_name;
-} BuiltinAliasRec, *BuiltinAliasPtr;
-
-extern const BuiltinFileRec builtin_files[];
-extern const int builtin_files_count;
-
-extern const BuiltinDirRec builtin_dir[];
-extern const int builtin_dir_count;
-
-extern const BuiltinAliasRec builtin_alias[];
-extern const int builtin_alias_count;
-
-extern FontFilePtr BuiltinFileOpen ();
-extern int BuiltinFileClose ();
diff --git a/nx-X11/lib/font/builtins/dir.c b/nx-X11/lib/font/builtins/dir.c
deleted file mode 100644
index fb2f82c41..000000000
--- a/nx-X11/lib/font/builtins/dir.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Id: dir.c,v 1.2 1999/11/02 06:16:47 keithp Exp $
- *
- * Copyright 1999 SuSE, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-/* $XFree86: xc/lib/font/builtins/dir.c,v 1.3 1999/12/30 02:29:49 robin Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "builtin.h"
-
-int
-BuiltinReadDirectory (directory, pdir)
- char *directory;
- FontDirectoryPtr *pdir;
-{
- FontDirectoryPtr dir;
- int i;
-
- dir = FontFileMakeDir ("", builtin_dir_count);
- for (i = 0; i < builtin_dir_count; i++)
- {
- if (!FontFileAddFontFile (dir,
- (char *) builtin_dir[i].font_name,
- (char *) builtin_dir[i].file_name))
- {
- FontFileFreeDir (dir);
- return BadFontPath;
- }
- }
- for (i = 0; i < builtin_alias_count; i++)
- {
- if (!FontFileAddFontAlias (dir,
- (char *) builtin_alias[i].alias_name,
- (char *) builtin_alias[i].font_name))
- {
- FontFileFreeDir (dir);
- return BadFontPath;
- }
- }
- FontFileSortDir (dir);
- *pdir = dir;
- return Successful;
-}
diff --git a/nx-X11/lib/font/builtins/file.c b/nx-X11/lib/font/builtins/file.c
deleted file mode 100644
index 024c35343..000000000
--- a/nx-X11/lib/font/builtins/file.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Id: file.c,v 1.2 1999/11/02 06:16:47 keithp Exp $
- *
- * Copyright 1999 SuSE, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-/* $XFree86: xc/lib/font/builtins/file.c,v 1.3 1999/12/30 02:29:49 robin Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "builtin.h"
-
-typedef struct _BuiltinIO {
- int offset;
- BuiltinFilePtr file;
-} BuiltinIORec, *BuiltinIOPtr;
-
-static int
-BuiltinFill (f)
- BufFilePtr f;
-{
- int left, len;
- BuiltinIOPtr io = ((BuiltinIOPtr) f->private);
-
- left = io->file->len - io->offset;
- if (left <= 0)
- {
- f->left = 0;
- return BUFFILEEOF;
- }
- len = BUFFILESIZE;
- if (len > left)
- len = left;
- bcopy (io->file->bits + io->offset, f->buffer, len);
- io->offset += len;
- f->left = len - 1;
- f->bufp = f->buffer + 1;
- return f->buffer[0];
-}
-
-static int
-BuiltinSkip (f, count)
- BufFilePtr f;
- int count;
-{
- BuiltinIOPtr io = ((BuiltinIOPtr) f->private);
- int curoff;
- int fileoff;
- int todo;
- int left;
-
- curoff = f->bufp - f->buffer;
- fileoff = curoff + f->left;
- if (curoff + count <= fileoff) {
- f->bufp += count;
- f->left -= count;
- } else {
- todo = count - (fileoff - curoff);
- io->offset += todo;
- if (io->offset > io->file->len)
- io->offset = io->file->len;
- if (io->offset < 0)
- io->offset = 0;
- f->left = 0;
- }
- return count;
-}
-
-static int
-BuiltinClose (f, doClose)
- BufFilePtr f;
-{
- BuiltinIOPtr io = ((BuiltinIOPtr) f->private);
-
- xfree (io);
- return 1;
-}
-
-
-FontFilePtr
-BuiltinFileOpen (name)
- char *name;
-{
- int i;
- BuiltinIOPtr io;
- BufFilePtr raw, cooked;
-
- if (*name == '/') name++;
- for (i = 0; i < builtin_files_count; i++)
- if (!strcmp (name, builtin_files[i].name))
- break;
- if (i == builtin_files_count)
- return NULL;
- io = (BuiltinIOPtr) xalloc (sizeof (BuiltinIORec));
- if (!io)
- return NULL;
- io->offset = 0;
- io->file = (void *) &builtin_files[i];
- raw = BufFileCreate ((char *) io, BuiltinFill, 0, BuiltinSkip, BuiltinClose);
- if (!raw)
- {
- xfree (io);
- return NULL;
- }
- if (cooked = BufFilePushCompressed (raw))
- raw = cooked;
- else
- {
- raw->left += raw->bufp - raw->buffer;
- raw->bufp = raw->buffer;
- }
- return (FontFilePtr) raw;
-}
-
-int
-BuiltinFileClose (f)
- FontFilePtr f;
-{
- return BufFileClose ((BufFilePtr) f, TRUE);
-}
diff --git a/nx-X11/lib/font/builtins/fonts.c b/nx-X11/lib/font/builtins/fonts.c
deleted file mode 100644
index 30c762f7f..000000000
--- a/nx-X11/lib/font/builtins/fonts.c
+++ /dev/null
@@ -1,2438 +0,0 @@
-/*
- * Id: fonts.c,v 1.2 1999/11/02 06:16:47 keithp Exp $
- *
- * Copyright 1999 SuSE, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-/* $XFree86: xc/lib/font/builtins/fonts.c,v 1.3 1999/12/30 02:29:49 robin Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "builtin.h"
-
-static const char file_6x13[] = {
- '\037', '\235', '\214', '\001', '\314', '\214', '\201', '\223',
- '\000', '\200', '\301', '\000', '\006', '\023', '\032', '\244',
- '\042', '\300', '\040', '\246', '\204', '\015', '\023', '\042',
- '\004', '\100', '\046', '\041', '\273', '\210', '\004', '\024',
- '\116', '\104', '\223', '\021', '\000', '\224', '\001', '\006',
- '\021', '\050', '\114', '\210', '\317', '\201', '\101', '\134',
- '\007', '\014', '\102', '\320', '\150', '\220', '\243', '\101',
- '\130', '\026', '\014', '\202', '\030', '\251', '\062', '\042',
- '\206', '\015', '\006', '\201', '\320', '\004', '\200', '\010',
- '\044', '\000', '\024', '\035', '\014', '\002', '\332', '\211',
- '\104', '\044', '\000', '\130', '\063', '\017', '\112', '\064',
- '\130', '\321', '\040', '\076', '\024', '\064', '\053', '\354',
- '\014', '\040', '\041', '\341', '\004', '\211', '\070', '\145',
- '\112', '\144', '\221', '\120', '\206', '\104', '\037', '\011',
- '\213', '\110', '\134', '\222', '\260', '\211', '\304', '\055',
- '\011', '\323', '\110', '\304', '\223', '\060', '\217', '\302',
- '\006', '\011', '\011', '\051', '\144', '\153', '\360', '\221',
- '\102', '\262', '\006', '\071', '\335', '\115', '\230', '\112',
- '\142', '\254', '\204', '\263', '\024', '\362', '\110', '\030',
- '\114', '\242', '\264', '\204', '\332', '\044', '\256', '\113',
- '\330', '\116', '\342', '\275', '\204', '\035', '\046', '\006',
- '\020', '\061', '\121', '\314', '\104', '\000', '\012', '\322',
- '\136', '\136', '\223', '\220', '\316', '\345', '\005', '\011',
- '\373', '\134', '\066', '\100', '\023', '\321', '\104', '\043',
- '\117', '\234', '\120', '\161', '\022', '\244', '\111', '\221',
- '\057', '\122', '\212', '\034', '\111', '\062', '\205', '\212',
- '\224', '\054', '\006', '\121', '\127', '\161', '\102', '\344',
- '\066', '\200', '\046', '\151', '\346', '\214', '\001', '\140',
- '\244', '\165', '\022', '\046', '\131', '\276', '\260', '\166',
- '\115', '\074', '\015', '\236', '\062', '\025', '\257', '\024',
- '\111', '\162', '\004', '\011', '\025', '\345', '\255', '\305',
- '\066', '\201', '\236', '\246', '\116', '\033', '\000', '\123',
- '\230', '\004', '\121', '\015', '\100', '\012', '\370', '\042',
- '\124', '\256', '\044', '\041', '\102', '\005', '\011', '\166',
- '\346', '\123', '\312', '\264', '\111', '\063', '\344', '\215',
- '\033', '\062', '\145', '\334', '\314', '\201', '\016', '\040',
- '\010', '\021', '\042', '\137', '\324', '\226', '\005', '\023',
- '\257', '\055', '\047', '\226', '\107', '\111', '\140', '\121',
- '\004', '\023', '\001', '\046', '\241', '\205', '\130', '\120',
- '\074', '\221', '\204', '\152', '\015', '\076', '\130', '\136',
- '\021', '\123', '\074', '\301', '\104', '\025', '\124', '\044',
- '\221', '\332', '\027', '\130', '\134', '\230', '\341', '\206',
- '\035', '\176', '\210', '\333', '\024', '\120', '\004', '\061',
- '\304', '\204', '\107', '\000', '\060', '\104', '\177', '\126',
- '\024', '\041', '\105', '\020', '\107', '\274', '\246', '\036',
- '\173', '\110', '\270', '\210', '\104', '\020', '\122', '\114',
- '\201', '\036', '\154', '\262', '\321', '\146', '\033', '\156',
- '\264', '\075', '\201', '\003', '\016', '\065', '\344', '\240',
- '\043', '\217', '\076', '\136', '\127', '\204', '\023', '\103',
- '\074', '\101', '\004', '\213', '\000', '\304', '\340', '\342',
- '\023', '\120', '\144', '\041', '\005', '\165', '\326', '\171',
- '\124', '\207', '\030', '\154', '\244', '\061', '\006', '\010',
- '\144', '\274', '\321', '\106', '\030', '\151', '\270', '\001',
- '\202', '\031', '\366', '\321', '\341', '\002', '\010', '\040',
- '\114', '\201', '\106', '\030', '\162', '\224', '\001', '\102',
- '\030', '\367', '\201', '\220', '\237', '\032', '\157', '\344',
- '\341', '\002', '\161', '\251', '\121', '\001', '\100', '\013',
- '\300', '\011', '\327', '\202', '\021', '\316', '\101', '\107',
- '\050', '\167', '\336', '\265', '\040', '\105', '\013', '\361',
- '\315', '\127', '\337', '\175', '\371', '\355', '\107', '\106',
- '\013', '\055', '\304', '\060', '\103', '\246', '\062', '\300',
- '\320', '\302', '\015', '\065', '\174', '\032', '\352', '\020',
- '\055', '\330', '\340', '\151', '\221', '\107', '\046', '\231',
- '\051', '\000', '\322', '\161', '\051', '\150', '\154', '\043',
- '\162', '\350', '\241', '\023', '\000', '\140', '\361', '\005',
- '\022', '\323', '\125', '\047', '\150', '\024', '\125', '\370',
- '\367', '\305', '\215', '\355', '\051', '\005', '\100', '\000',
- '\304', '\026', '\153', '\020', '\150', '\006', '\105', '\264',
- '\023', '\151', '\244', '\201', '\246', '\254', '\101', '\314',
- '\002', '\340', '\354', '\262', '\044', '\375', '\223', '\054',
- '\000', '\321', '\116', '\273', '\323', '\266', '\334', '\116',
- '\145', '\020', '\070', '\000', '\000', '\142', '\210', '\041',
- '\213', '\010', '\042', '\056', '\271', '\346', '\216', '\133',
- '\356', '\271', '\353', '\252', '\233', '\056', '\272', '\354',
- '\276', '\333', '\056', '\274', '\356', '\306', '\153', '\157',
- '\275', '\370', '\322', '\253', '\357', '\274', '\374', '\312',
- '\353', '\357', '\275', '\373', '\376', '\233', '\157', '\277',
- '\000', '\023', '\074', '\260', '\300', '\001', '\027', '\214',
- '\260', '\301', '\011', '\037', '\254', '\360', '\303', '\016',
- '\107', '\334', '\360', '\304', '\014', '\127', '\274', '\360',
- '\305', '\020', '\123', '\214', '\261', '\304', '\026', '\147',
- '\334', '\061', '\307', '\033', '\153', '\354', '\161', '\310',
- '\037', '\213', '\014', '\362', '\310', '\050', '\237', '\254',
- '\262', '\311', '\054', '\227', '\354', '\062', '\311', '\060',
- '\247', '\334', '\162', '\314', '\053', '\277', '\054', '\263',
- '\315', '\065', '\323', '\074', '\363', '\315', '\072', '\343',
- '\274', '\163', '\316', '\074', '\007', '\015', '\364', '\320',
- '\077', '\027', '\355', '\363', '\321', '\376', '\322', '\004',
- '\056', '\115', '\160', '\031', '\244', '\101', '\102', '\047',
- '\044', '\104', '\103', '\102', '\101', '\044', '\104', '\253',
- '\101', '\150', '\265', '\224', '\120', '\035', '\011', '\011',
- '\222', '\220', '\135', '\171', '\361', '\225', '\220', '\055',
- '\011', '\015', '\223', '\020', '\064', '\011', '\165', '\223',
- '\220', '\072', '\011', '\075', '\146', '\020', '\001', '\023',
- '\105', '\060', '\221', '\007', '\023', '\255', '\060', '\021',
- '\016', '\023', '\025', '\061', '\221', '\024', '\023', '\175',
- '\061', '\021', '\033', '\023', '\345', '\061', '\221', '\041',
- '\023', '\115', '\062', '\021', '\050', '\023', '\265', '\062',
- '\221', '\056', '\023', '\035', '\063', '\021', '\065', '\023',
- '\205', '\063', '\221', '\073', '\023', '\355', '\063', '\021',
- '\002', '\021', '\125', '\020', '\221', '\010', '\021', '\275',
- '\020', '\021', '\017', '\021', '\045', '\021', '\221', '\025',
- '\021', '\215', '\021', '\021', '\034', '\021', '\365', '\021',
- '\221', '\042', '\021', '\135', '\022', '\021', '\051', '\021',
- '\305', '\022', '\221', '\057', '\021', '\055', '\023', '\021',
- '\066', '\021', '\225', '\023', '\221', '\074', '\021', '\375',
- '\023', '\021', '\003', '\076', '\145', '\340', '\223', '\011',
- '\076', '\315', '\340', '\023', '\020', '\076', '\065', '\341',
- '\223', '\026', '\076', '\235', '\341', '\023', '\035', '\076',
- '\005', '\342', '\223', '\043', '\076', '\155', '\342', '\023',
- '\052', '\076', '\325', '\342', '\223', '\060', '\076', '\075',
- '\343', '\023', '\067', '\076', '\245', '\343', '\223', '\075',
- '\076', '\015', '\320', '\021', '\004', '\035', '\165', '\320',
- '\221', '\012', '\035', '\335', '\320', '\021', '\021', '\035',
- '\105', '\321', '\221', '\027', '\035', '\255', '\321', '\021',
- '\036', '\035', '\025', '\322', '\221', '\044', '\035', '\175',
- '\322', '\021', '\053', '\035', '\311', '\105', '\107', '\214',
- '\321', '\221', '\151', '\164', '\004', '\034', '\035', '\151',
- '\107', '\107', '\364', '\321', '\221', '\003', '\024', '\300',
- '\040', '\024', '\170', '\040', '\000', '\102', '\040', '\101',
- '\027', '\110', '\160', '\007', '\022', '\104', '\202', '\004',
- '\253', '\040', '\101', '\061', '\110', '\360', '\015', '\022',
- '\344', '\203', '\004', '\023', '\041', '\101', '\113', '\110',
- '\160', '\024', '\022', '\204', '\205', '\004', '\173', '\041',
- '\101', '\145', '\110', '\360', '\032', '\022', '\044', '\207',
- '\004', '\343', '\041', '\101', '\177', '\110', '\160', '\001',
- '\244', '\001', '\000', '\006', '\162', '\130', '\202', '\034',
- '\312', '\040', '\207', '\077', '\310', '\041', '\023', '\162',
- '\230', '\205', '\034', '\232', '\041', '\207', '\163', '\310',
- '\041', '\040', '\162', '\330', '\210', '\034', '\152', '\042',
- '\207', '\247', '\310', '\041', '\055', '\162', '\030', '\214',
- '\034', '\072', '\043', '\207', '\333', '\310', '\041', '\072',
- '\162', '\130', '\217', '\034', '\012', '\040', '\045', '\000',
- '\170', '\000', '\030', '\071', '\000', '\306', '\024', '\200',
- '\321', '\006', '\140', '\034', '\002', '\030', '\241', '\000',
- '\306', '\056', '\200', '\121', '\015', '\140', '\274', '\003',
- '\030', '\011', '\001', '\306', '\110', '\200', '\321', '\023',
- '\140', '\134', '\005', '\030', '\121', '\142', '\220', '\142',
- '\200', '\121', '\032', '\140', '\374', '\006', '\030', '\331',
- '\001', '\306', '\174', '\200', '\321', '\000', '\106', '\231',
- '\200', '\121', '\100', '\140', '\224', '\026', '\030', '\105',
- '\007', '\106', '\071', '\202', '\121', '\250', '\140', '\224',
- '\060', '\030', '\305', '\015', '\106', '\331', '\203', '\121',
- '\020', '\141', '\224', '\112', '\030', '\105', '\024', '\106',
- '\171', '\205', '\121', '\170', '\141', '\224', '\144', '\030',
- '\305', '\032', '\106', '\031', '\207', '\121', '\340', '\141',
- '\224', '\176', '\030', '\105', '\001', '\005', '\001', '\300',
- '\005', '\142', '\111', '\202', '\130', '\306', '\040', '\226',
- '\076', '\210', '\345', '\022', '\142', '\211', '\205', '\130',
- '\226', '\041', '\226', '\162', '\210', '\345', '\037', '\142',
- '\311', '\210', '\130', '\146', '\042', '\226', '\246', '\210',
- '\345', '\054', '\142', '\011', '\214', '\130', '\066', '\043',
- '\226', '\332', '\210', '\345', '\071', '\142', '\111', '\217',
- '\130', '\006', '\040', '\063', '\000', '\160', '\000', '\066',
- '\067', '\200', '\115', '\024', '\140', '\263', '\006', '\330',
- '\024', '\002', '\066', '\237', '\200', '\115', '\056', '\140',
- '\063', '\015', '\330', '\264', '\003', '\066', '\007', '\201',
- '\115', '\110', '\140', '\263', '\023', '\330', '\124', '\005',
- '\066', '\157', '\201', '\115', '\142', '\140', '\063', '\032',
- '\330', '\364', '\006', '\066', '\327', '\201', '\115', '\174',
- '\140', '\263', '\000', '\310', '\222', '\000', '\262', '\076',
- '\200', '\054', '\026', '\040', '\053', '\007', '\310', '\062',
- '\002', '\262', '\246', '\200', '\054', '\060', '\040', '\013',
- '\030', '\061', '\011', '\127', '\013', '\022', '\222', '\065',
- '\000', '\170', '\340', '\242', '\030', '\315', '\250', '\007',
- '\150', '\102', '\000', '\007', '\174', '\300', '\001', '\035',
- '\061', '\210', '\012', '\052', '\060', '\322', '\222', '\222',
- '\364', '\244', '\012', '\051', '\100', '\001', '\034', '\130',
- '\000', '\220', '\022', '\040', '\244', '\000', '\070', '\100',
- '\000', '\006', '\020', '\200', '\007', '\010', '\300', '\000',
- '\002', '\170', '\226', '\003', '\210', '\345', '\000', '\007',
- '\110', '\100', '\233', '\125', '\221', '\010', '\261', '\016',
- '\340', '\200', '\233', '\346', '\024', '\132', '\011', '\110',
- '\100', '\016', '\271', '\365', '\322', '\017', '\274', '\024',
- '\000', '\037', '\240', '\111', '\004', '\046', '\120', '\201',
- '\014', '\104', '\040', '\247', '\002', '\330', '\150', '\102',
- '\042', '\020', '\001', '\005', '\144', '\304', '\251', '\057',
- '\015', '\253', '\130', '\301', '\330', '\255', '\003', '\210',
- '\025', '\246', '\011', '\341', '\301', '\131', '\327', '\112',
- '\200', '\301', '\050', '\204', '\255', '\077', '\070', '\153',
- '\102', '\176', '\320', '\055', '\205', '\320', '\265', '\256',
- '\006', '\271', '\053', '\136', '\365', '\132', '\127', '\272',
- '\262', '\125', '\255', '\154', '\035', '\153', '\140', '\305',
- '\312', '\327', '\155', '\305', '\165', '\260', '\201', '\115',
- '\010', '\004', '\020', '\100', '\000', '\001', '\020', '\000',
- '\001', '\020', '\210', '\252', '\106', '\034', '\313', '\130',
- '\001', '\004', '\100', '\262', '\043', '\371', '\200', '\002',
- '\066', '\013', '\313', '\235', '\104', '\226', '\000', '\037',
- '\270', '\214', '\101', '\030', '\040', '\201', '\234', '\036',
- '\040', '\247', '\022', '\150', '\332', '\266', '\320', '\212',
- '\327', '\267', '\255', '\025', '\000', '\060', '\345', '\154',
- '\135', '\067', '\253', '\131', '\315', '\142', '\063', '\041',
- '\004', '\360', '\200', '\112', '\035', '\100', '\001', '\012',
- '\074', '\000', '\246', '\022', '\250', '\200', '\002', '\052',
- '\253', '\200', '\012', '\304', '\062', '\131', '\052', '\025',
- '\100', '\001', '\062', '\220', '\200', '\210', '\046', '\204',
- '\001', '\215', '\355', '\026', '\143', '\033', '\233', '\323',
- '\227', '\032', '\045', '\131', '\326', '\105', '\300', '\164',
- '\237', '\005', '\333', '\012', '\174', '\364', '\003', '\025',
- '\140', '\055', '\154', '\101', '\373', '\124', '\274', '\102',
- '\227', '\273', '\006', '\301', '\054', '\136', '\073', '\032',
- '\122', '\010', '\054', '\266', '\262', '\226', '\025', '\055',
- '\001', '\024', '\300', '\325', '\372', '\172', '\365', '\255',
- '\006', '\050', '\300', '\131', '\325', '\353', '\000', '\256',
- '\056', '\266', '\261', '\227', '\125', '\310', '\007', '\376',
- '\353', '\000', '\367', '\106', '\300', '\044', '\011', '\321',
- '\056', '\003', '\066', '\233', '\200', '\017', '\150', '\127',
- '\300', '\304', '\152', '\300', '\004', '\014', '\214', '\140',
- '\203', '\364', '\227', '\130', '\017', '\250', '\157', '\205',
- '\241', '\372', '\336', '\227', '\142', '\125', '\041', '\375',
- '\345', '\152', '\210', '\017', '\014', '\342', '\372', '\172',
- '\200', '\302', '\034', '\005', '\351', '\333', '\124', '\374',
- '\126', '\026', '\237', '\127', '\261', '\225', '\015', '\000',
- '\145', '\127', '\102', '\023', '\311', '\252', '\367', '\040',
- '\063', '\216', '\161', '\211', '\043', '\360', '\337', '\214',
- '\300', '\064', '\304', '\031', '\250', '\100', '\005', '\032',
- '\020', '\000', '\255', '\276', '\215', '\276', '\134', '\375',
- '\100', '\175', '\025', '\362', '\000', '\011', '\070', '\331',
- '\247', '\116', '\176', '\100', '\211', '\213', '\105', '\054',
- '\022', '\047', '\244', '\311', '\116', '\316', '\262', '\004',
- '\244', '\234', '\220', '\320', '\142', '\270', '\130', '\352',
- '\365', '\162', '\115', '\251', '\074', '\145', '\142', '\131',
- '\325', '\312', '\006', '\251', '\157', '\004', '\224', '\274',
- '\344', '\204', '\270', '\364', '\254', '\033', '\346', '\200',
- '\166', '\347', '\214', '\000', '\245', '\052', '\204', '\253',
- '\011', '\050', '\300', '\000', '\012', '\220', '\000', '\256',
- '\152', '\204', '\312', '\140', '\276', '\163', '\004', '\066',
- '\040', '\144', '\065', '\337', '\171', '\002', '\124', '\255',
- '\352', '\231', '\167', '\254', '\146', '\064', '\207', '\261',
- '\276', '\017', '\040', '\263', '\233', '\033', '\035', '\201',
- '\012', '\024', '\370', '\312', '\220', '\346', '\263', '\237',
- '\047', '\315', '\123', '\024', '\167', '\071', '\261', '\133',
- '\245', '\264', '\243', '\325', '\314', '\331', '\362', '\246',
- '\271', '\276', '\102', '\256', '\300', '\006', '\042', '\040',
- '\350', '\315', '\316', '\027', '\311', '\255', '\366', '\252',
- '\130', '\005', '\334', '\341', '\234', '\006', '\330', '\315',
- '\130', '\315', '\365', '\206', '\211', '\125', '\135', '\355',
- '\272', '\027', '\304', '\164', '\236', '\363', '\206', '\347',
- '\313', '\352', '\326', '\146', '\366', '\271', '\220', '\155',
- '\155', '\201', '\075', '\300', '\125', '\043', '\017', '\013',
- '\303', '\152', '\346', '\362', '\110', '\056', '\034', '\000',
- '\107', '\273', '\027', '\002', '\314', '\066', '\361', '\116',
- '\372', '\033', '\132', '\107', '\223', '\066', '\247', '\066',
- '\375', '\060', '\115', '\106', '\174', '\142', '\053', '\027',
- '\113', '\302', '\206', '\176', '\053', '\266', '\304', '\272',
- '\141', '\000', '\210', '\204', '\001', '\164', '\116', '\152',
- '\016', '\213', '\225', '\347', '\075', '\367', '\131', '\041',
- '\006', '\140', '\153', '\273', '\217', '\225', '\352', '\012',
- '\024', '\173', '\044', '\350', '\156', '\363', '\264', '\325',
- '\274', '\357', '\107', '\163', '\065', '\322', '\304', '\032',
- '\111', '\266', '\043', '\160', '\342', '\137', '\277', '\145',
- '\002', '\222', '\036', '\070', '\042', '\035', '\015', '\000',
- '\160', '\143', '\125', '\002', '\014', '\330', '\211', '\232',
- '\063', '\340', '\134', '\101', '\167', '\365', '\276', '\122',
- '\255', '\264', '\220', '\157', '\173', '\147', '\131', '\323',
- '\127', '\343', '\134', '\345', '\070', '\004', '\050', '\356',
- '\140', '\000', '\253', '\027', '\003', '\141', '\065', '\337',
- '\113', '\061', '\360', '\126', '\120', '\033', '\104', '\346',
- '\004', '\200', '\371', '\113', '\175', '\142', '\220', '\340',
- '\036', '\327', '\330', '\100', '\127', '\067', '\133', '\133',
- '\134', '\001', '\225', '\132', '\032', '\255', '\337', '\376',
- '\042', '\152', '\125', '\273', '\125', '\155', '\052', '\240',
- '\277', '\043', '\341', '\052', '\155', '\311', '\013', '\323',
- '\131', '\317', '\172', '\264', '\245', '\045', '\055', '\306',
- '\041', '\200', '\161', '\205', '\144', '\205', '\133', '\375',
- '\125', '\365', '\004', '\010', '\115', '\361', '\145', '\063',
- '\034', '\252', '\333', '\242', '\200', '\002', '\124', '\252',
- '\000', '\012', '\160', '\153', '\300', '\064', '\336', '\326',
- '\215', '\055', '\034', '\201', '\013', '\154', '\140', '\003',
- '\166', '\147', '\271', '\171', '\235', '\234', '\161', '\246',
- '\122', '\035', '\355', '\020', '\321', '\357', '\027', '\267',
- '\245', '\134', '\307', '\362', '\174', '\044', '\214', '\005',
- '\372', '\306', '\057', '\160', '\031', '\017', '\134', '\340',
- '\361', '\027', '\260', '\100', '\157', '\335', '\276', '\223',
- '\276', '\003', '\075', '\361', '\002', '\030', '\200', '\151',
- '\271', '\245', '\365', '\214', '\073', '\173', '\044', '\005',
- '\150', '\273', '\332', '\045', '\230', '\054', '\315', '\177',
- '\021', '\002', '\030', '\240', '\000', '\007', '\342', '\236',
- '\171', '\323', '\042', '\200', '\002', '\213', '\345', '\100',
- '\340', '\035', '\133', '\000', '\011', '\244', '\176', '\365',
- '\102', '\007', '\260', '\210', '\161', '\053', '\022', '\142',
- '\257', '\171', '\323', '\356', '\366', '\061', '\222', '\331',
- '\374', '\334', '\252', '\370', '\236', '\370', '\020', '\314',
- '\314', '\361', '\201', '\277', '\131', '\330', '\016', '\037',
- '\370', '\363', '\175', '\351', '\363', '\377', '\015', '\000',
- '\015', '\250', '\264', '\000', '\015', '\140', '\151', '\120',
- '\070', '\115', '\345', '\003', '\107', '\367', '\261', '\120',
- '\375', '\362', '\255', '\203', '\037', '\376', '\061', '\217',
- '\337', '\000', '\005', '\361', '\062', '\302', '\061', '\333',
- '\174', '\365', '\023', '\013', '\263', '\340', '\007', '\153',
- '\130', '\061', '\233', '\170', '\371', '\067', '\265', '\370',
- '\120', '\335', '\157', '\102', '\332', '\257', '\377', '\053',
- '\147', '\371', '\002', '\131', '\046', '\155', '\152', '\007',
- '\000', '\134', '\105', '\125', '\213', '\366', '\066', '\042',
- '\061', '\142', '\273', '\027', '\022', '\031', '\241', '\200',
- '\150', '\106', '\132', '\331', '\324', '\150', '\025', '\066',
- '\200', '\016', '\130', '\141', '\315', '\127', '\201', '\032',
- '\347', '\125', '\047', '\247', '\130', '\016', '\220', '\001',
- '\101', '\046', '\144', '\210', '\266', '\123', '\010', '\110',
- '\200', '\022', '\230', '\140', '\031', '\101', '\151', '\025',
- '\006', '\201', '\050', '\270', '\177', '\231', '\261', '\202',
- '\014', '\110', '\202', '\262', '\146', '\152', '\303', '\222',
- '\141', '\007', '\147', '\054', '\073', '\106', '\203', '\023',
- '\100', '\144', '\043', '\230', '\115', '\330', '\026', '\001',
- '\034', '\147', '\202', '\026', '\326', '\203', '\077', '\210',
- '\165', '\101', '\310', '\154', '\103', '\010', '\000', '\003',
- '\310', '\203', '\106', '\350', '\134', '\315', '\247', '\204',
- '\076', '\350', '\134', '\244', '\225', '\161', '\146', '\167',
- '\204', '\040', '\106', '\001', '\016', '\120', '\000', '\302',
- '\265', '\155', '\162', '\123', '\155', '\040', '\325', '\020',
- '\340', '\027', '\201', '\335', '\126', '\141', '\211', '\007',
- '\206', '\134', '\210', '\177', '\144', '\210', '\146', '\115',
- '\310', '\155', '\145', '\270', '\203', '\371', '\066', '\177',
- '\100', '\270', '\156', '\156', '\110', '\204', '\160', '\170',
- '\177', '\006', '\321', '\204', '\155', '\110', '\207', '\230',
- '\101', '\000', '\210', '\244', '\200', '\023', '\210', '\115',
- '\001', '\007', '\175', '\106', '\301', '\207', '\157', '\050',
- '\210', '\162', '\110', '\210', '\110', '\210', '\115', '\206',
- '\230', '\206', '\004', '\067', '\022', '\117', '\025', '\125',
- '\062', '\310', '\201', '\037', '\070', '\001', '\042', '\010',
- '\133', '\106', '\321', '\150', '\106', '\066', '\206', '\226',
- '\150', '\206', '\231', '\130', '\207', '\330', '\264', '\211',
- '\344', '\107', '\202', '\117', '\270', '\162', '\025', '\026',
- '\141', '\023', '\120', '\200', '\104', '\206', '\020', '\115',
- '\130', '\137', '\052', '\107', '\142', '\023', '\001', '\056',
- '\201', '\120', '\010', '\206', '\240', '\010', '\201', '\000',
- '\010', '\260', '\150', '\010', '\177', '\160', '\056', '\212',
- '\140', '\056', '\204', '\140', '\010', '\207', '\240', '\213',
- '\274', '\150', '\056', '\260', '\330', '\213', '\200', '\260',
- '\213', '\302', '\270', '\213', '\211', '\260', '\007', '\264',
- '\310', '\213', '\200', '\220', '\214', '\302', '\030', '\214',
- '\346', '\062', '\010', '\344', '\322', '\007', '\200', '\000',
- '\215', '\204', '\040', '\010', '\202', '\060', '\056', '\325',
- '\170', '\215', '\321', '\010', '\060', '\210', '\220', '\007',
- '\347', '\142', '\010', '\310', '\210', '\215', '\322', '\070',
- '\056', '\202', '\160', '\213', '\343', '\002', '\010', '\201',
- '\240', '\215', '\353', '\002', '\215', '\374', '\062', '\216',
- '\206', '\220', '\215', '\354', '\010', '\214', '\206', '\200',
- '\010', '\313', '\010', '\213', '\364', '\230', '\214', '\206',
- '\120', '\217', '\343', '\162', '\213', '\260', '\230', '\010',
- '\200', '\040', '\010', '\320', '\070', '\010', '\176', '\260',
- '\214', '\371', '\370', '\217', '\320', '\350', '\217', '\201',
- '\140', '\214', '\172', '\220', '\214', '\210', '\300', '\217',
- '\206', '\340', '\217', '\311', '\010', '\221', '\375', '\370',
- '\007', '\011', '\371', '\220', '\172', '\120', '\221', '\010',
- '\151', '\214', '\372', '\330', '\220', '\314', '\350', '\007',
- '\025', '\051', '\010', '\263', '\010', '\213', '\205', '\300',
- '\007', '\037', '\031', '\222', '\017', '\251', '\217', '\022',
- '\171', '\222', '\021', '\211', '\222', '\054', '\271', '\222',
- '\056', '\331', '\217', '\055', '\011', '\223', '\025', '\171',
- '\010', '\201', '\060', '\223', '\046', '\231', '\222', '\206',
- '\060', '\220', '\060', '\371', '\222', '\052', '\271', '\223',
- '\076', '\331', '\223', '\100', '\231', '\222', '\102', '\311',
- '\222', '\030', '\031', '\223', '\101', '\151', '\224', '\103',
- '\311', '\223', '\211', '\160', '\223', '\110', '\331', '\224',
- '\112', '\331', '\224', '\105', '\271', '\222', '\121', '\331',
- '\217', '\013', '\011', '\213', '\350', '\050', '\010', '\124',
- '\211', '\217', '\106', '\131', '\220', '\077', '\311', '\225',
- '\100', '\151', '\010', '\362', '\230', '\221', '\363', '\270',
- '\214', '\273', '\210', '\010', '\141', '\211', '\216', '\032',
- '\251', '\225', '\152', '\131', '\213', '\372', '\010', '\226',
- '\370', '\050', '\217', '\136', '\351', '\225', '\367', '\310',
- '\226', '\153', '\171', '\216', '\165', '\351', '\226', '\164',
- '\011', '\223', '\000', '\171', '\224', '\021', '\271', '\220',
- '\342', '\262', '\214', '\004', '\271', '\214', '\173', '\051',
- '\224', '\016', '\231', '\222', '\207', '\120', '\230', '\006',
- '\171', '\222', '\257', '\030', '\213', '\050', '\211', '\007',
- '\311', '\250', '\010', '\205', '\251', '\223', '\274', '\350',
- '\220', '\205', '\040', '\231', '\043', '\371', '\230', '\205',
- '\211', '\007', '\213', '\171', '\214', '\014', '\171', '\213',
- '\320', '\250', '\010', '\310', '\370', '\231', '\173', '\040',
- '\010', '\273', '\250', '\010', '\216', '\131', '\213', '\114',
- '\111', '\232', '\206', '\060', '\222', '\252', '\371', '\217',
- '\323', '\030', '\213', '\173', '\260', '\231', '\322', '\030',
- '\214', '\016', '\251', '\010', '\372', '\150', '\233', '\217',
- '\151', '\224', '\270', '\011', '\213', '\273', '\311', '\230',
- '\271', '\371', '\233', '\274', '\211', '\224', '\362', '\330',
- '\233', '\304', '\171', '\233', '\306', '\011', '\234', '\276',
- '\031', '\234', '\074', '\131', '\234', '\310', '\311', '\234',
- '\312', '\131', '\213', '\265', '\151', '\222', '\316', '\231',
- '\234', '\324', '\331', '\233', '\051', '\211', '\010', '\322',
- '\171', '\234', '\317', '\131', '\235', '\332', '\151', '\227',
- '\265', '\070', '\234', '\335', '\071', '\235', '\342', '\031',
- '\236', '\344', '\331', '\234', '\345', '\151', '\217', '\016',
- '\111', '\223', '\346', '\271', '\236', '\274', '\051', '\217',
- '\146', '\371', '\230', '\136', '\263', '\023', '\326', '\262',
- '\055', '\010', '\321', '\020', '\040', '\221', '\021', '\017',
- '\104', '\032', '\051', '\041', '\022', '\005', '\221', '\031',
- '\240', '\221', '\161', '\160', '\141', '\022', '\122', '\266',
- '\022', '\254', '\126', '\025', '\127', '\341', '\166', '\122',
- '\021', '\023', '\027', '\240', '\103', '\000', '\220', '\001',
- '\325', '\007', '\000', '\070', '\041', '\173', '\101', '\261',
- '\121', '\121', '\065', '\023', '\041', '\000', '\000', '\042',
- '\000', '\000', '\043', '\000', '\000', '\044', '\000', '\000',
- '\045', '\000', '\000', '\046', '\000', '\000', '\121', '\003',
- '\025', '\051', '\000', '\000', '\052', '\000', '\000', '\053',
- '\000', '\000', '\134', '\061', '\121', '\177', '\362', '\002',
- '\000', '\000', '\003', '\125', '\002', '\000', '\136', '\061',
- '\003', '\000', '\060', '\065', '\065', '\000', '\000', '\066',
- '\000', '\000', '\067', '\000', '\000', '\070', '\000', '\000',
- '\112', '\242', '\003', '\000', '\260', '\003', '\000', '\060',
- '\030', '\075', '\000', '\000', '\140', '\101', '\127', '\072',
- '\121', '\065', '\102', '\340', '\042', '\000', '\100', '\004',
- '\000', '\040', '\026', '\106', '\000', '\000', '\055', '\222',
- '\043', '\111', '\000', '\000', '\112', '\000', '\000', '\144',
- '\301', '\004', '\277', '\001', '\000', '\264', '\362', '\004',
- '\036', '\001', '\000', '\121', '\120', '\036', '\340', '\001',
- '\000', '\202', '\122', '\005', '\000', '\140', '\005', '\254',
- '\122', '\053', '\000', '\200', '\033', '\132', '\000', '\000',
- '\150', '\301', '\005', '\000', '\320', '\005', '\000', '\340',
- '\005', '\000', '\360', '\005', '\000', '\000', '\006', '\000',
- '\020', '\006', '\000', '\040', '\006', '\000', '\060', '\034',
- '\025', '\121', '\006', '\000', '\140', '\006', '\000', '\160',
- '\006', '\000', '\200', '\006', '\000', '\240', '\026', '\152',
- '\000', '\000', '\234', '\301', '\006', '\000', '\360', '\035',
- '\156', '\000', '\000', '\157', '\000', '\000', '\160', '\000',
- '\000', '\161', '\000', '\000', '\162', '\000', '\000', '\163',
- '\000', '\000', '\164', '\000', '\000', '\134', '\143', '\007',
- '\000', '\160', '\007', '\000', '\300', '\026', '\156', '\241',
- '\007', '\000', '\260', '\007', '\000', '\300', '\007', '\000',
- '\320', '\007', '\000', '\340', '\007', '\000', '\360', '\007',
- '\000', '\360', '\017', '\260', '\032', '\253', '\262', '\072',
- '\253', '\264', '\132', '\253', '\266', '\172', '\253', '\270',
- '\172', '\253', '\103', '\021', '\010', '\000', '\340', '\065',
- '\203', '\000', '\000', '\162', '\121', '\010', '\000', '\140',
- '\010', '\000', '\160', '\010', '\074', '\001', '\000', '\211',
- '\000', '\000', '\212', '\000', '\000', '\213', '\000', '\000',
- '\214', '\000', '\000', '\215', '\000', '\000', '\216', '\000',
- '\000', '\166', '\001', '\011', '\000', '\020', '\011', '\000',
- '\040', '\011', '\000', '\060', '\011', '\000', '\100', '\011',
- '\000', '\120', '\011', '\000', '\140', '\011', '\000', '\160',
- '\011', '\000', '\360', '\020', '\231', '\000', '\000', '\232',
- '\000', '\000', '\233', '\000', '\000', '\172', '\321', '\011',
- '\000', '\340', '\011', '\000', '\360', '\011', '\000', '\000',
- '\012', '\000', '\020', '\012', '\000', '\040', '\012', '\000',
- '\060', '\012', '\000', '\100', '\012', '\000', '\120', '\012',
- '\000', '\140', '\012', '\000', '\160', '\012', '\000', '\200',
- '\012', '\000', '\320', '\027', '\252', '\000', '\000', '\253',
- '\000', '\000', '\254', '\000', '\000', '\255', '\000', '\000',
- '\256', '\000', '\000', '\257', '\160', '\024', '\000', '\360',
- '\027', '\262', '\000', '\000', '\201', '\101', '\013', '\000',
- '\120', '\013', '\000', '\100', '\066', '\267', '\000', '\000',
- '\270', '\000', '\000', '\271', '\000', '\000', '\272', '\000',
- '\000', '\273', '\000', '\000', '\274', '\000', '\000', '\275',
- '\000', '\000', '\276', '\000', '\000', '\277', '\000', '\000',
- '\300', '\000', '\000', '\205', '\041', '\014', '\000', '\140',
- '\066', '\304', '\000', '\000', '\305', '\000', '\000', '\306',
- '\000', '\000', '\307', '\000', '\000', '\310', '\000', '\000',
- '\311', '\000', '\000', '\312', '\000', '\000', '\313', '\000',
- '\000', '\314', '\000', '\000', '\315', '\000', '\000', '\316',
- '\000', '\000', '\317', '\000', '\000', '\150', '\023', '\015',
- '\000', '\160', '\030', '\323', '\000', '\000', '\324', '\000',
- '\000', '\325', '\000', '\000', '\326', '\000', '\000', '\327',
- '\000', '\000', '\330', '\000', '\000', '\331', '\000', '\000',
- '\211', '\261', '\015', '\000', '\300', '\015', '\000', '\240',
- '\066', '\336', '\000', '\000', '\337', '\260', '\023', '\113',
- '\143', '\264', '\023', '\321', '\014', '\153', '\333', '\266',
- '\006', '\301', '\266', '\157', '\353', '\266', '\152', '\033',
- '\267', '\164', '\073', '\267', '\166', '\013', '\267', '\167',
- '\053', '\267', '\170', '\273', '\267', '\172', '\333', '\267',
- '\165', '\313', '\267', '\177', '\353', '\267', '\171', '\033',
- '\270', '\204', '\073', '\270', '\206', '\013', '\270', '\207',
- '\053', '\270', '\210', '\273', '\270', '\212', '\333', '\270',
- '\205', '\313', '\270', '\217', '\353', '\270', '\211', '\033',
- '\271', '\224', '\073', '\271', '\226', '\013', '\271', '\227',
- '\053', '\271', '\230', '\273', '\271', '\232', '\333', '\271',
- '\225', '\313', '\271', '\237', '\353', '\271', '\231', '\033',
- '\272', '\244', '\073', '\272', '\246', '\013', '\272', '\247',
- '\053', '\272', '\250', '\273', '\272', '\252', '\333', '\272',
- '\245', '\313', '\272', '\257', '\353', '\272', '\251', '\033',
- '\273', '\264', '\073', '\273', '\266', '\213', '\272', '\012',
- '\221', '\266', '\012', '\161', '\134', '\101', '\005', '\241',
- '\011', '\321', '\241', '\006', '\061', '\121', '\006', '\221',
- '\243', '\171', '\225', '\020', '\071', '\142', '\020', '\141',
- '\152', '\020', '\155', '\152', '\020', '\303', '\141', '\020',
- '\214', '\152', '\020', '\134', '\143', '\020', '\254', '\152',
- '\020', '\306', '\152', '\020', '\326', '\152', '\020', '\347',
- '\152', '\020', '\370', '\152', '\020', '\011', '\153', '\020',
- '\030', '\153', '\020', '\051', '\153', '\020', '\071', '\153',
- '\020', '\113', '\153', '\020', '\133', '\153', '\020', '\341',
- '\260', '\066', '\011', '\061', '\017', '\011', '\301', '\017',
- '\011', '\121', '\000', '\023', '\061', '\211', '\214', '\047',
- '\023', '\023', '\141', '\002', '\023', '\321', '\002', '\023',
- '\141', '\003', '\023', '\021', '\004', '\023', '\201', '\004',
- '\023', '\001', '\005', '\023', '\241', '\005', '\023', '\121',
- '\006', '\023', '\361', '\006', '\023', '\241', '\007', '\023',
- '\061', '\010', '\023', '\141', '\032', '\006', '\341', '\010',
- '\023', '\121', '\011', '\023', '\301', '\011', '\023', '\041',
- '\012', '\023', '\161', '\012', '\023', '\261', '\012', '\023',
- '\361', '\012', '\023', '\121', '\013', '\213', '\063', '\021',
- '\277', '\060', '\021', '\303', '\060', '\021', '\311', '\060',
- '\021', '\317', '\360', '\070', '\023', '\241', '\015', '\023',
- '\101', '\016', '\023', '\221', '\016', '\023', '\361', '\016',
- '\023', '\161', '\017', '\227', '\021', '\021', '\232', '\147',
- '\020', '\005', '\020', '\021', '\247', '\145', '\020', '\011',
- '\020', '\021', '\013', '\020', '\021', '\015', '\020', '\021',
- '\066', '\225', '\146', '\021', '\061', '\001', '\231', '\023',
- '\021', '\027', '\020', '\021', '\031', '\020', '\021', '\033',
- '\020', '\021', '\035', '\020', '\021', '\037', '\020', '\021',
- '\041', '\020', '\021', '\043', '\020', '\021', '\045', '\020',
- '\021', '\047', '\020', '\021', '\051', '\020', '\021', '\053',
- '\020', '\021', '\055', '\320', '\071', '\021', '\021', '\003',
- '\021', '\061', '\003', '\021', '\121', '\003', '\021', '\161',
- '\003', '\021', '\041', '\004', '\021', '\301', '\004', '\021',
- '\221', '\005', '\021', '\121', '\006', '\247', '\023', '\021',
- '\172', '\020', '\021', '\174', '\020', '\021', '\176', '\020',
- '\021', '\200', '\020', '\021', '\202', '\020', '\021', '\204',
- '\020', '\021', '\206', '\020', '\021', '\210', '\260', '\072',
- '\021', '\301', '\010', '\021', '\341', '\010', '\021', '\001',
- '\011', '\021', '\041', '\011', '\021', '\101', '\011', '\021',
- '\141', '\011', '\021', '\201', '\011', '\021', '\241', '\011',
- '\021', '\301', '\011', '\021', '\341', '\011', '\021', '\001',
- '\012', '\021', '\041', '\012', '\257', '\023', '\021', '\246',
- '\020', '\021', '\250', '\020', '\021', '\252', '\020', '\021',
- '\254', '\020', '\021', '\256', '\020', '\021', '\270', '\020',
- '\021', '\274', '\020', '\021', '\307', '\020', '\021', '\322',
- '\020', '\021', '\333', '\020', '\021', '\340', '\220', '\073',
- '\021', '\241', '\016', '\021', '\361', '\016', '\021', '\101',
- '\017', '\021', '\221', '\017', '\021', '\341', '\017', '\062',
- '\354', '\023', '\010', '\340', '\023', '\015', '\340', '\023',
- '\022', '\340', '\023', '\027', '\340', '\023', '\034', '\340',
- '\023', '\041', '\060', '\074', '\076', '\261', '\002', '\076',
- '\001', '\003', '\076', '\121', '\003', '\076', '\241', '\003',
- '\076', '\361', '\003', '\076', '\101', '\004', '\076', '\221',
- '\004', '\076', '\341', '\004', '\076', '\061', '\005', '\076',
- '\201', '\005', '\076', '\321', '\005', '\076', '\041', '\006',
- '\315', '\343', '\023', '\154', '\340', '\023', '\161', '\340',
- '\023', '\166', '\340', '\023', '\173', '\340', '\023', '\200',
- '\340', '\023', '\205', '\340', '\023', '\212', '\340', '\023',
- '\217', '\340', '\023', '\224', '\340', '\023', '\231', '\340',
- '\023', '\236', '\340', '\023', '\243', '\160', '\075', '\076',
- '\321', '\012', '\076', '\041', '\013', '\076', '\161', '\013',
- '\076', '\301', '\013', '\076', '\021', '\014', '\076', '\141',
- '\014', '\076', '\261', '\014', '\076', '\001', '\015', '\076',
- '\121', '\015', '\076', '\241', '\015', '\076', '\361', '\015',
- '\076', '\101', '\016', '\341', '\343', '\023', '\356', '\340',
- '\023', '\363', '\340', '\023', '\370', '\340', '\023', '\375',
- '\340', '\023', '\216', '\145', '\020', '\146', '\065', '\132',
- '\035', '\021', '\001', '\035', '\141', '\001', '\035', '\261',
- '\001', '\035', '\001', '\002', '\035', '\121', '\002', '\353',
- '\323', '\021', '\057', '\320', '\021', '\064', '\320', '\021',
- '\071', '\320', '\021', '\076', '\320', '\021', '\103', '\320',
- '\021', '\110', '\320', '\021', '\115', '\320', '\021', '\122',
- '\320', '\021', '\127', '\320', '\021', '\134', '\320', '\021',
- '\141', '\320', '\021', '\146', '\120', '\077', '\035', '\001',
- '\007', '\035', '\121', '\007', '\035', '\241', '\007', '\035',
- '\361', '\007', '\035', '\101', '\010', '\035', '\221', '\010',
- '\035', '\341', '\010', '\035', '\061', '\011', '\035', '\201',
- '\011', '\035', '\321', '\011', '\035', '\041', '\012', '\035',
- '\161', '\012', '\377', '\323', '\021', '\261', '\320', '\021',
- '\266', '\320', '\021', '\273', '\340', '\323', '\302', '\221',
- '\006', '\151', '\000', '\003', '\146', '\235', '\247', '\143',
- '\135', '\326', '\060', '\140', '\045', '\141', '\220', '\326',
- '\146', '\355', '\025', '\155', '\075', '\006', '\144', '\155',
- '\326', '\064', '\032', '\327', '\163', '\015', '\003', '\123',
- '\143', '\327', '\152', '\175', '\243', '\172', '\155', '\326',
- '\071', '\332', '\327', '\060', '\260', '\243', '\175', '\035',
- '\003', '\060', '\072', '\330', '\154', '\355', '\326', '\061',
- '\000', '\327', '\210', '\135', '\327', '\210', '\235', '\327',
- '\210', '\315', '\327', '\210', '\375', '\327', '\210', '\055',
- '\330', '\156', '\335', '\051', '\150', '\055', '\327', '\145',
- '\055', '\003', '\207', '\215', '\331', '\060', '\040', '\003',
- '\212', '\315', '\331', '\062', '\300', '\330', '\240', '\355',
- '\330', '\240', '\015', '\331', '\240', '\055', '\331', '\240',
- '\115', '\331', '\234', '\075', '\003', '\205', '\355', '\326',
- '\063', '\260', '\331', '\163', '\075', '\003', '\237', '\035',
- '\333', '\242', '\035', '\333', '\244', '\035', '\333', '\246',
- '\035', '\333', '\250', '\035', '\333', '\073', '\072', '\007',
- '\160', '\020', '\006', '\143', '\000', '\250', '\145', '\200',
- '\007', '\143', '\300', '\006', '\141', '\360', '\035', '\161',
- '\120', '\007', '\157', '\100', '\007', '\320', '\001', '\046',
- '\000', '\340', '\006', '\336', '\041', '\006', '\145', '\040',
- '\007', '\163', '\220', '\006', '\147', '\360', '\250', '\145',
- '\302', '\006', '\306', '\175', '\251', '\160', '\060', '\335',
- '\301', '\355', '\006', '\233', '\172', '\334', '\335', '\115',
- '\335', '\170', '\122', '\021', '\311', '\275', '\334', '\323',
- '\155', '\335', '\150', '\260', '\251', '\277', '\135', '\047',
- '\156', '\300', '\006', '\145', '\140', '\006', '\354', '\115',
- '\047', '\371', '\041', '\007', '\352', '\035', '\336', '\163',
- '\300', '\334', '\366', '\075', '\007', '\234', '\001', '\007',
- '\154', '\120', '\007', '\231', '\072', '\006', '\146', '\162',
- '\046', '\205', '\232', '\007', '\160', '\200', '\006', '\371',
- '\041', '\251', '\351', '\375', '\006', '\025', '\061', '\007',
- '\306', '\075', '\007', '\206', '\252', '\007', '\323', '\035',
- '\251', '\366', '\001', '\250', '\164', '\160', '\007', '\221',
- '\112', '\007', '\150', '\120', '\047', '\200', '\312', '\046',
- '\165', '\160', '\251', '\146', '\220', '\006', '\166', '\000',
- '\250', '\325', '\315', '\026', '\373', '\061', '\342', '\217',
- '\132', '\006', '\367', '\375', '\334', '\151', '\002', '\250',
- '\002', '\316', '\006', '\366', '\201', '\251', '\362', '\041',
- '\046', '\157', '\000', '\343', '\217', '\012', '\337', '\163',
- '\220', '\251', '\145', '\220', '\334', '\141', '\300', '\250',
- '\147', '\120', '\047', '\141', '\240', '\337', '\224', '\132',
- '\007', '\145', '\220', '\337', '\151', '\020', '\343', '\101',
- '\336', '\037', '\000', '\260', '\244', '\057', '\342', '\244',
- '\120', '\052', '\245', '\000', '\100', '\245', '\126', '\212',
- '\245', '\000', '\240', '\245', '\146', '\321', '\245', '\137',
- '\032', '\246', '\346', '\061', '\005', '\144', '\012', '\000',
- '\146', '\212', '\246', '\127', '\240', '\246', '\154', '\272',
- '\247', '\162', '\020', '\006', '\153', '\120', '\006', '\164',
- '\000', '\337', '\362', '\275', '\247', '\300', '\275', '\006',
- '\016', '\336', '\326', '\206', '\052', '\006', '\145', '\076',
- '\006', '\147', '\116', '\007', '\366', '\175', '\006', '\353',
- '\175', '\331', '\144', '\055', '\327', '\162', '\060', '\006',
- '\336', '\301', '\251', '\224', '\102', '\335', '\002', '\136',
- '\047', '\103', '\216', '\336', '\152', '\036', '\336', '\173',
- '\332', '\247', '\024', '\001', '\000', '\035', '\076', '\250',
- '\205', '\172', '\250', '\000', '\220', '\250', '\213', '\332',
- '\250', '\317', '\015', '\251', '\222', '\112', '\251', '\226',
- '\212', '\251', '\232', '\312', '\251', '\000', '\340', '\251',
- '\240', '\052', '\252', '\000', '\100', '\252', '\162', '\016',
- '\334', '\145', '\160', '\350', '\154', '\176', '\251', '\243',
- '\036', '\334', '\167', '\236', '\347', '\172', '\115', '\007',
- '\151', '\300', '\006', '\370', '\241', '\347', '\151', '\020',
- '\003', '\067', '\260', '\243', '\146', '\035', '\006', '\060',
- '\172', '\353', '\126', '\162', '\353', '\136', '\161', '\353',
- '\064', '\172', '\353', '\123', '\163', '\353', '\067', '\172',
- '\353', '\071', '\172', '\353', '\266', '\016', '\003', '\141',
- '\320', '\243', '\267', '\256', '\044', '\267', '\256', '\247',
- '\267', '\316', '\247', '\267', '\076', '\034', '\267', '\136',
- '\021', '\267', '\016', '\250', '\267', '\056', '\250', '\146',
- '\055', '\006', '\271', '\016', '\003', '\142', '\260', '\353',
- '\334', '\336', '\353', '\334', '\376', '\353', '\334', '\036',
- '\354', '\334', '\076', '\354', '\334', '\136', '\354', '\334',
- '\176', '\354', '\142', '\240', '\354', '\334', '\316', '\354',
- '\334', '\356', '\354', '\334', '\016', '\355', '\334', '\056',
- '\355', '\334', '\116', '\355', '\334', '\156', '\355', '\334',
- '\216', '\355', '\060', '\060', '\006', '\333', '\076', '\006',
- '\336', '\076', '\006', '\340', '\076', '\006', '\342', '\076',
- '\006', '\344', '\076', '\006', '\346', '\076', '\006', '\350',
- '\076', '\006', '\307', '\076', '\006', '\354', '\076', '\006',
- '\356', '\076', '\006', '\360', '\076', '\006', '\362', '\076',
- '\006', '\364', '\076', '\006', '\366', '\036', '\334', '\057',
- '\272', '\357', '\372', '\116', '\006', '\333', '\116', '\006',
- '\336', '\116', '\006', '\340', '\116', '\006', '\342', '\116',
- '\006', '\344', '\116', '\006', '\346', '\116', '\006', '\350',
- '\116', '\006', '\307', '\116', '\006', '\354', '\116', '\006',
- '\356', '\116', '\006', '\360', '\116', '\006', '\362', '\116',
- '\006', '\364', '\116', '\006', '\366', '\036', '\353', '\146',
- '\115', '\006', '\372', '\136', '\006', '\333', '\136', '\006',
- '\336', '\136', '\006', '\340', '\136', '\006', '\342', '\136',
- '\006', '\344', '\136', '\006', '\346', '\136', '\006', '\350',
- '\136', '\006', '\307', '\136', '\006', '\354', '\136', '\006',
- '\356', '\136', '\006', '\360', '\136', '\006', '\362', '\136',
- '\006', '\364', '\316', '\037', '\146', '\135', '\006', '\370',
- '\036', '\337', '\031', '\157', '\006', '\333', '\156', '\006',
- '\336', '\156', '\006', '\340', '\156', '\006', '\342', '\156',
- '\006', '\344', '\156', '\006', '\346', '\156', '\006', '\350',
- '\156', '\006', '\307', '\156', '\006', '\354', '\156', '\006',
- '\356', '\156', '\006', '\360', '\156', '\006', '\362', '\056',
- '\020', '\133', '\157', '\357', '\146', '\200', '\357', '\146',
- '\040', '\250', '\302', '\002', '\150', '\023', '\201', '\054',
- '\025', '\307', '\055', '\331', '\362', '\367', '\370', '\206',
- '\055', '\322', '\042', '\370', '\043', '\261', '\124', '\370',
- '\060', '\237', '\015', '\021', '\370', '\312', '\002',
-
-};
-
-static const char file_cursor[] = {
- '\037', '\235', '\214', '\001', '\314', '\214', '\201', '\203',
- '\000', '\200', '\301', '\000', '\006', '\023', '\032', '\044',
- '\227', '\020', '\121', '\102', '\001', '\012', '\023', '\222',
- '\111', '\310', '\006', '\041', '\000', '\002', '\012', '\055',
- '\042', '\030', '\140', '\020', '\232', '\306', '\210', '\006',
- '\151', '\114', '\060', '\210', '\015', '\043', '\000', '\020',
- '\040', '\001', '\020', '\261', '\310', '\000', '\203', '\101',
- '\040', '\051', '\341', '\100', '\004', '\000', '\045', '\203',
- '\101', '\100', '\051', '\321', '\045', '\060', '\010', '\154',
- '\103', '\102', '\213', '\012', '\047', '\032', '\104', '\125',
- '\002', '\344', '\116', '\220', '\001', '\024', '\044', '\124',
- '\241', '\320', '\206', '\305', '\032', '\077', '\165', '\044',
- '\014', '\242', '\120', '\251', '\101', '\044', '\012', '\327',
- '\044', '\234', '\242', '\320', '\111', '\102', '\060', '\135',
- '\023', '\266', '\121', '\370', '\257', '\354', '\077', '\073',
- '\012', '\033', '\200', '\014', '\224', '\160', '\310', '\023',
- '\050', '\131', '\244', '\044', '\071', '\202', '\204', '\012',
- '\000', '\052', '\150', '\312', '\314', '\051', '\003', '\102',
- '\304', '\031', '\066', '\171', '\340', '\240', '\231', '\043',
- '\002', '\104', '\030', '\071', '\174', '\353', '\270', '\051',
- '\343', '\146', '\114', '\235', '\066', '\142', '\312', '\040',
- '\236', '\010', '\345', '\111', '\022', '\047', '\124', '\276',
- '\114', '\111', '\242', '\245', '\010', '\000', '\043', '\117',
- '\060', '\003', '\160', '\054', '\147', '\316', '\033', '\071',
- '\000', '\256', '\024', '\231', '\133', '\027', '\200', '\224',
- '\042', '\123', '\236', '\060', '\251', '\102', '\045', '\111',
- '\150', '\327', '\260', '\145', '\323', '\266', '\355', '\344',
- '\013', '\026', '\334', '\261', '\147', '\327', '\016', '\375',
- '\045', '\013', '\000', '\054', '\137', '\220', '\254', '\246',
- '\153', '\067', '\112', '\225', '\040', '\104', '\276', '\134',
- '\111', '\102', '\204', '\012', '\326', '\224', '\330', '\041',
- '\044', '\214', '\220', '\320', '\354', '\277', '\170', '\377',
- '\014', '\052', '\055', '\233', '\021', '\200', '\166', '\356',
- '\017', '\314', '\143', '\137', '\317', '\276', '\275', '\173',
- '\244', '\006', '\065', '\001', '\320', '\203', '\050', '\222',
- '\041', '\104', '\171', '\022', '\105', '\072', '\224', '\150',
- '\116', '\240', '\110', '\200', '\070', '\042', '\207', '\040',
- '\221', '\004', '\362', '\110', '\037', '\205', '\104', '\222',
- '\110', '\040', '\174', '\030', '\022', '\211', '\042', '\202',
- '\040', '\250', '\040', '\203', '\016', '\102', '\070', '\140',
- '\044', '\203', '\024', '\162', '\041', '\041', '\205', '\350',
- '\161', '\210', '\175', '\370', '\325', '\307', '\137', '\200',
- '\221', '\064', '\022', '\310', '\037', '\217', '\104', '\342',
- '\210', '\040', '\376', '\225', '\030', '\310', '\205', '\053',
- '\172', '\350', '\142', '\036', '\365', '\255', '\230', '\307',
- '\207', '\013', '\342', '\121', '\037', '\204', '\170', '\174',
- '\210', '\010', '\042', '\072', '\106', '\362', '\143', '\203',
- '\000', '\072', '\262', '\307', '\207', '\006', '\336', '\270',
- '\337', '\041', '\101', '\376', '\110', '\037', '\206', '\215',
- '\350', '\241', '\337', '\040', '\215', '\320', '\250', '\340',
- '\041', '\371', '\135', '\231', '\345', '\041', '\370', '\351',
- '\307', '\337', '\226', '\135', '\356', '\027', '\046', '\227',
- '\133', '\046', '\142', '\045', '\231', '\136', '\046', '\262',
- '\107', '\202', '\205', '\164', '\350', '\240', '\041', '\206',
- '\350', '\341', '\140', '\041', '\130', '\176', '\170', '\337',
- '\232', '\113', '\312', '\051', '\044', '\042', '\162', '\374',
- '\007', '\310', '\043', '\175', '\002', '\010', '\111', '\240',
- '\177', '\022', '\372', '\210', '\236', '\164', '\052', '\171',
- '\337', '\223', '\367', '\225', '\251', '\344', '\041', '\114',
- '\326', '\367', '\343', '\205', '\202', '\064', '\162', '\041',
- '\225', '\176', '\070', '\042', '\150', '\246', '\202', '\322',
- '\341', '\047', '\044', '\236', '\012', '\372', '\147', '\221',
- '\200', '\100', '\122', '\340', '\241', '\372', '\041', '\022',
- '\147', '\252', '\206', '\064', '\011', '\244', '\244', '\370',
- '\331', '\371', '\352', '\176', '\211', '\000', '\122', '\137',
- '\200', '\177', '\350', '\147', '\040', '\211', '\206', '\034',
- '\202', '\242', '\230', '\200', '\050', '\262', '\344', '\037',
- '\213', '\354', '\351', '\152', '\217', '\173', '\006', '\073',
- '\041', '\261', '\017', '\012', '\162', '\307', '\177', '\013',
- '\332', '\101', '\240', '\205', '\004', '\026', '\262', '\310',
- '\205', '\326', '\036', '\353', '\043', '\042', '\174', '\024',
- '\033', '\110', '\043', '\174', '\060', '\162', '\252', '\035',
- '\377', '\075', '\022', '\110', '\035', '\004', '\232', '\153',
- '\045', '\043', '\204', '\144', '\311', '\056', '\221', '\155',
- '\036', '\151', '\237', '\041', '\174', '\044', '\310', '\345',
- '\036', '\016', '\376', '\230', '\207', '\237', '\216', '\340',
- '\101', '\240', '\201', '\055', '\366', '\172', '\041', '\227',
- '\317', '\056', '\051', '\255', '\261', '\260', '\042', '\353',
- '\144', '\175', '\215', '\246', '\251', '\347', '\037', '\375',
- '\336', '\012', '\111', '\037', '\204', '\104', '\362', '\010',
- '\040', '\365', '\132', '\034', '\210', '\225', '\203', '\264',
- '\133', '\037', '\207', '\201', '\230', '\332', '\161', '\251',
- '\221', '\160', '\030', '\007', '\040', '\030', '\022', '\022',
- '\307', '\177', '\034', '\122', '\034', '\311', '\037', '\220',
- '\144', '\134', '\252', '\313', '\134', '\146', '\314', '\245',
- '\035', '\011', '\226', '\132', '\107', '\316', '\220', '\074',
- '\032', '\351', '\236', '\172', '\010', '\313', '\137', '\320',
- '\264', '\336', '\101', '\240', '\040', '\216', '\034', '\214',
- '\364', '\231', '\146', '\246', '\151', '\145', '\257', '\133',
- '\036', '\342', '\041', '\044', '\120', '\043', '\002', '\011',
- '\227', '\044', '\342', '\232', '\342', '\256', '\232', '\152',
- '\175', '\152', '\213', '\001', '\136', '\150', '\240', '\214',
- '\001', '\132', '\231', '\344', '\207', '\301', '\006', '\031',
- '\310', '\042', '\056', '\227', '\052', '\063', '\044', '\312',
- '\006', '\313', '\354', '\332', '\112', '\012', '\302', '\110',
- '\220', '\110', '\027', '\034', '\354', '\301', '\153', '\257',
- '\174', '\245', '\337', '\211', '\034', '\102', '\261', '\042',
- '\220', '\326', '\253', '\310', '\217', '\012', '\311', '\007',
- '\022', '\007', '\011', '\361', '\220', '\320', '\157', '\006',
- '\341', '\221', '\220', '\040', '\011', '\051', '\016', '\000',
- '\051', '\011', '\361', '\222', '\020', '\063', '\011', '\171',
- '\223', '\220', '\076', '\011', '\151', '\140', '\221', '\123',
- '\006', '\131', '\141', '\221', '\034', '\026', '\111', '\142',
- '\221', '\053', '\026', '\071', '\143', '\221', '\070', '\026',
- '\351', '\143', '\221', '\006', '\063', '\351', '\060', '\223',
- '\025', '\063', '\331', '\061', '\223', '\044', '\063', '\311',
- '\062', '\223', '\064', '\063', '\311', '\063', '\223', '\004',
- '\034', '\001', '\040', '\103', '\361', '\120', '\024', '\017',
- '\107', '\361', '\216', '\024', '\317', '\112', '\361', '\312',
- '\024', '\257', '\116', '\361', '\010', '\230', '\204', '\202',
- '\111', '\074', '\230', '\104', '\205', '\111', '\154', '\230',
- '\204', '\210', '\111', '\244', '\230', '\104', '\214', '\111',
- '\342', '\230', '\044', '\100', '\001', '\006', '\201', '\200',
- '\076', '\000', '\076', '\254', '\157', '\305', '\372', '\162',
- '\254', '\357', '\310', '\372', '\256', '\254', '\257', '\314',
- '\372', '\352', '\254', '\217', '\200', '\001', '\006', '\241',
- '\300', '\077', '\000', '\110', '\370', '\037', '\032', '\376',
- '\207', '\210', '\377', '\241', '\342', '\177', '\304', '\370',
- '\037', '\071', '\376', '\007', '\200', '\003', '\030', '\204',
- '\003', '\016', '\004', '\000', '\017', '\042', '\310', '\205',
- '\010', '\342', '\041', '\202', '\230', '\210', '\240', '\051',
- '\042', '\150', '\214', '\010', '\202', '\043', '\202', '\376',
- '\210', '\240', '\006', '\012', '\002', '\000', '\035', '\220',
- '\120', '\013', '\044', '\324', '\003', '\011', '\035', '\101',
- '\102', '\123', '\220', '\120', '\027', '\044', '\224', '\006',
- '\011', '\345', '\101', '\102', '\011', '\034', '\105', '\006',
- '\107', '\221', '\302', '\121', '\334', '\160', '\024', '\107',
- '\034', '\305', '\025', '\107', '\161', '\306', '\121', '\334',
- '\161', '\024', '\007', '\130', '\105', '\004', '\126', '\321',
- '\201', '\125', '\260', '\140', '\025', '\074', '\130', '\305',
- '\020', '\126', '\061', '\205', '\125', '\200', '\141', '\025',
- '\157', '\130', '\105', '\037', '\126', '\321', '\300', '\002',
- '\014', '\242', '\203', '\055', '\002', '\100', '\013', '\136',
- '\264', '\203', '\027', '\055', '\341', '\105', '\130', '\170',
- '\021', '\032', '\136', '\374', '\206', '\027', '\377', '\341',
- '\305', '\006', '\060', '\300', '\040', '\037', '\170', '\043',
- '\000', '\132', '\040', '\307', '\037', '\310', '\261', '\011',
- '\162', '\374', '\202', '\034', '\335', '\040', '\107', '\107',
- '\310', '\261', '\023', '\162', '\334', '\205', '\034', '\267',
- '\041', '\307', '\175', '\310', '\361', '\002', '\152', '\001',
- '\300', '\015', '\022', '\171', '\205', '\104', '\336', '\041',
- '\221', '\227', '\110', '\344', '\055', '\022', '\171', '\215',
- '\104', '\336', '\043', '\221', '\021', '\160', '\200', '\101',
- '\132', '\240', '\111', '\000', '\034', '\241', '\223', '\145',
- '\350', '\144', '\040', '\072', '\031', '\212', '\116', '\366',
- '\242', '\223', '\335', '\350', '\144', '\076', '\072', '\231',
- '\201', '\364', '\000', '\240', '\006', '\256', '\254', '\202',
- '\053', '\323', '\340', '\312', '\100', '\270', '\062', '\022',
- '\256', '\214', '\205', '\053', '\213', '\341', '\312', '\156',
- '\270', '\062', '\037', '\256', '\314', '\200', '\166', '\346',
- '\070', '\314', '\042', '\014', '\263', '\014', '\303', '\054',
- '\304', '\060', '\047', '\061', '\314', '\131', '\014', '\323',
- '\005', '\334', '\001', '\000', '\027', '\104', '\140', '\020',
- '\134', '\020', '\301', '\040', '\007', '\300', '\301', '\003',
- '\170', '\360', '\001', '\037', '\370', '\340', '\003', '\374',
- '\170', '\000', '\076', '\016', '\000', '\217', '\001', '\224',
- '\163', '\234', '\341', '\374', '\146', '\067', '\267', '\231',
- '\315', '\007', '\300', '\343', '\003', '\370', '\370', '\001',
- '\077', '\376', '\340', '\017', '\177', '\374', '\201', '\037',
- '\077', '\300', '\307', '\007', '\340', '\341', '\116', '\161',
- '\202', '\363', '\007', '\366', '\244', '\247', '\074', '\341',
- '\351', '\116', '\000', '\300', '\100', '\202', '\000', '\370',
- '\000', '\060', '\366', '\371', '\200', '\160', '\002', '\343',
- '\000', '\037', '\134', '\036', '\016', '\006', '\300', '\201',
- '\000', '\070', '\040', '\000', '\016', '\234', '\011', '\070',
- '\000', '\200', '\017', '\000', '\370', '\003', '\020', '\177',
- '\000', '\307', '\037', '\342', '\211', '\117', '\176', '\174',
- '\000', '\034', '\014', '\305', '\307', '\003', '\370', '\160',
- '\000', '\037', '\034', '\340', '\003', '\002', '\320', '\044',
- '\106', '\302', '\363', '\017', '\014', '\330', '\024', '\003',
- '\132', '\340', '\001', '\006', '\376', '\061', '\000', '\236',
- '\372', '\264', '\247', '\003', '\220', '\234', '\344', '\374',
- '\021', '\000', '\242', '\022', '\225', '\037', '\000', '\220',
- '\034', '\006', '\170', '\240', '\205', '\233', '\356', '\024',
- '\000', '\377', '\070', '\350', '\120', '\213', '\112', '\125',
- '\241', '\102', '\025', '\250', '\077', '\345', '\051', '\116',
- '\300', '\061', '\200', '\010', '\030', '\200', '\074', '\056',
- '\301', '\210', '\000', '\170', '\272', '\321', '\162', '\346',
- '\343', '\000', '\336', '\061', '\313', '\007', '\376', '\201',
- '\326', '\001', '\034', '\201', '\003', '\104', '\040', '\100',
- '\134', '\343', '\372', '\217', '\017', '\024', '\201', '\002',
- '\167', '\315', '\053', '\005', '\352', '\072', '\127', '\271',
- '\022', '\340', '\255', '\337', '\350', '\103', '\140', '\003',
- '\313', '\215', '\016', '\374', '\343', '\017', '\207', '\075',
- '\354', '\140', '\373', '\220', '\130', '\304', '\376', '\241',
- '\260', '\213', '\015', '\054', '\107', '\070', '\062', '\002',
- '\004', '\214', '\200', '\000', '\043', '\020', '\300', '\010',
- '\002', '\060', '\212', '\321', '\000', '\140', '\034', '\017',
- '\230', '\054', '\000', '\070', '\362', '\217', '\037', '\224',
- '\066', '\075', '\351', '\171', '\007', '\014', '\336', '\201',
- '\203', '\167', '\160', '\340', '\035', '\016', '\170', '\307',
- '\001', '\336', '\061', '\200', '\167', '\374', '\300', '\266',
- '\266', '\115', '\117', '\132', '\315', '\142', '\120', '\203',
- '\022', '\040', '\006', '\010', '\210', '\001', '\004', '\142',
- '\000', '\202', '\030', '\000', '\041', '\006', '\200', '\210',
- '\001', '\077', '\142', '\320', '\333', '\203', '\302', '\240',
- '\264', '\245', '\005', '\000', '\074', '\244', '\313', '\200',
- '\173', '\160', '\340', '\036', '\070', '\270', '\007', '\034',
- '\356', '\001', '\216', '\173', '\000', '\343', '\036', '\374',
- '\000', '\257', '\170', '\245', '\273', '\333', '\262', '\300',
- '\344', '\274', '\000', '\100', '\057', '\114', '\342', '\212',
- '\004', '\001', '\100', '\041', '\000', '\033', '\205', '\211',
- '\101', '\352', '\132', '\127', '\140', '\004', '\300', '\276',
- '\370', '\275', '\257', '\176', '\231', '\221', '\201', '\302',
- '\252', '\024', '\036', '\020', '\035', '\200', '\175', '\033',
- '\333', '\130', '\140', '\000', '\300', '\300', '\010', '\076',
- '\260', '\202', '\023', '\014', '\335', '\037', '\000', '\103',
- '\300', '\020', '\176', '\260', '\204', '\043', '\334', '\323',
- '\362', '\036', '\026', '\041', '\375', '\370', '\103', '\001',
- '\200', '\120', '\217', '\057', '\124', '\000', '\012', '\325',
- '\270', '\002', '\155', '\252', '\120', '\205', '\152', '\124',
- '\241', '\002', '\124', '\250', '\307', '\025', '\012', '\000',
- '\205', '\176', '\174', '\041', '\000', '\100', '\110', '\254',
- '\205', '\147', '\114', '\143', '\357', '\070', '\067', '\251',
- '\070', '\106', '\052', '\122', '\215', '\032', '\200', '\031',
- '\014', '\040', '\006', '\002', '\270', '\361', '\215', '\247',
- '\073', '\135', '\174', '\004', '\300', '\310', '\374', '\030',
- '\100', '\222', '\103', '\030', '\302', '\177', '\074', '\300',
- '\311', '\116', '\276', '\207', '\003', '\210', '\054', '\335',
- '\052', '\203', '\343', '\310', '\007', '\010', '\247', '\007',
- '\074', '\340', '\000', '\010', '\342', '\040', '\233', '\140',
- '\306', '\101', '\227', '\267', '\034', '\316', '\161', '\136',
- '\371', '\203', '\372', '\304', '\247', '\075', '\355', '\071',
- '\120', '\175', '\272', '\031', '\236', '\362', '\134', '\363',
- '\075', '\363', '\171', '\322', '\054', '\077', '\300', '\034',
- '\031', '\230', '\300', '\014', '\222', '\101', '\202', '\074',
- '\220', '\040', '\002', '\042', '\030', '\107', '\014', '\374',
- '\361', '\001', '\145', '\120', '\300', '\320', '\206', '\126',
- '\107', '\005', '\226', '\101', '\203', '\155', '\066', '\230',
- '\320', '\367', '\310', '\301', '\066', '\356', '\320', '\216',
- '\066', '\364', '\343', '\015', '\371', '\060', '\303', '\074',
- '\346', '\120', '\332', '\165', '\324', '\300', '\323', '\236',
- '\336', '\307', '\015', '\326', '\121', '\207', '\147', '\360',
- '\241', '\261', '\052', '\045', '\000', '\004', '\014', '\000',
- '\006', '\005', '\140', '\101', '\036', '\107', '\030', '\000',
- '\020', '\144', '\055', '\000', '\040', '\324', '\132', '\023',
- '\130', '\260', '\102', '\025', '\256', '\121', '\205', '\055',
- '\144', '\241', '\326', '\265', '\306', '\247', '\112', '\115',
- '\352', '\217', '\177', '\024', '\333', '\302', '\305', '\076',
- '\166', '\171', '\213', '\215', '\117', '\040', '\300', '\370',
- '\331', '\316', '\216', '\166', '\000', '\020', '\153', '\020',
- '\304', '\112', '\373', '\332', '\317', '\346', '\252', '\266',
- '\007', '\260', '\155', '\032', '\157', '\373', '\333', '\334',
- '\036', '\200', '\020', '\102', '\120', '\204', '\050', '\050',
- '\041', '\005', '\124', '\250', '\000', '\032', '\026', '\000',
- '\205', '\002', '\374', '\302', '\037', '\316', '\176', '\167',
- '\273', '\327', '\235', '\356', '\163', '\227', '\173', '\334',
- '\146', '\230', '\101', '\033', '\266', '\261', '\207', '\067',
- '\330', '\341', '\006', '\154', '\330', '\300', '\027', '\372',
- '\001', '\120', '\234', '\000', '\164', '\340', '\001', '\377',
- '\167', '\277', '\367', '\235', '\157', '\234', '\070', '\034',
- '\000', '\017', '\177', '\070', '\142', '\043', '\016', '\361',
- '\212', '\077', '\074', '\277', '\030', '\327', '\357', '\156',
- '\063', '\316', '\361', '\147', '\203', '\141', '\000', '\355',
- '\106', '\102', '\002', '\210', '\020', '\201', '\161', '\377',
- '\341', '\017', '\325', '\376', '\303', '\270', '\111', '\056',
- '\362', '\166', '\177', '\334', '\331', '\134', '\005', '\260',
- '\112', '\013', '\353', '\214', '\034', '\034', '\043', '\016',
- '\145', '\101', '\154', '\131', '\156', '\136', '\163', '\377',
- '\272', '\063', '\300', '\366', '\235', '\052', '\121', '\263',
- '\012', '\124', '\036', '\113', '\316', '\310', '\114', '\106',
- '\353', '\223', '\227', '\016', '\345', '\245', '\047', '\335',
- '\310', '\116', '\016', '\000', '\002', '\244', '\116', '\165',
- '\004', '\204', '\301', '\352', '\123', '\317', '\172', '\325',
- '\241', '\154', '\332', '\256', '\207', '\371', '\034', '\071',
- '\000', '\273', '\330', '\163', '\020', '\346', '\006', '\227',
- '\126', '\252', '\000', '\100', '\252', '\055', '\172', '\074',
- '\000', '\041', '\367', '\326', '\307', '\153', '\107', '\252',
- '\344', '\016', '\132', '\344', '\000', '\054', '\131', '\351',
- '\115', '\247', '\162', '\323', '\235', '\034', '\302', '\044',
- '\033', '\171', '\272', '\351', '\355', '\255', '\343', '\024',
- '\312', '\320', '\160', '\002', '\342', '\000', '\100', '\070',
- '\000', '\010', '\006', '\000', '\201', '\001', '\114', '\235',
- '\000', '\001', '\200', '\210', '\105', '\300', '\042', '\071',
- '\077', '\000', '\342', '\007', '\050', '\325', '\247', '\077',
- '\036', '\260', '\371', '\017', '\002', '\030', '\027', '\003',
- '\340', '\304', '\000', '\034', '\021', '\200', '\103', '\004',
- '\200', '\043', '\026', '\201', '\311', '\101', '\007', '\277',
- '\120', '\000', '\150', '\262', '\001', '\200', '\040', '\000',
- '\020', '\010', '\200', '\022', '\355', '\024', '\104', '\254',
- '\000', '\230', '\074', '\216', '\175', '\160', '\171', '\224',
- '\242', '\024', '\020', '\017', '\000', '\306', '\003', '\300',
- '\141', '\000', '\231', '\340', '\000', '\000', '\214', '\323',
- '\244', '\003', '\111', '\373', '\200', '\110', '\040', '\040',
- '\023', '\011', '\150', '\300', '\002', '\016', '\340', '\200',
- '\253', '\137', '\235', '\372', '\322', '\207', '\276', '\363',
- '\271', '\136', '\332', '\171', '\314', '\100', '\324', '\077',
- '\370', '\301', '\067', '\174', '\360', '\216', '\036', '\224',
- '\177', '\374', '\341', '\027', '\265', '\367', '\033', '\034',
- '\217', '\001', '\354', '\343', '\245', '\014', '\110', '\000',
- '\002', '\154', '\362', '\003', '\220', '\324', '\337', '\004',
- '\004', '\040', '\001', '\003', '\174', '\200', '\217', '\033',
- '\300', '\143', '\004', '\343', '\160', '\000', '\367', '\360',
- '\144', '\153', '\025', '\176', '\070', '\020', '\125', '\064',
- '\065', '\137', '\120', '\305', '\000', '\376', '\300', '\001',
- '\374', '\300', '\017', '\377', '\200', '\017', '\377', '\000',
- '\017', '\357', '\000', '\016', '\307', '\140', '\140', '\127',
- '\126', '\116', '\006', '\106', '\014', '\010', '\140', '\014',
- '\073', '\325', '\165', '\036', '\310', '\201', '\006', '\126',
- '\116', '\127', '\206', '\140', '\002', '\006', '\121', '\344',
- '\364', '\000', '\350', '\160', '\001', '\334', '\260', '\003',
- '\026', '\326', '\202', '\053', '\310', '\117', '\037', '\064',
- '\141', '\000', '\340', '\001', '\256', '\027', '\000', '\314',
- '\220', '\017', '\015', '\340', '\144', '\177', '\300', '\000',
- '\166', '\144', '\000', '\214', '\043', '\116', '\007', '\240',
- '\035', '\104', '\250', '\036', '\222', '\003', '\000', '\365',
- '\367', '\003', '\025', '\346', '\035', '\135', '\147', '\166',
- '\000', '\105', '\120', '\307', '\167', '\174', '\072', '\226',
- '\166', '\000', '\060', '\165', '\023', '\040', '\000', '\053',
- '\066', '\001', '\004', '\060', '\015', '\005', '\360', '\001',
- '\074', '\340', '\200', '\020', '\100', '\016', '\141', '\010',
- '\011', '\364', '\000', '\011', '\344', '\000', '\011', '\004',
- '\200', '\010', '\010', '\100', '\010', '\020', '\300', '\007',
- '\340', '\004', '\000', '\373', '\020', '\000', '\367', '\320',
- '\123', '\002', '\050', '\200', '\246', '\245', '\163', '\341',
- '\005', '\017', '\367', '\000', '\017', '\023', '\270', '\207',
- '\347', '\060', '\154', '\037', '\340', '\206', '\000', '\340',
- '\022', '\036', '\160', '\170', '\017', '\226', '\201', '\003',
- '\060', '\116', '\372', '\100', '\207', '\375', '\100', '\116',
- '\346', '\024', '\000', '\051', '\000', '\000', '\043', '\000',
- '\000', '\026', '\000', '\000', '\162', '\304', '\070', '\012',
- '\065', '\174', '\216', '\070', '\116', '\233', '\267', '\167',
- '\117', '\326', '\126', '\377', '\060', '\155', '\110', '\130',
- '\203', '\036', '\025', '\000', '\221', '\347', '\007', '\004',
- '\200', '\000', '\010', '\100', '\020', '\252', '\010', '\007',
- '\024', '\200', '\000', '\042', '\000', '\003', '\101', '\000',
- '\014', '\040', '\000', '\004', '\022', '\000', '\010', '\005',
- '\201', '\076', '\002', '\060', '\164', '\164', '\310', '\167',
- '\360', '\004', '\116', '\160', '\066', '\117', '\022', '\010',
- '\017', '\041', '\345', '\140', '\037', '\000', '\174', '\015',
- '\004', '\000', '\002', '\340', '\206', '\306', '\020', '\003',
- '\203', '\000', '\006', '\320', '\006', '\155', '\003', '\000',
- '\006', '\006', '\000', '\003', '\055', '\201', '\001', '\014',
- '\000', '\003', '\254', '\046', '\140', '\001', '\340', '\206',
- '\376', '\360', '\003', '\067', '\367', '\214', '\323', '\070',
- '\215', '\103', '\020', '\006', '\207', '\000', '\007', '\016',
- '\200', '\003', '\034', '\300', '\001', '\142', '\006', '\140',
- '\134', '\065', '\140', '\377', '\260', '\012', '\252', '\120',
- '\142', '\362', '\130', '\000', '\150', '\004', '\012', '\366',
- '\270', '\000', '\370', '\170', '\217', '\371', '\010', '\012',
- '\364', '\070', '\217', '\325', '\120', '\143', '\002', '\131',
- '\143', '\204', '\026', '\116', '\371', '\160', '\002', '\336',
- '\007', '\166', '\317', '\300', '\003', '\015', '\266', '\220',
- '\140', '\347', '\175', '\007', '\031', '\116', '\005', '\011',
- '\120', '\364', '\244', '\163', '\003', '\231', '\126', '\162',
- '\206', '\117', '\247', '\167', '\000', '\017', '\360', '\001',
- '\077', '\200', '\130', '\037', '\260', '\001', '\061', '\000',
- '\003', '\140', '\360', '\161', '\311', '\230', '\036', '\037',
- '\060', '\212', '\050', '\107', '\123', '\001', '\360', '\123',
- '\050', '\167', '\017', '\000', '\060', '\017', '\000', '\160',
- '\146', '\367', '\065', '\132', '\066', '\071', '\010', '\000',
- '\060', '\004', '\222', '\010', '\000', '\043', '\261', '\017',
- '\077', '\060', '\022', '\223', '\250', '\223', '\070', '\051',
- '\132', '\250', '\005', '\000', '\241', '\365', '\010', '\003',
- '\360', '\014', '\001', '\360', '\016', '\120', '\225', '\126',
- '\114', '\251', '\224', '\110', '\031', '\132', '\105', '\051',
- '\132', '\124', '\151', '\223', '\077', '\125', '\225', '\125',
- '\131', '\224', '\132', '\151', '\224', '\120', '\305', '\164',
- '\113', '\267', '\225', '\133', '\171', '\137', '\376', '\360',
- '\156', '\277', '\040', '\002', '\242', '\040', '\012', '\252',
- '\200', '\226', '\152', '\251', '\012', '\146', '\071', '\226',
- '\156', '\111', '\226', '\157', '\051', '\226', '\167', '\110',
- '\140', '\216', '\105', '\227', '\166', '\131', '\227', '\002',
- '\205', '\225', '\066', '\131', '\225', '\077', '\005', '\226',
- '\134', '\271', '\225', '\236', '\350', '\144', '\173', '\071',
- '\230', '\130', '\371', '\123', '\177', '\171', '\230', '\140',
- '\031', '\230', '\301', '\027', '\000', '\170', '\360', '\000',
- '\316', '\306', '\026', '\302', '\020', '\016', '\044', '\040',
- '\015', '\270', '\340', '\000', '\240', '\040', '\000', '\040',
- '\120', '\153', '\001', '\220', '\231', '\150', '\050', '\162',
- '\050', '\240', '\000', '\036', '\300', '\115', '\374', '\200',
- '\116', '\015', '\365', '\001', '\303', '\020', '\004', '\347',
- '\060', '\016', '\314', '\366', '\015', '\052', '\365', '\101',
- '\061', '\167', '\000', '\200', '\350', '\007', '\341', '\367',
- '\215', '\104', '\005', '\014', '\157', '\151', '\226', '\052',
- '\240', '\012', '\271', '\271', '\233', '\154', '\051', '\012',
- '\157', '\371', '\233', '\144', '\051', '\227', '\167', '\071',
- '\234', '\170', '\111', '\227', '\337', '\270', '\121', '\007',
- '\005', '\026', '\006', '\106', '\150', '\233', '\331', '\014',
- '\154', '\340', '\234', '\316', '\031', '\000', '\320', '\110',
- '\215', '\070', '\200', '\001', '\006', '\220', '\201', '\214',
- '\151', '\145', '\036', '\125', '\200', '\002', '\311', '\017',
- '\357', '\060', '\116', '\044', '\150', '\121', '\000', '\300',
- '\035', '\314', '\045', '\005', '\000', '\340', '\005', '\000',
- '\100', '\010', '\000', '\340', '\020', '\123', '\007', '\001',
- '\001', '\000', '\003', '\230', '\131', '\153', '\004', '\160',
- '\170', '\311', '\310', '\077', '\004', '\120', '\177', '\053',
- '\351', '\121', '\151', '\147', '\167', '\107', '\146', '\116',
- '\346', '\204', '\202', '\340', '\020', '\174', '\307', '\230',
- '\222', '\051', '\151', '\203', '\034', '\200', '\210', '\343',
- '\304', '\014', '\014', '\240', '\240', '\340', '\311', '\155',
- '\001', '\020', '\016', '\041', '\020', '\016', '\141', '\040',
- '\014', '\020', '\300', '\001', '\016', '\160', '\145', '\370',
- '\160', '\004', '\053', '\265', '\231', '\347', '\144', '\147',
- '\204', '\126', '\220', '\102', '\030', '\017', '\203', '\020',
- '\017', '\343', '\060', '\017', '\363', '\360', '\016', '\071',
- '\260', '\145', '\127', '\346', '\017', '\307', '\120', '\026',
- '\053', '\345', '\166', '\007', '\365', '\123', '\060', '\132',
- '\145', '\124', '\066', '\135', '\212', '\131', '\243', '\125',
- '\306', '\007', '\372', '\171', '\014', '\001', '\060', '\010',
- '\245', '\027', '\000', '\306', '\000', '\137', '\070', '\166',
- '\174', '\050', '\000', '\000', '\105', '\352', '\016', '\000',
- '\300', '\006', '\000', '\160', '\174', '\332', '\321', '\121',
- '\374', '\120', '\124', '\164', '\370', '\010', '\007', '\360',
- '\011', '\007', '\340', '\015', '\131', '\226', '\210', '\107',
- '\306', '\121', '\373', '\351', '\017', '\112', '\226', '\245',
- '\160', '\000', '\161', '\300', '\000', '\016', '\360', '\200',
- '\017', '\374', '\120', '\154', '\370', '\200', '\015', '\214',
- '\300', '\000', '\006', '\300', '\077', '\003', '\000', '\010',
- '\020', '\026', '\163', '\211', '\250', '\144', '\003', '\300',
- '\245', '\077', '\205', '\017', '\003', '\300', '\013', '\003',
- '\300', '\003', '\003', '\140', '\203', '\066', '\050', '\107',
- '\316', '\005', '\004', '\060', '\000', '\010', '\007', '\305',
- '\134', '\062', '\360', '\017', '\067', '\140', '\074', '\000',
- '\200', '\134', '\060', '\000', '\250', '\315', '\105', '\243',
- '\300', '\000', '\017', '\300', '\020', '\017', '\200', '\040',
- '\223', '\367', '\260', '\133', '\000', '\160', '\017', '\223',
- '\032', '\251', '\217', '\112', '\243', '\204', '\111', '\230',
- '\206', '\251', '\227', '\104', '\211', '\230', '\177', '\251',
- '\230', '\242', '\252', '\225', '\142', '\111', '\226', '\146',
- '\231', '\226', '\252', '\252', '\226', '\155', '\011', '\227',
- '\256', '\072', '\226', '\302', '\131', '\234', '\262', '\112',
- '\234', '\215', '\365', '\215', '\245', '\025', '\000', '\042',
- '\200', '\253', '\270', '\372', '\017', '\043', '\000', '\150',
- '\276', '\052', '\002', '\200', '\026', '\017', '\077', '\020',
- '\001', '\040', '\100', '\254', '\304', '\012', '\135', '\151',
- '\165', '\000', '\356', '\360', '\017', '\357', '\300', '\254',
- '\314', '\172', '\007', '\356', '\000', '\255', '\225', '\072',
- '\255', '\377', '\160', '\007', '\340', '\260', '\133', '\017',
- '\007', '\012', '\001', '\240', '\255', '\260', '\020', '\000',
- '\260', '\060', '\000', '\240', '\007', '\172', '\274', '\160',
- '\000', '\343', '\352', '\013', '\007', '\340', '\013', '\035',
- '\271', '\174', '\015', '\144', '\210', '\301', '\067', '\174',
- '\303', '\267', '\117', '\360', '\032', '\117', '\044', '\045',
- '\117', '\306', '\126', '\026', '\037', '\020', '\102', '\024',
- '\220', '\257', '\372', '\272', '\257', '\024', '\360', '\007',
- '\076', '\300', '\001', '\010', '\240', '\243', '\002', '\013',
- '\000', '\003', '\133', '\260', '\004', '\173', '\260', '\241',
- '\030', '\212', '\376', '\160', '\260', '\114', '\132', '\205',
- '\010', '\320', '\022', '\337', '\370', '\000', '\170', '\360',
- '\215', '\055', '\241', '\212', '\330', '\270', '\216', '\266',
- '\212', '\227', '\337', '\270', '\216', '\330', '\130', '\020',
- '\157', '\144', '\117', '\351', '\141', '\117', '\157', '\124',
- '\020', '\007', '\045', '\205', '\365', '\132', '\026', '\314',
- '\366', '\017', '\307', '\167', '\120', '\125', '\070', '\210',
- '\321', '\205', '\007', '\321', '\345', '\022', '\036', '\213',
- '\174', '\320', '\145', '\221', '\210', '\125', '\177', '\214',
- '\303', '\000', '\010', '\300', '\001', '\076', '\360', '\007',
- '\374', '\372', '\263', '\332', '\161', '\174', '\072', '\272',
- '\260', '\011', '\333', '\215', '\007', '\153', '\260', '\110',
- '\173', '\260', '\073', '\333', '\263', '\077', '\333', '\257',
- '\377', '\212', '\000', '\102', '\253', '\237', '\105', '\233',
- '\264', '\072', '\132', '\264', '\013', '\253', '\243', '\307',
- '\167', '\021', '\256', '\227', '\120', '\200', '\260', '\007',
- '\240', '\260', '\007', '\220', '\260', '\007', '\210', '\040',
- '\266', '\144', '\073', '\266', '\214', '\260', '\007', '\106',
- '\362', '\013', '\173', '\200', '\001', '\334', '\321', '\247',
- '\310', '\307', '\076', '\000', '\260', '\222', '\140', '\360',
- '\017', '\160', '\360', '\017', '\060', '\173', '\267', '\166',
- '\373', '\017', '\247', '\346', '\007', '\211', '\345', '\007',
- '\177', '\000', '\003', '\176', '\040', '\101', '\341', '\201',
- '\020', '\204', '\013', '\000', '\355', '\027', '\001', '\002',
- '\360', '\253', '\020', '\040', '\002', '\377', '\007', '\000',
- '\044', '\140', '\244', '\006', '\005', '\014', '\246', '\205',
- '\125', '\003', '\340', '\100', '\003', '\170', '\271', '\357',
- '\000', '\255', '\322', '\372', '\016', '\024', '\310', '\207',
- '\034', '\005', '\014', '\377', '\000', '\272', '\240', '\233',
- '\212', '\325', '\123', '\075', '\020', '\040', '\000', '\247',
- '\033', '\016', '\341', '\200', '\147', '\343', '\064', '\116',
- '\170', '\246', '\272', '\247', '\173', '\272', '\245', '\113',
- '\000', '\251', '\150', '\000', '\330', '\250', '\263', '\004',
- '\140', '\235', '\042', '\152', '\242', '\366', '\260', '\003',
- '\341', '\304', '\017', '\007', '\140', '\017', '\037', '\140',
- '\242', '\042', '\212', '\001', '\002', '\140', '\235', '\014',
- '\240', '\246', '\056', '\141', '\000', '\070', '\301', '\002',
- '\006', '\340', '\011', '\224', '\150', '\000', '\365', '\027',
- '\002', '\000', '\160', '\002', '\000', '\120', '\024', '\326',
- '\213', '\275', '\325', '\013', '\000', '\324', '\113', '\275',
- '\365', '\147', '\211', '\030', '\320', '\000', '\174', '\040',
- '\276', '\015', '\340', '\007', '\073', '\010', '\125', '\350',
- '\233', '\200', '\352', '\233', '\276', '\350', '\213', '\023',
- '\330', '\226', '\231', '\360', '\053', '\000', '\234', '\300',
- '\001', '\323', '\270', '\216', '\235', '\231', '\000', '\044',
- '\040', '\001', '\371', '\332', '\022', '\252', '\206', '\023',
- '\371', '\365', '\161', '\037', '\247', '\215', '\070', '\340',
- '\001', '\237', '\300', '\007', '\334', '\026', '\210', '\363',
- '\313', '\137', '\371', '\146', '\003', '\066', '\020', '\232',
- '\351', '\150', '\137', '\000', '\046', '\146', '\055', '\121',
- '\215', '\317', '\130', '\216', '\317', '\130', '\215', '\055',
- '\321', '\216', '\007', '\140', '\137', '\257', '\251', '\122',
- '\074', '\300', '\145', '\070', '\160', '\216', '\303', '\020',
- '\016', '\143', '\060', '\016', '\043', '\174', '\216', '\351',
- '\370', '\301', '\255', '\051', '\153', '\201', '\247', '\136',
- '\201', '\127', '\127', '\056', '\354', '\302', '\035', '\227',
- '\137', '\164', '\071', '\303', '\372', '\305', '\021', '\351',
- '\341', '\003', '\372', '\231', '\144', '\145', '\246', '\245',
- '\060', '\360', '\236', '\230', '\111', '\173', '\005', '\241',
- '\035', '\040', '\340', '\100', '\051', '\211', '\162', '\106',
- '\225', '\145', '\362', '\224', '\117', '\371', '\364', '\237',
- '\360', '\160', '\241', '\007', '\212', '\003', '\340', '\360',
- '\245', '\033', '\005', '\272', '\135', '\127', '\225', '\240',
- '\065', '\006', '\000', '\320', '\131', '\233', '\225', '\131',
- '\227', '\125', '\131', '\242', '\145', '\141', '\251', '\165',
- '\133', '\144', '\114', '\133', '\262', '\005', '\133', '\256',
- '\305', '\132', '\252', '\125', '\224', '\015', '\326', '\250',
- '\060', '\260', '\134', '\311', '\165', '\134', '\305', '\065',
- '\134', '\301', '\365', '\133', '\315', '\145', '\141', '\322',
- '\025', '\136', '\172', '\354', '\135', '\334', '\245', '\135',
- '\330', '\145', '\135', '\367', '\120', '\135', '\064', '\112',
- '\137', '\051', '\031', '\170', '\033', '\365', '\136', '\355',
- '\025', '\127', '\061', '\334', '\302', '\120', '\045', '\253',
- '\034', '\374', '\237', '\063', '\327', '\001', '\374', '\145',
- '\303', '\003', '\326', '\165', '\011', '\166', '\311', '\013',
- '\246', '\140', '\026', '\066', '\141', '\234', '\114', '\141',
- '\017', '\126', '\020', '\074', '\373', '\007', '\167', '\340',
- '\257', '\000', '\333', '\005', '\153', '\220', '\004', '\101',
- '\220', '\312', '\121', '\170', '\260', '\104', '\333', '\222',
- '\256', '\174', '\265', '\000', '\240', '\013', '\120', '\345',
- '\312', '\241', '\170', '\015', '\001', '\140', '\313', '\074',
- '\172', '\225', '\235', '\252', '\227', '\212', '\351', '\227',
- '\176', '\371', '\075', '\040', '\240', '\000', '\311', '\040',
- '\003', '\362', '\220', '\000', '\114', '\140', '\000', '\103',
- '\200', '\001', '\213', '\174', '\136', '\317', '\206', '\023',
- '\350', '\140', '\007', '\373', '\360', '\015', '\004', '\167',
- '\154', '\246', '\365', '\017', '\317', '\220', '\007', '\063',
- '\274', '\301', '\332', '\374', '\120', '\156', '\372', '\251',
- '\273', '\354', '\251', '\136', '\051', '\230', '\276', '\214',
- '\230', '\255', '\013', '\233', '\166', '\146', '\010', '\030',
- '\060', '\010', '\060', '\020', '\010', '\340', '\020', '\014',
- '\341', '\340', '\316', '\041', '\000', '\016', '\023', '\240',
- '\215', '\030', '\120', '\146', '\346', '\114', '\232', '\277',
- '\313', '\171', '\334', '\051', '\220', '\117', '\230', '\317',
- '\341', '\164', '\007', '\000', '\253', '\212', '\002', '\075',
- '\320', '\034', '\160', '\007', '\357', '\100', '\313', '\106',
- '\273', '\312', '\012', '\275', '\244', '\014', '\035', '\265',
- '\105', '\173', '\320', '\051', '\221', '\011', '\021', '\001',
- '\004', '\216', '\160', '\020', '\312', '\150', '\223', '\030',
- '\201', '\076', '\374', '\343', '\100', '\005', '\261', '\023',
- '\112', '\261', '\105', '\157', '\244', '\026', '\232', '\224',
- '\036', '\347', '\001', '\000', '\022', '\300', '\223', '\000',
- '\100', '\001', '\000', '\120', '\001', '\224', '\010', '\000',
- '\027', '\060', '\210', '\000', '\140', '\023', '\032', '\000',
- '\000', '\076', '\301', '\070', '\035', '\100', '\212', '\051',
- '\211', '\022', '\324', '\113', '\115', '\223', '\370', '\270',
- '\105', '\141', '\002', '\333', '\133', '\244', '\221', '\310',
- '\024', '\053', '\000', '\000', '\054', '\060', '\107', '\000',
- '\340', '\002', '\000', '\360', '\002', '\275', '\105', '\250',
- '\000', '\060', '\003', '\000', '\100', '\003', '\257', '\004',
- '\000', '\066', '\240', '\110', '\014', '\235', '\003', '\045',
- '\004', '\000', '\073', '\200', '\120', '\075', '\000', '\267',
- '\365', '\007', '\023', '\124', '\041', '\004', '\071', '\251',
- '\022', '\000', '\340', '\031', '\106', '\340', '\111', '\000',
- '\004', '\000', '\111', '\000', '\000', '\112', '\000', '\000',
- '\113', '\000', '\000', '\114', '\000', '\000', '\115', '\000',
- '\000', '\136', '\361', '\004', '\064', '\001', '\000', '\121',
- '\340', '\032', '\000', '\300', '\025', '\166', '\121', '\005',
- '\000', '\140', '\005', '\251', '\161', '\034', '\000', '\140',
- '\034', '\132', '\000', '\000', '\133', '\040', '\115', '\000',
- '\320', '\005', '\347', '\011', '\000', '\137', '\000', '\000',
- '\140', '\021', '\006', '\000', '\040', '\006', '\236', '\065',
- '\021', '\145', '\000', '\000', '\146', '\000', '\000', '\147',
- '\000', '\000', '\150', '\000', '\000', '\151', '\000', '\000',
- '\152', '\000', '\000', '\132', '\241', '\244', '\143', '\341',
- '\006', '\000', '\360', '\006', '\000', '\360', '\245', '\161',
- '\000', '\000', '\250', '\061', '\007', '\000', '\100', '\007',
- '\000', '\120', '\007', '\000', '\200', '\026', '\167', '\200',
- '\143', '\171', '\060', '\037', '\000', '\260', '\007', '\007',
- '\333', '\007', '\000', '\020', '\270', '\050', '\207', '\023',
- '\154', '\101', '\071', '\070', '\251', '\236', '\205', '\000',
- '\000', '\206', '\000', '\000', '\207', '\260', '\236', '\000',
- '\220', '\010', '\000', '\240', '\010', '\000', '\260', '\010',
- '\000', '\300', '\010', '\000', '\320', '\010', '\000', '\120',
- '\321', '\217', '\000', '\000', '\220', '\000', '\000', '\221',
- '\000', '\000', '\222', '\000', '\000', '\223', '\000', '\000',
- '\224', '\000', '\000', '\225', '\000', '\000', '\226', '\000',
- '\000', '\227', '\000', '\000', '\230', '\000', '\000', '\022',
- '\015', '\022', '\226', '\103', '\002', '\063', '\301', '\336',
- '\006', '\341', '\336', '\216', '\333', '\336', '\362', '\375',
- '\336', '\363', '\035', '\337', '\364', '\175', '\337', '\366',
- '\235', '\337', '\360', '\275', '\337', '\365', '\315', '\337',
- '\370', '\355', '\337', '\372', '\335', '\337', '\002', '\376',
- '\337', '\003', '\036', '\340', '\004', '\176', '\340', '\006',
- '\236', '\340', '\000', '\276', '\340', '\005', '\316', '\340',
- '\010', '\356', '\340', '\012', '\336', '\340', '\022', '\376',
- '\340', '\023', '\036', '\341', '\024', '\176', '\341', '\026',
- '\236', '\341', '\020', '\276', '\341', '\025', '\316', '\341',
- '\030', '\356', '\341', '\032', '\336', '\341', '\042', '\376',
- '\341', '\043', '\236', '\340', '\004', '\060', '\023', '\047',
- '\116', '\342', '\052', '\036', '\342', '\053', '\016', '\342',
- '\102', '\140', '\021', '\057', '\256', '\336', '\051', '\161',
- '\024', '\056', '\235', '\020', '\067', '\335', '\077', '\011',
- '\201', '\325', '\006', '\141', '\327', '\006', '\201', '\236',
- '\006', '\201', '\032', '\006', '\061', '\333', '\006', '\301',
- '\026', '\006', '\301', '\334', '\006', '\161', '\336', '\006',
- '\261', '\012', '\011', '\061', '\014', '\011', '\161', '\015',
- '\011', '\001', '\170', '\124', '\150', '\020', '\015', '\140',
- '\021', '\030', '\140', '\021', '\050', '\140', '\021', '\063',
- '\140', '\021', '\103', '\140', '\021', '\116', '\140', '\021',
- '\136', '\140', '\021', '\145', '\140', '\021', '\161', '\140',
- '\021', '\167', '\140', '\021', '\202', '\140', '\021', '\215',
- '\140', '\021', '\235', '\140', '\021', '\243', '\260', '\072',
- '\026', '\301', '\013', '\026', '\241', '\224', '\006', '\221',
- '\015', '\026', '\201', '\016', '\026', '\141', '\017', '\026',
- '\221', '\000', '\063', '\321', '\000', '\063', '\141', '\001',
- '\063', '\321', '\001', '\063', '\221', '\002', '\063', '\141',
- '\003', '\063', '\321', '\136', '\006', '\101', '\005', '\063',
- '\121', '\006', '\063', '\021', '\007', '\063', '\041', '\010',
- '\063', '\321', '\010', '\063', '\321', '\011', '\063', '\141',
- '\012', '\063', '\101', '\013', '\063', '\241', '\013', '\063',
- '\121', '\014', '\063', '\321', '\014', '\063', '\241', '\015',
- '\032', '\065', '\023', '\353', '\060', '\023', '\361', '\060',
- '\023', '\374', '\060', '\023', '\002', '\120', '\074', '\015',
- '\120', '\074', '\023', '\120', '\074', '\036', '\120', '\074',
- '\043', '\120', '\074', '\055', '\120', '\074', '\023', '\165',
- '\025', '\305', '\023', '\005', '\305', '\363', '\005', '\305',
- '\223', '\006', '\305', '\203', '\007', '\305', '\023', '\010',
- '\305', '\203', '\224', '\361', '\121', '\074', '\252', '\120',
- '\074', '\263', '\120', '\074', '\301', '\000', '\075', '\305',
- '\203', '\015', '\305', '\303', '\015', '\305', '\123', '\016',
- '\305', '\043', '\017', '\305', '\103', '\273', '\342', '\141',
- '\022', '\025', '\140', '\022', '\034', '\140', '\075', '\046',
- '\361', '\002', '\046', '\261', '\003', '\046', '\061', '\173',
- '\006', '\241', '\004', '\046', '\221', '\005', '\046', '\321',
- '\006', '\046', '\161', '\007', '\046', '\141', '\010', '\046',
- '\021', '\011', '\046', '\021', '\012', '\046', '\261', '\012',
- '\046', '\241', '\013', '\046', '\141', '\014', '\046', '\161',
- '\015', '\046', '\001', '\016', '\046', '\341', '\016', '\046',
- '\161', '\017', '\046', '\121', '\000', '\353', '\063', '\001',
- '\353', '\143', '\002', '\353', '\203', '\003', '\353', '\363',
- '\004', '\353', '\323', '\005', '\353', '\003', '\007', '\353',
- '\243', '\141', '\006', '\061', '\011', '\353', '\363', '\011',
- '\353', '\003', '\013', '\353', '\043', '\014', '\353', '\223',
- '\015', '\353', '\023', '\016', '\353', '\343', '\016', '\353',
- '\123', '\017', '\353', '\023', '\000', '\377', '\263', '\077',
- '\006', '\101', '\001', '\377', '\323', '\001', '\377', '\263',
- '\002', '\377', '\243', '\215', '\134', '\364', '\077', '\101',
- '\360', '\077', '\115', '\360', '\077', '\124', '\360', '\077',
- '\324', '\150', '\020', '\157', '\360', '\077', '\203', '\360',
- '\077', '\223', '\140', '\100', '\377', '\223', '\013', '\377',
- '\363', '\014', '\377', '\203', '\015', '\377', '\143', '\016',
- '\377', '\343', '\016', '\377', '\263', '\017', '\014', '\024',
- '\101', '\012', '\020', '\101', '\023', '\020', '\101', '\041',
- '\020', '\101', '\052', '\020', '\101', '\137', '\146', '\020',
- '\101', '\020', '\101', '\117', '\020', '\101', '\125', '\020',
- '\101', '\140', '\020', '\101', '\146', '\020', '\101', '\161',
- '\020', '\101', '\310', '\101', '\032', '\246', '\201', '\032',
- '\133', '\137', '\007', '\245', '\161', '\032', '\137', '\320',
- '\006', '\141', '\060', '\007', '\132', '\161', '\030', '\162',
- '\360', '\006', '\263', '\215', '\366', '\152', '\077', '\366',
- '\145', '\257', '\025', '\142', '\120', '\366', '\145', '\100',
- '\006', '\137', '\300', '\366', '\167', '\360', '\005', '\144',
- '\240', '\366', '\244', '\035', '\367', '\173', '\101', '\367',
- '\166', '\217', '\367', '\172', '\357', '\366', '\146', '\037',
- '\331', '\162', '\357', '\367', '\162', '\220', '\366', '\167',
- '\137', '\007', '\137', '\312', '\367', '\163', '\137', '\367',
- '\207', '\337', '\366', '\212', '\057', '\370', '\160', '\377',
- '\006', '\141', '\340', '\332', '\142', '\100', '\371', '\164',
- '\040', '\371', '\221', '\375', '\006', '\147', '\360', '\006',
- '\163', '\220', '\006', '\164', '\120', '\333', '\227', '\337',
- '\371', '\237', '\037', '\372', '\232', '\177', '\371', '\164',
- '\100', '\007', '\157', '\320', '\006', '\137', '\300', '\006',
- '\145', '\140', '\006', '\231', '\077', '\006', '\247', '\261',
- '\030', '\250', '\201', '\372', '\252', '\317', '\372', '\256',
- '\017', '\373', '\137', '\040', '\373', '\162', '\100', '\373',
- '\247', '\377', '\006', '\251', '\277', '\372', '\137', '\040',
- '\007', '\151', '\160', '\006', '\150', '\020', '\373', '\263',
- '\057', '\031', '\233', '\037', '\374', '\254', '\117', '\374',
- '\306', '\217', '\374', '\275', '\057', '\031', '\277', '\317',
- '\374', '\137', '\360', '\371', '\144', '\120', '\331', '\266',
- '\057', '\374', '\326', '\137', '\006', '\323', '\177', '\373',
- '\137', '\100', '\007', '\145', '\200', '\375', '\300', '\357',
- '\375', '\340', '\317', '\375', '\144', '\077', '\370', '\227',
- '\217', '\007', '\325', '\017', '\007', '\151', '\040', '\007',
- '\141', '\240', '\244', '\351', '\277', '\376', '\355', '\377',
- '\376', '\232', '\077', '\006', '\214', '\001', '\376', '\162',
- '\360', '\005', '\160', '\100', '\007', '\250', '\141', '\377',
- '\156', '\200', '\377', '\372', '\317', '\377', '\365', '\337',
- '\376', '\143', '\340', '\372', '\243', '\321', '\376', '\143',
- '\340', '\372', '\365', '\317', '\006', '\157', '\060', '\006',
- '\132', '\061', '\006', '\154', '\360', '\006', '\143', '\260',
- '\006', '\365', '\377', '\006', '\146', '\140', '\006', '\341',
- '\077', '\366', '\165', '\220', '\331', '\262', '\157', '\006',
- '\146', '\020', '\376', '\143', '\137', '\007', '\147', '\120',
- '\377', '\151', '\077', '\007', '\254', '\075', '\006', '\151',
- '\077', '\007', '\163', '\120', '\377', '\151', '\077', '\007',
- '\163', '\060', '\374', '\145', '\140', '\007', '\222', '\261',
- '\027', '\243', '\221', '\366', '\163', '\060', '\007', '\303',
- '\137', '\006', '\166', '\040', '\031', '\173', '\121', '\377',
- '\151', '\077', '\007', '\163', '\200', '\006', '\141', '\320',
- '\376', '\243', '\221', '\366', '\163', '\060', '\007', '\150',
- '\020', '\006', '\355', '\257', '\371', '\144', '\220', '\006',
- '\141', '\320', '\006', '\157', '\340', '\006', '\164', '\077',
- '\006', '\151', '\077', '\007', '\254', '\115', '\006', '\151',
- '\020', '\006', '\155', '\360', '\006', '\156', '\100', '\367',
- '\143', '\220', '\366', '\163', '\060', '\007', '\232', '\237',
- '\367', '\256', '\235', '\367', '\231', '\177', '\376', '\132',
- '\221', '\367', '\164', '\220', '\376', '\000', '\220', '\367',
- '\164', '\020', '\377', '\347', '\257', '\025', '\171', '\137',
- '\007', '\142', '\340', '\372', '\216', '\217', '\370', '\000',
- '\220', '\367', '\165', '\040', '\006', '\256', '\357', '\370',
- '\210', '\257', '\371', '\144', '\340', '\376', '\272', '\317',
- '\006', '\207', '\161', '\006', '\225', '\115', '\006', '\356',
- '\257', '\373', '\154', '\160', '\030', '\147', '\140', '\376',
- '\157', '\017', '\000', '\144', '\340', '\376', '\272', '\077',
- '\007', '\144', '\317', '\006', '\112', '\112', '\006', '\356',
- '\257', '\373', '\163', '\100', '\366', '\154', '\300', '\006',
- '\232', '\117', '\006', '\356', '\017', '\007', '\215', '\237',
- '\376', '\000', '\100', '\006', '\356', '\017', '\007', '\215',
- '\037', '\377', '\347', '\257', '\025', '\145', '\200', '\007',
- '\143', '\200', '\006', '\141', '\340', '\006', '\147', '\120',
- '\331', '\145', '\200', '\007', '\143', '\200', '\006', '\141',
- '\340', '\006', '\147', '\140', '\376', '\157', '\157', '\331',
- '\256', '\017', '\366', '\226', '\355', '\372', '\140', '\257',
- '\371', '\235', '\057', '\006', '\142', '\340', '\372', '\250',
- '\321', '\371', '\142', '\040', '\006', '\256', '\237', '\377',
- '\347', '\257', '\025', '\147', '\360', '\030', '\142', '\120',
- '\333', '\147', '\360', '\030', '\142', '\220', '\007', '\232',
- '\217', '\006', '\141', '\340', '\006', '\144', '\300', '\134',
- '\150', '\020', '\006', '\156', '\100', '\006', '\061', '\240',
- '\371', '\150', '\020', '\006', '\156', '\100', '\006', '\062',
- '\240', '\331', '\141', '\340', '\006', '\144', '\040', '\003',
- '\232', '\237', '\027', '\207', '\341', '\332', '\171', '\161',
- '\030', '\231', '\177', '\376', '\132', '\221', '\006', '\262',
- '\117', '\332', '\151', '\040', '\373', '\156', '\240', '\371',
- '\355', '\377', '\006', '\156', '\260', '\373', '\151', '\077',
- '\007', '\254', '\335', '\376', '\157', '\340', '\006', '\273',
- '\237', '\366', '\163', '\060', '\007', '\232', '\237', '\373',
- '\231', '\277', '\377', '\250', '\221', '\373', '\231', '\277',
- '\377', '\371', '\177', '\376', '\241', '\375', '\372', '\231',
- '\277', '\375', '\111', '\372', '\372', '\231', '\277', '\375',
- '\232', '\237', '\373', '\231', '\137', '\376', '\111', '\372',
- '\372', '\231', '\137', '\376', '\232', '\237', '\373', '\164',
- '\040', '\006', '\165', '\020', '\374', '\244', '\235', '\373',
- '\164', '\040', '\006', '\165', '\020', '\374', '\156', '\240',
- '\371', '\154', '\300', '\006', '\165', '\357', '\006', '\177',
- '\121', '\331', '\154', '\300', '\006', '\165', '\357', '\006',
- '\177', '\141', '\376', '\157', '\237', '\244', '\371', '\037',
- '\006', '\156', '\360', '\027', '\225', '\315', '\006', '\371',
- '\037', '\006', '\156', '\360', '\027', '\346', '\377', '\366',
- '\000', '\100', '\366', '\244', '\115', '\366', '\156', '\240',
- '\371', '\155', '\220', '\006', '\144', '\100', '\006', '\256',
- '\057', '\006', '\165', '\020', '\374', '\244', '\335', '\006',
- '\151', '\100', '\006', '\144', '\340', '\372', '\142', '\120',
- '\007', '\301', '\357', '\006', '\232', '\337', '\006', '\157',
- '\120', '\007', '\173', '\001', '\000', '\155', '\360', '\006',
- '\165', '\260', '\027', '\232', '\017', '\007', '\214', '\061',
- '\006', '\151', '\240', '\244', '\160', '\300', '\030', '\143',
- '\220', '\006', '\154', '\240', '\371', '\354', '\357', '\376',
- '\340', '\177', '\332', '\363', '\017', '\376', '\232', '\017',
- '\007', '\154', '\120', '\007', '\254', '\015', '\007', '\154',
- '\120', '\007', '\163', '\240', '\371', '\161', '\120', '\007',
- '\172', '\101', '\007', '\151', '\360', '\006', '\156', '\340',
- '\370', '\210', '\017', '\000', '\161', '\120', '\007', '\172',
- '\101', '\007', '\151', '\360', '\006', '\156', '\340', '\370',
- '\210', '\257', '\371', '\316', '\177', '\374', '\372', '\317',
- '\377', '\252', '\135', '\374', '\307', '\257', '\377', '\374',
- '\257', '\371', '\316', '\177', '\374', '\325', '\237', '\006',
- '\327', '\257', '\332', '\305', '\177', '\374', '\325', '\237',
- '\006', '\327', '\257', '\371', '\316', '\177', '\374', '\337',
- '\037', '\376', '\252', '\135', '\374', '\307', '\377', '\375',
- '\341', '\257', '\371', '\316', '\177', '\374', '\142', '\120',
- '\007', '\301', '\117', '\332', '\316', '\177', '\374', '\142',
- '\120', '\007', '\301', '\357', '\006', '\232', '\057', '\007',
- '\164', '\300', '\006', '\255', '\317', '\371', '\246', '\055',
- '\007', '\164', '\300', '\006', '\255', '\317', '\371', '\157',
- '\240', '\371', '\163', '\020', '\006', '\151', '\300', '\006',
- '\227', '\137', '\371', '\000', '\060', '\007', '\141', '\220',
- '\006', '\154', '\160', '\371', '\225', '\257', '\371', '\163',
- '\040', '\006', '\200', '\177', '\007', '\156', '\340', '\370',
- '\210', '\017', '\000', '\163', '\040', '\006', '\200', '\177',
- '\007', '\156', '\340', '\370', '\210', '\257', '\371', '\163',
- '\040', '\006', '\137', '\200', '\006', '\200', '\137', '\007',
- '\142', '\340', '\372', '\216', '\217', '\370', '\000', '\060',
- '\007', '\142', '\360', '\005', '\150', '\000', '\370', '\165',
- '\040', '\006', '\256', '\357', '\370', '\210', '\257', '\371',
- '\163', '\040', '\006', '\255', '\377', '\372', '\231', '\157',
- '\367', '\000', '\060', '\007', '\142', '\320', '\372', '\257',
- '\237', '\371', '\177', '\177', '\376', '\132', '\061', '\007',
- '\142', '\060', '\374', '\305', '\177', '\374', '\216', '\217',
- '\370', '\000', '\060', '\007', '\142', '\060', '\374', '\305',
- '\177', '\374', '\216', '\217', '\370', '\232', '\077', '\007',
- '\142', '\360', '\005', '\221', '\157', '\367', '\000', '\060',
- '\007', '\142', '\360', '\005', '\221', '\377', '\367', '\347',
- '\257', '\025', '\163', '\040', '\006', '\137', '\140', '\007',
- '\200', '\137', '\007', '\142', '\340', '\372', '\216', '\217',
- '\370', '\000', '\060', '\007', '\142', '\360', '\005', '\166',
- '\000', '\370', '\165', '\040', '\006', '\256', '\357', '\370',
- '\210', '\257', '\371', '\163', '\200', '\006', '\165', '\220',
- '\372', '\256', '\017', '\000', '\163', '\200', '\006', '\165',
- '\220', '\372', '\256', '\257', '\371', '\237', '\257', '\007',
- '\151', '\340', '\006', '\231', '\375', '\371', '\172', '\220',
- '\006', '\156', '\160', '\006', '\232', '\077', '\007', '\354',
- '\177', '\375', '\253', '\315', '\376', '\327', '\237', '\377',
- '\347', '\257', '\025', '\163', '\000', '\007', '\356', '\237',
- '\007', '\143', '\020', '\006', '\244', '\075', '\007', '\160',
- '\340', '\376', '\171', '\060', '\006', '\141', '\340', '\006',
- '\232', '\077', '\007', '\164', '\160', '\030', '\000', '\060',
- '\007', '\164', '\160', '\030', '\232', '\117', '\007', '\207',
- '\161', '\006', '\145', '\340', '\332', '\164', '\160', '\030',
- '\147', '\120', '\006', '\231', '\177', '\376', '\132', '\101',
- '\007', '\143', '\220', '\366', '\163', '\300', '\332', '\164',
- '\060', '\006', '\151', '\077', '\007', '\163', '\240', '\371',
- '\252', '\017', '\007', '\255', '\377', '\372', '\231', '\157',
- '\367', '\255', '\375', '\006', '\160', '\320', '\372', '\257',
- '\237', '\371', '\177', '\177', '\376', '\132', '\241', '\372',
- '\160', '\320', '\372', '\257', '\017', '\375', '\264', '\337',
- '\332', '\157', '\000', '\007', '\255', '\377', '\372', '\320',
- '\357', '\373', '\347', '\257', '\025', '\252', '\017', '\007',
- '\303', '\137', '\374', '\307', '\277', '\373', '\311', '\217',
- '\032', '\252', '\017', '\007', '\303', '\137', '\374', '\307',
- '\277', '\373', '\311', '\237', '\377', '\347', '\257', '\025',
- '\252', '\017', '\007', '\325', '\237', '\006', '\327', '\337',
- '\332', '\157', '\000', '\007', '\325', '\237', '\006', '\327',
- '\257', '\371', '\252', '\017', '\007', '\337', '\037', '\376',
- '\255', '\375', '\006', '\160', '\360', '\375', '\341', '\257',
- '\371', '\374', '\137', '\006', '\132', '\301', '\377', '\145',
- '\260', '\006', '\232', '\137', '\007', '\154', '\120', '\367',
- '\156', '\360', '\027', '\225', '\135', '\007', '\154', '\120',
- '\367', '\156', '\360', '\027', '\346', '\377', '\366', '\257',
- '\015', '\031', '\210', '\301', '\006', '\154', '\000', '\331',
- '\217', '\041', '\006', '\210', '\301', '\006', '\154', '\020',
- '\006', '\232', '\017', '\366', '\165', '\357', '\006', '\177',
- '\121', '\331', '\140', '\137', '\367', '\156', '\360', '\027',
- '\346', '\377', '\366', '\000', '\160', '\007', '\225', '\077',
- '\006', '\233', '\175', '\007', '\225', '\077', '\006', '\150',
- '\240', '\371', '\170', '\200', '\377', '\143', '\201', '\007',
- '\370', '\317', '\372', '\347', '\257', '\025', '\357', '\141',
- '\020', '\303', '\064', '\236', '\335', '\141', '\026', '\340',
- '\041', '\036', '\115', '\131', '\036', '\045', '\115', '\322',
- '\011', '\001',
-
-};
-
-static const char file_5x7[] = {
- '\037', '\235', '\214', '\001', '\314', '\214', '\201', '\203',
- '\000', '\200', '\301', '\000', '\006', '\023', '\032', '\244',
- '\043', '\300', '\040', '\242', '\204', '\015', '\025', '\032',
- '\044', '\223', '\220', '\137', '\104', '\002', '\012', '\021',
- '\002', '\100', '\203', '\021', '\000', '\230', '\001', '\006',
- '\013', '\112', '\004', '\200', '\053', '\201', '\101', '\144',
- '\007', '\014', '\202', '\030', '\011', '\000', '\102', '\104',
- '\100', '\021', '\014', '\002', '\141', '\211', '\010', '\044',
- '\000', '\110', '\023', '\014', '\002', '\142', '\111', '\316',
- '\200', '\101', '\014', '\027', '\022', '\152', '\124', '\110',
- '\321', '\040', '\277', '\016', '\043', '\203', '\216', '\014',
- '\040', '\041', '\141', '\316', '\203', '\033', '\022', '\256',
- '\074', '\310', '\042', '\241', '\014', '\241', '\076', '\022',
- '\026', '\021', '\272', '\044', '\141', '\023', '\241', '\133',
- '\022', '\212', '\021', '\032', '\047', '\241', '\034', '\205',
- '\051', '\015', '\366', '\121', '\150', '\044', '\341', '\303',
- '\204', '\135', '\015', '\126', '\122', '\030', '\027', '\200',
- '\050', '\241', '\252', '\022', '\262', '\122', '\170', '\325',
- '\240', '\056', '\241', '\313', '\022', '\116', '\023', '\112',
- '\056', '\241', '\071', '\226', '\000', '\362', '\145', '\114',
- '\130', '\100', '\143', '\200', '\007', '\032', '\147', '\070',
- '\306', '\241', '\361', '\315', '\120', '\005', '\011', '\355',
- '\014', '\075', '\223', '\060', '\320', '\120', '\237', '\006',
- '\025', '\015', '\055', '\240', '\260', '\222', '\106', '\043',
- '\117', '\234', '\120', '\161', '\022', '\244', '\111', '\221',
- '\057', '\122', '\212', '\034', '\111', '\062', '\205', '\212',
- '\224', '\054', '\006', '\121', '\127', '\161', '\102', '\344',
- '\066', '\200', '\046', '\151', '\346', '\214', '\001', '\140',
- '\244', '\165', '\022', '\046', '\131', '\276', '\260', '\166',
- '\115', '\074', '\015', '\236', '\062', '\024', '\257', '\024',
- '\111', '\162', '\004', '\011', '\025', '\345', '\255', '\267',
- '\066', '\201', '\236', '\246', '\116', '\033', '\000', '\123',
- '\230', '\004', '\121', '\015', '\100', '\012', '\370', '\042',
- '\124', '\256', '\044', '\041', '\102', '\005', '\011', '\166',
- '\346', '\116', '\336', '\310', '\151', '\023', '\206', '\015',
- '\200', '\040', '\104', '\210', '\174', '\251', '\235', '\205',
- '\311', '\353', '\345', '\133', '\001', '\000', '\105', '\022',
- '\130', '\024', '\301', '\304', '\176', '\111', '\150', '\261',
- '\025', '\024', '\117', '\044', '\241', '\032', '\202', '\012',
- '\226', '\127', '\304', '\024', '\117', '\060', '\121', '\005',
- '\025', '\111', '\244', '\366', '\005', '\026', '\022', '\122',
- '\150', '\041', '\206', '\032', '\342', '\066', '\005', '\024',
- '\101', '\014', '\341', '\340', '\021', '\000', '\014', '\161',
- '\237', '\025', '\105', '\110', '\021', '\304', '\021', '\257',
- '\251', '\307', '\036', '\022', '\051', '\042', '\021', '\204',
- '\024', '\123', '\240', '\007', '\233', '\154', '\264', '\331',
- '\206', '\033', '\155', '\117', '\340', '\200', '\103', '\015',
- '\071', '\324', '\170', '\143', '\216', '\327', '\025', '\341',
- '\304', '\020', '\117', '\020', '\161', '\042', '\000', '\061',
- '\000', '\260', '\033', '\021', '\055', '\062', '\341', '\340',
- '\153', '\014', '\116', '\221', '\004', '\210', '\116', '\000',
- '\100', '\145', '\155', '\016', '\006', '\301', '\145', '\212',
- '\117', '\100', '\221', '\205', '\024', '\324', '\131', '\227',
- '\342', '\033', '\160', '\344', '\041', '\107', '\032', '\147',
- '\240', '\101', '\007', '\010', '\061', '\344', '\220', '\103',
- '\014', '\054', '\320', '\151', '\047', '\016', '\040', '\120',
- '\201', '\106', '\031', '\040', '\074', '\001', '\107', '\031',
- '\156', '\200', '\160', '\204', '\034', '\157', '\324', '\001',
- '\007', '\161', '\251', '\121', '\001', '\100', '\013', '\300',
- '\011', '\327', '\202', '\021', '\316', '\101', '\007', '\051',
- '\167', '\336', '\265', '\040', '\105', '\013', '\361', '\315',
- '\127', '\137', '\013', '\055', '\334', '\020', '\052', '\014',
- '\241', '\326', '\120', '\152', '\013', '\103', '\264', '\120',
- '\003', '\251', '\100', '\012', '\111', '\144', '\013', '\121',
- '\112', '\227', '\246', '\243', '\261', '\171', '\170', '\141',
- '\206', '\135', '\142', '\361', '\005', '\022', '\323', '\125',
- '\347', '\150', '\024', '\125', '\340', '\367', '\205', '\214',
- '\355', '\041', '\046', '\224', '\102', '\240', '\001', '\060',
- '\324', '\120', '\006', '\221', '\106', '\232', '\117', '\314',
- '\002', '\340', '\323', '\263', '\312', '\032', '\153', '\355',
- '\265', '\330', '\146', '\133', '\055', '\000', '\340', '\000',
- '\000', '\110', '\041', '\205', '\030', '\022', '\310', '\267',
- '\341', '\216', '\013', '\256', '\270', '\344', '\242', '\173',
- '\256', '\271', '\345', '\246', '\313', '\256', '\272', '\355',
- '\256', '\353', '\356', '\274', '\362', '\326', '\033', '\357',
- '\275', '\350', '\032', '\202', '\357', '\273', '\374', '\322',
- '\333', '\256', '\276', '\360', '\006', '\334', '\257', '\275',
- '\002', '\373', '\133', '\060', '\301', '\003', '\357', '\153',
- '\160', '\302', '\007', '\053', '\214', '\360', '\302', '\020',
- '\077', '\054', '\261', '\303', '\024', '\067', '\154', '\061',
- '\303', '\030', '\107', '\134', '\161', '\306', '\023', '\137',
- '\254', '\261', '\307', '\035', '\163', '\274', '\361', '\307',
- '\042', '\203', '\074', '\162', '\310', '\044', '\247', '\374',
- '\060', '\300', '\045', '\267', '\234', '\062', '\313', '\052',
- '\237', '\054', '\263', '\311', '\064', '\273', '\214', '\362',
- '\315', '\063', '\333', '\234', '\163', '\314', '\065', '\363',
- '\254', '\163', '\317', '\070', '\003', '\275', '\163', '\320',
- '\077', '\027', '\355', '\363', '\321', '\104', '\043', '\075',
- '\164', '\271', '\043', '\165', '\073', '\122', '\132', '\000',
- '\070', '\220', '\120', '\005', '\011', '\161', '\220', '\320',
- '\010', '\011', '\251', '\220', '\120', '\224', '\006', '\341',
- '\220', '\320', '\017', '\011', '\265', '\145', '\320', '\127',
- '\006', '\071', '\152', '\120', '\130', '\006', '\215', '\145',
- '\120', '\032', '\011', '\055', '\152', '\320', '\035', '\011',
- '\371', '\221', '\120', '\041', '\011', '\061', '\222', '\320',
- '\044', '\011', '\151', '\222', '\120', '\050', '\011', '\241',
- '\222', '\320', '\053', '\011', '\331', '\222', '\120', '\057',
- '\011', '\021', '\223', '\120', '\140', '\006', '\111', '\223',
- '\120', '\066', '\011', '\071', '\015', '\300', '\071', '\011',
- '\271', '\223', '\120', '\075', '\025', '\045', '\064', '\200',
- '\106', '\012', '\150', '\024', '\201', '\106', '\030', '\150',
- '\364', '\201', '\106', '\046', '\150', '\324', '\202', '\106',
- '\064', '\150', '\264', '\203', '\106', '\102', '\150', '\224',
- '\204', '\106', '\120', '\150', '\164', '\205', '\106', '\136',
- '\150', '\124', '\206', '\106', '\154', '\150', '\064', '\207',
- '\106', '\172', '\150', '\344', '\231', '\103', '\032', '\075',
- '\242', '\221', '\045', '\032', '\165', '\242', '\021', '\051',
- '\032', '\255', '\242', '\221', '\054', '\032', '\345', '\242',
- '\021', '\060', '\032', '\035', '\243', '\221', '\063', '\032',
- '\125', '\243', '\021', '\067', '\032', '\215', '\243', '\221',
- '\072', '\032', '\305', '\243', '\021', '\076', '\032', '\375',
- '\243', '\221', '\001', '\021', '\065', '\020', '\021', '\005',
- '\021', '\155', '\020', '\221', '\010', '\021', '\245', '\020',
- '\021', '\014', '\021', '\335', '\020', '\221', '\017', '\021',
- '\025', '\021', '\021', '\023', '\021', '\115', '\021', '\221',
- '\026', '\021', '\205', '\021', '\021', '\032', '\021', '\275',
- '\021', '\221', '\035', '\021', '\351', '\103', '\104', '\010',
- '\021', '\221', '\105', '\104', '\104', '\022', '\021', '\311',
- '\104', '\104', '\100', '\021', '\221', '\123', '\104', '\304',
- '\025', '\021', '\251', '\105', '\104', '\170', '\021', '\221',
- '\141', '\104', '\104', '\031', '\021', '\211', '\106', '\104',
- '\260', '\021', '\221', '\157', '\104', '\304', '\034', '\021',
- '\151', '\107', '\104', '\350', '\021', '\221', '\175', '\104',
- '\104', '\000', '\066', '\111', '\200', '\115', '\040', '\140',
- '\223', '\013', '\330', '\304', '\003', '\066', '\051', '\201',
- '\115', '\130', '\140', '\223', '\031', '\330', '\104', '\007',
- '\066', '\011', '\202', '\115', '\220', '\140', '\223', '\047',
- '\330', '\304', '\012', '\066', '\351', '\202', '\115', '\310',
- '\140', '\223', '\065', '\330', '\104', '\016', '\066', '\311',
- '\203', '\115', '\000', '\141', '\223', '\103', '\330', '\304',
- '\021', '\066', '\251', '\204', '\115', '\070', '\141', '\223',
- '\121', '\330', '\104', '\025', '\066', '\211', '\205', '\115',
- '\160', '\141', '\223', '\137', '\330', '\304', '\030', '\066',
- '\151', '\206', '\115', '\250', '\141', '\223', '\155', '\330',
- '\104', '\034', '\066', '\111', '\207', '\115', '\340', '\141',
- '\223', '\173', '\330', '\304', '\037', '\066', '\051', '\100',
- '\107', '\030', '\320', '\221', '\011', '\164', '\104', '\003',
- '\035', '\011', '\101', '\107', '\120', '\320', '\221', '\027',
- '\164', '\304', '\006', '\035', '\351', '\101', '\107', '\210',
- '\320', '\221', '\045', '\164', '\104', '\012', '\035', '\311',
- '\102', '\107', '\300', '\320', '\221', '\063', '\164', '\304',
- '\015', '\035', '\251', '\103', '\107', '\370', '\320', '\221',
- '\101', '\164', '\104', '\021', '\035', '\211', '\104', '\107',
- '\060', '\321', '\221', '\117', '\164', '\304', '\024', '\035',
- '\151', '\105', '\107', '\150', '\321', '\221', '\135', '\164',
- '\104', '\030', '\035', '\111', '\106', '\107', '\240', '\321',
- '\221', '\153', '\164', '\304', '\033', '\035', '\051', '\107',
- '\107', '\330', '\321', '\221', '\171', '\164', '\104', '\037',
- '\035', '\011', '\000', '\151', '\000', '\200', '\200', '\135',
- '\076', '\140', '\227', '\026', '\330', '\145', '\007', '\166',
- '\111', '\202', '\135', '\256', '\140', '\227', '\062', '\330',
- '\145', '\016', '\166', '\011', '\204', '\135', '\036', '\141',
- '\227', '\116', '\330', '\145', '\025', '\166', '\311', '\205',
- '\135', '\216', '\141', '\227', '\152', '\330', '\145', '\034',
- '\166', '\211', '\207', '\135', '\376', '\141', '\227', '\206',
- '\330', '\145', '\043', '\166', '\111', '\211', '\135', '\156',
- '\142', '\227', '\242', '\330', '\145', '\052', '\166', '\011',
- '\213', '\135', '\336', '\142', '\227', '\276', '\330', '\145',
- '\061', '\166', '\311', '\214', '\135', '\116', '\143', '\227',
- '\332', '\330', '\145', '\070', '\166', '\211', '\216', '\135',
- '\276', '\143', '\227', '\366', '\330', '\145', '\077', '\166',
- '\111', '\000', '\320', '\054', '\000', '\064', '\022', '\000',
- '\115', '\006', '\100', '\003', '\002', '\320', '\000', '\201',
- '\001', '\072', '\301', '\300', '\326', '\014', '\362', '\200',
- '\212', '\132', '\324', '\040', '\004', '\160', '\300', '\007',
- '\034', '\200', '\021', '\005', '\024', '\300', '\243', '\036',
- '\005', '\100', '\001', '\016', '\120', '\200', '\002', '\160',
- '\224', '\000', '\227', '\033', '\100', '\003', '\010', '\100',
- '\307', '\224', '\032', '\100', '\001', '\057', '\015', '\100',
- '\000', '\006', '\100', '\107', '\072', '\022', '\100', '\001',
- '\035', '\301', '\050', '\107', '\243', '\146', '\220', '\004',
- '\054', '\240', '\001', '\011', '\040', '\000', '\113', '\113',
- '\132', '\000', '\001', '\234', '\124', '\250', '\004', '\200',
- '\132', '\102', '\016', '\200', '\324', '\252', '\041', '\025',
- '\251', '\126', '\303', '\250', '\120', '\077', '\320', '\324',
- '\017', '\260', '\304', '\252', '\043', '\301', '\252', '\104',
- '\264', '\252', '\020', '\253', '\102', '\365', '\251', '\102',
- '\145', '\052', '\130', '\271', '\152', '\020', '\252', '\202',
- '\365', '\251', '\010', '\040', '\200', '\000', '\010', '\200',
- '\000', '\251', '\255', '\065', '\255', '\106', '\115', '\210',
- '\003', '\024', '\100', '\327', '\220', '\160', '\324', '\001',
- '\021', '\141', '\200', '\000', '\016', '\040', '\200', '\006',
- '\050', '\044', '\247', '\054', '\171', '\052', '\000', '\072',
- '\132', '\127', '\205', '\050', '\340', '\003', '\207', '\305',
- '\114', '\324', '\114', '\112', '\001', '\251', '\005', '\040',
- '\250', '\002', '\110', '\200', '\110', '\004', '\120', '\324',
- '\217', '\112', '\113', '\000', '\314', '\122', '\253', '\000',
- '\066', '\213', '\221', '\265', '\042', '\065', '\042', '\105',
- '\345', '\053', '\101', '\011', '\140', '\126', '\211', '\200',
- '\157', '\050', '\017', '\140', '\211', '\001', '\100', '\003',
- '\127', '\215', '\120', '\226', '\250', '\015', '\101', '\341',
- '\146', '\367', '\052', '\055', '\311', '\252', '\065', '\265',
- '\017', '\100', '\200', '\001', '\020', '\220', '\000', '\237',
- '\024', '\264', '\000', '\017', '\020', '\052', '\000', '\040',
- '\163', '\000', '\336', '\372', '\304', '\000', '\001', '\070',
- '\100', '\002', '\172', '\073', '\334', '\264', '\152', '\266',
- '\266', '\006', '\130', '\356', '\161', '\227', '\353', '\000',
- '\335', '\032', '\144', '\265', '\322', '\002', '\015', '\166',
- '\117', '\073', '\130', '\314', '\256', '\065', '\041', '\270',
- '\025', '\312', '\132', '\061', '\013', '\000', '\312', '\252',
- '\265', '\274', '\265', '\155', '\100', '\003', '\002', '\060',
- '\335', '\004', '\074', '\140', '\271', '\000', '\120', '\256',
- '\162', '\023', '\220', '\222', '\350', '\312', '\224', '\271',
- '\363', '\135', '\156', '\112', '\210', '\053', '\123', '\334',
- '\046', '\127', '\246', '\010', '\261', '\057', '\120', '\245',
- '\266', '\334', '\367', '\302', '\227', '\257', '\263', '\115',
- '\011', '\002', '\026', '\154', '\134', '\000', '\044', '\240',
- '\000', '\003', '\030', '\100', '\001', '\114', '\002', '\340',
- '\376', '\072', '\270', '\242', '\313', '\065', '\211', '\117',
- '\177', '\012', '\324', '\332', '\146', '\330', '\047', '\363',
- '\075', '\200', '\114', '\075', '\354', '\323', '\335', '\206',
- '\170', '\302', '\265', '\135', '\053', '\176', '\147', '\273',
- '\131', '\007', '\147', '\230', '\271', '\057', '\306', '\156',
- '\206', '\061', '\354', '\342', '\325', '\302', '\027', '\266',
- '\055', '\316', '\255', '\132', '\037', '\023', '\337', '\012',
- '\247', '\045', '\000', '\157', '\065', '\210', '\130', '\303',
- '\132', '\336', '\135', '\042', '\046', '\265', '\003', '\370',
- '\256', '\104', '\034', '\220', '\200', '\006', '\140', '\106',
- '\246', '\041', '\116', '\010', '\162', '\331', '\313', '\313',
- '\266', '\122', '\127', '\312', '\015', '\030', '\200', '\157',
- '\025', '\260', '\327', '\026', '\033', '\204', '\311', '\310',
- '\165', '\000', '\224', '\063', '\214', '\336', '\044', '\323',
- '\026', '\043', '\110', '\055', '\252', '\114', '\041', '\214',
- '\142', '\063', '\157', '\026', '\152', '\300', '\205', '\257',
- '\220', '\311', '\174', '\135', '\351', '\056', '\125', '\277',
- '\032', '\141', '\162', '\002', '\252', '\073', '\347', '\021',
- '\177', '\231', '\246', '\051', '\171', '\363', '\146', '\041',
- '\332', '\323', '\053', '\067', '\253', '\244', '\021', '\161',
- '\161', '\105', '\023', '\322', '\333', '\350', '\062', '\072',
- '\001', '\070', '\215', '\110', '\160', '\005', '\220', '\132',
- '\265', '\232', '\271', '\263', '\054', '\156', '\010', '\220',
- '\301', '\107', '\336', '\220', '\152', '\353', '\257', '\203',
- '\155', '\352', '\140', '\035', '\120', '\322', '\235', '\352',
- '\225', '\257', '\176', '\005', '\100', '\004', '\346', '\352',
- '\200', '\230', '\040', '\032', '\301', '\122', '\015', '\065',
- '\000', '\364', '\372', '\122', '\006', '\350', '\126', '\261',
- '\012', '\151', '\165', '\005', '\046', '\120', '\201', '\125',
- '\033', '\240', '\000', '\311', '\112', '\210', '\004', '\022',
- '\320', '\024', '\360', '\212', '\104', '\041', '\251', '\375',
- '\162', '\004', '\056', '\060', '\201', '\011', '\254', '\072',
- '\331', '\177', '\305', '\351', '\137', '\111', '\073', '\125',
- '\151', '\251', '\065', '\131', '\253', '\055', '\150', '\102',
- '\316', '\073', '\222', '\014', '\213', '\330', '\001', '\013',
- '\130', '\000', '\135', '\025', '\213', '\135', '\304', '\250',
- '\265', '\240', '\031', '\205', '\110', '\121', '\273', '\075',
- '\354', '\203', '\334', '\227', '\001', '\325', '\005', '\160',
- '\003', '\322', '\312', '\200', '\010', '\013', '\140', '\001',
- '\360', '\106', '\100', '\154', '\165', '\331', '\220', '\350',
- '\272', '\027', '\276', '\376', '\066', '\260', '\207', '\005',
- '\036', '\160', '\200', '\027', '\330', '\340', '\377', '\066',
- '\011', '\251', '\033', '\100', '\122', '\277', '\332', '\367',
- '\261', '\340', '\343', '\057', '\217', '\045', '\356', '\137',
- '\021', '\117', '\374', '\277', '\074', '\106', '\360', '\233',
- '\343', '\313', '\342', '\224', '\150', '\234', '\266', '\037',
- '\367', '\270', '\002', '\304', '\255', '\200', '\224', '\000',
- '\225', '\303', '\046', '\361', '\267', '\235', '\125', '\316',
- '\134', '\226', '\267', '\167', '\345', '\061', '\146', '\264',
- '\215', '\243', '\246', '\336', '\160', '\247', '\344', '\305',
- '\060', '\216', '\071', '\316', '\175', '\262', '\163', '\221',
- '\042', '\272', '\305', '\311', '\245', '\357', '\210', '\243',
- '\253', '\334', '\005', '\064', '\146', '\255', '\114', '\166',
- '\162', '\167', '\223', '\216', '\231', '\233', '\062', '\035',
- '\000', '\036', '\175', '\072', '\146', '\236', '\276', '\332',
- '\247', '\177', '\271', '\001', '\046', '\225', '\262', '\114',
- '\071', '\135', '\320', '\054', '\373', '\126', '\000', '\006',
- '\360', '\172', '\221', '\303', '\256', '\145', '\221', '\112',
- '\113', '\354', '\100', '\066', '\163', '\240', '\147', '\272',
- '\161', '\312', '\252', '\335', '\354', '\157', '\027', '\000',
- '\003', '\374', '\355', '\023', '\217', '\346', '\267', '\274',
- '\005', '\265', '\363', '\265', '\127', '\356', '\341', '\272',
- '\003', '\333', '\316', '\317', '\262', '\263', '\264', '\206',
- '\073', '\370', '\253', '\057', '\040', '\320', '\004', '\310',
- '\260', '\324', '\324', '\252', '\370', '\301', '\067', '\036',
- '\063', '\215', '\147', '\074', '\244', '\317', '\033', '\164',
- '\241', '\103', '\176', '\362', '\211', '\116', '\310', '\077',
- '\214', '\205', '\220', '\206', '\200', '\004', '\043', '\324',
- '\122', '\260', '\203', '\241', '\016', '\200', '\005', '\314',
- '\032', '\000', '\176', '\225', '\132', '\152', '\041', '\240',
- '\152', '\000', '\064', '\045', '\047', '\024', '\000', '\000',
- '\325', '\054', '\000', '\200', '\240', '\110', '\064', '\003',
- '\000', '\320', '\000', '\000', '\242', '\142', '\065', '\244',
- '\170', '\000', '\000', '\126', '\135', '\111', '\010', '\000',
- '\040', '\002', '\000', '\140', '\215', '\004', '\000', '\050',
- '\001', '\000', '\114', '\000', '\200', '\023', '\000', '\000',
- '\005', '\000', '\110', '\001', '\000', '\264', '\266', '\002',
- '\000', '\124', '\245', '\005', '\000', '\160', '\001', '\000',
- '\136', '\000', '\000', '\030', '\100', '\011', '\000', '\127',
- '\231', '\001', '\000', '\150', '\000', '\200', '\032', '\000',
- '\300', '\006', '\000', '\270', '\001', '\000', '\274', '\126',
- '\044', '\035', '\000', '\140', '\007', '\000', '\340', '\001',
- '\000', '\172', '\000', '\200', '\254', '\200', '\155', '\046',
- '\101', '\000', '\200', '\020', '\122', '\344', '\045', '\000',
- '\154', '\245', '\055', '\050', '\102', '\043', '\111', '\000',
- '\000', '\112', '\000', '\000', '\135', '\301', '\004', '\277',
- '\001', '\000', '\135', '\362', '\004', '\002', '\002', '\000',
- '\121', '\120', '\036', '\340', '\001', '\000', '\216', '\122',
- '\005', '\000', '\140', '\005', '\000', '\160', '\005', '\000',
- '\300', '\041', '\270', '\241', '\005', '\000', '\020', '\026',
- '\134', '\000', '\000', '\135', '\000', '\000', '\136', '\000',
- '\000', '\137', '\340', '\021', '\000', '\020', '\006', '\000',
- '\060', '\026', '\303', '\101', '\021', '\145', '\000', '\000',
- '\146', '\000', '\000', '\234', '\201', '\006', '\000', '\300',
- '\066', '\152', '\000', '\000', '\153', '\000', '\000', '\366',
- '\361', '\035', '\156', '\000', '\000', '\157', '\000', '\000',
- '\213', '\122', '\026', '\147', '\061', '\007', '\000', '\100',
- '\007', '\000', '\120', '\007', '\000', '\140', '\007', '\000',
- '\000', '\067', '\170', '\000', '\000', '\171', '\000', '\000',
- '\172', '\000', '\000', '\173', '\000', '\000', '\174', '\000',
- '\000', '\153', '\041', '\067', '\177', '\000', '\000', '\377',
- '\220', '\205', '\132', '\270', '\205', '\134', '\330', '\205',
- '\136', '\370', '\205', '\140', '\030', '\206', '\140', '\270',
- '\023', '\201', '\000', '\000', '\202', '\000', '\000', '\203',
- '\000', '\000', '\204', '\000', '\000', '\164', '\143', '\010',
- '\000', '\160', '\010', '\000', '\360', '\020', '\211', '\000',
- '\000', '\212', '\000', '\000', '\213', '\000', '\000', '\166',
- '\323', '\010', '\000', '\340', '\010', '\000', '\360', '\010',
- '\067', '\001', '\000', '\221', '\000', '\000', '\222', '\000',
- '\000', '\170', '\103', '\011', '\000', '\060', '\027', '\226',
- '\000', '\000', '\227', '\000', '\000', '\230', '\000', '\000',
- '\231', '\000', '\000', '\172', '\263', '\011', '\000', '\300',
- '\011', '\000', '\320', '\011', '\000', '\340', '\011', '\000',
- '\360', '\011', '\000', '\000', '\012', '\000', '\300', '\067',
- '\167', '\061', '\012', '\000', '\100', '\012', '\000', '\120',
- '\012', '\000', '\140', '\012', '\000', '\160', '\012', '\000',
- '\340', '\067', '\251', '\000', '\000', '\171', '\261', '\012',
- '\000', '\260', '\027', '\255', '\000', '\000', '\256', '\000',
- '\000', '\200', '\003', '\013', '\000', '\020', '\013', '\000',
- '\040', '\013', '\000', '\060', '\013', '\000', '\100', '\013',
- '\000', '\120', '\013', '\000', '\040', '\070', '\267', '\100',
- '\022', '\000', '\220', '\013', '\000', '\360', '\027', '\273',
- '\000', '\000', '\274', '\000', '\000', '\204', '\343', '\013',
- '\000', '\360', '\013', '\000', '\000', '\014', '\000', '\020',
- '\014', '\000', '\040', '\014', '\000', '\060', '\014', '\000',
- '\140', '\070', '\305', '\000', '\000', '\306', '\000', '\000',
- '\307', '\000', '\000', '\310', '\000', '\000', '\311', '\000',
- '\000', '\312', '\000', '\000', '\201', '\301', '\014', '\000',
- '\320', '\014', '\000', '\340', '\014', '\000', '\360', '\014',
- '\000', '\000', '\015', '\000', '\020', '\015', '\000', '\240',
- '\070', '\203', '\101', '\015', '\000', '\120', '\015', '\000',
- '\140', '\015', '\000', '\160', '\015', '\000', '\200', '\015',
- '\000', '\300', '\070', '\332', '\000', '\000', '\333', '\000',
- '\000', '\334', '\000', '\000', '\335', '\000', '\000', '\336',
- '\000', '\000', '\337', '\300', '\022', '\216', '\003', '\101',
- '\006', '\341', '\220', '\262', '\370', '\100', '\022', '\371',
- '\220', '\023', '\031', '\221', '\024', '\171', '\221', '\026',
- '\231', '\221', '\020', '\271', '\221', '\025', '\311', '\221',
- '\030', '\351', '\221', '\032', '\331', '\221', '\042', '\371',
- '\221', '\043', '\031', '\222', '\044', '\171', '\222', '\046',
- '\231', '\222', '\040', '\271', '\222', '\045', '\311', '\222',
- '\050', '\351', '\222', '\052', '\331', '\222', '\062', '\371',
- '\222', '\063', '\031', '\223', '\064', '\171', '\223', '\066',
- '\231', '\223', '\060', '\271', '\223', '\065', '\311', '\223',
- '\070', '\351', '\223', '\072', '\331', '\223', '\102', '\371',
- '\223', '\103', '\031', '\224', '\104', '\171', '\224', '\106',
- '\231', '\224', '\100', '\271', '\224', '\105', '\311', '\224',
- '\110', '\351', '\224', '\112', '\331', '\224', '\122', '\371',
- '\224', '\123', '\031', '\225', '\124', '\171', '\225', '\126',
- '\231', '\225', '\012', '\341', '\070', '\012', '\141', '\144',
- '\270', '\006', '\155', '\261', '\147', '\020', '\270', '\147',
- '\020', '\277', '\147', '\020', '\130', '\143', '\020', '\320',
- '\147', '\020', '\330', '\147', '\020', '\175', '\221', '\176',
- '\011', '\041', '\177', '\006', '\221', '\177', '\271', '\001',
- '\027', '\011', '\001', '\005', '\011', '\101', '\201', '\006',
- '\301', '\201', '\006', '\121', '\202', '\023', '\221', '\020',
- '\154', '\143', '\020', '\073', '\150', '\020', '\102', '\150',
- '\020', '\113', '\250', '\026', '\011', '\161', '\206', '\006',
- '\001', '\207', '\006', '\141', '\067', '\006', '\021', '\210',
- '\006', '\221', '\210', '\006', '\041', '\211', '\006', '\301',
- '\211', '\006', '\101', '\212', '\006', '\201', '\212', '\006',
- '\261', '\212', '\006', '\341', '\212', '\006', '\021', '\213',
- '\006', '\001', '\070', '\006', '\201', '\213', '\006', '\301',
- '\213', '\006', '\001', '\214', '\006', '\061', '\214', '\006',
- '\141', '\214', '\006', '\221', '\214', '\006', '\101', '\070',
- '\006', '\001', '\215', '\006', '\101', '\215', '\006', '\201',
- '\215', '\006', '\261', '\215', '\006', '\361', '\215', '\006',
- '\061', '\216', '\006', '\201', '\070', '\351', '\230', '\020',
- '\356', '\150', '\020', '\362', '\150', '\020', '\203', '\141',
- '\020', '\370', '\150', '\020', '\374', '\150', '\020', '\214',
- '\143', '\020', '\003', '\151', '\020', '\007', '\151', '\020',
- '\013', '\151', '\020', '\341', '\220', '\020', '\343', '\220',
- '\020', '\345', '\220', '\020', '\220', '\143', '\020', '\351',
- '\220', '\020', '\353', '\220', '\020', '\355', '\220', '\020',
- '\357', '\220', '\020', '\361', '\220', '\020', '\363', '\060',
- '\071', '\011', '\161', '\017', '\011', '\241', '\030', '\006',
- '\261', '\017', '\011', '\321', '\017', '\232', '\047', '\024',
- '\032', '\161', '\071', '\315', '\242', '\021', '\042', '\326',
- '\123', '\032', '\261', '\000', '\032', '\261', '\136', '\024',
- '\245', '\071', '\032', '\061', '\001', '\032', '\121', '\001',
- '\032', '\161', '\001', '\032', '\221', '\001', '\032', '\261',
- '\001', '\032', '\321', '\001', '\236', '\243', '\021', '\041',
- '\240', '\021', '\043', '\240', '\021', '\045', '\240', '\021',
- '\047', '\240', '\021', '\051', '\240', '\021', '\053', '\040',
- '\072', '\032', '\361', '\002', '\032', '\021', '\003', '\221',
- '\241', '\021', '\065', '\240', '\021', '\067', '\240', '\021',
- '\071', '\140', '\072', '\032', '\321', '\003', '\032', '\361',
- '\003', '\032', '\021', '\004', '\032', '\061', '\004', '\032',
- '\121', '\004', '\032', '\161', '\004', '\252', '\243', '\021',
- '\113', '\240', '\021', '\115', '\240', '\021', '\117', '\240',
- '\021', '\121', '\240', '\021', '\123', '\240', '\021', '\125',
- '\340', '\072', '\032', '\221', '\005', '\032', '\261', '\005',
- '\032', '\321', '\005', '\032', '\361', '\005', '\032', '\021',
- '\006', '\032', '\161', '\006', '\264', '\243', '\021', '\161',
- '\240', '\021', '\232', '\141', '\020', '\173', '\240', '\021',
- '\200', '\240', '\021', '\205', '\240', '\021', '\242', '\141',
- '\020', '\276', '\143', '\020', '\224', '\240', '\021', '\231',
- '\240', '\021', '\236', '\240', '\021', '\243', '\240', '\021',
- '\250', '\240', '\021', '\255', '\160', '\074', '\032', '\161',
- '\013', '\032', '\301', '\013', '\032', '\021', '\014', '\032',
- '\141', '\014', '\032', '\261', '\014', '\032', '\001', '\015',
- '\321', '\243', '\021', '\332', '\240', '\021', '\337', '\240',
- '\021', '\344', '\240', '\021', '\351', '\240', '\021', '\356',
- '\240', '\021', '\363', '\260', '\075', '\032', '\321', '\017',
- '\256', '\025', '\021', '\174', '\365', '\145', '\021', '\061',
- '\001', '\021', '\201', '\001', '\021', '\321', '\001', '\347',
- '\023', '\021', '\047', '\020', '\021', '\054', '\020', '\021',
- '\061', '\020', '\021', '\070', '\020', '\021', '\075', '\020',
- '\021', '\102', '\020', '\021', '\107', '\060', '\077', '\021',
- '\021', '\005', '\021', '\141', '\005', '\021', '\261', '\005',
- '\021', '\001', '\006', '\021', '\121', '\006', '\021', '\301',
- '\006', '\021', '\021', '\007', '\377', '\023', '\021', '\173',
- '\360', '\022', '\021', '\121', '\010', '\021', '\241', '\010',
- '\021', '\021', '\011', '\021', '\141', '\011', '\021', '\261',
- '\011', '\013', '\024', '\021', '\245', '\020', '\021', '\252',
- '\020', '\021', '\257', '\020', '\021', '\267', '\060', '\101',
- '\021', '\021', '\014', '\021', '\141', '\014', '\021', '\261',
- '\014', '\021', '\001', '\015', '\021', '\121', '\015', '\021',
- '\241', '\015', '\021', '\041', '\016', '\021', '\161', '\016',
- '\021', '\301', '\016', '\021', '\021', '\017', '\021', '\141',
- '\017', '\045', '\224', '\150', '\161', '\144', '\023', '\012',
- '\140', '\023', '\017', '\140', '\023', '\024', '\140', '\023',
- '\031', '\360', '\102', '\066', '\061', '\002', '\066', '\201',
- '\002', '\066', '\321', '\002', '\066', '\041', '\003', '\066',
- '\161', '\003', '\066', '\301', '\003', '\071', '\144', '\023',
- '\106', '\140', '\023', '\113', '\140', '\023', '\120', '\140',
- '\023', '\125', '\140', '\023', '\103', '\000', '\003', '\370',
- '\232', '\042', '\370', '\032', '\045', '\367', '\012', '\003',
- '\127', '\321', '\257', '\342', '\327', '\257', '\344', '\327',
- '\257', '\346', '\327', '\257', '\350', '\327', '\257', '\352',
- '\167', '\257', '\061', '\340', '\175', '\012', '\313', '\257',
- '\060', '\020', '\003', '\377', '\372', '\260', '\001', '\373',
- '\260', '\003', '\373', '\260', '\005', '\373', '\260', '\007',
- '\373', '\260', '\011', '\353', '\257', '\014', '\353', '\257',
- '\016', '\053', '\003', '\021', '\053', '\003', '\023', '\053',
- '\003', '\025', '\053', '\003', '\027', '\053', '\003', '\031',
- '\053', '\003', '\033', '\073', '\003', '\035', '\073', '\003',
- '\016', '\073', '\003', '\021', '\073', '\003', '\023', '\073',
- '\003', '\025', '\073', '\003', '\027', '\073', '\003', '\031',
- '\073', '\003', '\033', '\113', '\003', '\336', '\067', '\174',
- '\305', '\167', '\174', '\311', '\267', '\174', '\315', '\367',
- '\174', '\321', '\067', '\175', '\000', '\120', '\175', '\327',
- '\227', '\175', '\333', '\327', '\175', '\337', '\027', '\176',
- '\343', '\127', '\176', '\347', '\347', '\226', '\354', '\007',
- '\000', '\356', '\007', '\177', '\362', '\107', '\177', '\366',
- '\007', '\000', '\370', '\247', '\177', '\374', '\107', '\004',
- '\376', '\107', '\034', '\000', '\020', '\200', '\000', '\060',
- '\200', '\005', '\170', '\200', '\011', '\270', '\200', '\015',
- '\370', '\200', '\346', '\061', '\005', '\022', '\050', '\045',
- '\025', '\170', '\201', '\031', '\010', '\000', '\033', '\330',
- '\201', '\000', '\360', '\201', '\041', '\070', '\202', '\045',
- '\010', '\006', '\047', '\230', '\202', '\000', '\260', '\202',
- '\000', '\320', '\202', '\057', '\030', '\203', '\063', '\010',
- '\000', '\065', '\170', '\203', '\071', '\010', '\000', '\073',
- '\330', '\203', '\077', '\010', '\000', '\101', '\070', '\204',
- '\105', '\170', '\204', '\111', '\010', '\000', '\113', '\330',
- '\204', '\117', '\030', '\205', '\123', '\130', '\205', '\372',
- '\307', '\006', '\141', '\340', '\006', '\067', '\070', '\004',
- '\061', '\140', '\003', '\014', '\373', '\271', '\374', '\372',
- '\271', '\377', '\372', '\271', '\001', '\373', '\271', '\003',
- '\373', '\271', '\005', '\373', '\271', '\007', '\373', '\271',
- '\011', '\373', '\271', '\136', '\343', '\271', '\066', '\120',
- '\044', '\236', '\173', '\003', '\241', '\173', '\003', '\243',
- '\173', '\003', '\245', '\173', '\003', '\247', '\173', '\003',
- '\251', '\173', '\003', '\253', '\173', '\003', '\255', '\173',
- '\003', '\257', '\173', '\003', '\261', '\033', '\003', '\067',
- '\100', '\273', '\061', '\200', '\003', '\241', '\213', '\003',
- '\243', '\213', '\003', '\245', '\213', '\003', '\247', '\213',
- '\003', '\251', '\073', '\044', '\051', '\262', '\274', '\255',
- '\213', '\003', '\257', '\053', '\044', '\327', '\213', '\003',
- '\312', '\233', '\003', '\241', '\173', '\047', '\367', '\161',
- '\006', '\162', '\020', '\006', '\166', '\320', '\202', '\236',
- '\233', '\003', '\247', '\233', '\003', '\251', '\233', '\003',
- '\253', '\233', '\003', '\255', '\233', '\003', '\257', '\233',
- '\003', '\307', '\153', '\047', '\376', '\107', '\276', '\346',
- '\213', '\276', '\062', '\360', '\260', '\051', '\262', '\277',
- '\377', '\272', '\277', '\001', '\273', '\277', '\003', '\273',
- '\277', '\005', '\273', '\277', '\007', '\273', '\277', '\011',
- '\273', '\277', '\261', '\273', '\277', '\105', '\362', '\004',
- '\370', '\173', '\276', '\375', '\033', '\003', '\374', '\052',
- '\003', '\020', '\033', '\301', '\001', '\034', '\003', '\003',
- '\034', '\003', '\005', '\374', '\271', '\122', '\362', '\300',
- '\372', '\273', '\274', '\021', '\114', '\273', '\040', '\313',
- '\260', '\040', '\073', '\301', '\040', '\333', '\277', '\042',
- '\173', '\202', '\055', '\340', '\301', '\050', '\134', '\300',
- '\050', '\213', '\302', '\011', '\054', '\003', '\013', '\054',
- '\003', '\042', '\314', '\262', '\375', '\353', '\262', '\177',
- '\273', '\302', '\345', '\013', '\301', '\103', '\040', '\262',
- '\001', '\114', '\263', '\067', '\134', '\300', '\070', '\173',
- '\303', '\011', '\074', '\003', '\013', '\074', '\003', '\042',
- '\314', '\263', '\375', '\113', '\003', '\023', '\114', '\003',
- '\377', '\113', '\003', '\001', '\114', '\003', '\003', '\114',
- '\003', '\005', '\114', '\003', '\007', '\114', '\003', '\011',
- '\114', '\003', '\013', '\114', '\003', '\042', '\274', '\052',
- '\375', '\133', '\003', '\023', '\134', '\003', '\377', '\133',
- '\003', '\001', '\134', '\003', '\003', '\134', '\003', '\346',
- '\147', '\055', '\314', '\222', '\054', '\313', '\042', '\021',
- '\316', '\062', '\170', '\321', '\062', '\055', '\160', '\234',
- '\020',
-
-};
-
-static const char file_5x8[] = {
- '\037', '\235', '\214', '\001', '\314', '\214', '\201', '\223',
- '\000', '\200', '\301', '\000', '\006', '\023', '\032', '\144',
- '\042', '\300', '\040', '\246', '\204', '\015', '\023', '\042',
- '\004', '\100', '\046', '\041', '\271', '\210', '\004', '\024',
- '\116', '\104', '\024', '\021', '\311', '\000', '\203', '\010',
- '\024', '\046', '\304', '\140', '\300', '\040', '\264', '\002',
- '\006', '\041', '\150', '\064', '\310', '\321', '\040', '\272',
- '\005', '\006', '\101', '\210', '\114', '\071', '\021', '\216',
- '\003', '\203', '\100', '\146', '\002', '\100', '\020', '\021',
- '\320', '\003', '\203', '\200', '\164', '\322', '\371', '\010',
- '\000', '\121', '\004', '\211', '\110', '\051', '\046', '\344',
- '\107', '\141', '\146', '\005', '\235', '\001', '\044', '\044',
- '\234', '\040', '\161', '\103', '\102', '\231', '\007', '\131',
- '\044', '\224', '\041', '\321', '\107', '\302', '\042', '\022',
- '\227', '\044', '\154', '\042', '\161', '\113', '\102', '\061',
- '\022', '\343', '\044', '\224', '\243', '\060', '\244', '\301',
- '\076', '\012', '\241', '\044', '\104', '\244', '\120', '\254',
- '\301', '\112', '\165', '\023', '\212', '\222', '\250', '\052',
- '\041', '\053', '\205', '\134', '\015', '\352', '\222', '\270',
- '\054', '\341', '\065', '\211', '\350', '\022', '\262', '\223',
- '\150', '\157', '\344', '\304', '\000', '\035', '\046', '\152',
- '\231', '\010', '\100', '\101', '\302', '\060', '\224', '\317',
- '\044', '\144', '\103', '\371', '\100', '\302', '\072', '\224',
- '\121', '\212', '\004', '\064', '\321', '\310', '\023', '\047',
- '\124', '\234', '\004', '\151', '\122', '\344', '\213', '\224',
- '\042', '\107', '\222', '\114', '\241', '\042', '\045', '\213',
- '\101', '\323', '\125', '\234', '\020', '\251', '\015', '\240',
- '\111', '\232', '\071', '\143', '\000', '\030', '\131', '\235',
- '\204', '\111', '\226', '\057', '\252', '\131', '\013', '\117',
- '\203', '\247', '\114', '\305', '\053', '\105', '\222', '\034',
- '\101', '\102', '\005', '\371', '\152', '\260', '\115', '\234',
- '\247', '\251', '\323', '\006', '\300', '\024', '\046', '\101',
- '\120', '\003', '\220', '\342', '\275', '\010', '\225', '\053',
- '\111', '\210', '\120', '\101', '\142', '\135', '\271', '\223',
- '\067', '\162', '\332', '\204', '\141', '\003', '\040', '\010',
- '\021', '\042', '\137', '\146', '\147', '\141', '\322', '\072',
- '\071', '\130', '\000', '\120', '\044', '\201', '\105', '\021',
- '\114', '\344', '\227', '\204', '\026', '\140', '\101', '\361',
- '\104', '\022', '\250', '\031', '\210', '\340', '\170', '\105',
- '\114', '\361', '\004', '\023', '\125', '\120', '\221', '\304',
- '\151', '\137', '\140', '\001', '\241', '\204', '\024', '\132',
- '\210', '\241', '\155', '\123', '\100', '\021', '\304', '\020',
- '\014', '\036', '\001', '\300', '\020', '\365', '\131', '\121',
- '\204', '\024', '\101', '\034', '\321', '\032', '\172', '\352',
- '\041', '\161', '\042', '\022', '\101', '\110', '\061', '\205',
- '\171', '\256', '\301', '\046', '\033', '\155', '\266', '\311',
- '\366', '\204', '\015', '\064', '\330', '\340', '\102', '\014',
- '\071', '\344', '\020', '\303', '\214', '\065', '\336', '\130',
- '\135', '\021', '\116', '\014', '\361', '\004', '\021', '\045',
- '\002', '\220', '\204', '\024', '\126', '\234', '\370', '\004',
- '\024', '\131', '\110', '\041', '\035', '\165', '\047', '\276',
- '\001', '\107', '\036', '\162', '\244', '\161', '\006', '\032',
- '\164', '\200', '\100', '\044', '\016', '\071', '\200', '\040',
- '\106', '\036', '\040', '\014', '\361', '\306', '\031', '\156',
- '\244', '\101', '\107', '\032', '\157', '\270', '\321', '\046',
- '\174', '\160', '\270', '\040', '\334', '\151', '\124', '\000',
- '\320', '\202', '\157', '\300', '\265', '\140', '\004', '\163',
- '\316', '\375', '\251', '\035', '\167', '\055', '\110', '\321',
- '\302', '\173', '\361', '\315', '\327', '\102', '\013', '\070',
- '\100', '\012', '\103', '\013', '\067', '\324', '\100', '\251',
- '\245', '\103', '\264', '\120', '\303', '\244', '\076', '\002',
- '\051', '\044', '\221', '\106', '\266', '\060', '\145', '\225',
- '\320', '\155', '\331', '\347', '\153', '\034', '\126', '\170',
- '\241', '\023', '\000', '\140', '\361', '\005', '\022', '\321',
- '\115', '\327', '\147', '\024', '\125', '\330', '\367', '\005',
- '\214', '\353', '\035', '\164', '\120', '\000', '\274', '\362',
- '\152', '\220', '\147', '\272', '\352', '\004', '\000', '\112',
- '\050', '\171', '\106', '\231', '\101', '\304', '\002', '\140',
- '\254', '\116', '\242', '\001', '\260', '\317', '\077', '\006',
- '\065', '\224', '\354', '\262', '\302', '\126', '\153', '\355',
- '\112', '\000', '\004', '\005', '\110', '\041', '\205', '\034',
- '\022', '\310', '\266', '\335', '\176', '\313', '\255', '\267',
- '\340', '\222', '\073', '\256', '\270', '\341', '\226', '\213',
- '\256', '\271', '\351', '\236', '\253', '\356', '\273', '\356',
- '\306', '\333', '\356', '\274', '\354', '\326', '\273', '\356',
- '\275', '\360', '\322', '\213', '\257', '\274', '\366', '\346',
- '\333', '\057', '\277', '\373', '\352', '\353', '\157', '\300',
- '\377', '\012', '\014', '\360', '\300', '\010', '\037', '\254',
- '\260', '\301', '\014', '\027', '\354', '\060', '\301', '\020',
- '\047', '\334', '\160', '\304', '\013', '\077', '\054', '\261',
- '\305', '\025', '\123', '\074', '\361', '\305', '\032', '\143',
- '\274', '\161', '\306', '\034', '\207', '\014', '\362', '\310',
- '\037', '\227', '\354', '\261', '\275', '\063', '\005', '\065',
- '\223', '\133', '\000', '\250', '\144', '\020', '\006', '\127',
- '\045', '\204', '\102', '\102', '\060', '\044', '\204', '\103',
- '\102', '\071', '\031', '\044', '\243', '\101', '\162', '\031',
- '\244', '\241', '\101', '\140', '\044', '\204', '\106', '\102',
- '\160', '\044', '\204', '\107', '\102', '\052', '\027', '\225',
- '\020', '\044', '\011', '\075', '\144', '\020', '\050', '\011',
- '\241', '\222', '\020', '\054', '\011', '\341', '\222', '\020',
- '\060', '\011', '\041', '\223', '\020', '\064', '\011', '\141',
- '\223', '\020', '\070', '\011', '\045', '\146', '\020', '\074',
- '\011', '\341', '\203', '\055', '\002', '\023', '\101', '\060',
- '\021', '\006', '\023', '\201', '\060', '\021', '\012', '\023',
- '\301', '\060', '\021', '\016', '\023', '\001', '\061', '\021',
- '\022', '\023', '\101', '\061', '\021', '\026', '\023', '\201',
- '\061', '\021', '\032', '\065', '\115', '\204', '\307', '\104',
- '\244', '\261', '\064', '\021', '\044', '\023', '\141', '\062',
- '\021', '\050', '\023', '\241', '\062', '\021', '\054', '\023',
- '\341', '\062', '\021', '\060', '\023', '\041', '\063', '\021',
- '\064', '\023', '\141', '\063', '\021', '\070', '\023', '\241',
- '\063', '\021', '\074', '\023', '\341', '\103', '\131', '\104',
- '\074', '\245', '\024', '\021', '\006', '\021', '\201', '\020',
- '\021', '\012', '\021', '\301', '\020', '\021', '\016', '\021',
- '\001', '\321', '\121', '\104', '\120', '\104', '\204', '\105',
- '\104', '\140', '\104', '\204', '\106', '\104', '\160', '\104',
- '\204', '\107', '\117', '\021', '\265', '\004', '\000', '\044',
- '\021', '\141', '\022', '\021', '\050', '\021', '\241', '\022',
- '\021', '\054', '\021', '\341', '\022', '\021', '\060', '\021',
- '\041', '\023', '\021', '\064', '\021', '\141', '\023', '\021',
- '\070', '\021', '\241', '\023', '\021', '\074', '\021', '\341',
- '\023', '\021', '\000', '\104', '\041', '\100', '\024', '\004',
- '\104', '\141', '\100', '\024', '\010', '\104', '\241', '\100',
- '\024', '\014', '\104', '\341', '\100', '\024', '\020', '\104',
- '\171', '\304', '\063', '\121', '\130', '\020', '\005', '\006',
- '\121', '\150', '\020', '\005', '\007', '\121', '\170', '\020',
- '\005', '\010', '\121', '\210', '\040', '\012', '\044', '\210',
- '\202', '\011', '\242', '\200', '\202', '\050', '\250', '\040',
- '\012', '\054', '\210', '\202', '\013', '\242', '\000', '\203',
- '\050', '\310', '\040', '\012', '\064', '\210', '\202', '\015',
- '\242', '\200', '\203', '\050', '\350', '\040', '\012', '\074',
- '\210', '\202', '\017', '\242', '\000', '\040', '\043', '\040',
- '\111', '\210', '\313', '\000', '\200', '\225', '\152', '\021',
- '\300', '\001', '\037', '\160', '\000', '\010', '\001', '\100',
- '\001', '\005', '\264', '\360', '\205', '\012', '\120', '\200',
- '\003', '\142', '\310', '\001', '\004', '\040', '\340', '\000',
- '\001', '\030', '\100', '\007', '\012', '\300', '\000', '\002',
- '\020', '\300', '\000', '\001', '\050', '\011', '\003', '\050',
- '\060', '\304', '\136', '\035', '\200', '\003', '\004', '\350',
- '\341', '\007', '\025', '\260', '\102', '\203', '\234', '\060',
- '\043', '\067', '\001', '\100', '\002', '\026', '\320', '\200',
- '\004', '\370', '\220', '\000', '\034', '\050', '\200', '\026',
- '\005', '\120', '\103', '\033', '\136', '\021', '\130', '\042',
- '\071', '\300', '\025', '\127', '\210', '\304', '\061', '\372',
- '\220', '\003', '\012', '\271', '\342', '\007', '\306', '\010',
- '\200', '\017', '\010', '\313', '\215', '\072', '\201', '\343',
- '\114', '\344', '\050', '\022', '\070', '\136', '\261', '\214',
- '\146', '\024', '\243', '\031', '\011', '\100', '\307', '\204',
- '\254', '\161', '\217', '\146', '\334', '\011', '\001', '\004',
- '\100', '\000', '\004', '\104', '\221', '\220', '\010', '\030',
- '\144', '\024', '\077', '\020', '\303', '\030', '\046', '\004',
- '\001', '\153', '\374', '\300', '\367', '\030', '\040', '\201',
- '\003', '\010', '\100', '\002', '\015', '\110', '\343', '\265',
- '\234', '\170', '\305', '\017', '\032', '\244', '\221', '\012',
- '\211', '\041', '\043', '\031', '\151', '\231', '\023', '\026',
- '\300', '\001', '\024', '\120', '\141', '\264', '\230', '\250',
- '\000', '\267', '\020', '\040', '\206', '\257', '\164', '\241',
- '\101', '\172', '\370', '\075', '\220', '\134', '\221', '\145',
- '\204', '\364', '\341', '\367', '\044', '\300', '\000', '\017',
- '\120', '\062', '\041', '\076', '\374', '\343', '\114', '\150',
- '\051', '\022', '\017', '\350', '\344', '\211', '\051', '\201',
- '\100', '\042', '\005', '\200', '\221', '\106', '\062', '\321',
- '\211', '\006', '\270', '\142', '\024', '\051', '\011', '\001',
- '\006', '\010', '\300', '\230', '\000', '\240', '\044', '\002',
- '\040', '\300', '\113', '\220', '\060', '\100', '\001', '\036',
- '\260', '\241', '\101', '\074', '\040', '\000', '\007', '\160',
- '\223', '\001', '\263', '\024', '\200', '\002', '\054', '\320',
- '\115', '\000', '\170', '\100', '\231', '\211', '\004', '\041',
- '\045', '\051', '\331', '\116', '\112', '\152', '\200', '\002',
- '\325', '\234', '\045', '\072', '\031', '\200', '\116', '\175',
- '\146', '\163', '\220', '\266', '\144', '\146', '\041', '\023',
- '\162', '\223', '\050', '\106', '\253', '\220', '\313', '\164',
- '\142', '\053', '\063', '\222', '\021', '\112', '\146', '\240',
- '\002', '\025', '\110', '\200', '\000', '\366', '\051', '\001',
- '\011', '\170', '\240', '\242', '\006', '\161', '\200', '\004',
- '\064', '\272', '\321', '\131', '\112', '\200', '\231', '\355',
- '\344', '\150', '\105', '\243', '\110', '\116', '\007', '\060',
- '\023', '\233', '\045', '\145', '\146', '\104', '\050', '\051',
- '\000', '\015', '\264', '\263', '\242', '\027', '\305', '\050',
- '\000', '\124', '\050', '\115', '\203', '\160', '\000', '\002',
- '\070', '\175', '\251', '\002', '\014', '\020', '\103', '\251',
- '\000', '\100', '\245', '\314', '\214', '\242', '\105', '\143',
- '\352', '\123', '\011', '\130', '\300', '\003', '\032', '\160',
- '\251', '\107', '\053', '\032', '\322', '\221', '\062', '\163',
- '\251', '\026', '\320', '\000', '\003', '\124', '\302', '\121',
- '\007', '\050', '\065', '\233', '\022', '\050', '\144', '\073',
- '\377', '\330', '\111', '\000', '\060', '\265', '\242', '\375',
- '\374', '\052', '\077', '\015', '\302', '\124', '\017', '\134',
- '\224', '\254', '\274', '\244', '\247', '\101', '\042', '\020',
- '\001', '\046', '\372', '\160', '\234', '\312', '\034', '\044',
- '\066', '\115', '\252', '\322', '\103', '\042', '\022', '\247',
- '\031', '\265', '\241', '\015', '\243', '\030', '\313', '\153',
- '\031', '\323', '\000', '\204', '\324', '\011', '\005', '\222',
- '\332', '\224', '\237', '\226', '\163', '\244', '\012', '\261',
- '\346', '\104', '\223', '\071', '\330', '\173', '\046', '\226',
- '\234', '\375', '\104', '\000', '\005', '\236', '\330', '\104',
- '\112', '\336', '\024', '\235', '\101', '\145', '\252', '\023',
- '\001', '\020', '\315', '\023', '\206', '\120', '\257', '\317',
- '\004', '\051', '\107', '\015', '\322', '\131', '\037', '\032',
- '\264', '\062', '\020', '\075', '\012', '\101', '\065', '\233',
- '\020', '\172', '\366', '\063', '\243', '\033', '\175', '\252',
- '\115', '\045', '\160', '\323', '\021', '\256', '\123', '\266',
- '\031', '\065', '\200', '\041', '\071', '\251', '\102', '\012',
- '\260', '\314', '\253', '\025', '\105', '\143', '\102', '\032',
- '\331', '\304', '\010', '\100', '\364', '\264', '\151', '\365',
- '\051', '\132', '\071', '\320', '\116', '\167', '\046', '\322',
- '\230', '\030', '\050', '\244', '\156', '\011', '\000', '\263',
- '\017', '\006', '\162', '\272', '\321', '\105', '\100', '\111',
- '\130', '\150', '\231', '\115', '\002', '\200', '\160', '\331',
- '\332', '\026', '\040', '\306', '\313', '\055', '\103', '\374',
- '\041', '\020', '\345', '\015', '\004', '\172', '\115', '\246',
- '\136', '\102', '\024', '\302', '\020', '\175', '\010', '\204',
- '\173', '\315', '\213', '\260', '\101', '\164', '\253', '\017',
- '\200', '\260', '\057', '\041', '\002', '\041', '\010', '\156',
- '\355', '\267', '\277', '\367', '\315', '\227', '\041', '\366',
- '\000', '\256', '\102', '\360', '\001', '\134', '\204', '\300',
- '\057', '\267', '\006', '\341', '\007', '\160', '\011', '\342',
- '\017', '\000', '\046', '\227', '\175', '\353', '\245', '\340',
- '\102', '\374', '\167', '\302', '\355', '\175', '\057', '\040',
- '\344', '\253', '\141', '\160', '\321', '\267', '\274', '\177',
- '\360', '\060', '\040', '\004', '\241', '\137', '\374', '\212',
- '\167', '\304', '\366', '\065', '\304', '\206', '\347', '\133',
- '\341', '\103', '\220', '\267', '\133', '\053', '\176', '\357',
- '\171', '\307', '\025', '\143', '\370', '\012', '\142', '\276',
- '\347', '\115', '\361', '\214', '\145', '\354', '\341', '\363',
- '\272', '\167', '\020', '\033', '\136', '\260', '\037', '\070',
- '\014', '\344', '\365', '\252', '\230', '\303', '\107', '\236',
- '\157', '\220', '\065', '\154', '\344', '\045', '\037', '\271',
- '\274', '\116', '\216', '\162', '\223', '\233', '\174', '\143',
- '\031', '\043', '\271', '\306', '\061', '\056', '\304', '\220',
- '\225', '\174', '\145', '\165', '\115', '\031', '\312', '\137',
- '\146', '\062', '\230', '\307', '\054', '\146', '\046', '\163',
- '\231', '\314', '\111', '\056', '\363', '\223', '\325', '\054',
- '\345', '\364', '\206', '\131', '\305', '\042', '\176', '\163',
- '\233', '\073', '\214', '\146', '\054', '\117', '\231', '\313',
- '\054', '\136', '\357', '\206', '\003', '\221', '\342', '\370',
- '\372', '\127', '\312', '\356', '\045', '\304', '\234', '\005',
- '\035', '\346', '\375', '\336', '\331', '\314', '\357', '\125',
- '\057', '\230', '\225', '\214', '\340', '\045', '\023', '\372',
- '\317', '\353', '\065', '\264', '\177', '\025', '\155', '\341',
- '\030', '\077', '\272', '\314', '\204', '\016', '\364', '\213',
- '\057', '\315', '\151', '\112', '\137', '\332', '\305', '\044',
- '\056', '\263', '\213', '\215', '\174', '\340', '\023', '\013',
- '\353', '\017', '\325', '\102', '\110', '\103', '\076', '\222',
- '\021', '\224', '\224', '\304', '\063', '\041', '\051', '\210',
- '\145', '\140', '\202', '\316', '\114', '\336', '\344', '\047',
- '\052', '\071', '\212', '\124', '\250', '\322', '\224', '\247',
- '\130', '\000', '\000', '\027', '\000', '\000', '\314', '\062',
- '\000', '\000', '\015', '\000', '\300', '\052', '\150', '\354',
- '\200', '\073', '\333', '\110', '\102', '\000', '\204', '\000',
- '\000', '\042', '\000', '\300', '\010', '\000', '\100', '\002',
- '\000', '\224', '\000', '\000', '\046', '\000', '\300', '\011',
- '\000', '\060', '\263', '\024', '\000', '\100', '\005', '\000',
- '\130', '\001', '\000', '\264', '\322', '\002', '\000', '\350',
- '\351', '\005', '\000', '\250', '\331', '\221', '\270', '\062',
- '\003', '\000', '\320', '\000', '\000', '\065', '\000', '\200',
- '\015', '\000', '\160', '\003', '\000', '\334', '\054', '\007',
- '\000', '\320', '\001', '\000', '\166', '\000', '\000', '\036',
- '\000', '\240', '\007', '\000', '\360', '\312', '\017', '\000',
- '\220', '\223', '\040', '\000', '\100', '\010', '\047', '\002',
- '\000', '\021', '\000', '\000', '\026', '\043', '\000', '\300',
- '\104', '\062', '\112', '\002', '\000', '\224', '\000', '\000',
- '\261', '\060', '\241', '\067', '\000', '\140', '\325', '\023',
- '\000', '\004', '\200', '\050', '\214', '\307', '\073', '\000',
- '\350', '\123', '\025', '\000', '\100', '\252', '\126', '\001',
- '\300', '\066', '\132', '\000', '\200', '\131', '\270', '\000',
- '\200', '\056', '\000', '\300', '\013', '\000', '\370', '\002',
- '\000', '\202', '\026', '\006', '\000', '\240', '\045', '\070',
- '\025', '\051', '\003', '\000', '\314', '\000', '\000', '\315',
- '\014', '\055', '\015', '\000', '\120', '\003', '\000', '\326',
- '\000', '\000', '\372', '\164', '\307', '\015', '\000', '\170',
- '\003', '\000', '\212', '\246', '\026', '\266', '\314', '\001',
- '\000', '\164', '\000', '\100', '\035', '\000', '\140', '\007',
- '\000', '\334', '\001', '\000', '\107', '\313', '\003', '\000',
- '\364', '\000', '\200', '\075', '\000', '\200', '\017', '\000',
- '\200', '\213', '\037', '\000', '\200', '\352', '\224', '\045',
- '\345', '\273', '\147', '\247', '\214', '\332', '\323', '\316',
- '\366', '\140', '\241', '\335', '\355', '\153', '\207', '\173',
- '\333', '\337', '\116', '\367', '\270', '\327', '\175', '\356',
- '\166', '\317', '\073', '\336', '\367', '\056', '\367', '\276',
- '\337', '\335', '\357', '\172', '\007', '\074', '\337', '\377',
- '\116', '\370', '\300', '\027', '\176', '\360', '\206', '\117',
- '\074', '\342', '\027', '\057', '\370', '\306', '\037', '\336',
- '\361', '\212', '\207', '\074', '\343', '\037', '\117', '\371',
- '\310', '\127', '\176', '\362', '\206', '\127', '\110', '\322',
- '\024', '\322', '\254', '\356', '\002', '\340', '\047', '\006',
- '\051', '\054', '\000', '\210', '\075', '\316', '\204', '\114',
- '\333', '\040', '\063', '\063', '\110', '\271', '\015', '\022',
- '\030', '\172', '\047', '\304', '\337', '\006', '\061', '\370',
- '\155', '\022', '\142', '\027', '\216', '\033', '\144', '\344',
- '\006', '\111', '\271', '\101', '\144', '\156', '\220', '\212',
- '\030', '\004', '\350', '\006', '\101', '\272', '\101', '\236',
- '\156', '\220', '\243', '\275', '\045', '\041', '\202', '\110',
- '\310', '\041', '\022', '\302', '\210', '\204', '\104', '\042',
- '\041', '\226', '\110', '\310', '\046', '\022', '\002', '\065',
- '\203', '\224', '\042', '\041', '\247', '\110', '\110', '\052',
- '\022', '\262', '\212', '\204', '\264', '\042', '\041', '\257',
- '\110', '\110', '\054', '\022', '\062', '\213', '\204', '\324',
- '\042', '\041', '\267', '\110', '\110', '\056', '\022', '\262',
- '\213', '\204', '\364', '\042', '\041', '\277', '\110', '\110',
- '\060', '\022', '\062', '\214', '\204', '\024', '\043', '\041',
- '\307', '\110', '\110', '\062', '\022', '\122', '\030', '\203',
- '\064', '\043', '\041', '\317', '\220', '\020', '\321', '\220',
- '\020', '\323', '\220', '\020', '\325', '\140', '\030', '\011',
- '\221', '\015', '\011', '\261', '\015', '\011', '\321', '\015',
- '\011', '\361', '\015', '\011', '\021', '\016', '\011', '\061',
- '\016', '\011', '\121', '\016', '\011', '\161', '\016', '\011',
- '\221', '\016', '\011', '\261', '\016', '\011', '\321', '\016',
- '\011', '\361', '\016', '\011', '\021', '\017', '\011', '\061',
- '\017', '\011', '\121', '\017', '\011', '\161', '\017', '\011',
- '\221', '\017', '\011', '\261', '\017', '\011', '\321', '\017',
- '\011', '\001', '\055', '\273', '\142', '\020', '\003', '\060',
- '\021', '\005', '\060', '\021', '\070', '\144', '\020', '\011',
- '\060', '\021', '\013', '\060', '\021', '\015', '\060', '\021',
- '\017', '\060', '\021', '\021', '\060', '\021', '\023', '\060',
- '\021', '\025', '\060', '\021', '\027', '\060', '\021', '\031',
- '\060', '\021', '\033', '\060', '\021', '\221', '\141', '\020',
- '\037', '\060', '\021', '\041', '\060', '\021', '\043', '\060',
- '\021', '\045', '\060', '\021', '\047', '\060', '\021', '\051',
- '\060', '\021', '\053', '\060', '\021', '\055', '\060', '\021',
- '\057', '\060', '\021', '\061', '\060', '\021', '\063', '\060',
- '\021', '\065', '\060', '\021', '\067', '\060', '\021', '\071',
- '\060', '\021', '\073', '\060', '\021', '\075', '\060', '\021',
- '\077', '\060', '\021', '\101', '\060', '\021', '\103', '\060',
- '\021', '\105', '\060', '\021', '\107', '\060', '\021', '\111',
- '\060', '\021', '\113', '\060', '\021', '\115', '\060', '\021',
- '\117', '\060', '\021', '\121', '\060', '\021', '\123', '\060',
- '\021', '\125', '\060', '\021', '\127', '\060', '\021', '\131',
- '\060', '\021', '\133', '\060', '\021', '\135', '\060', '\021',
- '\137', '\060', '\021', '\230', '\141', '\020', '\146', '\040',
- '\207', '\060', '\120', '\211', '\047', '\122', '\211', '\107',
- '\062', '\004', '\225', '\310', '\025', '\232', '\010', '\003',
- '\355', '\326', '\211', '\357', '\326', '\211', '\361', '\326',
- '\211', '\363', '\326', '\211', '\365', '\246', '\211', '\061',
- '\120', '\063', '\250', '\230', '\211', '\060', '\020', '\003',
- '\234', '\330', '\212', '\237', '\330', '\212', '\241', '\330',
- '\212', '\243', '\330', '\212', '\245', '\330', '\212', '\247',
- '\010', '\003', '\062', '\240', '\212', '\272', '\310', '\212',
- '\062', '\360', '\212', '\062', '\020', '\213', '\062', '\060',
- '\213', '\062', '\120', '\213', '\062', '\160', '\213', '\062',
- '\220', '\213', '\063', '\300', '\213', '\063', '\300', '\212',
- '\063', '\360', '\212', '\063', '\020', '\213', '\063', '\060',
- '\213', '\063', '\120', '\213', '\063', '\160', '\213', '\063',
- '\220', '\213', '\064', '\120', '\063', '\317', '\026', '\155',
- '\323', '\126', '\155', '\327', '\226', '\155', '\333', '\326',
- '\155', '\337', '\026', '\156', '\343', '\346', '\047', '\346',
- '\006', '\000', '\350', '\246', '\156', '\000', '\300', '\156',
- '\356', '\006', '\157', '\362', '\346', '\172', '\367', '\226',
- '\157', '\373', '\326', '\157', '\377', '\026', '\160', '\000',
- '\060', '\160', '\005', '\167', '\160', '\011', '\267', '\160',
- '\015', '\367', '\160', '\000', '\020', '\161', '\023', '\127',
- '\161', '\000', '\160', '\161', '\144', '\241', '\161', '\034',
- '\347', '\161', '\344', '\061', '\005', '\041', '\007', '\000',
- '\043', '\127', '\162', '\032', '\202', '\162', '\052', '\007',
- '\000', '\054', '\347', '\162', '\060', '\047', '\163', '\064',
- '\147', '\163', '\000', '\200', '\163', '\000', '\240', '\163',
- '\074', '\347', '\163', '\000', '\000', '\164', '\102', '\107',
- '\164', '\106', '\007', '\000', '\110', '\247', '\164', '\114',
- '\007', '\000', '\116', '\007', '\165', '\122', '\107', '\165',
- '\126', '\207', '\165', '\000', '\240', '\165', '\134', '\347',
- '\165', '\140', '\047', '\166', '\047', '\022', '\003', '\067',
- '\120', '\157', '\111', '\321', '\053', '\275', '\362', '\053',
- '\147', '\067', '\023', '\323', '\102', '\167', '\310', '\062',
- '\054', '\312', '\042', '\224', '\011', '\321', '\054', '\317',
- '\022', '\055', '\104', '\131', '\054', '\164', '\007',
-
-};
-
-static char name_6x13[] = "-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1";
-static char name_cursor[] = "cursor";
-static char name_5x7[] = "-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso8859-1";
-static char name_5x8[] = "-misc-fixed-medium-r-normal--8-80-75-75-c-50-iso646.1991-irv";
-
-const BuiltinFileRec builtin_files[] = {
-"6x13.builtin", sizeof file_6x13, file_6x13,
-"cursor.builtin", sizeof file_cursor, file_cursor,
-"5x7.builtin", sizeof file_5x7, file_5x7,
-"5x8.builtin", sizeof file_5x8, file_5x8,
-};
-
-const int builtin_files_count = sizeof (builtin_files) / sizeof (builtin_files[0]);
-
-const BuiltinDirRec builtin_dir[] = {
-"6x13.builtin", name_6x13,
-"cursor.builtin", name_cursor,
-"5x7.builtin", name_5x7,
-"5x8.builtin", name_5x8,
-};
-
-const int builtin_dir_count = sizeof (builtin_dir) / sizeof (builtin_dir[0]);
-
-static char alias_fixed[] = "fixed";
-static char alias_6x13[] = "6x13";
-static char alias_6x13_100[] = "-misc-fixed-medium-r-semicondensed--13-100-100-100-c-60-iso8859-1";
-static char alias_5x7[] = "5x7";
-static char alias_5x7_100[] = "-misc-fixed-medium-r-normal--7-50-100-100-c-50-iso8859-1";
-static char alias_5x8[] = "5x8";
-static char alias_5x8_75[] = "-misc-fixed-medium-r-normal--8-80-75-75-c-50-iso8859-1";
-static char alias_5x8_100[] = "-misc-fixed-medium-r-normal--8-60-100-100-c-50-iso8859-1";
-
-const BuiltinAliasRec builtin_alias[] = {
-alias_fixed, name_6x13,
-alias_6x13, name_6x13,
-alias_6x13_100, name_6x13,
-alias_5x7, name_5x7,
-alias_5x7_100, name_5x7,
-alias_5x8, name_5x8,
-alias_5x8_75, name_5x8,
-alias_5x8_100, name_5x8,
-};
-
-const int builtin_alias_count = sizeof (builtin_alias) / sizeof (builtin_alias[0]);
diff --git a/nx-X11/lib/font/builtins/fpe.c b/nx-X11/lib/font/builtins/fpe.c
deleted file mode 100644
index 7f78fabbd..000000000
--- a/nx-X11/lib/font/builtins/fpe.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/* $XdotOrg: xc/lib/font/builtins/fpe.c,v 1.5 2005/07/30 18:56:32 alanc Exp $ */
-/*
- * Id: fpe.c,v 1.2 1999/11/02 06:16:48 keithp Exp $
- *
- * Copyright 1999 SuSE, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-/* $XFree86: xc/lib/font/builtins/fpe.c,v 1.3 1999/12/30 02:29:51 robin Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-
-static int font_file_type;
-
-const char builtin_fonts[] = "built-ins";
-
-int
-BuiltinNameCheck (name)
- char *name;
-{
- return (strcmp (name, builtin_fonts) == 0);
-}
-
-int
-BuiltinInitFPE (fpe)
- FontPathElementPtr fpe;
-{
- int status;
- FontDirectoryPtr dir;
-
- status = BuiltinReadDirectory (fpe->name, &dir);
-
- if (status == Successful)
- fpe->private = (pointer) dir;
- return status;
-}
-
-/* ARGSUSED */
-int
-BuiltinResetFPE (fpe)
- FontPathElementPtr fpe;
-{
- FontDirectoryPtr dir;
-
- dir = (FontDirectoryPtr) fpe->private;
- /* builtins can't change! */
- return Successful;
-}
-
-int
-BuiltinFreeFPE (fpe)
- FontPathElementPtr fpe;
-{
- FontFileFreeDir ((FontDirectoryPtr) fpe->private);
- return Successful;
-}
-
-void
-BuiltinRegisterFpeFunctions(void)
-{
- BuiltinRegisterFontFileFunctions ();
-
- font_file_type = RegisterFPEFunctions(BuiltinNameCheck,
- BuiltinInitFPE,
- BuiltinFreeFPE,
- BuiltinResetFPE,
- FontFileOpenFont,
- FontFileCloseFont,
- FontFileListFonts,
- FontFileStartListFontsWithInfo,
- FontFileListNextFontWithInfo,
- (WakeupFpeFunc) 0,
- (ClientDiedFunc) 0,
- (LoadGlyphsFunc) 0,
- (StartLaFunc) 0,
- (NextLaFunc) 0,
- (SetPathFunc) 0);
-}
diff --git a/nx-X11/lib/font/builtins/render.c b/nx-X11/lib/font/builtins/render.c
deleted file mode 100644
index 520d873f4..000000000
--- a/nx-X11/lib/font/builtins/render.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* $XdotOrg: xc/lib/font/builtins/render.c,v 1.5 2005/07/30 18:56:32 alanc Exp $ */
-/*
- * Id: render.c,v 1.2 1999/11/02 06:16:48 keithp Exp $
- *
- * Copyright 1999 SuSE, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-/* $XFree86: xc/lib/font/builtins/render.c,v 1.3 1999/12/30 02:29:51 robin Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-#include "builtin.h"
-
-BuiltinOpenBitmap (fpe, ppFont, flags, entry, fileName, format, fmask)
- FontPathElementPtr fpe;
- FontPtr *ppFont;
- int flags;
- FontEntryPtr entry;
- char *fileName;
- fsBitmapFormat format;
- fsBitmapFormatMask fmask;
-{
- FontFilePtr file;
- FontPtr pFont;
- int i;
- int ret;
- int bit,
- byte,
- glyph,
- scan,
- image;
-
- file = BuiltinFileOpen (fileName);
- if (!file)
- return BadFontName;
- pFont = (FontPtr) xalloc(sizeof(FontRec));
- if (!pFont) {
- BuiltinFileClose (file);
- return AllocError;
- }
- /* set up default values */
- FontDefaultFormat(&bit, &byte, &glyph, &scan);
- /* get any changes made from above */
- ret = CheckFSFormat(format, fmask, &bit, &byte, &scan, &glyph, &image);
-
- /* Fill in font record. Data format filled in by reader. */
- pFont->refcnt = 0;
- pFont->maxPrivate = -1;
- pFont->devPrivates = (pointer *) 0;
-
- ret = pcfReadFont (pFont, file, bit, byte, glyph, scan);
-
- BuiltinFileClose (file);
- if (ret != Successful)
- xfree(pFont);
- else
- *ppFont = pFont;
- return ret;
-}
-
-BuiltinGetInfoBitmap (fpe, pFontInfo, entry, fileName)
- FontPathElementPtr fpe;
- FontInfoPtr pFontInfo;
- FontEntryPtr entry;
- char *fileName;
-{
- FontFilePtr file;
- int i;
- int ret;
- FontRendererPtr renderer;
-
- file = BuiltinFileOpen (fileName);
- if (!file)
- return BadFontName;
- ret = pcfReadFontInfo (pFontInfo, file);
- BuiltinFileClose (file);
- return ret;
-}
-
-static FontRendererRec renderers[] = {
- ".builtin", 8,
- BuiltinOpenBitmap, 0, BuiltinGetInfoBitmap, 0, 0
-};
-
-#define numRenderers (sizeof renderers / sizeof renderers[0])
-
-void
-BuiltinRegisterFontFileFunctions(void)
-{
- int i;
- for (i = 0; i < numRenderers; i++)
- FontFileRegisterRenderer ((FontRendererRec *) &renderers[i]);
-}
-
diff --git a/nx-X11/lib/font/fc/Imakefile b/nx-X11/lib/font/fc/Imakefile
deleted file mode 100644
index d51151348..000000000
--- a/nx-X11/lib/font/fc/Imakefile
+++ /dev/null
@@ -1,31 +0,0 @@
-XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:46:36 cpqbld Exp $
-XCOMM
-XCOMM Make file for font handling routines
-XCOMM
-XCOMM $XFree86: xc/lib/font/fc/Imakefile,v 1.4 1999/12/13 02:52:50 robin Exp $
-#include <Server.tmpl>
-
- INCLUDES = -I$(FONTINCSRC) -I../include $(TRANS_INCLUDES)
- HEADERS =
- SRCS = fsconvert.c fserve.c fsio.c transport.c
- OBJS = fsconvert.o fserve.o fsio.o transport.o
- CONN_DEFINES = $(CONNECTION_FLAGS) -DFONT_t -DTRANS_CLIENT -DTRANS_SERVER -DTRANS_REOPEN
-#if HasBSD44Sockets
- SOCK_DEFINES = -DBSD44SOCKETS
-#endif
- DEFINES = $(SIGNAL_DEFINES) $(CONN_DEFINES) $(SOCK_DEFINES)
-
-
-#define DoNormalLib NormalLibFont
-#define DoSharedLib SharedLibFont
-#define DoDebugLib DebugLibFont
-#define DoProfileLib ProfileLibFont
-#include <Library.tmpl>
-LibraryObjectRule()
-
-SubdirLibraryRule($(OBJS))
-LinkSourceFile(transport.c,$(TRANSCOMMSRC))
-
-NormalLintTarget($(SRCS))
-
-DependTarget()
diff --git a/nx-X11/lib/font/fc/fsconvert.c b/nx-X11/lib/font/fc/fsconvert.c
deleted file mode 100644
index afa2c3284..000000000
--- a/nx-X11/lib/font/fc/fsconvert.c
+++ /dev/null
@@ -1,774 +0,0 @@
-/* $Xorg: fsconvert.c,v 1.3 2000/08/17 19:46:36 cpqbld Exp $ */
-/*
- * Copyright 1990 Network Computing Devices
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Network Computing Devices not be used
- * in advertising or publicity pertaining to distribution of the software
- * without specific, written prior permission. Network Computing Devices
- * makes no representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- * NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- * IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
- * OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices, Inc
- */
-/* $XFree86: xc/lib/font/fc/fsconvert.c,v 1.14 2003/08/30 18:06:29 dawes Exp $ */
-/*
- * FS data conversion
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/X.h>
-#include <X11/Xtrans/Xtrans.h>
-#include <X11/Xpoll.h>
-#include <X11/fonts/FS.h>
-#include <X11/fonts/FSproto.h>
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/fontstruct.h>
-#include "fservestr.h"
-#include <X11/fonts/fontutil.h>
-#include "fslibos.h"
-
-extern char _fs_glyph_undefined;
-extern char _fs_glyph_requested;
-extern char _fs_glyph_zero_length;
-
-
-/*
- * converts data from font server form to X server form
- */
-
-void
-_fs_convert_char_info(fsXCharInfo *src, xCharInfo *dst)
-{
- dst->ascent = src->ascent;
- dst->descent = src->descent;
- dst->leftSideBearing = src->left;
- dst->rightSideBearing = src->right;
- dst->characterWidth = src->width;
- dst->attributes = src->attributes;
-}
-
-void
-_fs_init_fontinfo(FSFpePtr conn, FontInfoPtr pfi)
-{
- if (conn->fsMajorVersion == 1) {
- unsigned short n;
- n = pfi->firstCol;
- pfi->firstCol = pfi->firstRow;
- pfi->firstRow = n;
- n = pfi->lastCol;
- pfi->lastCol = pfi->lastRow;
- pfi->lastRow = n;
- pfi->defaultCh = ((pfi->defaultCh >> 8) & 0xff)
- + ((pfi->defaultCh & 0xff) << 8);
- }
-
- if (FontCouldBeTerminal (pfi))
- {
- pfi->terminalFont = TRUE;
- pfi->minbounds.ascent = pfi->fontAscent;
- pfi->minbounds.descent = pfi->fontDescent;
- pfi->minbounds.leftSideBearing = 0;
- pfi->minbounds.rightSideBearing = pfi->minbounds.characterWidth;
- pfi->maxbounds = pfi->minbounds;
- }
-
- FontComputeInfoAccelerators (pfi);
-}
-
-int
-_fs_convert_props(fsPropInfo *pi, fsPropOffset *po, pointer pd,
- FontInfoPtr pfi)
-{
- FontPropPtr dprop;
- int i,
- nprops;
- char *is_str;
- fsPropOffset local_off;
- char *off_adr;
- char *pdc = pd;
-
-/* stolen from server/include/resource.h */
-#define BAD_RESOURCE 0xe0000000
-
- nprops = pfi->nprops = pi->num_offsets;
-
- if (nprops < 0
- || nprops > SIZE_MAX/(sizeof(FontPropRec) + sizeof(char)))
- return -1;
-
- dprop = (FontPropPtr) xalloc(sizeof(FontPropRec) * nprops +
- sizeof (char) * nprops);
- if (!dprop)
- return -1;
-
- is_str = (char *) (dprop + nprops);
- pfi->props = dprop;
- pfi->isStringProp = is_str;
-
- off_adr = (char *)po;
- for (i = 0; i < nprops; i++, dprop++, is_str++)
- {
- memcpy(&local_off, off_adr, SIZEOF(fsPropOffset));
- if ((local_off.name.position >= pi->data_len) ||
- (local_off.name.length >
- (pi->data_len - local_off.name.position)))
- goto bail;
- dprop->name = MakeAtom(&pdc[local_off.name.position],
- local_off.name.length, 1);
- if (local_off.type != PropTypeString) {
- *is_str = FALSE;
- dprop->value = local_off.value.position;
- } else {
- *is_str = TRUE;
- if ((local_off.value.position >= pi->data_len) ||
- (local_off.value.length >
- (pi->data_len - local_off.value.position)))
- goto bail;
- dprop->value = (INT32) MakeAtom(&pdc[local_off.value.position],
- local_off.value.length, 1);
- if (dprop->value == BAD_RESOURCE)
- {
- bail:
- xfree (pfi->props);
- pfi->nprops = 0;
- pfi->props = 0;
- pfi->isStringProp = 0;
- return -1;
- }
- }
- off_adr += SIZEOF(fsPropOffset);
- }
-
- return nprops;
-}
-
-void
-_fs_free_props (FontInfoPtr pfi)
-{
- if (pfi->props)
- {
- xfree (pfi->props);
- pfi->nprops = 0;
- pfi->props = 0;
- }
-}
-
-int
-_fs_convert_lfwi_reply(FSFpePtr conn, FontInfoPtr pfi,
- fsListFontsWithXInfoReply *fsrep,
- fsPropInfo *pi, fsPropOffset *po, pointer pd)
-{
- fsUnpack_XFontInfoHeader(fsrep, pfi);
- _fs_init_fontinfo(conn, pfi);
-
- if (_fs_convert_props(pi, po, pd, pfi) == -1)
- return AllocError;
-
- return Successful;
-}
-
-
-#define ENCODING_UNDEFINED(enc) \
- ((enc)->bits == &_fs_glyph_undefined ? \
- TRUE : \
- (access_done = access_done && (enc)->bits != &_fs_glyph_requested, \
- FALSE))
-
-#define GLYPH_UNDEFINED(loc) ENCODING_UNDEFINED(encoding + (loc))
-
-/*
- * figures out what glyphs to request
- *
- * Includes logic to attempt to reduce number of round trips to the font
- * server: when a glyph is requested, fs_build_range() requests a
- * 16-glyph range of glyphs that contains the requested glyph. This is
- * predicated on the belief that using a glyph increases the chances
- * that nearby glyphs will be used: a good assumption for phonetic
- * alphabets, but a questionable one for ideographic/pictographic ones.
- */
-/* ARGSUSED */
-int
-fs_build_range(FontPtr pfont, Bool range_flag, unsigned int count,
- int item_size, unsigned char *data, int *nranges,
- fsRange **ranges)
-{
- FSFontDataPtr fsd = (FSFontDataPtr) (pfont->fpePrivate);
- FSFontPtr fsfont = (FSFontPtr) (pfont->fontPrivate);
- register CharInfoPtr encoding = fsfont->encoding;
- FontInfoPtr pfi = &(pfont->info);
- fsRange range;
- int access_done = TRUE;
- int err;
- register unsigned long firstrow, lastrow, firstcol, lastcol;
- register unsigned long row;
- register unsigned long col;
- register unsigned long loc;
-
- if (!fsd->glyphs_to_get)
- return AccessDone;
-
- firstrow = pfi->firstRow;
- lastrow = pfi->lastRow;
- firstcol = pfi->firstCol;
- lastcol = pfi->lastCol;
-
- /* Make sure we have default char */
- if (fsfont->pDefault && ENCODING_UNDEFINED(fsfont->pDefault))
- {
- loc = fsfont->pDefault - encoding;
- row = loc / (lastcol - firstcol + 1) + firstrow;
- col = loc % (lastcol - firstcol + 1) + firstcol;
-
- range.min_char_low = range.max_char_low = col;
- range.min_char_high = range.max_char_high = row;
-
- if ((err = add_range(&range, nranges, ranges, FALSE)) !=
- Successful) return err;
- encoding[loc].bits = &_fs_glyph_requested;
- access_done = FALSE;
- }
-
- if (!range_flag && item_size == 1)
- {
- if (firstrow != 0) return AccessDone;
- while (count--)
- {
- col = *data++;
- if (col >= firstcol && col <= lastcol &&
- GLYPH_UNDEFINED(col - firstcol))
- {
- int col1, col2;
- col1 = col & 0xf0;
- col2 = col1 + 15;
- if (col1 < firstcol) col1 = firstcol;
- if (col2 > lastcol) col2 = lastcol;
- /* Collect a 16-glyph neighborhood containing the requested
- glyph... should in most cases reduce the number of round
- trips to the font server. */
- for (col = col1; col <= col2; col++)
- {
- if (!GLYPH_UNDEFINED(col - firstcol)) continue;
- range.min_char_low = range.max_char_low = col;
- range.min_char_high = range.max_char_high = 0;
- if ((err = add_range(&range, nranges, ranges, FALSE)) !=
- Successful) return err;
- encoding[col - firstcol].bits = &_fs_glyph_requested;
- access_done = FALSE;
- }
- }
- }
- }
- else
- {
- fsRange fullrange[1];
-
- if (range_flag && count == 0)
- {
- count = 2;
- data = (unsigned char *)fullrange;
- fullrange[0].min_char_high = firstrow;
- fullrange[0].min_char_low = firstcol;
- fullrange[0].max_char_high = lastrow;
- fullrange[0].max_char_low = lastcol;
- }
-
- while (count--)
- {
- int row1, col1, row2, col2;
- row1 = row2 = *data++;
- col1 = col2 = *data++;
- if (range_flag)
- {
- if (count)
- {
- row2 = *data++;
- col2 = *data++;
- count--;
- }
- else
- {
- row2 = lastrow;
- col2 = lastcol;
- }
- if (row1 < firstrow) row1 = firstrow;
- if (row2 > lastrow) row2 = lastrow;
- if (col1 < firstcol) col1 = firstcol;
- if (col2 > lastcol) col2 = lastcol;
- }
- else
- {
- if (row1 < firstrow || row1 > lastrow ||
- col1 < firstcol || col1 > lastcol)
- continue;
- }
- for (row = row1; row <= row2; row++)
- {
- expand_glyph_range: ;
- loc = (row - firstrow) * (lastcol + 1 - firstcol) +
- (col1 - firstcol);
- for (col = col1; col <= col2; col++, loc++)
- {
- if (GLYPH_UNDEFINED(loc))
- {
- if (row1 == row2 &&
- (((col1 & 0xf) && col1 > firstcol) ||
- (col2 & 0xf) != 0xf) && (col2 < lastcol))
- {
- /* If we're loading from a single row, expand
- range of glyphs loaded to a multiple of
- a 16-glyph range -- attempt to reduce number
- of round trips to the font server. */
- col1 &= 0xf0;
- col2 = (col2 & 0xf0) + 15;
- if (col1 < firstcol) col1 = firstcol;
- if (col2 > lastcol) col2 = lastcol;
- goto expand_glyph_range;
- }
- range.min_char_low = range.max_char_low = col;
- range.min_char_high = range.max_char_high = row;
- if ((err = add_range(&range, nranges, ranges, FALSE)) !=
- Successful) return err;
- encoding[loc].bits = &_fs_glyph_requested;
- access_done = FALSE;
- }
- }
- }
- }
- }
-
- return access_done ?
- AccessDone :
- Successful;
-}
-
-#undef GLYPH_UNDEFINED
-#undef ENCODING_UNDEFINED
-
-
-/* _fs_clean_aborted_loadglyphs(): Undoes the changes to the encoding array
- performed by fs_build_range(); for use if the associated LoadGlyphs
- requests needs to be cancelled. */
-
-void
-_fs_clean_aborted_loadglyphs(FontPtr pfont, int num_expected_ranges,
- fsRange *expected_ranges)
-{
- register FSFontPtr fsfont;
- register int i;
-
- fsfont = (FSFontPtr) pfont->fontPrivate;
- if (fsfont->encoding)
- {
- fsRange full_range[1];
- if (!num_expected_ranges)
- {
- full_range[0].min_char_low = pfont->info.firstCol;
- full_range[0].min_char_high = pfont->info.firstRow;
- full_range[0].max_char_low = pfont->info.lastCol;
- full_range[0].max_char_high = pfont->info.lastRow;
- num_expected_ranges = 1;
- expected_ranges = full_range;
- }
-
- for (i = 0; i < num_expected_ranges; i++)
- {
- int row, col;
- for (row = expected_ranges[i].min_char_high;
- row <= expected_ranges[i].max_char_high;
- row++)
- {
- register CharInfoPtr encoding = fsfont->encoding +
- ((row - pfont->info.firstRow) *
- (pfont->info.lastCol -
- pfont->info.firstCol + 1) +
- expected_ranges[i].min_char_low -
- pfont->info.firstCol);
- for (col = expected_ranges[i].min_char_low;
- col <= expected_ranges[i].max_char_low;
- encoding++, col++)
- {
- if (encoding->bits == &_fs_glyph_requested)
- encoding->bits = &_fs_glyph_undefined;
- }
- }
- }
- }
-}
-
-
-/*
- * figures out what extents to request
- * this is where lots of extra
- * smarts wants to live
- */
-/* ARGSUSED */
-int
-_fs_check_extents(FontPtr pfont, Mask flags, int nranges, fsRange *range,
- FSBlockDataPtr blockrec)
-{
-/* XXX -- either fill in the requested info if we have it somewhere
- * and return AccessDone, or else return Successful
- */
- return Successful;
-}
-
-/*
- * figures out what glyphs to request
- * this is where lots of extra
- * smarts wants to live
- */
-/* ARGSUSED */
-int
-_fs_check_bitmaps(FontPtr pfont, fsBitmapFormat format,
- Mask flags, int nranges, fsRange *range,
- FSBlockDataPtr blockrec)
-{
-/* XXX -- either fill in the requested info if we have it somewhere
- * and return AccessDone, or else return Successful
- */
- return Successful;
-}
-
-int
-_fs_get_glyphs(FontPtr pFont, unsigned long count, unsigned char *chars,
- FontEncoding charEncoding,
- unsigned long *glyphCount, /* RETURN */
- CharInfoPtr *glyphs) /* RETURN */
-{
- FSFontPtr fsdata;
- unsigned int firstCol;
- register unsigned int numCols;
- unsigned int firstRow;
- unsigned int numRows;
- CharInfoPtr *glyphsBase;
- register unsigned int c;
- register CharInfoPtr pci;
- unsigned int r;
- CharInfoPtr encoding;
- CharInfoPtr pDefault;
- FSFontDataPtr fsd = (FSFontDataPtr) pFont->fpePrivate;
- int err = Successful;
-
- fsdata = (FSFontPtr) pFont->fontPrivate;
- encoding = fsdata->encoding;
- pDefault = fsdata->pDefault;
- firstCol = pFont->info.firstCol;
- numCols = pFont->info.lastCol - firstCol + 1;
- glyphsBase = glyphs;
-
- /* In this age of glyph caching, any glyphs gotten through this
- procedure should already be loaded. If they are not, we are
- dealing with someone (perhaps a ddx driver optimizing a font)
- that doesn't understand the finer points of glyph caching. The
- CHECK_ENCODING macro checks for this condition... if found, it
- calls fs_load_all_glyphs(), which corrects it. Since the caller
- of this code will not know how to handle a return value of
- Suspended, the fs_load_all_glyphs() procedure will block and
- freeze the server until the load operation is done. Moral: the
- glyphCachingMode flag really must indicate the capabilities of
- the ddx drivers. */
-
-#define CHECK_ENCODING(cnum) \
- ( pci = encoding + (cnum), \
- fsd->glyphs_to_get ? \
- ( pci->bits == &_fs_glyph_undefined || pci->bits == &_fs_glyph_requested ? \
- ((err = fs_load_all_glyphs(pFont)), pci) : \
- pci ) : \
- pci )
-
- switch (charEncoding) {
-
- case Linear8Bit:
- case TwoD8Bit:
- if (pFont->info.firstRow > 0)
- break;
- if (pFont->info.allExist && pDefault) {
- while (err == Successful && count--) {
- c = (*chars++) - firstCol;
- if (c < numCols)
- *glyphs++ = CHECK_ENCODING(c);
- else
- *glyphs++ = pDefault;
- }
- } else {
- while (err == Successful && count--) {
- c = (*chars++) - firstCol;
- if (c < numCols && CHECK_ENCODING(c)->bits)
- *glyphs++ = pci;
- else if (pDefault)
- *glyphs++ = pDefault;
- }
- }
- break;
- case Linear16Bit:
- if (pFont->info.allExist && pDefault) {
- while (err == Successful && count--) {
- c = *chars++ << 8;
- c = (c | *chars++) - firstCol;
- if (c < numCols)
- *glyphs++ = CHECK_ENCODING(c);
- else
- *glyphs++ = pDefault;
- }
- } else {
- while (err == Successful && count--) {
- c = *chars++ << 8;
- c = (c | *chars++) - firstCol;
- if (c < numCols && CHECK_ENCODING(c)->bits)
- *glyphs++ = pci;
- else if (pDefault)
- *glyphs++ = pDefault;
- }
- }
- break;
-
- case TwoD16Bit:
- firstRow = pFont->info.firstRow;
- numRows = pFont->info.lastRow - firstRow + 1;
- while (err == Successful && count--) {
- r = (*chars++) - firstRow;
- c = (*chars++) - firstCol;
- if (r < numRows && c < numCols &&
- CHECK_ENCODING(r * numCols + c)->bits)
- *glyphs++ = pci;
- else if (pDefault)
- *glyphs++ = pDefault;
- }
- break;
- }
- *glyphCount = glyphs - glyphsBase;
- return err;
-}
-
-
-static int
-_fs_get_metrics(FontPtr pFont, unsigned long count, unsigned char *chars,
- FontEncoding charEncoding,
- unsigned long *glyphCount, /* RETURN */
- xCharInfo **glyphs) /* RETURN */
-{
- FSFontPtr fsdata;
- unsigned int firstCol;
- register unsigned int numCols;
- unsigned int firstRow;
- unsigned int numRows;
- xCharInfo **glyphsBase;
- register unsigned int c;
- unsigned int r;
- CharInfoPtr encoding;
- CharInfoPtr pDefault;
-
- fsdata = (FSFontPtr) pFont->fontPrivate;
- encoding = fsdata->inkMetrics;
- pDefault = fsdata->pDefault;
- /* convert default bitmap metric to default ink metric */
- if (pDefault)
- pDefault = encoding + (pDefault - fsdata->encoding);
- firstCol = pFont->info.firstCol;
- numCols = pFont->info.lastCol - firstCol + 1;
- glyphsBase = glyphs;
-
-
- /* XXX - this should be much smarter */
- /* make sure the glyphs are there */
- switch (charEncoding) {
-
- case Linear8Bit:
- case TwoD8Bit:
- if (pFont->info.firstRow > 0)
- break;
- if (pFont->info.allExist && pDefault) {
- while (count--) {
- c = (*chars++) - firstCol;
- if (c < numCols)
- *glyphs++ = (xCharInfo *)&encoding[c];
- else
- *glyphs++ = (xCharInfo *)pDefault;
- }
- } else {
- while (count--) {
- c = (*chars++) - firstCol;
- if (c < numCols)
- *glyphs++ = (xCharInfo *)(encoding + c);
- else if (pDefault)
- *glyphs++ = (xCharInfo *)pDefault;
- }
- }
- break;
- case Linear16Bit:
- if (pFont->info.allExist && pDefault) {
- while (count--) {
- c = *chars++ << 8;
- c = (c | *chars++) - firstCol;
- if (c < numCols)
- *glyphs++ = (xCharInfo *)(encoding + c);
- else
- *glyphs++ = (xCharInfo *)pDefault;
- }
- } else {
- while (count--) {
- c = *chars++ << 8;
- c = (c | *chars++) - firstCol;
- if (c < numCols)
- *glyphs++ = (xCharInfo *)(encoding + c);
- else if (pDefault)
- *glyphs++ = (xCharInfo *)pDefault;
- }
- }
- break;
-
- case TwoD16Bit:
- firstRow = pFont->info.firstRow;
- numRows = pFont->info.lastRow - firstRow + 1;
- while (count--) {
- r = (*chars++) - firstRow;
- c = (*chars++) - firstCol;
- if (r < numRows && c < numCols)
- *glyphs++ = (xCharInfo *)(encoding + (r * numCols + c));
- else if (pDefault)
- *glyphs++ = (xCharInfo *)pDefault;
- }
- break;
- }
- *glyphCount = glyphs - glyphsBase;
- return Successful;
-}
-
-
-void
-_fs_unload_font(FontPtr pfont)
-{
- FSFontPtr fsdata = (FSFontPtr) pfont->fontPrivate;
- FSFontDataPtr fsd = (FSFontDataPtr) pfont->fpePrivate;
- CharInfoPtr encoding = fsdata->encoding;
- FSGlyphPtr glyphs;
-
- /*
- * fsdata points at FSFontRec, FSFontDataRec and name
- */
- if (encoding)
- xfree(encoding);
-
- while ((glyphs = fsdata->glyphs))
- {
- fsdata->glyphs = glyphs->next;
- xfree (glyphs);
- }
-
- /* XXX we may get called after the resource DB has been cleaned out */
- if (find_old_font(fsd->fontid))
- DeleteFontClientID (fsd->fontid);
-
- _fs_free_props (&pfont->info);
-
- xfree(fsdata);
-
- DestroyFontRec(pfont);
-}
-
-FontPtr
-fs_create_font (FontPathElementPtr fpe,
- char *name,
- int namelen,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask)
-{
- FontPtr pfont;
- FSFontPtr fsfont;
- FSFontDataPtr fsd;
- int bit, byte, scan, glyph;
-
- pfont = CreateFontRec ();
- if (!pfont)
- return 0;
- fsfont = (FSFontPtr) xalloc (sizeof (FSFontRec) +
- sizeof (FSFontDataRec) +
- namelen + 1);
- if (!fsfont)
- {
- DestroyFontRec (pfont);
- return 0;
- }
- fsd = (FSFontDataPtr) (fsfont + 1);
- bzero((char *) fsfont, sizeof(FSFontRec));
- bzero((char *) fsd, sizeof(FSFontDataRec));
-
- pfont->fpe = fpe;
- pfont->fontPrivate = (pointer) fsfont;
- pfont->fpePrivate = (pointer) fsd;
-
- /* These font components will be needed in packGlyphs */
- CheckFSFormat(format, BitmapFormatMaskBit |
- BitmapFormatMaskByte |
- BitmapFormatMaskScanLineUnit |
- BitmapFormatMaskScanLinePad,
- &bit,
- &byte,
- &scan,
- &glyph,
- NULL);
- pfont->format = format;
- pfont->bit = bit;
- pfont->byte = byte;
- pfont->scan = scan;
- pfont->glyph = glyph;
-
- pfont->info.nprops = 0;
- pfont->info.props = 0;
- pfont->info.isStringProp = 0;
-
- /* set font function pointers */
- pfont->get_glyphs = _fs_get_glyphs;
- pfont->get_metrics = _fs_get_metrics;
- pfont->unload_font = _fs_unload_font;
- pfont->unload_glyphs = NULL;
-
- /* set the FPE private information */
- fsd->format = format;
- fsd->fmask = fmask;
- fsd->name = (char *) (fsd + 1);
- memcpy (fsd->name, name, namelen);
- fsd->name[namelen] = '\0';
- fsd->fontid = GetNewFontClientID ();
-
- /* save the ID */
- if (!StoreFontClientFont(pfont, fsd->fontid))
- {
- xfree (fsfont);
- DestroyFontRec (pfont);
- return 0;
- }
-
- return pfont;
-}
-
-pointer
-fs_alloc_glyphs (FontPtr pFont, int size)
-{
- FSGlyphPtr glyphs;
- FSFontPtr fsfont = (FSFontPtr) pFont->fontPrivate;
-
- if (size < (INT_MAX - sizeof (FSGlyphRec)))
- glyphs = xalloc (sizeof (FSGlyphRec) + size);
- else
- glyphs = NULL;
- if (glyphs == NULL)
- return NULL;
- glyphs->next = fsfont->glyphs;
- fsfont->glyphs = glyphs;
- return (pointer) (glyphs + 1);
-}
diff --git a/nx-X11/lib/font/fc/fserve.c b/nx-X11/lib/font/fc/fserve.c
deleted file mode 100644
index 6bbb8c2a0..000000000
--- a/nx-X11/lib/font/fc/fserve.c
+++ /dev/null
@@ -1,3480 +0,0 @@
-/* $XdotOrg: xc/lib/font/fc/fserve.c,v 1.8 2005/07/09 06:36:12 keithp Exp $ */
-/* $Xorg: fserve.c,v 1.4 2001/02/09 02:04:02 xorgcvs Exp $ */
-/*
-
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fc/fserve.c,v 3.26tsi Exp $ */
-
-/*
- * Copyright 1990 Network Computing Devices
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of Network Computing Devices, or Digital
- * not be used in advertising or publicity pertaining to distribution
- * of the software without specific, written prior permission.
- *
- * NETWORK COMPUTING DEVICES, AND DIGITAL AND DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES,
- * OR DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices, Inc
- */
-/*
- * font server specific font access
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifdef WIN32
-#define _WILLWINSOCK_
-#endif
-#define FONT_t
-#define TRANS_CLIENT
-#include "X11/Xtrans/Xtrans.h"
-#include "X11/Xpoll.h"
-#include <X11/fonts/FS.h>
-#include <X11/fonts/FSproto.h>
-#include <X11/X.h>
-#include <X11/Xos.h>
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/fontstruct.h>
-#include "fservestr.h"
-#include <X11/fonts/fontutil.h>
-#include <errno.h>
-#include <limits.h>
-
-#include <time.h>
-#define Time_t time_t
-
-#ifdef NCD
-#include <ncd/nvram.h>
-#endif
-
-#include <stddef.h>
-
-#ifndef MIN
-#define MIN(a,b) ((a)<(b)?(a):(b))
-#endif
-#define TimeCmp(a,c,b) ((int) ((a) - (b)) c 0)
-
-#define NONZEROMETRICS(pci) ((pci)->leftSideBearing || \
- (pci)->rightSideBearing || \
- (pci)->ascent || \
- (pci)->descent || \
- (pci)->characterWidth)
-
-/*
- * SIZEOF(r) is in bytes, length fields in the protocol are in 32-bit words,
- * so this converts for doing size comparisons.
- */
-#define LENGTHOF(r) (SIZEOF(r) >> 2)
-
-/* Somewhat arbitrary limit on maximum reply size we'll try to read. */
-#define MAX_REPLY_LENGTH ((64 * 1024 * 1024) >> 2)
-
-extern void ErrorF(const char *f, ...);
-
-static int fs_read_glyphs ( FontPathElementPtr fpe, FSBlockDataPtr blockrec );
-static int fs_read_list ( FontPathElementPtr fpe, FSBlockDataPtr blockrec );
-static int fs_read_list_info ( FontPathElementPtr fpe,
- FSBlockDataPtr blockrec );
-
-extern fd_set _fs_fd_mask;
-
-static void fs_block_handler ( pointer data, OSTimePtr wt,
- pointer LastSelectMask );
-static int fs_wakeup ( FontPathElementPtr fpe, unsigned long *mask );
-
-/*
- * List of all FPEs
- */
-static FSFpePtr fs_fpes;
-/*
- * Union of all FPE blockStates
- */
-static CARD32 fs_blockState;
-
-static int _fs_restart_connection ( FSFpePtr conn );
-static void fs_send_query_bitmaps ( FontPathElementPtr fpe,
- FSBlockDataPtr blockrec );
-static int fs_send_close_font ( FontPathElementPtr fpe, Font id );
-static void fs_client_died ( pointer client, FontPathElementPtr fpe );
-static void _fs_client_access ( FSFpePtr conn, pointer client, Bool sync );
-static void _fs_client_resolution ( FSFpePtr conn );
-static fsGenericReply *fs_get_reply (FSFpePtr conn, int *error);
-static int fs_await_reply (FSFpePtr conn);
-static void _fs_do_blocked (FSFpePtr conn);
-static void fs_cleanup_bfont (FSBlockedFontPtr bfont);
-
-char _fs_glyph_undefined;
-char _fs_glyph_requested;
-char _fs_glyph_zero_length;
-
-static int generationCount;
-
-int FontServerRequestTimeout = 30 * 1000;
-
-static void
-_fs_close_server (FSFpePtr conn);
-
-static FSFpePtr
-_fs_init_conn (char *servername);
-
-static int
-_fs_wait_connect (FSFpePtr conn);
-
-static int
-_fs_send_init_packets (FSFpePtr conn);
-
-static void
-_fs_check_reconnect (FSFpePtr conn);
-
-static void
-_fs_start_reconnect (FSFpePtr conn);
-
-static void
-_fs_free_conn (FSFpePtr conn);
-
-static int
-fs_free_fpe(FontPathElementPtr fpe);
-
-/*
- * Font server access
- *
- * the basic idea for the non-blocking access is to have the function
- * called multiple times until the actual data is returned, instead
- * of ClientBlocked.
- *
- * the first call to the function will cause the request to be sent to
- * the font server, and a block record to be stored in the fpe's list
- * of outstanding requests. the FS block handler also sticks the
- * proper set of fd's into the select mask. when data is ready to be
- * read in, the FS wakup handler will be hit. this will read the
- * data off the wire into the proper block record, and then signal the
- * client that caused the block so that it can restart. it will then
- * call the access function again, which will realize that the data has
- * arrived and return it.
- */
-
-
-#ifdef DEBUG
-static void
-_fs_add_req_log(FSFpePtr conn, int opcode)
-{
- conn->current_seq++;
- fprintf (stderr, "\t\tRequest: %5d Opcode: %2d\n",
- conn->current_seq, opcode);
- conn->reqbuffer[conn->reqindex].opcode = opcode;
- conn->reqbuffer[conn->reqindex].sequence = conn->current_seq;
- conn->reqindex++;
- if (conn->reqindex == REQUEST_LOG_SIZE)
- conn->reqindex = 0;
-}
-
-static void
-_fs_add_rep_log (FSFpePtr conn, fsGenericReply *rep)
-{
- int i;
-
- for (i = 0; i < REQUEST_LOG_SIZE; i++)
- if (conn->reqbuffer[i].sequence == rep->sequenceNumber)
- break;
- if (i == REQUEST_LOG_SIZE)
- fprintf (stderr, "\t\t\t\t\tReply: %5d Opcode: unknown\n",
- rep->sequenceNumber);
- else
- fprintf (stderr, "\t\t\t\t\tReply: %5d Opcode: %d\n",
- rep->sequenceNumber,
- conn->reqbuffer[i].opcode);
-}
-
-#define _fs_reply_failed(rep, name, op) do { \
- if (rep) { \
- if (rep->type == FS_Error) \
- fprintf (stderr, "Error: %d Request: %s\n", \
- ((fsError *)rep)->request, #name); \
- else \
- fprintf (stderr, "Bad Length for %s Reply: %d %s %d\n", \
- #name, rep->length, op, LENGTHOF(name)); \
- } \
-} while (0)
-
-#else
-#define _fs_add_req_log(conn,op) ((conn)->current_seq++)
-#define _fs_add_rep_log(conn,rep)
-#define _fs_reply_failed(rep,name,op)
-#endif
-
-static Bool
-fs_name_check(char *name)
-{
-#ifdef __UNIXOS2__
- /* OS/2 uses D:/usr/X11R6/.... as fontfile pathnames, so check that
- * there is not only a protocol/ prefix, but also that the first chars
- * are not a drive letter
- */
- if (name && isalpha(*name) && name[1] == ':')
- return FALSE;
-#endif
- /* Just make sure there is a protocol/ prefix */
- return (name && *name != '/' && strchr(name, '/'));
-}
-
-static void
-_fs_client_resolution(FSFpePtr conn)
-{
- fsSetResolutionReq srreq;
- int num_res;
- FontResolutionPtr res;
-
- res = GetClientResolutions(&num_res);
-
- if (num_res) {
- srreq.reqType = FS_SetResolution;
- srreq.num_resolutions = num_res;
- srreq.length = (SIZEOF(fsSetResolutionReq) +
- (num_res * SIZEOF(fsResolution)) + 3) >> 2;
-
- _fs_add_req_log(conn, FS_SetResolution);
- if (_fs_write(conn, (char *) &srreq, SIZEOF(fsSetResolutionReq)) != -1)
- (void)_fs_write_pad(conn, (char *) res,
- (num_res * SIZEOF(fsResolution)));
- }
-}
-
-/*
- * close font server and remove any state associated with
- * this connection - this includes any client records.
- */
-
-static void
-fs_close_conn(FSFpePtr conn)
-{
- FSClientPtr client, nclient;
-
- _fs_close_server (conn);
-
- for (client = conn->clients; client; client = nclient)
- {
- nclient = client->next;
- xfree (client);
- }
- conn->clients = NULL;
-}
-
-/*
- * the wakeup handlers have to be set when the FPE is open, and not
- * removed until it is freed, in order to handle unexpected data, like
- * events
- */
-/* ARGSUSED */
-static int
-fs_init_fpe(FontPathElementPtr fpe)
-{
- FSFpePtr conn;
- char *name;
- int err;
- int ret;
-
- /* open font server */
- /* create FS specific fpe info */
- name = fpe->name;
-
- /* hack for old style names */
- if (*name == ':')
- name++; /* skip ':' */
-
- conn = _fs_init_conn (name);
- if (!conn)
- err = AllocError;
- else
- {
- err = init_fs_handlers (fpe, fs_block_handler);
- if (err != Successful)
- {
- _fs_free_conn (conn);
- err = AllocError;
- }
- else
- {
- fpe->private = conn;
- conn->next = fs_fpes;
- fs_fpes = conn;
- ret = _fs_wait_connect (conn);
- if (ret != FSIO_READY)
- {
- fs_free_fpe (fpe);
- err = BadFontPath;
- }
- else
- err = Successful;
- }
- }
-
- if (err == Successful)
- {
-#ifdef NCD
- if (configData.ExtendedFontDiags)
- printf("Connected to font server \"%s\"\n", name);
-#endif
-#ifdef DEBUG
- fprintf (stderr, "connected to FS \"%s\"\n", name);
-#endif
- }
- else
- {
-#ifdef DEBUG
- fprintf(stderr, "failed to connect to FS \"%s\" %d\n", name, err);
-#endif
-#ifdef NCD
- if (configData.ExtendedFontDiags)
- printf("Failed to connect to font server \"%s\"\n", name);
-#endif
- ;
- }
- return err;
-}
-
-static int
-fs_reset_fpe(FontPathElementPtr fpe)
-{
- (void) _fs_send_init_packets((FSFpePtr) fpe->private);
- return Successful;
-}
-
-/*
- * this shouldn't be called till all refs to the FPE are gone
- */
-
-static int
-fs_free_fpe(FontPathElementPtr fpe)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private, *prev;
-
- /* unhook from chain of all font servers */
- for (prev = &fs_fpes; *prev; prev = &(*prev)->next)
- {
- if (*prev == conn)
- {
- *prev = conn->next;
- break;
- }
- }
- _fs_unmark_block (conn, conn->blockState);
- fs_close_conn(conn);
- remove_fs_handlers(fpe, fs_block_handler, fs_fpes == 0);
- _fs_free_conn (conn);
- fpe->private = (pointer) 0;
-
-#ifdef NCD
- if (configData.ExtendedFontDiags)
- printf("Disconnected from font server \"%s\"\n", fpe->name);
-#endif
-#ifdef DEBUG
- fprintf (stderr, "disconnect from FS \"%s\"\n", fpe->name);
-#endif
-
- return Successful;
-}
-
-static FSBlockDataPtr
-fs_new_block_rec(FontPathElementPtr fpe, pointer client, int type)
-{
- FSBlockDataPtr blockrec,
- *prev;
- FSFpePtr conn = (FSFpePtr) fpe->private;
- int size;
-
- switch (type) {
- case FS_OPEN_FONT:
- size = sizeof(FSBlockedFontRec);
- break;
- case FS_LOAD_GLYPHS:
- size = sizeof(FSBlockedGlyphRec);
- break;
- case FS_LIST_FONTS:
- size = sizeof(FSBlockedListRec);
- break;
- case FS_LIST_WITH_INFO:
- size = sizeof(FSBlockedListInfoRec);
- break;
- default:
- size = 0;
- break;
- }
- blockrec = (FSBlockDataPtr) xalloc(sizeof(FSBlockDataRec) + size);
- if (!blockrec)
- return (FSBlockDataPtr) 0;
- blockrec->data = (pointer) (blockrec + 1);
- blockrec->client = client;
- blockrec->sequenceNumber = -1;
- blockrec->errcode = StillWorking;
- blockrec->type = type;
- blockrec->depending = 0;
- blockrec->next = (FSBlockDataPtr) 0;
-
- /* stick it on the end of the list (since its expected last) */
- for (prev = &conn->blockedRequests; *prev; prev = &(*prev)->next)
- ;
- *prev = blockrec;
-
- return blockrec;
-}
-
-static void
-_fs_set_pending_reply (FSFpePtr conn)
-{
- FSBlockDataPtr blockrec;
-
- for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
- if (blockrec->errcode == StillWorking)
- break;
- if (blockrec)
- {
- conn->blockedReplyTime = GetTimeInMillis () + FontServerRequestTimeout;
- _fs_mark_block (conn, FS_PENDING_REPLY);
- }
- else
- _fs_unmark_block (conn, FS_PENDING_REPLY);
-}
-
-static void
-_fs_remove_block_rec(FSFpePtr conn, FSBlockDataPtr blockrec)
-{
- FSBlockDataPtr *prev;
-
- for (prev = &conn->blockedRequests; *prev; prev = &(*prev)->next)
- if (*prev == blockrec)
- {
- *prev = blockrec->next;
- break;
- }
- if (blockrec->type == FS_LOAD_GLYPHS)
- {
- FSBlockedGlyphPtr bglyph = (FSBlockedGlyphPtr)blockrec->data;
- if (bglyph->num_expected_ranges)
- xfree(bglyph->expected_ranges);
- }
- xfree(blockrec);
- _fs_set_pending_reply (conn);
-}
-
-static void
-_fs_signal_clients_depending(FSClientsDependingPtr *clients_depending)
-{
- FSClientsDependingPtr p;
-
- while ((p = *clients_depending))
- {
- *clients_depending = p->next;
- ClientSignal(p->client);
- xfree(p);
- }
-}
-
-static int
-_fs_add_clients_depending(FSClientsDependingPtr *clients_depending, pointer client)
-{
- FSClientsDependingPtr new, cd;
-
- for (; (cd = *clients_depending);
- clients_depending = &(*clients_depending)->next)
- {
- if (cd->client == client)
- return Suspended;
- }
-
- new = (FSClientsDependingPtr)xalloc (sizeof (FSClientsDependingRec));
- if (!new)
- return BadAlloc;
-
- new->client = client;
- new->next = 0;
- *clients_depending = new;
- return Suspended;
-}
-
-/*
- * When a request is aborted due to a font server failure,
- * signal any depending clients to restart their dependant
- * requests
- */
-static void
-_fs_clean_aborted_blockrec(FSFpePtr conn, FSBlockDataPtr blockrec)
-{
- switch(blockrec->type) {
- case FS_OPEN_FONT: {
- FSBlockedFontPtr bfont = (FSBlockedFontPtr)blockrec->data;
-
- fs_cleanup_bfont (bfont);
- _fs_signal_clients_depending(&bfont->clients_depending);
- break;
- }
- case FS_LOAD_GLYPHS: {
- FSBlockedGlyphPtr bglyph = (FSBlockedGlyphPtr)blockrec->data;
-
- _fs_clean_aborted_loadglyphs(bglyph->pfont,
- bglyph->num_expected_ranges,
- bglyph->expected_ranges);
- _fs_signal_clients_depending(&bglyph->clients_depending);
- break;
- }
- case FS_LIST_FONTS:
- break;
- case FS_LIST_WITH_INFO: {
- FSBlockedListInfoPtr binfo;
- binfo = (FSBlockedListInfoPtr) blockrec->data;
- if (binfo->status == FS_LFWI_REPLY)
- FD_SET(conn->fs_fd, &_fs_fd_mask);
- _fs_free_props (&binfo->info);
- }
- default:
- break;
- }
-}
-
-static void
-fs_abort_blockrec(FSFpePtr conn, FSBlockDataPtr blockrec)
-{
- _fs_clean_aborted_blockrec (conn, blockrec);
- _fs_remove_block_rec (conn, blockrec);
-}
-
-/*
- * Tell the font server we've failed to complete an open and
- * then unload the partially created font
- */
-static void
-fs_cleanup_bfont (FSBlockedFontPtr bfont)
-{
- FSFontDataRec *fsd;
-
- if (bfont->pfont)
- {
- fsd = (FSFontDataRec *) bfont->pfont->fpePrivate;
-
- /* make sure the FS knows we choked on it */
- fs_send_close_font(bfont->pfont->fpe, bfont->fontid);
-
- /*
- * Either unload the font if it's being opened for
- * the first time, or smash the generation field to
- * mark this font as an orphan
- */
- if (!(bfont->flags & FontReopen))
- {
- if (bfont->freeFont)
- (*bfont->pfont->unload_font) (bfont->pfont);
-#ifdef DEBUG
- else
- fprintf (stderr, "Not freeing other font in cleanup_bfont\n");
-#endif
- bfont->pfont = 0;
- }
- else
- fsd->generation = -1;
- }
-}
-
-/*
- * Check to see if a complete reply is waiting
- */
-static fsGenericReply *
-fs_get_reply (FSFpePtr conn, int *error)
-{
- char *buf;
- fsGenericReply *rep;
- int ret;
-
- /* block if the connection is down or paused in lfwi */
- if (conn->fs_fd == -1 || !FD_ISSET (conn->fs_fd, &_fs_fd_mask))
- {
- *error = FSIO_BLOCK;
- return 0;
- }
-
- ret = _fs_start_read (conn, sizeof (fsGenericReply), &buf);
- if (ret != FSIO_READY)
- {
- *error = FSIO_BLOCK;
- return 0;
- }
-
- rep = (fsGenericReply *) buf;
-
- /*
- * Refuse to accept replies longer than a maximum reasonable length,
- * before we pass to _fs_start_read, since it will try to resize the
- * incoming connection buffer to this size. Also avoids integer overflow
- * on 32-bit systems.
- */
- if (rep->length > MAX_REPLY_LENGTH)
- {
- ErrorF("fserve: reply length %d > MAX_REPLY_LENGTH, disconnecting"
- " from font server\n", rep->length);
- _fs_connection_died (conn);
- *error = FSIO_ERROR;
- return 0;
- }
-
- ret = _fs_start_read (conn, rep->length << 2, &buf);
- if (ret != FSIO_READY)
- {
- *error = FSIO_BLOCK;
- return 0;
- }
-
- *error = FSIO_READY;
-
- return (fsGenericReply *) buf;
-}
-
-static Bool
-fs_reply_ready (FSFpePtr conn)
-{
- fsGenericReply *rep;
-
- if (conn->fs_fd == -1 || !FD_ISSET (conn->fs_fd, &_fs_fd_mask))
- return FALSE;
- if (fs_data_read (conn) < sizeof (fsGenericReply))
- return FALSE;
- rep = (fsGenericReply *) (conn->inBuf.buf + conn->inBuf.remove);
- if (fs_data_read (conn) < rep->length << 2)
- return FALSE;
- return TRUE;
-}
-
-static void
-_fs_pending_reply (FSFpePtr conn)
-{
- if (!(conn->blockState & FS_PENDING_REPLY))
- {
- _fs_mark_block (conn, FS_PENDING_REPLY);
- conn->blockedReplyTime = GetTimeInMillis () + FontServerRequestTimeout;
- }
-}
-
-static void
-_fs_prepare_for_reply (FSFpePtr conn)
-{
- _fs_pending_reply (conn);
- _fs_flush (conn);
-}
-
-/*
- * Block (for a while) awaiting a complete reply
- */
-static int
-fs_await_reply (FSFpePtr conn)
-{
- int ret;
-
- if (conn->blockState & FS_COMPLETE_REPLY)
- return FSIO_READY;
-
- while (!fs_get_reply (conn, &ret))
- {
- if (ret != FSIO_BLOCK)
- return ret;
- if (_fs_wait_for_readable (conn, FontServerRequestTimeout) != FSIO_READY)
- {
- _fs_connection_died (conn);
- return FSIO_ERROR;
- }
- }
- return FSIO_READY;
-}
-
-/*
- * Process the reply to an OpenBitmapFont request
- */
-static int
-fs_read_open_font(FontPathElementPtr fpe, FSBlockDataPtr blockrec)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FSBlockedFontPtr bfont = (FSBlockedFontPtr) blockrec->data;
- fsOpenBitmapFontReply *rep;
- FSBlockDataPtr blockOrig;
- FSBlockedFontPtr origBfont;
- int ret;
-
- rep = (fsOpenBitmapFontReply *) fs_get_reply (conn, &ret);
- if (!rep || rep->type == FS_Error ||
- (rep->length != LENGTHOF(fsOpenBitmapFontReply)))
- {
- if (ret == FSIO_BLOCK)
- return StillWorking;
- if (rep)
- _fs_done_read (conn, rep->length << 2);
- fs_cleanup_bfont (bfont);
- _fs_reply_failed (rep, fsOpenBitmapFontReply, "!=");
- return BadFontName;
- }
-
- /* If we're not reopening a font and FS detected a duplicate font
- open request, replace our reference to the new font with a
- reference to an existing font (possibly one not finished
- opening). If this is a reopen, keep the new font reference...
- it's got the metrics and extents we read when the font was opened
- before. This also gives us the freedom to easily close the font
- if we we decide (in fs_read_query_info()) that we don't like what
- we got. */
-
- if (rep->otherid && !(bfont->flags & FontReopen))
- {
- fs_cleanup_bfont (bfont);
-
- /* Find old font if we're completely done getting it from server. */
- bfont->pfont = find_old_font(rep->otherid);
- bfont->freeFont = FALSE;
- bfont->fontid = rep->otherid;
- bfont->state = FS_DONE_REPLY;
- /*
- * look for a blocked request to open the same font
- */
- for (blockOrig = conn->blockedRequests;
- blockOrig;
- blockOrig = blockOrig->next)
- {
- if (blockOrig != blockrec && blockOrig->type == FS_OPEN_FONT)
- {
- origBfont = (FSBlockedFontPtr) blockOrig->data;
- if (origBfont->fontid == rep->otherid)
- {
- blockrec->depending = blockOrig->depending;
- blockOrig->depending = blockrec;
- bfont->state = FS_DEPENDING;
- bfont->pfont = origBfont->pfont;
- break;
- }
- }
- }
- if (bfont->pfont == NULL)
- {
- /* XXX - something nasty happened */
- ret = BadFontName;
- }
- else
- ret = AccessDone;
- }
- else
- {
- bfont->pfont->info.cachable = rep->cachable != 0;
- bfont->state = FS_INFO_REPLY;
- /*
- * Reset the blockrec for the next reply
- */
- blockrec->sequenceNumber = bfont->queryInfoSequence;
- conn->blockedReplyTime = GetTimeInMillis () + FontServerRequestTimeout;
- ret = StillWorking;
- }
- _fs_done_read (conn, rep->length << 2);
- return ret;
-}
-
-static Bool
-fs_fonts_match (FontInfoPtr pInfo1, FontInfoPtr pInfo2)
-{
- int i;
-
- if (pInfo1->firstCol != pInfo2->firstCol ||
- pInfo1->lastCol != pInfo2->lastCol ||
- pInfo1->firstRow != pInfo2->firstRow ||
- pInfo1->lastRow != pInfo2->lastRow ||
- pInfo1->defaultCh != pInfo2->defaultCh ||
- pInfo1->noOverlap != pInfo2->noOverlap ||
- pInfo1->terminalFont != pInfo2->terminalFont ||
- pInfo1->constantMetrics != pInfo2->constantMetrics ||
- pInfo1->constantWidth != pInfo2->constantWidth ||
- pInfo1->inkInside != pInfo2->inkInside ||
- pInfo1->inkMetrics != pInfo2->inkMetrics ||
- pInfo1->allExist != pInfo2->allExist ||
- pInfo1->drawDirection != pInfo2->drawDirection ||
- pInfo1->cachable != pInfo2->cachable ||
- pInfo1->anamorphic != pInfo2->anamorphic ||
- pInfo1->maxOverlap != pInfo2->maxOverlap ||
- pInfo1->fontAscent != pInfo2->fontAscent ||
- pInfo1->fontDescent != pInfo2->fontDescent ||
- pInfo1->nprops != pInfo2->nprops)
- return FALSE;
-
-#define MATCH(xci1, xci2) \
- (((xci1).leftSideBearing == (xci2).leftSideBearing) && \
- ((xci1).rightSideBearing == (xci2).rightSideBearing) && \
- ((xci1).characterWidth == (xci2).characterWidth) && \
- ((xci1).ascent == (xci2).ascent) && \
- ((xci1).descent == (xci2).descent) && \
- ((xci1).attributes == (xci2).attributes))
-
- if (!MATCH(pInfo1->maxbounds, pInfo2->maxbounds) ||
- !MATCH(pInfo1->minbounds, pInfo2->minbounds) ||
- !MATCH(pInfo1->ink_maxbounds, pInfo2->ink_maxbounds) ||
- !MATCH(pInfo1->ink_minbounds, pInfo2->ink_minbounds))
- return FALSE;
-
-#undef MATCH
-
- for (i = 0; i < pInfo1->nprops; i++)
- if (pInfo1->isStringProp[i] !=
- pInfo2->isStringProp[i] ||
- pInfo1->props[i].name !=
- pInfo2->props[i].name ||
- pInfo1->props[i].value !=
- pInfo2->props[i].value)
- {
- return FALSE;
- }
- return TRUE;
-}
-
-static int
-fs_read_query_info(FontPathElementPtr fpe, FSBlockDataPtr blockrec)
-{
- FSBlockedFontPtr bfont = (FSBlockedFontPtr) blockrec->data;
- FSFpePtr conn = (FSFpePtr) fpe->private;
- fsQueryXInfoReply *rep;
- char *buf;
- long bufleft = 0; /* length of reply left to use */
- fsPropInfo *pi;
- fsPropOffset *po;
- pointer pd;
- FontInfoPtr pInfo;
- FontInfoRec tempInfo;
- int err;
- int ret;
-
- rep = (fsQueryXInfoReply *) fs_get_reply (conn, &ret);
- if (!rep || rep->type == FS_Error ||
- (rep->length < LENGTHOF(fsQueryXInfoReply)))
- {
- if (ret == FSIO_BLOCK)
- return StillWorking;
- if (rep)
- _fs_done_read (conn, rep->length << 2);
- fs_cleanup_bfont (bfont);
- _fs_reply_failed (rep, fsQueryXInfoReply, "<");
- return BadFontName;
- }
-
- /* If this is a reopen, accumulate the query info into a dummy
- font and compare to our original data. */
- if (bfont->flags & FontReopen)
- pInfo = &tempInfo;
- else
- pInfo = &bfont->pfont->info;
-
- buf = (char *) rep;
- buf += SIZEOF(fsQueryXInfoReply);
-
- bufleft = rep->length << 2;
- bufleft -= SIZEOF(fsQueryXInfoReply);
-
- /* move the data over */
- fsUnpack_XFontInfoHeader(rep, pInfo);
-
- /* compute accelerators */
- _fs_init_fontinfo(conn, pInfo);
-
- /* Compute offsets into the reply */
- if (bufleft < SIZEOF(fsPropInfo))
- {
- ret = -1;
-#ifdef DEBUG
- fprintf(stderr, "fsQueryXInfo: bufleft (%ld) < SIZEOF(fsPropInfo)\n",
- bufleft);
-#endif
- goto bail;
- }
- pi = (fsPropInfo *) buf;
- buf += SIZEOF (fsPropInfo);
- bufleft -= SIZEOF (fsPropInfo);
-
- if ((bufleft / SIZEOF (fsPropOffset)) < pi->num_offsets)
- {
- ret = -1;
-#ifdef DEBUG
- fprintf(stderr,
- "fsQueryXInfo: (bufleft / SIZEOF (fsPropOffset)) (%ld) < pi->num_offsets (%d)\n",
- bufleft / SIZEOF (fsPropOffset), pi->num_offsets);
-#endif
- goto bail;
- }
- po = (fsPropOffset *) buf;
- buf += pi->num_offsets * SIZEOF(fsPropOffset);
- bufleft -= pi->num_offsets * SIZEOF(fsPropOffset);
-
- if (bufleft < pi->data_len)
- {
- ret = -1;
-#ifdef DEBUG
- fprintf(stderr,
- "fsQueryXInfo: bufleft (%ld) < data_len (%d)\n",
- bufleft, pi->data_len);
-#endif
- goto bail;
- }
- pd = (pointer) buf;
- buf += pi->data_len;
- bufleft -= pi->data_len;
-
- /* convert the properties and step over the reply */
- ret = _fs_convert_props(pi, po, pd, pInfo);
- bail:
- _fs_done_read (conn, rep->length << 2);
-
- if (ret == -1)
- {
- fs_cleanup_bfont (bfont);
- return AllocError;
- }
-
- if (bfont->flags & FontReopen)
- {
- /* We're reopening a font that we lost because of a downed
- connection. In the interest of avoiding corruption from
- opening a different font than the old one (we already have
- its metrics, extents, and probably some of its glyphs),
- verify that the metrics and properties all match. */
-
- if (fs_fonts_match (pInfo, &bfont->pfont->info))
- {
- err = Successful;
- bfont->state = FS_DONE_REPLY;
- }
- else
- {
- fs_cleanup_bfont (bfont);
- err = BadFontName;
- }
- _fs_free_props (pInfo);
-
- return err;
- }
-
- /*
- * Ask for terminal format fonts if possible
- */
- if (bfont->pfont->info.terminalFont)
- bfont->format = ((bfont->format & ~ (BitmapFormatImageRectMask)) |
- BitmapFormatImageRectMax);
-
- /*
- * Figure out if the whole font should get loaded right now.
- */
- if (glyphCachingMode == CACHING_OFF ||
- (glyphCachingMode == CACHE_16_BIT_GLYPHS
- && !bfont->pfont->info.lastRow))
- {
- bfont->flags |= FontLoadAll;
- }
-
- /*
- * Ready to send the query bitmaps; the terminal font bit has
- * been computed and glyphCaching has been considered
- */
- if (bfont->flags & FontLoadBitmaps)
- {
- fs_send_query_bitmaps (fpe, blockrec);
- _fs_flush (conn);
- }
-
- bfont->state = FS_EXTENT_REPLY;
-
- /*
- * Reset the blockrec for the next reply
- */
- blockrec->sequenceNumber = bfont->queryExtentsSequence;
- conn->blockedReplyTime = GetTimeInMillis () + FontServerRequestTimeout;
-
- return StillWorking;
-}
-
-static int
-fs_read_extent_info(FontPathElementPtr fpe, FSBlockDataPtr blockrec)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FSBlockedFontPtr bfont = (FSBlockedFontPtr) blockrec->data;
- FSFontDataPtr fsd = (FSFontDataPtr) bfont->pfont->fpePrivate;
- FSFontPtr fsfont = (FSFontPtr) bfont->pfont->fontPrivate;
- fsQueryXExtents16Reply *rep;
- char *buf;
- int i;
- int numExtents;
- int numInfos;
- int ret;
- Bool haveInk = FALSE; /* need separate ink metrics? */
- CharInfoPtr ci, pCI;
- char *fsci;
- fsXCharInfo fscilocal;
- FontInfoRec *fi = &bfont->pfont->info;
-
- rep = (fsQueryXExtents16Reply *) fs_get_reply (conn, &ret);
- if (!rep || rep->type == FS_Error ||
- (rep->length < LENGTHOF(fsQueryXExtents16Reply)))
- {
- if (ret == FSIO_BLOCK)
- return StillWorking;
- if (rep)
- _fs_done_read (conn, rep->length << 2);
- fs_cleanup_bfont (bfont);
- _fs_reply_failed (rep, fsQueryXExtents16Reply, "<");
- return BadFontName;
- }
-
- /* move the data over */
- /* need separate inkMetrics for fixed font server protocol version */
- numExtents = rep->num_extents;
- numInfos = numExtents;
- if (bfont->pfont->info.terminalFont && conn->fsMajorVersion > 1)
- {
- numInfos *= 2;
- haveInk = TRUE;
- }
- if (numInfos >= (INT_MAX / sizeof(CharInfoRec))) {
-#ifdef DEBUG
- fprintf(stderr,
- "fsQueryXExtents16: numInfos (%d) >= %ld\n",
- numInfos, (INT_MAX / sizeof(CharInfoRec)));
-#endif
- pCI = NULL;
- }
- else if (numExtents > ((rep->length - LENGTHOF(fsQueryXExtents16Reply))
- / LENGTHOF(fsXCharInfo))) {
-#ifdef DEBUG
- fprintf(stderr,
- "fsQueryXExtents16: numExtents (%d) > (%d - %d) / %d\n",
- numExtents, rep->length,
- LENGTHOF(fsQueryXExtents16Reply), LENGTHOF(fsXCharInfo));
-#endif
- pCI = NULL;
- }
- else
- pCI = malloc(sizeof(CharInfoRec) * numInfos);
-
- if (!pCI)
- {
- _fs_done_read (conn, rep->length << 2);
- fs_cleanup_bfont(bfont);
- return AllocError;
- }
- fsfont->encoding = pCI;
- if (haveInk)
- fsfont->inkMetrics = pCI + numExtents;
- else
- fsfont->inkMetrics = pCI;
-
- buf = (char *) rep;
- buf += SIZEOF (fsQueryXExtents16Reply);
- fsci = buf;
-
- fsd->glyphs_to_get = 0;
- ci = fsfont->inkMetrics;
- for (i = 0; i < numExtents; i++)
- {
- memcpy(&fscilocal, fsci, SIZEOF(fsXCharInfo)); /* align it */
- _fs_convert_char_info(&fscilocal, &ci->metrics);
- /* Bounds check. */
- if (ci->metrics.ascent > fi->maxbounds.ascent)
- {
- ErrorF("fserve: warning: %s %s ascent (%d) > maxascent (%d)\n",
- fpe->name, fsd->name,
- ci->metrics.ascent, fi->maxbounds.ascent);
- ci->metrics.ascent = fi->maxbounds.ascent;
- }
- if (ci->metrics.descent > fi->maxbounds.descent)
- {
- ErrorF("fserve: warning: %s %s descent (%d) > maxdescent (%d)\n",
- fpe->name, fsd->name,
- ci->metrics.descent, fi->maxbounds.descent);
- ci->metrics.descent = fi->maxbounds.descent;
- }
- fsci = fsci + SIZEOF(fsXCharInfo);
- /* Initialize the bits field for later glyph-caching use */
- if (NONZEROMETRICS(&ci->metrics))
- {
- if (!haveInk &&
- (ci->metrics.leftSideBearing == ci->metrics.rightSideBearing ||
- ci->metrics.ascent == -ci->metrics.descent))
- pCI[i].bits = &_fs_glyph_zero_length;
- else
- {
- pCI[i].bits = &_fs_glyph_undefined;
- fsd->glyphs_to_get++;
- }
- }
- else
- pCI[i].bits = (char *)0;
- ci++;
- }
-
- /* Done with reply */
- _fs_done_read (conn, rep->length << 2);
-
- /* build bitmap metrics, ImageRectMax style */
- if (haveInk)
- {
- CharInfoPtr ii;
-
- ci = fsfont->encoding;
- ii = fsfont->inkMetrics;
- for (i = 0; i < numExtents; i++, ci++, ii++)
- {
- if (NONZEROMETRICS(&ii->metrics))
- {
- ci->metrics.leftSideBearing = FONT_MIN_LEFT(fi);
- ci->metrics.rightSideBearing = FONT_MAX_RIGHT(fi);
- ci->metrics.ascent = FONT_MAX_ASCENT(fi);
- ci->metrics.descent = FONT_MAX_DESCENT(fi);
- ci->metrics.characterWidth = FONT_MAX_WIDTH(fi);
- ci->metrics.attributes = ii->metrics.attributes;
- }
- else
- {
- ci->metrics = ii->metrics;
- }
- /* Bounds check. */
- if (ci->metrics.ascent > fi->maxbounds.ascent)
- {
- ErrorF("fserve: warning: %s %s ascent (%d) "
- "> maxascent (%d)\n",
- fpe->name, fsd->name,
- ci->metrics.ascent, fi->maxbounds.ascent);
- ci->metrics.ascent = fi->maxbounds.ascent;
- }
- if (ci->metrics.descent > fi->maxbounds.descent)
- {
- ErrorF("fserve: warning: %s %s descent (%d) "
- "> maxdescent (%d)\n",
- fpe->name, fsd->name,
- ci->metrics.descent, fi->maxbounds.descent);
- ci->metrics.descent = fi->maxbounds.descent;
- }
- }
- }
- {
- unsigned int r, c, numCols, firstCol;
-
- firstCol = bfont->pfont->info.firstCol;
- numCols = bfont->pfont->info.lastCol - firstCol + 1;
- c = bfont->pfont->info.defaultCh;
- fsfont->pDefault = 0;
- if (bfont->pfont->info.lastRow)
- {
- r = c >> 8;
- r -= bfont->pfont->info.firstRow;
- c &= 0xff;
- c -= firstCol;
- if (r < bfont->pfont->info.lastRow-bfont->pfont->info.firstRow+1 &&
- c < numCols)
- fsfont->pDefault = &pCI[r * numCols + c];
- }
- else
- {
- c -= firstCol;
- if (c < numCols)
- fsfont->pDefault = &pCI[c];
- }
- }
- bfont->state = FS_GLYPHS_REPLY;
-
- if (bfont->flags & FontLoadBitmaps)
- {
- /*
- * Reset the blockrec for the next reply
- */
- blockrec->sequenceNumber = bfont->queryBitmapsSequence;
- conn->blockedReplyTime = GetTimeInMillis () + FontServerRequestTimeout;
- return StillWorking;
- }
- return Successful;
-}
-
-#ifdef DEBUG
-static char *fs_open_states[] = {
- "OPEN_REPLY ",
- "INFO_REPLY ",
- "EXTENT_REPLY",
- "GLYPHS_REPLY",
- "DONE_REPLY ",
- "DEPENDING ",
-};
-#endif
-
-static int
-fs_do_open_font(FontPathElementPtr fpe, FSBlockDataPtr blockrec)
-{
- FSBlockedFontPtr bfont = (FSBlockedFontPtr) blockrec->data;
- int err;
-
-#ifdef DEBUG
- fprintf (stderr, "fs_do_open_font state %s %s\n",
- fs_open_states[bfont->state],
- ((FSFontDataPtr) (bfont->pfont->fpePrivate))->name);
-#endif
- err = BadFontName;
- switch (bfont->state) {
- case FS_OPEN_REPLY:
- err = fs_read_open_font(fpe, blockrec);
- if (err != StillWorking) { /* already loaded, or error */
- /* if font's already loaded, massage error code */
- switch (bfont->state) {
- case FS_DONE_REPLY:
- err = Successful;
- break;
- case FS_DEPENDING:
- err = StillWorking;
- break;
- }
- }
- break;
- case FS_INFO_REPLY:
- err = fs_read_query_info(fpe, blockrec);
- break;
- case FS_EXTENT_REPLY:
- err = fs_read_extent_info(fpe, blockrec);
- break;
- case FS_GLYPHS_REPLY:
- if (bfont->flags & FontLoadBitmaps)
- err = fs_read_glyphs(fpe, blockrec);
- break;
- case FS_DEPENDING: /* can't happen */
- default:
- break;
- }
-#ifdef DEBUG
- fprintf (stderr, "fs_do_open_font err %d\n", err);
-#endif
- if (err != StillWorking)
- {
- bfont->state = FS_DONE_REPLY; /* for _fs_load_glyphs() */
- while ((blockrec = blockrec->depending))
- {
- bfont = (FSBlockedFontPtr) blockrec->data;
- bfont->state = FS_DONE_REPLY; /* for _fs_load_glyphs() */
- }
- }
- return err;
-}
-
-void
-_fs_mark_block (FSFpePtr conn, CARD32 mask)
-{
- conn->blockState |= mask;
- fs_blockState |= mask;
-}
-
-void
-_fs_unmark_block (FSFpePtr conn, CARD32 mask)
-{
- FSFpePtr c;
-
- if (conn->blockState & mask)
- {
- conn->blockState &= ~mask;
- fs_blockState = 0;
- for (c = fs_fpes; c; c = c->next)
- fs_blockState |= c->blockState;
- }
-}
-
-/* ARGSUSED */
-static void
-fs_block_handler(pointer data, OSTimePtr wt, pointer LastSelectMask)
-{
- static struct timeval block_timeout;
- CARD32 now, earliest, wakeup;
- int soonest;
- FSFpePtr conn;
-
- XFD_ORSET((fd_set *)LastSelectMask, (fd_set *)LastSelectMask,
- &_fs_fd_mask);
- /*
- * Flush all pending output
- */
- if (fs_blockState & FS_PENDING_WRITE)
- for (conn = fs_fpes; conn; conn = conn->next)
- if (conn->blockState & FS_PENDING_WRITE)
- _fs_flush (conn);
- /*
- * Check for any fpe with a complete reply, set sleep time to zero
- */
- if (fs_blockState & FS_COMPLETE_REPLY)
- {
- block_timeout.tv_sec = 0;
- block_timeout.tv_usec = 0;
- if (*wt == NULL)
- *wt = &block_timeout;
- else
- **wt = block_timeout;
- }
- /*
- * Walk through fpe list computing sleep time
- */
- else if (fs_blockState & (FS_BROKEN_WRITE|
- FS_BROKEN_CONNECTION|
- FS_PENDING_REPLY|
- FS_RECONNECTING))
- {
- now = GetTimeInMillis ();
- earliest = now + 10000000;
- for (conn = fs_fpes; conn; conn = conn->next)
- {
- if (conn->blockState & FS_RECONNECTING)
- {
- wakeup = conn->blockedConnectTime;
- if (TimeCmp (wakeup, <, earliest))
- earliest = wakeup;
- }
- if (conn->blockState & FS_BROKEN_CONNECTION)
- {
- wakeup = conn->brokenConnectionTime;
- if (TimeCmp (wakeup, <, earliest))
- earliest = wakeup;
- }
- if (conn->blockState & FS_BROKEN_WRITE)
- {
- wakeup = conn->brokenWriteTime;
- if (TimeCmp (wakeup, <, earliest))
- earliest = wakeup;
- }
- if (conn->blockState & FS_PENDING_REPLY)
- {
- wakeup = conn->blockedReplyTime;
- if (TimeCmp (wakeup, <, earliest))
- earliest = wakeup;
- }
- }
- soonest = earliest - now;
- if (soonest < 0)
- soonest = 0;
- block_timeout.tv_sec = soonest / 1000;
- block_timeout.tv_usec = (soonest % 1000) * 1000;
- if (*wt == NULL)
- *wt = &block_timeout;
- else if (soonest < (*wt)->tv_sec * 1000 + (*wt)->tv_usec / 1000)
- **wt = block_timeout;
- }
-}
-
-static void
-fs_handle_unexpected(FSFpePtr conn, fsGenericReply *rep)
-{
- if (rep->type == FS_Event && rep->data1 == KeepAlive)
- {
- fsNoopReq req;
-
- /* ping it back */
- req.reqType = FS_Noop;
- req.length = SIZEOF(fsNoopReq) >> 2;
- _fs_add_req_log(conn, FS_Noop);
- _fs_write(conn, (char *) &req, SIZEOF(fsNoopReq));
- }
- /* this should suck up unexpected replies and events */
- _fs_done_read (conn, rep->length << 2);
-}
-
-static void
-fs_read_reply (FontPathElementPtr fpe, pointer client)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FSBlockDataPtr blockrec;
- int ret;
- int err;
- fsGenericReply *rep;
-
- if ((rep = fs_get_reply (conn, &ret)))
- {
- _fs_add_rep_log (conn, rep);
- for (blockrec = conn->blockedRequests;
- blockrec;
- blockrec = blockrec->next)
- {
- if (blockrec->sequenceNumber == rep->sequenceNumber)
- break;
- }
- err = Successful;
- if (!blockrec)
- {
- fs_handle_unexpected(conn, rep);
- }
- else
- {
- /*
- * go read it, and if we're done,
- * wake up the appropriate client
- */
- switch (blockrec->type) {
- case FS_OPEN_FONT:
- blockrec->errcode = fs_do_open_font(fpe, blockrec);
- break;
- case FS_LOAD_GLYPHS:
- blockrec->errcode = fs_read_glyphs(fpe, blockrec);
- break;
- case FS_LIST_FONTS:
- blockrec->errcode = fs_read_list(fpe, blockrec);
- break;
- case FS_LIST_WITH_INFO:
- blockrec->errcode = fs_read_list_info(fpe, blockrec);
- break;
- default:
- break;
- }
- err = blockrec->errcode;
- if (err != StillWorking)
- {
- while (blockrec)
- {
- blockrec->errcode = err;
- if (client != blockrec->client)
- ClientSignal(blockrec->client);
- blockrec = blockrec->depending;
- }
- _fs_unmark_block (conn, FS_PENDING_REPLY);
- }
- }
- if (fs_reply_ready (conn))
- _fs_mark_block (conn, FS_COMPLETE_REPLY);
- else
- _fs_unmark_block (conn, FS_COMPLETE_REPLY);
- }
-}
-
-static int
-fs_wakeup(FontPathElementPtr fpe, unsigned long *mask)
-{
- fd_set *LastSelectMask = (fd_set *) mask;
- FSFpePtr conn = (FSFpePtr) fpe->private;
-
- /*
- * Don't continue if the fd is -1 (which will be true when the
- * font server terminates
- */
- if ((conn->blockState & FS_RECONNECTING))
- _fs_check_reconnect (conn);
- else if ((conn->blockState & FS_COMPLETE_REPLY) ||
- (conn->fs_fd != -1 && FD_ISSET(conn->fs_fd, LastSelectMask)))
- fs_read_reply (fpe, 0);
- if (conn->blockState & (FS_PENDING_REPLY|FS_BROKEN_CONNECTION|FS_BROKEN_WRITE))
- _fs_do_blocked (conn);
-#ifdef DEBUG
- {
- FSBlockDataPtr blockrec;
- FSBlockedFontPtr bfont;
- FSBlockedListPtr blist;
- static CARD32 lastState;
- static FSBlockDataPtr lastBlock;
-
- if (conn->blockState || conn->blockedRequests || lastState || lastBlock)
- {
- fprintf (stderr, " Block State 0x%x\n", (int) conn->blockState);
- lastState = conn->blockState;
- lastBlock = conn->blockedRequests;
- }
- for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
- {
- switch (blockrec->type) {
- case FS_OPEN_FONT:
- bfont = (FSBlockedFontPtr) blockrec->data;
- fprintf (stderr, " Blocked font errcode %d sequence %d state %s %s\n",
- blockrec->errcode,
- blockrec->sequenceNumber,
- fs_open_states[bfont->state],
- bfont->pfont ?
- ((FSFontDataPtr) (bfont->pfont->fpePrivate))->name :
- "<freed>");
- break;
- case FS_LIST_FONTS:
- blist = (FSBlockedListPtr) blockrec->data;
- fprintf (stderr, " Blocked list errcode %d sequence %d\n",
- blockrec->errcode, blockrec->sequenceNumber);
- break;
- default:
- fprintf (stderr, " Blocked type %d errcode %d sequence %d\n",
- blockrec->type,
- blockrec->errcode,
- blockrec->sequenceNumber);
- break;
- }
- }
- }
-#endif
- return FALSE;
-}
-
-/*
- * Notice a dead connection and prepare for reconnect
- */
-
-void
-_fs_connection_died(FSFpePtr conn)
-{
- if (conn->blockState & FS_BROKEN_CONNECTION)
- return;
- fs_close_conn(conn);
- conn->brokenConnectionTime = GetTimeInMillis ();
- _fs_mark_block (conn, FS_BROKEN_CONNECTION);
- _fs_unmark_block (conn, FS_BROKEN_WRITE|FS_PENDING_WRITE|FS_RECONNECTING);
-}
-
-/*
- * Signal clients that the connection has come back up
- */
-static int
-_fs_restart_connection(FSFpePtr conn)
-{
- FSBlockDataPtr block;
-
- _fs_unmark_block (conn, FS_GIVE_UP);
- while ((block = (FSBlockDataPtr) conn->blockedRequests))
- {
- if (block->errcode == StillWorking)
- {
- ClientSignal(block->client);
- fs_abort_blockrec(conn, block);
- }
- }
- return TRUE;
-}
-
-/*
- * Declare this font server connection useless
- */
-static void
-_fs_giveup (FSFpePtr conn)
-{
- FSBlockDataPtr block;
-
- if (conn->blockState & FS_GIVE_UP)
- return;
-#ifdef DEBUG
- fprintf (stderr, "give up on FS \"%s\"\n", conn->servername);
-#endif
- _fs_mark_block (conn, FS_GIVE_UP);
- while ((block = (FSBlockDataPtr) conn->blockedRequests))
- {
- if (block->errcode == StillWorking)
- {
- ClientSignal (block->client);
- fs_abort_blockrec (conn, block);
- }
- }
- if (conn->fs_fd >= 0)
- _fs_connection_died (conn);
-}
-
-static void
-_fs_do_blocked (FSFpePtr conn)
-{
- CARD32 now;
-
- now = GetTimeInMillis ();
- if ((conn->blockState & FS_PENDING_REPLY) &&
- TimeCmp (conn->blockedReplyTime, <=, now))
- {
- _fs_giveup (conn);
- }
- else
- {
- if (conn->blockState & FS_BROKEN_CONNECTION)
- {
- /* Try to reconnect broken connections */
- if (TimeCmp (conn->brokenConnectionTime, <=, now))
- _fs_start_reconnect (conn);
- }
- else if (conn->blockState & FS_BROKEN_WRITE)
- {
- /* Try to flush blocked connections */
- if (TimeCmp (conn->brokenWriteTime, <=, now))
- _fs_flush (conn);
- }
- }
-}
-
-/*
- * sends the actual request out
- */
-/* ARGSUSED */
-static int
-fs_send_open_font(pointer client, FontPathElementPtr fpe, Mask flags,
- char *name, int namelen,
- fsBitmapFormat format, fsBitmapFormatMask fmask,
- XID id, FontPtr *ppfont)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FontPtr font;
- FSBlockDataPtr blockrec = NULL;
- FSBlockedFontPtr bfont;
- FSFontDataPtr fsd;
- fsOpenBitmapFontReq openreq;
- fsQueryXInfoReq inforeq;
- fsQueryXExtents16Req extreq;
- int err;
- unsigned char buf[1024];
-
- if (conn->blockState & FS_GIVE_UP)
- return BadFontName;
-
- if (namelen <= 0 || namelen > sizeof (buf) - 1)
- return BadFontName;
-
- /*
- * Get the font structure put together, either by reusing
- * the existing one or creating a new one
- */
- if (flags & FontReopen)
- {
- Atom nameatom, fn = None;
- int i;
-
- font = *ppfont;
- fsd = (FSFontDataPtr)font->fpePrivate;
- /* This is an attempt to reopen a font. Did the font have a
- NAME property? */
- if ((nameatom = MakeAtom("FONT", 4, 0)) != None)
- {
- for (i = 0; i < font->info.nprops; i++)
- if (font->info.props[i].name == nameatom &&
- font->info.isStringProp[i])
- {
- fn = font->info.props[i].value;
- break;
- }
- }
- if (fn == None || !(name = NameForAtom(fn)))
- {
- name = fsd->name;
- namelen = fsd->namelen;
- }
- else
- namelen = strlen(name);
- }
- else
- {
- font = fs_create_font (fpe, name, namelen, format, fmask);
- if (!font)
- return AllocError;
-
- fsd = (FSFontDataPtr)font->fpePrivate;
- }
-
- /* make a new block record, and add it to the end of the list */
- blockrec = fs_new_block_rec(font->fpe, client, FS_OPEN_FONT);
- if (!blockrec)
- {
- if (!(flags & FontReopen))
- (*font->unload_font) (font);
- return AllocError;
- }
-
- /*
- * Must check this before generating any protocol, otherwise we'll
- * mess up a reconnect in progress
- */
- if (conn->blockState & (FS_BROKEN_CONNECTION | FS_RECONNECTING))
- {
- _fs_pending_reply (conn);
- return Suspended;
- }
-
- fsd->generation = conn->generation;
-
- bfont = (FSBlockedFontPtr) blockrec->data;
- bfont->fontid = fsd->fontid;
- bfont->pfont = font;
- bfont->state = FS_OPEN_REPLY;
- bfont->flags = flags;
- bfont->format = fsd->format;
- bfont->clients_depending = (FSClientsDependingPtr)0;
- bfont->freeFont = (flags & FontReopen) == 0;
-
- _fs_client_access (conn, client, (flags & FontOpenSync) != 0);
- _fs_client_resolution(conn);
-
- /* do an FS_OpenFont, FS_QueryXInfo and FS_QueryXExtents */
- buf[0] = (unsigned char) namelen;
- memcpy(&buf[1], name, namelen);
- openreq.reqType = FS_OpenBitmapFont;
- openreq.fid = fsd->fontid;
- openreq.format_hint = fsd->format;
- openreq.format_mask = fsd->fmask;
- openreq.length = (SIZEOF(fsOpenBitmapFontReq) + namelen + 4) >> 2;
-
- _fs_add_req_log(conn, FS_OpenBitmapFont);
- _fs_write(conn, (char *) &openreq, SIZEOF(fsOpenBitmapFontReq));
- _fs_write_pad(conn, (char *) buf, namelen + 1);
-
- blockrec->sequenceNumber = conn->current_seq;
-
- inforeq.reqType = FS_QueryXInfo;
- inforeq.id = fsd->fontid;
- inforeq.length = SIZEOF(fsQueryXInfoReq) >> 2;
-
- bfont->queryInfoSequence = conn->current_seq + 1;
-
- _fs_add_req_log(conn, FS_QueryXInfo);
- _fs_write(conn, (char *) &inforeq, SIZEOF(fsQueryXInfoReq));
-
- if (!(bfont->flags & FontReopen))
- {
- extreq.reqType = FS_QueryXExtents16;
- extreq.range = fsTrue;
- extreq.fid = fsd->fontid;
- extreq.num_ranges = 0;
- extreq.length = SIZEOF(fsQueryXExtents16Req) >> 2;
-
- bfont->queryExtentsSequence = conn->current_seq + 1;
-
- _fs_add_req_log(conn, FS_QueryXExtents16);
- _fs_write(conn, (char *) &extreq, SIZEOF(fsQueryXExtents16Req));
- }
-
-#ifdef NCD
- if (configData.ExtendedFontDiags)
- {
- memcpy(buf, name, MIN(256, namelen));
- buf[MIN(256, namelen)] = '\0';
- printf("Requesting font \"%s\" from font server \"%s\"\n",
- buf, font->fpe->name);
- }
-#endif
- _fs_prepare_for_reply (conn);
-
- err = blockrec->errcode;
- if (bfont->flags & FontOpenSync)
- {
- while (blockrec->errcode == StillWorking)
- {
- if (fs_await_reply (conn) != FSIO_READY)
- {
- blockrec->errcode = BadFontName;
- break;
- }
- fs_read_reply (font->fpe, client);
- }
- err = blockrec->errcode;
- if (err == Successful)
- *ppfont = bfont->pfont;
- else
- fs_cleanup_bfont (bfont);
- bfont->freeFont = FALSE;
- _fs_remove_block_rec (conn, blockrec);
- }
- return err == StillWorking ? Suspended : err;
-}
-
-static void
-fs_send_query_bitmaps(FontPathElementPtr fpe, FSBlockDataPtr blockrec)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FSBlockedFontPtr bfont = (FSBlockedFontPtr) blockrec->data;
- fsQueryXBitmaps16Req bitreq;
-
- /* send the request */
- bitreq.reqType = FS_QueryXBitmaps16;
- bitreq.fid = bfont->fontid;
- bitreq.format = bfont->format;
- bitreq.range = TRUE;
- bitreq.length = SIZEOF(fsQueryXBitmaps16Req) >> 2;
- bitreq.num_ranges = 0;
-
- bfont->queryBitmapsSequence = conn->current_seq + 1;
-
- _fs_add_req_log(conn, FS_QueryXBitmaps16);
- _fs_write(conn, (char *) &bitreq, SIZEOF(fsQueryXBitmaps16Req));
-}
-
-/* ARGSUSED */
-static int
-fs_open_font(pointer client, FontPathElementPtr fpe, Mask flags,
- char *name, int namelen,
- fsBitmapFormat format, fsBitmapFormatMask fmask,
- XID id, FontPtr *ppfont,
- char **alias, FontPtr non_cachable_font)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FSBlockDataPtr blockrec;
- FSBlockedFontPtr bfont;
- int err;
-
- /* libfont interface expects ImageRectMin glyphs */
- format = (format & ~BitmapFormatImageRectMask) | BitmapFormatImageRectMin;
-
- *alias = (char *) 0;
- for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
- {
- if (blockrec->type == FS_OPEN_FONT && blockrec->client == client)
- {
- err = blockrec->errcode;
- if (err == StillWorking)
- return Suspended;
-
- bfont = (FSBlockedFontPtr) blockrec->data;
- if (err == Successful)
- *ppfont = bfont->pfont;
- else
- fs_cleanup_bfont (bfont);
- _fs_remove_block_rec (conn, blockrec);
- return err;
- }
- }
- return fs_send_open_font(client, fpe, flags, name, namelen, format, fmask,
- id, ppfont);
-}
-
-/* ARGSUSED */
-static int
-fs_send_close_font(FontPathElementPtr fpe, Font id)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- fsCloseReq req;
-
- if (conn->blockState & FS_GIVE_UP)
- return Successful;
- /* tell the font server to close the font */
- req.reqType = FS_CloseFont;
- req.length = SIZEOF(fsCloseReq) >> 2;
- req.id = id;
- _fs_add_req_log(conn, FS_CloseFont);
- _fs_write(conn, (char *) &req, SIZEOF(fsCloseReq));
-
- return Successful;
-}
-
-/* ARGSUSED */
-static void
-fs_close_font(FontPathElementPtr fpe, FontPtr pfont)
-{
- FSFontDataPtr fsd = (FSFontDataPtr) pfont->fpePrivate;
- FSFpePtr conn = (FSFpePtr) fpe->private;
-
- if (conn->generation == fsd->generation)
- fs_send_close_font(fpe, fsd->fontid);
-
-#ifdef DEBUG
- {
- FSBlockDataPtr blockrec;
- FSBlockedFontPtr bfont;
-
- for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
- {
- if (blockrec->type == FS_OPEN_FONT)
- {
- bfont = (FSBlockedFontPtr) blockrec->data;
- if (bfont->pfont == pfont)
- fprintf (stderr, "closing font which hasn't been opened\n");
- }
- }
- }
-#endif
- (*pfont->unload_font) (pfont);
-}
-
-static int
-fs_read_glyphs(FontPathElementPtr fpe, FSBlockDataPtr blockrec)
-{
- FSBlockedGlyphPtr bglyph = (FSBlockedGlyphPtr) blockrec->data;
- FSBlockedFontPtr bfont = (FSBlockedFontPtr) blockrec->data;
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FontPtr pfont = bglyph->pfont;
- /* works for either blocked font
- or glyph rec... pfont is at
- the very beginning of both
- blockrec->data structures */
- FSFontDataPtr fsd = (FSFontDataPtr) (pfont->fpePrivate);
- FSFontPtr fsdata = (FSFontPtr) pfont->fontPrivate;
- FontInfoPtr pfi = &pfont->info;
- fsQueryXBitmaps16Reply *rep;
- char *buf;
- long bufleft = 0; /* length of reply left to use */
- fsOffset32 *ppbits;
- fsOffset32 local_off;
- char *off_adr;
- pointer pbitmaps;
- char *bits, *allbits;
-#ifdef DEBUG
- char *origallbits;
-#endif
- int i,
- err;
- int nranges = 0;
- int ret;
- fsRange *nextrange = 0;
- unsigned long minchar, maxchar;
-
- rep = (fsQueryXBitmaps16Reply *) fs_get_reply (conn, &ret);
- if (!rep || rep->type == FS_Error ||
- (rep->length < LENGTHOF(fsQueryXBitmaps16Reply)))
- {
- if (ret == FSIO_BLOCK)
- return StillWorking;
- if (rep)
- _fs_done_read (conn, rep->length << 2);
- err = AllocError;
- _fs_reply_failed (rep, fsQueryXBitmaps16Reply, "<");
- goto bail;
- }
-
- buf = (char *) rep;
- buf += SIZEOF (fsQueryXBitmaps16Reply);
-
- bufleft = rep->length << 2;
- bufleft -= SIZEOF (fsQueryXBitmaps16Reply);
-
- if ((bufleft / SIZEOF (fsOffset32)) < rep->num_chars)
- {
-#ifdef DEBUG
- fprintf(stderr,
- "fsQueryXBitmaps16: num_chars (%d) > bufleft (%ld) / %d\n",
- rep->num_chars, bufleft, SIZEOF (fsOffset32));
-#endif
- err = AllocError;
- goto bail;
- }
- ppbits = (fsOffset32 *) buf;
- buf += SIZEOF (fsOffset32) * (rep->num_chars);
- bufleft -= SIZEOF (fsOffset32) * (rep->num_chars);
-
- if (bufleft < rep->nbytes)
- {
-#ifdef DEBUG
- fprintf(stderr,
- "fsQueryXBitmaps16: nbytes (%d) > bufleft (%ld)\n",
- rep->nbytes, bufleft);
-#endif
- err = AllocError;
- goto bail;
- }
- pbitmaps = (pointer ) buf;
-
- if (blockrec->type == FS_LOAD_GLYPHS)
- {
- nranges = bglyph->num_expected_ranges;
- nextrange = bglyph->expected_ranges;
- }
-
- /* place the incoming glyphs */
- if (nranges)
- {
- /* We're operating under the assumption that the ranges
- requested in the LoadGlyphs call were all legal for this
- font, and that individual ranges do not cover multiple
- rows... fs_build_range() is designed to ensure this. */
- minchar = (nextrange->min_char_high - pfi->firstRow) *
- (pfi->lastCol - pfi->firstCol + 1) +
- nextrange->min_char_low - pfi->firstCol;
- maxchar = (nextrange->max_char_high - pfi->firstRow) *
- (pfi->lastCol - pfi->firstCol + 1) +
- nextrange->max_char_low - pfi->firstCol;
- nextrange++;
- }
- else
- {
- minchar = 0;
- maxchar = rep->num_chars;
- }
-
- off_adr = (char *)ppbits;
-
- allbits = fs_alloc_glyphs (pfont, rep->nbytes);
-
- if (!allbits)
- {
- err = AllocError;
- goto bail;
- }
-
-#ifdef DEBUG
- origallbits = allbits;
- fprintf (stderr, "Reading %d glyphs in %d bytes for %s\n",
- (int) rep->num_chars, (int) rep->nbytes, fsd->name);
-#endif
-
- for (i = 0; i < rep->num_chars; i++)
- {
- memcpy(&local_off, off_adr, SIZEOF(fsOffset32)); /* align it */
- if (blockrec->type == FS_OPEN_FONT ||
- fsdata->encoding[minchar].bits == &_fs_glyph_requested)
- {
- /*
- * Broken X font server returns bits for missing characters
- * when font is padded
- */
- if (NONZEROMETRICS(&fsdata->encoding[minchar].metrics))
- {
- if (local_off.length &&
- (local_off.position < rep->nbytes) &&
- (local_off.length <= (rep->nbytes - local_off.position)))
- {
- bits = allbits;
- allbits += local_off.length;
- memcpy(bits, (char *)pbitmaps + local_off.position,
- local_off.length);
- }
- else
- bits = &_fs_glyph_zero_length;
- }
- else
- bits = 0;
- if (fsdata->encoding[minchar].bits == &_fs_glyph_requested)
- fsd->glyphs_to_get--;
- fsdata->encoding[minchar].bits = bits;
- }
- if (minchar++ == maxchar)
- {
- if (!--nranges) break;
- minchar = (nextrange->min_char_high - pfi->firstRow) *
- (pfi->lastCol - pfi->firstCol + 1) +
- nextrange->min_char_low - pfi->firstCol;
- maxchar = (nextrange->max_char_high - pfi->firstRow) *
- (pfi->lastCol - pfi->firstCol + 1) +
- nextrange->max_char_low - pfi->firstCol;
- nextrange++;
- }
- off_adr += SIZEOF(fsOffset32);
- }
-#ifdef DEBUG
- fprintf (stderr, "Used %d bytes instead of %d\n",
- (int) (allbits - origallbits), (int) rep->nbytes);
-#endif
-
- if (blockrec->type == FS_OPEN_FONT)
- {
- fsd->glyphs_to_get = 0;
- bfont->state = FS_DONE_REPLY;
- }
- err = Successful;
-
-bail:
- _fs_done_read (conn, rep->length << 2);
- return err;
-}
-
-static int
-fs_send_load_glyphs(pointer client, FontPtr pfont,
- int nranges, fsRange *ranges)
-{
- FontPathElementPtr fpe = pfont->fpe;
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FSBlockedGlyphPtr blockedglyph;
- fsQueryXBitmaps16Req req;
- FSBlockDataPtr blockrec;
-
- if (conn->blockState & FS_GIVE_UP)
- return BadCharRange;
-
- /* make a new block record, and add it to the end of the list */
- blockrec = fs_new_block_rec(fpe, client, FS_LOAD_GLYPHS);
- if (!blockrec)
- return AllocError;
- blockedglyph = (FSBlockedGlyphPtr) blockrec->data;
- blockedglyph->pfont = pfont;
- blockedglyph->num_expected_ranges = nranges;
- /* Assumption: it's our job to free ranges */
- blockedglyph->expected_ranges = ranges;
- blockedglyph->clients_depending = (FSClientsDependingPtr)0;
-
- if (conn->blockState & (FS_BROKEN_CONNECTION|FS_RECONNECTING))
- {
- _fs_pending_reply (conn);
- return Suspended;
- }
-
- /* send the request */
- req.reqType = FS_QueryXBitmaps16;
- req.fid = ((FSFontDataPtr) pfont->fpePrivate)->fontid;
- req.format = pfont->format;
- if (pfont->info.terminalFont)
- req.format = (req.format & ~(BitmapFormatImageRectMask)) |
- BitmapFormatImageRectMax;
- req.range = TRUE;
- /* each range takes up 4 bytes */
- req.length = (SIZEOF(fsQueryXBitmaps16Req) >> 2) + nranges;
- req.num_ranges = nranges * 2; /* protocol wants count of fsChar2bs */
- _fs_add_req_log(conn, FS_QueryXBitmaps16);
- _fs_write(conn, (char *) &req, SIZEOF(fsQueryXBitmaps16Req));
-
- blockrec->sequenceNumber = conn->current_seq;
-
- /* Send ranges to the server... pack into a char array by hand
- to avoid structure-packing portability problems and to
- handle swapping for version1 protocol */
- if (nranges)
- {
-#define RANGE_BUFFER_SIZE 64
-#define RANGE_BUFFER_SIZE_MASK 63
- int i;
- char range_buffer[RANGE_BUFFER_SIZE * 4];
- char *range_buffer_p;
-
- range_buffer_p = range_buffer;
- for (i = 0; i < nranges;)
- {
- if (conn->fsMajorVersion > 1)
- {
- *range_buffer_p++ = ranges[i].min_char_high;
- *range_buffer_p++ = ranges[i].min_char_low;
- *range_buffer_p++ = ranges[i].max_char_high;
- *range_buffer_p++ = ranges[i].max_char_low;
- }
- else
- {
- *range_buffer_p++ = ranges[i].min_char_low;
- *range_buffer_p++ = ranges[i].min_char_high;
- *range_buffer_p++ = ranges[i].max_char_low;
- *range_buffer_p++ = ranges[i].max_char_high;
- }
-
- if (!(++i & RANGE_BUFFER_SIZE_MASK))
- {
- _fs_write(conn, range_buffer, RANGE_BUFFER_SIZE * 4);
- range_buffer_p = range_buffer;
- }
- }
- if (i &= RANGE_BUFFER_SIZE_MASK)
- _fs_write(conn, range_buffer, i * 4);
- }
-
- _fs_prepare_for_reply (conn);
- return Suspended;
-}
-
-
-extern pointer serverClient; /* This could be any number that
- doesn't conflict with existing
- client values. */
-
-int
-fs_load_all_glyphs(FontPtr pfont)
-{
- int err;
- FSFpePtr conn = (FSFpePtr) pfont->fpe->private;
-
- /*
- * The purpose of this procedure is to load all glyphs in the event
- * that we're dealing with someone who doesn't understand the finer
- * points of glyph caching... it is called from _fs_get_glyphs() if
- * the latter is called to get glyphs that have not yet been loaded.
- * We assume that the caller will not know how to handle a return
- * value of Suspended (usually the case for a GetGlyphs() caller),
- * so this procedure hangs around, freezing the server, for the
- * request to complete. This is an unpleasant kluge called to
- * perform an unpleasant job that, we hope, will never be required.
- */
-
- while ((err = _fs_load_glyphs(serverClient, pfont, TRUE, 0, 0, NULL)) ==
- Suspended)
- {
- if (fs_await_reply (conn) != FSIO_READY)
- {
- /* Get rid of blockrec */
- fs_client_died(serverClient, pfont->fpe);
- err = BadCharRange;
- break;
- }
- fs_read_reply (pfont->fpe, serverClient);
- }
- return err;
-}
-
-
-int
-_fs_load_glyphs(pointer client, FontPtr pfont, Bool range_flag,
- unsigned int nchars, int item_size, unsigned char *data)
-{
- FSFpePtr conn = (FSFpePtr) pfont->fpe->private;
- int nranges = 0;
- fsRange *ranges = NULL;
- int res;
- FSBlockDataPtr blockrec;
- FSBlockedGlyphPtr blockedglyph;
- FSClientsDependingPtr *clients_depending = NULL;
- int err;
-
- /* see if the result is already there */
- for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
- {
- if (blockrec->type == FS_LOAD_GLYPHS)
- {
- blockedglyph = (FSBlockedGlyphPtr) blockrec->data;
- if (blockedglyph->pfont == pfont)
- {
- /* Look for this request */
- if (blockrec->client == client)
- {
- err = blockrec->errcode;
- if (err == StillWorking)
- return Suspended;
- _fs_signal_clients_depending(&blockedglyph->clients_depending);
- _fs_remove_block_rec(conn, blockrec);
- return err;
- }
- /* We've found an existing LoadGlyphs blockrec for this
- font but for another client. Rather than build a
- blockrec for it now (which entails some complex
- maintenance), we'll add it to a queue of clients to
- be signalled when the existing LoadGlyphs is
- completed. */
- clients_depending = &blockedglyph->clients_depending;
- break;
- }
- }
- else if (blockrec->type == FS_OPEN_FONT)
- {
- FSBlockedFontPtr bfont;
- bfont = (FSBlockedFontPtr) blockrec->data;
- if (bfont->pfont == pfont)
- {
- /*
- * An OpenFont is pending for this font, this must
- * be from a reopen attempt, so finish the open
- * attempt and retry the LoadGlyphs
- */
- if (blockrec->client == client)
- {
- err = blockrec->errcode;
- if (err == StillWorking)
- return Suspended;
-
- _fs_signal_clients_depending(&bfont->clients_depending);
- _fs_remove_block_rec(conn, blockrec);
- if (err != Successful)
- return err;
- break;
- }
- /* We've found an existing OpenFont blockrec for this
- font but for another client. Rather than build a
- blockrec for it now (which entails some complex
- maintenance), we'll add it to a queue of clients to
- be signalled when the existing OpenFont is
- completed. */
- if (blockrec->errcode == StillWorking)
- {
- clients_depending = &bfont->clients_depending;
- break;
- }
- }
- }
- }
-
- /*
- * see if the desired glyphs already exist, and return Successful if they
- * do, otherwise build up character range/character string
- */
- res = fs_build_range(pfont, range_flag, nchars, item_size, data,
- &nranges, &ranges);
-
- switch (res)
- {
- case AccessDone:
- return Successful;
-
- case Successful:
- break;
-
- default:
- return res;
- }
-
- /*
- * If clients_depending is not null, this request must wait for
- * some prior request(s) to complete.
- */
- if (clients_depending)
- {
- /* Since we're not ready to send the load_glyphs request yet,
- clean up the damage (if any) caused by the fs_build_range()
- call. */
- if (nranges)
- {
- _fs_clean_aborted_loadglyphs(pfont, nranges, ranges);
- xfree(ranges);
- }
- return _fs_add_clients_depending(clients_depending, client);
- }
-
- /*
- * If fsd->generation != conn->generation, the font has been closed
- * due to a lost connection. We will reopen it, which will result
- * in one of three things happening:
- * 1) The open will succeed and obtain the same font. Life
- * is wonderful.
- * 2) The open will fail. There is code above to recognize this
- * and flunk the LoadGlyphs request. The client might not be
- * thrilled.
- * 3) Worst case: the open will succeed but the font we open will
- * be different. The fs_read_query_info() procedure attempts
- * to detect this by comparing the existing metrics and
- * properties against those of the reopened font... if they
- * don't match, we flunk the reopen, which eventually results
- * in flunking the LoadGlyphs request. We could go a step
- * further and compare the extents, but this should be
- * sufficient.
- */
- if (((FSFontDataPtr)pfont->fpePrivate)->generation != conn->generation)
- {
- /* Since we're not ready to send the load_glyphs request yet,
- clean up the damage caused by the fs_build_range() call. */
- _fs_clean_aborted_loadglyphs(pfont, nranges, ranges);
- xfree(ranges);
-
- /* Now try to reopen the font. */
- return fs_send_open_font(client, pfont->fpe,
- (Mask)FontReopen, (char *)0, 0,
- (fsBitmapFormat)0, (fsBitmapFormatMask)0,
- (XID)0, &pfont);
- }
-
- return fs_send_load_glyphs(client, pfont, nranges, ranges);
-}
-
-static int
-fs_read_list(FontPathElementPtr fpe, FSBlockDataPtr blockrec)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FSBlockedListPtr blist = (FSBlockedListPtr) blockrec->data;
- fsListFontsReply *rep;
- char *data;
- long dataleft; /* length of reply left to use */
- int length,
- i,
- ret;
- int err;
-
- rep = (fsListFontsReply *) fs_get_reply (conn, &ret);
- if (!rep || rep->type == FS_Error ||
- (rep->length < LENGTHOF(fsListFontsReply)))
- {
- if (ret == FSIO_BLOCK)
- return StillWorking;
- if (rep)
- _fs_done_read (conn, rep->length << 2);
- _fs_reply_failed (rep, fsListFontsReply, "<");
- return AllocError;
- }
- data = (char *) rep + SIZEOF (fsListFontsReply);
- dataleft = (rep->length << 2) - SIZEOF (fsListFontsReply);
-
- err = Successful;
- /* copy data into FontPathRecord */
- for (i = 0; i < rep->nFonts; i++)
- {
- if (dataleft < 1)
- break;
- length = *(unsigned char *)data++;
- dataleft--; /* used length byte */
- if (length > dataleft) {
-#ifdef DEBUG
- fprintf(stderr,
- "fsListFonts: name length (%d) > dataleft (%ld)\n",
- length, dataleft);
-#endif
- err = BadFontName;
- break;
- }
- err = AddFontNamesName(blist->names, data, length);
- if (err != Successful)
- break;
- data += length;
- dataleft -= length;
- }
- _fs_done_read (conn, rep->length << 2);
- return err;
-}
-
-static int
-fs_send_list_fonts(pointer client, FontPathElementPtr fpe, char *pattern,
- int patlen, int maxnames, FontNamesPtr newnames)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FSBlockDataPtr blockrec;
- FSBlockedListPtr blockedlist;
- fsListFontsReq req;
-
- if (conn->blockState & FS_GIVE_UP)
- return BadFontName;
-
- /* make a new block record, and add it to the end of the list */
- blockrec = fs_new_block_rec(fpe, client, FS_LIST_FONTS);
- if (!blockrec)
- return AllocError;
- blockedlist = (FSBlockedListPtr) blockrec->data;
- blockedlist->names = newnames;
-
- if (conn->blockState & (FS_BROKEN_CONNECTION | FS_RECONNECTING))
- {
- _fs_pending_reply (conn);
- return Suspended;
- }
-
- _fs_client_access (conn, client, FALSE);
- _fs_client_resolution(conn);
-
- /* send the request */
- req.reqType = FS_ListFonts;
- req.maxNames = maxnames;
- req.nbytes = patlen;
- req.length = (SIZEOF(fsListFontsReq) + patlen + 3) >> 2;
- _fs_add_req_log(conn, FS_ListFonts);
- _fs_write(conn, (char *) &req, SIZEOF(fsListFontsReq));
- _fs_write_pad(conn, (char *) pattern, patlen);
-
- blockrec->sequenceNumber = conn->current_seq;
-
-#ifdef NCD
- if (configData.ExtendedFontDiags) {
- char buf[256];
-
- memcpy(buf, pattern, MIN(256, patlen));
- buf[MIN(256, patlen)] = '\0';
- printf("Listing fonts on pattern \"%s\" from font server \"%s\"\n",
- buf, fpe->name);
- }
-#endif
-
- _fs_prepare_for_reply (conn);
- return Suspended;
-}
-
-static int
-fs_list_fonts(pointer client, FontPathElementPtr fpe,
- char *pattern, int patlen, int maxnames, FontNamesPtr newnames)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FSBlockDataPtr blockrec;
- int err;
-
- /* see if the result is already there */
- for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
- {
- if (blockrec->type == FS_LIST_FONTS && blockrec->client == client)
- {
- err = blockrec->errcode;
- if (err == StillWorking)
- return Suspended;
- _fs_remove_block_rec(conn, blockrec);
- return err;
- }
- }
-
- /* didn't find waiting record, so send a new one */
- return fs_send_list_fonts(client, fpe, pattern, patlen, maxnames, newnames);
-}
-
-/*
- * Read a single list info reply and restart for the next reply
- */
-static int
-fs_read_list_info(FontPathElementPtr fpe, FSBlockDataPtr blockrec)
-{
- FSBlockedListInfoPtr binfo = (FSBlockedListInfoPtr) blockrec->data;
- fsListFontsWithXInfoReply *rep;
- char *buf;
- long bufleft = 0;
- FSFpePtr conn = (FSFpePtr) fpe->private;
- fsPropInfo *pi;
- fsPropOffset *po;
- pointer pd;
- int ret;
- int err;
-
- /* clean up anything from the last trip */
- _fs_free_props (&binfo->info);
-
- rep = (fsListFontsWithXInfoReply *) fs_get_reply (conn, &ret);
- if (!rep || rep->type == FS_Error ||
- ((rep->nameLength != 0) &&
- (rep->length < LENGTHOF(fsListFontsWithXInfoReply))))
- {
- if (ret == FSIO_BLOCK)
- return StillWorking;
- binfo->status = FS_LFWI_FINISHED;
- err = AllocError;
- _fs_reply_failed (rep, fsListFontsWithXInfoReply, "<");
- goto done;
- }
- /*
- * Normal termination -- the list ends with a name of length 0
- */
- if (rep->nameLength == 0)
- {
-#ifdef DEBUG
- fprintf (stderr, "fs_read_list_info done\n");
-#endif
- binfo->status = FS_LFWI_FINISHED;
- err = BadFontName;
- goto done;
- }
-
- buf = (char *) rep + SIZEOF (fsListFontsWithXInfoReply);
- bufleft = (rep->length << 2) - SIZEOF (fsListFontsWithXInfoReply);
-
- /*
- * The original FS implementation didn't match
- * the spec, version 1 was respecified to match the FS.
- * Version 2 matches the original intent
- */
- if (conn->fsMajorVersion <= 1)
- {
- if (rep->nameLength > bufleft) {
-#ifdef DEBUG
- fprintf(stderr,
- "fsListFontsWithXInfo: name length (%d) > bufleft (%ld)\n",
- (int) rep->nameLength, bufleft);
-#endif
- err = AllocError;
- goto done;
- }
- /* binfo->name is a 256 char array, rep->nameLength is a CARD8 */
- memcpy (binfo->name, buf, rep->nameLength);
- buf += _fs_pad_length (rep->nameLength);
- bufleft -= _fs_pad_length (rep->nameLength);
- }
- pi = (fsPropInfo *) buf;
- if (SIZEOF (fsPropInfo) > bufleft) {
-#ifdef DEBUG
- fprintf(stderr,
- "fsListFontsWithXInfo: PropInfo length (%d) > bufleft (%ld)\n",
- (int) SIZEOF (fsPropInfo), bufleft);
-#endif
- err = AllocError;
- goto done;
- }
- bufleft -= SIZEOF (fsPropInfo);
- buf += SIZEOF (fsPropInfo);
- po = (fsPropOffset *) buf;
- if (pi->num_offsets > (bufleft / SIZEOF (fsPropOffset))) {
-#ifdef DEBUG
- fprintf(stderr,
- "fsListFontsWithXInfo: offset length (%d * %d) > bufleft (%ld)\n",
- pi->num_offsets, (int) SIZEOF (fsPropOffset), bufleft);
-#endif
- err = AllocError;
- goto done;
- }
- bufleft -= pi->num_offsets * SIZEOF (fsPropOffset);
- buf += pi->num_offsets * SIZEOF (fsPropOffset);
- pd = (pointer) buf;
- if (pi->data_len > bufleft) {
-#ifdef DEBUG
- fprintf(stderr,
- "fsListFontsWithXInfo: data length (%d) > bufleft (%ld)\n",
- pi->data_len, bufleft);
-#endif
- err = AllocError;
- goto done;
- }
- bufleft -= pi->data_len;
- buf += pi->data_len;
- if (conn->fsMajorVersion > 1)
- {
- if (rep->nameLength > bufleft) {
-#ifdef DEBUG
- fprintf(stderr,
- "fsListFontsWithXInfo: name length (%d) > bufleft (%ld)\n",
- (int) rep->nameLength, bufleft);
-#endif
- err = AllocError;
- goto done;
- }
- /* binfo->name is a 256 char array, rep->nameLength is a CARD8 */
- memcpy (binfo->name, buf, rep->nameLength);
- buf += _fs_pad_length (rep->nameLength);
- bufleft -= _fs_pad_length (rep->nameLength);
- }
-
-#ifdef DEBUG
- binfo->name[rep->nameLength] = '\0';
- fprintf (stderr, "fs_read_list_info %s\n", binfo->name);
-#endif
- err = _fs_convert_lfwi_reply(conn, &binfo->info, rep, pi, po, pd);
- if (err != Successful)
- {
- binfo->status = FS_LFWI_FINISHED;
- goto done;
- }
- binfo->namelen = rep->nameLength;
- binfo->remaining = rep->nReplies;
-
- binfo->status = FS_LFWI_REPLY;
-
- /* disable this font server until we've processed this response */
- _fs_unmark_block (conn, FS_COMPLETE_REPLY);
- FD_CLR(conn->fs_fd, &_fs_fd_mask);
-done:
- _fs_done_read (conn, rep->length << 2);
- return err;
-}
-
-/* ARGSUSED */
-static int
-fs_start_list_with_info(pointer client, FontPathElementPtr fpe,
- char *pattern, int len, int maxnames, pointer *pdata)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FSBlockDataPtr blockrec;
- FSBlockedListInfoPtr binfo;
- fsListFontsWithXInfoReq req;
-
- if (conn->blockState & FS_GIVE_UP)
- return BadFontName;
-
- /* make a new block record, and add it to the end of the list */
- blockrec = fs_new_block_rec(fpe, client, FS_LIST_WITH_INFO);
- if (!blockrec)
- return AllocError;
-
- binfo = (FSBlockedListInfoPtr) blockrec->data;
- bzero((char *) binfo, sizeof(FSBlockedListInfoRec));
- binfo->status = FS_LFWI_WAITING;
-
- if (conn->blockState & (FS_BROKEN_CONNECTION | FS_RECONNECTING))
- {
- _fs_pending_reply (conn);
- return Suspended;
- }
-
- _fs_client_access (conn, client, FALSE);
- _fs_client_resolution(conn);
-
- /* send the request */
- req.reqType = FS_ListFontsWithXInfo;
- req.maxNames = maxnames;
- req.nbytes = len;
- req.length = (SIZEOF(fsListFontsWithXInfoReq) + len + 3) >> 2;
- _fs_add_req_log(conn, FS_ListFontsWithXInfo);
- (void) _fs_write(conn, (char *) &req, SIZEOF(fsListFontsWithXInfoReq));
- (void) _fs_write_pad(conn, pattern, len);
-
- blockrec->sequenceNumber = conn->current_seq;
-
-#ifdef NCD
- if (configData.ExtendedFontDiags) {
- char buf[256];
-
- memcpy(buf, pattern, MIN(256, len));
- buf[MIN(256, len)] = '\0';
- printf("Listing fonts with info on pattern \"%s\" from font server \"%s\"\n",
- buf, fpe->name);
- }
-#endif
-
- _fs_prepare_for_reply (conn);
- return Successful;
-}
-
-/* ARGSUSED */
-static int
-fs_next_list_with_info(pointer client, FontPathElementPtr fpe,
- char **namep, int *namelenp,
- FontInfoPtr *pFontInfo, int *numFonts,
- pointer private)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FSBlockDataPtr blockrec;
- FSBlockedListInfoPtr binfo;
- int err;
-
- /* see if the result is already there */
- for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
- if (blockrec->type == FS_LIST_WITH_INFO && blockrec->client == client)
- break;
-
- if (!blockrec)
- {
- /* The only good reason for not finding a blockrec would be if
- disconnect/reconnect to the font server wiped it out and the
- code that called us didn't do the right thing to create
- another one. Under those circumstances, we need to return an
- error to prevent that code from attempting to interpret the
- information we don't return. */
- return BadFontName;
- }
-
- binfo = (FSBlockedListInfoPtr) blockrec->data;
-
- if (binfo->status == FS_LFWI_WAITING)
- return Suspended;
-
- *namep = binfo->name;
- *namelenp = binfo->namelen;
- *pFontInfo = &binfo->info;
- *numFonts = binfo->remaining;
-
- /* Restart reply processing from this font server */
- FD_SET(conn->fs_fd, &_fs_fd_mask);
- if (fs_reply_ready (conn))
- _fs_mark_block (conn, FS_COMPLETE_REPLY);
-
- err = blockrec->errcode;
- switch (binfo->status) {
- case FS_LFWI_FINISHED:
- _fs_remove_block_rec(conn, blockrec);
- break;
- case FS_LFWI_REPLY:
- binfo->status = FS_LFWI_WAITING;
- blockrec->errcode = StillWorking;
- conn->blockedReplyTime = GetTimeInMillis () + FontServerRequestTimeout;
- _fs_mark_block (conn, FS_PENDING_REPLY);
- break;
- }
-
- return err;
-}
-
-/*
- * Called when client exits
- */
-
-static void
-fs_client_died(pointer client, FontPathElementPtr fpe)
-{
- FSFpePtr conn = (FSFpePtr) fpe->private;
- FSBlockDataPtr blockrec,
- depending;
- FSClientPtr *prev, cur;
- fsFreeACReq freeac;
-
- for (prev = &conn->clients; (cur = *prev); prev = &cur->next)
- {
- if (cur->client == client) {
- freeac.reqType = FS_FreeAC;
- freeac.id = cur->acid;
- freeac.length = sizeof (fsFreeACReq) >> 2;
- _fs_add_req_log(conn, FS_FreeAC);
- _fs_write (conn, (char *) &freeac, sizeof (fsFreeACReq));
- *prev = cur->next;
- xfree (cur);
- break;
- }
- }
- /* find a pending requests */
- for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
- if (blockrec->client == client)
- break;
-
- if (!blockrec)
- return;
-
- /* replace the client pointers in this block rec with the chained one */
- if ((depending = blockrec->depending))
- {
- blockrec->client = depending->client;
- blockrec->depending = depending->depending;
- blockrec = depending;
- }
- fs_abort_blockrec(conn, blockrec);
-}
-
-static void
-_fs_client_access (FSFpePtr conn, pointer client, Bool sync)
-{
- FSClientPtr *prev, cur;
- fsCreateACReq crac;
- fsSetAuthorizationReq setac;
- char *authorizations;
- int authlen;
- Bool new_cur = FALSE;
-
-#ifdef DEBUG
- if (conn->blockState & (FS_RECONNECTING|FS_BROKEN_CONNECTION))
- {
- fprintf (stderr, "Sending requests without a connection\n");
- }
-#endif
- for (prev = &conn->clients; (cur = *prev); prev = &cur->next)
- {
- if (cur->client == client)
- {
- if (prev != &conn->clients)
- {
- *prev = cur->next;
- cur->next = conn->clients;
- conn->clients = cur;
- }
- break;
- }
- }
- if (!cur)
- {
- cur = (FSClientPtr) xalloc (sizeof (FSClientRec));
- if (!cur)
- return;
- cur->client = client;
- cur->next = conn->clients;
- conn->clients = cur;
- cur->acid = GetNewFontClientID ();
- new_cur = TRUE;
- }
- if (new_cur || cur->auth_generation != client_auth_generation(client))
- {
- if (!new_cur)
- {
- fsFreeACReq freeac;
- freeac.reqType = FS_FreeAC;
- freeac.id = cur->acid;
- freeac.length = sizeof (fsFreeACReq) >> 2;
- _fs_add_req_log(conn, FS_FreeAC);
- _fs_write (conn, (char *) &freeac, sizeof (fsFreeACReq));
- }
- crac.reqType = FS_CreateAC;
- crac.num_auths = set_font_authorizations(&authorizations, &authlen,
- client);
- authlen = crac.num_auths ? (authlen + 3) & ~0x3 : 0;
- crac.length = (sizeof (fsCreateACReq) + authlen) >> 2;
- crac.acid = cur->acid;
- _fs_add_req_log(conn, FS_CreateAC);
- _fs_write(conn, (char *) &crac, sizeof (fsCreateACReq));
- _fs_write(conn, authorizations, authlen);
- /* ignore reply; we don't even care about it */
- conn->curacid = 0;
- cur->auth_generation = client_auth_generation(client);
- }
- if (conn->curacid != cur->acid)
- {
- setac.reqType = FS_SetAuthorization;
- setac.length = sizeof (fsSetAuthorizationReq) >> 2;
- setac.id = cur->acid;
- _fs_add_req_log(conn, FS_SetAuthorization);
- _fs_write(conn, (char *) &setac, sizeof (fsSetAuthorizationReq));
- conn->curacid = cur->acid;
- }
-}
-
-/*
- * Poll a pending connect
- */
-
-static int
-_fs_check_connect (FSFpePtr conn)
-{
- int ret;
-
- ret = _fs_poll_connect (conn->trans_conn, 0);
- switch (ret) {
- case FSIO_READY:
- conn->fs_fd = _FontTransGetConnectionNumber (conn->trans_conn);
- FD_SET (conn->fs_fd, &_fs_fd_mask);
- break;
- case FSIO_BLOCK:
- break;
- }
- return ret;
-}
-
-/*
- * Return an FSIO status while waiting for the completed connection
- * reply to arrive
- */
-
-static fsConnSetup *
-_fs_get_conn_setup (FSFpePtr conn, int *error, int *setup_len)
-{
- int ret;
- char *data;
- int headlen;
- int len;
- fsConnSetup *setup;
- fsConnSetupAccept *accept;
-
- ret = _fs_start_read (conn, SIZEOF (fsConnSetup), &data);
- if (ret != FSIO_READY)
- {
- *error = ret;
- return 0;
- }
-
- setup = (fsConnSetup *) data;
- if (setup->major_version > FS_PROTOCOL)
- {
- *error = FSIO_ERROR;
- return 0;
- }
-
- headlen = (SIZEOF (fsConnSetup) +
- (setup->alternate_len << 2) +
- (setup->auth_len << 2));
- /* On anything but Success, no extra data is sent */
- if (setup->status != AuthSuccess)
- {
- len = headlen;
- }
- else
- {
- ret = _fs_start_read (conn, headlen + SIZEOF (fsConnSetupAccept), &data);
- if (ret != FSIO_READY)
- {
- *error = ret;
- return 0;
- }
- setup = (fsConnSetup *) data;
- accept = (fsConnSetupAccept *) (data + headlen);
- len = headlen + (accept->length << 2);
- }
- ret = _fs_start_read (conn, len, &data);
- if (ret != FSIO_READY)
- {
- *error = ret;
- return 0;
- }
- *setup_len = len;
- return (fsConnSetup *) data;
-}
-
-static int
-_fs_send_conn_client_prefix (FSFpePtr conn)
-{
- fsConnClientPrefix req;
- int endian;
- int ret;
-
- /* send setup prefix */
- endian = 1;
- if (*(char *) &endian)
- req.byteOrder = 'l';
- else
- req.byteOrder = 'B';
-
- req.major_version = FS_PROTOCOL;
- req.minor_version = FS_PROTOCOL_MINOR;
-
-/* XXX add some auth info here */
- req.num_auths = 0;
- req.auth_len = 0;
- ret = _fs_write (conn, (char *) &req, SIZEOF (fsConnClientPrefix));
- if (ret != FSIO_READY)
- return FSIO_ERROR;
- conn->blockedConnectTime = GetTimeInMillis () + FontServerRequestTimeout;
- return ret;
-}
-
-static int
-_fs_recv_conn_setup (FSFpePtr conn)
-{
- int ret;
- fsConnSetup *setup;
- FSFpeAltPtr alts;
- unsigned int i, alt_len;
- int setup_len;
- char *alt_save, *alt_names;
-
- setup = _fs_get_conn_setup (conn, &ret, &setup_len);
- if (!setup)
- return ret;
- conn->current_seq = 0;
- conn->fsMajorVersion = setup->major_version;
- /*
- * Create an alternate list from the initial server, but
- * don't chain looking for alternates.
- */
- if (conn->alternate == 0)
- {
- /*
- * free any existing alternates list, allowing the list to
- * be updated
- */
- if (conn->alts)
- {
- xfree (conn->alts);
- conn->alts = 0;
- conn->numAlts = 0;
- }
- if (setup->num_alternates)
- {
- size_t alt_name_len = setup->alternate_len << 2;
- alts = (FSFpeAltPtr) xalloc (setup->num_alternates *
- sizeof (FSFpeAltRec) + alt_name_len);
- if (alts)
- {
- alt_names = (char *) (setup + 1);
- alt_save = (char *) (alts + setup->num_alternates);
- for (i = 0; i < setup->num_alternates; i++)
- {
- alts[i].subset = alt_names[0];
- alt_len = alt_names[1];
- if (alt_len >= alt_name_len) {
- /*
- * Length is longer than setup->alternate_len
- * told us to allocate room for, assume entire
- * alternate list is corrupted.
- */
-#ifdef DEBUG
- fprintf (stderr,
- "invalid alt list (length %lx >= %lx)\n",
- (long) alt_len, (long) alt_name_len);
-#endif
- xfree(alts);
- return FSIO_ERROR;
- }
- alts[i].name = alt_save;
- memcpy (alt_save, alt_names + 2, alt_len);
- alt_save[alt_len] = '\0';
- alt_save += alt_len + 1;
- alt_name_len -= alt_len + 1;
- alt_names += _fs_pad_length (alt_len + 2);
- }
- conn->numAlts = setup->num_alternates;
- conn->alts = alts;
- }
- }
- }
- _fs_done_read (conn, setup_len);
- if (setup->status != AuthSuccess)
- return FSIO_ERROR;
- return FSIO_READY;
-}
-
-static int
-_fs_open_server (FSFpePtr conn)
-{
- int ret;
- char *servername;
-
- if (conn->alternate == 0)
- servername = conn->servername;
- else
- servername = conn->alts[conn->alternate-1].name;
- conn->trans_conn = _fs_connect (servername, &ret);
- conn->blockedConnectTime = GetTimeInMillis () + FS_RECONNECT_WAIT;
- return ret;
-}
-
-static char *
-_fs_catalog_name (char *servername)
-{
- char *sp;
-
- sp = strchr (servername, '/');
- if (!sp)
- return 0;
- return strrchr (sp + 1, '/');
-}
-
-static int
-_fs_send_init_packets (FSFpePtr conn)
-{
- fsSetResolutionReq srreq;
- fsSetCataloguesReq screq;
- int num_cats,
- clen;
- char *catalogues;
- char *cat;
- char len;
- char *end;
- int num_res;
- FontResolutionPtr res;
-
-#define CATALOGUE_SEP '+'
-
- res = GetClientResolutions(&num_res);
- if (num_res)
- {
- srreq.reqType = FS_SetResolution;
- srreq.num_resolutions = num_res;
- srreq.length = (SIZEOF(fsSetResolutionReq) +
- (num_res * SIZEOF(fsResolution)) + 3) >> 2;
-
- _fs_add_req_log(conn, FS_SetResolution);
- if (_fs_write(conn, (char *) &srreq, SIZEOF(fsSetResolutionReq)) != FSIO_READY)
- return FSIO_ERROR;
- if (_fs_write_pad(conn, (char *) res, (num_res * SIZEOF(fsResolution))) != FSIO_READY)
- return FSIO_ERROR;
- }
-
- catalogues = 0;
- if (conn->alternate != 0)
- catalogues = _fs_catalog_name (conn->alts[conn->alternate-1].name);
- if (!catalogues)
- catalogues = _fs_catalog_name (conn->servername);
-
- if (!catalogues)
- {
- conn->has_catalogues = FALSE;
- return FSIO_READY;
- }
- conn->has_catalogues = TRUE;
-
- /* turn cats into counted list */
- catalogues++;
-
- cat = catalogues;
- num_cats = 0;
- clen = 0;
- while (*cat)
- {
- num_cats++;
- end = strchr(cat, CATALOGUE_SEP);
- if (!end)
- end = cat + strlen (cat);
- clen += (end - cat) + 1; /* length byte + string */
- cat = end;
- }
-
- screq.reqType = FS_SetCatalogues;
- screq.num_catalogues = num_cats;
- screq.length = (SIZEOF(fsSetCataloguesReq) + clen + 3) >> 2;
-
- _fs_add_req_log(conn, FS_SetCatalogues);
- if (_fs_write(conn, (char *) &screq, SIZEOF(fsSetCataloguesReq)) != FSIO_READY)
- return FSIO_ERROR;
-
- while (*cat)
- {
- num_cats++;
- end = strchr(cat, CATALOGUE_SEP);
- if (!end)
- end = cat + strlen (cat);
- len = end - cat;
- if (_fs_write (conn, &len, 1) != FSIO_READY)
- return FSIO_ERROR;
- if (_fs_write (conn, cat, (int) len) != FSIO_READY)
- return FSIO_ERROR;
- cat = end;
- }
-
- if (_fs_write (conn, "....", _fs_pad_length (clen) - clen) != FSIO_READY)
- return FSIO_ERROR;
-
- return FSIO_READY;
-}
-
-static int
-_fs_send_cat_sync (FSFpePtr conn)
-{
- fsListCataloguesReq lcreq;
-
- /*
- * now sync up with the font server, to see if an error was generated
- * by a bogus catalogue
- */
- lcreq.reqType = FS_ListCatalogues;
- lcreq.length = (SIZEOF(fsListCataloguesReq)) >> 2;
- lcreq.maxNames = 0;
- lcreq.nbytes = 0;
- _fs_add_req_log(conn, FS_SetCatalogues);
- if (_fs_write(conn, (char *) &lcreq, SIZEOF(fsListCataloguesReq)) != FSIO_READY)
- return FSIO_ERROR;
- conn->blockedConnectTime = GetTimeInMillis () + FontServerRequestTimeout;
- return FSIO_READY;
-}
-
-static int
-_fs_recv_cat_sync (FSFpePtr conn)
-{
- fsGenericReply *reply;
- fsError *error;
- int err;
- int ret;
-
- reply = fs_get_reply (conn, &err);
- if (!reply)
- return err;
-
- ret = FSIO_READY;
- if (reply->type == FS_Error)
- {
- error = (fsError *) reply;
- if (error->major_opcode == FS_SetCatalogues)
- ret = FSIO_ERROR;
- }
- _fs_done_read (conn, reply->length << 2);
- return ret;
-}
-
-static void
-_fs_close_server (FSFpePtr conn)
-{
- _fs_unmark_block (conn, FS_PENDING_WRITE|FS_BROKEN_WRITE|FS_COMPLETE_REPLY|FS_BROKEN_CONNECTION);
- if (conn->trans_conn)
- {
- _FontTransClose (conn->trans_conn);
- conn->trans_conn = 0;
- _fs_io_reinit (conn);
- }
- if (conn->fs_fd >= 0)
- {
- FD_CLR (conn->fs_fd, &_fs_fd_mask);
- conn->fs_fd = -1;
- }
- conn->fs_conn_state = FS_CONN_UNCONNECTED;
-}
-
-static int
-_fs_do_setup_connection (FSFpePtr conn)
-{
- int ret;
-
- do
- {
-#ifdef DEBUG
- fprintf (stderr, "fs_do_setup_connection state %d\n", conn->fs_conn_state);
-#endif
- switch (conn->fs_conn_state) {
- case FS_CONN_UNCONNECTED:
- ret = _fs_open_server (conn);
- if (ret == FSIO_BLOCK)
- conn->fs_conn_state = FS_CONN_CONNECTING;
- break;
- case FS_CONN_CONNECTING:
- ret = _fs_check_connect (conn);
- break;
- case FS_CONN_CONNECTED:
- ret = _fs_send_conn_client_prefix (conn);
- break;
- case FS_CONN_SENT_PREFIX:
- ret = _fs_recv_conn_setup (conn);
- break;
- case FS_CONN_RECV_INIT:
- ret = _fs_send_init_packets (conn);
- if (conn->has_catalogues)
- ret = _fs_send_cat_sync (conn);
- break;
- case FS_CONN_SENT_CAT:
- if (conn->has_catalogues)
- ret = _fs_recv_cat_sync (conn);
- else
- ret = FSIO_READY;
- break;
- default:
- ret = FSIO_READY;
- break;
- }
- switch (ret) {
- case FSIO_READY:
- if (conn->fs_conn_state < FS_CONN_RUNNING)
- conn->fs_conn_state++;
- break;
- case FSIO_BLOCK:
- if (TimeCmp (GetTimeInMillis (), <, conn->blockedConnectTime))
- break;
- ret = FSIO_ERROR;
- /* fall through... */
- case FSIO_ERROR:
- _fs_close_server (conn);
- /*
- * Try the next alternate
- */
- if (conn->alternate < conn->numAlts)
- {
- conn->alternate++;
- ret = FSIO_READY;
- }
- else
- conn->alternate = 0;
- break;
- }
- } while (conn->fs_conn_state != FS_CONN_RUNNING && ret == FSIO_READY);
- if (ret == FSIO_READY)
- conn->generation = ++generationCount;
- return ret;
-}
-
-static int
-_fs_wait_connect (FSFpePtr conn)
-{
- int ret;
-
- for (;;)
- {
- ret = _fs_do_setup_connection (conn);
- if (ret != FSIO_BLOCK)
- break;
- if (conn->fs_conn_state <= FS_CONN_CONNECTING)
- ret = _fs_poll_connect (conn->trans_conn, 1000);
- else
- ret = _fs_wait_for_readable (conn, 1000);
- if (ret == FSIO_ERROR)
- break;
- }
- return ret;
-}
-
-/*
- * Poll a connection in the process of reconnecting
- */
-static void
-_fs_check_reconnect (FSFpePtr conn)
-{
- int ret;
-
- ret = _fs_do_setup_connection (conn);
- switch (ret) {
- case FSIO_READY:
- _fs_unmark_block (conn, FS_RECONNECTING|FS_GIVE_UP);
- _fs_restart_connection (conn);
- break;
- case FSIO_BLOCK:
- break;
- case FSIO_ERROR:
- conn->brokenConnectionTime = GetTimeInMillis () + FS_RECONNECT_POLL;
- break;
- }
-}
-
-/*
- * Start the reconnection process
- */
-static void
-_fs_start_reconnect (FSFpePtr conn)
-{
- if (conn->blockState & FS_RECONNECTING)
- return;
- conn->alternate = 0;
- _fs_mark_block (conn, FS_RECONNECTING);
- _fs_unmark_block (conn, FS_BROKEN_CONNECTION);
- _fs_check_reconnect (conn);
-}
-
-
-static FSFpePtr
-_fs_init_conn (char *servername)
-{
- FSFpePtr conn;
-
- conn = xalloc (sizeof (FSFpeRec) + strlen (servername) + 1);
- if (!conn)
- return 0;
- memset (conn, '\0', sizeof (FSFpeRec));
- if (!_fs_io_init (conn))
- {
- xfree (conn);
- return 0;
- }
- conn->servername = (char *) (conn + 1);
- conn->fs_conn_state = FS_CONN_UNCONNECTED;
- conn->fs_fd = -1;
- strcpy (conn->servername, servername);
- return conn;
-}
-
-static void
-_fs_free_conn (FSFpePtr conn)
-{
- _fs_close_server (conn);
- _fs_io_fini (conn);
- if (conn->alts)
- xfree (conn->alts);
- xfree (conn);
-}
-
-/*
- * called at server init time
- */
-
-void
-fs_register_fpe_functions(void)
-{
- RegisterFPEFunctions(fs_name_check,
- fs_init_fpe,
- fs_free_fpe,
- fs_reset_fpe,
- fs_open_font,
- fs_close_font,
- fs_list_fonts,
- fs_start_list_with_info,
- fs_next_list_with_info,
- fs_wakeup,
- fs_client_died,
- _fs_load_glyphs,
- NULL,
- NULL,
- NULL);
-}
-
-static int
-check_fs_open_font(pointer client, FontPathElementPtr fpe, Mask flags,
- char *name, int namelen,
- fsBitmapFormat format, fsBitmapFormatMask fmask,
- XID id, FontPtr *ppfont,
- char **alias, FontPtr non_cachable_font)
-{
- if (XpClientIsBitmapClient(client))
- return (fs_open_font(client, fpe, flags, name, namelen, format,
- fmask, id, ppfont, alias, non_cachable_font) );
- return BadFontName;
-}
-
-static int
-check_fs_list_fonts(pointer client, FontPathElementPtr fpe,
- char *pattern, int patlen, int maxnames,
- FontNamesPtr newnames)
-{
- if (XpClientIsBitmapClient(client))
- return (fs_list_fonts(client, fpe, pattern, patlen, maxnames,
- newnames));
- return BadFontName;
-}
-
-static int
-check_fs_start_list_with_info(pointer client, FontPathElementPtr fpe,
- char *pattern, int len, int maxnames,
- pointer *pdata)
-{
- if (XpClientIsBitmapClient(client))
- return (fs_start_list_with_info(client, fpe, pattern, len, maxnames,
- pdata));
- return BadFontName;
-}
-
-static int
-check_fs_next_list_with_info(pointer client, FontPathElementPtr fpe,
- char **namep, int *namelenp,
- FontInfoPtr *pFontInfo, int *numFonts,
- pointer private)
-{
- if (XpClientIsBitmapClient(client))
- return (fs_next_list_with_info(client, fpe, namep, namelenp, pFontInfo,
- numFonts,private));
- return BadFontName;
-}
-
-void
-check_fs_register_fpe_functions(void)
-{
- RegisterFPEFunctions(fs_name_check,
- fs_init_fpe,
- fs_free_fpe,
- fs_reset_fpe,
- check_fs_open_font,
- fs_close_font,
- check_fs_list_fonts,
- check_fs_start_list_with_info,
- check_fs_next_list_with_info,
- fs_wakeup,
- fs_client_died,
- _fs_load_glyphs,
- NULL,
- NULL,
- NULL);
-}
diff --git a/nx-X11/lib/font/fc/fserve.h b/nx-X11/lib/font/fc/fserve.h
deleted file mode 100644
index 3254f40fa..000000000
--- a/nx-X11/lib/font/fc/fserve.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* $Xorg: fserve.h,v 1.3 2000/08/17 19:46:36 cpqbld Exp $ */
-/*
- * Copyright 1990 Network Computing Devices
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Network Computing Devices not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission. Network Computing
- * Devices makes no representations about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- * IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
- * OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices, Inc
- *
- */
-/* $XFree86: xc/lib/font/fc/fserve.h,v 1.4 2001/01/17 19:43:29 dawes Exp $ */
-
-#ifndef _FSERVE_H_
-#define _FSERVE_H_
-/*
- * font server data structures
- */
-
-/* types of block records */
-#define FS_OPEN_FONT 1
-#define FS_LOAD_GLYPHS 2
-#define FS_LIST_FONTS 3
-#define FS_LIST_WITH_INFO 4
-
-/* states of OpenFont */
-#define FS_OPEN_REPLY 0
-#define FS_INFO_REPLY 1
-#define FS_EXTENT_REPLY 2
-#define FS_GLYPHS_REPLY 3
-#define FS_DONE_REPLY 4
-#define FS_DEPENDING 5
-
-/* status of ListFontsWithInfo */
-#define FS_LFWI_WAITING 0
-#define FS_LFWI_REPLY 1
-#define FS_LFWI_FINISHED 2
-
-/* states of connection */
-#define FS_CONN_CLOSED 0
-#define FS_CONN_CONNECTING 1
-#define FS_CONN_READ_HEADER 2
-#define FS_CONN_READ_DATA 3
-
-#define AccessDone 0x400
-
-typedef struct _fs_font_data *FSFontDataPtr;
-typedef struct _fs_blocked_font *FSBlockedFontPtr;
-typedef struct _fs_blocked_glyphs *FSBlockedGlyphPtr;
-typedef struct _fs_blocked_list *FSBlockedListPtr;
-typedef struct _fs_blocked_list_info *FSBlockedListInfoPtr;
-typedef struct _fs_block_data *FSBlockDataPtr;
-typedef struct _fs_font_table *FSFontTablePtr;
-typedef struct _fs_fpe_data *FSFpePtr;
-
-typedef struct _fs_blocked_bitmaps *FSBlockedBitmapPtr;
-typedef struct _fs_blocked_extents *FSBlockedExtentPtr;
-
-extern void _fs_convert_char_info ( fsXCharInfo *src, xCharInfo *dst );
-extern void _fs_free_props (FontInfoPtr pfi);
-extern FontPtr fs_create_font (FontPathElementPtr fpe,
- char *name,
- int namelen,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask);
-
-extern int fs_load_all_glyphs ( FontPtr pfont );
-extern int _fs_load_glyphs ( pointer client, FontPtr pfont, Bool range_flag,
- unsigned int nchars, int item_size,
- unsigned char *data );
-
-/*
- * These should be declared elsewhere, but I'm concerned that moving them
- * would cause problems building other pieces
- */
-extern FontPtr find_old_font (Font id);
-extern int set_font_authorizations (char **a, int *len, pointer client);
-extern long GetTimeInMillis (void);
-
-
-#endif /* _FSERVE_H_ */
diff --git a/nx-X11/lib/font/fc/fservestr.h b/nx-X11/lib/font/fc/fservestr.h
deleted file mode 100644
index 0e4166642..000000000
--- a/nx-X11/lib/font/fc/fservestr.h
+++ /dev/null
@@ -1,211 +0,0 @@
-/* $Xorg: fservestr.h,v 1.3 2000/08/17 19:46:36 cpqbld Exp $ */
-/*
- * Copyright 1990 Network Computing Devices
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Network Computing Devices not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission. Network Computing
- * Devices makes no representations about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- * IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
- * OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices, Inc
- */
-/* $XFree86: xc/lib/font/fc/fservestr.h,v 3.3 2001/01/17 19:43:29 dawes Exp $ */
-
-#ifndef _FSERVESTR_H_
-#define _FSERVESTR_H_
-
-#include "fserve.h"
-#include "fsio.h"
-
-/*
- * font server data structures
- */
-/*
- * font server private storage
- */
-
-typedef struct _fs_glyph {
- struct _fs_glyph *next;
-} FSGlyphRec, *FSGlyphPtr;
-
-typedef struct _fs_font {
- CharInfoPtr pDefault;
- CharInfoPtr encoding;
- CharInfoPtr inkMetrics;
- FSGlyphPtr glyphs;
-} FSFontRec, *FSFontPtr;
-
-/* FS special data for the font */
-typedef struct _fs_font_data {
- long fontid;
- int generation; /* FS generation when opened */
- unsigned long glyphs_to_get; /* # glyphs remaining to be gotten */
-
- /* Following data needed in case font needs to be reopened. */
- int namelen;
- char *name;
- fsBitmapFormat format;
- fsBitmapFormatMask fmask;
-} FSFontDataRec;
-
-typedef struct fs_clients_depending {
- pointer client;
- struct fs_clients_depending *next;
-} FSClientsDependingRec, *FSClientsDependingPtr;
-
-/* OpenFont specific data for blocked request */
-typedef struct _fs_blocked_font {
- FontPtr pfont; /* must be first for fs_read_glyphs */
- long fontid;
- int state; /* how many of the replies have landed */
- int flags;
- Bool freeFont; /* free this font on failure */
- CARD16 queryInfoSequence;
- CARD16 queryExtentsSequence;
- CARD16 queryBitmapsSequence;
- fsBitmapFormat format;
- FSClientsDependingPtr clients_depending;
-} FSBlockedFontRec;
-
-/* LoadGlyphs data for blocked request */
-typedef struct _fs_blocked_glyphs {
- FontPtr pfont; /* must be first for fs_read_glyphs */
- int num_expected_ranges;
- fsRange *expected_ranges;
- FSClientsDependingPtr clients_depending;
-} FSBlockedGlyphRec;
-
-/* LoadExtents data for blocked request */
-typedef struct _fs_blocked_extents {
- FontPtr pfont;
- fsRange *expected_ranges;
- int nranges;
- unsigned long nextents;
- fsXCharInfo *extents;
-} FSBlockedExtentRec;
-
-/* LoadBitmaps data for blocked request */
-typedef struct _fs_blocked_bitmaps {
- FontPtr pfont;
- fsRange *expected_ranges;
- int nranges;
- unsigned long size;
- unsigned long nglyphs;
- fsOffset32 *offsets;
- pointer gdata;
-} FSBlockedBitmapRec;
-
-/* state for blocked ListFonts */
-typedef struct _fs_blocked_list {
- FontNamesPtr names;
-} FSBlockedListRec;
-
-/* state for blocked ListFontsWithInfo */
-typedef struct _fs_blocked_list_info {
- int status;
- int namelen;
- FontInfoRec info;
- char name[256];
- int remaining;
-} FSBlockedListInfoRec;
-
-/* state for blocked request */
-typedef struct _fs_block_data {
- int type; /* Open Font, LoadGlyphs, ListFonts,
- * ListWithInfo */
- pointer client; /* who wants it */
- CARD16 sequenceNumber; /* expected */
- pointer data; /* type specific data */
- int errcode; /* Suspended, et al. */
- struct _fs_block_data *depending; /* clients depending on this one */
- struct _fs_block_data *next;
-} FSBlockDataRec;
-
-/* state for reconnected to dead font server */
-typedef struct _fs_reconnect {
- int i;
-} FSReconnectRec, *FSReconnectPtr;
-
-
-#if !defined(UNIXCPP) || defined(ANSICPP)
-#define fsCat(x,y) x##_##y
-#else
-#define fsCat(x,y) x/**/_/**/y
-#endif
-
-
-/* copy XCharInfo parts of a protocol reply into a xCharInfo */
-
-#define fsUnpack_XCharInfo(packet, structure) \
- (structure)->leftSideBearing = fsCat(packet,left); \
- (structure)->rightSideBearing = fsCat(packet,right); \
- (structure)->characterWidth = fsCat(packet,width); \
- (structure)->ascent = fsCat(packet,ascent); \
- (structure)->descent = fsCat(packet,descent); \
- (structure)->attributes = fsCat(packet,attributes)
-
-
-/* copy XFontInfoHeader parts of a protocol reply into a FontInfoRec */
-
-#define fsUnpack_XFontInfoHeader(packet, structure) \
- (structure)->allExist = ((packet)->font_header_flags & FontInfoAllCharsExist) != 0; \
- (structure)->drawDirection = \
- ((packet)->font_header_draw_direction == LeftToRightDrawDirection) ? \
- LeftToRight : RightToLeft; \
- (structure)->inkInside = ((packet)->font_header_flags & FontInfoInkInside) != 0; \
- \
- (structure)->firstRow = (packet)->font_hdr_char_range_min_char_high; \
- (structure)->firstCol = (packet)->font_hdr_char_range_min_char_low; \
- (structure)->lastRow = (packet)->font_hdr_char_range_max_char_high; \
- (structure)->lastCol = (packet)->font_hdr_char_range_max_char_low; \
- (structure)->defaultCh = (packet)->font_header_default_char_low \
- + ((packet)->font_header_default_char_high << 8); \
- \
- (structure)->fontDescent = (packet)->font_header_font_descent; \
- (structure)->fontAscent = (packet)->font_header_font_ascent; \
- \
- fsUnpack_XCharInfo((packet)->font_header_min_bounds, &(structure)->minbounds); \
- fsUnpack_XCharInfo((packet)->font_header_min_bounds, &(structure)->ink_minbounds); \
- fsUnpack_XCharInfo((packet)->font_header_max_bounds, &(structure)->maxbounds); \
- fsUnpack_XCharInfo((packet)->font_header_max_bounds, &(structure)->ink_maxbounds)
-
-extern void _fs_init_fontinfo ( FSFpePtr conn, FontInfoPtr pfi );
-extern int _fs_convert_props ( fsPropInfo *pi, fsPropOffset *po, pointer pd,
- FontInfoPtr pfi );
-extern int _fs_convert_lfwi_reply ( FSFpePtr conn, FontInfoPtr pfi,
- fsListFontsWithXInfoReply *fsrep,
- fsPropInfo *pi, fsPropOffset *po,
- pointer pd );
-extern int fs_build_range ( FontPtr pfont, Bool range_flag,
- unsigned int count, int item_size,
- unsigned char *data, int *nranges,
- fsRange **ranges );
-extern void _fs_clean_aborted_loadglyphs ( FontPtr pfont,
- int num_expected_ranges,
- fsRange *expected_ranges );
-extern int _fs_check_extents ( FontPtr pfont, Mask flags, int nranges,
- fsRange *range, FSBlockDataPtr blockrec );
-extern int _fs_check_bitmaps ( FontPtr pfont, fsBitmapFormat format,
- Mask flags, int nranges, fsRange *range,
- FSBlockDataPtr blockrec );
-extern int _fs_get_glyphs ( FontPtr pFont, unsigned long count,
- unsigned char *chars, FontEncoding charEncoding,
- unsigned long *glyphCount, CharInfoPtr *glyphs );
-extern void _fs_unload_font ( FontPtr pfont );
-extern void _fs_init_font ( FontPtr pfont );
-extern pointer fs_alloc_glyphs (FontPtr pFont, int size);
-#endif /* _FSERVESTR_H_ */
diff --git a/nx-X11/lib/font/fc/fsio.c b/nx-X11/lib/font/fc/fsio.c
deleted file mode 100644
index fbfb9dfed..000000000
--- a/nx-X11/lib/font/fc/fsio.c
+++ /dev/null
@@ -1,516 +0,0 @@
-/* $Xorg: fsio.c,v 1.3 2000/08/17 19:46:36 cpqbld Exp $ */
-/*
- * Copyright 1990 Network Computing Devices
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Network Computing Devices not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission. Network Computing
- * Devices makes no representations about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- * IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
- * OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices, Inc
- */
-/* $XFree86: xc/lib/font/fc/fsio.c,v 3.16tsi Exp $ */
-/*
- * font server i/o routines
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifdef WIN32
-#define _WILLWINSOCK_
-#include "X11/Xwindows.h"
-#endif
-
-#define FONT_t
-#define TRANS_CLIENT
-#include "X11/Xtrans/Xtrans.h"
-#include "X11/Xpoll.h"
-#include <X11/fonts/FS.h>
-#include <X11/fonts/FSproto.h>
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/fontstruct.h>
-#include "fservestr.h"
-
-#include <stdio.h>
-#include <signal.h>
-#include <sys/types.h>
-#if !defined(WIN32)
-#ifndef Lynx
-#include <sys/socket.h>
-#else
-#include <socket.h>
-#endif
-#endif
-#include <errno.h>
-#ifdef WIN32
-#define EWOULDBLOCK WSAEWOULDBLOCK
-#undef EINTR
-#define EINTR WSAEINTR
-#endif
-
-#ifdef __UNIXOS2__
-#define select(n,r,w,x,t) os2PseudoSelect(n,r,w,x,t)
-#endif
-
-
-static int padlength[4] = {0, 3, 2, 1};
-fd_set _fs_fd_mask;
-
-static int
-_fs_resize (FSBufPtr buf, long size);
-
-static void
-_fs_downsize (FSBufPtr buf, long size);
-
-int
-_fs_poll_connect (XtransConnInfo trans_conn, int timeout)
-{
- fd_set w_mask;
- struct timeval tv;
- int fs_fd = _FontTransGetConnectionNumber (trans_conn);
- int ret;
-
- do
- {
- tv.tv_usec = 0;
- tv.tv_sec = timeout;
- FD_ZERO (&w_mask);
- FD_SET (fs_fd, &w_mask);
- ret = Select (fs_fd + 1, NULL, &w_mask, NULL, &tv);
- } while (ret < 0 && ECHECK(EINTR));
- if (ret == 0)
- return FSIO_BLOCK;
- if (ret < 0)
- return FSIO_ERROR;
- return FSIO_READY;
-}
-
-XtransConnInfo
-_fs_connect(char *servername, int *err)
-{
- XtransConnInfo trans_conn; /* transport connection object */
- int ret;
- int i = 0;
- int retries = 5;
-
- /*
- * Open the network connection.
- */
- if( (trans_conn=_FontTransOpenCOTSClient(servername)) == NULL )
- {
- *err = FSIO_ERROR;
- return 0;
- }
-
- /*
- * Set the connection non-blocking since we use select() to block.
- */
-
- _FontTransSetOption(trans_conn, TRANS_NONBLOCKING, 1);
-
- do {
- if (i == TRANS_TRY_CONNECT_AGAIN)
- sleep(1);
- i = _FontTransConnect(trans_conn,servername);
- } while ((i == TRANS_TRY_CONNECT_AGAIN) && (retries-- > 0));
-
- if (i < 0)
- {
- if (i == TRANS_IN_PROGRESS)
- ret = FSIO_BLOCK;
- else
- ret = FSIO_ERROR;
- }
- else
- ret = FSIO_READY;
-
- if (ret == FSIO_ERROR)
- {
- _FontTransClose(trans_conn);
- trans_conn = 0;
- }
-
- *err = ret;
- return trans_conn;
-}
-
-int
-_fs_fill (FSFpePtr conn)
-{
- long avail;
- long bytes_read;
- Bool waited = FALSE;
-
- if (_fs_flush (conn) < 0)
- return FSIO_ERROR;
- /*
- * Don't go overboard here; stop reading when we've
- * got enough to satisfy the pending request
- */
- while ((conn->inNeed - (conn->inBuf.insert - conn->inBuf.remove)) > 0)
- {
- avail = conn->inBuf.size - conn->inBuf.insert;
- /*
- * For SVR4 with a unix-domain connection, ETEST() after selecting
- * readable means the server has died. To do this here, we look for
- * two consecutive reads returning ETEST().
- */
- ESET (0);
- bytes_read =_FontTransRead(conn->trans_conn,
- conn->inBuf.buf + conn->inBuf.insert,
- avail);
- if (bytes_read > 0) {
- conn->inBuf.insert += bytes_read;
- waited = FALSE;
- }
- else
- {
- if (bytes_read == 0 || ETEST ())
- {
- if (!waited)
- {
- waited = TRUE;
- if (_fs_wait_for_readable (conn, 0) == FSIO_BLOCK)
- return FSIO_BLOCK;
- continue;
- }
- }
- _fs_connection_died (conn);
- return FSIO_ERROR;
- }
- }
- return FSIO_READY;
-}
-
-/*
- * Make space and return whether data have already arrived
- */
-
-int
-_fs_start_read (FSFpePtr conn, long size, char **buf)
-{
- int ret;
-
- conn->inNeed = size;
- if (fs_inqueued(conn) < size)
- {
- if (_fs_resize (&conn->inBuf, size) != FSIO_READY)
- {
- _fs_connection_died (conn);
- return FSIO_ERROR;
- }
- ret = _fs_fill (conn);
- if (ret == FSIO_ERROR)
- return ret;
- if (ret == FSIO_BLOCK || fs_inqueued(conn) < size)
- return FSIO_BLOCK;
- }
- if (buf)
- *buf = conn->inBuf.buf + conn->inBuf.remove;
- return FSIO_READY;
-}
-
-void
-_fs_done_read (FSFpePtr conn, long size)
-{
- if (conn->inBuf.insert - conn->inBuf.remove < size)
- {
-#ifdef DEBUG
- fprintf (stderr, "_fs_done_read skipping to many bytes\n");
-#endif
- return;
- }
- conn->inBuf.remove += size;
- conn->inNeed -= size;
- _fs_downsize (&conn->inBuf, FS_BUF_MAX);
-}
-
-long
-_fs_pad_length (long len)
-{
- return len + padlength[len&3];
-}
-
-int
-_fs_flush (FSFpePtr conn)
-{
- long bytes_written;
- long remain;
-
- /* XXX - hack. The right fix is to remember that the font server
- has gone away when we first discovered it. */
- if (conn->fs_fd < 0)
- return FSIO_ERROR;
-
- while ((remain = conn->outBuf.insert - conn->outBuf.remove) > 0)
- {
- bytes_written = _FontTransWrite(conn->trans_conn,
- conn->outBuf.buf + conn->outBuf.remove,
- (int) remain);
- if (bytes_written > 0)
- {
- conn->outBuf.remove += bytes_written;
- }
- else
- {
- if (bytes_written == 0 || ETEST ())
- {
- conn->brokenWriteTime = GetTimeInMillis () + FS_FLUSH_POLL;
- _fs_mark_block (conn, FS_BROKEN_WRITE);
- break;
- }
- if (!ECHECK (EINTR))
- {
- _fs_connection_died (conn);
- return FSIO_ERROR;
- }
- }
- }
- if (conn->outBuf.remove == conn->outBuf.insert)
- {
- _fs_unmark_block (conn, FS_BROKEN_WRITE|FS_PENDING_WRITE);
- if (conn->outBuf.size > FS_BUF_INC)
- conn->outBuf.buf = xrealloc (conn->outBuf.buf, FS_BUF_INC);
- conn->outBuf.remove = conn->outBuf.insert = 0;
- }
- return FSIO_READY;
-}
-
-static int
-_fs_resize (FSBufPtr buf, long size)
-{
- char *new;
- long new_size;
-
- if (buf->remove)
- {
- if (buf->remove != buf->insert)
- {
- memmove (buf->buf,
- buf->buf + buf->remove,
- buf->insert - buf->remove);
- }
- buf->insert -= buf->remove;
- buf->remove = 0;
- }
- if (buf->size - buf->remove < size)
- {
- new_size = ((buf->remove + size + FS_BUF_INC) / FS_BUF_INC) * FS_BUF_INC;
- new = xrealloc (buf->buf, new_size);
- if (!new)
- return FSIO_ERROR;
- buf->buf = new;
- buf->size = new_size;
- }
- return FSIO_READY;
-}
-
-static void
-_fs_downsize (FSBufPtr buf, long size)
-{
- if (buf->insert == buf->remove)
- {
- buf->insert = buf->remove = 0;
- if (buf->size > size)
- {
- buf->buf = xrealloc (buf->buf, size);
- buf->size = size;
- }
- }
-}
-
-void
-_fs_io_reinit (FSFpePtr conn)
-{
- conn->outBuf.insert = conn->outBuf.remove = 0;
- _fs_downsize (&conn->outBuf, FS_BUF_INC);
- conn->inBuf.insert = conn->inBuf.remove = 0;
- _fs_downsize (&conn->inBuf, FS_BUF_MAX);
-}
-
-Bool
-_fs_io_init (FSFpePtr conn)
-{
- conn->outBuf.insert = conn->outBuf.remove = 0;
- conn->outBuf.buf = xalloc (FS_BUF_INC);
- if (!conn->outBuf.buf)
- return FALSE;
- conn->outBuf.size = FS_BUF_INC;
-
- conn->inBuf.insert = conn->inBuf.remove = 0;
- conn->inBuf.buf = xalloc (FS_BUF_INC);
- if (!conn->inBuf.buf)
- {
- xfree (conn->outBuf.buf);
- conn->outBuf.buf = 0;
- return FALSE;
- }
- conn->inBuf.size = FS_BUF_INC;
-
- return TRUE;
-}
-
-void
-_fs_io_fini (FSFpePtr conn)
-{
- if (conn->outBuf.buf)
- xfree (conn->outBuf.buf);
- if (conn->inBuf.buf)
- xfree (conn->inBuf.buf);
-}
-
-static int
-_fs_do_write(FSFpePtr conn, char *data, long len, long size)
-{
- if (size == 0) {
-#ifdef DEBUG
- fprintf(stderr, "tried to write 0 bytes \n");
-#endif
- return FSIO_READY;
- }
-
- if (conn->fs_fd == -1)
- return FSIO_ERROR;
-
- while (conn->outBuf.insert + size > conn->outBuf.size)
- {
- if (_fs_flush (conn) < 0)
- return FSIO_ERROR;
- if (_fs_resize (&conn->outBuf, size) < 0)
- {
- _fs_connection_died (conn);
- return FSIO_ERROR;
- }
- }
- memcpy (conn->outBuf.buf + conn->outBuf.insert, data, len);
- conn->outBuf.insert += size;
- _fs_mark_block (conn, FS_PENDING_WRITE);
- return FSIO_READY;
-}
-
-/*
- * Write the indicated bytes
- */
-int
-_fs_write (FSFpePtr conn, char *data, long len)
-{
- return _fs_do_write (conn, data, len, len);
-}
-
-/*
- * Write the indicated bytes adding any appropriate pad
- */
-int
-_fs_write_pad(FSFpePtr conn, char *data, long len)
-{
- return _fs_do_write (conn, data, len, len + padlength[len & 3]);
-}
-
-/*
- * returns the amount of data waiting to be read
- */
-int
-_fs_data_ready(FSFpePtr conn)
-{
- BytesReadable_t readable;
-
- if (_FontTransBytesReadable(conn->trans_conn, &readable) < 0)
- return -1;
- return readable;
-}
-
-int
-_fs_wait_for_readable(FSFpePtr conn, int ms)
-{
- fd_set r_mask;
- fd_set e_mask;
- int result;
- struct timeval tv;
-
- for (;;) {
- if (conn->fs_fd < 0)
- return FSIO_ERROR;
- FD_ZERO(&r_mask);
- FD_ZERO(&e_mask);
- tv.tv_sec = ms / 1000;
- tv.tv_usec = (ms % 1000) * 1000;
- FD_SET(conn->fs_fd, &r_mask);
- FD_SET(conn->fs_fd, &e_mask);
- result = Select(conn->fs_fd + 1, &r_mask, NULL, &e_mask, &tv);
- if (result < 0)
- {
- if (ECHECK(EINTR) || ECHECK(EAGAIN))
- continue;
- else
- return FSIO_ERROR;
- }
- if (result == 0)
- return FSIO_BLOCK;
- if (FD_ISSET(conn->fs_fd, &r_mask))
- return FSIO_READY;
- return FSIO_ERROR;
- }
-}
-
-int
-_fs_set_bit(fd_set *mask, int fd)
-{
- FD_SET(fd, mask);
- return fd;
-}
-
-int
-_fs_is_bit_set(fd_set *mask, int fd)
-{
- return FD_ISSET(fd, mask);
-}
-
-void
-_fs_bit_clear(fd_set *mask, int fd)
-{
- FD_CLR(fd, mask);
-}
-
-int
-_fs_any_bit_set(fd_set *mask)
-{
- return XFD_ANYSET(mask);
-}
-
-void
-_fs_or_bits(fd_set *dst, fd_set *m1, fd_set *m2)
-{
-#ifdef WIN32
- int i;
- if (dst != m1) {
- for (i = m1->fd_count; --i >= 0; ) {
- if (!FD_ISSET(m1->fd_array[i], dst))
- FD_SET(m1->fd_array[i], dst);
- }
- }
- if (dst != m2) {
- for (i = m2->fd_count; --i >= 0; ) {
- if (!FD_ISSET(m2->fd_array[i], dst))
- FD_SET(m2->fd_array[i], dst);
- }
- }
-#else
- XFD_ORSET(dst, m1, m2);
-#endif
-}
diff --git a/nx-X11/lib/font/fc/fsio.h b/nx-X11/lib/font/fc/fsio.h
deleted file mode 100644
index 224143601..000000000
--- a/nx-X11/lib/font/fc/fsio.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/* $Xorg: fsio.h,v 1.3 2000/08/17 19:46:36 cpqbld Exp $ */
-/*
- * Copyright 1990 Network Computing Devices
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Network Computing Devices not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission. Network Computing
- * Devices makes no representations about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- * IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
- * OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices, Inc
- */
-/* $XFree86: xc/lib/font/fc/fsio.h,v 1.5 1999/12/30 02:39:06 robin Exp $ */
-
-#ifndef _FSIO_H_
-#define _FSIO_H_
-
-#undef DEBUG
-#define REQUEST_LOG_SIZE 100
-
-typedef struct _fs_fpe_alternate {
- char *name;
- Bool subset;
-} FSFpeAltRec, *FSFpeAltPtr;
-
-
-/* Per client access contexts */
-typedef struct _fs_client_data {
- pointer client;
- struct _fs_client_data *next;
- XID acid;
- int auth_generation;
-} FSClientRec, *FSClientPtr;
-
-#define FS_RECONNECT_POLL 1000
-#define FS_RECONNECT_WAIT 5000
-#define FS_GIVEUP_WAIT 20000
-#define FS_REQUEST_TIMEOUT 20000
-#define FS_OPEN_TIMEOUT 30000
-#define FS_REOPEN_TIMEOUT 10000
-#define FS_FLUSH_POLL 1000
-
-typedef struct _fs_buf {
- char *buf; /* data */
- long size; /* sizeof data */
- long insert; /* where to insert new data */
- long remove; /* where to remove old data */
-} FSBufRec, *FSBufPtr;
-
-#define FS_BUF_INC 1024
-#define FS_BUF_MAX 32768
-
-#define FS_PENDING_WRITE 0x01 /* some write data is queued */
-#define FS_BROKEN_WRITE 0x02 /* writes are broken */
-#define FS_BROKEN_CONNECTION 0x04 /* connection is broken */
-#define FS_PENDING_REPLY 0x08 /* waiting for a reply */
-#define FS_GIVE_UP 0x10 /* font server declared useless */
-#define FS_COMPLETE_REPLY 0x20 /* complete reply ready */
-#define FS_RECONNECTING 0x40
-
-#define FS_CONN_UNCONNECTED 0
-#define FS_CONN_CONNECTING 1
-#define FS_CONN_CONNECTED 2
-#define FS_CONN_SENT_PREFIX 3
-#define FS_CONN_RECV_INIT 4
-#define FS_CONN_SENT_CAT 5
-#define FS_CONN_RUNNING 6
-
-/* FS specific font FontPathElement data */
-typedef struct _fs_fpe_data {
- FSFpePtr next; /* list of all active fs fpes */
- int fs_fd; /* < 0 when not running */
- int fs_conn_state; /* connection state */
- int current_seq;
- char *servername;
- Bool has_catalogues;
-
- int generation;
- int numAlts;
- int alternate; /* which alternate is in use +1 */
- int fsMajorVersion; /* font server major version number */
- FSFpeAltPtr alts;
-
- FSClientPtr clients;
- XID curacid;
-#ifdef DEBUG
- int reqindex;
- struct {
- int opcode;
- int sequence;
- } reqbuffer[REQUEST_LOG_SIZE];
-#endif
- FSBufRec outBuf; /* request queue */
- FSBufRec inBuf; /* reply queue */
- long inNeed; /* amount needed for reply */
-
- CARD32 blockState;
- CARD32 blockedReplyTime; /* time to abort blocked read */
- CARD32 brokenWriteTime; /* time to retry broken write */
- CARD32 blockedConnectTime; /* time to abort blocked connect */
- CARD32 brokenConnectionTime; /* time to retry broken connection */
-
- FSBlockDataPtr blockedRequests;
-
- struct _XtransConnInfo *trans_conn; /* transport connection object */
-} FSFpeRec;
-
-#define fs_outspace(conn) ((conn)->outBuf.size - (conn)->outBuf.insert)
-#define fs_outqueued(conn) ((conn)->outBuf.insert - (conn)->outBuf.remove)
-#define fs_inqueued(conn) ((conn)->inBuf.insert - (conn)->inBuf.remove)
-#define fs_needsflush(conn) (fs_outqueued(conn) != 0)
-#define fs_needsfill(conn) (fs_inqueued(conn) < (conn)->inNeed)
-#define fs_needsconnect(conn) ((conn)->fs_fd < 0)
-#define fs_data_read(conn) ((conn)->inBuf.insert - (conn)->inBuf.remove)
-
-#define FSIO_READY 1
-#define FSIO_BLOCK 0
-#define FSIO_ERROR -1
-
-extern Bool _fs_reopen_server ( FSFpePtr conn );
-extern int _fs_write ( FSFpePtr conn, char *data, long size );
-extern int _fs_write_pad ( FSFpePtr conn, char *data, long len );
-extern int _fs_data_ready ( FSFpePtr conn );
-extern int _fs_wait_for_readable ( FSFpePtr conn, int ms );
-extern int _fs_set_bit ( fd_set * mask, int fd );
-extern int _fs_is_bit_set ( fd_set * mask, int fd );
-extern void _fs_bit_clear ( fd_set * mask, int fd );
-extern int _fs_any_bit_set ( fd_set * mask );
-extern void _fs_or_bits ( fd_set * dst, fd_set * m1, fd_set * m2 );
-extern long _fs_pad_length (long len);
-
-extern void _fs_connection_died ( FSFpePtr conn );
-
-extern int _fs_fill (FSFpePtr conn);
-extern int _fs_flush (FSFpePtr conn);
-extern void _fs_mark_block (FSFpePtr conn, CARD32 mask);
-extern void _fs_unmark_block (FSFpePtr conn, CARD32 mask);
-extern void _fs_done_read (FSFpePtr conn, long size);
-extern void _fs_io_reinit (FSFpePtr conn);
-extern int _fs_start_read (FSFpePtr conn, long size, char **buf);
-extern Bool _fs_io_init (FSFpePtr conn);
-extern void _fs_io_fini (FSFpePtr conn);
-extern int _fs_poll_connect (XtransConnInfo trans_conn, int timeout);
-extern XtransConnInfo _fs_connect(char *servername, int *ret);
-
-/* check for both EAGAIN and EWOULDBLOCK, because some supposedly POSIX
- * systems are broken and return EWOULDBLOCK when they should return EAGAIN
- */
-#ifdef WIN32
-#define ETEST() (WSAGetLastError() == WSAEWOULDBLOCK)
-#else
-#if defined(EAGAIN) && defined(EWOULDBLOCK)
-#define ETEST() (errno == EAGAIN || errno == EWOULDBLOCK)
-#else
-#ifdef EAGAIN
-#define ETEST() (errno == EAGAIN)
-#else
-#define ETEST() (errno == EWOULDBLOCK)
-#endif
-#endif
-#endif
-#ifdef WIN32
-#define ECHECK(err) (WSAGetLastError() == err)
-#define ESET(val) WSASetLastError(val)
-#else
-#ifdef ISC
-#define ECHECK(err) ((errno == err) || ETEST())
-#else
-#define ECHECK(err) (errno == err)
-#endif
-#define ESET(val) errno = val
-#endif
-
-#endif /* _FSIO_H_ */
diff --git a/nx-X11/lib/font/fc/fsio.h.NX.reference b/nx-X11/lib/font/fc/fsio.h.NX.reference
deleted file mode 100644
index f79a17b90..000000000
--- a/nx-X11/lib/font/fc/fsio.h.NX.reference
+++ /dev/null
@@ -1,191 +0,0 @@
-/* $Xorg: fsio.h,v 1.3 2000/08/17 19:46:36 cpqbld Exp $ */
-/*
- * Copyright 1990 Network Computing Devices
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Network Computing Devices not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission. Network Computing
- * Devices makes no representations about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- * IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
- * OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices, Inc
- */
-/* $XFree86: xc/lib/font/fc/fsio.h,v 1.6 2001/01/17 19:43:29 dawes Exp $ */
-
-#ifndef _FSIO_H_
-#define _FSIO_H_
-
-#undef DEBUG
-#define REQUEST_LOG_SIZE 100
-
-typedef struct _fs_fpe_alternate {
- char *name;
- Bool subset;
-} FSFpeAltRec, *FSFpeAltPtr;
-
-
-/* Per client access contexts */
-typedef struct _fs_client_data {
- pointer client;
- struct _fs_client_data *next;
- XID acid;
- int auth_generation;
-} FSClientRec, *FSClientPtr;
-
-#define FS_RECONNECT_POLL 1000
-#ifdef __CYGWIN__
-#define FS_RECONNECT_WAIT 800
-#else
-#define FS_RECONNECT_WAIT 5000
-#endif
-#define FS_GIVEUP_WAIT 20000
-#define FS_REQUEST_TIMEOUT 20000
-#define FS_OPEN_TIMEOUT 30000
-#define FS_REOPEN_TIMEOUT 10000
-#define FS_FLUSH_POLL 1000
-
-typedef struct _fs_buf {
- char *buf; /* data */
- long size; /* sizeof data */
- long insert; /* where to insert new data */
- long remove; /* where to remove old data */
-} FSBufRec, *FSBufPtr;
-
-#define FS_BUF_INC 1024
-#define FS_BUF_MAX 32768
-
-#define FS_PENDING_WRITE 0x01 /* some write data is queued */
-#define FS_BROKEN_WRITE 0x02 /* writes are broken */
-#define FS_BROKEN_CONNECTION 0x04 /* connection is broken */
-#define FS_PENDING_REPLY 0x08 /* waiting for a reply */
-#define FS_GIVE_UP 0x10 /* font server declared useless */
-#define FS_COMPLETE_REPLY 0x20 /* complete reply ready */
-#define FS_RECONNECTING 0x40
-
-#define FS_CONN_UNCONNECTED 0
-#define FS_CONN_CONNECTING 1
-#define FS_CONN_CONNECTED 2
-#define FS_CONN_SENT_PREFIX 3
-#define FS_CONN_RECV_INIT 4
-#define FS_CONN_SENT_CAT 5
-#define FS_CONN_RUNNING 6
-
-/* FS specific font FontPathElement data */
-typedef struct _fs_fpe_data {
- FSFpePtr next; /* list of all active fs fpes */
- int fs_fd; /* < 0 when not running */
- int fs_conn_state; /* connection state */
- int current_seq;
- char *servername;
- Bool has_catalogues;
-
- int generation;
- int numAlts;
- int alternate; /* which alternate is in use +1 */
- int fsMajorVersion; /* font server major version number */
- FSFpeAltPtr alts;
-
- FSClientPtr clients;
- XID curacid;
-#ifdef DEBUG
- int reqindex;
- struct {
- int opcode;
- int sequence;
- } reqbuffer[REQUEST_LOG_SIZE];
-#endif
- FSBufRec outBuf; /* request queue */
- FSBufRec inBuf; /* reply queue */
- long inNeed; /* amount needed for reply */
-
- CARD32 blockState;
- CARD32 blockedReplyTime; /* time to abort blocked read */
- CARD32 brokenWriteTime; /* time to retry broken write */
- CARD32 blockedConnectTime; /* time to abort blocked connect */
- CARD32 brokenConnectionTime; /* time to retry broken connection */
-
- FSBlockDataPtr blockedRequests;
-
- struct _XtransConnInfo *trans_conn; /* transport connection object */
-} FSFpeRec;
-
-#define fs_outspace(conn) ((conn)->outBuf.size - (conn)->outBuf.insert)
-#define fs_outqueued(conn) ((conn)->outBuf.insert - (conn)->outBuf.remove)
-#define fs_inqueued(conn) ((conn)->inBuf.insert - (conn)->inBuf.remove)
-#define fs_needsflush(conn) (fs_outqueued(conn) != 0)
-#define fs_needsfill(conn) (fs_inqueued(conn) < (conn)->inNeed)
-#define fs_needsconnect(conn) ((conn)->fs_fd < 0)
-#define fs_data_read(conn) ((conn)->inBuf.insert - (conn)->inBuf.remove)
-
-#define FSIO_READY 1
-#define FSIO_BLOCK 0
-#define FSIO_ERROR -1
-
-extern Bool _fs_reopen_server ( FSFpePtr conn );
-extern int _fs_write ( FSFpePtr conn, char *data, long size );
-extern int _fs_write_pad ( FSFpePtr conn, char *data, long len );
-extern int _fs_data_ready ( FSFpePtr conn );
-extern int _fs_wait_for_readable ( FSFpePtr conn, int ms );
-extern int _fs_set_bit ( fd_set * mask, int fd );
-extern int _fs_is_bit_set ( fd_set * mask, int fd );
-extern void _fs_bit_clear ( fd_set * mask, int fd );
-extern int _fs_any_bit_set ( fd_set * mask );
-extern void _fs_or_bits ( fd_set * dst, fd_set * m1, fd_set * m2 );
-extern long _fs_pad_length (long len);
-
-extern void _fs_connection_died ( FSFpePtr conn );
-
-extern int _fs_fill (FSFpePtr conn);
-extern int _fs_flush (FSFpePtr conn);
-extern void _fs_mark_block (FSFpePtr conn, CARD32 mask);
-extern void _fs_unmark_block (FSFpePtr conn, CARD32 mask);
-extern void _fs_done_read (FSFpePtr conn, long size);
-extern void _fs_io_reinit (FSFpePtr conn);
-extern int _fs_start_read (FSFpePtr conn, long size, char **buf);
-extern Bool _fs_io_init (FSFpePtr conn);
-extern void _fs_io_fini (FSFpePtr conn);
-extern int _fs_poll_connect (XtransConnInfo trans_conn, int timeout);
-extern XtransConnInfo _fs_connect(char *servername, int *ret);
-
-/* check for both EAGAIN and EWOULDBLOCK, because some supposedly POSIX
- * systems are broken and return EWOULDBLOCK when they should return EAGAIN
- */
-#ifdef WIN32
-#define ETEST() (WSAGetLastError() == WSAEWOULDBLOCK)
-#else
-#if defined(EAGAIN) && defined(EWOULDBLOCK)
-#define ETEST() (errno == EAGAIN || errno == EWOULDBLOCK)
-#else
-#ifdef EAGAIN
-#define ETEST() (errno == EAGAIN)
-#else
-#define ETEST() (errno == EWOULDBLOCK)
-#endif
-#endif
-#endif
-#ifdef WIN32
-#define ECHECK(err) (WSAGetLastError() == err)
-#define ESET(val) WSASetLastError(val)
-#else
-#ifdef ISC
-#define ECHECK(err) ((errno == err) || ETEST())
-#else
-#define ECHECK(err) (errno == err)
-#endif
-#define ESET(val) errno = val
-#endif
-
-#endif /* _FSIO_H_ */
diff --git a/nx-X11/lib/font/fc/fsio.h.XF86.reference b/nx-X11/lib/font/fc/fsio.h.XF86.reference
deleted file mode 100644
index 974ef4a91..000000000
--- a/nx-X11/lib/font/fc/fsio.h.XF86.reference
+++ /dev/null
@@ -1,187 +0,0 @@
-/* $Xorg: fsio.h,v 1.3 2000/08/17 19:46:36 cpqbld Exp $ */
-/*
- * Copyright 1990 Network Computing Devices
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Network Computing Devices not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission. Network Computing
- * Devices makes no representations about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- * IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
- * OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Dave Lemke, Network Computing Devices, Inc
- */
-/* $XFree86: xc/lib/font/fc/fsio.h,v 1.6 2001/01/17 19:43:29 dawes Exp $ */
-
-#ifndef _FSIO_H_
-#define _FSIO_H_
-
-#undef DEBUG
-#define REQUEST_LOG_SIZE 100
-
-typedef struct _fs_fpe_alternate {
- char *name;
- Bool subset;
-} FSFpeAltRec, *FSFpeAltPtr;
-
-
-/* Per client access contexts */
-typedef struct _fs_client_data {
- pointer client;
- struct _fs_client_data *next;
- XID acid;
- int auth_generation;
-} FSClientRec, *FSClientPtr;
-
-#define FS_RECONNECT_POLL 1000
-#define FS_RECONNECT_WAIT 5000
-#define FS_GIVEUP_WAIT 20000
-#define FS_REQUEST_TIMEOUT 20000
-#define FS_OPEN_TIMEOUT 30000
-#define FS_REOPEN_TIMEOUT 10000
-#define FS_FLUSH_POLL 1000
-
-typedef struct _fs_buf {
- char *buf; /* data */
- long size; /* sizeof data */
- long insert; /* where to insert new data */
- long remove; /* where to remove old data */
-} FSBufRec, *FSBufPtr;
-
-#define FS_BUF_INC 1024
-#define FS_BUF_MAX 32768
-
-#define FS_PENDING_WRITE 0x01 /* some write data is queued */
-#define FS_BROKEN_WRITE 0x02 /* writes are broken */
-#define FS_BROKEN_CONNECTION 0x04 /* connection is broken */
-#define FS_PENDING_REPLY 0x08 /* waiting for a reply */
-#define FS_GIVE_UP 0x10 /* font server declared useless */
-#define FS_COMPLETE_REPLY 0x20 /* complete reply ready */
-#define FS_RECONNECTING 0x40
-
-#define FS_CONN_UNCONNECTED 0
-#define FS_CONN_CONNECTING 1
-#define FS_CONN_CONNECTED 2
-#define FS_CONN_SENT_PREFIX 3
-#define FS_CONN_RECV_INIT 4
-#define FS_CONN_SENT_CAT 5
-#define FS_CONN_RUNNING 6
-
-/* FS specific font FontPathElement data */
-typedef struct _fs_fpe_data {
- FSFpePtr next; /* list of all active fs fpes */
- int fs_fd; /* < 0 when not running */
- int fs_conn_state; /* connection state */
- int current_seq;
- char *servername;
- Bool has_catalogues;
-
- int generation;
- int numAlts;
- int alternate; /* which alternate is in use +1 */
- int fsMajorVersion; /* font server major version number */
- FSFpeAltPtr alts;
-
- FSClientPtr clients;
- XID curacid;
-#ifdef DEBUG
- int reqindex;
- struct {
- int opcode;
- int sequence;
- } reqbuffer[REQUEST_LOG_SIZE];
-#endif
- FSBufRec outBuf; /* request queue */
- FSBufRec inBuf; /* reply queue */
- long inNeed; /* amount needed for reply */
-
- CARD32 blockState;
- CARD32 blockedReplyTime; /* time to abort blocked read */
- CARD32 brokenWriteTime; /* time to retry broken write */
- CARD32 blockedConnectTime; /* time to abort blocked connect */
- CARD32 brokenConnectionTime; /* time to retry broken connection */
-
- FSBlockDataPtr blockedRequests;
-
- struct _XtransConnInfo *trans_conn; /* transport connection object */
-} FSFpeRec;
-
-#define fs_outspace(conn) ((conn)->outBuf.size - (conn)->outBuf.insert)
-#define fs_outqueued(conn) ((conn)->outBuf.insert - (conn)->outBuf.remove)
-#define fs_inqueued(conn) ((conn)->inBuf.insert - (conn)->inBuf.remove)
-#define fs_needsflush(conn) (fs_outqueued(conn) != 0)
-#define fs_needsfill(conn) (fs_inqueued(conn) < (conn)->inNeed)
-#define fs_needsconnect(conn) ((conn)->fs_fd < 0)
-#define fs_data_read(conn) ((conn)->inBuf.insert - (conn)->inBuf.remove)
-
-#define FSIO_READY 1
-#define FSIO_BLOCK 0
-#define FSIO_ERROR -1
-
-extern Bool _fs_reopen_server ( FSFpePtr conn );
-extern int _fs_write ( FSFpePtr conn, char *data, long size );
-extern int _fs_write_pad ( FSFpePtr conn, char *data, long len );
-extern int _fs_data_ready ( FSFpePtr conn );
-extern int _fs_wait_for_readable ( FSFpePtr conn, int ms );
-extern int _fs_set_bit ( fd_set * mask, int fd );
-extern int _fs_is_bit_set ( fd_set * mask, int fd );
-extern void _fs_bit_clear ( fd_set * mask, int fd );
-extern int _fs_any_bit_set ( fd_set * mask );
-extern void _fs_or_bits ( fd_set * dst, fd_set * m1, fd_set * m2 );
-extern long _fs_pad_length (long len);
-
-extern void _fs_connection_died ( FSFpePtr conn );
-
-extern int _fs_fill (FSFpePtr conn);
-extern int _fs_flush (FSFpePtr conn);
-extern void _fs_mark_block (FSFpePtr conn, CARD32 mask);
-extern void _fs_unmark_block (FSFpePtr conn, CARD32 mask);
-extern void _fs_done_read (FSFpePtr conn, long size);
-extern void _fs_io_reinit (FSFpePtr conn);
-extern int _fs_start_read (FSFpePtr conn, long size, char **buf);
-extern Bool _fs_io_init (FSFpePtr conn);
-extern void _fs_io_fini (FSFpePtr conn);
-extern int _fs_poll_connect (XtransConnInfo trans_conn, int timeout);
-extern XtransConnInfo _fs_connect(char *servername, int *ret);
-
-/* check for both EAGAIN and EWOULDBLOCK, because some supposedly POSIX
- * systems are broken and return EWOULDBLOCK when they should return EAGAIN
- */
-#ifdef WIN32
-#define ETEST() (WSAGetLastError() == WSAEWOULDBLOCK)
-#else
-#if defined(EAGAIN) && defined(EWOULDBLOCK)
-#define ETEST() (errno == EAGAIN || errno == EWOULDBLOCK)
-#else
-#ifdef EAGAIN
-#define ETEST() (errno == EAGAIN)
-#else
-#define ETEST() (errno == EWOULDBLOCK)
-#endif
-#endif
-#endif
-#ifdef WIN32
-#define ECHECK(err) (WSAGetLastError() == err)
-#define ESET(val) WSASetLastError(val)
-#else
-#ifdef ISC
-#define ECHECK(err) ((errno == err) || ETEST())
-#else
-#define ECHECK(err) (errno == err)
-#endif
-#define ESET(val) errno = val
-#endif
-
-#endif /* _FSIO_H_ */
diff --git a/nx-X11/lib/font/fc/fslibos.h b/nx-X11/lib/font/fc/fslibos.h
deleted file mode 100644
index dd266bdc4..000000000
--- a/nx-X11/lib/font/fc/fslibos.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/* $Xorg: fslibos.h,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-/*
- * Copyright 1990 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- */
-
-/*
-
-Copyright 1987, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fc/fslibos.h,v 3.8 2003/08/29 18:01:14 herrb Exp $ */
-
-/*
- * FSlib networking & os include file
- */
-
-#include <X11/Xtrans/Xtrans.h>
-
-#ifndef WIN32
-
-/*
- * makedepend screws up on #undef OPEN_MAX, so we define a new symbol
- */
-
-#ifndef FONT_OPEN_MAX
-
-#ifndef X_NOT_POSIX
-# ifdef _POSIX_SOURCE
-# include <limits.h>
-# else
-# define _POSIX_SOURCE
-# include <limits.h>
-# undef _POSIX_SOURCE
-# endif
-#endif
-#ifndef SIZE_MAX
-# ifdef ULONG_MAX
-# define SIZE_MAX ULONG_MAX
-# else
-# define SIZE_MAX UINT_MAX
-# endif
-#endif
-#ifndef OPEN_MAX
-#if defined(SVR4) || defined(__UNIXOS2__)
-#define OPEN_MAX 256
-#else
-#include <sys/param.h>
-#ifndef OPEN_MAX
-#ifdef __OSF1__
-#define OPEN_MAX 256
-#else
-#ifdef NOFILE
-#define OPEN_MAX NOFILE
-#else
-#define OPEN_MAX NOFILES_MAX
-#endif
-#endif
-#endif
-#endif
-#endif
-
-#if OPEN_MAX > 256
-#define FONT_OPEN_MAX 256
-#else
-#define FONT_OPEN_MAX OPEN_MAX
-#endif
-
-#endif /* FONT_OPEN_MAX */
-
-#define NMSKBITS 32
-
-#define MSKCNT ((FONT_OPEN_MAX + NMSKBITS - 1) / NMSKBITS)
-
-typedef unsigned long FdSet[MSKCNT];
-typedef FdSet FdSetPtr;
-
-#if (MSKCNT==1)
-#define BITMASK(i) (1 << (i))
-#define MASKIDX(i) 0
-#endif
-
-#if (MSKCNT>1)
-#define BITMASK(i) (1 << ((i) & (NMSKBITS - 1)))
-#define MASKIDX(i) ((i) / NMSKBITS)
-#endif
-
-#define MASKWORD(buf, i) buf[MASKIDX(i)]
-#define BITSET(buf, i) MASKWORD(buf, i) |= BITMASK(i)
-#define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i)
-#define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i))
-
-#if (MSKCNT==1)
-#define COPYBITS(src, dst) dst[0] = src[0]
-#define CLEARBITS(buf) buf[0] = 0
-#define MASKANDSETBITS(dst, b1, b2) dst[0] = (b1[0] & b2[0])
-#define ORBITS(dst, b1, b2) dst[0] = (b1[0] | b2[0])
-#define UNSETBITS(dst, b1) (dst[0] &= ~b1[0])
-#define ANYSET(src) (src[0])
-#endif
-
-#if (MSKCNT==2)
-#define COPYBITS(src, dst) { dst[0] = src[0]; dst[1] = src[1]; }
-#define CLEARBITS(buf) { buf[0] = 0; buf[1] = 0; }
-#define MASKANDSETBITS(dst, b1, b2) {\
- dst[0] = (b1[0] & b2[0]);\
- dst[1] = (b1[1] & b2[1]); }
-#define ORBITS(dst, b1, b2) {\
- dst[0] = (b1[0] | b2[0]);\
- dst[1] = (b1[1] | b2[1]); }
-#define UNSETBITS(dst, b1) {\
- dst[0] &= ~b1[0]; \
- dst[1] &= ~b1[1]; }
-#define ANYSET(src) (src[0] || src[1])
-#endif
-
-#if (MSKCNT==3)
-#define COPYBITS(src, dst) { dst[0] = src[0]; dst[1] = src[1]; \
- dst[2] = src[2]; }
-#define CLEARBITS(buf) { buf[0] = 0; buf[1] = 0; buf[2] = 0; }
-#define MASKANDSETBITS(dst, b1, b2) {\
- dst[0] = (b1[0] & b2[0]);\
- dst[1] = (b1[1] & b2[1]);\
- dst[2] = (b1[2] & b2[2]); }
-#define ORBITS(dst, b1, b2) {\
- dst[0] = (b1[0] | b2[0]);\
- dst[1] = (b1[1] | b2[1]);\
- dst[2] = (b1[2] | b2[2]); }
-#define UNSETBITS(dst, b1) {\
- dst[0] &= ~b1[0]; \
- dst[1] &= ~b1[1]; \
- dst[2] &= ~b1[2]; }
-#define ANYSET(src) (src[0] || src[1] || src[2])
-#endif
-
-#if (MSKCNT==4)
-#define COPYBITS(src, dst) dst[0] = src[0]; dst[1] = src[1]; \
- dst[2] = src[2]; dst[3] = src[3]
-#define CLEARBITS(buf) buf[0] = 0; buf[1] = 0; buf[2] = 0; buf[3] = 0
-#define MASKANDSETBITS(dst, b1, b2) \
- dst[0] = (b1[0] & b2[0]);\
- dst[1] = (b1[1] & b2[1]);\
- dst[2] = (b1[2] & b2[2]);\
- dst[3] = (b1[3] & b2[3])
-#define ORBITS(dst, b1, b2) \
- dst[0] = (b1[0] | b2[0]);\
- dst[1] = (b1[1] | b2[1]);\
- dst[2] = (b1[2] | b2[2]);\
- dst[3] = (b1[3] | b2[3])
-#define UNSETBITS(dst, b1) \
- dst[0] &= ~b1[0]; \
- dst[1] &= ~b1[1]; \
- dst[2] &= ~b1[2]; \
- dst[3] &= ~b1[3]
-#define ANYSET(src) (src[0] || src[1] || src[2] || src[3])
-#endif
-
-#if (MSKCNT>4)
-#define COPYBITS(src, dst) memmove((caddr_t) dst, (caddr_t) src,\
- MSKCNT*sizeof(long))
-#define CLEARBITS(buf) bzero((caddr_t) buf, MSKCNT*sizeof(long))
-#define MASKANDSETBITS(dst, b1, b2) \
- { int cri; \
- for (cri=MSKCNT; --cri>=0; ) \
- dst[cri] = (b1[cri] & b2[cri]); }
-#define ORBITS(dst, b1, b2) \
- { int cri; \
- for (cri=MSKCNT; --cri>=0; ) \
- dst[cri] = (b1[cri] | b2[cri]); }
-#define UNSETBITS(dst, b1) \
- { int cri; \
- for (cri=MSKCNT; --cri>=0; ) \
- dst[cri] &= ~b1[cri]; }
-#if (MSKCNT==8)
-#define ANYSET(src) (src[0] || src[1] || src[2] || src[3] || \
- src[4] || src[5] || src[6] || src[7])
-#endif
-#endif
-
-#else /* not WIN32 */
-
-#include <X11/Xwinsock.h>
-#include <X11/Xw32defs.h>
-
-typedef fd_set FdSet;
-typedef FdSet *FdSetPtr;
-
-#define CLEARBITS(set) FD_ZERO(&set)
-#define BITSET(set,s) FD_SET(s,&set)
-#define BITCLEAR(set,s) FD_CLR(s,&set)
-#define GETBIT(set,s) FD_ISSET(s,&set)
-#define ANYSET(set) set->fd_count
-
-#endif
diff --git a/nx-X11/lib/font/fontcache/Imakefile b/nx-X11/lib/font/fontcache/Imakefile
deleted file mode 100644
index 1c8526d6c..000000000
--- a/nx-X11/lib/font/fontcache/Imakefile
+++ /dev/null
@@ -1,29 +0,0 @@
-XCOMM Id: Imakefile,v 1.2 1999/01/31 13:02:46 akiyama Exp $
-
-
-
-XCOMM $XFree86$
-
-#include <Server.tmpl>
-
-#if BuildFontCache
-FONTCACHE_DEFINES = FontCacheExtensionDefines
-#endif
- INCLUDES = -I. -I$(FONTINCSRC) -I../include
- HEADERS =
- SRCS = fontcache.c
- OBJS = fontcache.o
-
-#define DoNormalLib NormalLibFont
-#define DoSharedLib SharedLibFont
-#define DoDebugLib DebugLibFont
-#define DoProfileLib ProfileLibFont
-#include <Library.tmpl>
-LibraryObjectRule()
-
-SpecialCLibObjectRule(fontcache,$(ICONFIGFILES),$(FONTCACHE_DEFINES))
-
-SubdirLibraryRule($(OBJS))
-NormalLintTarget($(SRCS))
-
-DependTarget()
diff --git a/nx-X11/lib/font/fontcache/fcqueue.h b/nx-X11/lib/font/fontcache/fcqueue.h
deleted file mode 100644
index 58ba6dfa1..000000000
--- a/nx-X11/lib/font/fontcache/fcqueue.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 1991, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)queue.h 8.5 (Berkeley) 8/20/94
- * $_Id_: queue.h,v 1.10.2.4 1998/05/12 16:35:25 bde Exp $
- *
- * ----------------------------------------------------------------------
- *
- * Note:
- * This header file derived from FreeBSD-2.2.7
- * /usr/include/sys/queue.h, modified for X-TrueType Server by
- * Shunsuke Akiyama <akiyama@jp.FreeBSD.org>.
- *
- * Id: fcqueue.h,v 1.1 1999/01/06 13:36:42 akiyama Exp $
- */
-
-#ifndef _FCQUEUE_H_
-#define _FCQUEUE_H_
-
-/*
- * Tail queue definitions.
- */
-#define TAILQ_HEAD(name, type) \
-struct name { \
- struct type *tqh_first; /* first element */ \
- struct type **tqh_last; /* addr of last next element */ \
-}
-
-#define TAILQ_HEAD_INITIALIZER(head) \
- { NULL, &(head).tqh_first }
-
-#define TAILQ_ENTRY(type) \
-struct { \
- struct type *tqe_next; /* next element */ \
- struct type **tqe_prev; /* address of previous next element */ \
-}
-
-/*
- * Tail queue functions.
- */
-#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
-
-#define TAILQ_FOREACH(var, head, field) \
- for (var = TAILQ_FIRST(head); var; var = TAILQ_NEXT(var, field))
-
-#define TAILQ_FIRST(head) ((head)->tqh_first)
-
-#define TAILQ_LAST(head, headname) \
- (*(((struct headname *)((head)->tqh_last))->tqh_last))
-
-#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
-
-#define TAILQ_PREV(elm, headname, field) \
- (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
-
-#define TAILQ_INIT(head) do { \
- (head)->tqh_first = NULL; \
- (head)->tqh_last = &(head)->tqh_first; \
-} while (0)
-
-#define TAILQ_INSERT_HEAD(head, elm, field) do { \
- if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \
- (head)->tqh_first->field.tqe_prev = \
- &(elm)->field.tqe_next; \
- else \
- (head)->tqh_last = &(elm)->field.tqe_next; \
- (head)->tqh_first = (elm); \
- (elm)->field.tqe_prev = &(head)->tqh_first; \
-} while (0)
-
-#define TAILQ_INSERT_TAIL(head, elm, field) do { \
- (elm)->field.tqe_next = NULL; \
- (elm)->field.tqe_prev = (head)->tqh_last; \
- *(head)->tqh_last = (elm); \
- (head)->tqh_last = &(elm)->field.tqe_next; \
-} while (0)
-
-#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
- if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
- (elm)->field.tqe_next->field.tqe_prev = \
- &(elm)->field.tqe_next; \
- else \
- (head)->tqh_last = &(elm)->field.tqe_next; \
- (listelm)->field.tqe_next = (elm); \
- (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \
-} while (0)
-
-#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
- (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
- (elm)->field.tqe_next = (listelm); \
- *(listelm)->field.tqe_prev = (elm); \
- (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \
-} while (0)
-
-#define TAILQ_REMOVE(head, elm, field) do { \
- if (((elm)->field.tqe_next) != NULL) \
- (elm)->field.tqe_next->field.tqe_prev = \
- (elm)->field.tqe_prev; \
- else \
- (head)->tqh_last = (elm)->field.tqe_prev; \
- *(elm)->field.tqe_prev = (elm)->field.tqe_next; \
-} while (0)
-
-#endif /* _FCQUEUE_H_ */
diff --git a/nx-X11/lib/font/fontcache/fontcache.c b/nx-X11/lib/font/fontcache/fontcache.c
deleted file mode 100644
index 40cfd63c2..000000000
--- a/nx-X11/lib/font/fontcache/fontcache.c
+++ /dev/null
@@ -1,1022 +0,0 @@
-/*-
- * Copyright (c) 1998-1999 Shunsuke Akiyama <akiyama@jp.FreeBSD.org>.
- * All rights reserved.
- * Copyright (c) 1998-1999 X-TrueType Server Project, All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Id: fontcache.c,v 1.19 1999/01/31 13:06:00 akiyama Exp $
- */
-/* $XFree86: xc/lib/font/fontcache/fontcache.c,v 1.4 2001/04/05 17:42:28 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "fontcache.h"
-
-#define LOW_MARK 0
-#define HI_MARK 1
-
-#define PURGE_ENTRY 1
-#define PURGE_BITMAP 2
-
-typedef struct {
- long hiMark; /* Cache hi water mark */
- long lowMark; /* Cache low water mark */
- long allocated; /* Cache allocated size */
- long used; /* Cache used size */
-} FontCacheSize_t;
-
-static int CacheInitialized = 0;
-
-static TAILQ_HEAD(FcInUseQueue, cache_entry) InUseQueueHead, *InUseQueue;
-static TAILQ_HEAD(FcFreeQueue, cache_entry) FreeQueueHead, *FreeQueue;
-static FCBCB FreeBitmapHead, *FreeBitmap;
-
-static long CacheHiMark;
-static long CacheLowMark;
-static int CacheBalance;
-static FontCacheSize_t HashSize;
-static FontCacheSize_t AllocSize;
-static int NeedPurgeCache;
-static FontCacheStatistics CacheStatistics;
-
-static void fc_assign_cache(void);
-static int fc_assign_entry(void);
-static void fc_flush_cache(void);
-static int fc_get_bitmap_area(FontCacheEntryPtr, int);
-static void fc_free_bitmap_area(FontCacheBitmapPtr);
-static int fc_check_size(int);
-static void fc_purge_cache(void);
-static void fc_purge_bitmap(void);
-static void fc_flush_cache_bitmap(void);
-static void fc_flush_cache_inuse(void);
-static void fc_flush_cache_free(void);
-static void fc_purge_cache_entry(void);
-static void fc_purge_cache_entry_pool(void);
-static void fc_purge_bitmap_pool(void);
-
-
-/*
- * FontCacheInitialize()
- *
- * Initialize cache work area.
- */
-
-int
-FontCacheInitialize()
-{
-#ifdef FONTCACHE
- int i;
-
- if (!CacheInitialized) {
- /*
- * first time initialization
- */
-#if defined(HASH_DEBUG) || defined(DEBUG)
- fprintf(stderr, "FontCacheInitialize: initializing cache\n");
-#endif
- InUseQueue = &InUseQueueHead;
- TAILQ_INIT(InUseQueue);
-
- FreeQueue = &FreeQueueHead;
- TAILQ_INIT(FreeQueue);
-
- FreeBitmap = &FreeBitmapHead;
- FreeBitmap->index = 0;
- for (i = 0; i < FC_MEM_HASH_SIZE; i++) {
- TAILQ_INIT(&FreeBitmap->head[i]);
- }
-
- CacheHiMark = FC_DEFAULT_CACHE_SIZE * 1024; /* temporary */
- CacheLowMark = (CacheHiMark / 4) * 3;
- CacheBalance = FC_CACHE_BALANCE;
-
- NeedPurgeCache = 0;
-
- HashSize.allocated = HashSize.used = 0;
- AllocSize.allocated = AllocSize.used = 0;
- fc_assign_cache();
- fc_assign_entry();
-#if defined(DEBUG)
- fprintf(stderr, "FontCacheInitialize: hi=%ld, lo=%ld, bal=%d\n",
- CacheHiMark, CacheLowMark, CacheBalance);
-#endif
-
- CacheInitialized = 1;
- } else {
- /*
- * second time or later case.
- * flush and reassign cache.
- */
-#if defined(HASH_DEBUG) || defined(DEBUG)
- fprintf(stderr, "FontCacheInitialize: initializing cache, again\n");
-#endif
- }
-
- memset(&CacheStatistics, 0, sizeof (CacheStatistics));
-#endif /* FONTCACHE */
-
- return 0; /* make lint happy */
-}
-
-/*
- * FontCacheChangeSettings()
- *
- * Change cache size and reinitialize work areas.
- *
- * Returns 0, if memory allocation failed. Otherwise 1.
- */
-
-int
-FontCacheChangeSettings(FontCacheSettingsPtr cs)
-{
- int result;
-
- if (!CacheInitialized) {
- FontCacheInitialize();
- if (!CacheInitialized)
- return 0;
- }
-
-#if defined(HASH_DEBUG) || defined(DEBUG)
-fprintf(stderr,
- "FontCahceChangeSettings: hi-mark=%ld, low-mark=%ld, balance=%ld\n",
- cs->himark, cs->lowmark, cs->balance);
-#endif
-
- fc_flush_cache();
-
- CacheHiMark = cs->himark;
- CacheLowMark = cs->lowmark;
- CacheBalance = cs->balance;
-
- fc_assign_cache();
- result = fc_assign_entry();
-
- return result;
-}
-
-/*
- * FontCacheGetSettings()
- *
- * Get current cache control parameters.
- */
-
-void
-FontCacheGetSettings(FontCacheSettingsPtr cs)
-{
- if (!CacheInitialized) {
- FontCacheInitialize();
- if (!CacheInitialized)
- return;
- }
-
- cs->himark = CacheHiMark;
- cs->lowmark = CacheLowMark;
- cs->balance = CacheBalance;
-}
-
-/*
- * FontCacheGetStatistics()
- *
- * Get current cache statistics.
- */
-
-void
-FontCacheGetStatistics(FontCacheStatisticsPtr cs)
-{
- if (!CacheInitialized) {
- FontCacheInitialize();
- if (!CacheInitialized)
- return;
- }
-
- CacheStatistics.purge_stat = NeedPurgeCache;
- CacheStatistics.balance = CacheBalance;
- CacheStatistics.f.usage = HashSize.used;
- CacheStatistics.v.usage = AllocSize.used;
-
- memcpy(cs, &CacheStatistics, sizeof (CacheStatistics));
-}
-
-/*
- * FontCacheOpenCache()
- *
- * Allocate font cache control block and initialize it.
- *
- * Returns pointer to font cache control block. Or returns NULL when
- * detected illegal parameter or memory allocation failed.
- */
-
-FCCBPtr
-FontCacheOpenCache(void *arg)
-{
- int linesize;
- FCCBPtr this;
- int size = 0, mask = 0;
- int i;
-
- static int sizes[] = { 16, 32, 64, 128, 0 };
-
- if (!CacheInitialized) {
- FontCacheInitialize();
- if (!CacheInitialized)
- return NULL;
- }
-
- linesize = (long)arg;
-#if defined(HASH_DEBUG) || defined(DEBUG)
-fprintf(stderr, "FontCacheOpenCache: line size=%d\n", linesize);
-#endif
-
- for (i = 0; sizes[i] != 0; i++) {
- if (sizes[i] == linesize) {
- size = linesize;
- mask = linesize - 1;
- break;
- }
- }
- if (sizes[i] == 0) {
- return NULL;
- }
-
- this = (FCCBPtr) malloc(sizeof (FCCB));
- if (this != NULL) {
- memset(this, 0, sizeof (FCCB));
- this->head = (FontCacheHeadPtr) malloc(sizeof (FontCacheHead) * size);
- if (this->head == NULL) {
- free(this);
- this = NULL;
- } else {
- this->size = size;
- this->mask = mask;
- for (i = 0; i < size; i++) {
- TAILQ_INIT(&this->head[i]);
- }
- }
- }
-
- return this;
-}
-
-/*
- * FontCacheCloseCache()
- *
- * Release font cache control block and all it's related entries.
- */
-
-void
-FontCacheCloseCache(FCCBPtr this)
-{
- FontCacheEntryPtr entry, next;
- int i;
- int size;
-
- if (!CacheInitialized) {
- return;
- }
-
- size = this->size;
- for (i = 0; i < size; i++) {
- entry = TAILQ_FIRST(&this->head[i]);
- while (entry != NULL) {
- /* remove entry from in-use queue, here */
- TAILQ_REMOVE(InUseQueue, entry, c_lru);
-
- /* remove entry from the hash */
- if (entry->bitmapsize > FC_SMALL_BITMAP_SIZE
- && entry->charInfo.bits != NULL) {
- fc_free_bitmap_area(entry->bmp);
- }
- entry->charInfo.bits = NULL;
- entry->bitmapsize = 0;
-
- next = TAILQ_NEXT(entry, c_hash);
- TAILQ_INSERT_HEAD(FreeQueue, entry, c_lru);
- HashSize.used -= sizeof (FontCacheEntry);
- entry = next;
- }
- }
-
- free(this->head);
- free(this);
-}
-
-/*
- * FontCacheGetEntry()
- *
- * Allocate font cache entry and initialize it.
- */
-
-FontCacheEntryPtr
-FontCacheGetEntry()
-{
- FontCacheEntryPtr entry;
- FontCacheEntryPtr p;
- long size;
-
- /* scan in-use queue and purge if required */
- fc_purge_cache();
-
- /* allocate hash entry */
- if (TAILQ_EMPTY(FreeQueue)) {
- size = sizeof (FontCacheEntry);
- p = (FontCacheEntryPtr) malloc(size);
- if (p != NULL) {
- TAILQ_INSERT_HEAD(FreeQueue, p, c_lru);
- HashSize.allocated += size;
-#if defined(HASH_DEBUG) || defined(DEBUG)
-fprintf(stderr, "FontCachegetEntry: allocated new entry\n");
-#endif
- }
- }
-
- if (!TAILQ_EMPTY(FreeQueue)) {
- entry = TAILQ_FIRST(FreeQueue);
- TAILQ_REMOVE(FreeQueue, entry, c_lru);
- memset(entry, 0, sizeof (FontCacheEntry));
- } else {
- entry = NULL;
- }
-
- return entry;
-}
-
-/*
- * FontCacheGetBitmap()
- *
- * Allocate font glyph bitmap area.
- *
- * Note:
- * Allocated area should be cleared.
- */
-
-int
-FontCacheGetBitmap(FontCacheEntryPtr entry, int size)
-{
- int oldsize;
- int result;
-
- /* XXX */
- if ((AllocSize.used > AllocSize.hiMark - size) &&
- (size > FC_SMALL_BITMAP_SIZE)) {
- fc_purge_bitmap();
- }
-
- if (size < 0) /* wrong size */
- return 0;
-
- result = 0;
- oldsize = entry->bitmapsize;
- if (size <= FC_SMALL_BITMAP_SIZE) {
- /* use coresponding bitmap area */
- if (oldsize > FC_SMALL_BITMAP_SIZE) {
- /* We don't need allocated area anymore */
- fc_free_bitmap_area(entry->bmp);
- }
- entry->bitmapsize = size;
- if (size > 0) {
- entry->charInfo.bits = entry->bitmap;
- memset(entry->charInfo.bits, 0, size);
- } else
- entry->charInfo.bits = NULL;
-
- result = 1;
- } else {
- /* need extra bitmap area */
- if (entry->charInfo.bits == NULL) {
- /* no any extra bitmap area */
- if (fc_get_bitmap_area(entry, size)) {
- entry->bitmapsize = size;
- memset(entry->charInfo.bits, 0, size);
- if (fc_check_size(HI_MARK)) {
- fc_purge_cache();
- }
- result = 1;
- }
- } else {
- /* we already have extra bitmap area */
- if (oldsize == size) {
- /* same size, reuse it */
- memset(entry->charInfo.bits, 0, size);
- result = 1;
- } else {
- /* different size */
- fc_free_bitmap_area(entry->bmp);
- if (fc_get_bitmap_area(entry, size)) {
- entry->bitmapsize = size;
- memset(entry->charInfo.bits, 0, size);
- if (fc_check_size(HI_MARK)) {
- fc_purge_cache();
- }
- result = 1;
- }
- }
- }
- }
-
- return result;
-}
-
-/*
- * FontCacheSearchEntry()
- *
- * Search an entry matched with the key from the hash.
- */
-
-int
-FontCacheSearchEntry(FCCBPtr this, int key, FontCacheEntryPtr *value)
-{
- FontCacheHeadPtr head;
- FontCacheEntryPtr entry;
- int index;
-
- index = key & this->mask;
- head = &this->head[index];
-
- TAILQ_FOREACH(entry, head, c_hash) {
- if (entry->key == key) {
- /* found, change position */
- CacheStatistics.f.hits++;
-
- TAILQ_REMOVE(InUseQueue, entry, c_lru);
- TAILQ_INSERT_HEAD(InUseQueue, entry, c_lru);
-
- TAILQ_REMOVE(head, entry, c_hash);
- TAILQ_INSERT_HEAD(head, entry, c_hash);
-
- /* purge least recentrly used cache entirs */
- fc_purge_cache();
-
- *value = entry;
- return 1;
- }
- }
-
- /* purge least recentrly used cache entirs */
- fc_purge_cache();
-
- /* not found */
- CacheStatistics.f.misshits++;
- *value = NULL;
- return 0;
-}
-
-/*
- * FontCacheInsertEntry()
- *
- * Insert an entry into the cache pool.
- */
-
-int
-FontCacheInsertEntry(FCCBPtr this, int key, FontCacheEntryPtr entry)
-{
- FontCacheHeadPtr head;
- int index;
-
- index = key & this->mask;
- head = &this->head[index];
-
- entry->key = key;
- entry->c_head = head;
- TAILQ_INSERT_HEAD(head, entry, c_hash);
-
- /* insert entry into in-use queue */
- TAILQ_INSERT_HEAD(InUseQueue, entry, c_lru);
-
- /* adjust cache in-use size */
- HashSize.used += sizeof (FontCacheEntry);
- if (fc_check_size(HI_MARK)) {
- fc_purge_cache();
- }
-
- return 1;
-}
-
-/*
- * fc_assign_cache()
- *
- * Assign cache size considered with cache balance rate.
- */
-
-static void
-fc_assign_cache()
-{
- HashSize.hiMark = (CacheHiMark * CacheBalance) / 100;
- HashSize.lowMark = (CacheLowMark * CacheBalance) / 100;
-
- AllocSize.hiMark = (CacheHiMark * (100 - CacheBalance)) / 100;
- AllocSize.lowMark = (CacheLowMark * (100 - CacheBalance)) / 100;
-}
-
-/*
- * fc_assign_entry()
- *
- * Assign cache entry into free queue.
- *
- * Returns 0, when memory allocation failed. Otherwise 1.
- */
-
-static int
-fc_assign_entry()
-{
- FontCacheEntryPtr entry;
- long used;
- int result = 1;
-
- used = 0;
- while ((used + sizeof (FontCacheEntry)) < HashSize.hiMark) {
- entry = (FontCacheEntryPtr) malloc(sizeof (FontCacheEntry));
- if (entry == NULL) {
- fprintf(stderr, "fc_assign_entry: can't allocate memory.\n");
- result = 0;
- break;
- }
- TAILQ_INSERT_HEAD(FreeQueue, entry, c_lru);
- used += sizeof (FontCacheEntry);
- HashSize.allocated += sizeof (FontCacheEntry);
- }
-
- return result;
-}
-
-/*
- * fc_get_bitmap_area()
- *
- * Search allocated memory area from free bitmap hash pool. If there
- * is no entry, then allocate new bitmap area.
- *
- * Returns 0, when memory allocation failed, otherwise 1. And some
- * sort of cache entry structure members were updated.
- */
-
-static int
-fc_get_bitmap_area(FontCacheEntryPtr this, int size)
-{
- FontCacheBitmapHeadPtr head;
- FontCacheBitmapPtr bitmap;
- int index;
- int result = 0;
-
- index = size & FC_MEM_HASH_MASK;
- head = &FreeBitmap->head[index];
- TAILQ_FOREACH(bitmap, head, b_hash) {
- if (bitmap->key == size) {
- TAILQ_REMOVE(head, bitmap, b_hash);
- this->bmp = bitmap;
- this->charInfo.bits = (char *) (bitmap + 1);
- bitmap->b_entry = this;
- result = 1;
- CacheStatistics.v.hits++;
- AllocSize.used += (size + sizeof (FontCacheBitmap));
-#if defined(HASH_DEBUG) || defined(DEBUG)
-fprintf(stderr, "fc_get_bitmap_area: bitmap entry found in pool\n");
-#endif
- break;
- }
- }
-
- if (result == 0) {
- CacheStatistics.v.misshits++;
- bitmap = (FontCacheBitmapPtr) malloc(size + sizeof (FontCacheBitmap));
- if (bitmap != NULL) {
- bitmap->b_entry = this;
- bitmap->size = size + sizeof (FontCacheBitmap);
- bitmap->key = size;
- this->bmp = bitmap;
- this->charInfo.bits = (char *) (bitmap + 1);
- AllocSize.allocated += (size + sizeof (FontCacheBitmap));
- AllocSize.used += (size + sizeof (FontCacheBitmap));
- result = 1;
-#if defined(HASH_DEBUG) || defined(DEBUG)
-fprintf(stderr, "fc_get_bitmap_area: bitmap entry allocated\n");
-#endif
- } else {
- this->bmp = NULL;
- this->charInfo.bits = NULL;
- }
- }
-
- return result;
-}
-
-/*
- * fc_free_bitmap_area()
- *
- * Release allocated bitmap area into free hash pool.
- */
-
-static void
-fc_free_bitmap_area(FontCacheBitmapPtr this)
-{
- FontCacheBitmapHeadPtr head;
- FontCacheEntryPtr entry;
- int index;
-
-#if defined(HASH_DEBUG) || defined(DEBUG)
-fprintf(stderr, "fc_free_bitmap_area: bitmap entry returns into pool\n");
-#endif
-
- index = this->key & FC_MEM_HASH_MASK;
- head = &FreeBitmap->head[index];
- TAILQ_INSERT_HEAD(head, this, b_hash);
-
- AllocSize.used -= this->size;
-
- entry = this->b_entry;
- entry->bmp = NULL;
- entry->bitmapsize = 0;
-}
-
-/*
- * fc_flush_cache_bitmap()
- *
- * Flush all allocated bitmap area from the free hash pool.
- */
-
-static void
-fc_flush_cache_bitmap()
-{
- FontCacheBitmapHeadPtr head;
- FontCacheBitmapPtr bitmap;
- int i;
-
- for (i = 0; i < FC_MEM_HASH_SIZE; i++) {
- head = &FreeBitmap->head[i];
- while (!TAILQ_EMPTY(head)) {
- bitmap = TAILQ_FIRST(head);
- TAILQ_REMOVE(head, bitmap, b_hash);
-
- AllocSize.allocated -= bitmap->size;
- free(bitmap);
- }
- }
-}
-
-/*
- * fc_flush_cache_inuse()
- *
- * Release all in-use cache entries.
- */
-
-static void
-fc_flush_cache_inuse()
-{
- FontCacheEntryPtr entry;
- FontCacheHeadPtr head;
-
- while (!TAILQ_EMPTY(InUseQueue)) {
- /* remove this entry from in-use queue */
- entry = TAILQ_FIRST(InUseQueue);
- TAILQ_REMOVE(InUseQueue, entry, c_lru);
-
- /* remove this entry from hash */
- head = entry->c_head;
- TAILQ_REMOVE(head, entry, c_hash);
-
- /* release bitmap area */
- if (entry->bitmapsize > FC_SMALL_BITMAP_SIZE
- && entry->charInfo.bits != NULL) {
- fc_free_bitmap_area(entry->bmp);
- }
- entry->charInfo.bits = NULL;
- entry->bitmapsize = 0;
-
- /* release font-specific private area */
- if ( entry->vfuncs && entry->vfuncs->f_private_dispose )
- (*entry->vfuncs->f_private_dispose)(entry->f_private);
- entry->f_private = NULL;
- entry->vfuncs = NULL;
-
- /* add this entry to free queue */
- TAILQ_INSERT_HEAD(FreeQueue, entry, c_lru);
-
- /* adjust size */
- HashSize.used -= sizeof (FontCacheEntry);
- }
-}
-
-/*
- * fc_flush_cache_free()
- *
- * Flush all free cache entries from the free cache queue.
- */
-
-static void
-fc_flush_cache_free()
-{
- FontCacheEntryPtr entry;
-
- /* release entire entries of the free queue */
- while (!TAILQ_EMPTY(FreeQueue)) {
- entry = TAILQ_FIRST(FreeQueue);
- TAILQ_REMOVE(FreeQueue, entry, c_lru);
- free(entry);
- HashSize.allocated -= sizeof (FontCacheEntry);
- }
-}
-
-/*
- * fc_flush_cache()
- *
- * Flush all cache entries and allocated bitmap area from the pool.
- */
-
-static void
-fc_flush_cache()
-{
- fc_flush_cache_inuse();
- fc_flush_cache_bitmap();
- fc_flush_cache_free();
-
- memset(&CacheStatistics, 0, sizeof (CacheStatistics));
-}
-
-/*
- * fc_check_size()
- *
- * Check cache size, then return it's result.
- */
-
-static int
-fc_check_size(int mark)
-{
- int result = 0;
-
- if (mark == LOW_MARK) {
- if (HashSize.used > HashSize.lowMark) {
- result |= PURGE_ENTRY;
- }
- if (AllocSize.used > AllocSize.lowMark) {
- result |= PURGE_BITMAP;
- }
- } else {
- if (HashSize.used > HashSize.hiMark) {
- result |= PURGE_ENTRY;
- }
- if (AllocSize.used > AllocSize.hiMark) {
- result |= PURGE_BITMAP;
- }
- }
-
- return result;
-}
-
-/*
- * fc_purge_cache_entry()
- *
- * Purge least recently used cache entry.
- */
-
-static void
-fc_purge_cache_entry()
-{
- FontCacheHeadPtr head;
- FontCacheEntryPtr entry;
- int i;
-
- for (i = 0; i < FC_PURGE_PER_SCAN; i++) {
- /* get least recently used entry */
- entry = TAILQ_LAST(InUseQueue, FcInUseQueue);
-
-#if defined(HASH_DEBUG) || defined(DEBUG)
-fprintf(stderr, "fc_purge_cache_entry: purged: %p, %d\n",
- entry, entry->key);
-#endif
-
- /* remove this entry from in-use queue */
- TAILQ_REMOVE(InUseQueue, entry, c_lru);
-
- /* remove this entry from the hash */
- head = entry->c_head;
- TAILQ_REMOVE(head, entry, c_hash);
-
- /* release bitmap area */
- if (entry->bitmapsize > FC_SMALL_BITMAP_SIZE
- && entry->charInfo.bits != NULL) {
- fc_free_bitmap_area(entry->bmp);
- CacheStatistics.v.purged++;
- }
- entry->charInfo.bits = NULL;
- entry->bitmapsize = 0;
-
- /* release font-specific private area */
- if ( entry->vfuncs && entry->vfuncs->f_private_dispose )
- (*entry->vfuncs->f_private_dispose)(entry->f_private);
- entry->f_private = NULL;
- entry->vfuncs = NULL;
-
- /* add this entry to free queue */
- TAILQ_INSERT_HEAD(FreeQueue, entry, c_lru);
-
- HashSize.used -= sizeof (FontCacheEntry);
- CacheStatistics.f.purged++;
- }
-}
-
-/*
- * fc_purge_cache_entry_pool()
- *
- * Purge free cache entries, to adjust cache size.
- */
-
-static void
-fc_purge_cache_entry_pool()
-{
- FontCacheEntryPtr entry;
-
- while (!TAILQ_EMPTY(FreeQueue)) {
- entry = TAILQ_LAST(FreeQueue, FcFreeQueue);
- TAILQ_REMOVE(FreeQueue, entry, c_lru);
-#if defined(HASH_DEBUG) || defined(DEBUG)
-fprintf(stderr, "fc_purge_cache_entry_pool: purged from free queue: %p\n",
- entry);
-#endif
- HashSize.allocated -= sizeof (FontCacheEntry);
- free(entry);
- if (HashSize.allocated <= HashSize.hiMark) {
- break;
- }
- }
-}
-
-/*
- * fc_purge_bitmap()
- *
- * Purge least recently used allocated bitmap area.
- */
-
-static void
-fc_purge_bitmap()
-{
- FontCacheEntryPtr entry, first;
- int purged = 0;
-
- /* release used entry, if required */
- first = TAILQ_FIRST(InUseQueue);
- if (first != NULL) {
- entry = TAILQ_LAST(InUseQueue, FcInUseQueue);
- while (purged < FC_PURGE_PER_SCAN) {
- if (entry->bmp != NULL) {
-#if defined(HASH_DEBUG) || defined(DEBUG)
-fprintf(stderr, "fc_purge_bitmap: purged from live queue: %p, %d(%d)\n",
- entry->bmp, entry->bmp->key, entry->bmp->size);
-#endif
- fc_free_bitmap_area(entry->bmp);
- entry->charInfo.bits = NULL;
- CacheStatistics.v.purged++;
- purged++;
- }
- if (entry == first) {
- break;
- }
- entry = TAILQ_PREV(entry, FcInUseQueue, c_lru);
- }
- }
-}
-
-/*
- * fc_purge_bitmap_pool()
- *
- * Purge free bitmap area from pool, to adjust cache size.
- */
-
-static void
-fc_purge_bitmap_pool()
-{
- int this, stop, quit;
- FontCacheBitmapHeadPtr head;
- FontCacheBitmapPtr bitmap;
-
- /* release free bitmap entry */
- this = FreeBitmap->index;
- stop = this;
- quit = 0;
-
- do {
- head = &FreeBitmap->head[this];
- while (!TAILQ_EMPTY(head)) {
- bitmap = TAILQ_LAST(head, fcmem_head);
- TAILQ_REMOVE(head, bitmap, b_hash);
-#if defined(HASH_DEBUG) || defined(DEBUG)
-fprintf(stderr, "fc_purge_bitmap_pool: purged from pool: %p, %d(%d)\n",
- bitmap, bitmap->key, bitmap->size);
-#endif
- AllocSize.allocated -= bitmap->size;
- free(bitmap);
- if (AllocSize.allocated <= AllocSize.hiMark) {
- quit = 1;
- break;
- }
- }
- this++;
- this &= FC_MEM_HASH_MASK;
- } while (this != stop && quit == 0);
-
- FreeBitmap->index++;
- FreeBitmap->index &= FC_MEM_HASH_MASK;
-}
-
-/*
- * fc_purge_cache()
- *
- * Purge font cache, if required.
- */
-
-static void
-fc_purge_cache()
-{
- int strategy;
-
- if (NeedPurgeCache) {
- strategy = fc_check_size(LOW_MARK);
- switch (strategy) {
- case PURGE_ENTRY :
- CacheStatistics.purge_runs++;
- fc_purge_cache_entry();
- break;
- case PURGE_BITMAP :
- CacheStatistics.purge_runs++;
- fc_purge_bitmap();
- break;
- case (PURGE_ENTRY | PURGE_BITMAP) :
- CacheStatistics.purge_runs++;
- fc_purge_cache_entry();
- fc_purge_bitmap();
- break;
- default :
- NeedPurgeCache = 0;
- break;
- }
- } else {
- strategy = fc_check_size(HI_MARK);
- switch (strategy) {
- case PURGE_ENTRY :
- if ((CacheBalance + FC_BALANCE_DIFFS) <= FC_BALANCE_HI) {
- CacheBalance += FC_BALANCE_DIFFS;
-#if defined(HASH_DEBUG) || defined(DEBUG)
-fprintf(stderr, "fc_purge_cache: cache balance changed to %d\n", CacheBalance);
-#endif
- fc_assign_cache();
- fc_purge_bitmap_pool();
- } else {
- CacheStatistics.purge_runs++;
- NeedPurgeCache = 1;
- while (fc_check_size(HI_MARK) & PURGE_ENTRY) {
- fc_purge_cache_entry();
- }
- }
- break;
- case PURGE_BITMAP :
- if ((CacheBalance - FC_BALANCE_DIFFS) >= FC_BALANCE_LOW) {
- CacheBalance -= FC_BALANCE_DIFFS;
-#if defined(HASH_DEBUG) || defined(DEBUG)
-fprintf(stderr, "fc_purge_cache: cache balance changed to %d\n", CacheBalance);
-#endif
- fc_assign_cache();
- fc_purge_cache_entry_pool();
- } else {
- CacheStatistics.purge_runs++;
- NeedPurgeCache = 1;
- while (fc_check_size(HI_MARK) & PURGE_BITMAP) {
- fc_purge_bitmap();
- }
- }
- break;
- case (PURGE_ENTRY | PURGE_BITMAP) :
- CacheStatistics.purge_runs++;
- NeedPurgeCache = 1;
- while (fc_check_size(HI_MARK)) {
- fc_purge_cache_entry();
- fc_purge_bitmap();
- }
- break;
- default :
- break;
- }
- }
-}
diff --git a/nx-X11/lib/font/fontcache/fontcache.h b/nx-X11/lib/font/fontcache/fontcache.h
deleted file mode 100644
index c95de25eb..000000000
--- a/nx-X11/lib/font/fontcache/fontcache.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*-
- * Copyright (c) 1998-1999 Shunsuke Akiyama <akiyama@jp.FreeBSD.org>.
- * All rights reserved.
- * Copyright (c) 1998-1999 X-TrueType Server Project, All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Id: fontcache.h,v 1.12 1999/01/09 06:24:30 akiyama Exp $
- */
-/* $XFree86: xc/lib/font/fontcache/fontcache.h,v 1.6 2002/11/08 00:46:27 alanh Exp $ */
-
-#ifndef _FONTCACHE_H_
-#define _FONTCACHE_H_
-
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/fontstruct.h>
-#include "fcqueue.h"
-#define _FONTCACHE_SERVER_
-#include <X11/extensions/fontcacheP.h>
-
-/* constant declarations */
-
-#ifndef FC_DEFAULT_CACHE_SIZE
-#define FC_DEFAULT_CACHE_SIZE 5120 /* in KB */
-#endif
-
-#define FC_CACHE_BALANCE 70 /* in percentage */
-#define FC_BALANCE_LOW 10 /* in percentage */
-#define FC_BALANCE_HI 90 /* in percentage */
-#define FC_BALANCE_DIFFS 5 /* in percentage */
-
-#define FC_SMALL_BITMAP_SIZE 128
-
-#define FC_MEM_HASH_SIZE 256
-#define FC_MEM_HASH_MASK (FC_MEM_HASH_SIZE - 1)
-
-#define FC_PURGE_PER_SCAN 2
-
-/* data type declarations */
-
-struct cache_entry;
-struct fcbitmap;
-
-TAILQ_HEAD(fchash_head, cache_entry);
-TAILQ_HEAD(fcmem_head, fcbitmap);
-
-struct fcbitmap {
- TAILQ_ENTRY(fcbitmap) b_hash;
- struct cache_entry *b_entry;
- int size;
- int key;
-};
-
-struct fc_entry_vfuncs {
- void (*f_private_dispose)(void *f_private);
-};
-
-struct cache_entry {
- TAILQ_ENTRY(cache_entry) c_hash; /* Hash chain. */
- TAILQ_ENTRY(cache_entry) c_lru; /* Font cache LRU list chain. */
- struct fchash_head *c_head; /* Pointer to head. */
- int key; /* hash key */
- CharInfoRec charInfo; /* CharInfo record */
- struct fcbitmap *bmp;
- void *f_private; /* Font-specific private data */
- struct fc_entry_vfuncs *vfuncs; /* virtual function table */
- int bitmapsize; /* Bitmap size */
- char bitmap[FC_SMALL_BITMAP_SIZE]; /* Small bitmap data area */
-};
-
-struct fchash {
- int size;
- int mask;
- struct fchash_head *head;
-};
-
-struct fcmemhash {
- int index;
- struct fcmem_head head[FC_MEM_HASH_SIZE];
-};
-
-typedef struct fcbitmap FontCacheBitmap, *FontCacheBitmapPtr;
-typedef struct cache_entry FontCacheEntry, *FontCacheEntryPtr;
-typedef struct fchash_head FontCacheHead, *FontCacheHeadPtr;
-typedef struct fcmem_head FontCacheBitmapHead, *FontCacheBitmapHeadPtr;
-typedef struct fchash FCCB, *FCCBPtr;
-typedef struct fcmemhash FCBCB, *FCBCBPtr;
-
-/* Function prototypes */
-
-int FontCacheInitialize(void);
-FCCBPtr FontCacheOpenCache(void * /* arg */);
-void FontCacheCloseCache(FCCBPtr /* this */);
-FontCacheEntryPtr FontCacheGetEntry(void);
-int FontCacheSearchEntry(FCCBPtr /* this */, int /* key */,
- FontCacheEntryPtr * /* value */);
-int FontCacheInsertEntry(FCCBPtr /* this */, int /* key */,
- FontCacheEntryPtr /* entry */);
-int FontCacheGetBitmap(FontCacheEntryPtr /* entry */,
- int /* size */);
-
-#endif /* _FONTCACHE_H_ */
diff --git a/nx-X11/lib/font/fontfile/Imakefile b/nx-X11/lib/font/fontfile/Imakefile
deleted file mode 100644
index fa075a951..000000000
--- a/nx-X11/lib/font/fontfile/Imakefile
+++ /dev/null
@@ -1,81 +0,0 @@
-XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:46:36 cpqbld Exp $
-
-
-
-
-XCOMM $XFree86: xc/lib/font/fontfile/Imakefile,v 3.20 2001/11/03 23:03:00 dawes Exp $
-
-#include <Server.tmpl>
-
-#if BuildServer && DoLoadableServer
-#define IHaveSubdirs
-#define NoLibSubdirs
-SUBDIRS = module
-#endif
-
- INCLUDES = -I$(FONTINCSRC) -I../include -I$(SERVERSRC)/include \
- -I$(INCLUDESRC)
- HEADERS =
-#ifdef FontFormatDefines
-FORMAT_DEFS = FontFormatDefines
-#endif
-
-#if BuildSpeedo
-SPEEDO_DEFINES = -DBUILD_SPEEDO
-#endif
-#if BuildType1
-TYPE1_DEFINES = -DBUILD_TYPE1
-#endif
-#if BuildCID
-CID_DEFINES = -DBUILD_CID
-#endif
-#if BuildFreeType
-FREETYPE_DEFINES = -DBUILD_FREETYPE
-#endif
-
-#if FontencCompatibility
- COMPAT_SRC = fontencc.c
- COMPAT_OBJ = fontencc.o
-#endif
-
-#if GzipFontCompression
- GUNZIP_SRC = gunzip.c
- GUNZIP_OBJ = gunzip.o
- GZIP_DEFS = -DX_GZIP_FONT_COMPRESSION
-#endif
-
-FONTENCDEFS = -DFONT_ENCODINGS_DIRECTORY=\"$(ENCODINGSDIR)/encodings.dir\"
-
- DEFINES = StrcasecmpDefines \
- $(SPEEDO_DEFINES) $(TYPE1_DEFINES) $(CID_DEFINES) \
- $(FREETYPE_DEFINES) $(FONTENCDEFS) \
- $(GZIP_DEFS)
-
- SRCS = dirfile.c fontdir.c fontfile.c fileio.c fontscale.c \
- defaults.c bitsource.c register.c renderers.c bufio.c \
- decompress.c filewr.c printerfont.c ffcheck.c \
- fontenc.c encparse.c $(COMPAT_SRC) $(GUNZIP_SRC)
- OBJS = dirfile.o fontdir.o fontfile.o fileio.o fontscale.o \
- defaults.o bitsource.o register.o renderers.o bufio.o \
- decompress.o filewr.o printerfont.o ffcheck.o \
- fontenc.o encparse.o $(COMPAT_OBJ) $(GUNZIP_OBJ)
-
-#define DoNormalLib NormalLibFont
-#define DoSharedLib SharedLibFont
-#define DoDebugLib DebugLibFont
-#define DoProfileLib ProfileLibFont
-#include <Library.tmpl>
-LibraryObjectRule()
-
-SpecialCLibObjectRule(fileio,$(ICONFIGFILES),$(GZIP_DEFS))
-
-SubdirLibraryRule($(OBJS))
-NormalLintTarget($(SRCS))
-
-#if BuildServer && DoLoadableServer
-MakeSubdirs($(SUBDIRS))
-DependSubdirs($(SUBDIRS))
-#endif
-
-DependTarget()
-
diff --git a/nx-X11/lib/font/fontfile/bitsource.c b/nx-X11/lib/font/fontfile/bitsource.c
deleted file mode 100644
index ae27de8fe..000000000
--- a/nx-X11/lib/font/fontfile/bitsource.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/* $Xorg: bitsource.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/bitsource.c,v 1.3 2001/01/17 19:43:29 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-
-BitmapSourcesRec FontFileBitmapSources;
-
-Bool
-FontFileRegisterBitmapSource (FontPathElementPtr fpe)
-{
- FontPathElementPtr *new;
- int i;
- int newsize;
-
- for (i = 0; i < FontFileBitmapSources.count; i++)
- if (FontFileBitmapSources.fpe[i] == fpe)
- return TRUE;
- if (FontFileBitmapSources.count == FontFileBitmapSources.size)
- {
- newsize = FontFileBitmapSources.size + 4;
- new = (FontPathElementPtr *) xrealloc (FontFileBitmapSources.fpe, newsize * sizeof *new);
- if (!new)
- return FALSE;
- FontFileBitmapSources.size = newsize;
- FontFileBitmapSources.fpe = new;
- }
- FontFileBitmapSources.fpe[FontFileBitmapSources.count++] = fpe;
- return TRUE;
-}
-
-void
-FontFileUnregisterBitmapSource (FontPathElementPtr fpe)
-{
- int i;
-
- for (i = 0; i < FontFileBitmapSources.count; i++)
- if (FontFileBitmapSources.fpe[i] == fpe)
- {
- FontFileBitmapSources.count--;
- if (FontFileBitmapSources.count == 0)
- {
- FontFileBitmapSources.size = 0;
- xfree (FontFileBitmapSources.fpe);
- FontFileBitmapSources.fpe = 0;
- }
- else
- {
- for (; i < FontFileBitmapSources.count; i++)
- FontFileBitmapSources.fpe[i] = FontFileBitmapSources.fpe[i+1];
- }
- break;
- }
-}
-
-/*
- * Our set_path_hook: unregister all bitmap sources.
- * This is necessary because already open fonts will keep their FPEs
- * allocated, but they may not be on the new font path.
- * The bitmap sources in the new path will be registered by the init_func.
- */
-void
-FontFileEmptyBitmapSource(void)
-{
- if (FontFileBitmapSources.count == 0)
- return;
-
- FontFileBitmapSources.count = 0;
- FontFileBitmapSources.size = 0;
- xfree (FontFileBitmapSources.fpe);
- FontFileBitmapSources.fpe = 0;
-}
-
-int
-FontFileMatchBitmapSource (FontPathElementPtr fpe,
- FontPtr *pFont,
- int flags,
- FontEntryPtr entry,
- FontNamePtr zeroPat,
- FontScalablePtr vals,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- Bool noSpecificSize)
-{
- int source;
- FontEntryPtr zero;
- FontBitmapEntryPtr bitmap;
- int ret;
- FontDirectoryPtr dir;
- FontScaledPtr scaled;
-
- /*
- * Look through all the registered bitmap sources for
- * the same zero name as ours; entries along that one
- * can be scaled as desired.
- */
- ret = BadFontName;
- for (source = 0; source < FontFileBitmapSources.count; source++)
- {
- if (FontFileBitmapSources.fpe[source] == fpe)
- continue;
- dir = (FontDirectoryPtr) FontFileBitmapSources.fpe[source]->private;
- zero = FontFileFindNameInDir (&dir->scalable, zeroPat);
- if (!zero)
- continue;
- scaled = FontFileFindScaledInstance (zero, vals, noSpecificSize);
- if (scaled)
- {
- if (scaled->pFont)
- {
- *pFont = scaled->pFont;
- (*pFont)->fpe = FontFileBitmapSources.fpe[source];
- ret = Successful;
- }
- else if (scaled->bitmap)
- {
- entry = scaled->bitmap;
- bitmap = &entry->u.bitmap;
- if (bitmap->pFont)
- {
- *pFont = bitmap->pFont;
- (*pFont)->fpe = FontFileBitmapSources.fpe[source];
- ret = Successful;
- }
- else
- {
- ret = FontFileOpenBitmap (
- FontFileBitmapSources.fpe[source],
- pFont, flags, entry, format, fmask);
- if (ret == Successful && *pFont)
- (*pFont)->fpe = FontFileBitmapSources.fpe[source];
- }
- }
- else /* "cannot" happen */
- {
- ret = BadFontName;
- }
- break;
- }
- }
- return ret;
-}
diff --git a/nx-X11/lib/font/fontfile/bufio.c b/nx-X11/lib/font/fontfile/bufio.c
deleted file mode 100644
index 43c6a13a7..000000000
--- a/nx-X11/lib/font/fontfile/bufio.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/* $Xorg: bufio.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/bufio.c,v 3.9 2001/12/14 19:56:50 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/Xos.h>
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/bufio.h>
-#include <errno.h>
-
-BufFilePtr
-BufFileCreate (char *private,
- int (*input)(BufFilePtr),
- int (*output)(int, BufFilePtr),
- int (*skip)(BufFilePtr, int),
- int (*close)(BufFilePtr, int))
-{
- BufFilePtr f;
-
- f = (BufFilePtr) xalloc (sizeof *f);
- if (!f)
- return 0;
- f->private = private;
- f->bufp = f->buffer;
- f->left = 0;
- f->input = input;
- f->output = output;
- f->skip = skip;
- f->eof = 0;
- f->close = close;
- return f;
-}
-
-#define FileDes(f) ((int)(long) (f)->private)
-
-static int
-BufFileRawFill (BufFilePtr f)
-{
- int left;
-
- left = read (FileDes(f), (char *)f->buffer, BUFFILESIZE);
- if (left <= 0) {
- f->left = 0;
- return BUFFILEEOF;
- }
- f->left = left - 1;
- f->bufp = f->buffer + 1;
- return f->buffer[0];
-}
-
-static int
-BufFileRawSkip (BufFilePtr f, int count)
-{
- int curoff;
- int fileoff;
- int todo;
-
- curoff = f->bufp - f->buffer;
- fileoff = curoff + f->left;
- if (curoff + count <= fileoff) {
- f->bufp += count;
- f->left -= count;
- } else {
- todo = count - (fileoff - curoff);
- if (lseek (FileDes(f), todo, 1) == -1) {
- if (errno != ESPIPE)
- return BUFFILEEOF;
- while (todo) {
- curoff = BUFFILESIZE;
- if (curoff > todo)
- curoff = todo;
- fileoff = read (FileDes(f), (char *)f->buffer, curoff);
- if (fileoff <= 0)
- return BUFFILEEOF;
- todo -= fileoff;
- }
- }
- f->left = 0;
- }
- return count;
-}
-
-static int
-BufFileRawClose (BufFilePtr f, int doClose)
-{
- if (doClose)
- close (FileDes (f));
- return 1;
-}
-
-BufFilePtr
-BufFileOpenRead (int fd)
-{
-#if defined(__UNIXOS2__) || defined (WIN32)
- /* hv: I'd bet WIN32 has the same effect here */
- setmode(fd,O_BINARY);
-#endif
- return BufFileCreate ((char *)(long) fd, BufFileRawFill, 0, BufFileRawSkip, BufFileRawClose);
-}
-
-static int
-BufFileRawFlush (int c, BufFilePtr f)
-{
- int cnt;
-
- if (c != BUFFILEEOF)
- *f->bufp++ = c;
- cnt = f->bufp - f->buffer;
- f->bufp = f->buffer;
- f->left = BUFFILESIZE;
- if (write (FileDes(f), (char *)f->buffer, cnt) != cnt)
- return BUFFILEEOF;
- return c;
-}
-
-BufFilePtr
-BufFileOpenWrite (int fd)
-{
- BufFilePtr f;
-
-#if defined(__UNIXOS2__) || defined(WIN32)
- /* hv: I'd bet WIN32 has the same effect here */
- setmode(fd,O_BINARY);
-#endif
- f = BufFileCreate ((char *)(long) fd, 0, BufFileRawFlush, 0, BufFileFlush);
- f->bufp = f->buffer;
- f->left = BUFFILESIZE;
- return f;
-}
-
-int
-BufFileRead (BufFilePtr f, char *b, int n)
-{
- int c, cnt;
- cnt = n;
- while (cnt--) {
- c = BufFileGet (f);
- if (c == BUFFILEEOF)
- break;
- *b++ = c;
- }
- return n - cnt - 1;
-}
-
-int
-BufFileWrite (BufFilePtr f, char *b, int n)
-{
- int cnt;
- cnt = n;
- while (cnt--) {
- if (BufFilePut (*b++, f) == BUFFILEEOF)
- return BUFFILEEOF;
- }
- return n;
-}
-
-int
-BufFileFlush (BufFilePtr f, int doClose)
-{
- if (f->bufp != f->buffer)
- return (*f->output) (BUFFILEEOF, f);
- return 0;
-}
-
-int
-BufFileClose (BufFilePtr f, int doClose)
-{
- int ret;
- ret = (*f->close) (f, doClose);
- xfree (f);
- return ret;
-}
-
-void
-BufFileFree (BufFilePtr f)
-{
- xfree (f);
-}
diff --git a/nx-X11/lib/font/fontfile/decompress.c b/nx-X11/lib/font/fontfile/decompress.c
deleted file mode 100644
index c7e649f91..000000000
--- a/nx-X11/lib/font/fontfile/decompress.c
+++ /dev/null
@@ -1,415 +0,0 @@
-/* $Xorg: decompress.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-/*
- * Copyright 1985, 1986 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * James A. Woods, derived from original work by Spencer Thomas
- * and Joseph Orost.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/*
-
-Copyright 1993, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/decompress.c,v 1.4 2001/01/17 19:43:29 dawes Exp $ */
-/*
- * decompress - cat a compressed file
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/bufio.h>
-
-#define BITS 16
-
-/*
- * a code_int must be able to hold 2**BITS values of type int, and also -1
- */
-#if BITS > 15
-typedef long int code_int;
-#else
-typedef int code_int;
-#endif
-
-typedef long int count_int;
-
-#ifdef NO_UCHAR
- typedef char char_type;
-#else
- typedef unsigned char char_type;
-#endif /* UCHAR */
-
-static char_type magic_header[] = { "\037\235" }; /* 1F 9D */
-
-/* Defines for third byte of header */
-#define BIT_MASK 0x1f
-#define BLOCK_MASK 0x80
-/* Masks 0x40 and 0x20 are free. I think 0x20 should mean that there is
- a fourth header byte (for expansion).
-*/
-
-#define INIT_BITS 9 /* initial number of bits/code */
-
-#ifdef COMPATIBLE /* But wrong! */
-# define MAXCODE(n_bits) (1 << (n_bits) - 1)
-#else
-# define MAXCODE(n_bits) ((1 << (n_bits)) - 1)
-#endif /* COMPATIBLE */
-
-/*
- * the next two codes should not be changed lightly, as they must not
- * lie within the contiguous general code space.
- */
-#define FIRST 257 /* first free entry */
-#define CLEAR 256 /* table clear output code */
-
-#define STACK_SIZE 65300
-
-typedef struct _compressedFILE {
- BufFilePtr file;
-
- char_type *stackp;
- code_int oldcode;
- char_type finchar;
-
- int block_compress;
- int maxbits;
- code_int maxcode, maxmaxcode;
-
- code_int free_ent;
- int clear_flg;
- int n_bits;
-
- /* bit buffer */
- int offset, size;
- char_type buf[BITS];
-
- char_type de_stack[STACK_SIZE];
- char_type *tab_suffix;
- unsigned short *tab_prefix;
-} CompressedFile;
-
-
-static int hsize_table[] = {
- 5003, /* 12 bits - 80% occupancy */
- 9001, /* 13 bits - 91% occupancy */
- 18013, /* 14 bits - 91% occupancy */
- 35023, /* 15 bits - 94% occupancy */
- 69001 /* 16 bits - 95% occupancy */
-};
-
-static int BufCompressedClose ( BufFilePtr f, int doClose );
-static int BufCompressedFill ( BufFilePtr f );
-static code_int getcode ( CompressedFile *file );
-static int BufCompressedSkip ( BufFilePtr f, int bytes );
-
-BufFilePtr
-BufFilePushCompressed (BufFilePtr f)
-{
- int code;
- int maxbits;
- int hsize;
- CompressedFile *file;
- int extra;
-
- if ((BufFileGet(f) != (magic_header[0] & 0xFF)) ||
- (BufFileGet(f) != (magic_header[1] & 0xFF)))
- {
- return 0;
- }
- code = BufFileGet (f);
- if (code == BUFFILEEOF) return 0;
-
- maxbits = code & BIT_MASK;
- if (maxbits > BITS || maxbits < 12)
- return 0;
- hsize = hsize_table[maxbits - 12];
- extra = (1 << maxbits) * sizeof (char_type) +
- hsize * sizeof (unsigned short);
- file = (CompressedFile *) xalloc (sizeof (CompressedFile) + extra);
- if (!file)
- return 0;
- file->file = f;
- file->maxbits = maxbits;
- file->block_compress = code & BLOCK_MASK;
- file->maxmaxcode = 1 << file->maxbits;
- file->tab_suffix = (char_type *) &file[1];
- file->tab_prefix = (unsigned short *) (file->tab_suffix + file->maxmaxcode);
- /*
- * As above, initialize the first 256 entries in the table.
- */
- file->maxcode = MAXCODE(file->n_bits = INIT_BITS);
- for ( code = 255; code >= 0; code-- ) {
- file->tab_prefix[code] = 0;
- file->tab_suffix[code] = (char_type) code;
- }
- file->free_ent = ((file->block_compress) ? FIRST : 256 );
- file->oldcode = -1;
- file->clear_flg = 0;
- file->offset = 0;
- file->size = 0;
- file->stackp = file->de_stack;
- bzero(file->buf, BITS);
- return BufFileCreate ((char *) file,
- BufCompressedFill,
- 0,
- BufCompressedSkip,
- BufCompressedClose);
-}
-
-static int
-BufCompressedClose (BufFilePtr f, int doClose)
-{
- CompressedFile *file;
- BufFilePtr raw;
-
- file = (CompressedFile *) f->private;
- raw = file->file;
- xfree (file);
- BufFileClose (raw, doClose);
- return 1;
-}
-
-static int
-BufCompressedFill (BufFilePtr f)
-{
- CompressedFile *file;
- register char_type *stackp, *de_stack;
- register char_type finchar;
- register code_int code, oldcode, incode;
- BufChar *buf, *bufend;
-
- file = (CompressedFile *) f->private;
-
- buf = f->buffer;
- bufend = buf + BUFFILESIZE;
- stackp = file->stackp;
- de_stack = file->de_stack;
- finchar = file->finchar;
- oldcode = file->oldcode;
- while (buf < bufend) {
- while (stackp > de_stack && buf < bufend)
- *buf++ = *--stackp;
-
- if (buf == bufend)
- break;
-
- code = getcode (file);
- if (code == -1)
- break;
-
- if ( (code == CLEAR) && file->block_compress ) {
- for ( code = 255; code >= 0; code-- )
- file->tab_prefix[code] = 0;
- file->clear_flg = 1;
- file->free_ent = FIRST;
- oldcode = -1;
- continue;
- }
- incode = code;
- /*
- * Special case for KwKwK string.
- */
- if ( code >= file->free_ent ) {
- if ( code > file->free_ent || oldcode == -1 ) {
- /* Bad stream. */
- return BUFFILEEOF;
- }
- *stackp++ = finchar;
- code = oldcode;
- }
- /*
- * The above condition ensures that code < free_ent.
- * The construction of tab_prefixof in turn guarantees that
- * each iteration decreases code and therefore stack usage is
- * bound by 1 << BITS - 256.
- */
-
- /*
- * Generate output characters in reverse order
- */
- while ( code >= 256 )
- {
- *stackp++ = file->tab_suffix[code];
- code = file->tab_prefix[code];
- }
- finchar = file->tab_suffix[code];
- *stackp++ = finchar;
-
- /*
- * Generate the new entry.
- */
- if ( (code=file->free_ent) < file->maxmaxcode && oldcode != -1) {
- file->tab_prefix[code] = (unsigned short)oldcode;
- file->tab_suffix[code] = finchar;
- file->free_ent = code+1;
- }
- /*
- * Remember previous code.
- */
- oldcode = incode;
- }
- file->oldcode = oldcode;
- file->stackp = stackp;
- file->finchar = finchar;
- if (buf == f->buffer) {
- f->left = 0;
- return BUFFILEEOF;
- }
- f->bufp = f->buffer + 1;
- f->left = (buf - f->buffer) - 1;
- return f->buffer[0];
-}
-
-/*****************************************************************
- * TAG( getcode )
- *
- * Read one code from the standard input. If BUFFILEEOF, return -1.
- * Inputs:
- * stdin
- * Outputs:
- * code or -1 is returned.
- */
-
-static char_type rmask[9] = {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff};
-
-static code_int
-getcode(CompressedFile *file)
-{
- register code_int code;
- register int r_off, bits;
- register char_type *bp = file->buf;
- register BufFilePtr raw;
-
- if ( file->clear_flg > 0 || file->offset >= file->size ||
- file->free_ent > file->maxcode )
- {
- /*
- * If the next entry will be too big for the current code
- * size, then we must increase the size. This implies reading
- * a new buffer full, too.
- */
- if ( file->free_ent > file->maxcode ) {
- file->n_bits++;
- if ( file->n_bits == file->maxbits )
- file->maxcode = file->maxmaxcode; /* won't get any bigger now */
- else
- file->maxcode = MAXCODE(file->n_bits);
- }
- if ( file->clear_flg > 0) {
- file->maxcode = MAXCODE (file->n_bits = INIT_BITS);
- file->clear_flg = 0;
- }
- bits = file->n_bits;
- raw = file->file;
- while (bits > 0 && (code = BufFileGet (raw)) != BUFFILEEOF)
- {
- *bp++ = code;
- --bits;
- }
- bp = file->buf;
- if (bits == file->n_bits)
- return -1; /* end of file */
- file->size = file->n_bits - bits;
- file->offset = 0;
- /* Round size down to integral number of codes */
- file->size = (file->size << 3) - (file->n_bits - 1);
- }
- r_off = file->offset;
- bits = file->n_bits;
- /*
- * Get to the first byte.
- */
- bp += (r_off >> 3);
- r_off &= 7;
- /* Get first part (low order bits) */
-#ifdef NO_UCHAR
- code = ((*bp++ >> r_off) & rmask[8 - r_off]) & 0xff;
-#else
- code = (*bp++ >> r_off);
-#endif /* NO_UCHAR */
- bits -= (8 - r_off);
- r_off = 8 - r_off; /* now, offset into code word */
- /* Get any 8 bit parts in the middle (<=1 for up to 16 bits). */
- if ( bits >= 8 ) {
-#ifdef NO_UCHAR
- code |= (*bp++ & 0xff) << r_off;
-#else
- code |= *bp++ << r_off;
-#endif /* NO_UCHAR */
- r_off += 8;
- bits -= 8;
- }
- /* high order bits. */
- code |= (*bp & rmask[bits]) << r_off;
- file->offset += file->n_bits;
-
- return code;
-}
-
-static int
-BufCompressedSkip (BufFilePtr f, int bytes)
-{
- int c;
- while (bytes--)
- {
- c = BufFileGet(f);
- if (c == BUFFILEEOF)
- return BUFFILEEOF;
- }
- return 0;
-}
-
-#ifdef TEST
-int
-main (int argc, char *argv[])
-{
- BufFilePtr inputraw, input, output;
- int c;
-
- inputraw = BufFileOpenRead (0);
- input = BufFilePushCompressed (inputraw);
- output = BufFileOpenWrite (1);
- while ((c = BufFileGet (input)) != BUFFILEEOF)
- BufFilePut (c, output);
- BufFileClose (input, FALSE);
- BufFileClose (output, FALSE);
- return 0;
-}
-#endif
diff --git a/nx-X11/lib/font/fontfile/defaults.c b/nx-X11/lib/font/fontfile/defaults.c
deleted file mode 100644
index 7f20cab67..000000000
--- a/nx-X11/lib/font/fontfile/defaults.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* $Xorg: defaults.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/defaults.c,v 1.7 2001/01/17 19:43:29 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/X.h>
-#include <X11/Xproto.h>
-
-#ifndef DEFAULT_BIT_ORDER
-#ifdef BITMAP_BIT_ORDER
-#define DEFAULT_BIT_ORDER BITMAP_BIT_ORDER
-#else
-#define DEFAULT_BIT_ORDER MSBFirst
-#endif
-#endif
-
-#ifndef DEFAULT_BYTE_ORDER
-#ifdef IMAGE_BYTE_ORDER
-#define DEFAULT_BYTE_ORDER IMAGE_BYTE_ORDER
-#else
-#define DEFAULT_BYTE_ORDER MSBFirst
-#endif
-#endif
-
-#ifndef DEFAULT_GLYPH_PAD
-#ifdef GLYPHPADBYTES
-#define DEFAULT_GLYPH_PAD GLYPHPADBYTES
-#else
-#define DEFAULT_GLYPH_PAD 4
-#endif
-#endif
-
-#ifndef DEFAULT_SCAN_UNIT
-#define DEFAULT_SCAN_UNIT 1
-#endif
-
-#include <X11/fonts/fntfilst.h>
-
-void
-FontDefaultFormat (int *bit, int *byte, int *glyph, int *scan)
-{
- *bit = DEFAULT_BIT_ORDER;
- *byte = DEFAULT_BYTE_ORDER;
- *glyph = DEFAULT_GLYPH_PAD;
- *scan = DEFAULT_SCAN_UNIT;
-}
diff --git a/nx-X11/lib/font/fontfile/dirfile.c b/nx-X11/lib/font/fontfile/dirfile.c
deleted file mode 100644
index 3a2fead81..000000000
--- a/nx-X11/lib/font/fontfile/dirfile.c
+++ /dev/null
@@ -1,495 +0,0 @@
-/* $Xorg: dirfile.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/dirfile.c,v 3.17 2004/02/08 01:52:27 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-/*
- * dirfile.c
- *
- * Read fonts.dir and fonts.alias files
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <limits.h>
-
-static Bool AddFileNameAliases ( FontDirectoryPtr dir );
-static int ReadFontAlias ( char *directory, Bool isFile,
- FontDirectoryPtr *pdir );
-static int lexAlias ( FILE *file, char **lexToken );
-static int lexc ( FILE *file );
-
-int
-FontFileReadDirectory (char *directory, FontDirectoryPtr *pdir)
-{
- char file_name[MAXFONTFILENAMELEN];
- char font_name[MAXFONTNAMELEN];
- char dir_file[MAXFONTFILENAMELEN];
- char dir_path[MAXFONTFILENAMELEN];
- char *ptr;
- FILE *file;
- int count,
- i,
- status;
- struct stat statb;
- static char format[24] = "";
-
- FontDirectoryPtr dir = NullFontDirectory;
-
- if (strlen(directory) + 1 + sizeof(FontDirFile) > sizeof(dir_file))
- return BadFontPath;
-
- /* Check for font directory attributes */
-#if !defined(__UNIXOS2__) && !defined(WIN32)
- if ((ptr = strchr(directory, ':'))) {
-#else
- /* OS/2 and WIN32 path might start with a drive letter, don't clip this */
- if ((ptr = strchr(directory+2, ':'))) {
-#endif
- strncpy(dir_path, directory, ptr - directory);
- dir_path[ptr - directory] = '\0';
- } else {
- strcpy(dir_path, directory);
- }
- strcpy(dir_file, dir_path);
- if (dir_file[strlen(dir_file) - 1] != '/')
- strcat(dir_file, "/");
- strcat(dir_file, FontDirFile);
- file = fopen(dir_file, "rt");
- if (file) {
- Bool found_font = FALSE;
-
-#ifndef WIN32
- if (fstat (fileno(file), &statb) == -1)
-#else
- if (stat (dir_file, &statb) == -1)
-#endif
- {
- fclose(file);
- return BadFontPath;
- }
- count = fscanf(file, "%d\n", &i);
- if ((count == EOF) || (count != 1)) {
- fclose(file);
- return BadFontPath;
- }
- dir = FontFileMakeDir(directory, i);
- if (dir == NULL) {
- fclose(file);
- return BadFontPath;
- }
- dir->dir_mtime = statb.st_mtime;
- if (format[0] == '\0')
- sprintf(format, "%%%ds %%%d[^\n]\n",
- MAXFONTFILENAMELEN-1, MAXFONTNAMELEN-1);
-
- while ((count = fscanf(file, format, file_name, font_name)) != EOF) {
-#if defined(__UNIXOS2__) || defined(WIN32)
- /* strip any existing trailing CR */
- for (i=0; i<strlen(font_name); i++) {
- if (font_name[i]=='\r') font_name[i] = '\0';
- }
-#endif
- if (count != 2) {
- FontFileFreeDir (dir);
- fclose(file);
- return BadFontPath;
- }
- if (FontFileAddFontFile (dir, font_name, file_name))
- found_font = TRUE;
- }
- if (!found_font) {
- FontFileFreeDir (dir);
- fclose(file);
- return BadFontPath;
- }
- fclose(file);
-
- } else if (errno != ENOENT) {
- return BadFontPath;
- }
- status = ReadFontAlias(dir_path, FALSE, &dir);
- if (status != Successful) {
- if (dir)
- FontFileFreeDir (dir);
- return status;
- }
- if (!dir)
- return BadFontPath;
-
- FontFileSortDir(dir);
-
- *pdir = dir;
- return Successful;
-}
-
-Bool
-FontFileDirectoryChanged(FontDirectoryPtr dir)
-{
- char dir_file[MAXFONTFILENAMELEN];
- struct stat statb;
-
- if (strlen(dir->directory) + sizeof(FontDirFile) > sizeof(dir_file))
- return FALSE;
-
- strcpy (dir_file, dir->directory);
- strcat (dir_file, FontDirFile);
- if (stat (dir_file, &statb) == -1)
- {
- if (errno != ENOENT || dir->dir_mtime != 0)
- return TRUE;
- return FALSE; /* doesn't exist and never did: no change */
- }
- if (dir->dir_mtime != statb.st_mtime)
- return TRUE;
- strcpy (dir_file, dir->directory);
- strcat (dir_file, FontAliasFile);
- if (stat (dir_file, &statb) == -1)
- {
- if (errno != ENOENT || dir->alias_mtime != 0)
- return TRUE;
- return FALSE; /* doesn't exist and never did: no change */
- }
- if (dir->alias_mtime != statb.st_mtime)
- return TRUE;
- return FALSE;
-}
-
-/*
- * Make each of the file names an automatic alias for each of the files.
- */
-
-static Bool
-AddFileNameAliases(FontDirectoryPtr dir)
-{
- int i;
- char copy[MAXFONTFILENAMELEN];
- char *fileName;
- FontTablePtr table;
- FontRendererPtr renderer;
- int len;
- FontNameRec name;
-
- table = &dir->nonScalable;
- for (i = 0; i < table->used; i++) {
- if (table->entries[i].type != FONT_ENTRY_BITMAP)
- continue;
- fileName = table->entries[i].u.bitmap.fileName;
- renderer = FontFileMatchRenderer (fileName);
- if (!renderer)
- continue;
-
- len = strlen (fileName) - renderer->fileSuffixLen;
- if (len >= sizeof(copy))
- continue;
- CopyISOLatin1Lowered (copy, fileName, len);
- copy[len] = '\0';
- name.name = copy;
- name.length = len;
- name.ndashes = FontFileCountDashes (copy, len);
-
- if (!FontFileFindNameInDir(table, &name)) {
- if (!FontFileAddFontAlias (dir, copy, table->entries[i].name.name))
- return FALSE;
- }
- }
- return TRUE;
-}
-
-/*
- * parse the font.alias file. Format is:
- *
- * alias font-name
- *
- * To imbed white-space in an alias name, enclose it like "font name"
- * in double quotes. \ escapes and character, so
- * "font name \"With Double Quotes\" \\ and \\ back-slashes"
- * works just fine.
- *
- * A line beginning with a ! denotes a newline-terminated comment.
- */
-
-/*
- * token types
- */
-
-#define NAME 0
-#define NEWLINE 1
-#define DONE 2
-#define EALLOC 3
-
-static int
-ReadFontAlias(char *directory, Bool isFile, FontDirectoryPtr *pdir)
-{
- char alias[MAXFONTNAMELEN];
- char font_name[MAXFONTNAMELEN];
- char alias_file[MAXFONTFILENAMELEN];
- FILE *file;
- FontDirectoryPtr dir;
- int token;
- char *lexToken;
- int status = Successful;
- struct stat statb;
-
- if (strlen(directory) >= sizeof(alias_file))
- return BadFontPath;
- dir = *pdir;
- strcpy(alias_file, directory);
- if (!isFile) {
- if (strlen(directory) + 1 + sizeof(FontAliasFile) > sizeof(alias_file))
- return BadFontPath;
- if (directory[strlen(directory) - 1] != '/')
- strcat(alias_file, "/");
- strcat(alias_file, FontAliasFile);
- }
- file = fopen(alias_file, "rt");
- if (!file)
- return ((errno == ENOENT) ? Successful : BadFontPath);
- if (!dir)
- *pdir = dir = FontFileMakeDir(directory, 10);
- if (!dir)
- {
- fclose (file);
- return AllocError;
- }
-#ifndef WIN32
- if (fstat (fileno (file), &statb) == -1)
-#else
- if (stat (alias_file, &statb) == -1)
-#endif
- {
- fclose (file);
- return BadFontPath;
- }
- dir->alias_mtime = statb.st_mtime;
- while (status == Successful) {
- token = lexAlias(file, &lexToken);
- switch (token) {
- case NEWLINE:
- break;
- case DONE:
- fclose(file);
- return Successful;
- case EALLOC:
- status = AllocError;
- break;
- case NAME:
- if (strlen(lexToken) >= sizeof(alias)) {
- status = BadFontPath;
- break;
- }
- strcpy(alias, lexToken);
- token = lexAlias(file, &lexToken);
- switch (token) {
- case NEWLINE:
- if (strcmp(alias, "FILE_NAMES_ALIASES"))
- status = BadFontPath;
- else if (!AddFileNameAliases(dir))
- status = AllocError;
- break;
- case DONE:
- status = BadFontPath;
- break;
- case EALLOC:
- status = AllocError;
- break;
- case NAME:
- if (strlen(lexToken) >= sizeof(font_name)) {
- status = BadFontPath;
- break;
- }
- CopyISOLatin1Lowered(alias, alias, strlen(alias));
- CopyISOLatin1Lowered(font_name, lexToken, strlen(lexToken));
- if (!FontFileAddFontAlias (dir, alias, font_name))
- status = AllocError;
- break;
- }
- }
- }
- fclose(file);
- return status;
-}
-
-#define QUOTE 0
-#define WHITE 1
-#define NORMAL 2
-#define END 3
-#define NL 4
-#define BANG 5
-
-static int charClass;
-
-static int
-lexAlias(FILE *file, char **lexToken)
-{
- int c;
- char *t;
- enum state {
- Begin, Normal, Quoted, Comment
- } state;
- int count;
-
- static char *tokenBuf = (char *) NULL;
- static int tokenSize = 0;
-
- t = tokenBuf;
- count = 0;
- state = Begin;
- for (;;) {
- if (count == tokenSize) {
- int nsize;
- char *nbuf;
-
- if (tokenSize >= (INT_MAX >> 2))
- /* Stop before we overflow */
- return EALLOC;
- nsize = tokenSize ? (tokenSize << 1) : 64;
- nbuf = (char *) xrealloc(tokenBuf, nsize);
- if (!nbuf)
- return EALLOC;
- tokenBuf = nbuf;
- tokenSize = nsize;
- t = tokenBuf + count;
- }
- c = lexc(file);
- switch (charClass) {
- case QUOTE:
- switch (state) {
- case Begin:
- case Normal:
- state = Quoted;
- break;
- case Quoted:
- state = Normal;
- break;
- case Comment:
- break;
- }
- break;
- case WHITE:
- switch (state) {
- case Begin:
- case Comment:
- continue;
- case Normal:
- *t = '\0';
- *lexToken = tokenBuf;
- return NAME;
- case Quoted:
- break;
- }
- /* fall through */
- case NORMAL:
- switch (state) {
- case Begin:
- state = Normal;
- break;
- case Comment:
- continue;
- default:
- break;
- }
- *t++ = c;
- ++count;
- break;
- case END:
- case NL:
- switch (state) {
- case Begin:
- case Comment:
- *lexToken = (char *) NULL;
- return charClass == END ? DONE : NEWLINE;
- default:
- *t = '\0';
- *lexToken = tokenBuf;
- ungetc(c, file);
- return NAME;
- }
- break;
- case BANG:
- switch (state) {
- case Begin:
- state = Comment;
- break;
- case Comment:
- break;
- default:
- *t++ = c;
- ++count;
- }
- break;
- }
- }
-}
-
-static int
-lexc(FILE *file)
-{
- int c;
-
- c = getc(file);
- switch (c) {
- case EOF:
- charClass = END;
- break;
- case '\\':
- c = getc(file);
- if (c == EOF)
- charClass = END;
- else
- charClass = NORMAL;
- break;
- case '"':
- charClass = QUOTE;
- break;
- case ' ':
- case '\t':
- charClass = WHITE;
- break;
- case '\r':
- case '\n':
- charClass = NL;
- break;
- case '!':
- charClass = BANG;
- break;
- default:
- charClass = NORMAL;
- break;
- }
- return c;
-}
diff --git a/nx-X11/lib/font/fontfile/encparse.c b/nx-X11/lib/font/fontfile/encparse.c
deleted file mode 100644
index 6262aff07..000000000
--- a/nx-X11/lib/font/fontfile/encparse.c
+++ /dev/null
@@ -1,966 +0,0 @@
-/*
-Copyright (c) 1998-2001 by Juliusz Chroboczek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-/* $XFree86: xc/lib/font/fontfile/encparse.c,v 1.20tsi Exp $ */
-
-/* Parser for encoding files */
-
-/* This code assumes that we are using ASCII. We don't use the ctype
- functions, as they depend on the current locale. On the other
- hand, we do use strcasecmp, but only on strings that we've checked
- to be pure ASCII. Bloody ``Code Set Independence''. */
-
-#include <string.h>
-#include <stdio.h>
-
-#if defined(__SCO__) || defined(__UNIXWARE__)
-#include <strings.h>
-#endif
-
-#ifndef FONTENC_NO_LIBFONT
-
-#include <X11/fonts/fntfilio.h>
-#include <X11/fonts/fntfilst.h>
-
-#else
-
-#include <stdlib.h>
-#define xalloc(n) malloc(n)
-#define xrealloc(p, n) realloc(p, n)
-#define xfree(p) free(p)
-
-#include "zlib.h"
-typedef gzFile FontFilePtr;
-#define FontFileGetc(f) gzgetc(f)
-#define FontFileOpen(filename) gzopen(filename, "rb")
-#define FontFileClose(f) gzclose(f)
-
-#define MAXFONTFILENAMELEN 1024
-#define MAXFONTNAMELEN 1024
-
-#endif
-
-#include <X11/fonts/fontenc.h>
-#include "fontencI.h"
-
-#define MAXALIASES 20
-
-#define EOF_TOKEN -1
-#define ERROR_TOKEN -2
-#define EOL_TOKEN 0
-#define NUMBER_TOKEN 1
-#define KEYWORD_TOKEN 2
-
-#define EOF_LINE -1
-#define ERROR_LINE -2
-#define STARTENCODING_LINE 1
-#define STARTMAPPING_LINE 2
-#define ENDMAPPING_LINE 3
-#define CODE_LINE 4
-#define CODE_RANGE_LINE 5
-#define CODE_UNDEFINE_LINE 6
-#define NAME_LINE 7
-#define SIZE_LINE 8
-#define ALIAS_LINE 9
-#define FIRSTINDEX_LINE 10
-
-/* Return from lexer */
-#define MAXKEYWORDLEN 100
-
-static long number_value;
-static char keyword_value[MAXKEYWORDLEN+1];
-
-static long value1, value2, value3;
-
-/* Lexer code */
-
-/* Skip to the beginning of new line */
-static void
-skipEndOfLine(FontFilePtr f, int c)
-{
- if(c == 0)
- c = FontFileGetc(f);
-
- for(;;)
- if(c <= 0 || c == '\n')
- return;
- else
- c = FontFileGetc(f);
-}
-
-/* Get a number; we're at the first digit. */
-static unsigned
-getnum(FontFilePtr f, int c, int *cp)
-{
- unsigned n = 0;
- int base = 10;
-
- /* look for `0' or `0x' prefix */
- if(c == '0') {
- c = FontFileGetc(f);
- base = 8;
- if(c == 'x' || c == 'X') {
- base = 16;
- c = FontFileGetc(f);
- }
- }
-
- /* accumulate digits */
- for(;;) {
- if ('0' <= c && c <= '9') {
- n *= base; n += c - '0';
- } else if('a' <= c && c <= 'f') {
- n *= base; n += c - 'a' + 10;
- } else if('A' <=c && c <= 'F') {
- n *= base; n += c - 'A' + 10;
- } else
- break;
- c = FontFileGetc(f);
- }
-
- *cp = c; return n;
-}
-
-/* Skip to beginning of new line; return 1 if only whitespace was found. */
-static int
-endOfLine(FontFilePtr f, int c)
-{
- if(c == 0)
- c = FontFileGetc(f);
-
- for(;;) {
- if(c <= 0 || c == '\n')
- return 1;
- else if(c == '#') {
- skipEndOfLine(f,c);
- return 1;
- }
- else if(c == ' ' || c == '\t') {
- skipEndOfLine(f,c);
- return 0;
- }
- c = FontFileGetc(f);
- }
-}
-
-/* Get a token; we're at first char */
-static int
-gettoken(FontFilePtr f, int c, int *cp)
-{
- char *p;
-
- if(c <= 0)
- c = FontFileGetc(f);
-
- if(c <= 0) {
- return EOF_TOKEN;
- }
-
- while(c == ' ' || c == '\t')
- c = FontFileGetc(f);
-
- if(c=='\n') {
- return EOL_TOKEN;
- } else if(c == '#') {
- skipEndOfLine(f,c);
- return EOL_TOKEN;
- } else if(c >= '0' && c <= '9') {
- number_value = getnum(f,c,cp);
- return NUMBER_TOKEN;
- } else if((c >= 'A' && c <= 'Z') ||
- (c >= 'a' && c <= 'z') ||
- c == '/' || c == '_' || c == '-' || c == '.') {
- p = keyword_value;
- *p++ = c;
- while(p-keyword_value < MAXKEYWORDLEN) {
- c = FontFileGetc(f);
- if(c <= ' ' || c > '~' || c == '#')
- break;
- *p++ = c;
- }
- *cp = c;
- *p = '\0';
- return KEYWORD_TOKEN;
- } else {
- *cp = c;
- return ERROR_TOKEN;
- }
-}
-
-/* Parse a line.
- * Always skips to the beginning of a new line, even if an error occurs */
-static int
-getnextline(FontFilePtr f)
-{
- int c, token;
- c = FontFileGetc(f);
- if(c <= 0)
- return EOF_LINE;
-
- again:
- token=gettoken(f,c,&c);
-
- switch(token) {
- case EOF_TOKEN:
- return EOF_LINE;
- case EOL_TOKEN:
- /* empty line */
- c = FontFileGetc(f);
- goto again;
- case NUMBER_TOKEN:
- value1 = number_value;
- token = gettoken(f,c,&c);
- switch(token) {
- case NUMBER_TOKEN:
- value2 = number_value;
- token = gettoken(f,c,&c);
- switch(token) {
- case NUMBER_TOKEN:
- value3 = number_value;
- return CODE_RANGE_LINE;
- case EOL_TOKEN:
- return CODE_LINE;
- default:
- skipEndOfLine(f,c);
- return ERROR_LINE;
- }
- case KEYWORD_TOKEN:
- if(!endOfLine(f,c))
- return ERROR_LINE;
- else
- return NAME_LINE;
- default:
- skipEndOfLine(f,c);
- return ERROR_LINE;
- }
- case KEYWORD_TOKEN:
- if(!strcasecmp(keyword_value, "STARTENCODING")) {
- token = gettoken(f,c,&c);
- if(token == KEYWORD_TOKEN) {
- if(endOfLine(f,c))
- return STARTENCODING_LINE;
- else
- return ERROR_LINE;
- } else {
- skipEndOfLine(f,c);
- return ERROR_LINE;
- }
- } else if(!strcasecmp(keyword_value, "ALIAS")) {
- token = gettoken(f,c,&c);
- if(token == KEYWORD_TOKEN) {
- if(endOfLine(f,c))
- return ALIAS_LINE;
- else
- return ERROR_LINE;
- } else {
- skipEndOfLine(f,c);
- return ERROR_LINE;
- }
- } else if(!strcasecmp(keyword_value, "SIZE")) {
- token = gettoken(f,c,&c);
- if(token == NUMBER_TOKEN) {
- value1 = number_value;
- token = gettoken(f,c,&c);
- switch(token) {
- case NUMBER_TOKEN:
- value2 = number_value;
- return SIZE_LINE;
- case EOL_TOKEN:
- value2=0;
- return SIZE_LINE;
- default:
- skipEndOfLine(f,c);
- return ERROR_LINE;
- }
- } else {
- skipEndOfLine(f,c);
- return ERROR_LINE;
- }
- } else if(!strcasecmp(keyword_value, "FIRSTINDEX")) {
- token = gettoken(f,c,&c);
- if(token == NUMBER_TOKEN) {
- value1 = number_value;
- token = gettoken(f,c,&c);
- switch(token) {
- case NUMBER_TOKEN:
- value2 = number_value;
- return FIRSTINDEX_LINE;
- case EOL_TOKEN:
- value2 = 0;
- return FIRSTINDEX_LINE;
- default:
- skipEndOfLine(f,c);
- return ERROR_LINE;
- }
- } else {
- skipEndOfLine(f,c);
- return ERROR_LINE;
- }
- } else if(!strcasecmp(keyword_value, "STARTMAPPING")) {
- keyword_value[0] = 0;
- value1 = 0; value1 = 0;
- /* first a keyword */
- token = gettoken(f,c,&c);
- if(token != KEYWORD_TOKEN) {
- skipEndOfLine(f, c);
- return ERROR_LINE;
- }
-
- /* optional first integer */
- token = gettoken(f,c,&c);
- if(token == NUMBER_TOKEN) {
- value1 = number_value;
- } else if(token == EOL_TOKEN) {
- return STARTMAPPING_LINE;
- } else {
- skipEndOfLine(f, c);
- return ERROR_LINE;
- }
-
- /* optional second integer */
- token = gettoken(f,c,&c);
- if(token == NUMBER_TOKEN) {
- value2 = number_value;
- } else if(token == EOL_TOKEN) {
- return STARTMAPPING_LINE;
- } else {
- skipEndOfLine(f, c);
- return ERROR_LINE;
- }
-
- if(!endOfLine(f,c))
- return ERROR_LINE;
- else {
- return STARTMAPPING_LINE;
- }
- } else if(!strcasecmp(keyword_value, "UNDEFINE")) {
- /* first integer */
- token = gettoken(f,c,&c);
- if(token != NUMBER_TOKEN) {
- skipEndOfLine(f,c);
- return ERROR_LINE;
- }
- value1 = number_value;
- /* optional second integer */
- token = gettoken(f,c,&c);
- if(token == EOL_TOKEN) {
- value2 = value1;
- return CODE_UNDEFINE_LINE;
- } else if(token == NUMBER_TOKEN) {
- value2 = number_value;
- if(endOfLine(f,c)) {
- return CODE_UNDEFINE_LINE;
- } else
- return ERROR_LINE;
- } else {
- skipEndOfLine(f,c);
- return ERROR_LINE;
- }
- } else if(!strcasecmp(keyword_value, "ENDENCODING")) {
- if(endOfLine(f,c))
- return EOF_LINE;
- else
- return ERROR_LINE;
- } else if(!strcasecmp(keyword_value, "ENDMAPPING")) {
- if(endOfLine(f,c))
- return ENDMAPPING_LINE;
- else
- return ERROR_LINE;
- } else {
- skipEndOfLine(f,c);
- return ERROR_LINE;
- }
- default:
- return ERROR_LINE;
- }
-}
-
-static void
-install_mapping(FontEncPtr encoding, FontMapPtr mapping)
-{
- FontMapPtr m;
-
- if(encoding->mappings == NULL)
- encoding->mappings = mapping;
- else {
- m = encoding->mappings;
- while(m->next != NULL)
- m = m->next;
- m->next = mapping;
- }
- mapping->next = NULL;
- mapping->encoding = encoding;
-}
-
-static int
-setCode(unsigned from, unsigned to, unsigned row_size,
- unsigned *first, unsigned *last,
- unsigned *encsize, unsigned short **enc)
-{
- unsigned index, i;
- unsigned short *newenc;
-
- if(from>0xFFFF)
- return 0; /* success */
-
- if(row_size==0)
- index=from;
- else {
- if((value1 & 0xFF) >= row_size)
- return 0; /* ignore out of range mappings */
- index = (from>>8) * row_size + (from&0xFF);
- }
-
- /* Optimize away useless identity mappings. This is only expected
- to be useful with linear encodings. */
- if(index == to && (index < *first || index > *last))
- return 0;
- if(*encsize == 0) {
- *encsize = (index < 256) ? 256 : 0x10000;
- *enc = (unsigned short*)xalloc((*encsize) * sizeof(unsigned short));
- if(*enc == NULL) {
- *encsize = 0;
- return 1;
- }
- } else if(*encsize <= index) {
- *encsize = 0x10000;
- if((newenc = (unsigned short*)xrealloc(enc, *encsize))==NULL)
- return 1;
- *enc = newenc;
- }
- if(*first > *last) {
- *first = *last = index;
- }
- if(index < *first) {
- for(i = index; i < *first; i++)
- (*enc)[i] = i;
- *first = index;
- }
- if(index > *last) {
- for(i = *last + 1; i <= index; i++)
- (*enc)[i] = i;
- *last = index;
- }
- (*enc)[index] = to;
- return 0;
-}
-
-/* Parser. If headerOnly is true, we're only interested in the
- data contained in the encoding file's header. */
-
-/* As font encodings are currently never freed, the allocations done
- by this function are mostly its private business. Note, however,
- that FontEncIdentify needs to free the header fields -- so if you
- change this function, you may need to change FontEncIdentify. */
-
-/* I want a garbage collector. */
-
-static FontEncPtr
-parseEncodingFile(FontFilePtr f, int headerOnly)
-{
- int line;
-
- unsigned short *enc=NULL;
- char **nam = NULL, **newnam;
- unsigned i, first = 0xFFFF, last=0, encsize=0, namsize=0;
- FontEncPtr encoding = NULL;
- FontMapPtr mapping = NULL;
- FontEncSimpleMapPtr sm;
- FontEncSimpleNamePtr sn;
- char *aliases[MAXALIASES];
- int numaliases=0;
-
-#if 0
- /* GCC complains about unused labels. Please fix GCC rather than
- obfuscating my code. */
- no_encoding:
-#endif
- line = getnextline(f);
- switch(line) {
- case EOF_LINE:
- goto error;
- case STARTENCODING_LINE:
- encoding = (FontEncPtr)xalloc(sizeof(FontEncRec));
- if(encoding == NULL)
- goto error;
- encoding->name = (char*)xalloc(strlen(keyword_value)+1);
- if(encoding->name == NULL)
- goto error;
- strcpy(encoding->name, keyword_value);
- encoding->size = 256;
- encoding->row_size = 0;
- encoding->mappings = NULL;
- encoding->next = NULL;
- encoding->first = encoding->first_col=0;
- goto no_mapping;
- default:
- goto error;
- }
-
- no_mapping:
- line = getnextline(f);
- switch(line) {
- case EOF_LINE: goto done;
- case ALIAS_LINE:
- if(numaliases < MAXALIASES) {
- aliases[numaliases] = (char*)xalloc(strlen(keyword_value)+1);
- if(aliases[numaliases] == NULL)
- goto error;
- strcpy(aliases[numaliases], keyword_value);
- numaliases++;
- }
- goto no_mapping;
- case SIZE_LINE:
- encoding->size = value1;
- encoding->row_size = value2;
- goto no_mapping;
- case FIRSTINDEX_LINE:
- encoding->first = value1;
- encoding->first_col = value2;
- goto no_mapping;
- case STARTMAPPING_LINE:
- if(headerOnly)
- goto done;
- if(!strcasecmp(keyword_value, "unicode")) {
- mapping = (FontMapPtr)xalloc(sizeof(FontMapRec));
- if(mapping == NULL)
- goto error;
- mapping->type = FONT_ENCODING_UNICODE;
- mapping->pid = 0;
- mapping->eid = 0;
- mapping->recode = 0;
- mapping->name = 0;
- mapping->client_data = 0;
- mapping->next = 0;
- goto mapping;
- } else if(!strcasecmp(keyword_value, "cmap")) {
- mapping = (FontMapPtr)xalloc(sizeof(FontMapRec));
- if(mapping == NULL)
- goto error;
- mapping->type = FONT_ENCODING_TRUETYPE;
- mapping->pid = value1;
- mapping->eid = value2;
- mapping->recode = 0;
- mapping->name = 0;
- mapping->client_data = 0;
- mapping->next = 0;
- goto mapping;
- } else if(!strcasecmp(keyword_value, "postscript")) {
- mapping = (FontMapPtr)xalloc(sizeof(FontMapRec));
- if(mapping == NULL)
- goto error;
- mapping->type = FONT_ENCODING_POSTSCRIPT;
- mapping->pid = 0;
- mapping->eid = 0;
- mapping->recode = 0;
- mapping->name = 0;
- mapping->client_data = 0;
- mapping->next = 0;
- goto string_mapping;
- } else { /* unknown mapping type -- ignore */
- goto skipmapping;
- }
- /* NOTREACHED */
- goto error;
- default: goto no_mapping; /* ignore unknown lines */
- }
-
- skipmapping:
- line = getnextline(f);
- switch(line) {
- case ENDMAPPING_LINE:
- goto no_mapping;
- case EOF_LINE:
- goto error;
- default:
- goto skipmapping;
- }
-
- mapping:
- line = getnextline(f);
- switch(line) {
- case EOF_LINE: goto error;
- case ENDMAPPING_LINE:
- mapping->recode = FontEncSimpleRecode;
- mapping->name = FontEncUndefinedName;
- mapping->client_data = sm =
- (FontEncSimpleMapPtr)xalloc(sizeof(FontEncSimpleMapRec));
- if(sm == NULL)
- goto error;
- sm->row_size = encoding->row_size;
- if(first <= last) {
- sm->first = first;
- sm->len=last-first+1;
- sm->map =
- (unsigned short*)xalloc(sm->len * sizeof(unsigned short));
- if(sm->map == NULL) {
- xfree(sm);
- mapping->client_data = sm = NULL;
- goto error;
- }
- } else {
- sm->first = 0;
- sm->len = 0;
- sm->map = 0;
- }
- for(i=0; i < sm->len; i++)
- sm -> map[i] = enc[first+i];
- install_mapping(encoding, mapping);
- mapping = 0;
- first = 0xFFFF; last=0;
- goto no_mapping;
-
- case CODE_LINE:
- if(setCode(value1, value2, encoding->row_size,
- &first, &last, &encsize, &enc))
- goto error;
- goto mapping;
-
- case CODE_RANGE_LINE:
- if(value1 > 0x10000)
- value1 = 0x10000;
- if(value2 > 0x10000)
- value2 = 0x10000;
- if(value2 < value1)
- goto mapping;
- /* Do the last value first to avoid having to realloc() */
- if(setCode(value2, value3+(value2-value1), encoding->row_size,
- &first, &last, &encsize, &enc))
- goto error;
- for(i=value1; i<value2; i++) {
- if(setCode(i, value3+(i-value1), encoding->row_size,
- &first, &last, &encsize, &enc))
- goto error;
- }
- goto mapping;
-
- case CODE_UNDEFINE_LINE:
- if(value1 > 0x10000)
- value1 = 0x10000;
- if(value2 > 0x10000)
- value2 = 0x10000;
- if(value2 < value1)
- goto mapping;
- /* Do the last value first to avoid having to realloc() */
- if(setCode(value2, 0, encoding->row_size,
- &first, &last, &encsize, &enc))
- goto error;
- for(i = value1; i < value2; i++) {
- if(setCode(i, 0, encoding->row_size,
- &first, &last, &encsize, &enc))
- goto error;
- }
- goto mapping;
-
- default: goto mapping; /* ignore unknown lines */
- }
-
- string_mapping:
- line = getnextline(f);
- switch(line) {
- case EOF_LINE: goto error;
- case ENDMAPPING_LINE:
- mapping->recode = FontEncUndefinedRecode;
- mapping->name = FontEncSimpleName;
- mapping->client_data = sn =
- (FontEncSimpleNamePtr)xalloc(sizeof(FontEncSimpleNameRec));
- if(sn == NULL)
- goto error;
- if(first > last) {
- xfree(sn);
- mapping->client_data = sn = NULL;
- goto error;
- }
- sn->first = first;
- sn->len = last - first + 1;
- sn->map = (char**)xalloc(sn->len*sizeof(char*));
- if(sn->map == NULL) {
- xfree(sn);
- mapping->client_data = sn = NULL;
- goto error;
- }
- for(i = 0; i < sn->len; i++)
- sn->map[i] = nam[first+i];
- install_mapping(encoding,mapping);
- mapping = 0;
- first = 0xFFFF; last=0;
- goto no_mapping;
- case NAME_LINE:
- if(value1 >= 0x10000) goto string_mapping;
- if(namsize == 0) {
- namsize = (value1) < 256 ? 256 : 0x10000;
- nam = (char**)xalloc(namsize * sizeof(char*));
- if(nam == NULL) {
- namsize=0;
- goto error;
- }
- } else if(namsize <= value1) {
- namsize = 0x10000;
- if((newnam = (char**)xrealloc(nam, namsize)) == NULL)
- goto error;
- nam = newnam;
- }
- if(first > last) {
- first = last = value1;
- }
- if(value1 < first) {
- for(i = value1; i < first; i++)
- nam[i] = NULL;
- first = value1;
- }
- if(value1 > last) {
- for(i=last+1; i <= value1; i++)
- nam[i]=NULL;
- last = value1;
- }
- nam[value1] = (char*)xalloc(strlen(keyword_value)+1);
- if(nam[value1] == NULL) {
- goto error;
- }
- strcpy(nam[value1], keyword_value);
- goto string_mapping;
-
- default: goto string_mapping; /* ignore unknown lines */
- }
-
- done:
- if(encsize) xfree(enc); encsize=0; enc = NULL;
- if(namsize) xfree(nam); namsize=0; nam = NULL; /* don't free entries! */
-
- encoding->aliases=NULL;
- if(numaliases) {
- encoding->aliases = (char**)xalloc((numaliases+1)*sizeof(char*));
- if(encoding->aliases == NULL)
- goto error;
- for(i=0; i<numaliases; i++)
- encoding->aliases[i] = aliases[i];
- encoding->aliases[numaliases]=NULL;
- }
-
- return encoding;
-
-error:
- if(encsize) xfree(enc); encsize=0;
- if(namsize) {
- for(i = first; i <= last; i++)
- if(nam[i])
- xfree(nam[i]);
- xfree(nam);
- namsize = 0;
- }
- if(mapping) {
- if(mapping->client_data) xfree(mapping->client_data);
- xfree(mapping);
- }
- if(encoding) {
- if(encoding->name) xfree(encoding->name);
- for(mapping = encoding->mappings; mapping; mapping = mapping->next) {
- if(mapping->client_data) xfree(mapping->client_data);
- xfree(mapping);
- }
- xfree(encoding);
- }
- for(i = 0; i < numaliases; i++)
- xfree(aliases[i]);
- /* We don't need to free sn and sm as they handled locally in the body.*/
- return 0;
-}
-
-char*
-FontEncDirectory()
-{
- static char* dir = NULL;
-
- if(dir == NULL) {
- char *c = getenv("FONT_ENCODINGS_DIRECTORY");
- if(c) {
- dir = malloc(strlen(c) + 1);
- if(!dir)
- return NULL;
- strcpy(dir, c);
- } else {
- dir = FONT_ENCODINGS_DIRECTORY;
- }
- }
- return dir;
-}
-
-static void
-parseFontFileName(const char *fontFileName, char *buf, char *dir)
-{
- const char *p;
- char *q, *lastslash;
-
- for(p = fontFileName, q = dir, lastslash = NULL; *p; p++, q++) {
- *q = *p;
- if(*p == '/')
- lastslash = q+1;
- }
-
- if(!lastslash)
- lastslash = dir;
-
- *lastslash = '\0';
-
- if(buf && strlen(dir) + 14 < MAXFONTFILENAMELEN) {
- strcpy(buf, dir);
- strcat(buf, "encodings.dir");
- }
-}
-
-static FontEncPtr
-FontEncReallyReallyLoad(const char *charset,
- const char *dirname, const char *dir)
-{
- FontFilePtr f;
- FILE *file;
- FontEncPtr encoding;
- char file_name[MAXFONTFILENAMELEN], encoding_name[MAXFONTNAMELEN],
- buf[MAXFONTFILENAMELEN];
- int count, n;
- static char format[24] = "";
-
- /* As we don't really expect to open encodings that often, we don't
- take the trouble of caching encodings directories. */
-
- if((file = fopen(dirname, "r")) == NULL) {
- return NULL;
- }
-
- count = fscanf(file, "%d\n", &n);
- if(count == EOF || count != 1) {
- fclose(file);
- return NULL;
- }
-
- encoding = NULL;
- if (!format[0]) {
- sprintf(format, "%%%ds %%%d[^\n]\n", (int)sizeof(encoding_name) - 1,
- (int)sizeof(file_name) - 1);
- }
- for(;;) {
- count = fscanf(file, format, encoding_name, file_name);
- if(count == EOF)
- break;
- if(count != 2)
- break;
-
- if(!strcasecmp(encoding_name, charset)) {
- /* Found it */
- if(file_name[0] != '/') {
- if(strlen(dir) + strlen(file_name) >= MAXFONTFILENAMELEN) {
- fclose(file);
- return NULL;
- }
- strcpy(buf, dir);
- strcat(buf, file_name);
- } else {
- strcpy(buf , file_name);
- }
-
- f = FontFileOpen(buf);
- if(f == NULL) {
- fclose(file);
- return NULL;
- }
- encoding = parseEncodingFile(f, 0);
- FontFileClose(f);
- break;
- }
- }
-
- fclose(file);
-
- return encoding;
-}
-
-/* Parser ntrypoint -- used by FontEncLoad */
-FontEncPtr
-FontEncReallyLoad(const char *charset, const char *fontFileName)
-{
- FontEncPtr encoding;
- char dir[MAXFONTFILENAMELEN], dirname[MAXFONTFILENAMELEN];
- char *d;
-
- if(fontFileName) {
- parseFontFileName(fontFileName, dirname, dir);
- encoding = FontEncReallyReallyLoad(charset, dirname, dir);
- if(encoding)
- return(encoding);
- }
-
- d = FontEncDirectory();
- if(d) {
- parseFontFileName(d, NULL, dir);
- encoding = FontEncReallyReallyLoad(charset, d, dir);
- return encoding;
- }
-
- return NULL;
-}
-
-/* Return a NULL-terminated array of encoding names. Note that this
- * function has incestuous knowledge of the allocations done by
- * parseEncodingFile. */
-
-char **
-FontEncIdentify(const char *fileName)
-{
- FontFilePtr f;
- FontEncPtr encoding;
- char **names, **name, **alias;
- int numaliases;
-
- if((f = FontFileOpen(fileName))==NULL) {
- return NULL;
- }
- encoding = parseEncodingFile(f, 1);
- FontFileClose(f);
-
- if(!encoding)
- return NULL;
-
- numaliases = 0;
- if(encoding->aliases)
- for(alias = encoding->aliases; *alias; alias++)
- numaliases++;
-
- names = (char**)xalloc((numaliases+2)*sizeof(char*));
- if(names == NULL) {
- if(encoding->aliases)
- xfree(encoding->aliases);
- xfree(encoding);
- return NULL;
- }
-
- name = names;
- *(name++) = encoding->name;
- if(numaliases > 0)
- for(alias = encoding->aliases; *alias; alias++, name++)
- *name = *alias;
-
- *name = 0;
- xfree(encoding->aliases);
- xfree(encoding);
-
- return names;
-}
diff --git a/nx-X11/lib/font/fontfile/ffcheck.c b/nx-X11/lib/font/fontfile/ffcheck.c
deleted file mode 100644
index d3d121700..000000000
--- a/nx-X11/lib/font/fontfile/ffcheck.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/* $Xorg: ffcheck.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/ffcheck.c,v 1.15tsi Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-/* $NCDXorg: @(#)fontfile.c,v 1.6 1991/07/02 17:00:46 lemke Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/bitmap.h>
-#ifdef LOADABLEFONTS
-#include <X11/fonts/fontmod.h>
-#endif
-
-/*
- * Map FPE functions to renderer functions
- */
-
-
-/* Here we must check the client to see if it has a context attached to
- * it that allows us to access the printer fonts
- */
-
-static int
-FontFileCheckOpenFont (pointer client, FontPathElementPtr fpe, Mask flags,
- char *name, int namelen,
- fsBitmapFormat format, fsBitmapFormatMask fmask,
- XID id, FontPtr *pFont, char **aliasName,
- FontPtr non_cachable_font)
-{
- if (XpClientIsBitmapClient(client))
- return (FontFileOpenFont (client, fpe, flags, name, namelen, format,
- fmask, id, pFont, aliasName, non_cachable_font));
- return BadFontName;
-}
-
-static int
-FontFileCheckListFonts (pointer client, FontPathElementPtr fpe,
- char *pat, int len, int max, FontNamesPtr names)
-{
- if (XpClientIsBitmapClient(client))
- return FontFileListFonts (client, fpe, pat, len, max, names);
- return BadFontName;
-}
-
-static int
-FontFileCheckStartListFontsWithInfo(pointer client, FontPathElementPtr fpe,
- char *pat, int len, int max,
- pointer *privatep)
-{
- if (XpClientIsBitmapClient(client))
- return FontFileStartListFontsWithInfo(client, fpe, pat, len,
- max, privatep);
- return BadFontName;
-}
-
-static int
-FontFileCheckListNextFontWithInfo(pointer client, FontPathElementPtr fpe,
- char **namep, int *namelenp,
- FontInfoPtr *pFontInfo,
- int *numFonts, pointer private)
-{
- if (XpClientIsBitmapClient(client))
- return FontFileListNextFontWithInfo(client, fpe, namep, namelenp,
- pFontInfo, numFonts, private);
- return BadFontName;
-}
-
-static int
-FontFileCheckStartListFontsAndAliases(pointer client, FontPathElementPtr fpe,
- char *pat, int len, int max,
- pointer *privatep)
-{
- if (XpClientIsBitmapClient(client))
- return FontFileStartListFontsAndAliases(client, fpe, pat, len,
- max, privatep);
- return BadFontName;
-}
-
-static int
-FontFileCheckListNextFontOrAlias(pointer client, FontPathElementPtr fpe,
- char **namep, int *namelenp,
- char **resolvedp, int *resolvedlenp,
- pointer private)
-{
- if (XpClientIsBitmapClient(client))
- return FontFileListNextFontOrAlias(client, fpe, namep, namelenp,
- resolvedp, resolvedlenp, private);
- return BadFontName;
-}
-
-void
-FontFileCheckRegisterFpeFunctions (void)
-{
-#ifndef LOADABLEFONTS
- BitmapRegisterFontFileFunctions ();
-
-
-#ifdef BUILD_SPEEDO
- SpeedoRegisterFontFileFunctions ();
-#endif
-#ifdef BUILD_TYPE1
- Type1RegisterFontFileFunctions();
-#endif
-#ifdef BUILD_CID
- CIDRegisterFontFileFunctions();
-#endif
-#ifdef BUILD_FREETYPE
- FreeTypeRegisterFontFileFunctions();
-#endif
-
-
-#else
-
- {
- int i;
-
- if (FontModuleList) {
- for (i = 0; FontModuleList[i].name; i++) {
- if (FontModuleList[i].initFunc)
- FontModuleList[i].initFunc();
- }
- }
- }
-#endif
-
- RegisterFPEFunctions(FontFileNameCheck,
- FontFileInitFPE,
- FontFileFreeFPE,
- FontFileResetFPE,
- FontFileCheckOpenFont,
- FontFileCloseFont,
- FontFileCheckListFonts,
- FontFileCheckStartListFontsWithInfo,
- FontFileCheckListNextFontWithInfo,
- NULL,
- NULL,
- NULL,
- FontFileCheckStartListFontsAndAliases,
- FontFileCheckListNextFontOrAlias,
- FontFileEmptyBitmapSource);
-}
diff --git a/nx-X11/lib/font/fontfile/fileio.c b/nx-X11/lib/font/fontfile/fileio.c
deleted file mode 100644
index a3f94640b..000000000
--- a/nx-X11/lib/font/fontfile/fileio.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* $Xorg: fileio.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/fileio.c,v 3.9 2001/12/14 19:56:51 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilio.h>
-#include <X11/Xos.h>
-#ifndef O_BINARY
-#define O_BINARY O_RDONLY
-#endif
-
-FontFilePtr
-FontFileOpen (const char *name)
-{
- int fd;
- int len;
- BufFilePtr raw, cooked;
-
- fd = open (name, O_BINARY);
- if (fd < 0)
- return 0;
- raw = BufFileOpenRead (fd);
- if (!raw)
- {
- close (fd);
- return 0;
- }
- len = strlen (name);
-#ifndef __UNIXOS2__
- if (len > 2 && !strcmp (name + len - 2, ".Z")) {
-#else
- if (len > 2 && (!strcmp (name + len - 4, ".pcz") ||
- !strcmp (name + len - 2, ".Z"))) {
-#endif
- cooked = BufFilePushCompressed (raw);
- if (!cooked) {
- BufFileClose (raw, TRUE);
- return 0;
- }
- raw = cooked;
-#ifdef X_GZIP_FONT_COMPRESSION
- } else if (len > 3 && !strcmp (name + len - 3, ".gz")) {
- cooked = BufFilePushZIP (raw);
- if (!cooked) {
- BufFileClose (raw, TRUE);
- return 0;
- }
- raw = cooked;
-#endif
- }
- return (FontFilePtr) raw;
-}
-
-int
-FontFileClose (FontFilePtr f)
-{
- return BufFileClose ((BufFilePtr) f, TRUE);
-}
-
diff --git a/nx-X11/lib/font/fontfile/filewr.c b/nx-X11/lib/font/fontfile/filewr.c
deleted file mode 100644
index d076f166a..000000000
--- a/nx-X11/lib/font/fontfile/filewr.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* $Xorg: filewr.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/filewr.c,v 3.6 2001/12/14 19:56:51 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilio.h>
-#include <X11/Xos.h>
-
-FontFilePtr
-FontFileOpenWrite (const char *name)
-{
- int fd;
-
-#if defined(WIN32) || defined(__UNIXOS2__) || defined(__CYGWIN__)
- fd = open (name, O_CREAT|O_TRUNC|O_RDWR|O_BINARY, 0666);
-#else
- fd = creat (name, 0666);
-#endif
- if (fd < 0)
- return 0;
- return (FontFilePtr) BufFileOpenWrite (fd);
-}
-
-FontFilePtr
-FontFileOpenWriteFd (int fd)
-{
- return (FontFilePtr) BufFileOpenWrite (fd);
-}
-
-FontFilePtr
-FontFileOpenFd (int fd)
-{
- return (FontFilePtr) BufFileOpenRead (fd);
-}
diff --git a/nx-X11/lib/font/fontfile/fontdir.c b/nx-X11/lib/font/fontfile/fontdir.c
deleted file mode 100644
index 899ff05ef..000000000
--- a/nx-X11/lib/font/fontfile/fontdir.c
+++ /dev/null
@@ -1,832 +0,0 @@
-/* $XdotOrg: xc/lib/font/fontfile/fontdir.c,v 1.6 2005/11/14 20:40:42 ajax Exp $ */
-/* $Xorg: fontdir.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/fontdir.c,v 3.22 2003/07/07 16:40:11 eich Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-#include <X11/keysym.h>
-
-#if HAVE_STDINT_H
-#include <stdint.h>
-#elif !defined(INT32_MAX)
-#define INT32_MAX 0x7fffffff
-#endif
-
-Bool
-FontFileInitTable (FontTablePtr table, int size)
-{
- if (size < 0 || (size > INT32_MAX/sizeof(FontEntryRec)))
- return FALSE;
- if (size)
- {
- table->entries = (FontEntryPtr) xalloc(sizeof(FontEntryRec) * size);
- if (!table->entries)
- return FALSE;
- }
- else
- table->entries = 0;
- table->used = 0;
- table->size = size;
- table->sorted = FALSE;
- return TRUE;
-}
-
-void
-FontFileFreeEntry (FontEntryPtr entry)
-{
- FontScalableExtraPtr extra;
- int i;
-
- if (entry->name.name)
- xfree(entry->name.name);
- entry->name.name = NULL;
-
- switch (entry->type)
- {
- case FONT_ENTRY_SCALABLE:
- xfree (entry->u.scalable.fileName);
- extra = entry->u.scalable.extra;
- for (i = 0; i < extra->numScaled; i++)
- if (extra->scaled[i].vals.ranges)
- xfree (extra->scaled[i].vals.ranges);
- xfree (extra->scaled);
- xfree (extra);
- break;
- case FONT_ENTRY_BITMAP:
- xfree (entry->u.bitmap.fileName);
- entry->u.bitmap.fileName = NULL;
- break;
- case FONT_ENTRY_ALIAS:
- xfree (entry->u.alias.resolved);
- entry->u.alias.resolved = NULL;
- break;
-#ifdef NOTYET
- case FONT_ENTRY_BC:
- break;
-#endif
- }
-}
-
-void
-FontFileFreeTable (FontTablePtr table)
-{
- int i;
-
- for (i = 0; i < table->used; i++)
- FontFileFreeEntry (&table->entries[i]);
- xfree (table->entries);
-}
-
-FontDirectoryPtr
-FontFileMakeDir(char *dirName, int size)
-{
- FontDirectoryPtr dir;
- int dirlen;
- int needslash = 0;
- char *attrib;
- int attriblen;
-
-#if !defined(__UNIXOS2__) && !defined(WIN32)
- attrib = strchr(dirName, ':');
-#else
- /* OS/2 uses the colon in the drive letter descriptor, skip this */
- attrib = strchr(dirName+2, ':');
-#endif
- if (attrib) {
- dirlen = attrib - dirName;
- attriblen = strlen(attrib);
- } else {
- dirlen = strlen(dirName);
- attriblen = 0;
- }
- if (dirName[dirlen - 1] != '/')
-#ifdef NCD
- if (dirlen) /* leave out slash for builtins */
-#endif
- needslash = 1;
- dir = (FontDirectoryPtr) xalloc(sizeof *dir + dirlen + needslash + 1 +
- (attriblen ? attriblen + 1 : 0));
- if (!dir)
- return (FontDirectoryPtr)0;
- if (!FontFileInitTable (&dir->scalable, 0))
- {
- xfree (dir);
- return (FontDirectoryPtr)0;
- }
- if (!FontFileInitTable (&dir->nonScalable, size))
- {
- FontFileFreeTable (&dir->scalable);
- xfree (dir);
- return (FontDirectoryPtr)0;
- }
- dir->directory = (char *) (dir + 1);
- dir->dir_mtime = 0;
- dir->alias_mtime = 0;
- if (attriblen)
- dir->attributes = dir->directory + dirlen + needslash + 1;
- else
- dir->attributes = NULL;
- strncpy(dir->directory, dirName, dirlen);
- dir->directory[dirlen] = '\0';
- if (dir->attributes)
- strcpy(dir->attributes, attrib);
- if (needslash)
- strcat(dir->directory, "/");
- return dir;
-}
-
-void
-FontFileFreeDir (FontDirectoryPtr dir)
-{
- FontFileFreeTable (&dir->scalable);
- FontFileFreeTable (&dir->nonScalable);
- xfree(dir);
-}
-
-FontEntryPtr
-FontFileAddEntry(FontTablePtr table, FontEntryPtr prototype)
-{
- FontEntryPtr entry;
- int newsize;
-
- /* can't add entries to a sorted table, pointers get broken! */
- if (table->sorted)
- return (FontEntryPtr) 0; /* "cannot" happen */
- if (table->used == table->size) {
- if (table->size >= ((INT32_MAX / sizeof(FontEntryRec)) - 100))
- /* If we've read so many entries we're going to ask for 2gb
- or more of memory, something is so wrong with this font
- directory that we should just give up before we overflow. */
- return NULL;
- newsize = table->size + 100;
- entry = (FontEntryPtr) xrealloc(table->entries,
- newsize * sizeof(FontEntryRec));
- if (!entry)
- return (FontEntryPtr)0;
- table->size = newsize;
- table->entries = entry;
- }
- entry = &table->entries[table->used];
- *entry = *prototype;
- entry->name.name = (char *) xalloc(prototype->name.length + 1);
- if (!entry->name.name)
- return (FontEntryPtr)0;
- memcpy (entry->name.name, prototype->name.name, prototype->name.length);
- entry->name.name[entry->name.length] = '\0';
- table->used++;
- return entry;
-}
-
-/*
- * Compare two strings just like strcmp, but preserve decimal integer
- * sorting order, i.e. "2" < "10" or "iso8859-2" < "iso8859-10" <
- * "iso10646-1". Strings are sorted as if sequences of digits were
- * prefixed by a length indicator (i.e., does not ignore leading zeroes).
- *
- * Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>
- */
-#define Xisdigit(c) ('\060' <= (c) && (c) <= '\071')
-
-static int strcmpn(const char *s1, const char *s2)
-{
- int digits, predigits = 0;
- const char *ss1, *ss2;
-
- while (1) {
- if (*s1 == 0 && *s2 == 0)
- return 0;
- digits = Xisdigit(*s1) && Xisdigit(*s2);
- if (digits && !predigits) {
- ss1 = s1;
- ss2 = s2;
- while (Xisdigit(*ss1) && Xisdigit(*ss2))
- ss1++, ss2++;
- if (!Xisdigit(*ss1) && Xisdigit(*ss2))
- return -1;
- if (Xisdigit(*ss1) && !Xisdigit(*ss2))
- return 1;
- }
- if ((unsigned char)*s1 < (unsigned char)*s2)
- return -1;
- if ((unsigned char)*s1 > (unsigned char)*s2)
- return 1;
- predigits = digits;
- s1++, s2++;
- }
-}
-
-
-static int
-FontFileNameCompare(const void* a, const void* b)
-{
- FontEntryPtr a_name = (FontEntryPtr) a,
- b_name = (FontEntryPtr) b;
-
- return strcmpn(a_name->name.name, b_name->name.name);
-}
-
-void
-FontFileSortTable (FontTablePtr table)
-{
- if (!table->sorted) {
- qsort((char *) table->entries, table->used, sizeof(FontEntryRec),
- FontFileNameCompare);
- table->sorted = TRUE;
- }
-}
-
-void
-FontFileSortDir(FontDirectoryPtr dir)
-{
- FontFileSortTable (&dir->scalable);
- FontFileSortTable (&dir->nonScalable);
- /* now that the table is fixed in size, swizzle the pointers */
- FontFileSwitchStringsToBitmapPointers (dir);
-}
-
-/*
- Given a Font Table, SetupWildMatch() sets up various pointers and state
- information so the table can be searched for name(s) that match a given
- fontname pattern -- which may contain wildcards. Under certain
- circumstances, SetupWildMatch() will find the one table entry that
- matches the pattern. If those circumstances do not pertain,
- SetupWildMatch() returns a range within the the table that should be
- searched for matching name(s). With the information established by
- SetupWildMatch(), including state information in "private", the
- PatternMatch() procedure is then used to test names in the range for a
- match.
-*/
-
-#define isWild(c) ((c) == XK_asterisk || (c) == XK_question)
-#define isDigit(c) (XK_0 <= (c) && (c) <= XK_9)
-
-static int
-SetupWildMatch(FontTablePtr table, FontNamePtr pat,
- int *leftp, int *rightp, int *privatep)
-{
- int nDashes;
- char c;
- char *t;
- char *firstWild;
- char *firstDigit;
- int first;
- int center,
- left,
- right;
- int result;
- char *name;
-
- name = pat->name;
- nDashes = pat->ndashes;
- firstWild = 0;
- firstDigit = 0;
- t = name;
- while ((c = *t++)) {
- if (isWild(c)) {
- if (!firstWild)
- firstWild = t - 1;
- }
- if (isDigit(c)) {
- if (!firstDigit)
- firstDigit = t - 1;
- }
- }
- left = 0;
- right = table->used;
- if (firstWild)
- *privatep = nDashes;
- else
- *privatep = -1;
- if (!table->sorted) {
- *leftp = left;
- *rightp = right;
- return -1;
- } else if (firstWild) {
- if (firstDigit && firstDigit < firstWild)
- first = firstDigit - name;
- else
- first = firstWild - name;
- while (left < right) {
- center = (left + right) / 2;
- result = strncmp(name, table->entries[center].name.name, first);
- if (result == 0)
- break;
- if (result < 0)
- right = center;
- else
- left = center + 1;
- }
- *leftp = left;
- *rightp = right;
- return -1;
- } else {
- while (left < right) {
- center = (left + right) / 2;
- result = strcmpn(name, table->entries[center].name.name);
- if (result == 0)
- return center;
- if (result < 0)
- right = center;
- else
- left = center + 1;
- }
- *leftp = 1;
- *rightp = 0;
- return -1;
- }
-}
-
-static int
-PatternMatch(char *pat, int patdashes, char *string, int stringdashes)
-{
- char c,
- t;
-
- if (stringdashes < patdashes)
- return 0;
- for (;;) {
- switch (c = *pat++) {
- case '*':
- if (!(c = *pat++))
- return 1;
- if (c == XK_minus) {
- patdashes--;
- for (;;) {
- while ((t = *string++) != XK_minus)
- if (!t)
- return 0;
- stringdashes--;
- if (PatternMatch(pat, patdashes, string, stringdashes))
- return 1;
- if (stringdashes == patdashes)
- return 0;
- }
- } else {
- for (;;) {
- while ((t = *string++) != c) {
- if (!t)
- return 0;
- if (t == XK_minus) {
- if (stringdashes-- < patdashes)
- return 0;
- }
- }
- if (PatternMatch(pat, patdashes, string, stringdashes))
- return 1;
- }
- }
- case '?':
- if (*string++ == XK_minus)
- stringdashes--;
- break;
- case '\0':
- return (*string == '\0');
- case XK_minus:
- if (*string++ == XK_minus) {
- patdashes--;
- stringdashes--;
- break;
- }
- return 0;
- default:
- if (c == *string++)
- break;
- return 0;
- }
- }
-}
-
-int
-FontFileCountDashes (char *name, int namelen)
-{
- int ndashes = 0;
-
- while (namelen--)
- if (*name++ == '\055') /* avoid non ascii systems */
- ++ndashes;
- return ndashes;
-}
-
-char *
-FontFileSaveString (char *s)
-{
- char *n;
-
- n = (char *) xalloc (strlen (s) + 1);
- if (!n)
- return 0;
- strcpy (n, s);
- return n;
-}
-
-FontEntryPtr
-FontFileFindNameInScalableDir(FontTablePtr table, FontNamePtr pat,
- FontScalablePtr vals)
-{
- int i,
- start,
- stop,
- res,
- private;
- FontNamePtr name;
-
- if ((i = SetupWildMatch(table, pat, &start, &stop, &private)) >= 0)
- return &table->entries[i];
- for (i = start; i < stop; i++) {
- name = &table->entries[i].name;
- res = PatternMatch(pat->name, private, name->name, name->ndashes);
- if (res > 0)
- {
- /* Check to see if enhancements requested are available */
- if (vals)
- {
- int vs = vals->values_supplied;
- int cap;
-
- if (table->entries[i].type == FONT_ENTRY_SCALABLE)
- cap = table->entries[i].u.scalable.renderer->capabilities;
- else if (table->entries[i].type == FONT_ENTRY_ALIAS)
- cap = ~0; /* Calling code will have to see if true */
- else
- cap = 0;
- if ((((vs & PIXELSIZE_MASK) == PIXELSIZE_ARRAY ||
- (vs & POINTSIZE_MASK) == POINTSIZE_ARRAY) &&
- !(cap & CAP_MATRIX)) ||
- ((vs & CHARSUBSET_SPECIFIED) &&
- !(cap & CAP_CHARSUBSETTING)))
- continue;
- }
- return &table->entries[i];
- }
- if (res < 0)
- break;
- }
- return (FontEntryPtr)0;
-}
-
-FontEntryPtr
-FontFileFindNameInDir(FontTablePtr table, FontNamePtr pat)
-{
- return FontFileFindNameInScalableDir(table, pat, (FontScalablePtr)0);
-}
-
-int
-FontFileFindNamesInScalableDir(FontTablePtr table, FontNamePtr pat, int max,
- FontNamesPtr names, FontScalablePtr vals,
- int alias_behavior, int *newmax)
-{
- int i,
- start,
- stop,
- res,
- private;
- int ret = Successful;
- FontEntryPtr fname;
- FontNamePtr name;
-
- if (max <= 0)
- return Successful;
- if ((i = SetupWildMatch(table, pat, &start, &stop, &private)) >= 0) {
- if (alias_behavior == NORMAL_ALIAS_BEHAVIOR ||
- table->entries[i].type != FONT_ENTRY_ALIAS)
- {
- name = &table->entries[i].name;
- if (newmax) *newmax = max - 1;
- return AddFontNamesName(names, name->name, name->length);
- }
- start = i;
- stop = i + 1;
- }
- for (i = start, fname = &table->entries[start]; i < stop; i++, fname++) {
- res = PatternMatch(pat->name, private, fname->name.name, fname->name.ndashes);
- if (res > 0) {
- if (vals)
- {
- int vs = vals->values_supplied;
- int cap;
-
- if (fname->type == FONT_ENTRY_SCALABLE)
- cap = fname->u.scalable.renderer->capabilities;
- else if (fname->type == FONT_ENTRY_ALIAS)
- cap = ~0; /* Calling code will have to see if true */
- else
- cap = 0;
- if ((((vs & PIXELSIZE_MASK) == PIXELSIZE_ARRAY ||
- (vs & POINTSIZE_MASK) == POINTSIZE_ARRAY) &&
- !(cap & CAP_MATRIX)) ||
- ((vs & CHARSUBSET_SPECIFIED) &&
- !(cap & CAP_CHARSUBSETTING)))
- continue;
- }
-
- if ((alias_behavior & IGNORE_SCALABLE_ALIASES) &&
- fname->type == FONT_ENTRY_ALIAS)
- {
- FontScalableRec tmpvals;
- if (FontParseXLFDName (fname->name.name, &tmpvals,
- FONT_XLFD_REPLACE_NONE) &&
- !(tmpvals.values_supplied & SIZE_SPECIFY_MASK))
- continue;
- }
-
- ret = AddFontNamesName(names, fname->name.name, fname->name.length);
- if (ret != Successful)
- goto bail;
-
- /* If alias_behavior is LIST_ALIASES_AND_TARGET_NAMES, mark
- this entry as an alias by negating its length and follow
- it by the resolved name */
- if ((alias_behavior & LIST_ALIASES_AND_TARGET_NAMES) &&
- fname->type == FONT_ENTRY_ALIAS)
- {
- names->length[names->nnames - 1] =
- -names->length[names->nnames - 1];
- ret = AddFontNamesName(names, fname->u.alias.resolved,
- strlen(fname->u.alias.resolved));
- if (ret != Successful)
- goto bail;
- }
-
- if (--max <= 0)
- break;
- } else if (res < 0)
- break;
- }
- bail: ;
- if (newmax) *newmax = max;
- return ret;
-}
-
-int
-FontFileFindNamesInDir(FontTablePtr table, FontNamePtr pat,
- int max, FontNamesPtr names)
-{
- return FontFileFindNamesInScalableDir(table, pat, max, names,
- (FontScalablePtr)0,
- NORMAL_ALIAS_BEHAVIOR, (int *)0);
-}
-
-Bool
-FontFileMatchName(char *name, int length, FontNamePtr pat)
-{
- /* Perform a fontfile-type name match on a single name */
- FontTableRec table;
- FontEntryRec entries[1];
-
- /* Dummy up a table */
- table.used = 1;
- table.size = 1;
- table.sorted = TRUE;
- table.entries = entries;
- entries[0].name.name = name;
- entries[0].name.length = length;
- entries[0].name.ndashes = FontFileCountDashes(name, length);
-
- return FontFileFindNameInDir(&table, pat) != (FontEntryPtr)0;
-}
-
-/*
- * Add a font file to a directory. This handles bitmap and
- * scalable names both
- */
-
-Bool
-FontFileAddFontFile (FontDirectoryPtr dir, char *fontName, char *fileName)
-{
- FontEntryRec entry;
- FontScalableRec vals, zeroVals;
- FontRendererPtr renderer;
- FontEntryPtr existing;
- FontScalableExtraPtr extra;
- FontEntryPtr bitmap = 0, scalable;
- Bool isscale;
- Bool scalable_xlfd;
-
- renderer = FontFileMatchRenderer (fileName);
- if (!renderer)
- return FALSE;
- entry.name.length = strlen (fontName);
- if (entry.name.length > MAXFONTNAMELEN)
- entry.name.length = MAXFONTNAMELEN;
- entry.name.name = fontName;
- CopyISOLatin1Lowered (entry.name.name, fontName, entry.name.length);
- entry.name.ndashes = FontFileCountDashes (entry.name.name, entry.name.length);
- entry.name.name[entry.name.length] = '\0';
- /*
- * Add a bitmap name if the incoming name isn't an XLFD name, or
- * if it isn't a scalable name (i.e. non-zero scalable fields)
- *
- * If name of bitmapped font contains XLFD enhancements, do not add
- * a scalable version of the name... this can lead to confusion and
- * ambiguity between the font name and the field enhancements.
- */
- isscale = entry.name.ndashes == 14 &&
- FontParseXLFDName(entry.name.name,
- &vals, FONT_XLFD_REPLACE_NONE) &&
- (vals.values_supplied & PIXELSIZE_MASK) != PIXELSIZE_ARRAY &&
- (vals.values_supplied & POINTSIZE_MASK) != POINTSIZE_ARRAY &&
- !(vals.values_supplied & ENHANCEMENT_SPECIFY_MASK);
-#define UNSCALED_ATTRIB "unscaled"
- scalable_xlfd = (isscale &&
- (((vals.values_supplied & PIXELSIZE_MASK) == 0) ||
- ((vals.values_supplied & POINTSIZE_MASK) == 0)));
- /*
- * For scalable fonts without a scalable XFLD, check if the "unscaled"
- * attribute is present.
- */
- if (isscale && !scalable_xlfd &&
- dir->attributes && dir->attributes[0] == ':') {
- char *ptr1 = dir->attributes + 1;
- char *ptr2;
- int length;
- int uslength = strlen(UNSCALED_ATTRIB);
-
- do {
- ptr2 = strchr(ptr1, ':');
- if (ptr2)
- length = ptr2 - ptr1;
- else
- length = dir->attributes + strlen(dir->attributes) - ptr1;
- if (length == uslength && !strncmp(ptr1, UNSCALED_ATTRIB, uslength))
- isscale = FALSE;
- if (ptr2)
- ptr1 = ptr2 + 1;
- } while (ptr2);
- }
- if (!isscale || (vals.values_supplied & SIZE_SPECIFY_MASK))
- {
- /*
- * If the renderer doesn't support OpenBitmap, FontFileOpenFont
- * will still do the right thing.
- */
- entry.type = FONT_ENTRY_BITMAP;
- entry.u.bitmap.renderer = renderer;
- entry.u.bitmap.pFont = NullFont;
- if (!(entry.u.bitmap.fileName = FontFileSaveString (fileName)))
- return FALSE;
- if (!(bitmap = FontFileAddEntry (&dir->nonScalable, &entry)))
- {
- xfree (entry.u.bitmap.fileName);
- return FALSE;
- }
- }
- /*
- * Parse out scalable fields from XLFD names - a scalable name
- * just gets inserted, a scaled name has more things to do.
- */
- if (isscale)
- {
- if (vals.values_supplied & SIZE_SPECIFY_MASK)
- {
- bzero((char *)&zeroVals, sizeof(zeroVals));
- zeroVals.x = vals.x;
- zeroVals.y = vals.y;
- zeroVals.values_supplied = PIXELSIZE_SCALAR | POINTSIZE_SCALAR;
- FontParseXLFDName (entry.name.name, &zeroVals,
- FONT_XLFD_REPLACE_VALUE);
- entry.name.length = strlen (entry.name.name);
- existing = FontFileFindNameInDir (&dir->scalable, &entry.name);
- if (existing)
- {
- if ((vals.values_supplied & POINTSIZE_MASK) ==
- POINTSIZE_SCALAR &&
- (int)(vals.point_matrix[3] * 10) == GetDefaultPointSize())
- {
- existing->u.scalable.extra->defaults = vals;
-
- xfree (existing->u.scalable.fileName);
- if (!(existing->u.scalable.fileName = FontFileSaveString (fileName)))
- return FALSE;
- }
- if(bitmap)
- {
- FontFileCompleteXLFD(&vals, &vals);
- FontFileAddScaledInstance (existing, &vals, NullFont,
- bitmap->name.name);
- return TRUE;
- }
- }
- }
- if (!(entry.u.scalable.fileName = FontFileSaveString (fileName)))
- return FALSE;
- extra = (FontScalableExtraPtr) xalloc (sizeof (FontScalableExtraRec));
- if (!extra)
- {
- xfree (entry.u.scalable.fileName);
- return FALSE;
- }
- bzero((char *)&extra->defaults, sizeof(extra->defaults));
- if ((vals.values_supplied & POINTSIZE_MASK) == POINTSIZE_SCALAR &&
- (int)(vals.point_matrix[3] * 10) == GetDefaultPointSize())
- extra->defaults = vals;
- else
- {
- FontResolutionPtr resolution;
- int num;
-
- extra->defaults.point_matrix[0] =
- extra->defaults.point_matrix[3] =
- (double)GetDefaultPointSize() / 10.0;
- extra->defaults.point_matrix[1] =
- extra->defaults.point_matrix[2] = 0.0;
- extra->defaults.values_supplied =
- POINTSIZE_SCALAR | PIXELSIZE_UNDEFINED;
- extra->defaults.width = -1;
- if (vals.x <= 0 || vals.y <= 0)
- {
- resolution = GetClientResolutions (&num);
- if (resolution && num > 0)
- {
- extra->defaults.x = resolution->x_resolution;
- extra->defaults.y = resolution->y_resolution;
- }
- else
- {
- extra->defaults.x = 75;
- extra->defaults.y = 75;
- }
- }
- else
- {
- extra->defaults.x = vals.x;
- extra->defaults.y = vals.y;
- }
- FontFileCompleteXLFD (&extra->defaults, &extra->defaults);
- }
- extra->numScaled = 0;
- extra->sizeScaled = 0;
- extra->scaled = 0;
- extra->private = 0;
- entry.type = FONT_ENTRY_SCALABLE;
- entry.u.scalable.renderer = renderer;
- entry.u.scalable.extra = extra;
- if (!(scalable = FontFileAddEntry (&dir->scalable, &entry)))
- {
- xfree (extra);
- xfree (entry.u.scalable.fileName);
- return FALSE;
- }
- if (vals.values_supplied & SIZE_SPECIFY_MASK)
- {
- if(bitmap)
- {
- FontFileCompleteXLFD(&vals, &vals);
- FontFileAddScaledInstance (scalable, &vals, NullFont,
- bitmap->name.name);
- }
- }
- }
- return TRUE;
-}
-
-Bool
-FontFileAddFontAlias (FontDirectoryPtr dir, char *aliasName, char *fontName)
-{
- FontEntryRec entry;
-
- entry.name.length = strlen (aliasName);
- CopyISOLatin1Lowered (aliasName, aliasName, entry.name.length);
- entry.name.name = aliasName;
- entry.name.ndashes = FontFileCountDashes (entry.name.name, entry.name.length);
- entry.type = FONT_ENTRY_ALIAS;
- if (!(entry.u.alias.resolved = FontFileSaveString (fontName)))
- return FALSE;
- if (!FontFileAddEntry (&dir->nonScalable, &entry))
- {
- xfree (entry.u.alias.resolved);
- return FALSE;
- }
- return TRUE;
-}
diff --git a/nx-X11/lib/font/fontfile/fontenc.c b/nx-X11/lib/font/fontfile/fontenc.c
deleted file mode 100644
index e96cdde26..000000000
--- a/nx-X11/lib/font/fontfile/fontenc.c
+++ /dev/null
@@ -1,952 +0,0 @@
-/*
-Copyright (c) 1998-2001 by Juliusz Chroboczek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-/* $XdotOrg: xc/lib/font/fontfile/fontenc.c,v 1.5 2005/11/08 06:33:26 jkj Exp $ */
-/* $XFree86: xc/lib/font/fontfile/fontenc.c,v 1.15 2003/02/20 03:25:19 dawes Exp $ */
-
-/* Backend-independent encoding code */
-
-#include <string.h>
-
-#if defined(__SCO__) || defined(__UNIXWARE__)
-#include <strings.h>
-#endif
-
-#ifndef FONTENC_NO_LIBFONT
-
-#include <X11/fonts/fontmisc.h> /* defines xalloc and friends */
-#include <X11/fonts/fntfilst.h>
-
-#else
-
-#include <stdlib.h>
-#define xalloc(n) malloc(n)
-#define xrealloc(p, n) realloc(p, n)
-#define xfree(p) free(p)
-#define FALSE 0
-#define TRUE 1
-#define MAXFONTNAMELEN 1024
-#define MAXFONTFILENAMELEN 1024
-
-#endif /* FONTENC_NO_FONTFILE */
-
-#include <X11/fonts/fontenc.h>
-#include "fontencI.h"
-
-/* Functions local to this file */
-
-static FontEncPtr FontEncLoad(const char*, const char*);
-
-/* Early versions of this code only knew about hardwired encodings,
- hence the following data. Now that the code knows how to load an
- encoding from a file, most of these tables could go away. */
-
-/* At any rate, no new hardcoded encodings will be added. */
-
-static FontMapRec iso10646[]=
-{
- {FONT_ENCODING_UNICODE,0,0,0,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-/* Notice that the Apple encodings do not have all the characters in
- the corresponding ISO 8859, and therefore the table has some holes.
- There's not much more we can do with fonts without a Unicode cmap
- unless we are willing to combine cmaps (which we are not). */
-
-static unsigned short
-iso8859_1_apple_roman[]=
-{ 0xCA, 0xC1, 0xA2, 0xA3, 0xDB, 0xB4, 0x00, 0xA4,
- 0xAC, 0xA9, 0xBB, 0xC7, 0xC2, 0x00, 0xA8, 0xF8,
- 0xA1, 0xB1, 0x00, 0x00, 0xAB, 0xB5, 0xA6, 0xE1,
- 0xFC, 0x00, 0xBC, 0xC8, 0x00, 0x00, 0x00, 0xC0,
- 0xCB, 0xE7, 0xE5, 0xCC, 0x80, 0x81, 0xAE, 0x82,
- 0xE9, 0x83, 0xE6, 0xE8, 0xED, 0xEA, 0xEB, 0xEC,
- 0x00, 0x84, 0xF1, 0xEE, 0xEF, 0xCD, 0x85, 0x00,
- 0xAF, 0xF4, 0xF2, 0xF3, 0x86, 0x00, 0x00, 0xA7,
- 0x88, 0x87, 0x89, 0x8B, 0x8A, 0x8C, 0xBE, 0x8D,
- 0x8F, 0x8E, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95,
- 0x00, 0x96, 0x98, 0x97, 0x99, 0x9B, 0x9A, 0xD6,
- 0xBF, 0x9D, 0x9C, 0x9E, 0x9F, 0x00, 0x00, 0xD8 };
-
-/* Cannot use simple_recode because need to eliminate 0x80<=code<0xA0 */
-static unsigned
-iso8859_1_to_apple_roman(unsigned isocode, void *client_data)
-{
- if(isocode<=0x80)
- return isocode;
- else if(isocode>=0xA0)
- return iso8859_1_apple_roman[isocode-0xA0];
- else
- return 0;
-}
-
-static FontMapRec iso8859_1[]=
-{
- {FONT_ENCODING_TRUETYPE,2,2,0,0,0,0}, /* ISO 8859-1 */
- {FONT_ENCODING_UNICODE,0,0,0,0,0,0}, /* ISO 8859-1 coincides with Unicode*/
- {FONT_ENCODING_TRUETYPE,1,0,iso8859_1_to_apple_roman,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-static unsigned short iso8859_2_tophalf[]=
-{ 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7,
- 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B,
- 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7,
- 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C,
- 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
- 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
- 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
- 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
- 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
- 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
- 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
- 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 };
-
-static FontEncSimpleMapRec iso8859_2_to_unicode_map=
-{0x60, 0, 0xA0, iso8859_2_tophalf };
-
-static unsigned short iso8859_2_apple_centeuro[]=
-{ 0xCA, 0x84, 0x00, 0xFC, 0x00, 0xBB, 0xE5, 0xA4,
- 0xAC, 0xE1, 0x00, 0xE8, 0x8F, 0x00, 0xEB, 0xFB,
- 0xA1, 0x88, 0x00, 0xB8, 0x00, 0xBC, 0xE6, 0xFF,
- 0x00, 0xE4, 0x00, 0xE9, 0x90, 0x00, 0xEC, 0xFD,
- 0xD9, 0xE7, 0x00, 0x00, 0x80, 0xBD, 0x8C, 0x00,
- 0x89, 0x83, 0xA2, 0x00, 0x9D, 0xEA, 0x00, 0x91,
- 0x00, 0xC1, 0xC5, 0xEE, 0xEF, 0xCC, 0x85, 0x00,
- 0xDB, 0xF1, 0xF2, 0xF4, 0x86, 0xF8, 0x00, 0xA7,
- 0xDA, 0x87, 0x00, 0x00, 0x8A, 0xBE, 0x8D, 0x00,
- 0x8B, 0x8E, 0xAB, 0x00, 0x9E, 0x92, 0x00, 0x93,
- 0x00, 0xC4, 0xCB, 0x97, 0x99, 0xCE, 0x9A, 0xD6,
- 0xDE, 0xF3, 0x9C, 0xF5, 0x9F, 0xF9, 0x00, 0x00 };
-
-static unsigned
-iso8859_2_to_apple_centeuro(unsigned isocode, void *client_data)
-{
- if(isocode<=0x80)
- return isocode;
- else if(isocode>=0xA0)
- return iso8859_2_apple_centeuro[isocode-0xA0];
- else
- return 0;
-}
-
-
-static FontMapRec iso8859_2[]=
-{
- {FONT_ENCODING_UNICODE,0,0,
- FontEncSimpleRecode,0,&iso8859_2_to_unicode_map,0},
- {FONT_ENCODING_TRUETYPE,1,29,iso8859_2_to_apple_centeuro,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-static unsigned short iso8859_3_tophalf[]=
-{ 0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4, 0x0000, 0x0124, 0x00A7,
- 0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD, 0x0000, 0x017B,
- 0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7,
- 0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD, 0x0000, 0x017C,
- 0x00C0, 0x00C1, 0x00C2, 0x0000, 0x00C4, 0x010A, 0x0108, 0x00C7,
- 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
- 0x0000, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7,
- 0x011C, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF,
- 0x00E0, 0x00E1, 0x00E2, 0x0000, 0x00E4, 0x010B, 0x0109, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
- 0x0000, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7,
- 0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9};
-
-static FontEncSimpleMapRec iso8859_3_to_unicode_map=
-{ 0x60, 0, 0xA0, iso8859_3_tophalf };
-
-static FontMapRec iso8859_3[]=
-{
- {FONT_ENCODING_UNICODE,0,0,
- FontEncSimpleRecode,0,&iso8859_3_to_unicode_map,0},
- {0,0,0,0,0,0,0}
-};
-
-
-static unsigned short iso8859_4_tophalf[]=
-{ 0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7,
- 0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF,
- 0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7,
- 0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B,
- 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E,
- 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A,
- 0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
- 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF,
- 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F,
- 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B,
- 0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
- 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9,
-};
-
-static FontEncSimpleMapRec iso8859_4_to_unicode_map=
-{ 0x60, 0, 0xA0, iso8859_4_tophalf };
-
-static FontMapRec iso8859_4[]=
-{
- {FONT_ENCODING_UNICODE,0,0,FontEncSimpleRecode,0,
- &iso8859_4_to_unicode_map,0},
- {0,0,0,0,0,0,0}
-};
-
-static unsigned short iso8859_5_tophalf[]=
-{ 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,
- 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F,
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
- 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
- 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
- 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
- 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
- 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
- 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
- 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F};
-
-static FontEncSimpleMapRec iso8859_5_to_unicode_map=
-{ 0x60, 0, 0xA0, iso8859_5_tophalf };
-
-static unsigned short
-iso8859_5_apple_cyrillic[]=
-{ 0xCA, 0xDD, 0xAB, 0xAE, 0xB8, 0xC1, 0xA7, 0xBA,
- 0xB7, 0xBC, 0xBE, 0xCB, 0xCD, 0x00, 0xD8, 0xDA,
- 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
- 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
- 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
- 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
- 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
- 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
- 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
- 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF,
- 0xDC, 0xDE, 0xAC, 0xAF, 0xB9, 0xCF, 0xB4, 0xBB,
- 0xC0, 0xBD, 0xBF, 0xCC, 0xCE, 0xA4, 0xD9, 0xDB };
-
-static unsigned
-iso8859_5_to_apple_cyrillic(unsigned isocode, void *client_data)
-{
- if(isocode<=0x80)
- return isocode;
- else if(isocode>=0xA0)
- return iso8859_5_apple_cyrillic[isocode-0x80];
- else return 0;
-}
-
-static FontMapRec iso8859_5[]=
-{
- {FONT_ENCODING_UNICODE,0,0,FontEncSimpleRecode,0,
- &iso8859_5_to_unicode_map,0},
- {FONT_ENCODING_TRUETYPE,1,7,iso8859_5_to_apple_cyrillic,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-/* ISO 8859-6 seems useless for serving fonts (not enough presentation
- * forms). What do Arabic-speakers use? */
-
-static unsigned
-iso8859_6_to_unicode(unsigned isocode, void *client_data)
-{
- if(isocode<=0xA0 || isocode==0xA4 || isocode==0xAD)
- return isocode;
- else if(isocode==0xAC || isocode==0xBB ||
- (isocode>=0xBF && isocode<=0xDA) ||
- (isocode>=0xE0 && isocode<=0xEF) ||
- (isocode>=0xF0 && isocode<=0xF2))
- return isocode-0xA0+0x0600;
- else
- return 0;
-}
-
-static FontMapRec iso8859_6[]=
-{
- {FONT_ENCODING_UNICODE,0,0,iso8859_6_to_unicode,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-static unsigned
-iso8859_7_to_unicode(unsigned isocode, void *client_data)
-{
- if(isocode<=0xA0 ||
- (isocode>=0xA3 && isocode<=0xAD) ||
- (isocode>=0xB0 && isocode<=0xB3) ||
- isocode==0xB7 || isocode==0xBB || isocode==0xBD)
- return isocode;
- else if(isocode==0xA1)
- return 0x02BD;
- else if(isocode==0xA2)
- return 0x02BC;
- else if(isocode==0xAF)
- return 0x2015;
- else if(isocode>=0xB4)
- return isocode-0xA0+0x0370;
- else
- return 0;
-}
-
-static FontMapRec iso8859_7[]=
-{
- {FONT_ENCODING_UNICODE,0,0,iso8859_7_to_unicode,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-static unsigned
-iso8859_8_to_unicode(unsigned isocode, void *client_data)
-{
- if(isocode==0xA1)
- return 0;
- else if(isocode<0xBF)
- return isocode;
- else if(isocode==0xDF)
- return 0x2017;
- else if(isocode>=0xE0 && isocode<=0xFA)
- return isocode+0x04F0;
- else
- return 0;
-}
-
-static FontMapRec iso8859_8[]=
-{
- {FONT_ENCODING_UNICODE,0,0,iso8859_8_to_unicode,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-static unsigned
-iso8859_9_to_unicode(unsigned isocode, void *client_data)
-{
- switch(isocode) {
- case 0xD0: return 0x011E;
- case 0xDD: return 0x0130;
- case 0xDE: return 0x015E;
- case 0xF0: return 0x011F;
- case 0xFD: return 0x0131;
- case 0xFE: return 0x015F;
- default: return isocode;
- }
-}
-
-static FontMapRec iso8859_9[]=
-{
- {FONT_ENCODING_UNICODE,0,0,iso8859_9_to_unicode,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-static unsigned short iso8859_10_tophalf[]=
-{ 0x00A0, 0x0104, 0x0112, 0x0122, 0x012A, 0x0128, 0x0136, 0x00A7,
- 0x013B, 0x0110, 0x0160, 0x0166, 0x017D, 0x00AD, 0x016A, 0x014A,
- 0x00B0, 0x0105, 0x0113, 0x0123, 0x012B, 0x0129, 0x0137, 0x00B7,
- 0x013C, 0x0111, 0x0161, 0x0167, 0x017E, 0x2014, 0x016B, 0x014B,
- 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E,
- 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x00CF,
- 0x00D0, 0x0145, 0x014C, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x0168,
- 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
- 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F,
- 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x00EF,
- 0x00F0, 0x0146, 0x014D, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x0169,
- 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x0138};
-
-static FontEncSimpleMapRec iso8859_10_to_unicode_map=
-{ 0x60, 0, 0xA0, iso8859_10_tophalf };
-
-static FontMapRec iso8859_10[]=
-{
- {FONT_ENCODING_UNICODE,0,0,FontEncSimpleRecode,0,
- &iso8859_10_to_unicode_map,0},
- {0,0,0,0,0,0,0}
-};
-
-static unsigned
-iso8859_15_to_unicode(unsigned isocode, void *client_data)
-{
- switch(isocode) {
- case 0xA4: return 0x20AC;
- case 0xA6: return 0x0160;
- case 0xA8: return 0x0161;
- case 0xB4: return 0x017D;
- case 0xB8: return 0x017E;
- case 0xBC: return 0x0152;
- case 0xBD: return 0x0153;
- case 0xBE: return 0x0178;
- default: return isocode;
- }
-}
-
-static FontMapRec iso8859_15[]=
-{
- {FONT_ENCODING_UNICODE,0,0,iso8859_15_to_unicode,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-static unsigned short koi8_r_tophalf[]=
-{ 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524,
- 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590,
- 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2022, 0x221A, 0x2248,
- 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7,
- 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
- 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E,
- 0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
- 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x00A9,
- 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
- 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E,
- 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
- 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A,
- 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
- 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
- 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
- 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A};
-
-static FontEncSimpleMapRec koi8_r_to_unicode_map=
-{ 0x80, 0, 0x80, koi8_r_tophalf };
-
-
-static FontMapRec koi8_r[]=
-{
- {FONT_ENCODING_UNICODE,0,0,FontEncSimpleRecode,0,
- &koi8_r_to_unicode_map,0},
- {0,0,0,0,0,0,0}
-};
-
-static unsigned
-koi8_ru_to_unicode(unsigned koicode, void *client_data)
-{
- switch(koicode) {
- case 0x93: return 0x201C;
- case 0x96: return 0x201D;
- case 0x97: return 0x2014;
- case 0x98: return 0x2116;
- case 0x99: return 0x2122;
- case 0x9B: return 0x00BB;
- case 0x9C: return 0x00AE;
- case 0x9D: return 0x00AB;
- case 0x9F: return 0x00A4;
- case 0xA4: return 0x0454;
- case 0xA6: return 0x0456;
- case 0xA7: return 0x0457;
- case 0xAD: return 0x0491;
- case 0xAE: return 0x045E;
- case 0xB4: return 0x0404;
- case 0xB6: return 0x0406;
- case 0xB7: return 0x0407;
- case 0xBD: return 0x0490;
- case 0xBE: return 0x040E;
- default: return FontEncSimpleRecode(koicode, &koi8_r_to_unicode_map);
- }
-}
-
-static FontMapRec koi8_ru[]=
-{
- {FONT_ENCODING_UNICODE,0,0,koi8_ru_to_unicode,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-/* koi8-e, ISO-IR-111 or ECMA-Cyrillic */
-
-static unsigned short koi8_e_A0_BF[]=
-{ 0x00A0, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457,
- 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00AD, 0x045E, 0x045F,
- 0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407,
- 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00A4, 0x040E, 0x040F };
-
-static unsigned
-koi8_e_to_unicode(unsigned koicode, void *client_data)
-{
- if(koicode<0xA0)
- return koicode;
- else if(koicode<0xC0)
- return koi8_e_A0_BF[koicode-0xA0];
- else
- return FontEncSimpleRecode(koicode, &koi8_r_to_unicode_map);
-}
-
-static FontMapRec koi8_e[]=
-{
- {FONT_ENCODING_UNICODE,0,0,koi8_e_to_unicode,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-/* Koi8 unified */
-
-static unsigned short koi8_uni_80_BF[]=
-{ 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524,
- 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590,
- 0x2591, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x00A9, 0x2122, 0x00A0, 0x00BB, 0x00AE, 0x00AB, 0x00B7, 0x00A4,
- 0x00A0, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457,
- 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x0491, 0x045E, 0x045F,
- 0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407,
- 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x0490, 0x040E, 0x040F };
-
-static unsigned
-koi8_uni_to_unicode(unsigned koicode, void *client_data)
-{
- if(koicode<0x80)
- return koicode;
- else if(koicode<0xC0)
- return koi8_uni_80_BF[koicode-0x80];
- else
- return FontEncSimpleRecode(koicode, &koi8_r_to_unicode_map);
-}
-
-static FontMapRec koi8_uni[]=
-{
- {FONT_ENCODING_UNICODE,0,0,koi8_uni_to_unicode,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-/* Ukrainian variant of Koi8-R; see RFC 2319 */
-
-static unsigned
-koi8_u_to_unicode(unsigned koicode, void *client_data)
-{
- switch(koicode) {
- case 0xA4: return 0x0454;
- case 0xA6: return 0x0456;
- case 0xA7: return 0x0457;
- case 0xAD: return 0x0491;
- case 0xB4: return 0x0404;
- case 0xB6: return 0x0406;
- case 0xB7: return 0x0407;
- case 0xBD: return 0x0490;
- default: return FontEncSimpleRecode(koicode, &koi8_r_to_unicode_map);
- }
-}
-
-static FontMapRec koi8_u[]=
-{
- {FONT_ENCODING_UNICODE,0,0,koi8_u_to_unicode,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-/* Microsoft Symbol, which is only meaningful for TrueType fonts, is
- treated specially in ftenc.c, where we add usFirstCharIndex-0x20 to
- the glyph index before applying the cmap. Lovely design. */
-
-static FontMapRec microsoft_symbol[]=
-{{FONT_ENCODING_TRUETYPE,3,0,0,0,0,0},
- /* You never know */
- {FONT_ENCODING_TRUETYPE,3,1,0,0,0,0},
- {0,0,0,0,0,0,0}};
-
-static FontMapRec apple_roman[]=
-{{FONT_ENCODING_TRUETYPE,1,0,0,0,0,0}, {0,0,0,0,0,0,0}};
-
-/* The data for recodings */
-
-/* For compatibility with X11R6.4. Losers. */
-static char *iso8859_15_aliases[2]={"fcd8859-15",0};
-
-static FontEncRec initial_encodings[]=
-{
- {"iso10646-1",0,256*256,0,iso10646,0,0,0}, /* Unicode */
- {"iso8859-1",0,256,0,iso8859_1,0,0,0}, /* Latin 1 (West European) */
- {"iso8859-2",0,256,0,iso8859_2,0,0,0}, /* Latin 2 (East European) */
- {"iso8859-3",0,256,0,iso8859_3,0,0,0}, /* Latin 3 (South European) */
- {"iso8859-4",0,256,0,iso8859_4,0,0,0}, /* Latin 4 (North European) */
- {"iso8859-5",0,256,0,iso8859_5,0,0,0}, /* Cyrillic */
- {"iso8859-6",0,256,0,iso8859_6,0,0,0}, /* Arabic */
- {"iso8859-7",0,256,0,iso8859_7,0,0,0}, /* Greek */
- {"iso8859-8",0,256,0,iso8859_8,0,0,0}, /* Hebrew */
- {"iso8859-9",0,256,0,iso8859_9,0,0,0}, /* Latin 5 (Turkish) */
- {"iso8859-10",0,256,0,iso8859_10,0,0,0}, /* Latin 6 (Nordic) */
- {"iso8859-15",iso8859_15_aliases,256,0,iso8859_15,0,0,0}, /* Latin 9 */
- {"koi8-r",0,256,0,koi8_r,0,0,0}, /* Russian */
- {"koi8-ru",0,256,0,koi8_ru,0,0,0}, /* Ukrainian */
- {"koi8-uni",0,256,0,koi8_uni,0,0,0}, /* Russian/Ukrainian/Bielorussian */
- {"koi8-e",0,256,0,koi8_e,0,0,0}, /* ``European'' */
- {"koi8-u",0,256,0,koi8_u,0,0,0}, /* Ukrainian too */
- {"microsoft-symbol",0,256,0,microsoft_symbol,0,0,0},
- {"apple-roman",0,256,0,apple_roman,0,0,0},
- {0,0,0,0,0,0,0}
-};
-
-static FontEncPtr font_encodings=NULL;
-
-static void
-define_initial_encoding_info(void)
-{
- FontEncPtr encoding;
- FontMapPtr mapping;
-
- font_encodings = initial_encodings;
- for(encoding = font_encodings; ; encoding++) {
- encoding->next = encoding + 1;
- for(mapping = encoding->mappings; ; mapping++) {
- mapping->next = mapping+1;
- mapping->encoding = encoding;
- if(mapping->next->type == 0) {
- mapping->next = NULL;
- break;
- }
- }
- if(!encoding->next->name) {
- encoding->next = NULL;
- break;
- }
- }
-}
-
-
-char*
-FontEncFromXLFD(const char *name, int length)
-{
- const char *p;
- char *q;
- static char charset[MAXFONTNAMELEN];
- int len;
-
- if(length > MAXFONTNAMELEN - 1)
- return 0;
-
- if(name == NULL)
- p = NULL;
- else {
- p = name + length - 1;
- while(p > name && *p != '-')
- p--;
- p--;
- while(p >= name && *p != '-')
- p--;
- if(p <= name)
- p = 0;
- }
-
- /* now p either is null or points at the '-' before the charset registry */
-
- if(p == 0)
- return 0;
-
- len = length - (p - name) - 1;
- memcpy(charset, p+1, len);
- charset[len] = 0;
-
- /* check for a subset specification */
- if((q = strchr(charset, (int)'[')))
- *q = 0;
-
- return charset;
-}
-
-unsigned
-FontEncRecode(unsigned code, FontMapPtr mapping)
-{
- FontEncPtr encoding = mapping->encoding;
- if(encoding && mapping->recode) {
- if(encoding->row_size == 0) {
- /* linear encoding */
- if(code < encoding->first || code>=encoding->size)
- return 0;
- } else {
- /* matrix encoding */
- int row = code/0x100, col = code&0xFF;
- if(row < encoding->first || row >= encoding->size ||
- col < encoding->first_col || col >= encoding->row_size)
- return 0;
- }
- return (*mapping->recode)(code, mapping->client_data);
- } else
- return code;
-}
-
-char*
-FontEncName(unsigned code, FontMapPtr mapping)
-{
- FontEncPtr encoding = mapping->encoding;
- if(encoding && mapping->name) {
- if((encoding->row_size == 0 && code >= encoding->size) ||
- (encoding->row_size != 0 &&
- (code/0x100 >= encoding->size ||
- (code&0xFF) >= encoding->row_size)))
- return 0;
- return (*mapping->name)(code, mapping->client_data);
- } else
- return 0;
-}
-
-FontEncPtr
-FontEncFind(const char *encoding_name, const char *filename)
-{
- FontEncPtr encoding;
- char **alias;
-
- if(font_encodings == NULL) define_initial_encoding_info();
-
- for(encoding = font_encodings; encoding; encoding = encoding->next) {
- if(!strcasecmp(encoding->name, encoding_name))
- return encoding;
- if(encoding->aliases)
- for(alias=encoding->aliases; *alias; alias++)
- if(!strcasecmp(*alias, encoding_name))
- return encoding;
- }
-
- /* Unknown charset, try to load a definition file */
- return FontEncLoad(encoding_name, filename);
-}
-
-FontMapPtr
-FontMapFind(FontEncPtr encoding, int type, int pid, int eid)
-{
- FontMapPtr mapping;
- if(encoding == NULL)
- return NULL;
-
- for(mapping = encoding->mappings; mapping; mapping = mapping->next) {
- if(mapping->type != type)
- continue;
- if(pid > 0 && mapping->pid != pid)
- continue;
- if(eid > 0 && mapping->eid != eid)
- continue;
- return mapping;
- }
- return NULL;
-}
-
-FontMapPtr
-FontEncMapFind(const char *encoding_name, int type, int pid, int eid,
- const char *filename)
-{
- FontEncPtr encoding;
- FontMapPtr mapping;
-
- encoding = FontEncFind(encoding_name, filename);
- if(encoding == NULL)
- return NULL;
- mapping = FontMapFind(encoding, type, pid, eid);
- return mapping;
-}
-
-static FontEncPtr
-FontEncLoad(const char *encoding_name, const char *filename)
-{
- FontEncPtr encoding;
-
- encoding = FontEncReallyLoad(encoding_name, filename);
- if (encoding == NULL) {
- return 0;
- } else {
- char **alias;
- int found = 0;
-
- /* Check whether the name is already known for this encoding */
- if(strcasecmp(encoding->name, encoding_name) == 0) {
- found = 1;
- } else {
- if(encoding->aliases) {
- for(alias=encoding->aliases; *alias; alias++)
- if(!strcasecmp(*alias, encoding_name)) {
- found = 1;
- break;
- }
- }
- }
-
- if(!found) {
- /* Add a new alias. This works because we know that this
- particular encoding has been allocated dynamically */
- char **new_aliases;
- char *new_name;
- int numaliases = 0;
-
- new_name = xalloc(strlen(encoding_name) + 1);
- if(new_name == NULL)
- return NULL;
- strcpy(new_name, encoding_name);
- if(encoding->aliases) {
- for(alias = encoding->aliases; *alias; alias++)
- numaliases++;
- }
- new_aliases = (char**)xalloc((numaliases+2)*sizeof(char*));
- if(new_aliases == NULL) {
- xfree(new_name);
- return NULL;
- }
- if(encoding->aliases) {
- memcpy(new_aliases, encoding->aliases, numaliases*sizeof(char*));
- xfree(encoding->aliases);
- }
- new_aliases[numaliases] = new_name;
- new_aliases[numaliases+1] = NULL;
- encoding->aliases = new_aliases;
- }
-
- /* register the new encoding */
- encoding->next=font_encodings;
- font_encodings=encoding;
-
- return encoding;
- }
-}
-
-unsigned
-FontEncSimpleRecode(unsigned code, void *client_data)
-{
- FontEncSimpleMapPtr map;
- unsigned index;
-
- map = client_data;
-
- if(code > 0xFFFF || (map->row_size && (code&0xFF) >= map->row_size))
- return 0;
-
- if(map->row_size)
- index = (code&0xFF)+(code>>8)*map->row_size;
- else
- index = code;
-
- if(map->map && index>=map->first && index<map->first+map->len)
- return map->map[index-map->first];
- else
- return code;
-}
-
-char *
-FontEncSimpleName(unsigned code, void *client_data)
-{
- FontEncSimpleNamePtr map;
-
- map = client_data;
- if(map && code >= map->first && code<map->first+map->len)
- return map->map[code-map->first];
- else
- return NULL;
-}
-
-unsigned
-FontEncUndefinedRecode(unsigned code, void *client_data)
-{
- return code;
-}
-
-char *
-FontEncUndefinedName(unsigned code, void *client_data)
-{
- return NULL;
-}
-
-#define FONTENC_SEGMENT_SIZE 256
-#define FONTENC_SEGMENTS 256
-#define FONTENC_INVERSE_CODES (FONTENC_SEGMENT_SIZE * FONTENC_SEGMENTS)
-
-static unsigned int
-reverse_reverse(unsigned i, void* data)
-{
- int s, j;
- unsigned **map = (unsigned**)data;
-
- if(i >= FONTENC_INVERSE_CODES)
- return 0;
-
- if(map == NULL)
- return 0;
-
- s = i / FONTENC_SEGMENT_SIZE;
- j = i % FONTENC_SEGMENT_SIZE;
-
- if(map[s] == NULL)
- return 0;
- else
- return map[s][j];
-}
-
-static int
-tree_set(unsigned int **map, unsigned int i, unsigned int j)
-{
- int s, c;
-
- if(i >= FONTENC_INVERSE_CODES)
- return FALSE;
-
- s = i / FONTENC_SEGMENT_SIZE;
- c = i % FONTENC_SEGMENT_SIZE;
-
- if(map[s] == NULL) {
- map[s] = calloc(FONTENC_SEGMENT_SIZE, sizeof(int));
- if(map[s] == NULL)
- return FALSE;
- }
-
- map[s][c] = j;
- return TRUE;
-}
-
-FontMapReversePtr
-FontMapReverse(FontMapPtr mapping)
-{
- FontEncPtr encoding = mapping->encoding;
- FontMapReversePtr reverse = NULL;
- unsigned int **map = NULL;
- int i, j, k;
-
- if(encoding == NULL) goto bail;
-
- map = calloc(FONTENC_SEGMENTS, sizeof(int*));
- if(map == NULL) goto bail;
-
- if(encoding->row_size == 0) {
- for(i = encoding->first; i < encoding->size; i++) {
- k = FontEncRecode(i, mapping);
- if(k != 0)
- if(!tree_set(map, k, i))
- goto bail;
- }
- } else {
- for(i = encoding->first; i < encoding->size; i++) {
- for(j = encoding->first_col; j < encoding->row_size; j++) {
- k = FontEncRecode(i*256 + j, mapping);
- if(k != 0)
- if(!tree_set(map, k, i*256+j))
- goto bail;
- }
- }
- }
-
- reverse = malloc(sizeof(FontMapReverseRec));
- if(!reverse) goto bail;
-
- reverse->reverse = reverse_reverse;
- reverse->data = map;
- return reverse;
-
- bail:
- if(map)
- xfree(map);
- if(reverse)
- xfree(reverse);
- return NULL;
-}
-
-void
-FontMapReverseFree(FontMapReversePtr delendum)
-{
- unsigned int **map = (unsigned int**)delendum;
- int i;
-
- if(map == NULL)
- return;
-
- for(i = 0; i < FONTENC_SEGMENTS; i++)
- if(map[i] != NULL)
- xfree(map[i]);
-
- xfree(map);
- return;
-}
diff --git a/nx-X11/lib/font/fontfile/fontencI.h b/nx-X11/lib/font/fontfile/fontencI.h
deleted file mode 100644
index bd35a1fbb..000000000
--- a/nx-X11/lib/font/fontfile/fontencI.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-Copyright (c) 1998-2001 by Juliusz Chroboczek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-/* $XFree86: xc/lib/font/fontfile/fontencI.h,v 1.3 1999/04/25 10:01:43 dawes Exp $ */
-
-/* Private types and functions for the encoding code. */
-/* Used by the files `fontenc.h' and `encparse.h' */
-
-typedef struct _FontEncSimpleMap {
- unsigned len; /* might be 0x10000 */
- unsigned short row_size;
- unsigned short first;
- unsigned short *map;
-} FontEncSimpleMapRec, *FontEncSimpleMapPtr;
-
-typedef struct _FontEncSimpleName {
- unsigned len;
- unsigned short first;
- char **map;
-} FontEncSimpleNameRec, *FontEncSimpleNamePtr;
-
-unsigned FontEncSimpleRecode(unsigned, void*);
-unsigned FontEncUndefinedRecode(unsigned, void*);
-char *FontEncSimpleName(unsigned, void*);
-char *FontEncUndefinedName(unsigned, void*);
-
-FontEncPtr FontEncReallyLoad(const char*, const char*);
diff --git a/nx-X11/lib/font/fontfile/fontencc.c b/nx-X11/lib/font/fontfile/fontencc.c
deleted file mode 100644
index b54079acf..000000000
--- a/nx-X11/lib/font/fontfile/fontencc.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-Copyright (c) 1998-2001 by Juliusz Chroboczek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-/* $XFree86: xc/lib/font/fontfile/fontencc.c,v 1.1 2001/08/13 21:46:47 dawes Exp $ */
-
-/* Binary compatibility code. */
-
-/* This file includes code to make modules compiled for earlier
- versions of the fontenc interfaces link with this one. It does
- *not* provide source compatibility, as many of the data structures
- now have different names. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fontenc.h>
-#include <X11/fonts/fontencc.h>
-
-extern void ErrorF(const char *f, ...);
-
-char *
-font_encoding_from_xlfd(const char * name, int length)
-{
- return FontEncFromXLFD(name, length);
-}
-
-FontEncPtr
-font_encoding_find(const char *encoding_name, const char *filename)
-{
- return FontEncFind(encoding_name, filename);
-}
-
-unsigned
-font_encoding_recode(unsigned code,
- FontEncPtr encoding, FontMapPtr mapping)
-{
- if(encoding != mapping->encoding) {
- ErrorF("Inconsistent mapping/encoding\n");
- return 0;
- }
- return FontEncRecode(code, mapping);
-}
-
-char *
-font_encoding_name(unsigned code,
- FontEncPtr encoding, FontMapPtr mapping)
-{
- if(encoding != mapping->encoding) {
- ErrorF("Inconsistent mapping/encoding\n");
- return 0;
- }
- return FontEncName(code, mapping);
-}
-
-char **
-identifyEncodingFile(const char *filename)
-{
- return FontEncIdentify(filename);
-}
diff --git a/nx-X11/lib/font/fontfile/fontfile.c b/nx-X11/lib/font/fontfile/fontfile.c
deleted file mode 100644
index 2356c0595..000000000
--- a/nx-X11/lib/font/fontfile/fontfile.c
+++ /dev/null
@@ -1,1147 +0,0 @@
-/* $XdotOrg: xc/lib/font/fontfile/fontfile.c,v 1.5 2005/07/09 06:36:13 keithp Exp $ */
-/* $Xorg: fontfile.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/fontfile.c,v 3.21 2003/12/02 19:50:40 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-/* $NCDXorg: @(#)fontfile.c,v 1.6 1991/07/02 17:00:46 lemke Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-#ifdef WIN32
-#include <ctype.h>
-#endif
-
-/*
- * Map FPE functions to renderer functions
- */
-
-static int FontFileOpenBitmapNCF (FontPathElementPtr fpe, FontPtr *pFont,
- int flags, FontEntryPtr entry,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- FontPtr non_cachable_font);
-
-int
-FontFileNameCheck (char *name)
-{
-#ifndef NCD
-#if defined(__UNIXOS2__) || defined(WIN32)
- /* OS/2 uses D:/... as a path name for fonts, so accept this as a valid
- * path if it starts with a letter and a colon. Same applies for WIN32
- */
- if (isalpha(*name) && name[1]==':')
- return TRUE;
-#endif
- return *name == '/';
-#else
- return ((strcmp(name, "built-ins") == 0) || (*name == '/'));
-#endif
-}
-
-int
-FontFileInitFPE (FontPathElementPtr fpe)
-{
- int status;
- FontDirectoryPtr dir;
-
- status = FontFileReadDirectory (fpe->name, &dir);
- if (status == Successful)
- {
- if (dir->nonScalable.used > 0)
- if (!FontFileRegisterBitmapSource (fpe))
- {
- FontFileFreeFPE (fpe);
- return AllocError;
- }
- fpe->private = (pointer) dir;
- }
- return status;
-}
-
-/* ARGSUSED */
-int
-FontFileResetFPE (FontPathElementPtr fpe)
-{
- FontDirectoryPtr dir;
-
- dir = (FontDirectoryPtr) fpe->private;
- /*
- * The reset must fail for bitmap fonts because they get cleared when
- * the path is set.
- */
- if (FontFileDirectoryChanged (dir))
- {
- /* can't do it, so tell the caller to close and re-open */
- return FPEResetFailed;
- }
- else
- {
- if (dir->nonScalable.used > 0)
- if (!FontFileRegisterBitmapSource (fpe))
- {
- return FPEResetFailed;
- }
- return Successful;
- }
-}
-
-int
-FontFileFreeFPE (FontPathElementPtr fpe)
-{
- FontFileUnregisterBitmapSource (fpe);
- FontFileFreeDir ((FontDirectoryPtr) fpe->private);
- return Successful;
-}
-
-static int
-transfer_values_to_alias(char *entryname, int entrynamelength,
- char *resolvedname,
- char **aliasName, FontScalablePtr vals)
-{
- static char aliasname[MAXFONTNAMELEN];
- int nameok = 1, len;
- char lowerName[MAXFONTNAMELEN];
-
- *aliasName = resolvedname;
- if ((len = strlen(*aliasName)) <= MAXFONTNAMELEN &&
- (entrynamelength < MAXFONTNAMELEN) &&
- FontFileCountDashes (*aliasName, len) == 14)
- {
- FontScalableRec tmpVals;
- FontScalableRec tmpVals2;
-
- tmpVals2 = *vals;
-
- /* If we're aliasing a scalable name, transfer values
- from the name into the destination alias, multiplying
- by matrices that appear in the alias. */
-
- CopyISOLatin1Lowered (lowerName, entryname,
- entrynamelength);
- lowerName[entrynamelength] = '\0';
-
- if (FontParseXLFDName(lowerName, &tmpVals,
- FONT_XLFD_REPLACE_NONE) &&
- !tmpVals.values_supplied &&
- FontParseXLFDName(*aliasName, &tmpVals,
- FONT_XLFD_REPLACE_NONE))
- {
- double *matrix = 0, tempmatrix[4];
-
- /* Use a matrix iff exactly one is defined */
- if ((tmpVals.values_supplied & PIXELSIZE_MASK) ==
- PIXELSIZE_ARRAY &&
- !(tmpVals.values_supplied & POINTSIZE_MASK))
- matrix = tmpVals.pixel_matrix;
- else if ((tmpVals.values_supplied & POINTSIZE_MASK) ==
- POINTSIZE_ARRAY &&
- !(tmpVals.values_supplied & PIXELSIZE_MASK))
- matrix = tmpVals.point_matrix;
-
- /* If matrix given in the alias, compute new point
- and/or pixel matrices */
- if (matrix)
- {
- /* Complete the XLFD name to avoid potential
- gotchas */
- if (FontFileCompleteXLFD(&tmpVals2, &tmpVals2))
- {
- tempmatrix[0] =
- matrix[0] * tmpVals2.point_matrix[0] +
- matrix[1] * tmpVals2.point_matrix[2];
- tempmatrix[1] =
- matrix[0] * tmpVals2.point_matrix[1] +
- matrix[1] * tmpVals2.point_matrix[3];
- tempmatrix[2] =
- matrix[2] * tmpVals2.point_matrix[0] +
- matrix[3] * tmpVals2.point_matrix[2];
- tempmatrix[3] =
- matrix[2] * tmpVals2.point_matrix[1] +
- matrix[3] * tmpVals2.point_matrix[3];
- tmpVals2.point_matrix[0] = tempmatrix[0];
- tmpVals2.point_matrix[1] = tempmatrix[1];
- tmpVals2.point_matrix[2] = tempmatrix[2];
- tmpVals2.point_matrix[3] = tempmatrix[3];
-
- tempmatrix[0] =
- matrix[0] * tmpVals2.pixel_matrix[0] +
- matrix[1] * tmpVals2.pixel_matrix[2];
- tempmatrix[1] =
- matrix[0] * tmpVals2.pixel_matrix[1] +
- matrix[1] * tmpVals2.pixel_matrix[3];
- tempmatrix[2] =
- matrix[2] * tmpVals2.pixel_matrix[0] +
- matrix[3] * tmpVals2.pixel_matrix[2];
- tempmatrix[3] =
- matrix[2] * tmpVals2.pixel_matrix[1] +
- matrix[3] * tmpVals2.pixel_matrix[3];
- tmpVals2.pixel_matrix[0] = tempmatrix[0];
- tmpVals2.pixel_matrix[1] = tempmatrix[1];
- tmpVals2.pixel_matrix[2] = tempmatrix[2];
- tmpVals2.pixel_matrix[3] = tempmatrix[3];
-
- tmpVals2.values_supplied =
- (tmpVals2.values_supplied &
- ~(PIXELSIZE_MASK | POINTSIZE_MASK)) |
- PIXELSIZE_ARRAY | POINTSIZE_ARRAY;
- }
- else
- nameok = 0;
- }
-
- CopyISOLatin1Lowered (aliasname, *aliasName, len + 1);
- if (nameok && FontParseXLFDName(aliasname, &tmpVals2,
- FONT_XLFD_REPLACE_VALUE))
- /* Return a version of the aliasname that has
- had the vals stuffed into it. To avoid
- memory leak, this alias name lives in a
- static buffer. The caller needs to be done
- with this buffer before this procedure is
- called again to avoid reentrancy problems. */
- *aliasName = aliasname;
- }
- }
- return nameok;
-}
-
-/* ARGSUSED */
-int
-FontFileOpenFont (pointer client, FontPathElementPtr fpe, Mask flags,
- char *name, int namelen,
- fsBitmapFormat format, fsBitmapFormatMask fmask,
- XID id, FontPtr *pFont, char **aliasName,
- FontPtr non_cachable_font)
-{
- FontDirectoryPtr dir;
- char lowerName[MAXFONTNAMELEN];
- char fileName[MAXFONTFILENAMELEN*2 + 1];
- FontNameRec tmpName;
- FontEntryPtr entry;
- FontScalableRec vals;
- FontScalableEntryPtr scalable;
- FontScaledPtr scaled;
- FontBitmapEntryPtr bitmap;
- int ret;
- Bool noSpecificSize;
- int nranges;
- fsRange *ranges;
-
- if (namelen >= MAXFONTNAMELEN)
- return AllocError;
- dir = (FontDirectoryPtr) fpe->private;
-
- /* Match non-scalable pattern */
- CopyISOLatin1Lowered (lowerName, name, namelen);
- lowerName[namelen] = '\0';
- ranges = FontParseRanges(lowerName, &nranges);
- tmpName.name = lowerName;
- tmpName.length = namelen;
- tmpName.ndashes = FontFileCountDashes (lowerName, namelen);
- if (!FontParseXLFDName(lowerName, &vals, FONT_XLFD_REPLACE_NONE))
- bzero(&vals, sizeof(vals));
- if (!(entry = FontFileFindNameInDir (&dir->nonScalable, &tmpName)) &&
- tmpName.ndashes == 14 &&
- FontParseXLFDName (lowerName, &vals, FONT_XLFD_REPLACE_ZERO))
- {
- tmpName.length = strlen(lowerName);
- entry = FontFileFindNameInDir (&dir->nonScalable, &tmpName);
- }
-
- if (entry)
- {
- switch (entry->type) {
- case FONT_ENTRY_BITMAP:
- bitmap = &entry->u.bitmap;
- if (bitmap->pFont)
- {
- *pFont = bitmap->pFont;
- (*pFont)->fpe = fpe;
- ret = Successful;
- }
- else
- {
- ret = FontFileOpenBitmapNCF (fpe, pFont, flags, entry, format,
- fmask, non_cachable_font);
- if (ret == Successful && *pFont)
- (*pFont)->fpe = fpe;
- }
- break;
- case FONT_ENTRY_ALIAS:
- vals.nranges = nranges;
- vals.ranges = ranges;
- transfer_values_to_alias(entry->name.name, entry->name.length,
- entry->u.alias.resolved, aliasName, &vals);
- ret = FontNameAlias;
- break;
-#ifdef NOTYET
- case FONT_ENTRY_BC:
- bc = &entry->u.bc;
- entry = bc->entry;
- ret = (*scalable->renderer->OpenScalable)
- (fpe, pFont, flags, entry, &bc->vals, format, fmask,
- non_cachable_font);
- if (ret == Successful && *pFont)
- (*pFont)->fpe = fpe;
- break;
-#endif
- default:
- ret = BadFontName;
- }
- }
- else
- {
- ret = BadFontName;
- }
-
- if (ret != BadFontName)
- {
- if (ranges) xfree(ranges);
- return ret;
- }
-
- /* Match XLFD patterns */
- CopyISOLatin1Lowered (lowerName, name, namelen);
- lowerName[namelen] = '\0';
- tmpName.name = lowerName;
- tmpName.length = namelen;
- tmpName.ndashes = FontFileCountDashes (lowerName, namelen);
- if (!FontParseXLFDName (lowerName, &vals, FONT_XLFD_REPLACE_ZERO) ||
- !(tmpName.length = strlen (lowerName),
- entry = FontFileFindNameInScalableDir (&dir->scalable, &tmpName,
- &vals))) {
- CopyISOLatin1Lowered (lowerName, name, namelen);
- lowerName[namelen] = '\0';
- tmpName.name = lowerName;
- tmpName.length = namelen;
- tmpName.ndashes = FontFileCountDashes (lowerName, namelen);
- entry = FontFileFindNameInScalableDir (&dir->scalable, &tmpName, &vals);
- if (entry)
- {
- strcpy(lowerName, entry->name.name);
- tmpName.name = lowerName;
- tmpName.length = entry->name.length;
- tmpName.ndashes = entry->name.ndashes;
- }
- }
- if (entry)
- {
- noSpecificSize = FALSE; /* TRUE breaks XLFD enhancements */
- if (entry->type == FONT_ENTRY_SCALABLE &&
- FontFileCompleteXLFD (&vals, &entry->u.scalable.extra->defaults))
- {
- scalable = &entry->u.scalable;
- if ((vals.values_supplied & PIXELSIZE_MASK) == PIXELSIZE_ARRAY ||
- (vals.values_supplied & POINTSIZE_MASK) == POINTSIZE_ARRAY ||
- (vals.values_supplied &
- ~SIZE_SPECIFY_MASK & ~CHARSUBSET_SPECIFIED))
- scaled = 0;
- else
- scaled = FontFileFindScaledInstance (entry, &vals,
- noSpecificSize);
- /*
- * A scaled instance can occur one of two ways:
- *
- * Either the font has been scaled to this
- * size already, in which case scaled->pFont
- * will point at that font.
- *
- * Or a bitmap instance in this size exists,
- * which is handled as if we got a pattern
- * matching the bitmap font name.
- */
- if (scaled)
- {
- if (scaled->pFont)
- {
- *pFont = scaled->pFont;
- (*pFont)->fpe = fpe;
- ret = Successful;
- }
- else if (scaled->bitmap)
- {
- entry = scaled->bitmap;
- bitmap = &entry->u.bitmap;
- if (bitmap->pFont)
- {
- *pFont = bitmap->pFont;
- (*pFont)->fpe = fpe;
- ret = Successful;
- }
- else
- {
- ret = FontFileOpenBitmapNCF (fpe, pFont, flags, entry,
- format, fmask,
- non_cachable_font);
- if (ret == Successful && *pFont)
- (*pFont)->fpe = fpe;
- }
- }
- else /* "cannot" happen */
- {
- ret = BadFontName;
- }
- }
- else
- {
- ret = FontFileMatchBitmapSource (fpe, pFont, flags, entry, &tmpName, &vals, format, fmask, noSpecificSize);
- if (ret != Successful)
- {
- char origName[MAXFONTNAMELEN];
-
- CopyISOLatin1Lowered (origName, name, namelen);
- origName[namelen] = '\0';
-
- /* Pass the original XLFD name in the vals
- structure; the rasterizer is free to examine it
- for hidden meanings. This information will not
- be saved in the scaled-instances table. */
-
- vals.xlfdName = origName;
- vals.ranges = ranges;
- vals.nranges = nranges;
-
- if (strlen(dir->directory) + strlen(scalable->fileName) >=
- sizeof(fileName)) {
- ret = BadFontName;
- } else {
- strcpy (fileName, dir->directory);
- strcat (fileName, scalable->fileName);
- ret = (*scalable->renderer->OpenScalable) (fpe, pFont,
- flags, entry, fileName, &vals, format, fmask,
- non_cachable_font);
- }
-
- /* In case rasterizer does something bad because of
- charset subsetting... */
- if (ret == Successful &&
- ((*pFont)->info.firstCol > (*pFont)->info.lastCol ||
- (*pFont)->info.firstRow > (*pFont)->info.lastRow))
- {
- (*(*pFont)->unload_font)(*pFont);
- ret = BadFontName;
- }
- /* Save the instance */
- if (ret == Successful)
- {
- if (FontFileAddScaledInstance (entry, &vals,
- *pFont, (char *) 0))
- ranges = 0;
- else
- (*pFont)->fpePrivate = (pointer) 0;
- (*pFont)->fpe = fpe;
- }
- }
- }
- }
- }
- else
- ret = BadFontName;
-
- if (ranges)
- xfree(ranges);
- return ret;
-}
-
-/* ARGSUSED */
-void
-FontFileCloseFont (FontPathElementPtr fpe, FontPtr pFont)
-{
- FontEntryPtr entry;
-
- if ((entry = (FontEntryPtr) pFont->fpePrivate)) {
- switch (entry->type) {
- case FONT_ENTRY_SCALABLE:
- FontFileRemoveScaledInstance (entry, pFont);
- break;
- case FONT_ENTRY_BITMAP:
- entry->u.bitmap.pFont = 0;
- break;
- default:
- /* "cannot" happen */
- break;
- }
- pFont->fpePrivate = 0;
- }
- (*pFont->unload_font) (pFont);
-}
-
-static int
-FontFileOpenBitmapNCF (FontPathElementPtr fpe, FontPtr *pFont,
- int flags, FontEntryPtr entry,
- fsBitmapFormat format, fsBitmapFormatMask fmask,
- FontPtr non_cachable_font)
-{
- FontBitmapEntryPtr bitmap;
- char fileName[MAXFONTFILENAMELEN*2+1];
- int ret;
- FontDirectoryPtr dir;
-
- dir = (FontDirectoryPtr) fpe->private;
- bitmap = &entry->u.bitmap;
- if(!bitmap || !bitmap->renderer->OpenBitmap)
- return BadFontName;
- if (strlen(dir->directory) + strlen(bitmap->fileName) >= sizeof(fileName))
- return BadFontName;
- strcpy (fileName, dir->directory);
- strcat (fileName, bitmap->fileName);
- ret = (*bitmap->renderer->OpenBitmap)
- (fpe, pFont, flags, entry, fileName, format, fmask,
- non_cachable_font);
- if (ret == Successful)
- {
- bitmap->pFont = *pFont;
- (*pFont)->fpePrivate = (pointer) entry;
- }
- return ret;
-}
-
-int
-FontFileOpenBitmap (FontPathElementPtr fpe, FontPtr *pFont,
- int flags, FontEntryPtr entry,
- fsBitmapFormat format, fsBitmapFormatMask fmask)
-{
- return FontFileOpenBitmapNCF (fpe, pFont, flags, entry, format, fmask,
- (FontPtr)0);
-}
-
-static int
-FontFileGetInfoBitmap (FontPathElementPtr fpe, FontInfoPtr pFontInfo,
- FontEntryPtr entry)
-{
- FontBitmapEntryPtr bitmap;
- char fileName[MAXFONTFILENAMELEN*2+1];
- int ret;
- FontDirectoryPtr dir;
-
- dir = (FontDirectoryPtr) fpe->private;
- bitmap = &entry->u.bitmap;
- if (!bitmap || !bitmap->renderer->GetInfoBitmap)
- return BadFontName;
- if (strlen(dir->directory) + strlen(bitmap->fileName) >= sizeof(fileName))
- return BadFontName;
- strcpy (fileName, dir->directory);
- strcat (fileName, bitmap->fileName);
- ret = (*bitmap->renderer->GetInfoBitmap) (fpe, pFontInfo, entry, fileName);
- return ret;
-}
-
-static void
-_FontFileAddScalableNames(FontNamesPtr names, FontNamesPtr scaleNames,
- FontNamePtr nameptr, char *zeroChars,
- FontScalablePtr vals, fsRange *ranges,
- int nranges, int *max)
-{
- int i;
- FontScalableRec zeroVals, tmpVals;
- for (i = 0; i < scaleNames->nnames; i++)
- {
- char nameChars[MAXFONTNAMELEN];
- if (!*max)
- return;
- FontParseXLFDName (scaleNames->names[i], &zeroVals,
- FONT_XLFD_REPLACE_NONE);
- tmpVals = *vals;
- if (FontFileCompleteXLFD (&tmpVals, &zeroVals))
- {
- --*max;
-
- strcpy (nameChars, scaleNames->names[i]);
- if ((vals->values_supplied & PIXELSIZE_MASK) ||
- !(vals->values_supplied & PIXELSIZE_WILDCARD) ||
- vals->y == 0)
- {
- tmpVals.values_supplied =
- (tmpVals.values_supplied & ~PIXELSIZE_MASK) |
- (vals->values_supplied & PIXELSIZE_MASK);
- tmpVals.pixel_matrix[0] = vals->pixel_matrix[0];
- tmpVals.pixel_matrix[1] = vals->pixel_matrix[1];
- tmpVals.pixel_matrix[2] = vals->pixel_matrix[2];
- tmpVals.pixel_matrix[3] = vals->pixel_matrix[3];
- }
- if ((vals->values_supplied & POINTSIZE_MASK) ||
- !(vals->values_supplied & POINTSIZE_WILDCARD) ||
- vals->y == 0)
- {
- tmpVals.values_supplied =
- (tmpVals.values_supplied & ~POINTSIZE_MASK) |
- (vals->values_supplied & POINTSIZE_MASK);
- tmpVals.point_matrix[0] = vals->point_matrix[0];
- tmpVals.point_matrix[1] = vals->point_matrix[1];
- tmpVals.point_matrix[2] = vals->point_matrix[2];
- tmpVals.point_matrix[3] = vals->point_matrix[3];
- }
- if (vals->width <= 0)
- tmpVals.width = 0;
- if (vals->x == 0)
- tmpVals.x = 0;
- if (vals->y == 0)
- tmpVals.y = 0;
- tmpVals.ranges = ranges;
- tmpVals.nranges = nranges;
- FontParseXLFDName (nameChars, &tmpVals,
- FONT_XLFD_REPLACE_VALUE);
- /* If we're marking aliases with negative lengths, we
- need to concoct a valid target name to follow it.
- Otherwise we're done. */
- if (scaleNames->length[i] >= 0)
- {
- (void) AddFontNamesName (names, nameChars,
- strlen (nameChars));
- /* If our original pattern matches the name from
- the table and that name doesn't duplicate what
- we just added, add the name from the table */
- if (strcmp(nameChars, scaleNames->names[i]) &&
- FontFileMatchName(scaleNames->names[i],
- scaleNames->length[i],
- nameptr) &&
- *max)
- {
- --*max;
- (void) AddFontNamesName (names, scaleNames->names[i],
- scaleNames->length[i]);
- }
- }
- else
- {
- char *aliasName;
- vals->ranges = ranges;
- vals->nranges = nranges;
- if (transfer_values_to_alias(zeroChars,
- strlen(zeroChars),
- scaleNames->names[++i],
- &aliasName, vals))
- {
- (void) AddFontNamesName (names, nameChars,
- strlen (nameChars));
- names->length[names->nnames - 1] =
- -names->length[names->nnames - 1];
- (void) AddFontNamesName (names, aliasName,
- strlen (aliasName));
- /* If our original pattern matches the name from
- the table and that name doesn't duplicate what
- we just added, add the name from the table */
- if (strcmp(nameChars, scaleNames->names[i - 1]) &&
- FontFileMatchName(scaleNames->names[i - 1],
- -scaleNames->length[i - 1],
- nameptr) &&
- *max)
- {
- --*max;
- (void) AddFontNamesName (names,
- scaleNames->names[i - 1],
- -scaleNames->length[i - 1]);
- names->length[names->nnames - 1] =
- -names->length[names->nnames - 1];
- (void) AddFontNamesName (names, aliasName,
- strlen (aliasName));
- }
- }
- }
- }
- }
-}
-
-/* ARGSUSED */
-static int
-_FontFileListFonts (pointer client, FontPathElementPtr fpe,
- char *pat, int len, int max, FontNamesPtr names,
- int mark_aliases)
-{
- FontDirectoryPtr dir;
- char lowerChars[MAXFONTNAMELEN], zeroChars[MAXFONTNAMELEN];
- FontNameRec lowerName;
- FontNameRec zeroName;
- FontNamesPtr scaleNames;
- FontScalableRec vals;
- fsRange *ranges;
- int nranges;
- int result = BadFontName;
-
- if (len >= MAXFONTNAMELEN)
- return AllocError;
- dir = (FontDirectoryPtr) fpe->private;
- CopyISOLatin1Lowered (lowerChars, pat, len);
- lowerChars[len] = '\0';
- lowerName.name = lowerChars;
- lowerName.length = len;
- lowerName.ndashes = FontFileCountDashes (lowerChars, len);
-
- /* Match XLFD patterns */
-
- strcpy (zeroChars, lowerChars);
- if (lowerName.ndashes == 14 &&
- FontParseXLFDName (zeroChars, &vals, FONT_XLFD_REPLACE_ZERO))
- {
- ranges = FontParseRanges(lowerChars, &nranges);
- result = FontFileFindNamesInScalableDir (&dir->nonScalable,
- &lowerName, max, names,
- (FontScalablePtr)0,
- (mark_aliases ?
- LIST_ALIASES_AND_TARGET_NAMES :
- NORMAL_ALIAS_BEHAVIOR) |
- IGNORE_SCALABLE_ALIASES,
- &max);
- zeroName.name = zeroChars;
- zeroName.length = strlen (zeroChars);
- zeroName.ndashes = lowerName.ndashes;
-
- /* Look for scalable names and aliases, adding scaled instances of
- them to the output */
-
- /* Scalable names... */
- scaleNames = MakeFontNamesRecord (0);
- if (!scaleNames)
- {
- if (ranges) xfree(ranges);
- return AllocError;
- }
- FontFileFindNamesInScalableDir (&dir->scalable, &zeroName, max,
- scaleNames, &vals,
- mark_aliases ?
- LIST_ALIASES_AND_TARGET_NAMES :
- NORMAL_ALIAS_BEHAVIOR, (int *)0);
- _FontFileAddScalableNames(names, scaleNames, &lowerName,
- zeroChars, &vals, ranges, nranges,
- &max);
- FreeFontNames (scaleNames);
-
- /* Scalable aliases... */
- scaleNames = MakeFontNamesRecord (0);
- if (!scaleNames)
- {
- if (ranges) xfree(ranges);
- return AllocError;
- }
- FontFileFindNamesInScalableDir (&dir->nonScalable, &zeroName,
- max, scaleNames, &vals,
- mark_aliases ?
- LIST_ALIASES_AND_TARGET_NAMES :
- NORMAL_ALIAS_BEHAVIOR, (int *)0);
- _FontFileAddScalableNames(names, scaleNames, &lowerName,
- zeroChars, &vals, ranges, nranges,
- &max);
- FreeFontNames (scaleNames);
-
- if (ranges) xfree(ranges);
- }
- else
- {
- result = FontFileFindNamesInScalableDir (&dir->nonScalable,
- &lowerName, max, names,
- (FontScalablePtr)0,
- mark_aliases ?
- LIST_ALIASES_AND_TARGET_NAMES :
- NORMAL_ALIAS_BEHAVIOR,
- &max);
- if (result == Successful)
- result = FontFileFindNamesInScalableDir (&dir->scalable,
- &lowerName, max, names,
- (FontScalablePtr)0,
- mark_aliases ?
- LIST_ALIASES_AND_TARGET_NAMES :
- NORMAL_ALIAS_BEHAVIOR, (int *)0);
- }
- return result;
-}
-
-typedef struct _LFWIData {
- FontNamesPtr names;
- int current;
-} LFWIDataRec, *LFWIDataPtr;
-
-int
-FontFileListFonts (pointer client, FontPathElementPtr fpe, char *pat,
- int len, int max, FontNamesPtr names)
-{
- return _FontFileListFonts (client, fpe, pat, len, max, names, 0);
-}
-
-int
-FontFileStartListFontsWithInfo(pointer client, FontPathElementPtr fpe,
- char *pat, int len, int max,
- pointer *privatep)
-{
- LFWIDataPtr data;
- int ret;
-
- data = (LFWIDataPtr) xalloc (sizeof *data);
- if (!data)
- return AllocError;
- data->names = MakeFontNamesRecord (0);
- if (!data->names)
- {
- xfree (data);
- return AllocError;
- }
- ret = FontFileListFonts (client, fpe, pat, len, max, data->names);
- if (ret != Successful)
- {
- FreeFontNames (data->names);
- xfree (data);
- return ret;
- }
- data->current = 0;
- *privatep = (pointer) data;
- return Successful;
-}
-
-/* ARGSUSED */
-static int
-FontFileListOneFontWithInfo (pointer client, FontPathElementPtr fpe,
- char **namep, int *namelenp,
- FontInfoPtr *pFontInfo)
-{
- FontDirectoryPtr dir;
- char lowerName[MAXFONTNAMELEN];
- char fileName[MAXFONTFILENAMELEN*2 + 1];
- FontNameRec tmpName;
- FontEntryPtr entry;
- FontScalableRec vals;
- FontScalableEntryPtr scalable;
- FontScaledPtr scaled;
- FontBitmapEntryPtr bitmap;
- int ret;
- Bool noSpecificSize;
- int nranges;
- fsRange *ranges;
-
- char *name = *namep;
- int namelen = *namelenp;
-
- if (namelen >= MAXFONTNAMELEN)
- return AllocError;
- dir = (FontDirectoryPtr) fpe->private;
-
- /* Match non-scalable pattern */
- CopyISOLatin1Lowered (lowerName, name, namelen);
- lowerName[namelen] = '\0';
- ranges = FontParseRanges(lowerName, &nranges);
- tmpName.name = lowerName;
- tmpName.length = namelen;
- tmpName.ndashes = FontFileCountDashes (lowerName, namelen);
- if (!FontParseXLFDName(lowerName, &vals, FONT_XLFD_REPLACE_NONE))
- bzero(&vals, sizeof(vals));
- if (!(entry = FontFileFindNameInDir (&dir->nonScalable, &tmpName)) &&
- tmpName.ndashes == 14 &&
- FontParseXLFDName (lowerName, &vals, FONT_XLFD_REPLACE_ZERO))
- {
- tmpName.length = strlen(lowerName);
- entry = FontFileFindNameInDir (&dir->nonScalable, &tmpName);
- }
-
- if (entry)
- {
- switch (entry->type) {
- case FONT_ENTRY_BITMAP:
- bitmap = &entry->u.bitmap;
- if (bitmap->pFont)
- {
- *pFontInfo = &bitmap->pFont->info;
- ret = Successful;
- }
- else
- {
- ret = FontFileGetInfoBitmap (fpe, *pFontInfo, entry);
- }
- break;
- case FONT_ENTRY_ALIAS:
- vals.nranges = nranges;
- vals.ranges = ranges;
- transfer_values_to_alias(entry->name.name, entry->name.length,
- entry->u.alias.resolved, namep, &vals);
- *namelenp = strlen (*namep);
- ret = FontNameAlias;
- break;
-#ifdef NOTYET
- case FONT_ENTRY_BC:
- /* no LFWI for this yet */
- bc = &entry->u.bc;
- entry = bc->entry;
- /* Make a new scaled instance */
- if (strlen(dir->directory) + strlen(scalable->fileName) >=
- sizeof(fileName)) {
- ret = BadFontName;
- } else {
- strcpy (fileName, dir->directory);
- strcat (fileName, scalable->fileName);
- ret = (*scalable->renderer->GetInfoScalable)
- (fpe, *pFontInfo, entry, tmpName, fileName, &bc->vals);
- }
- break;
-#endif
- default:
- ret = BadFontName;
- }
- }
- else
- {
- ret = BadFontName;
- }
-
- if (ret != BadFontName)
- {
- if (ranges) xfree(ranges);
- return ret;
- }
-
- /* Match XLFD patterns */
- CopyISOLatin1Lowered (lowerName, name, namelen);
- lowerName[namelen] = '\0';
- tmpName.name = lowerName;
- tmpName.length = namelen;
- tmpName.ndashes = FontFileCountDashes (lowerName, namelen);
- if (!FontParseXLFDName (lowerName, &vals, FONT_XLFD_REPLACE_ZERO) ||
- !(tmpName.length = strlen (lowerName),
- entry = FontFileFindNameInScalableDir (&dir->scalable, &tmpName,
- &vals))) {
- CopyISOLatin1Lowered (lowerName, name, namelen);
- lowerName[namelen] = '\0';
- tmpName.name = lowerName;
- tmpName.length = namelen;
- tmpName.ndashes = FontFileCountDashes (lowerName, namelen);
- entry = FontFileFindNameInScalableDir (&dir->scalable, &tmpName, &vals);
- if (entry)
- {
- strcpy(lowerName, entry->name.name);
- tmpName.name = lowerName;
- tmpName.length = entry->name.length;
- tmpName.ndashes = entry->name.ndashes;
- }
- }
-
- if (entry)
- {
- noSpecificSize = FALSE; /* TRUE breaks XLFD enhancements */
- if (entry && entry->type == FONT_ENTRY_SCALABLE &&
- FontFileCompleteXLFD (&vals, &entry->u.scalable.extra->defaults))
- {
- scalable = &entry->u.scalable;
- scaled = FontFileFindScaledInstance (entry, &vals, noSpecificSize);
- /*
- * A scaled instance can occur one of two ways:
- *
- * Either the font has been scaled to this
- * size already, in which case scaled->pFont
- * will point at that font.
- *
- * Or a bitmap instance in this size exists,
- * which is handled as if we got a pattern
- * matching the bitmap font name.
- */
- if (scaled)
- {
- if (scaled->pFont)
- {
- *pFontInfo = &scaled->pFont->info;
- ret = Successful;
- }
- else if (scaled->bitmap)
- {
- entry = scaled->bitmap;
- bitmap = &entry->u.bitmap;
- if (bitmap->pFont)
- {
- *pFontInfo = &bitmap->pFont->info;
- ret = Successful;
- }
- else
- {
- ret = FontFileGetInfoBitmap (fpe, *pFontInfo, entry);
- }
- }
- else /* "cannot" happen */
- {
- ret = BadFontName;
- }
- }
- else
- {
-#ifdef NOTDEF
- /* no special case yet */
- ret = FontFileMatchBitmapSource (fpe, pFont, flags, entry, &vals, format, fmask, noSpecificSize);
- if (ret != Successful)
-#endif
- {
- char origName[MAXFONTNAMELEN];
-
- CopyISOLatin1Lowered (origName, name, namelen);
- origName[namelen] = '\0';
- vals.xlfdName = origName;
- vals.ranges = ranges;
- vals.nranges = nranges;
-
- /* Make a new scaled instance */
- if (strlen(dir->directory) + strlen(scalable->fileName) >=
- sizeof(fileName)) {
- ret = BadFontName;
- } else {
- strcpy (fileName, dir->directory);
- strcat (fileName, scalable->fileName);
- ret = (*scalable->renderer->GetInfoScalable)
- (fpe, *pFontInfo, entry, &tmpName, fileName, &vals);
- }
- if (ranges) xfree(ranges);
- }
- }
- if (ret == Successful) return ret;
- }
- CopyISOLatin1Lowered (lowerName, name, namelen);
- tmpName.length = namelen;
- }
- else
- ret = BadFontName;
-
- if (ranges)
- xfree(ranges);
- return ret;
-}
-
-int
-FontFileListNextFontWithInfo(pointer client, FontPathElementPtr fpe,
- char **namep, int *namelenp,
- FontInfoPtr *pFontInfo,
- int *numFonts, pointer private)
-{
- LFWIDataPtr data = (LFWIDataPtr) private;
- int ret;
- char *name;
- int namelen;
-
- if (data->current == data->names->nnames)
- {
- FreeFontNames (data->names);
- xfree (data);
- return BadFontName;
- }
- name = data->names->names[data->current];
- namelen = data->names->length[data->current];
- ret = FontFileListOneFontWithInfo (client, fpe, &name, &namelen, pFontInfo);
- if (ret == BadFontName)
- ret = AllocError;
- *namep = name;
- *namelenp = namelen;
- ++data->current;
- *numFonts = data->names->nnames - data->current;
- return ret;
-}
-
-int
-FontFileStartListFontsAndAliases(pointer client, FontPathElementPtr fpe,
- char *pat, int len, int max,
- pointer *privatep)
-{
- LFWIDataPtr data;
- int ret;
-
- data = (LFWIDataPtr) xalloc (sizeof *data);
- if (!data)
- return AllocError;
- data->names = MakeFontNamesRecord (0);
- if (!data->names)
- {
- xfree (data);
- return AllocError;
- }
- ret = _FontFileListFonts (client, fpe, pat, len, max, data->names, 1);
- if (ret != Successful)
- {
- FreeFontNames (data->names);
- xfree (data);
- return ret;
- }
- data->current = 0;
- *privatep = (pointer) data;
- return Successful;
-}
-
-int
-FontFileListNextFontOrAlias(pointer client, FontPathElementPtr fpe,
- char **namep, int *namelenp, char **resolvedp,
- int *resolvedlenp, pointer private)
-{
- LFWIDataPtr data = (LFWIDataPtr) private;
- int ret;
- char *name;
- int namelen;
-
- if (data->current == data->names->nnames)
- {
- FreeFontNames (data->names);
- xfree (data);
- return BadFontName;
- }
- name = data->names->names[data->current];
- namelen = data->names->length[data->current];
-
- /* If this is a real font name... */
- if (namelen >= 0)
- {
- *namep = name;
- *namelenp = namelen;
- ret = Successful;
- }
- /* Else if an alias */
- else
- {
- /* Tell the caller that this is an alias... let him resolve it to
- see if it's valid */
- *namep = name;
- *namelenp = -namelen;
- *resolvedp = data->names->names[++data->current];
- *resolvedlenp = data->names->length[data->current];
- ret = FontNameAlias;
- }
-
- ++data->current;
- return ret;
-}
-
-void
-FontFileRegisterLocalFpeFunctions (void)
-{
- RegisterFPEFunctions(FontFileNameCheck,
- FontFileInitFPE,
- FontFileFreeFPE,
- FontFileResetFPE,
- FontFileOpenFont,
- FontFileCloseFont,
- FontFileListFonts,
- FontFileStartListFontsWithInfo,
- FontFileListNextFontWithInfo,
- NULL,
- NULL,
- NULL,
- FontFileStartListFontsAndAliases,
- FontFileListNextFontOrAlias,
- FontFileEmptyBitmapSource);
-}
diff --git a/nx-X11/lib/font/fontfile/fontscale.c b/nx-X11/lib/font/fontfile/fontscale.c
deleted file mode 100644
index 8e9de513d..000000000
--- a/nx-X11/lib/font/fontfile/fontscale.c
+++ /dev/null
@@ -1,447 +0,0 @@
-/* $Xorg: fontscale.c,v 1.5 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/fontscale.c,v 3.9 2001/08/27 19:49:54 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-#ifdef _XOPEN_SOURCE
-#include <math.h>
-#else
-#define _XOPEN_SOURCE /* to get prototype for hypot on some systems */
-#include <math.h>
-#undef _XOPEN_SOURCE
-#endif
-
-Bool
-FontFileAddScaledInstance (FontEntryPtr entry, FontScalablePtr vals,
- FontPtr pFont, char *bitmapName)
-{
- FontScalableEntryPtr scalable;
- FontScalableExtraPtr extra;
- FontScaledPtr new;
- int newsize;
-
- scalable = &entry->u.scalable;
- extra = scalable->extra;
- if (extra->numScaled == extra->sizeScaled)
- {
- newsize = extra->sizeScaled + 4;
- new = (FontScaledPtr) xrealloc (extra->scaled,
- newsize * sizeof (FontScaledRec));
- if (!new)
- return FALSE;
- extra->sizeScaled = newsize;
- extra->scaled = new;
- }
- new = &extra->scaled[extra->numScaled++];
- new->vals = *vals;
- new->pFont = pFont;
- new->bitmap = (FontEntryPtr) bitmapName;
- if (pFont)
- pFont->fpePrivate = (pointer) entry;
- return TRUE;
-}
-
-/* Must call this after the directory is sorted */
-
-void
-FontFileSwitchStringsToBitmapPointers (FontDirectoryPtr dir)
-{
- int s;
- int b;
- int i;
- FontEntryPtr scalable;
- FontEntryPtr nonScalable;
- FontScaledPtr scaled;
- FontScalableExtraPtr extra;
-
- scalable = dir->scalable.entries;
- nonScalable = dir->nonScalable.entries;
- for (s = 0; s < dir->scalable.used; s++)
- {
- extra = scalable[s].u.scalable.extra;
- scaled = extra->scaled;
- for (i = 0; i < extra->numScaled; i++)
- for (b = 0; b < dir->nonScalable.used; b++)
- if (nonScalable[b].name.name == (char *) scaled[i].bitmap)
- scaled[i].bitmap = &nonScalable[b];
- }
-}
-
-void
-FontFileRemoveScaledInstance (FontEntryPtr entry, FontPtr pFont)
-{
- FontScalableEntryPtr scalable;
- FontScalableExtraPtr extra;
- int i;
-
- scalable = &entry->u.scalable;
- extra = scalable->extra;
- for (i = 0; i < extra->numScaled; i++)
- {
- if (extra->scaled[i].pFont == pFont)
- {
- if (extra->scaled[i].vals.ranges)
- xfree (extra->scaled[i].vals.ranges);
- extra->numScaled--;
- for (; i < extra->numScaled; i++)
- extra->scaled[i] = extra->scaled[i+1];
- }
- }
-}
-
-Bool
-FontFileCompleteXLFD (FontScalablePtr vals, FontScalablePtr def)
-{
- FontResolutionPtr res;
- int num_res;
- double sx, sy, temp_matrix[4];
- double pixel_setsize_adjustment = 1.0;
- /*
- * If two of the three vertical scale values are specified, compute the
- * third. If all three are specified, make sure they are consistent
- * (within a pixel)
- *
- * One purpose of this procedure is to complete XLFD names in a
- * repeatable manner. That is, if the user partially specifies
- * a name (say, pixelsize but not pointsize), the results generated
- * here result in a fully specified name that will result in the
- * same font.
- */
-
- res = GetClientResolutions(&num_res);
-
- if (!(vals->values_supplied & PIXELSIZE_MASK) ||
- !(vals->values_supplied & POINTSIZE_MASK))
- {
- /* If resolution(s) unspecified and cannot be computed from
- pixelsize and pointsize, get appropriate defaults. */
-
- if (num_res)
- {
- if (vals->x <= 0)
- vals->x = res->x_resolution;
- if (vals->y <= 0)
- vals->y = res->y_resolution;
- }
-
- if (vals->x <= 0)
- vals->x = def->x;
- if (vals->y <= 0)
- vals->y = def->y;
- }
- else
- {
- /* If needed, compute resolution values from the pixel and
- pointsize information we were given. This problem is
- overdetermined (four equations, two unknowns), but we don't
- check for inconsistencies here. If they exist, they will
- show up in later tests for the point and pixel sizes. */
-
- if (vals->y <= 0)
- {
- double x = hypot(vals->pixel_matrix[1], vals->pixel_matrix[3]);
- double y = hypot(vals->point_matrix[1], vals->point_matrix[3]);
- if (y < EPS) return FALSE;
- vals->y = (int)(x * 72.27 / y + .5);
- }
- if (vals->x <= 0)
- {
- /* If the pixelsize was given as an array, or as a scalar that
- has been normalized for the pixel shape, we have enough
- information to compute a separate horizontal resolution */
-
- if ((vals->values_supplied & PIXELSIZE_MASK) == PIXELSIZE_ARRAY ||
- (vals->values_supplied & PIXELSIZE_MASK) ==
- PIXELSIZE_SCALAR_NORMALIZED)
- {
- double x = hypot(vals->pixel_matrix[0], vals->pixel_matrix[2]);
- double y = hypot(vals->point_matrix[0], vals->point_matrix[2]);
- if (y < EPS) return FALSE;
- vals->x = (int)(x * 72.27 / y + .5);
- }
- else
- {
- /* Not enough information in the pixelsize array. Just
- assume the pixels are square. */
- vals->x = vals->y;
- }
- }
- }
-
- if (vals->x <= 0 || vals->y <= 0) return FALSE;
-
- /* If neither pixelsize nor pointsize is defined, take the pointsize
- from the defaults structure we've been passed. */
- if (!(vals->values_supplied & PIXELSIZE_MASK) &&
- !(vals->values_supplied & POINTSIZE_MASK))
- {
- if (num_res)
- {
- vals->point_matrix[0] =
- vals->point_matrix[3] = (double)res->point_size / 10.0;
- vals->point_matrix[1] =
- vals->point_matrix[2] = 0;
- vals->values_supplied = (vals->values_supplied & ~POINTSIZE_MASK) |
- POINTSIZE_SCALAR;
- }
- else if (def->values_supplied & POINTSIZE_MASK)
- {
- vals->point_matrix[0] = def->point_matrix[0];
- vals->point_matrix[1] = def->point_matrix[1];
- vals->point_matrix[2] = def->point_matrix[2];
- vals->point_matrix[3] = def->point_matrix[3];
- vals->values_supplied = (vals->values_supplied & ~POINTSIZE_MASK) |
- (def->values_supplied & POINTSIZE_MASK);
- }
- else return FALSE;
- }
-
- /* At this point, at least two of the three vertical scale values
- should be specified. Our job now is to compute the missing ones
- and check for agreement between overspecified values */
-
- /* If pixelsize was specified by a scalar, we need to fix the matrix
- now that we know the resolutions. */
- if ((vals->values_supplied & PIXELSIZE_MASK) == PIXELSIZE_SCALAR)
- {
- /* pixel_setsize_adjustment used below to modify permissible
- error in pixel/pointsize matching, since multiplying a
- number rounded to integer changes the amount of the error
- caused by the rounding */
-
- pixel_setsize_adjustment = (double)vals->x / (double)vals->y;
- vals->pixel_matrix[0] *= pixel_setsize_adjustment;
- vals->values_supplied = (vals->values_supplied & ~PIXELSIZE_MASK) |
- PIXELSIZE_SCALAR_NORMALIZED;
- }
-
- sx = (double)vals->x / 72.27;
- sy = (double)vals->y / 72.27;
-
- /* If a pointsize was specified, make sure pixelsize is consistent
- to within 1 pixel, then replace pixelsize with a consistent
- floating-point value. */
-
- if (vals->values_supplied & POINTSIZE_MASK)
- {
- recompute_pixelsize: ;
- temp_matrix[0] = vals->point_matrix[0] * sx;
- temp_matrix[1] = vals->point_matrix[1] * sy;
- temp_matrix[2] = vals->point_matrix[2] * sx;
- temp_matrix[3] = vals->point_matrix[3] * sy;
- if (vals->values_supplied & PIXELSIZE_MASK)
- {
- if (fabs(vals->pixel_matrix[0] - temp_matrix[0]) >
- pixel_setsize_adjustment ||
- fabs(vals->pixel_matrix[1] - temp_matrix[1]) > 1 ||
- fabs(vals->pixel_matrix[2] - temp_matrix[2]) > 1 ||
- fabs(vals->pixel_matrix[3] - temp_matrix[3]) > 1)
- return FALSE;
- }
- if ((vals->values_supplied & PIXELSIZE_MASK) == PIXELSIZE_ARRAY &&
- (vals->values_supplied & POINTSIZE_MASK) == POINTSIZE_SCALAR)
- {
- /* In the special case that pixelsize came as an array and
- pointsize as a scalar, recompute the pointsize matrix
- from the pixelsize matrix. */
- goto recompute_pointsize;
- }
-
- /* Refresh pixel matrix with precise values computed from
- pointsize and resolution. */
- vals->pixel_matrix[0] = temp_matrix[0];
- vals->pixel_matrix[1] = temp_matrix[1];
- vals->pixel_matrix[2] = temp_matrix[2];
- vals->pixel_matrix[3] = temp_matrix[3];
-
- /* Set values_supplied for pixel to match that for point */
- vals->values_supplied =
- (vals->values_supplied & ~PIXELSIZE_MASK) |
- (((vals->values_supplied & POINTSIZE_MASK) == POINTSIZE_ARRAY) ?
- PIXELSIZE_ARRAY : PIXELSIZE_SCALAR_NORMALIZED);
- }
- else
- {
- /* Pointsize unspecified... compute from pixel size and
- resolutions */
- recompute_pointsize: ;
- if (fabs(sx) < EPS || fabs(sy) < EPS) return FALSE;
- vals->point_matrix[0] = vals->pixel_matrix[0] / sx;
- vals->point_matrix[1] = vals->pixel_matrix[1] / sy;
- vals->point_matrix[2] = vals->pixel_matrix[2] / sx;
- vals->point_matrix[3] = vals->pixel_matrix[3] / sy;
-
- /* Set values_supplied for pixel to match that for point */
- vals->values_supplied =
- (vals->values_supplied & ~POINTSIZE_MASK) |
- (((vals->values_supplied & PIXELSIZE_MASK) == PIXELSIZE_ARRAY) ?
- POINTSIZE_ARRAY : POINTSIZE_SCALAR);
-
- /* If we computed scalar pointsize from scalar pixelsize, round
- pointsize to decipoints and recompute pixelsize so we end up
- with a repeatable name */
- if ((vals->values_supplied & POINTSIZE_MASK) == POINTSIZE_SCALAR)
- {
- /* Off-diagonal elements should be zero since no matrix was
- specified. */
- vals->point_matrix[0] =
- (double)(int)(vals->point_matrix[0] * 10.0 + .5) / 10.0;
- vals->point_matrix[3] =
- (double)(int)(vals->point_matrix[3] * 10.0 + .5) / 10.0;
- goto recompute_pixelsize;
- }
- }
-
- /* We've succeeded. Round everything to a few decimal places
- for repeatability. */
-
- vals->pixel_matrix[0] = xlfd_round_double(vals->pixel_matrix[0]);
- vals->pixel_matrix[1] = xlfd_round_double(vals->pixel_matrix[1]);
- vals->pixel_matrix[2] = xlfd_round_double(vals->pixel_matrix[2]);
- vals->pixel_matrix[3] = xlfd_round_double(vals->pixel_matrix[3]);
- vals->point_matrix[0] = xlfd_round_double(vals->point_matrix[0]);
- vals->point_matrix[1] = xlfd_round_double(vals->point_matrix[1]);
- vals->point_matrix[2] = xlfd_round_double(vals->point_matrix[2]);
- vals->point_matrix[3] = xlfd_round_double(vals->point_matrix[3]);
-
- /* Fill in the deprecated fields for the benefit of rasterizers
- that do not handle the matrices. */
- vals->point = vals->point_matrix[3] * 10;
- vals->pixel = vals->pixel_matrix[3];
-
- return TRUE;
-}
-
-static Bool
-MatchScalable (FontScalablePtr a, FontScalablePtr b)
-{
- int i;
-
- /* Some asymmetry here: we assume that the first argument (a) is
- the table entry and the second (b) the item we're trying to match
- (the key). We'll consider the fonts matched if the relevant
- metrics match *and* if a) the table entry doesn't have charset
- subsetting or b) the table entry has identical charset subsetting
- to that in the key. We could add logic to check if the table
- entry has a superset of the charset required by the key, but
- we'll resist the urge for now. */
-
-#define EQUAL(a,b) ((a)[0] == (b)[0] && \
- (a)[1] == (b)[1] && \
- (a)[2] == (b)[2] && \
- (a)[3] == (b)[3])
-
- if (!(a->x == b->x &&
- a->y == b->y &&
- (a->width == b->width || a->width == 0 || b->width == 0 || b->width == -1) &&
- (!(b->values_supplied & PIXELSIZE_MASK) ||
- ((a->values_supplied & PIXELSIZE_MASK) ==
- (b->values_supplied & PIXELSIZE_MASK) &&
- EQUAL(a->pixel_matrix, b->pixel_matrix))) &&
- (!(b->values_supplied & POINTSIZE_MASK) ||
- ((a->values_supplied & POINTSIZE_MASK) ==
- (b->values_supplied & POINTSIZE_MASK) &&
- EQUAL(a->point_matrix, b->point_matrix))) &&
- (a->nranges == 0 || a->nranges == b->nranges)))
- return FALSE;
-
- for (i = 0; i < a->nranges; i++)
- if (a->ranges[i].min_char_low != b->ranges[i].min_char_low ||
- a->ranges[i].min_char_high != b->ranges[i].min_char_high ||
- a->ranges[i].max_char_low != b->ranges[i].max_char_low ||
- a->ranges[i].max_char_high != b->ranges[i].max_char_high)
- return FALSE;
-
- return TRUE;
-}
-
-FontScaledPtr
-FontFileFindScaledInstance (FontEntryPtr entry, FontScalablePtr vals,
- int noSpecificSize)
-{
- FontScalableEntryPtr scalable;
- FontScalableExtraPtr extra;
- FontScalablePtr mvals;
- int dist, i;
- int mini;
- double mindist;
- register double temp, sum=0.0;
-
-#define NORMDIFF(a, b) ( \
- temp = (a)[0] - (b)[0], \
- sum = temp * temp, \
- temp = (a)[1] - (b)[1], \
- sum += temp * temp, \
- temp = (a)[2] - (b)[2], \
- sum += temp * temp, \
- temp = (a)[3] - (b)[3], \
- sum + temp * temp )
-
- scalable = &entry->u.scalable;
- extra = scalable->extra;
- if (noSpecificSize && extra->numScaled)
- {
- mini = 0;
- mindist = NORMDIFF(extra->scaled[0].vals.point_matrix,
- vals->point_matrix);
- for (i = 1; i < extra->numScaled; i++)
- {
- if (extra->scaled[i].pFont &&
- !extra->scaled[i].pFont->info.cachable) continue;
- mvals = &extra->scaled[i].vals;
- dist = NORMDIFF(mvals->point_matrix, vals->point_matrix);
- if (dist < mindist)
- {
- mindist = dist;
- mini = i;
- }
- }
- if (extra->scaled[mini].pFont &&
- !extra->scaled[mini].pFont->info.cachable) return 0;
- return &extra->scaled[mini];
- }
- else
- {
- /* See if we've scaled to this value yet */
- for (i = 0; i < extra->numScaled; i++)
- {
- if (extra->scaled[i].pFont &&
- !extra->scaled[i].pFont->info.cachable) continue;
- if (MatchScalable (&extra->scaled[i].vals, vals))
- return &extra->scaled[i];
- }
- }
- return 0;
-}
diff --git a/nx-X11/lib/font/fontfile/gunzip.c b/nx-X11/lib/font/fontfile/gunzip.c
deleted file mode 100644
index 8c9c317aa..000000000
--- a/nx-X11/lib/font/fontfile/gunzip.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/* $Xorg: gunzip.c,v 1.3 2000/08/17 19:46:37 cpqbld Exp $ */
-/* lib/font/fontfile/gunzip.c
- written by Mark Eichin <eichin@kitten.gen.ma.us> September 1996.
- intended for inclusion in X11 public releases. */
-/* $XFree86: xc/lib/font/fontfile/gunzip.c,v 1.4 2000/09/19 12:46:08 eich Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/bufio.h>
-#include <zlib.h>
-
-typedef struct _xzip_buf {
- z_stream z;
- int zstat;
- BufChar b[BUFFILESIZE];
- BufChar b_in[BUFFILESIZE];
- BufFilePtr f;
-} xzip_buf;
-
-static int BufZipFileClose ( BufFilePtr f, int flag );
-static int BufZipFileFill ( BufFilePtr f );
-static int BufZipFileSkip ( BufFilePtr f, int c );
-static int BufCheckZipHeader ( BufFilePtr f );
-
-BufFilePtr
-BufFilePushZIP (BufFilePtr f)
-{
- xzip_buf *x;
-
- x = (xzip_buf *) xalloc (sizeof (xzip_buf));
- if (!x) return 0;
- /* these are just for raw calloc/free */
- x->z.zalloc = Z_NULL;
- x->z.zfree = Z_NULL;
- x->z.opaque = Z_NULL;
- x->f = f;
-
- /* force inflateInit to allocate it's own history buffer */
- x->z.next_in = Z_NULL;
- x->z.next_out = Z_NULL;
- x->z.avail_in = x->z.avail_out = 0;
-
- /* using negative windowBits sets "nowrap" mode, which turns off
- zlib header checking [undocumented, for gzip compatibility only?] */
- x->zstat = inflateInit2(&(x->z), -MAX_WBITS);
- if (x->zstat != Z_OK) {
- xfree(x);
- return 0;
- }
-
- /* now that the history buffer is allocated, we provide the data buffer */
- x->z.next_out = x->b;
- x->z.avail_out = BUFFILESIZE;
- x->z.next_out = x->b_in;
- x->z.avail_in = 0;
-
- if (BufCheckZipHeader(x->f)) {
- xfree(x);
- return 0;
- }
-
- return BufFileCreate((char *)x,
- BufZipFileFill,
- 0,
- BufZipFileSkip,
- BufZipFileClose);
-}
-
-static int
-BufZipFileClose(BufFilePtr f, int flag)
-{
- xzip_buf *x = (xzip_buf *)f->private;
- inflateEnd (&(x->z));
- BufFileClose (x->f, flag);
- xfree (x);
- return 1;
-}
-
-/* here's the real work.
- -- we need to put stuff in f.buffer, update f.left and f.bufp,
- then return the first byte (or BUFFILEEOF).
- -- to do this, we need to get stuff into avail_in, and next_in,
- and call inflate appropriately.
- -- we may also need to add CRC maintenance - if inflate tells us
- Z_STREAM_END, we then have 4bytes CRC and 4bytes length...
- gzio.c:gzread shows most of the mechanism.
- */
-static int
-BufZipFileFill (BufFilePtr f)
-{
- xzip_buf *x = (xzip_buf *)f->private;
-
- /* we only get called when left == 0... */
- /* but just in case, deal */
- if (f->left >= 0) {
- f->left--;
- return *(f->bufp++);
- }
- /* did we run out last time? */
- switch (x->zstat) {
- case Z_OK:
- break;
- case Z_STREAM_END:
- case Z_DATA_ERROR:
- case Z_ERRNO:
- f->left = 0;
- return BUFFILEEOF;
- default:
- return BUFFILEEOF;
- }
- /* now we work to consume what we can */
- /* let zlib know what we can handle */
- x->z.next_out = x->b;
- x->z.avail_out = BUFFILESIZE;
-
- /* and try to consume all of it */
- while (x->z.avail_out > 0) {
- /* if we don't have anything to work from... */
- if (x->z.avail_in == 0) {
- /* ... fill the z buf from underlying file */
- int i, c;
- for (i = 0; i < sizeof(x->b_in); i++) {
- c = BufFileGet(x->f);
- if (c == BUFFILEEOF) break;
- x->b_in[i] = c;
- }
- x->z.avail_in += i;
- x->z.next_in = x->b_in;
- }
- /* so now we have some output space and some input data */
- x->zstat = inflate(&(x->z), Z_NO_FLUSH);
- /* the inflation output happens in the f buffer directly... */
- if (x->zstat == Z_STREAM_END) {
- /* deal with EOF, crc */
- break;
- }
- if (x->zstat != Z_OK) {
- break;
- }
- }
- f->bufp = x->b;
- f->left = BUFFILESIZE - x->z.avail_out;
-
- if (f->left >= 0) {
- f->left--;
- return *(f->bufp++);
- } else {
- return BUFFILEEOF;
- }
-}
-
-/* there should be a BufCommonSkip... */
-static int
-BufZipFileSkip (BufFilePtr f, int c)
-{
- /* BufFileRawSkip returns the count unchanged.
- BufCompressedSkip returns 0.
- That means it probably never gets called... */
- int retval = c;
- while(c--) {
- int get = BufFileGet(f);
- if (get == BUFFILEEOF) return get;
- }
- return retval;
-}
-
-/* now we need to duplicate check_header */
-/* contents:
- 0x1f, 0x8b -- magic number
- 1 byte -- method (Z_DEFLATED)
- 1 byte -- flags (mask with RESERVED -> fail)
- 4 byte -- time (discard)
- 1 byte -- xflags (discard)
- 1 byte -- "os" code (discard)
- [if flags & EXTRA_FIELD:
- 2 bytes -- LSBfirst length n
- n bytes -- extra data (discard)]
- [if flags & ORIG_NAME:
- n bytes -- null terminated name (discard)]
- [if flags & COMMENT:
- n bytes -- null terminated comment (discard)]
- [if flags & HEAD_CRC:
- 2 bytes -- crc of headers? (discard)]
- */
-
-/* gzip flag byte -- from gzio.c */
-#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */
-#define HEAD_CRC 0x02 /* bit 1 set: header CRC present */
-#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */
-#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
-#define COMMENT 0x10 /* bit 4 set: file comment present */
-#define RESERVED 0xE0 /* bits 5..7: reserved */
-
-#define GET(f) do {c = BufFileGet(f); if (c == BUFFILEEOF) return c;} while(0)
-static int
-BufCheckZipHeader(BufFilePtr f)
-{
- int c, flags;
- GET(f); if (c != 0x1f) return 1; /* magic 1 */
- GET(f); if (c != 0x8b) return 2; /* magic 2 */
- GET(f); if (c != Z_DEFLATED) return 3; /* method */
- GET(f); if (c & RESERVED) return 4; /* reserved flags */
- flags = c;
- GET(f); GET(f); GET(f); GET(f); /* time */
- GET(f); /* xflags */
- GET(f); /* os code */
- if (flags & EXTRA_FIELD) {
- int len;
- GET(f); len = c;
- GET(f); len += (c<<8);
- while (len-- >= 0) {
- GET(f);
- }
- }
- if (flags & ORIG_NAME) {
- do { GET(f); } while (c != 0);
- }
- if (flags & COMMENT) {
- do { GET(f); } while (c != 0);
- }
- if (flags & HEAD_CRC) {
- GET(f); GET(f); /* header crc */
- }
- return 0;
-}
diff --git a/nx-X11/lib/font/fontfile/module/Imakefile b/nx-X11/lib/font/fontfile/module/Imakefile
deleted file mode 100644
index 0eebe085e..000000000
--- a/nx-X11/lib/font/fontfile/module/Imakefile
+++ /dev/null
@@ -1,21 +0,0 @@
-XCOMM $XFree86: xc/lib/font/fontfile/module/Imakefile,v 1.3 1999/06/13 13:47:35 dawes Exp $
-#include <Server.tmpl>
-
- INCLUDES = -I$(FONTINCSRC) -I../../include -I$(SERVERSRC)/include \
- -I$(XINCLUDESRC)
-
- DEFINES = -DLOADABLEFONTS
-
- SRCS = ffcheck.c register.c
- OBJS = ffcheck.o register.o
-
-SubdirLibraryRule($(OBJS))
-
-NormalLibraryObjectRule()
-NormalLintTarget($(SRCS))
-
-LinkSourceFile(ffcheck.c,..)
-LinkSourceFile(register.c,..)
-
-DependTarget()
-
diff --git a/nx-X11/lib/font/fontfile/printerfont.c b/nx-X11/lib/font/fontfile/printerfont.c
deleted file mode 100644
index 0b6c19c62..000000000
--- a/nx-X11/lib/font/fontfile/printerfont.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* $Xorg: printerfont.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/printerfont.c,v 1.5tsi Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-/* $NCDXorg: @(#)fontfile.c,v 1.6 1991/07/02 17:00:46 lemke Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-
-/*
- * Map FPE functions to renderer functions
- */
-
-#define PRINTERPATHPREFIX "PRINTER:"
-
-/* STUB
-int XpClientIsPrintClient(client,fpe)
-pointer client;
-FontPathElementPtr fpe;
-{ return 1; }
- */
-
-static int
-PrinterFontNameCheck (char *name)
-{
- if (strncmp(name,PRINTERPATHPREFIX,strlen(PRINTERPATHPREFIX)) != 0)
- return 0;
- name += strlen(PRINTERPATHPREFIX);
-#ifndef NCD
- return *name == '/';
-#else
- return ((strcmp(name, "built-ins") == 0) || (*name == '/'));
-#endif
-}
-
-static int
-PrinterFontInitFPE (FontPathElementPtr fpe)
-{
- int status;
- FontDirectoryPtr dir;
- char * name;
-
- name = fpe->name + strlen(PRINTERPATHPREFIX);
- status = FontFileReadDirectory (name, &dir);
- if (status == Successful)
- {
- if (dir->nonScalable.used > 0)
- if (!FontFileRegisterBitmapSource (fpe))
- {
- FontFileFreeFPE (fpe);
- return AllocError;
- }
- fpe->private = (pointer) dir;
- }
- return status;
-}
-
-/* Here we must check the client to see if it has a context attached to
- * it that allows us to access the printer fonts
- */
-
-static int
-PrinterFontOpenFont (pointer client, FontPathElementPtr fpe, Mask flags,
- char *name, int namelen,
- fsBitmapFormat format, fsBitmapFormatMask fmask,
- XID id, FontPtr *pFont, char **aliasName,
- FontPtr non_cachable_font)
-{
- if (XpClientIsPrintClient(client,fpe))
- return (FontFileOpenFont (client, fpe, flags, name, namelen, format,
- fmask, id, pFont, aliasName, non_cachable_font));
- return BadFontName;
-}
-
-static int
-PrinterFontListFonts (pointer client, FontPathElementPtr fpe, char *pat,
- int len, int max, FontNamesPtr names)
-{
- if (XpClientIsPrintClient(client,fpe))
- return FontFileListFonts (client, fpe, pat, len, max, names);
- return BadFontName;
-}
-
-static int
-PrinterFontStartListFontsWithInfo(pointer client, FontPathElementPtr fpe,
- char *pat, int len, int max,
- pointer *privatep)
-{
- if (XpClientIsPrintClient(client,fpe))
- return FontFileStartListFontsWithInfo(client, fpe, pat, len,
- max, privatep);
- return BadFontName;
-}
-
-static int
-PrinterFontListNextFontWithInfo(pointer client, FontPathElementPtr fpe,
- char **namep, int *namelenp,
- FontInfoPtr *pFontInfo,
- int *numFonts, pointer private)
-{
- if (XpClientIsPrintClient(client,fpe))
- return FontFileListNextFontWithInfo(client, fpe, namep, namelenp,
- pFontInfo, numFonts, private);
- return BadFontName;
-}
-
-static int
-PrinterFontStartListFontsAndAliases(pointer client, FontPathElementPtr fpe,
- char *pat, int len, int max,
- pointer *privatep)
-{
- if (XpClientIsPrintClient(client,fpe))
- return FontFileStartListFontsAndAliases(client, fpe, pat, len,
- max, privatep);
- return BadFontName;
-}
-
-static int
-PrinterFontListNextFontOrAlias(pointer client, FontPathElementPtr fpe,
- char **namep, int *namelenp,
- char **resolvedp, int *resolvedlenp,
- pointer private)
-{
- if (XpClientIsPrintClient(client,fpe))
- return FontFileListNextFontOrAlias(client, fpe, namep, namelenp,
- resolvedp, resolvedlenp, private);
- return BadFontName;
-}
-
-void
-PrinterFontRegisterFpeFunctions (void)
-{
- RegisterFPEFunctions(PrinterFontNameCheck,
- PrinterFontInitFPE,
- FontFileFreeFPE,
- FontFileResetFPE,
- PrinterFontOpenFont,
- FontFileCloseFont,
- PrinterFontListFonts,
- PrinterFontStartListFontsWithInfo,
- PrinterFontListNextFontWithInfo,
- NULL,
- NULL,
- NULL,
- PrinterFontStartListFontsAndAliases,
- PrinterFontListNextFontOrAlias,
- FontFileEmptyBitmapSource);
-}
diff --git a/nx-X11/lib/font/fontfile/register.c b/nx-X11/lib/font/fontfile/register.c
deleted file mode 100644
index 5ddab0386..000000000
--- a/nx-X11/lib/font/fontfile/register.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* $Xorg: register.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/register.c,v 1.14 2001/01/17 19:43:30 dawes Exp $ */
-
-/*
- * This is in a separate source file so that small programs
- * such as mkfontdir that want to use the fontfile utilities don't
- * end up dragging in code from all the renderers, which is not small.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#define XFONT_BITMAP 1
-#endif
-
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/bitmap.h>
-
-#ifdef LOADABLEFONTS
-#include <X11/fonts/fontmod.h>
-#endif
-
-/*
- * Translate monolithic build symbols to modular build symbols.
- * I chose to make the modular symbols 'canonical' because they
- * are prefixed with XFONT_, neatly avoiding name collisions
- * with other packages.
- */
-
-#ifdef BUILD_SPEEDO
-# define XFONT_SPEEDO 1
-#endif
-#ifdef BUILD_TYPE1
-# define XFONT_TYPE1 1
-#endif
-
-#ifdef BUILD_CID
-# define XFONT_CID 1
-#endif
-#ifdef BUILD_FREETYPE
-# define XFONT_FREETYPE 1
-#endif
-
-void
-FontFileRegisterFpeFunctions(void)
-{
-#ifndef LOADABLEFONTS
-
-#ifdef XFONT_BITMAP
- BitmapRegisterFontFileFunctions ();
-#endif
-#ifdef XFONT_SPEEDO
- SpeedoRegisterFontFileFunctions ();
-#endif
-#ifdef XFONT_TYPE1
- Type1RegisterFontFileFunctions();
-#endif
-#ifdef XFONT_CID
- CIDRegisterFontFileFunctions();
-#endif
-#ifdef XFONT_FREETYPE
- FreeTypeRegisterFontFileFunctions();
-#endif
-
-#else
- {
- int i;
-
- if (FontModuleList) {
- for (i = 0; FontModuleList[i].name; i++) {
- if (FontModuleList[i].initFunc)
- FontModuleList[i].initFunc();
- }
- }
- }
-#endif
-
- FontFileRegisterLocalFpeFunctions ();
-}
-
diff --git a/nx-X11/lib/font/fontfile/renderers.c b/nx-X11/lib/font/fontfile/renderers.c
deleted file mode 100644
index f110ba817..000000000
--- a/nx-X11/lib/font/fontfile/renderers.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* $Xorg: renderers.c,v 1.4 2001/02/09 02:04:03 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/fontfile/renderers.c,v 1.7 2002/12/09 17:30:00 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fntfilst.h>
-extern void ErrorF(const char *f, ...);
-
-static FontRenderersRec renderers;
-
-/*
- * XXX Maybe should allow unregistering renders. For now, just clear the
- * list at each new generation.
- */
-extern unsigned long serverGeneration;
-static unsigned long rendererGeneration = 0;
-
-Bool
-FontFileRegisterRenderer (FontRendererPtr renderer)
-{
- return FontFilePriorityRegisterRenderer(renderer, 0);
-}
-
-Bool
-FontFilePriorityRegisterRenderer (FontRendererPtr renderer, int priority)
-{
- int i;
- struct _FontRenderersElement *new;
-
- if (rendererGeneration != serverGeneration) {
- rendererGeneration = serverGeneration;
- renderers.number = 0;
- if (renderers.renderers)
- xfree(renderers.renderers);
- renderers.renderers = NULL;
- }
-
- for (i = 0; i < renderers.number; i++) {
- if (!strcmp (renderers.renderers[i].renderer->fileSuffix,
- renderer->fileSuffix)) {
- if(renderers.renderers[i].priority >= priority) {
- if(renderers.renderers[i].priority == priority) {
- if (rendererGeneration == 1)
- ErrorF("Warning: font renderer for \"%s\" "
- "already registered at priority %d\n",
- renderer->fileSuffix, priority);
- }
- return TRUE;
- } else {
- break;
- }
- }
- }
-
- if(i >= renderers.number) {
- new = xrealloc (renderers.renderers, sizeof(*new) * (i + 1));
- if (!new)
- return FALSE;
- renderers.renderers = new;
- renderers.number = i + 1;
- }
- renderer->number = i;
- renderers.renderers[i].renderer = renderer;
- renderers.renderers[i].priority = priority;
- return TRUE;
-}
-
-FontRendererPtr
-FontFileMatchRenderer (char *fileName)
-{
- int i;
- int fileLen;
- FontRendererPtr r;
-
- fileLen = strlen (fileName);
- for (i = 0; i < renderers.number; i++)
- {
- r = renderers.renderers[i].renderer;
- if (fileLen >= r->fileSuffixLen &&
- !strcmp (fileName + fileLen - r->fileSuffixLen, r->fileSuffix))
- {
- return r;
- }
- }
- return 0;
-}
diff --git a/nx-X11/lib/font/include/Imakefile b/nx-X11/lib/font/include/Imakefile
deleted file mode 100644
index 73e65a41c..000000000
--- a/nx-X11/lib/font/include/Imakefile
+++ /dev/null
@@ -1,11 +0,0 @@
-XCOMM $Xorg$
- HEADERS = bitmap.h bufio.h fntfil.h fntfilio.h fntfilst.h \
- fontencc.h fontmisc.h fontmod.h fontshow.h fontutil.h \
- fontxlfd.h
-all::
-
-BuildIncludes($(HEADERS),X11/fonts,../..)
-
-#if BuildLibraries
-InstallMultipleFlags($(HEADERS),$(INCDIR)/X11/fonts,$(INSTINCFLAGS))
-#endif
diff --git a/nx-X11/lib/font/include/bitmap.h b/nx-X11/lib/font/include/bitmap.h
deleted file mode 100644
index e60fda8eb..000000000
--- a/nx-X11/lib/font/include/bitmap.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/* $Xorg: bitmap.h,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/include/bitmap.h,v 1.9 2001/01/17 19:43:31 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifndef _BITMAP_H_
-#define _BITMAP_H_
-
-#include <X11/fonts/fntfilio.h>
-#ifndef FONTMODULE
-#include <stdio.h> /* just for NULL */
-#else
-#include "xf86_ansic.h"
-#endif
-
-/*
- * Internal format used to store bitmap fonts
- */
-
-/* number of encoding entries in one segment */
-#define BITMAP_FONT_SEGMENT_SIZE 128
-
-typedef struct _BitmapExtra {
- Atom *glyphNames;
- int *sWidths;
- CARD32 bitmapsSizes[GLYPHPADOPTIONS];
- FontInfoRec info;
-} BitmapExtraRec, *BitmapExtraPtr;
-
-typedef struct _BitmapFont {
- unsigned version_num;
- int num_chars;
- int num_tables;
- CharInfoPtr metrics; /* font metrics, including glyph pointers */
- xCharInfo *ink_metrics; /* ink metrics */
- char *bitmaps; /* base of bitmaps, useful only to free */
- CharInfoPtr **encoding; /* array of arrays of char info pointers */
- CharInfoPtr pDefault; /* default character */
- BitmapExtraPtr bitmapExtra; /* stuff not used by X server */
-} BitmapFontRec, *BitmapFontPtr;
-
-#define ACCESSENCODING(enc,i) \
-(enc[(i)/BITMAP_FONT_SEGMENT_SIZE]?\
-(enc[(i)/BITMAP_FONT_SEGMENT_SIZE][(i)%BITMAP_FONT_SEGMENT_SIZE]):\
-0)
-#define ACCESSENCODINGL(enc,i) \
-(enc[(i)/BITMAP_FONT_SEGMENT_SIZE][(i)%BITMAP_FONT_SEGMENT_SIZE])
-
-#define SEGMENT_MAJOR(n) ((n)/BITMAP_FONT_SEGMENT_SIZE)
-#define SEGMENT_MINOR(n) ((n)%BITMAP_FONT_SEGMENT_SIZE)
-#define NUM_SEGMENTS(n) \
- (((n)+BITMAP_FONT_SEGMENT_SIZE-1)/BITMAP_FONT_SEGMENT_SIZE)
-
-extern int bitmapGetGlyphs ( FontPtr pFont, unsigned long count,
- unsigned char *chars, FontEncoding charEncoding,
- unsigned long *glyphCount, CharInfoPtr *glyphs );
-extern int bitmapGetMetrics ( FontPtr pFont, unsigned long count,
- unsigned char *chars, FontEncoding charEncoding,
- unsigned long *glyphCount, xCharInfo **glyphs );
-
-extern void bitmapComputeFontBounds ( FontPtr pFont );
-extern void bitmapComputeFontInkBounds ( FontPtr pFont );
-extern Bool bitmapAddInkMetrics ( FontPtr pFont );
-extern int bitmapComputeWeight ( FontPtr pFont );
-
-extern int BitmapOpenBitmap ( FontPathElementPtr fpe, FontPtr *ppFont,
- int flags, FontEntryPtr entry, char *fileName,
- fsBitmapFormat format, fsBitmapFormatMask fmask,
- FontPtr non_cachable_font );
-extern int BitmapGetInfoBitmap ( FontPathElementPtr fpe,
- FontInfoPtr pFontInfo, FontEntryPtr entry,
- char *fileName );
-extern void BitmapRegisterFontFileFunctions ( void );
-extern int BitmapGetRenderIndex ( FontRendererPtr renderer );
-
-extern int BitmapOpenScalable ( FontPathElementPtr fpe, FontPtr *pFont,
- int flags, FontEntryPtr entry, char *fileName,
- FontScalablePtr vals, fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- FontPtr non_cachable_font );
-extern int BitmapGetInfoScalable ( FontPathElementPtr fpe,
- FontInfoPtr pFontInfo, FontEntryPtr entry,
- FontNamePtr fontName, char *fileName,
- FontScalablePtr vals );
-
-#endif /* _BITMAP_H_ */
diff --git a/nx-X11/lib/font/include/bufio.h b/nx-X11/lib/font/include/bufio.h
deleted file mode 100644
index da90064a2..000000000
--- a/nx-X11/lib/font/include/bufio.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* $Xorg: bufio.h,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1993, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/include/bufio.h,v 1.6 2001/07/31 16:44:55 alanh Exp $ */
-
-#ifndef ___BUFIO_H___
-#define ___BUFIO_H___ 1
-
-#include <X11/Xfuncproto.h>
-
-#ifdef TEST
-
-#define xalloc(s) malloc(s)
-#define xfree(s) free(s)
-
-#endif
-
-#define BUFFILESIZE 8192
-#define BUFFILEEOF -1
-
-typedef unsigned char BufChar;
-typedef struct _buffile *BufFilePtr;
-
-typedef struct _buffile {
- BufChar *bufp;
- int left;
- int eof;
- BufChar buffer[BUFFILESIZE];
- int (*input)( BufFilePtr /* f */);
- int (*output)( int /* c */, BufFilePtr /* f */);
- int (*skip)( BufFilePtr /* f */, int /* count */);
- int (*close)( BufFilePtr /* f */, int /* doClose */);
- char *private;
-} BufFileRec;
-
-extern BufFilePtr BufFileCreate (
- char*,
- int (*)(BufFilePtr),
- int (*)(int, BufFilePtr),
- int (*)(BufFilePtr, int),
- int (*)(BufFilePtr, int));
-extern BufFilePtr BufFileOpenRead ( int );
-extern BufFilePtr BufFileOpenWrite ( int );
-extern BufFilePtr BufFilePushCompressed ( BufFilePtr );
-#ifdef X_GZIP_FONT_COMPRESSION
-extern BufFilePtr BufFilePushZIP ( BufFilePtr );
-#endif
-extern int BufFileClose ( BufFilePtr, int );
-extern int BufFileFlush ( BufFilePtr, int );
-extern int BufFileRead ( BufFilePtr, char*, int );
-extern int BufFileWrite ( BufFilePtr, char*, int );
-extern void BufFileFree ( BufFilePtr );
-
-#define BufFileGet(f) ((f)->left-- ? *(f)->bufp++ : ((f)->eof = (*(f)->input) (f)))
-#define BufFilePut(c,f) (--(f)->left ? *(f)->bufp++ = ((unsigned char)(c)) : (*(f)->output) ((unsigned char)(c),f))
-#define BufFileSkip(f,c) ((f)->eof = (*(f)->skip) (f, c))
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#endif /* ___BUFIO_H___ */
-
diff --git a/nx-X11/lib/font/include/fntfil.h b/nx-X11/lib/font/include/fntfil.h
deleted file mode 100644
index 81d2cbc3d..000000000
--- a/nx-X11/lib/font/include/fntfil.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/* $Xorg: fntfil.h,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/include/fntfil.h,v 1.9 2001/12/14 19:56:54 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifndef _FONTFILE_H_
-#define _FONTFILE_H_
-
-#include <X11/fonts/fontxlfd.h>
-
-typedef struct _FontEntry *FontEntryPtr;
-typedef struct _FontTable *FontTablePtr;
-typedef struct _FontName *FontNamePtr;
-typedef struct _FontScaled *FontScaledPtr;
-typedef struct _FontScalableExtra *FontScalableExtraPtr;
-typedef struct _FontScalableEntry *FontScalableEntryPtr;
-typedef struct _FontScaleAliasEntry *FontScaleAliasEntryPtr;
-typedef struct _FontBitmapEntry *FontBitmapEntryPtr;
-typedef struct _FontAliasEntry *FontAliasEntryPtr;
-typedef struct _FontBCEntry *FontBCEntryPtr;
-typedef struct _FontDirectory *FontDirectoryPtr;
-typedef struct _FontRenderer *FontRendererPtr;
-
-#define NullFontEntry ((FontEntryPtr) 0)
-#define NullFontTable ((FontTablePtr) 0)
-#define NullFontName ((FontNamePtr) 0)
-#define NullFontScaled ((FontScaled) 0)
-#define NullFontScalableExtra ((FontScalableExtra) 0)
-#define NullFontscalableEntry ((FontScalableEntry) 0)
-#define NullFontScaleAliasEntry ((FontScaleAliasEntry) 0)
-#define NullFontBitmapEntry ((FontBitmapEntry) 0)
-#define NullFontAliasEntry ((FontAliasEntry) 0)
-#define NullFontBCEntry ((FontBCEntry) 0)
-#define NullFontDirectory ((FontDirectoryPtr) 0)
-#define NullFontRenderer ((FontRendererPtr) 0)
-
-#define FONT_ENTRY_SCALABLE 0
-#define FONT_ENTRY_SCALE_ALIAS 1
-#define FONT_ENTRY_BITMAP 2
-#define FONT_ENTRY_ALIAS 3
-#define FONT_ENTRY_BC 4
-
-#define MAXFONTNAMELEN 1024
-#define MAXFONTFILENAMELEN 1024
-
-#define FontDirFile "fonts.dir"
-#define FontAliasFile "fonts.alias"
-#define FontScalableFile "fonts.scale"
-
-extern int FontFileNameCheck ( char *name );
-extern int FontFileInitFPE ( FontPathElementPtr fpe );
-extern int FontFileResetFPE ( FontPathElementPtr fpe );
-extern int FontFileFreeFPE ( FontPathElementPtr fpe );
-extern int FontFileOpenFont ( pointer client, FontPathElementPtr fpe,
- Mask flags, char *name, int namelen,
- fsBitmapFormat format, fsBitmapFormatMask fmask,
- XID id, FontPtr *pFont, char **aliasName,
- FontPtr non_cachable_font );
-extern void FontFileCloseFont ( FontPathElementPtr fpe, FontPtr pFont );
-extern int FontFileOpenBitmap ( FontPathElementPtr fpe, FontPtr *pFont,
- int flags, FontEntryPtr entry,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask );
-extern int FontFileListFonts ( pointer client, FontPathElementPtr fpe,
- char *pat, int len, int max,
- FontNamesPtr names );
-extern int FontFileStartListFontsWithInfo ( pointer client,
- FontPathElementPtr fpe,
- char *pat, int len, int max,
- pointer *privatep );
-extern int FontFileListNextFontWithInfo ( pointer client,
- FontPathElementPtr fpe,
- char **namep, int *namelenp,
- FontInfoPtr *pFontInfo,
- int *numFonts, pointer private );
-extern int FontFileStartListFontsAndAliases ( pointer client,
- FontPathElementPtr fpe,
- char *pat, int len, int max,
- pointer *privatep );
-extern int FontFileListNextFontOrAlias ( pointer client,
- FontPathElementPtr fpe,
- char **namep, int *namelenp,
- char **resolvedp, int *resolvedlenp,
- pointer private );
-extern void FontFileRegisterLocalFpeFunctions ( void );
-
-
-extern FontEntryPtr FontFileAddEntry ( FontTablePtr table,
- FontEntryPtr prototype );
-extern Bool FontFileAddFontAlias ( FontDirectoryPtr dir, char *aliasName,
- char *fontName );
-extern Bool FontFileAddFontFile ( FontDirectoryPtr dir, char *fontName,
- char *fileName );
-extern int FontFileCountDashes ( char *name, int namelen );
-extern FontEntryPtr FontFileFindNameInDir ( FontTablePtr table,
- FontNamePtr pat );
-extern FontEntryPtr FontFileFindNameInScalableDir ( FontTablePtr table,
- FontNamePtr pat,
- FontScalablePtr vals );
-extern int FontFileFindNamesInDir ( FontTablePtr table, FontNamePtr pat,
- int max, FontNamesPtr names );
-extern int FontFileFindNamesInScalableDir ( FontTablePtr table,
- FontNamePtr pat, int max,
- FontNamesPtr names,
- FontScalablePtr vals,
- int alias_behavior, int *newmax );
-
-extern void FontFileFreeDir ( FontDirectoryPtr dir );
-extern void FontFileFreeEntry ( FontEntryPtr entry );
-extern void FontFileFreeTable ( FontTablePtr table );
-extern Bool FontFileInitTable ( FontTablePtr table, int size );
-extern FontDirectoryPtr FontFileMakeDir ( char *dirName, int size );
-extern Bool FontFileMatchName ( char *name, int length, FontNamePtr pat );
-extern char * FontFileSaveString ( char *s );
-extern void FontFileSortDir ( FontDirectoryPtr dir );
-extern void FontFileSortTable ( FontTablePtr table );
-
-extern void FontDefaultFormat ( int *bit, int *byte, int *glyph, int *scan );
-
-extern Bool FontFileRegisterRenderer ( FontRendererPtr renderer );
-extern Bool FontFilePriorityRegisterRenderer ( FontRendererPtr renderer,
- int priority );
-extern FontRendererPtr FontFileMatchRenderer ( char *fileName );
-
-extern Bool FontFileAddScaledInstance ( FontEntryPtr entry,
- FontScalablePtr vals, FontPtr pFont,
- char *bitmapName );
-extern void FontFileSwitchStringsToBitmapPointers ( FontDirectoryPtr dir );
-extern void FontFileRemoveScaledInstance ( FontEntryPtr entry, FontPtr pFont );
-extern Bool FontFileCompleteXLFD ( FontScalablePtr vals, FontScalablePtr def );
-extern FontScaledPtr FontFileFindScaledInstance ( FontEntryPtr entry,
- FontScalablePtr vals,
- int noSpecificSize );
-
-extern Bool FontFileRegisterBitmapSource ( FontPathElementPtr fpe );
-extern void FontFileUnregisterBitmapSource ( FontPathElementPtr fpe );
-extern void FontFileEmptyBitmapSource ( void );
-extern int FontFileMatchBitmapSource ( FontPathElementPtr fpe,
- FontPtr *pFont, int flags,
- FontEntryPtr entry,
- FontNamePtr zeroPat,
- FontScalablePtr vals,
- fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- Bool noSpecificSize );
-
-extern int FontFileReadDirectory ( char *directory, FontDirectoryPtr *pdir );
-extern Bool FontFileDirectoryChanged ( FontDirectoryPtr dir );
-
-#endif /* _FONTFILE_H_ */
diff --git a/nx-X11/lib/font/include/fntfilio.h b/nx-X11/lib/font/include/fntfilio.h
deleted file mode 100644
index f8e24f390..000000000
--- a/nx-X11/lib/font/include/fntfilio.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* $Xorg: fntfilio.h,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/include/fntfilio.h,v 1.6 2001/10/31 22:50:26 tsi Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifndef _FNTFILIO_H_
-#define _FNTFILIO_H_
-
-#include <X11/fonts/bufio.h>
-
-typedef BufFilePtr FontFilePtr;
-
-#define FontFileGetc(f) BufFileGet(f)
-#define FontFilePutc(c,f) BufFilePut(c,f)
-#define FontFileRead(f,b,n) BufFileRead(f,b,n)
-#define FontFileWrite(f,b,n) BufFileWrite(f,b,n)
-#define FontFileSkip(f,n) (BufFileSkip (f, n) != BUFFILEEOF)
-#define FontFileSeek(f,n) (BufFileSeek (f,n,0) != BUFFILEEOF)
-
-#define FontFileEOF BUFFILEEOF
-
-extern FontFilePtr FontFileOpen ( const char *name );
-extern int FontFileClose ( FontFilePtr f );
-extern FontFilePtr FontFileOpenWrite ( const char *name );
-extern FontFilePtr FontFileOpenWriteFd ( int fd );
-extern FontFilePtr FontFileOpenFd ( int fd );
-
-#endif /* _FNTFILIO_H_ */
diff --git a/nx-X11/lib/font/include/fntfilst.h b/nx-X11/lib/font/include/fntfilst.h
deleted file mode 100644
index 1a71eae7a..000000000
--- a/nx-X11/lib/font/include/fntfilst.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/* $Xorg: fntfilst.h,v 1.5 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/include/fntfilst.h,v 3.8 2002/12/09 17:30:00 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifndef _FONTFILEST_H_
-#define _FONTFILEST_H_
-
-#ifndef FONTMODULE
-#include <X11/Xos.h>
-#endif
-#ifndef XP_PSTEXT
-#include <X11/fonts/fontmisc.h>
-#endif
-#include <X11/fonts/fontstruct.h>
-#include <X11/fonts/fontxlfd.h>
-#include <X11/fonts/fntfil.h>
-
-typedef struct _FontName {
- char *name;
- short length;
- short ndashes;
-} FontNameRec;
-
-typedef struct _FontScaled {
- FontScalableRec vals;
- FontEntryPtr bitmap;
- FontPtr pFont;
-} FontScaledRec;
-
-typedef struct _FontScalableExtra {
- FontScalableRec defaults;
- int numScaled;
- int sizeScaled;
- FontScaledPtr scaled;
- pointer private;
-} FontScalableExtraRec;
-
-typedef struct _FontScalableEntry {
- FontRendererPtr renderer;
- char *fileName;
- FontScalableExtraPtr extra;
-} FontScalableEntryRec;
-
-/*
- * This "can't" work yet - the returned alias string must be permanent,
- * but this layer would need to generate the appropriate name from the
- * resolved scalable + the XLFD values passed in. XXX
- */
-
-typedef struct _FontScaleAliasEntry {
- char *resolved;
-} FontScaleAliasEntryRec;
-
-typedef struct _FontBitmapEntry {
- FontRendererPtr renderer;
- char *fileName;
- FontPtr pFont;
-} FontBitmapEntryRec;
-
-typedef struct _FontAliasEntry {
- char *resolved;
-} FontAliasEntryRec;
-
-typedef struct _FontBCEntry {
- FontScalableRec vals;
- FontEntryPtr entry;
-} FontBCEntryRec;
-
-typedef struct _FontEntry {
- FontNameRec name;
- int type;
- union _FontEntryParts {
- FontScalableEntryRec scalable;
- FontBitmapEntryRec bitmap;
- FontAliasEntryRec alias;
- FontBCEntryRec bc;
- } u;
-} FontEntryRec;
-
-typedef struct _FontTable {
- int used;
- int size;
- FontEntryPtr entries;
- Bool sorted;
-} FontTableRec;
-
-typedef struct _FontDirectory {
- char *directory;
- unsigned long dir_mtime;
- unsigned long alias_mtime;
- FontTableRec scalable;
- FontTableRec nonScalable;
- char *attributes;
-} FontDirectoryRec;
-
-/* Capability bits: for definition of capabilities bitmap in the
- FontRendererRec to indicate support of XLFD enhancements */
-
-#define CAP_MATRIX 0x1
-#define CAP_CHARSUBSETTING 0x2
-
-typedef struct _FontRenderer {
- char *fileSuffix;
- int fileSuffixLen;
- int (*OpenBitmap)(FontPathElementPtr /* fpe */,
- FontPtr * /* pFont */,
- int /* flags */,
- FontEntryPtr /* entry */,
- char * /* fileName */,
- fsBitmapFormat /* format */,
- fsBitmapFormatMask /* mask */,
- FontPtr /* non_cachable_font */);
- int (*OpenScalable)(FontPathElementPtr /* fpe */,
- FontPtr * /* pFont */,
- int /* flags */,
- FontEntryPtr /* entry */,
- char * /* fileName */,
- FontScalablePtr /* vals */,
- fsBitmapFormat /* format */,
- fsBitmapFormatMask /* fmask */,
- FontPtr /* non_cachable_font */);
- int (*GetInfoBitmap)(FontPathElementPtr /* fpe */,
- FontInfoPtr /* pFontInfo */,
- FontEntryPtr /* entry */,
- char * /*fileName */);
- int (*GetInfoScalable)(FontPathElementPtr /* fpe */,
- FontInfoPtr /* pFontInfo */,
- FontEntryPtr /* entry */,
- FontNamePtr /* fontName */,
- char * /* fileName */,
- FontScalablePtr /* vals */);
- int number;
- int capabilities; /* Bitmap components defined above */
-} FontRendererRec;
-
-typedef struct _FontRenders {
- int number;
- struct _FontRenderersElement {
- /* In order to preserve backward compatibility, the
- priority field is made invisible to renderers */
- FontRendererPtr renderer;
- int priority;
- } *renderers;
-} FontRenderersRec, *FontRenderersPtr;
-
-typedef struct _BitmapInstance {
- FontScalableRec vals;
- FontBitmapEntryPtr bitmap;
-} BitmapInstanceRec, *BitmapInstancePtr;
-
-typedef struct _BitmapScalablePrivate {
- int numInstances;
- BitmapInstancePtr instances;
-} BitmapScalablePrivateRec, *BitmapScalablePrivatePtr;
-
-typedef struct _BitmapSources {
- FontPathElementPtr *fpe;
- int size;
- int count;
-} BitmapSourcesRec, *BitmapSourcesPtr;
-
-extern BitmapSourcesRec FontFileBitmapSources;
-
-/* Defines for FontFileFindNamesInScalableDir() behavior */
-#define NORMAL_ALIAS_BEHAVIOR 0
-#define LIST_ALIASES_AND_TARGET_NAMES (1<<0)
-#define IGNORE_SCALABLE_ALIASES (1<<1)
-
-#endif /* _FONTFILEST_H_ */
diff --git a/nx-X11/lib/font/include/fontencc.h b/nx-X11/lib/font/include/fontencc.h
deleted file mode 100644
index 51e0e1440..000000000
--- a/nx-X11/lib/font/include/fontencc.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-Copyright (c) 1998-2001 by Juliusz Chroboczek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-/* $XFree86$ */
-
-/* Binary compatibility entry points. */
-
-/* This file includes code to make modules compiled for earlier
- versions of the fontenc interfaces link with this one. It does
- *not* provide source compatibility, as many of the data structures
- now have different names. */
-
-extern char *font_encoding_from_xlfd(const char*, int);
-extern unsigned font_encoding_recode(unsigned, FontEncPtr, FontMapPtr);
-extern FontEncPtr font_encoding_find(const char*, const char*);
-extern char *font_encoding_name(unsigned, FontEncPtr, FontMapPtr);
-extern char **identifyEncodingFile(const char *fileName);
-
diff --git a/nx-X11/lib/font/include/fontmisc.h b/nx-X11/lib/font/include/fontmisc.h
deleted file mode 100644
index b7e359068..000000000
--- a/nx-X11/lib/font/include/fontmisc.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* $Xorg: fontmisc.h,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/include/fontmisc.h,v 3.16 2001/12/14 19:56:54 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifndef _FONTMISC_H_
-#define _FONTMISC_H_
-
-#ifndef FONTMODULE
-#include <X11/Xfuncs.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#ifndef X_NOT_POSIX
-#include <unistd.h>
-#else
-extern int close();
-#endif
-
-#endif /* FONTMODULE */
-
-#include "X11/Xdefs.h"
-
-
-#ifndef LSBFirst
-#define LSBFirst 0
-#define MSBFirst 1
-#endif
-
-#ifndef None
-#define None 0l
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#define FALSE 0
-#endif
-
-extern Atom MakeAtom ( char *string, unsigned len, int makeit );
-extern int ValidAtom ( Atom atom );
-extern char *NameForAtom (Atom atom);
-
-#ifndef _HAVE_XALLOC_DECLS
-#define _HAVE_XALLOC_DECLS
-extern pointer Xalloc(unsigned long);
-extern pointer Xrealloc(pointer, unsigned long);
-extern void Xfree(pointer);
-extern pointer Xcalloc(unsigned long);
-#endif
-extern int f_strcasecmp(const char *s1, const char *s2);
-
-#ifndef xalloc
-#define xalloc(n) Xalloc ((unsigned) n)
-#define xfree(p) Xfree ((pointer) p)
-#define xrealloc(p,n) Xrealloc ((pointer)p,n)
-#define xcalloc(n,s) Xcalloc((unsigned) n * (unsigned) s)
-#endif
-#define lowbit(x) ((x) & (~(x) + 1))
-
-#undef assert
-#define assert(x) ((void)0)
-
-#ifndef strcasecmp
-#if defined(NEED_STRCASECMP) && !defined(FONTMODULE)
-#define strcasecmp(s1,s2) f_strcasecmp(s1,s2)
-#endif
-#endif
-
-extern void
-BitOrderInvert(
- register unsigned char *,
- register int
-);
-
-extern void
-TwoByteSwap(
- register unsigned char *,
- register int
-);
-
-extern void
-FourByteSwap(
- register unsigned char *,
- register int
-);
-
-extern int
-RepadBitmap (
- char*,
- char*,
- unsigned,
- unsigned,
- int,
- int
-);
-
-extern void CopyISOLatin1Lowered(
- char * /*dest*/,
- char * /*source*/,
- int /*length*/
-);
-
-extern void register_fpe_functions(void);
-
-#endif /* _FONTMISC_H_ */
diff --git a/nx-X11/lib/font/include/fontmod.h b/nx-X11/lib/font/include/fontmod.h
deleted file mode 100644
index 42d277fd4..000000000
--- a/nx-X11/lib/font/include/fontmod.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* $XFree86: xc/lib/font/include/fontmod.h,v 1.2 1998/07/25 06:57:09 dawes Exp $ */
-
-#ifndef _FONTMOD_H_
-#define _FONTMOD_H_
-
-typedef void (*InitFont)(void);
-
-typedef struct {
- InitFont initFunc;
- char * name;
- pointer module;
-} FontModule;
-
-extern FontModule *FontModuleList;
-
-#endif /* _FONTMOD_H_ */
diff --git a/nx-X11/lib/font/include/fontshow.h b/nx-X11/lib/font/include/fontshow.h
deleted file mode 100644
index 5bb48fe18..000000000
--- a/nx-X11/lib/font/include/fontshow.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* $Xorg: fontshow.h,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#define FONT_SHOW_INFO (1<<0)
-#define FONT_SHOW_PROPS (1<<1)
-#define FONT_SHOW_METRICS (1<<2)
-#define FONT_SHOW_GLYPHS (1<<3)
-#define FONT_SHOW_ALL (FONT_SHOW_INFO|FONT_SHOW_PROPS|FONT_SHOW_GLYPHS)
diff --git a/nx-X11/lib/font/include/fontutil.h b/nx-X11/lib/font/include/fontutil.h
deleted file mode 100644
index 9a73eaa47..000000000
--- a/nx-X11/lib/font/include/fontutil.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* $XFree86: xc/lib/font/include/fontutil.h,v 1.1 1999/03/14 11:17:49 dawes Exp $ */
-
-#ifndef _FONTUTIL_H_
-#define _FONTUTIL_H_
-
-#include <X11/fonts/FSproto.h>
-
-extern int FontCouldBeTerminal(FontInfoPtr);
-extern int CheckFSFormat(fsBitmapFormat, fsBitmapFormatMask, int *, int *,
- int *, int *, int *);
-extern void FontComputeInfoAccelerators(FontInfoPtr);
-
-extern void GetGlyphs ( FontPtr font, unsigned long count,
- unsigned char *chars, FontEncoding fontEncoding,
- unsigned long *glyphcount, CharInfoPtr *glyphs );
-extern void QueryGlyphExtents ( FontPtr pFont, CharInfoPtr *charinfo,
- unsigned long count, ExtentInfoRec *info );
-extern Bool QueryTextExtents ( FontPtr pFont, unsigned long count,
- unsigned char *chars, ExtentInfoRec *info );
-extern Bool ParseGlyphCachingMode ( char *str );
-extern void InitGlyphCaching ( void );
-extern void SetGlyphCachingMode ( int newmode );
-extern int add_range ( fsRange *newrange, int *nranges, fsRange **range,
- Bool charset_subset );
-
-#endif /* _FONTUTIL_H_ */
diff --git a/nx-X11/lib/font/include/fontxlfd.h b/nx-X11/lib/font/include/fontxlfd.h
deleted file mode 100644
index e87b93143..000000000
--- a/nx-X11/lib/font/include/fontxlfd.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* $Xorg: fontxlfd.h,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1990, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/include/fontxlfd.h,v 1.5 2001/01/17 19:43:32 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifndef _FONTXLFD_H_
-#define _FONTXLFD_H_
-
-#include <X11/fonts/FSproto.h>
-
-/* Constants for values_supplied bitmap */
-
-#define SIZE_SPECIFY_MASK 0xf
-
-#define PIXELSIZE_MASK 0x3
-#define PIXELSIZE_UNDEFINED 0
-#define PIXELSIZE_SCALAR 0x1
-#define PIXELSIZE_ARRAY 0x2
-#define PIXELSIZE_SCALAR_NORMALIZED 0x3 /* Adjusted for resolution */
-
-#define POINTSIZE_MASK 0xc
-#define POINTSIZE_UNDEFINED 0
-#define POINTSIZE_SCALAR 0x4
-#define POINTSIZE_ARRAY 0x8
-
-#define PIXELSIZE_WILDCARD 0x10
-#define POINTSIZE_WILDCARD 0x20
-
-#define ENHANCEMENT_SPECIFY_MASK 0x40
-
-#define CHARSUBSET_SPECIFIED 0x40
-
-#define EPS 1.0e-20
-#define XLFD_NDIGITS 3 /* Round numbers in pixel and
- point arrays to this many
- digits for repeatability */
-
-typedef struct _FontScalable {
- int values_supplied; /* Bitmap identifying what advanced
- capabilities or enhancements
- were specified in the font name */
- double pixel_matrix[4];
- double point_matrix[4];
-
- /* Pixel and point fields are deprecated in favor of the
- transformation matrices. They are provided and filled in for the
- benefit of rasterizers that do not handle the matrices. */
-
- int pixel,
- point;
-
- int x,
- y,
- width;
- char *xlfdName;
- int nranges;
- fsRange *ranges;
-} FontScalableRec, *FontScalablePtr;
-
-
-extern double xlfd_round_double ( double x );
-extern Bool FontParseXLFDName ( char *fname, FontScalablePtr vals, int subst );
-extern fsRange *FontParseRanges ( char *name, int *nranges );
-
-#define FONT_XLFD_REPLACE_NONE 0
-#define FONT_XLFD_REPLACE_STAR 1
-#define FONT_XLFD_REPLACE_ZERO 2
-#define FONT_XLFD_REPLACE_VALUE 3
-
-#endif /* _FONTXLFD_H_ */
diff --git a/nx-X11/lib/font/stubs/Imakefile b/nx-X11/lib/font/stubs/Imakefile
deleted file mode 100644
index 555bbf614..000000000
--- a/nx-X11/lib/font/stubs/Imakefile
+++ /dev/null
@@ -1,25 +0,0 @@
-XCOMM $XFree86: xc/lib/font/stubs/Imakefile,v 1.3 1999/12/15 01:14:35 robin Exp $
-
-#include <Server.tmpl>
-
-INCLUDES = -I$(FONTINCSRC) -I../include -I$(XINCLUDESRC)
-SRCS = cauthgen.c csignal.c delfntcid.c errorf.c fatalerror.c \
- findoldfnt.c getcres.c getdefptsize.c getnewfntcid.c gettime.c \
- initfshdl.c regfpefunc.c rmfshdl.c servclient.c setfntauth.c \
- stfntcfnt.c xpstubs.c
-OBJS = cauthgen.o csignal.o delfntcid.o errorf.o fatalerror.o \
- findoldfnt.o getcres.o getdefptsize.o getnewfntcid.o gettime.o \
- initfshdl.o regfpefunc.o rmfshdl.o servclient.o setfntauth.o \
- stfntcfnt.o xpstubs.o
-
-#undef _LinkBuildLibrary
-#define _LinkBuildLibrary(lib) LinkBuildLibrary(lib)
-
-NormalLibraryObjectRule()
-NormalLibraryTarget(fntstubs,$(OBJS))
-LintLibraryTarget(fntstubs,$(SRCS))
-InstallLibrary(fntstubs,$(USRLIBDIR))
-NormalLintTarget($(SRCS))
-DependTarget()
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/cauthgen.c b/nx-X11/lib/font/stubs/cauthgen.c
deleted file mode 100644
index dec438d08..000000000
--- a/nx-X11/lib/font/stubs/cauthgen.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* $XFree86$ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-int
-client_auth_generation(ClientPtr client)
-{
- return 0;
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/csignal.c b/nx-X11/lib/font/stubs/csignal.c
deleted file mode 100644
index c957eb837..000000000
--- a/nx-X11/lib/font/stubs/csignal.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* $XFree86$ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-Bool
-ClientSignal(ClientPtr client)
-{
- return True;
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/delfntcid.c b/nx-X11/lib/font/stubs/delfntcid.c
deleted file mode 100644
index af5c0a881..000000000
--- a/nx-X11/lib/font/stubs/delfntcid.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* $XFree86$ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-void
-DeleteFontClientID(Font id)
-{
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/errorf.c b/nx-X11/lib/font/stubs/errorf.c
deleted file mode 100644
index 52c6042a6..000000000
--- a/nx-X11/lib/font/stubs/errorf.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* $XFree86: xc/lib/font/stubs/errorf.c,v 1.1 1999/01/11 05:13:19 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-void
-ErrorF(const char *f, ...)
-{
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/fatalerror.c b/nx-X11/lib/font/stubs/fatalerror.c
deleted file mode 100644
index 7dff1704d..000000000
--- a/nx-X11/lib/font/stubs/fatalerror.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* $XFree86: xc/lib/font/stubs/fatalerror.c,v 1.1 1999/01/11 05:13:19 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-void
-FatalError(const char *f, ...)
-{
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/findoldfnt.c b/nx-X11/lib/font/stubs/findoldfnt.c
deleted file mode 100644
index 218ecd479..000000000
--- a/nx-X11/lib/font/stubs/findoldfnt.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* $XFree86$ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-FontPtr
-find_old_font(FSID id)
-{
- return (FontPtr)NULL;
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/getcres.c b/nx-X11/lib/font/stubs/getcres.c
deleted file mode 100644
index da0de9174..000000000
--- a/nx-X11/lib/font/stubs/getcres.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* $XFree86$ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-FontResolutionPtr
-GetClientResolutions(int *num)
-{
- return (FontResolutionPtr) 0;
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/getdefptsize.c b/nx-X11/lib/font/stubs/getdefptsize.c
deleted file mode 100644
index 10a46c86e..000000000
--- a/nx-X11/lib/font/stubs/getdefptsize.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* $XFree86$ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-int
-GetDefaultPointSize(void)
-{
- return 0;
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/getnewfntcid.c b/nx-X11/lib/font/stubs/getnewfntcid.c
deleted file mode 100644
index 5a1e9270a..000000000
--- a/nx-X11/lib/font/stubs/getnewfntcid.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* $XFree86$ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-Font
-GetNewFontClientID(void)
-{
- return (Font)0;
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/gettime.c b/nx-X11/lib/font/stubs/gettime.c
deleted file mode 100644
index 60a4e3951..000000000
--- a/nx-X11/lib/font/stubs/gettime.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* $XFree86$ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-unsigned long
-GetTimeInMillis (void)
-{
- return 0;
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/initfshdl.c b/nx-X11/lib/font/stubs/initfshdl.c
deleted file mode 100644
index 15a337a29..000000000
--- a/nx-X11/lib/font/stubs/initfshdl.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* $XFree86: xc/lib/font/stubs/initfshdl.c,v 1.1 1999/01/11 05:13:20 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-int
-init_fs_handlers(FontPathElementPtr fpe,
- BlockHandlerProcPtr block_handler)
-{
- return Successful;
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/regfpefunc.c b/nx-X11/lib/font/stubs/regfpefunc.c
deleted file mode 100644
index d6fcf3be3..000000000
--- a/nx-X11/lib/font/stubs/regfpefunc.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* $XFree86: xc/lib/font/stubs/regfpefunc.c,v 1.1 1999/01/11 05:13:20 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-int
-RegisterFPEFunctions(NameCheckFunc name_func,
- InitFpeFunc init_func,
- FreeFpeFunc free_func,
- ResetFpeFunc reset_func,
- OpenFontFunc open_func,
- CloseFontFunc close_func,
- ListFontsFunc list_func,
- StartLfwiFunc start_lfwi_func,
- NextLfwiFunc next_lfwi_func,
- WakeupFpeFunc wakeup_func,
- ClientDiedFunc client_died,
- LoadGlyphsFunc load_glyphs,
- StartLaFunc start_list_alias_func,
- NextLaFunc next_list_alias_func,
- SetPathFunc set_path_func)
-{
- return 0;
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/rmfshdl.c b/nx-X11/lib/font/stubs/rmfshdl.c
deleted file mode 100644
index ae0ab7863..000000000
--- a/nx-X11/lib/font/stubs/rmfshdl.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* $XFree86: xc/lib/font/stubs/rmfshdl.c,v 1.1 1999/01/11 05:13:21 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-void
-remove_fs_handlers(FontPathElementPtr fpe,
- BlockHandlerProcPtr blockHandler,
- Bool all)
-{
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/servclient.c b/nx-X11/lib/font/stubs/servclient.c
deleted file mode 100644
index 25c853f87..000000000
--- a/nx-X11/lib/font/stubs/servclient.c
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $XFree86$ */
-
-void *serverClient = 0;
diff --git a/nx-X11/lib/font/stubs/setfntauth.c b/nx-X11/lib/font/stubs/setfntauth.c
deleted file mode 100644
index 843f155e5..000000000
--- a/nx-X11/lib/font/stubs/setfntauth.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* $XFree86$ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-int
-set_font_authorizations(char **authorizations, int *authlen, ClientPtr client)
-{
- return 0;
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/stfntcfnt.c b/nx-X11/lib/font/stubs/stfntcfnt.c
deleted file mode 100644
index c062677f6..000000000
--- a/nx-X11/lib/font/stubs/stfntcfnt.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* $XFree86$ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-int
-StoreFontClientFont(FontPtr pfont, Font id)
-{
- return 0;
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/stubs.h b/nx-X11/lib/font/stubs/stubs.h
deleted file mode 100644
index d687a77e3..000000000
--- a/nx-X11/lib/font/stubs/stubs.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* $XFree86: xc/lib/font/stubs/stubs.h,v 1.3 1999/12/15 01:14:36 robin Exp $ */
-
-/* This directory includes dummy entry for bdftopcf and mkfontdir */
-
-#include <stdio.h>
-#include <X11/fonts/fntfilst.h>
-#include <X11/fonts/font.h>
-
-
-#ifndef True
-#define True (-1)
-#endif
-#ifndef False
-#define False (0)
-#endif
-
-extern FontPtr find_old_font ( FSID id );
-extern int set_font_authorizations ( char **authorizations,
- int *authlen,
- ClientPtr client );
-
-extern unsigned long GetTimeInMillis (void);
-
-extern void ErrorF(const char *format, ...);
-extern void FatalError(const char *format, ...);
-
-/* end of file */
diff --git a/nx-X11/lib/font/stubs/xpstubs.c b/nx-X11/lib/font/stubs/xpstubs.c
deleted file mode 100644
index 444915367..000000000
--- a/nx-X11/lib/font/stubs/xpstubs.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* $XFree86$ */
-
-/*
- stub for XpClient* functions.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "stubs.h"
-
-Bool
-XpClientIsBitmapClient(ClientPtr client)
-{
- return True;
-}
-
-Bool
-XpClientIsPrintClient(ClientPtr client, FontPathElementPtr fpe)
-{
- return False;
-}
-
-/* end of file */
diff --git a/nx-X11/lib/font/util/Imakefile b/nx-X11/lib/font/util/Imakefile
deleted file mode 100644
index 6c318ba7f..000000000
--- a/nx-X11/lib/font/util/Imakefile
+++ /dev/null
@@ -1,43 +0,0 @@
-XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:46:39 cpqbld Exp $
-
-
-
-
-XCOMM $XFree86: xc/lib/font/util/Imakefile,v 1.6 2000/12/07 16:40:30 dawes Exp $
-
-#include <Server.tmpl>
-
- INCLUDES = -I$(FONTINCSRC) -I../include
- HEADERS =
-#ifdef FontFormatDefines
- FORMAT_DEFS = FontFormatDefines
-#endif
-
-#if defined(SunArchitecture) && (OSMajorVersion == 5) && (OSMinorVersion <= 6)
- /* Work around a problem with __ctype being a "relocation against
- allocatable but non-writable section" on Solaris 2.6. Hopefully
- it doesn't break anything. */
- SYS_DEFINES = -D__XPG4_CHAR_CLASS__
-#endif
-
-
- DEFINES = StrcasecmpDefines $(SYS_DEFINES) $(INTERNALDEFINES)
-
- SRCS = utilbitmap.c fontnames.c fontutil.c fontxlfd.c format.c \
- fontaccel.c atom.c miscutil.c private.c patcache.c
-
- OBJS = utilbitmap.o fontnames.o fontutil.o fontxlfd.o format.o \
- fontaccel.o atom.o miscutil.o private.o patcache.o
-
-#define DoNormalLib NormalLibFont
-#define DoSharedLib SharedLibFont
-#define DoDebugLib DebugLibFont
-#define DoProfileLib ProfileLibFont
-#include <Library.tmpl>
-LibraryObjectRule()
-
-SubdirLibraryRule($(OBJS))
-NormalLintTarget($(SRCS))
-
-DependTarget()
-
diff --git a/nx-X11/lib/font/util/atom.c b/nx-X11/lib/font/util/atom.c
deleted file mode 100644
index 942ea0d46..000000000
--- a/nx-X11/lib/font/util/atom.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/* $Xorg: atom.c,v 1.5 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1990, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/util/atom.c,v 1.9 2002/09/19 13:22:00 tsi Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-/* lame atom replacement routines for font applications */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fontmisc.h>
-
-typedef struct _AtomList {
- char *name;
- int len;
- int hash;
- Atom atom;
-} AtomListRec, *AtomListPtr;
-
-static AtomListPtr *hashTable;
-
-static int hashSize, hashUsed;
-static int hashMask;
-static int rehash;
-
-static AtomListPtr *reverseMap;
-static int reverseMapSize;
-static Atom lastAtom;
-
-static int
-Hash(char *string, int len)
-{
- int h;
-
- h = 0;
- while (len--)
- h = (h << 3) ^ *string++;
- if (h < 0)
- return -h;
- return h;
-}
-
-static int
-ResizeHashTable (void)
-{
- int newHashSize;
- int newHashMask;
- AtomListPtr *newHashTable;
- int i;
- int h;
- int newRehash;
- int r;
-
- if (hashSize == 0)
- newHashSize = 1024;
- else
- newHashSize = hashSize * 2;
- newHashTable = (AtomListPtr *) xalloc (newHashSize * sizeof (AtomListPtr));
- if (!newHashTable) {
- fprintf(stderr, "ResizeHashTable(): Error: Couldn't allocate"
- " newHashTable (%ld)\n",
- newHashSize * (unsigned long)sizeof (AtomListPtr));
- return FALSE;
- }
- bzero ((char *) newHashTable, newHashSize * sizeof (AtomListPtr));
- newHashMask = newHashSize - 1;
- newRehash = (newHashMask - 2);
- for (i = 0; i < hashSize; i++)
- {
- if (hashTable[i])
- {
- h = (hashTable[i]->hash) & newHashMask;
- if (newHashTable[h])
- {
- r = hashTable[i]->hash % newRehash | 1;
- do {
- h += r;
- if (h >= newHashSize)
- h -= newHashSize;
- } while (newHashTable[h]);
- }
- newHashTable[h] = hashTable[i];
- }
- }
- xfree (hashTable);
- hashTable = newHashTable;
- hashSize = newHashSize;
- hashMask = newHashMask;
- rehash = newRehash;
- return TRUE;
-}
-
-static int
-ResizeReverseMap (void)
-{
- int ret = TRUE;
- if (reverseMapSize == 0)
- reverseMapSize = 1000;
- else
- reverseMapSize *= 2;
- reverseMap = (AtomListPtr *) xrealloc (reverseMap, reverseMapSize * sizeof (AtomListPtr));
- if (!reverseMap) {
- fprintf(stderr, "ResizeReverseMap(): Error: Couldn't reallocate"
- " reverseMap (%ld)\n",
- reverseMapSize * (unsigned long)sizeof(AtomListPtr));
- ret = FALSE;
- }
- return ret;
-}
-
-static int
-NameEqual (const char *a, const char *b, int l)
-{
- while (l--)
- if (*a++ != *b++)
- return FALSE;
- return TRUE;
-}
-
-Atom
-MakeAtom(char *string, unsigned len, int makeit)
-{
- AtomListPtr a;
- int hash;
- int h = 0;
- int r;
-
- hash = Hash (string, len);
- if (hashTable)
- {
- h = hash & hashMask;
- if (hashTable[h])
- {
- if (hashTable[h]->hash == hash && hashTable[h]->len == len &&
- NameEqual (hashTable[h]->name, string, len))
- {
- return hashTable[h]->atom;
- }
- r = (hash % rehash) | 1;
- for (;;)
- {
- h += r;
- if (h >= hashSize)
- h -= hashSize;
- if (!hashTable[h])
- break;
- if (hashTable[h]->hash == hash && hashTable[h]->len == len &&
- NameEqual (hashTable[h]->name, string, len))
- {
- return hashTable[h]->atom;
- }
- }
- }
- }
- if (!makeit)
- return None;
- a = (AtomListPtr) xalloc (sizeof (AtomListRec) + len + 1);
- if (a == NULL) {
- fprintf(stderr, "MakeAtom(): Error: Couldn't allocate AtomListRec"
- " (%ld)\n", (unsigned long)sizeof (AtomListRec) + len + 1);
- return None;
- }
- a->name = (char *) (a + 1);
- a->len = len;
- strncpy (a->name, string, len);
- a->name[len] = '\0';
- a->atom = ++lastAtom;
- a->hash = hash;
- if (hashUsed >= hashSize / 2)
- {
- ResizeHashTable ();
- h = hash & hashMask;
- if (hashTable[h])
- {
- r = (hash % rehash) | 1;
- do {
- h += r;
- if (h >= hashSize)
- h -= hashSize;
- } while (hashTable[h]);
- }
- }
- hashTable[h] = a;
- hashUsed++;
- if (reverseMapSize <= a->atom) {
- if (!ResizeReverseMap())
- return None;
- }
- reverseMap[a->atom] = a;
- return a->atom;
-}
-
-int
-ValidAtom(Atom atom)
-{
- return (atom != None) && (atom <= lastAtom);
-}
-
-char *
-NameForAtom(Atom atom)
-{
- if (atom != None && atom <= lastAtom)
- return reverseMap[atom]->name;
- return NULL;
-}
diff --git a/nx-X11/lib/font/util/fontaccel.c b/nx-X11/lib/font/util/fontaccel.c
deleted file mode 100644
index c37f69a39..000000000
--- a/nx-X11/lib/font/util/fontaccel.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* $Xorg: fontaccel.c,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/util/fontaccel.c,v 1.6 2001/01/17 19:43:33 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/fontstruct.h>
-#include <X11/fonts/fontutil.h>
-
-void
-FontComputeInfoAccelerators(FontInfoPtr pFontInfo)
-{
- pFontInfo->noOverlap = FALSE;
- if (pFontInfo->maxOverlap <= pFontInfo->minbounds.leftSideBearing)
- pFontInfo->noOverlap = TRUE;
-
- if ((pFontInfo->minbounds.ascent == pFontInfo->maxbounds.ascent) &&
- (pFontInfo->minbounds.descent == pFontInfo->maxbounds.descent) &&
- (pFontInfo->minbounds.leftSideBearing ==
- pFontInfo->maxbounds.leftSideBearing) &&
- (pFontInfo->minbounds.rightSideBearing ==
- pFontInfo->maxbounds.rightSideBearing) &&
- (pFontInfo->minbounds.characterWidth ==
- pFontInfo->maxbounds.characterWidth) &&
- (pFontInfo->minbounds.attributes == pFontInfo->maxbounds.attributes)) {
- pFontInfo->constantMetrics = TRUE;
- if ((pFontInfo->maxbounds.leftSideBearing == 0) &&
- (pFontInfo->maxbounds.rightSideBearing ==
- pFontInfo->maxbounds.characterWidth) &&
- (pFontInfo->maxbounds.ascent == pFontInfo->fontAscent) &&
- (pFontInfo->maxbounds.descent == pFontInfo->fontDescent))
- pFontInfo->terminalFont = TRUE;
- else
- pFontInfo->terminalFont = FALSE;
- } else {
- pFontInfo->constantMetrics = FALSE;
- pFontInfo->terminalFont = FALSE;
- }
- if (pFontInfo->minbounds.characterWidth == pFontInfo->maxbounds.characterWidth)
- pFontInfo->constantWidth = TRUE;
- else
- pFontInfo->constantWidth = FALSE;
-
- if ((pFontInfo->minbounds.leftSideBearing >= 0) &&
- (pFontInfo->maxOverlap <= 0) &&
- (pFontInfo->minbounds.ascent >= -pFontInfo->fontDescent) &&
- (pFontInfo->maxbounds.ascent <= pFontInfo->fontAscent) &&
- (-pFontInfo->minbounds.descent <= pFontInfo->fontAscent) &&
- (pFontInfo->maxbounds.descent <= pFontInfo->fontDescent))
- pFontInfo->inkInside = TRUE;
- else
- pFontInfo->inkInside = FALSE;
-}
-
-int
-FontCouldBeTerminal(FontInfoPtr pFontInfo)
-{
- if ((pFontInfo->minbounds.leftSideBearing >= 0) &&
- (pFontInfo->maxbounds.rightSideBearing <= pFontInfo->maxbounds.characterWidth) &&
- (pFontInfo->minbounds.characterWidth == pFontInfo->maxbounds.characterWidth) &&
- (pFontInfo->maxbounds.ascent <= pFontInfo->fontAscent) &&
- (pFontInfo->maxbounds.descent <= pFontInfo->fontDescent) &&
- (pFontInfo->maxbounds.leftSideBearing != 0 ||
- pFontInfo->minbounds.rightSideBearing != pFontInfo->minbounds.characterWidth ||
- pFontInfo->minbounds.ascent != pFontInfo->fontAscent ||
- pFontInfo->minbounds.descent != pFontInfo->fontDescent)) {
- /* blow off font with nothing but a SPACE */
- if (pFontInfo->maxbounds.ascent == 0 &&
- pFontInfo->maxbounds.descent == 0)
- return FALSE;
- return TRUE;
- }
- return FALSE;
-}
diff --git a/nx-X11/lib/font/util/fontnames.c b/nx-X11/lib/font/util/fontnames.c
deleted file mode 100644
index 2d3a51752..000000000
--- a/nx-X11/lib/font/util/fontnames.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* $Xorg: fontnames.c,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/util/fontnames.c,v 1.4 2001/01/17 19:43:33 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- *
- * @(#)fontnames.c 3.1 91/04/10
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/fontstruct.h>
-
-void
-FreeFontNames(FontNamesPtr pFN)
-{
- int i;
-
- if (!pFN)
- return;
- for (i = 0; i < pFN->nnames; i++) {
- xfree(pFN->names[i]);
- }
- xfree(pFN->names);
- xfree(pFN->length);
- xfree(pFN);
-}
-
-FontNamesPtr
-MakeFontNamesRecord(unsigned int size)
-{
- FontNamesPtr pFN;
-
- pFN = (FontNamesPtr) xalloc(sizeof(FontNamesRec));
- if (pFN) {
- pFN->nnames = 0;
- pFN->size = size;
- if (size)
- {
- pFN->length = (int *) xalloc(size * sizeof(int));
- pFN->names = (char **) xalloc(size * sizeof(char *));
- if (!pFN->length || !pFN->names) {
- xfree(pFN->length);
- xfree(pFN->names);
- xfree(pFN);
- pFN = (FontNamesPtr) 0;
- }
- }
- else
- {
- pFN->length = 0;
- pFN->names = 0;
- }
- }
- return pFN;
-}
-
-int
-AddFontNamesName(FontNamesPtr names, char *name, int length)
-{
- int index = names->nnames;
- char *nelt;
-
- nelt = (char *) xalloc(length + 1);
- if (!nelt)
- return AllocError;
- if (index >= names->size) {
- int size = names->size << 1;
- int *nlength;
- char **nnames;
-
- if (size == 0)
- size = 8;
- nlength = (int *) xrealloc(names->length, size * sizeof(int));
- nnames = (char **) xrealloc(names->names, size * sizeof(char *));
- if (nlength && nnames) {
- names->size = size;
- names->length = nlength;
- names->names = nnames;
- } else {
- xfree(nelt);
- xfree(nlength);
- xfree(nnames);
- return AllocError;
- }
- }
- names->length[index] = length;
- names->names[index] = nelt;
- strncpy(nelt, name, length);
- nelt[length] = '\0';
- names->nnames++;
- return Successful;
-}
diff --git a/nx-X11/lib/font/util/fontutil.c b/nx-X11/lib/font/util/fontutil.c
deleted file mode 100644
index 05fe5c2f2..000000000
--- a/nx-X11/lib/font/util/fontutil.c
+++ /dev/null
@@ -1,443 +0,0 @@
-/* $Xorg: fontutil.c,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/util/fontutil.c,v 3.6 2001/10/28 03:32:46 tsi Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/fontstruct.h>
-#include <X11/fonts/FSproto.h>
-#include <X11/fonts/fontutil.h>
-
-/* Define global here... doesn't hurt the servers, and avoids
- unresolved references in font clients. */
-
-static int defaultGlyphCachingMode = DEFAULT_GLYPH_CACHING_MODE;
-int glyphCachingMode = DEFAULT_GLYPH_CACHING_MODE;
-
-void
-GetGlyphs(FontPtr font,
- unsigned long count,
- unsigned char *chars,
- FontEncoding fontEncoding,
- unsigned long *glyphcount, /* RETURN */
- CharInfoPtr *glyphs) /* RETURN */
-{
- (*font->get_glyphs) (font, count, chars, fontEncoding, glyphcount, glyphs);
-}
-
-#define MIN(a,b) ((a)<(b)?(a):(b))
-#define MAX(a,b) ((a)>(b)?(a):(b))
-
-void
-QueryGlyphExtents(FontPtr pFont,
- CharInfoPtr *charinfo,
- unsigned long count,
- ExtentInfoRec *info)
-{
- register unsigned long i;
- xCharInfo *pCI;
-
- info->drawDirection = pFont->info.drawDirection;
-
- info->fontAscent = pFont->info.fontAscent;
- info->fontDescent = pFont->info.fontDescent;
-
- if (count != 0) {
-
- pCI = &((*charinfo)->metrics); charinfo++;
- /* ignore nonexisting characters when calculating text extents */
- if ( !((pCI->characterWidth == 0)
- && (pCI->rightSideBearing == 0)
- && (pCI->leftSideBearing == 0)
- && (pCI->ascent == 0)
- && (pCI->descent == 0)) ) {
- info->overallAscent = pCI->ascent;
- info->overallDescent = pCI->descent;
- info->overallLeft = pCI->leftSideBearing;
- info->overallRight = pCI->rightSideBearing;
- info->overallWidth = pCI->characterWidth;
- }
-
- if (pFont->info.constantMetrics && pFont->info.noOverlap) {
- info->overallWidth *= count;
- info->overallRight += (info->overallWidth -
- pCI->characterWidth);
- } else {
- for (i = 1; i < count; i++) {
- pCI = &((*charinfo)->metrics); charinfo++;
- /* ignore nonexisting characters when calculating extents */
- if ( !((pCI->characterWidth == 0)
- && (pCI->rightSideBearing == 0)
- && (pCI->leftSideBearing == 0)
- && (pCI->ascent == 0)
- && (pCI->descent == 0)) ) {
- info->overallAscent = MAX(
- info->overallAscent,
- pCI->ascent);
- info->overallDescent = MAX(
- info->overallDescent,
- pCI->descent);
- info->overallLeft = MIN(
- info->overallLeft,
- info->overallWidth + pCI->leftSideBearing);
- info->overallRight = MAX(
- info->overallRight,
- info->overallWidth + pCI->rightSideBearing);
- /*
- * yes, this order is correct; overallWidth IS incremented
- * last
- */
- info->overallWidth += pCI->characterWidth;
- }
- }
- }
- } else {
- info->overallAscent = 0;
- info->overallDescent = 0;
- info->overallWidth = 0;
- info->overallLeft = 0;
- info->overallRight = 0;
- }
-}
-
-Bool
-QueryTextExtents(FontPtr pFont,
- unsigned long count,
- unsigned char *chars,
- ExtentInfoRec *info)
-{
- xCharInfo **charinfo;
- unsigned long n;
- FontEncoding encoding;
- int cm;
- int i;
- unsigned long t;
- xCharInfo *defaultChar = 0;
- unsigned char defc[2];
- int firstReal;
-
- charinfo = (xCharInfo **) xalloc(count * sizeof(xCharInfo *));
- if (!charinfo)
- return FALSE;
- encoding = TwoD16Bit;
- if (pFont->info.lastRow == 0)
- encoding = Linear16Bit;
- (*pFont->get_metrics) (pFont, count, chars, encoding, &n, charinfo);
-
- /* Do default character substitution as get_metrics doesn't */
-
-#define IsNonExistentChar(ci) (!(ci) || \
- ((ci)->ascent == 0 && \
- (ci)->descent == 0 && \
- (ci)->leftSideBearing == 0 && \
- (ci)->rightSideBearing == 0 && \
- (ci)->characterWidth == 0))
-
- firstReal = n;
- defc[0] = pFont->info.defaultCh >> 8;
- defc[1] = pFont->info.defaultCh;
- (*pFont->get_metrics) (pFont, 1, defc, encoding, &t, &defaultChar);
- if ((IsNonExistentChar (defaultChar)))
- defaultChar = 0;
- for (i = 0; i < n; i++)
- {
- if ((IsNonExistentChar (charinfo[i])))
- {
- if (!defaultChar)
- continue;
- charinfo[i] = defaultChar;
- }
- if (firstReal == n)
- firstReal = i;
- }
- cm = pFont->info.constantMetrics;
- pFont->info.constantMetrics = FALSE;
- QueryGlyphExtents(pFont, (CharInfoPtr*) charinfo + firstReal,
- n - firstReal, info);
- pFont->info.constantMetrics = cm;
- xfree(charinfo);
- return TRUE;
-}
-
-Bool
-ParseGlyphCachingMode(char *str)
-{
- if (!strcmp(str, "none")) defaultGlyphCachingMode = CACHING_OFF;
- else if (!strcmp(str, "all")) defaultGlyphCachingMode = CACHE_ALL_GLYPHS;
- else if (!strcmp(str, "16")) defaultGlyphCachingMode = CACHE_16_BIT_GLYPHS;
- else return FALSE;
- return TRUE;
-}
-
-void
-InitGlyphCaching(void)
-{
- /* Set glyphCachingMode to the mode the server hopes to
- support. DDX drivers that do not support the requested level
- of glyph caching can call SetGlyphCachingMode to lower the
- level of support.
- */
-
- glyphCachingMode = defaultGlyphCachingMode;
-}
-
-/* ddxen can call SetGlyphCachingMode to inform us of what level of glyph
- * caching they can support.
- */
-void
-SetGlyphCachingMode(int newmode)
-{
- if ( (glyphCachingMode > newmode) && (newmode >= 0) )
- glyphCachingMode = newmode;
-}
-
-#define range_alloc_granularity 16
-#define mincharp(p) ((p)->min_char_low + ((p)->min_char_high << 8))
-#define maxcharp(p) ((p)->max_char_low + ((p)->max_char_high << 8))
-
-/* add_range(): Add range to a list of ranges, with coalescence */
-int
-add_range(fsRange *newrange,
- int *nranges,
- fsRange **range,
- Bool charset_subset)
-{
- int first, last, middle;
- unsigned long keymin, keymax;
- unsigned long ptrmin = 0, ptrmax = 0;
- fsRange *ptr = NULL, *ptr1, *ptr2, *endptr;
-
- /* There are two different ways to treat ranges:
-
- 1) Charset subsetting (support of the HP XLFD enhancements), in
- which a range of 0x1234,0x3456 means all numbers between
- 0x1234 and 0x3456, and in which min and max might be swapped.
-
- 2) Row/column ranges, in which a range of 0x1234,0x3456 means the
- ranges 0x1234-0x1256, 0x1334-0x1356, ... , 0x3434-0x3456.
- This is for support of glyph caching.
-
- The choice of treatment is selected with the "charset_subset"
- flag */
-
- /* If newrange covers multiple rows; break up the rows */
- if (!charset_subset && newrange->min_char_high != newrange->max_char_high)
- {
- int i, err = 0;
- fsRange temprange;
- for (i = newrange->min_char_high;
- i <= newrange->max_char_high;
- i++)
- {
- temprange.min_char_low = newrange->min_char_low;
- temprange.max_char_low = newrange->max_char_low;
- temprange.min_char_high = temprange.max_char_high = i;
- err = add_range(&temprange, nranges, range, charset_subset);
- if (err != Successful) break;
- }
- return err;
- }
-
- keymin = mincharp(newrange);
- keymax = maxcharp(newrange);
-
- if (charset_subset && keymin > keymax)
- {
- unsigned long temp = keymin;
- keymin = keymax;
- keymax = temp;
- }
-
- /* add_range() maintains a sorted list; this makes possible coalescence
- and binary searches */
-
- /* Binary search for a range with which the new range can merge */
-
- first = middle = 0;
- last = *nranges - 1;
- while (last >= first)
- {
- middle = (first + last) / 2;
- ptr = (*range) + middle;
- ptrmin = mincharp(ptr);
- ptrmax = maxcharp(ptr);
-
- if (ptrmin > 0 && keymax < ptrmin - 1) last = middle - 1;
- else if (keymin > ptrmax + 1) first = middle + 1;
- else if (!charset_subset)
- {
- /* We might have a range with which to merge... IF the
- result doesn't cross rows */
- if (newrange->min_char_high != ptr->min_char_high)
- last = first - 1; /* Force adding a new range */
- break;
- }
- else break; /* We have at least one range with which we can merge */
- }
-
- if (last < first)
- {
- /* Search failed; we need to add a new range to the list. */
-
- /* Grow the list if necessary */
- if (*nranges == 0 || *range == (fsRange *)0)
- {
- *range = (fsRange *)xalloc(range_alloc_granularity *
- SIZEOF(fsRange));
- *nranges = 0;
- }
- else if (!(*nranges % range_alloc_granularity))
- {
- *range = (fsRange *)xrealloc((char *)*range,
- (*nranges + range_alloc_granularity) *
- SIZEOF(fsRange));
- }
-
- /* If alloc failed, just return a null list */
- if (*range == (fsRange *)0)
- {
- *nranges = 0;
- return AllocError;
- }
-
- /* Should new entry go *at* or *after* ptr? */
- ptr = (*range) + middle;
- if (middle < *nranges && keymin > ptrmin) ptr++; /* after */
-
- /* Open up a space for our new range */
- memmove((char *)(ptr + 1),
- (char *)ptr,
- (char *)(*range + *nranges) - (char *)ptr);
-
- /* Insert the new range */
- ptr->min_char_low = keymin & 0xff;
- ptr->min_char_high = keymin >> 8;
- ptr->max_char_low = keymax & 0xff;
- ptr->max_char_high = keymax >> 8;
-
- /* Update range count */
- (*nranges)++;
-
- /* Done */
- return Successful;
- }
-
- /* Join our new range to that pointed to by "ptr" */
- if (keymin < ptrmin)
- {
- ptr->min_char_low = keymin & 0xff;
- ptr->min_char_high = keymin >> 8;
- }
- if (keymax > ptrmax)
- {
- ptr->max_char_low = keymax & 0xff;
- ptr->max_char_high = keymax >> 8;
- }
-
- ptrmin = mincharp(ptr);
- ptrmax = maxcharp(ptr);
-
- endptr = *range + *nranges;
-
- for (ptr1 = ptr; ptr1 >= *range; ptr1--)
- {
- if (ptrmin <= maxcharp(ptr1) + 1)
- {
- if (!charset_subset && ptr->min_char_high != ptr1->min_char_high)
- break;
- if (ptrmin >= mincharp(ptr1))
- ptrmin = mincharp(ptr1);
- }
- else break;
- }
- for (ptr2 = ptr; ptr2 < endptr; ptr2++)
- {
- if ((ptr2->min_char_low == 0 && ptr2->min_char_high == 0) ||
- ptrmax >= mincharp(ptr2) - 1)
- {
- if (!charset_subset && ptr->min_char_high != ptr2->min_char_high)
- break;
- if (ptrmax <= maxcharp(ptr2))
- ptrmax = maxcharp(ptr2);
- }
- else break;
- }
-
- /* We need to coalesce ranges between ptr1 and ptr2 exclusive */
- ptr1++;
- ptr2--;
- if (ptr1 != ptr2)
- {
- memmove(ptr1, ptr2, (char *)endptr - (char *)ptr2);
- *nranges -= (ptr2 - ptr1);
- }
-
- /* Write the new range into the range list */
- ptr1->min_char_low = ptrmin & 0xff;
- ptr1->min_char_high = ptrmin >> 8;
- ptr1->max_char_low = ptrmax & 0xff;
- ptr1->max_char_high = ptrmax >> 8;
-
- return Successful;
-}
-
-/* It is difficult to find a good place for this. */
-#ifdef NEED_STRCASECMP
-int
-f_strcasecmp(const char *s1, const char *s2)
-{
- char c1, c2;
-
- if (*s1 == 0)
- if (*s2 == 0)
- return 0;
- else
- return 1;
-
- c1 = (isupper (*s1) ? tolower (*s1) : *s1);
- c2 = (isupper (*s2) ? tolower (*s2) : *s2);
- while (c1 == c2) {
- if (c1 == '\0')
- return 0;
- s1++;
- s2++;
- c1 = (isupper (*s1) ? tolower (*s1) : *s1);
- c2 = (isupper (*s2) ? tolower (*s2) : *s2);
- }
- return c1 - c2;
-}
-#endif
-
diff --git a/nx-X11/lib/font/util/fontxlfd.c b/nx-X11/lib/font/util/fontxlfd.c
deleted file mode 100644
index 7adf74f4c..000000000
--- a/nx-X11/lib/font/util/fontxlfd.c
+++ /dev/null
@@ -1,637 +0,0 @@
-/* $Xorg: fontxlfd.c,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/util/fontxlfd.c,v 3.16tsi Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/fontstruct.h>
-#include <X11/fonts/fontxlfd.h>
-#include <X11/fonts/fontutil.h>
-#include <X11/Xos.h>
-#include <math.h>
-#include <stdlib.h>
-#if defined(sony) && !defined(SYSTYPE_SYSV) && !defined(_SYSTYPE_SYSV)
-#define NO_LOCALE
-#endif
-#ifndef NO_LOCALE
-#include <locale.h>
-#endif
-#include <ctype.h>
-#include <stdio.h> /* for sprintf() */
-
-static char *
-GetInt(char *ptr, int *val)
-{
- if (*ptr == '*') {
- *val = -1;
- ptr++;
- } else
- for (*val = 0; *ptr >= '0' && *ptr <= '9';)
- *val = *val * 10 + *ptr++ - '0';
- if (*ptr == '-')
- return ptr;
- return (char *) 0;
-}
-
-#define minchar(p) ((p).min_char_low + ((p).min_char_high << 8))
-#define maxchar(p) ((p).max_char_low + ((p).max_char_high << 8))
-
-
-#ifndef NO_LOCALE
-static struct lconv *locale = 0;
-#endif
-static char *radix = ".", *plus = "+", *minus = "-";
-
-static char *
-readreal(char *ptr, double *result)
-{
- char buffer[80], *p1, *p2;
-
-#ifndef NO_LOCALE
- /* Figure out what symbols apply in this locale */
-
- if (!locale)
- {
- locale = localeconv();
- if (locale->decimal_point && *locale->decimal_point)
- radix = locale->decimal_point;
- if (locale->positive_sign && *locale->positive_sign)
- plus = locale->positive_sign;
- if (locale->negative_sign && *locale->negative_sign)
- minus = locale->negative_sign;
- }
-#endif
- /* Copy the first 80 chars of ptr into our local buffer, changing
- symbols as needed. */
- for (p1 = ptr, p2 = buffer;
- *p1 && (p2 - buffer) < sizeof(buffer) - 1;
- p1++, p2++)
- {
- switch(*p1)
- {
- case '~': *p2 = *minus; break;
- case '+': *p2 = *plus; break;
- case '.': *p2 = *radix; break;
- default: *p2 = *p1;
- }
- }
- *p2 = 0;
-
- /* Now we have something that strtod() can interpret... do it. */
- *result = strtod(buffer, &p1);
- /* Return NULL if failure, pointer past number if success */
- return (p1 == buffer) ? (char *)0 : (ptr + (p1 - buffer));
-}
-
-static char *
-xlfd_double_to_text(double value, char *buffer, int space_required)
-{
- char formatbuf[40];
- register char *p1;
- int ndigits, exponent;
-
-#ifndef NO_LOCALE
- if (!locale)
- {
- locale = localeconv();
- if (locale->decimal_point && *locale->decimal_point)
- radix = locale->decimal_point;
- if (locale->positive_sign && *locale->positive_sign)
- plus = locale->positive_sign;
- if (locale->negative_sign && *locale->negative_sign)
- minus = locale->negative_sign;
- }
-#endif
- /* Compute a format to use to render the number */
- sprintf(formatbuf, "%%.%dle", XLFD_NDIGITS);
-
- if (space_required)
- *buffer++ = ' ';
-
- /* Render the number using printf's idea of formatting */
- sprintf(buffer, formatbuf, value);
-
- /* Find and read the exponent value */
- for (p1 = buffer + strlen(buffer);
- *p1-- != 'e' && p1[1] != 'E';);
- exponent = atoi(p1 + 2);
- if (value == 0.0) exponent = 0;
-
- /* Figure out how many digits are significant */
- while (p1 >= buffer && (!isdigit(*p1) || *p1 == '0')) p1--;
- ndigits = 0;
- while (p1 >= buffer) if (isdigit(*p1--)) ndigits++;
-
- /* Figure out notation to use */
- if (exponent >= XLFD_NDIGITS || ndigits - exponent > XLFD_NDIGITS + 1)
- {
- /* Scientific */
- sprintf(formatbuf, "%%.%dle", ndigits - 1);
- sprintf(buffer, formatbuf, value);
- }
- else
- {
- /* Fixed */
- ndigits -= exponent + 1;
- if (ndigits < 0) ndigits = 0;
- sprintf(formatbuf, "%%.%dlf", ndigits);
- sprintf(buffer, formatbuf, value);
- if (exponent < 0)
- {
- p1 = buffer;
- while (*p1 && *p1 != '0') p1++;
- while (*p1++) p1[-1] = *p1;
- }
- }
-
- /* Last step, convert the locale-specific sign and radix characters
- to our own. */
- for (p1 = buffer; *p1; p1++)
- {
- if (*p1 == *minus) *p1 = '~';
- else if (*p1 == *plus) *p1 = '+';
- else if (*p1 == *radix) *p1 = '.';
- }
-
- return buffer - space_required;
-}
-
-double
-xlfd_round_double(double x)
-{
- /* Utility for XLFD users to round numbers to XLFD_NDIGITS
- significant digits. How do you round to n significant digits on
- a binary machine? */
-
-#if defined(i386) || defined(__i386__) || \
- defined(ia64) || defined(__ia64__) || \
- defined(__alpha__) || defined(__alpha) || \
- defined(__hppa__) || \
- defined(__amd64__) || defined(__amd64) || \
- defined(sgi)
-#if !defined(__UNIXOS2__)
-#include <float.h>
-
-/* if we have IEEE 754 fp, we can round to binary digits... */
-
-#if (FLT_RADIX == 2) && (DBL_DIG == 15) && (DBL_MANT_DIG == 53)
-
-#ifndef M_LN2
-#define M_LN2 0.69314718055994530942
-#endif
-#ifndef M_LN10
-#define M_LN10 2.30258509299404568402
-#endif
-
-/* convert # of decimal digits to # of binary digits */
-#define XLFD_NDIGITS_2 ((int)(XLFD_NDIGITS * M_LN10 / M_LN2 + 0.5))
-
- union conv_d {
- double d;
- unsigned char b[8];
- } d;
- int i,j,k,d_exp;
-
- if (x == 0)
- return x;
-
- /* do minor sanity check for IEEE 754 fp and correct byte order */
- d.d = 1.0;
- if (sizeof(double) == 8 && d.b[7] == 0x3f && d.b[6] == 0xf0) {
-
- /*
- * this code will round IEEE 754 double to XLFD_NDIGITS_2 binary digits
- */
-
- d.d = x;
- d_exp = (d.b[7] << 4) | (d.b[6] >> 4);
-
- i = (DBL_MANT_DIG-XLFD_NDIGITS_2) >> 3;
- j = 1 << ((DBL_MANT_DIG-XLFD_NDIGITS_2) & 0x07);
- for (; i<7; i++) {
- k = d.b[i] + j;
- d.b[i] = k;
- if (k & 0x100) j = 1;
- else break;
- }
- if ((i==7) && ((d.b[6] & 0xf0) != ((d_exp<<4) & 0xf0))) {
- /* mantissa overflow: increment exponent */
- d_exp = (d_exp & 0x800 ) | ((d_exp & 0x7ff) + 1);
- d.b[7] = d_exp >> 4;
- d.b[6] = (d.b[6] & 0x0f) | (d_exp << 4);
- }
-
- i = (DBL_MANT_DIG-XLFD_NDIGITS_2) >> 3;
- j = 1 << ((DBL_MANT_DIG-XLFD_NDIGITS_2) & 0x07);
- d.b[i] &= ~(j-1);
- for (;--i>=0;) d.b[i] = 0;
-
- return d.d;
- }
- else
-#endif
-#endif /* !__UNIXOS2__ */
-#endif /* i386 || __i386__ */
- {
- /*
- * If not IEEE 754: Let printf() do it for you.
- */
-
- char formatbuf[40], buffer[40];
-
- sprintf(formatbuf, "%%.%dlg", XLFD_NDIGITS);
- sprintf(buffer, formatbuf, x);
- return atof(buffer);
- }
-}
-
-static char *
-GetMatrix(char *ptr, FontScalablePtr vals, int which)
-{
- double *matrix;
-
- if (which == PIXELSIZE_MASK)
- matrix = vals->pixel_matrix;
- else if (which == POINTSIZE_MASK)
- matrix = vals->point_matrix;
- else return (char *)0;
-
- while (isspace(*ptr)) ptr++;
- if (*ptr == '[')
- {
- /* This is a matrix containing real numbers. It would be nice
- to use strtod() or sscanf() to read the numbers, but those
- don't handle '~' for minus and we cannot force them to use a
- "." for the radix. We'll have to do the hard work ourselves
- (in readreal()). */
-
- if ((ptr = readreal(++ptr, matrix + 0)) &&
- (ptr = readreal(ptr, matrix + 1)) &&
- (ptr = readreal(ptr, matrix + 2)) &&
- (ptr = readreal(ptr, matrix + 3)))
- {
- while (isspace(*ptr)) ptr++;
- if (*ptr != ']')
- ptr = (char *)0;
- else
- {
- ptr++;
- while (isspace(*ptr)) ptr++;
- if (*ptr == '-')
- {
- if (which == POINTSIZE_MASK)
- vals->values_supplied |= POINTSIZE_ARRAY;
- else
- vals->values_supplied |= PIXELSIZE_ARRAY;
- }
- else ptr = (char *)0;
- }
- }
- }
- else
- {
- int value;
- if ((ptr = GetInt(ptr, &value)))
- {
- vals->values_supplied &= ~which;
- if (value > 0)
- {
- matrix[3] = (double)value;
- if (which == POINTSIZE_MASK)
- {
- matrix[3] /= 10.0;
- vals->values_supplied |= POINTSIZE_SCALAR;
- }
- else
- vals->values_supplied |= PIXELSIZE_SCALAR;
- /* If we're concocting the pixelsize array from a scalar,
- we will need to normalize element 0 for the pixel shape.
- This is done in FontFileCompleteXLFD(). */
- matrix[0] = matrix[3];
- matrix[1] = matrix[2] = 0.0;
- }
- else if (value < 0)
- {
- if (which == POINTSIZE_MASK)
- vals->values_supplied |= POINTSIZE_WILDCARD;
- else
- vals->values_supplied |= PIXELSIZE_WILDCARD;
- }
- }
- }
- return ptr;
-}
-
-
-static void
-append_ranges(char *fname, int nranges, fsRange *ranges)
-{
- if (nranges)
- {
- int i;
-
- strcat(fname, "[");
- for (i = 0; i < nranges && strlen(fname) < 1010; i++)
- {
- if (i) strcat(fname, " ");
- sprintf(fname + strlen(fname), "%d",
- minchar(ranges[i]));
- if (ranges[i].min_char_low ==
- ranges[i].max_char_low &&
- ranges[i].min_char_high ==
- ranges[i].max_char_high) continue;
- sprintf(fname + strlen(fname), "_%d",
- maxchar(ranges[i]));
- }
- strcat(fname, "]");
- }
-}
-
-Bool
-FontParseXLFDName(char *fname, FontScalablePtr vals, int subst)
-{
- register char *ptr;
- register char *ptr1,
- *ptr2,
- *ptr3,
- *ptr4;
- register char *ptr5;
- FontScalableRec tmpvals;
- char replaceChar = '0';
- char tmpBuf[1024];
- int spacingLen;
- int l;
- char *p;
-
- bzero(&tmpvals, sizeof(tmpvals));
- if (subst != FONT_XLFD_REPLACE_VALUE)
- *vals = tmpvals;
-
- if (!(*(ptr = fname) == '-' || (*ptr++ == '*' && *ptr == '-')) || /* fndry */
- !(ptr = strchr(ptr + 1, '-')) || /* family_name */
- !(ptr1 = ptr = strchr(ptr + 1, '-')) || /* weight_name */
- !(ptr = strchr(ptr + 1, '-')) || /* slant */
- !(ptr = strchr(ptr + 1, '-')) || /* setwidth_name */
- !(ptr = strchr(ptr + 1, '-')) || /* add_style_name */
- !(ptr = strchr(ptr + 1, '-')) || /* pixel_size */
- !(ptr = GetMatrix(ptr + 1, &tmpvals, PIXELSIZE_MASK)) ||
- !(ptr2 = ptr = GetMatrix(ptr + 1, &tmpvals, POINTSIZE_MASK)) ||
- !(ptr = GetInt(ptr + 1, &tmpvals.x)) || /* resolution_x */
- !(ptr3 = ptr = GetInt(ptr + 1, &tmpvals.y)) || /* resolution_y */
- !(ptr4 = ptr = strchr(ptr + 1, '-')) || /* spacing */
- !(ptr5 = ptr = GetInt(ptr + 1, &tmpvals.width)) || /* average_width */
- !(ptr = strchr(ptr + 1, '-')) || /* charset_registry */
- strchr(ptr + 1, '-'))/* charset_encoding */
- return FALSE;
-
- /* Lop off HP charset subsetting enhancement. Interpreting this
- field requires allocating some space in which to return the
- results. So, to prevent memory leaks, this procedure will simply
- lop off and ignore charset subsetting, and initialize the
- relevant vals fields to zero. It's up to the caller to make its
- own call to FontParseRanges() if it's interested in the charset
- subsetting. */
-
- if (subst != FONT_XLFD_REPLACE_NONE &&
- (p = strchr(strrchr(fname, '-'), '[')))
- {
- tmpvals.values_supplied |= CHARSUBSET_SPECIFIED;
- *p = '\0';
- }
-
- /* Fill in deprecated fields for the benefit of rasterizers that care
- about them. */
- tmpvals.pixel = (tmpvals.pixel_matrix[3] >= 0) ?
- (int)(tmpvals.pixel_matrix[3] + .5) :
- (int)(tmpvals.pixel_matrix[3] - .5);
- tmpvals.point = (tmpvals.point_matrix[3] >= 0) ?
- (int)(tmpvals.point_matrix[3] * 10 + .5) :
- (int)(tmpvals.point_matrix[3] * 10 - .5);
-
- spacingLen = ptr4 - ptr3 + 1;
-
- switch (subst) {
- case FONT_XLFD_REPLACE_NONE:
- *vals = tmpvals;
- break;
- case FONT_XLFD_REPLACE_STAR:
- replaceChar = '*';
- case FONT_XLFD_REPLACE_ZERO:
- strcpy(tmpBuf, ptr2);
- ptr5 = tmpBuf + (ptr5 - ptr2);
- ptr3 = tmpBuf + (ptr3 - ptr2);
- ptr2 = tmpBuf;
- ptr = ptr1 + 1;
-
- ptr = strchr(ptr, '-') + 1; /* skip weight */
- ptr = strchr(ptr, '-') + 1; /* skip slant */
- ptr = strchr(ptr, '-') + 1; /* skip setwidth_name */
- ptr = strchr(ptr, '-') + 1; /* skip add_style_name */
-
- if ((ptr - fname) + spacingLen + strlen(ptr5) + 10 >= (unsigned)1024)
- return FALSE;
- *ptr++ = replaceChar;
- *ptr++ = '-';
- *ptr++ = replaceChar;
- *ptr++ = '-';
- *ptr++ = '*';
- *ptr++ = '-';
- *ptr++ = '*';
- if (spacingLen > 2)
- {
- memmove(ptr, ptr3, spacingLen);
- ptr += spacingLen;
- }
- else
- {
- *ptr++ = '-';
- *ptr++ = '*';
- *ptr++ = '-';
- }
- *ptr++ = replaceChar;
- strcpy(ptr, ptr5);
- *vals = tmpvals;
- break;
- case FONT_XLFD_REPLACE_VALUE:
- if (vals->values_supplied & PIXELSIZE_MASK)
- {
- tmpvals.values_supplied =
- (tmpvals.values_supplied & ~PIXELSIZE_MASK) |
- (vals->values_supplied & PIXELSIZE_MASK);
- tmpvals.pixel_matrix[0] = vals->pixel_matrix[0];
- tmpvals.pixel_matrix[1] = vals->pixel_matrix[1];
- tmpvals.pixel_matrix[2] = vals->pixel_matrix[2];
- tmpvals.pixel_matrix[3] = vals->pixel_matrix[3];
- }
- if (vals->values_supplied & POINTSIZE_MASK)
- {
- tmpvals.values_supplied =
- (tmpvals.values_supplied & ~POINTSIZE_MASK) |
- (vals->values_supplied & POINTSIZE_MASK);
- tmpvals.point_matrix[0] = vals->point_matrix[0];
- tmpvals.point_matrix[1] = vals->point_matrix[1];
- tmpvals.point_matrix[2] = vals->point_matrix[2];
- tmpvals.point_matrix[3] = vals->point_matrix[3];
- }
- if (vals->x >= 0)
- tmpvals.x = vals->x;
- if (vals->y >= 0)
- tmpvals.y = vals->y;
- if (vals->width >= 0)
- tmpvals.width = vals->width;
- else if (vals->width < -1) /* overload: -1 means wildcard */
- tmpvals.width = -vals->width;
-
-
- p = ptr1 + 1; /* weight field */
- l = strchr(p, '-') - p;
- sprintf(tmpBuf, "%*.*s", l, l, p);
-
- p += l + 1; /* slant field */
- l = strchr(p, '-') - p;
- sprintf(tmpBuf + strlen(tmpBuf), "-%*.*s", l, l, p);
-
- p += l + 1; /* setwidth_name */
- l = strchr(p, '-') - p;
- sprintf(tmpBuf + strlen(tmpBuf), "-%*.*s", l, l, p);
-
- p += l + 1; /* add_style_name field */
- l = strchr(p, '-') - p;
- sprintf(tmpBuf + strlen(tmpBuf), "-%*.*s", l, l, p);
-
- strcat(tmpBuf, "-");
- if ((tmpvals.values_supplied & PIXELSIZE_MASK) == PIXELSIZE_ARRAY)
- {
- char buffer[80];
- strcat(tmpBuf, "[");
- strcat(tmpBuf, xlfd_double_to_text(tmpvals.pixel_matrix[0],
- buffer, 0));
- strcat(tmpBuf, xlfd_double_to_text(tmpvals.pixel_matrix[1],
- buffer, 1));
- strcat(tmpBuf, xlfd_double_to_text(tmpvals.pixel_matrix[2],
- buffer, 1));
- strcat(tmpBuf, xlfd_double_to_text(tmpvals.pixel_matrix[3],
- buffer, 1));
- strcat(tmpBuf, "]");
- }
- else
- {
- sprintf(tmpBuf + strlen(tmpBuf), "%d",
- (int)(tmpvals.pixel_matrix[3] + .5));
- }
- strcat(tmpBuf, "-");
- if ((tmpvals.values_supplied & POINTSIZE_MASK) == POINTSIZE_ARRAY)
- {
- char buffer[80];
- strcat(tmpBuf, "[");
- strcat(tmpBuf, xlfd_double_to_text(tmpvals.point_matrix[0],
- buffer, 0));
- strcat(tmpBuf, xlfd_double_to_text(tmpvals.point_matrix[1],
- buffer, 1));
- strcat(tmpBuf, xlfd_double_to_text(tmpvals.point_matrix[2],
- buffer, 1));
- strcat(tmpBuf, xlfd_double_to_text(tmpvals.point_matrix[3],
- buffer, 1));
- strcat(tmpBuf, "]");
- }
- else
- {
- sprintf(tmpBuf + strlen(tmpBuf), "%d",
- (int)(tmpvals.point_matrix[3] * 10.0 + .5));
- }
- sprintf(tmpBuf + strlen(tmpBuf), "-%d-%d%*.*s%d%s",
- tmpvals.x, tmpvals.y,
- spacingLen, spacingLen, ptr3, tmpvals.width, ptr5);
- strcpy(ptr1 + 1, tmpBuf);
- if ((vals->values_supplied & CHARSUBSET_SPECIFIED) && !vals->nranges)
- strcat(fname, "[]");
- else
- append_ranges(fname, vals->nranges, vals->ranges);
- break;
- }
- return TRUE;
-}
-
-fsRange *FontParseRanges(char *name, int *nranges)
-{
- int n;
- unsigned long l;
- char *p1, *p2;
- fsRange *result = (fsRange *)0;
-
- name = strchr(name, '-');
- for (n = 1; name && n < 14; n++)
- name = strchr(name + 1, '-');
-
- *nranges = 0;
- if (!name || !(p1 = strchr(name, '['))) return (fsRange *)0;
- p1++;
-
- while (*p1 && *p1 != ']')
- {
- fsRange thisrange;
-
- l = strtol(p1, &p2, 0);
- if (p2 == p1 || l > 0xffff) break;
- thisrange.max_char_low = thisrange.min_char_low = l & 0xff;
- thisrange.max_char_high = thisrange.min_char_high = l >> 8;
-
- p1 = p2;
- if (*p1 == ']' || *p1 == ' ')
- {
- while (*p1 == ' ') p1++;
- if (add_range(&thisrange, nranges, &result, TRUE) != Successful)
- break;
- }
- else if (*p1 == '_')
- {
- l = strtol(++p1, &p2, 0);
- if (p2 == p1 || l > 0xffff) break;
- thisrange.max_char_low = l & 0xff;
- thisrange.max_char_high = l >> 8;
- p1 = p2;
- if (*p1 == ']' || *p1 == ' ')
- {
- while (*p1 == ' ') p1++;
- if (add_range(&thisrange, nranges, &result, TRUE) != Successful)
- break;
- }
- }
- else break;
- }
-
- return result;
-}
diff --git a/nx-X11/lib/font/util/format.c b/nx-X11/lib/font/util/format.c
deleted file mode 100644
index 6700721f9..000000000
--- a/nx-X11/lib/font/util/format.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/* $Xorg: format.c,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-/*
- * Copyright 1990, 1991 Network Computing Devices;
- * Portions Copyright 1987 by Digital Equipment Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the names of Network Computing Devices or Digital
- * not be used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission. Network Computing
- * Devices and Digital make no representations about the suitability of
- * this software for any purpose. It is provided "as is" without express
- * or implied warranty.
- *
- * NETWORK COMPUTING DEVICES AND DIGITAL DISCLAIM ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES OR DIGITAL BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/util/format.c,v 1.4 2001/01/17 19:43:33 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/FSproto.h>
-#include <X11/fonts/font.h>
-#include <X11/fonts/fontstruct.h>
-#include <X11/fonts/fontutil.h>
-
-int
-CheckFSFormat(fsBitmapFormat format,
- fsBitmapFormatMask fmask,
- int *bit_order,
- int *byte_order,
- int *scan,
- int *glyph,
- int *image)
-{
- /* convert format to what the low levels want */
- if (fmask & BitmapFormatMaskBit) {
- *bit_order = format & BitmapFormatBitOrderMask;
- *bit_order = (*bit_order == BitmapFormatBitOrderMSB)
- ? MSBFirst : LSBFirst;
- }
- if (fmask & BitmapFormatMaskByte) {
- *byte_order = format & BitmapFormatByteOrderMask;
- *byte_order = (*byte_order == BitmapFormatByteOrderMSB)
- ? MSBFirst : LSBFirst;
- }
- if (fmask & BitmapFormatMaskScanLineUnit) {
- *scan = format & BitmapFormatScanlineUnitMask;
- /* convert byte paddings into byte counts */
- switch (*scan) {
- case BitmapFormatScanlineUnit8:
- *scan = 1;
- break;
- case BitmapFormatScanlineUnit16:
- *scan = 2;
- break;
- case BitmapFormatScanlineUnit32:
- *scan = 4;
- break;
- default:
- return BadFontFormat;
- }
- }
- if (fmask & BitmapFormatMaskScanLinePad) {
- *glyph = format & BitmapFormatScanlinePadMask;
- /* convert byte paddings into byte counts */
- switch (*glyph) {
- case BitmapFormatScanlinePad8:
- *glyph = 1;
- break;
- case BitmapFormatScanlinePad16:
- *glyph = 2;
- break;
- case BitmapFormatScanlinePad32:
- *glyph = 4;
- break;
- default:
- return BadFontFormat;
- }
- }
- if (fmask & BitmapFormatMaskImageRectangle) {
- *image = format & BitmapFormatImageRectMask;
-
- if (*image != BitmapFormatImageRectMin &&
- *image != BitmapFormatImageRectMaxWidth &&
- *image != BitmapFormatImageRectMax)
- return BadFontFormat;
- }
- return Successful;
-}
diff --git a/nx-X11/lib/font/util/miscutil.c b/nx-X11/lib/font/util/miscutil.c
deleted file mode 100644
index 03b4d061d..000000000
--- a/nx-X11/lib/font/util/miscutil.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* $Xorg: miscutil.c,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/util/miscutil.c,v 1.7 2001/07/25 15:04:57 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/Xosdefs.h>
-#include <stdlib.h>
-#include <X11/fonts/fontmisc.h>
-
-#define XK_LATIN1
-#include <X11/keysymdef.h>
-/* #include <X11/Xmu/CharSet.h> */
-
-/* make sure everything initializes themselves at least once */
-
-long serverGeneration = 1;
-
-void *
-Xalloc (unsigned long m)
-{
- return malloc (m);
-}
-
-void *
-Xrealloc (void *n, unsigned long m)
-{
- if (!n)
- return malloc (m);
- else
- return realloc (n, m);
-}
-
-void
-Xfree (void *n)
-{
- if (n)
- free (n);
-}
-
-void *
-Xcalloc (unsigned long n)
-{
- return calloc (n, 1);
-}
-
-void
-CopyISOLatin1Lowered (char *dst, char *src, int len)
-{
- register unsigned char *dest, *source;
-
- for (dest = (unsigned char *)dst, source = (unsigned char *)src;
- *source && len > 0;
- source++, dest++, len--)
- {
- if ((*source >= XK_A) && (*source <= XK_Z))
- *dest = *source + (XK_a - XK_A);
- else if ((*source >= XK_Agrave) && (*source <= XK_Odiaeresis))
- *dest = *source + (XK_agrave - XK_Agrave);
- else if ((*source >= XK_Ooblique) && (*source <= XK_Thorn))
- *dest = *source + (XK_oslash - XK_Ooblique);
- else
- *dest = *source;
- }
- *dest = '\0';
-}
-
-void
-register_fpe_functions ()
-{
-}
diff --git a/nx-X11/lib/font/util/patcache.c b/nx-X11/lib/font/util/patcache.c
deleted file mode 100644
index 0351b1ac2..000000000
--- a/nx-X11/lib/font/util/patcache.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/* $Xorg: patcache.c,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/util/patcache.c,v 3.4 2001/01/17 19:43:33 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/fontstruct.h>
-
-/*
- * Static sized hash table for looking up font name patterns
- *
- * LRU entries, reusing old entries
- */
-
-#define NBUCKETS 16
-#define NENTRIES 64
-
-#define UNSET (NENTRIES+1)
-
-typedef unsigned char EntryPtr;
-
-typedef struct _FontPatternCacheEntry {
- struct _FontPatternCacheEntry *next, **prev;
- short patlen;
- char *pattern;
- int hash;
- FontPtr pFont; /* associated font */
-} FontPatternCacheEntryRec, *FontPatternCacheEntryPtr;
-
-typedef struct _FontPatternCache {
- FontPatternCacheEntryPtr buckets[NBUCKETS];
- FontPatternCacheEntryRec entries[NENTRIES];
- FontPatternCacheEntryPtr free;
-} FontPatternCacheRec;
-
-/* Empty cache (for rehash) */
-void
-EmptyFontPatternCache (FontPatternCachePtr cache)
-{
- int i;
-
- for (i = 0; i < NBUCKETS; i++)
- cache->buckets[i] = 0;
- for (i = 0; i < NENTRIES; i++)
- {
- cache->entries[i].next = &cache->entries[i+1];
- cache->entries[i].prev = 0;
- cache->entries[i].pFont = 0;
- xfree (cache->entries[i].pattern);
- cache->entries[i].pattern = 0;
- cache->entries[i].patlen = 0;
- }
- cache->free = &cache->entries[0];
- cache->entries[NENTRIES - 1].next = 0;
-}
-
-/* Create and initialize cache */
-FontPatternCachePtr
-MakeFontPatternCache (void)
-{
- FontPatternCachePtr cache;
- int i;
- cache = (FontPatternCachePtr) xalloc (sizeof *cache);
- if (!cache)
- return 0;
- for (i = 0; i < NENTRIES; i++) {
- cache->entries[i].patlen = 0;
- cache->entries[i].pattern = 0;
- cache->entries[i].pFont = 0;
- }
- EmptyFontPatternCache (cache);
- return cache;
-}
-
-/* toss cache */
-void
-FreeFontPatternCache (FontPatternCachePtr cache)
-{
- int i;
-
- for (i = 0; i < NENTRIES; i++)
- xfree (cache->entries[i].pattern);
- xfree (cache);
-}
-
-/* compute id for string */
-static int
-Hash (const char *string, int len)
-{
- int hash;
-
- hash = 0;
- while (len--)
- hash = (hash << 1) ^ *string++;
- if (hash < 0)
- hash = -hash;
- return hash;
-}
-
-/* add entry */
-void
-CacheFontPattern (FontPatternCachePtr cache,
- char *pattern,
- int patlen,
- FontPtr pFont)
-{
- FontPatternCacheEntryPtr e;
- char *newpat;
- int i;
-
- newpat = (char *) xalloc (patlen);
- if (!newpat)
- return;
- if (cache->free)
- {
- e = cache->free;
- cache->free = e->next;
- }
- else
- {
- i = rand ();
- if (i < 0)
- i = -i;
- i %= NENTRIES;
- e = &cache->entries[i];
- if (e->next)
- e->next->prev = e->prev;
- *e->prev = e->next;
- xfree (e->pattern);
- }
- /* set pattern */
- memcpy (newpat, pattern, patlen);
- e->pattern = newpat;
- e->patlen = patlen;
- /* link to new hash chain */
- e->hash = Hash (pattern, patlen);
- i = e->hash % NBUCKETS;
- e->next = cache->buckets[i];
- if (e->next)
- e->next->prev = &(e->next);
- cache->buckets[i] = e;
- e->prev = &(cache->buckets[i]);
- e->pFont = pFont;
-}
-
-/* find matching entry */
-FontPtr
-FindCachedFontPattern (FontPatternCachePtr cache,
- char *pattern,
- int patlen)
-{
- int hash;
- int i;
- FontPatternCacheEntryPtr e;
-
- hash = Hash (pattern, patlen);
- i = hash % NBUCKETS;
- for (e = cache->buckets[i]; e; e = e->next)
- {
- if (e->patlen == patlen && e->hash == hash &&
- !memcmp (e->pattern, pattern, patlen))
- {
- return e->pFont;
- }
- }
- return 0;
-}
-
-void
-RemoveCachedFontPattern (FontPatternCachePtr cache,
- FontPtr pFont)
-{
- FontPatternCacheEntryPtr e;
- int i;
-
- for (i = 0; i < NENTRIES; i++)
- {
- if ((e = &cache->entries[i])->pFont == pFont)
- {
- e->pFont = 0;
- if (e->next)
- e->next->prev = e->prev;
- *e->prev = e->next;
- e->next = cache->free;
- cache->free = e;
- xfree (e->pattern);
- e->pattern = 0;
- }
- }
-}
diff --git a/nx-X11/lib/font/util/private.c b/nx-X11/lib/font/util/private.c
deleted file mode 100644
index 85e90e57b..000000000
--- a/nx-X11/lib/font/util/private.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* $Xorg: private.c,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/util/private.c,v 1.8tsi Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fontmisc.h>
-#include <X11/fonts/fontstruct.h>
-
-static int _FontPrivateAllocateIndex = 0;
-
-int
-AllocateFontPrivateIndex (void)
-{
- return _FontPrivateAllocateIndex++;
-}
-
-FontPtr
-CreateFontRec (void)
-{
- FontPtr pFont;
- int size;
-
- size = sizeof(FontRec) + (sizeof(pointer) * _FontPrivateAllocateIndex);
-
- pFont = (FontPtr)xalloc(size);
-
- if(pFont) {
- bzero((char*)pFont, size);
- pFont->maxPrivate = _FontPrivateAllocateIndex - 1;
- if(_FontPrivateAllocateIndex)
- pFont->devPrivates = (pointer)(&pFont[1]);
- }
-
- return pFont;
-}
-
-void
-DestroyFontRec (FontPtr pFont)
-{
- if (pFont->devPrivates && pFont->devPrivates != (pointer)(&pFont[1]))
- xfree(pFont->devPrivates);
- xfree(pFont);
-}
-
-void
-ResetFontPrivateIndex (void)
-{
- _FontPrivateAllocateIndex = 0;
-}
-
-Bool
-_FontSetNewPrivate (FontPtr pFont, int n, pointer ptr)
-{
- pointer *new;
-
- if (n > pFont->maxPrivate) {
- if (pFont->devPrivates && pFont->devPrivates != (pointer)(&pFont[1])) {
- new = (pointer *) xrealloc (pFont->devPrivates, (n + 1) * sizeof (pointer));
- if (!new)
- return FALSE;
- } else {
- new = (pointer *) xalloc ((n + 1) * sizeof (pointer));
- if (!new)
- return FALSE;
- if (pFont->devPrivates)
- memcpy (new, pFont->devPrivates, (pFont->maxPrivate + 1) * sizeof (pointer));
- }
- pFont->devPrivates = new;
- /* zero out new, uninitialized privates */
- while(++pFont->maxPrivate < n)
- pFont->devPrivates[pFont->maxPrivate] = (pointer)0;
- }
- pFont->devPrivates[n] = ptr;
- return TRUE;
-}
-
diff --git a/nx-X11/lib/font/util/utilbitmap.c b/nx-X11/lib/font/util/utilbitmap.c
deleted file mode 100644
index a817a4ec6..000000000
--- a/nx-X11/lib/font/util/utilbitmap.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* $Xorg: utilbitmap.c,v 1.4 2001/02/09 02:04:04 xorgcvs Exp $ */
-
-/*
-
-Copyright 1990, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/util/utilbitmap.c,v 1.4 2001/01/17 19:43:34 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/fonts/fontmisc.h>
-
-/* Utility functions for reformating font bitmaps */
-
-static unsigned char _reverse_byte[0x100] = {
- 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
- 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
- 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
- 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
- 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
- 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
- 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
- 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
- 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
- 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
- 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
- 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
- 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
- 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
- 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
- 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
- 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
- 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
- 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
- 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
- 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
- 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
- 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
- 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
- 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
- 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
- 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
- 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
- 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
- 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
- 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
- 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
-};
-
-/*
- * Invert bit order within each BYTE of an array.
- */
-void
-BitOrderInvert(unsigned char *buf, int nbytes)
-{
- unsigned char *rev = _reverse_byte;
-
- for (; --nbytes >= 0; buf++)
- *buf = rev[*buf];
-}
-
-/*
- * Invert byte order within each 16-bits of an array.
- */
-void
-TwoByteSwap(unsigned char *buf, int nbytes)
-{
- unsigned char c;
-
- for (; nbytes > 0; nbytes -= 2, buf += 2)
- {
- c = buf[0];
- buf[0] = buf[1];
- buf[1] = c;
- }
-}
-
-/*
- * Invert byte order within each 32-bits of an array.
- */
-void
-FourByteSwap(unsigned char *buf, int nbytes)
-{
- unsigned char c;
-
- for (; nbytes > 0; nbytes -= 4, buf += 4)
- {
- c = buf[0];
- buf[0] = buf[3];
- buf[3] = c;
- c = buf[1];
- buf[1] = buf[2];
- buf[2] = c;
- }
-}
-
-/*
- * Repad a bitmap
- */
-
-int
-RepadBitmap (char *pSrc, char *pDst,
- unsigned int srcPad, unsigned int dstPad,
- int width, int height)
-{
- int srcWidthBytes,dstWidthBytes;
- int row,col;
- char *pTmpSrc,*pTmpDst;
-
- switch (srcPad) {
- case 1:
- srcWidthBytes = (width+7)>>3;
- break;
- case 2:
- srcWidthBytes = ((width+15)>>4)<<1;
- break;
- case 4:
- srcWidthBytes = ((width+31)>>5)<<2;
- break;
- case 8:
- srcWidthBytes = ((width+63)>>6)<<3;
- break;
- default:
- return 0;
- }
- switch (dstPad) {
- case 1:
- dstWidthBytes = (width+7)>>3;
- break;
- case 2:
- dstWidthBytes = ((width+15)>>4)<<1;
- break;
- case 4:
- dstWidthBytes = ((width+31)>>5)<<2;
- break;
- case 8:
- dstWidthBytes = ((width+63)>>6)<<3;
- break;
- default:
- return 0;
- }
-
- width = srcWidthBytes;
- if (width > dstWidthBytes)
- width = dstWidthBytes;
- pTmpSrc= pSrc;
- pTmpDst= pDst;
- for (row = 0; row < height; row++)
- {
- for (col = 0; col < width; col++)
- *pTmpDst++ = *pTmpSrc++;
- while (col < dstWidthBytes)
- {
- *pTmpDst++ = '\0';
- col++;
- }
- pTmpSrc += srcWidthBytes - width;
- }
- return dstWidthBytes * height;
-}
-
-