;
;   PostScript font substitution map
;
;   This file currently defines all the fonts included with
;   Adobe Type Manager for Windows, the Adobe Plus Pack,
;   Adobe Font Pack 1, as well as the Linguist fonts distributed
;   with AutoCAD.
;
*fonts
;
; The first column is the base name of the shape, compiled shape,
; or Adobe Type 1 font definition. The second column is the official
; PostScript name of the font.  Trailing underscores should be
; ignored. For example, the file containing the font "AvantGarde-Demi"
; might be called AGD_____.PFB; the entry in the first column would
; be "agd". Following the long name, there may be other flags; currently
; the only flag interpreted by AutoCAD is ISO, which means the font is
; already ISO-encoded and does not need further remapping.
;
;
agd         AvantGarde-Demi
agdo        AvantGarde-DemiOblique
agw         AvantGarde-Book
agwo        AvantGarde-BookOblique
bdps        Bodoni-Poster
bkd         Bookman-Demi
bkdi        Bookman-DemiItalic
bkl         Bookman-Light
bkli        Bookman-LightItalic
c           Cottonwood
cibt        CityBlueprint
cob         Courier-Bold
cobo        Courier-BoldOblique
cobt        CountryBlueprint
com         Courier
coo         Courier-Oblique
eur         EuroRoman 
euro        EuroRoman-Oblique 
fs          FreestyleScript
ho          Hobo
hv          Helvetica
hvb         Helvetica-Bold
hvbo        Helvetica-BoldOblique
hvn         Helvetica-Narrow
hvnb        Helvetica-Narrow-Bold
hvnbo       Helvetica-Narrow-BoldOblique
hvno        Helvetica-Narrow-Oblique
hvo         Helvetica-Oblique
lx          Linotext
ncb         NewCenturySchlbk-Bold
ncbi        NewCenturySchlbk-BoldItalic
nci         NewCenturySchlbk-Italic
ncr         NewCenturySchlbk-Roman
par         PanRoman
pob         Palatino-Bold
pobi        Palatino-BoldItalic
poi         Palatino-Italic
por         Palatino-Roman
rom         Romantic
romb        Romantic-Bold
romi        Romantic-Italic
sas         SansSerif
sasb        SansSerif-Bold
sasbo       SansSerif-BoldOblique
saso        SansSerif-Oblique
suf         SuperFrench
sy          Symbol
te          Technic
teb         Technic-Bold
tel         Technic-Light
tib         Times-Bold
tibi        Times-BoldItalic
tii         Times-Italic
tir         Times-Roman
tjrg        Trajan-Regular
vrb         VAGRounded-Bold
zcmi        ZapfChancery-MediumItalic
zd          ZapfDingbats
;
; Some additional font mappings. To use any of these fonts,
; just remove the semicolon from the beginning of the line.
; These have not been tested by Autodesk, and are included as
; a convenience only.
;
;akj    AksarJhar ISO
;ar     Armenian ISO
;arlvi  AradLevelVI ISO
;ay     Ayudhya ISO
;ayb    AyudhyaBold ISO
;ba     Bangkok ISO
;chm    ChangMai ISO
;chmb   ChiangMaiBold ISO
;gr     Graeca ISO
;gro    GraecaOblique ISO
;gu     Gujarati ISO
;he     Hebraica ISO
;higj   HiGwangJu ISO
;hii    HiInchon ISO
;his    HindiSanskrit ISO
;ho     Hobo ISO
;ipa    IPAsans ISO
;ipak   IPAKiel ISO
;ipakb  IPAKiel-Bold ISO
;khk    KhunKrit ISO
;khkb   KhunKrit-Bold ISO
;khkbi  KhunKrit-BoldItalic ISO
;khki   KhunKrit-Italic ISO
;la     Laotian ISO
;nah    NaayHaang ISO
;nahb   NaayHaang-Bold ISO
;nahbi  NaayHaang-BoldItalic ISO
;nahi   NaayHaang-Italic ISO
;nehp   NewHiPusan ISO
;nej    NewJeju ISO
;nes    NewSeoul ISO
;ph     Phatphong ISO
;phb    Phatphong-Bold ISO
;phbi   Phatphong-BoldItalic ISO
;phi    Phatphong-Italic ISO
;ro     Romance ISO
;rob    RomanceBold ISO
;roi    RomanceItalic ISO
;se     Semitica ISO
;seb    SemiticaBold ISO
;sei    SemiticaItalic ISO
;su     Sukanya ISO
;sub    Sukanya-Bold ISO
;tbc    TbilisiCaps ISO
;tbt    TbilisiText ISO
;th     Thonburi ISO
;ti     Tibetan ISO
;trc    TransCyrillic ISO
;trcb   TransCyrillic-Bold ISO
;trcbi  TransCyrillic-BoldItalic ISO
;trci   TransCyrillic-Italic ISO
;trcs   TransCyrillicSans ISO
;trcsb  TransCyrillicSans-Bold ISO
;trcsbo TransCyrillicSans-BoldOblique ISO
;trcso  TransCyrillicSans-Oblique ISO
;vib    VinaBook ISO
;vic    VinaChan ISO
;vip    VinaPala ISO
;vir    VinaRoman ISO
;vis    VinaSans ISO
;
; Font mappings to avoid downloading.
; These mappings are not supported, and, in some cases, may not
; produce proper results; use at your own risk.  These mappings are
; included as a convenience only. To activate these, comment out the
; corresponding mapping above by inserting a semicolon (;) at the
; beginning of the line.
;
; Note also that if you completely comment out all entries for a font,
; then PSOUT will not attempt to convert the text to PostScript text
; entities, and will instead output them as (unfilled) outlines. This 
; will result in larger .eps files, but for certain fonts, in particular
; stroke fonts such as City Blueprint, will look the same.
;
saso    Helvetica-Oblique
sas     Helvetica
sasb    Helvetica-Bold
sasbo   Helvetica-BoldOblique
rom     Times-Roman
romb    Times-Bold
romi    Times-Italic
;
;   PostScript figure inclusion procedures
;
; Taken from PostScript manual verbatim
*figureprologue
/IncludeFig { 
        /b4_Inc_state save def
        /dict_count countdictstack def
        /op_count count 1 sub def
        userdict begin
        /showpage {} def
        0 setgray 0 setlinecap
        1 setlinewidth 0 setlinejoin
        10 setmiterlimit [] 0 setdash newpath
        /languagelevel where
        {pop languagelevel
                1 ne
                {false setstrokeadjust false setoverprint
                }if
        }if
}bind def
        
;
; % Args are llx lly urx ury (in figure coordinates)
;
;/clipFig {
;       currentpoint 6 2 roll
;       newpath 4 copy
;       4 2 roll moveto
;       6 -1 roll exch lineto
;       exch lineto
;       exch lineto
;       closepath clip
;       moveto
; } def
;
; % doclip, if called, will always be just after a `startfig'
;
; /doclip { llx lly urx ury clipFig } def

/EndIncludeFig {
           count op_count sub {pop} repeat
           countdictstack dict_count sub {end} repeat
           b4_Inc_state restore
} bind def
;
*sampleprolog
; Sample PSPROLOG. Many other methods of implementation are possible. 
;
; This entire section (without full-line comments)
; gets inserted into the PSOUT file after the
; AutoCAD generated transformations. Thus, this section can contain code
; to globally rotate, translate, and otherwise transform the image.
;
; To rotate an image, an example (for 8.5" high paper), include the
; instructions
;
;    0 8.5 72 mul translate   % 8.5 inches times 72 pts per inch
;    -90 rotate               % Positive means counterclockwise
;
; Three functions are prime candidates for redefinition:
;
;       ACADColor
;               i r g b ACADColor -
;       gets called every time the color changes. r, g, b are values from 0 to 1,
;       while i is number from 1 to 254, corresponding to the ACAD color number.
;       The default implementation is:
;/ACADColor { setrgbcolor pop } def
;
;
;       ACADLayer
;               name ACADLayer -
; gets called when the layer changes. The layer name is presented as a string.
; The default is to do nothing with this information; the default
; implementation is
;
;/ACADLayer { pop } def
;
;       ACADLtype
;               name pattern alignment ACADLtype -
; gets called when the line type changes. "name" is the name of the linetype,
; and could be used as a key into a dictionary. "pattern" is an array consisting
; of what AutoCAD refers to as the "dash-n" fields. "alignment" is the AutoCAD
; alignment specification, which at present is always the string (A).
; The default implementation is quite complicated.
;
; An example set of redefinitions follow.
;
; First, define a local dictionary; userdict certainly won't have enough
; space for big tables of colors.
;
/SamplePrologDict 300 dict def
;
;       n tocname --
;       create a name "colorN" for later lookup. This approach doesn't
;       make particularly readable names, but it is compact.
SamplePrologDict begin
/tocname {
        6 string dup 0 (color) putinterval dup 5 4 -1 roll put cvn
        } bind def

;       n routine color --
;       defines a color entry, putting it in mydict.
/color { exch tocname exch bind def } bind def
end
;
;       Now, the lookup.
; Note that is is VITAL to clear the stack in called routines; ACADColor will
; only take the garbage off if there is not a special entry for this color 
; Note that ACADColor must _not_ be in SamplePrologDict.

;
; Note that the linewidth is scaled along with everything else. This
; might not be what you want! But the color and linetype and such are
; declared before the geometry is declared -- so we have to do a little
; magick to get it _really_ the way we want it.
;
;
SamplePrologDict begin
/_ACADLayer { ACADLayer } bind def
/_ACADLtype { ACADLtype } bind def
/_ACADColor {
        SamplePrologDict begin
        3 index tocname dup
        SamplePrologDict exch known
        { cvx exec }
        { pop defaultcolor }
        ifelse
        end
} bind def
/acad-layer-known false def
/acad-color-known false def
/acad-linetype-known false def
end

/ACADLayer {
        SamplePrologDict begin
        /acad-layer exch def
        /acad-layer-known true def
        end
} bind def
/ACADColor {
        SamplePrologDict begin
        4 array astore /acad-color exch def
        /acad-color-known true def
        end
} bind def
/ACADLtype {
    SamplePrologDict begin
    3 array astore /acad-ltype exch def
    /acad-linetype-known true def
    end
} bind def

; Now some example color defs.
; Make sure to put them in SamplePrologDict
SamplePrologDict begin
/scaledown { matrix currentmatrix 0 get div } bind def
; Color 1 just wants nice thin green lines.
1 { pop pop pop pop 0 scaledown setlinewidth 0 1 0 setrgbcolor } color
; Color 2 wants 36 point red lines
2 { pop pop pop pop 36 scaledown setlinewidth 1 0 0 setrgbcolor } color
; Everything else gets thin self-colored lines.
/defaultcolor { 0 setlinewidth setrgbcolor pop } bind def
end
; The next line is to make sure line widths are controlled only from the
; color-setting code.
/setlinewidth { pop } def


; Now we redefine "stroke" so that it calls our procedures first.
; Notice that /stroke includes "stroke" in the definition; this is so
; that the old definition of stroke is used in the new definition -- and
; the "bind" makes it so. We do the same to "fill".

/prestroke {
        SamplePrologDict begin
            acad-color-known {
                /acad-color-known false def
                acad-color aload pop _ACADColor
            } if
            acad-layer-known {
                /acad-layer-known false def
                acad-layer _ACADLayer
            } if
            acad-linetype-known {
                /acad-linetype-known false def
                acad-ltype aload pop _ACADLtype
            } if
        end
    } bind def
/stroke { prestroke stroke } bind def
/fill   { prestroke fill } bind def
;
;
;   End of sample prolog.
;
;
;   PostScript ISO font re-mapping procedure
;
*isofontprologue
/reencodedict 12 dict def

/ReEncode {
    reencodedict begin
        /newcodesandnames exch def
        /newfontname exch def
        /basefontname exch def
        /basefontdict basefontname findfont def
        /newfont basefontdict maxlength dict def
        basefontdict {
            exch dup /FID ne
                {dup /Encoding eq
                    { exch dup length array copy newfont 3 1 roll put }
                    { exch newfont 3 1 roll put }
                 ifelse
                }
                { pop pop }
            ifelse
        } forall
        newfont /FontName newfontname put
        newcodesandnames aload pop
        newcodesandnames length 2 idiv
            { newfont /Encoding get 3 1 roll put }
        repeat
        newfontname newfont definefont pop
    end
} def

/ISO [
        127 /degree
        128 /plusminus
        129 /emptyset

%   ISO characters moved here to avoid SEAC conflicts
        130 /Aacute
        131 /Acircumflex
        132 /Atilde
        133 /Adieresis
        134 /Aring
        135 /AE
        136 /Ccedilla
        137 /Egrave
        138 /Eacute
        139 /Ecircumflex
        140 /Edieresis
        141 /Igrave
        142 /Iacute
        143 /Icircumflex
        144 /Idieresis
%   End ISO characters moved

        145 /quoteleft
        146 /quoteright

%   ISO character moved here to avoid SEAC conflicts
        147 /otilde
%   End ISO character moved

        160 /space
        161 /exclamdown
        162 /cent
        163 /sterling
        164 /currency
        165 /yen
        166 /bar
        167 /section
        168 /dieresis
        169 /copyright
        170 /ordfeminine
        171 /guillemotleft
        172 /logicalnot
        173 /minus
        174 /registered
        175 /hyphen
        176 /ring
        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
;   Following ISO characters moved to avoid SEAC conflicts
;       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
;   Preceding ISO characters moved to avoid SEAC conflicts
        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
;   Following ISO character moved to avoid SEAC conflicts
;       245 /otilde
;   Preceding ISO character moved to avoid SEAC conflicts
        246 /odieresis
        247 /divide
        248 /oslash
        249 /ugrave
        250 /uacute
        251 /ucircumflex
        252 /udieresis
        253 /yacute
        254 /thorn
        255 /ydieresis
] def
;
;   PostScript fill pattern prologue code
;
*fillprologue
/Rangefilter { % <value> <min> <max> Rangefilter <filtered value>
   3 -1 roll
   2 copy lt
      {pop exch pop}
      {exch pop 2 copy gt {pop} {exch pop} ifelse}
   ifelse
} bind def
/PreFill {
    /CMatrix matrix currentmatrix def
} bind def
;/showBBox {                           % Show bounding box (for debugging only)
;    gsave
;    newpath
;    0 setgray 1 setlinewidth
;    Bbllx Bblly moveto
;    Bbllx Bbury lineto
;    Bburx Bbury lineto
;    Bburx Bblly lineto
;    closepath stroke
;    grestore
;} bind def
/DoFill {
    /Bxscale exch def
    /Byscale exch def
    pathbbox
    /Bbury exch def
    /Bburx exch def
    /Bblly exch def
    /Bbllx exch def
;   showBBox                          % Show bounding box for debugging
; ;;CMatrix setmatrix 72 1000 div dup matrix scale
    CMatrix setmatrix 72 1000 div dup Byscale div exch Bxscale div exch matrix scale
    dup concat dup Bburx exch Bbury exch itransform
    ceiling cvi /Bbury exch def ceiling cvi /Bburx exch def Bbllx exch
    Bblly exch itransform floor cvi /Bblly exch def floor cvi /Bbllx
    exch def
} bind def
/DoOutline {
    gsave stroke grestore
} bind def
/EndFill {
;   showBBox                          % Show bounding box for debugging
} bind def
;
;   PostScript fill pattern definitions
;
*fill
%@Fill
/Grayscale %Grayscale,1, Grayscale=50
   {
        0 100 Rangefilter 100 div 1 exch sub setgray fill
   } bind def

%@Fill
/RGBcolor %RGBcolor,3, Red=50, Green=50, Blue=50,
   {
   /Blue exch 0 100 Rangefilter def
   /Green exch 0 100 Rangefilter def
   /Red exch 0 100 Rangefilter def

     Red 100 div 
     Green 100 div 
     Blue 100 div 
     setrgbcolor fill
   } bind def

%@Fill
/AIlogo %AIlogo,5, Frequency=1.0, Separation=25, LineWidth=0, ForegroundGray=100, BackgroundGray=0
   {
   /BackgroundGray exch -1 100 Rangefilter def
   /ForegroundGray exch 0 100 Rangefilter def
   /Linewidth      exch 0 100 Rangefilter def
   /Separation     exch 0 100 Rangefilter def
   /Frequency      exch 1 100 Rangefilter def

   /newfont 10 dict def
   newfont begin

   /FontMatrix [1  0  0
                1  0  0] def
   /FontType 3 def
   /FontBBox [0 0 1 1] def
   /Encoding 256 array def
   0 1 255 {Encoding exch /.notdef put} for

   /BuildChar
     { 1  0
       0 0 1 1
       setcachedevice
       pop begin

       100 Separation sub 100.0 div dup dup scale
       Linewidth 500.0 div exch div setlinewidth 1 setlinejoin

       0.5 0.42201835 translate
       0 0 moveto
       0.25 -0.422 lineto
       -0.25 -0.422 lineto
       closepath
       -0.5 -0.42201835 translate

       0.5 0.65137615 translate
       0 0 moveto
       0.3728 -0.6514 lineto
       0.25 -0.6514 lineto
       0.0734 -0.2018 lineto
       -0.0734 -0.2018 lineto
       -0.25 -0.6514 lineto
       -0.3728 -0.6514 lineto
       closepath
       -0.5 -0.65137615 translate

       0.5 0.87155963 translate
       0 0 moveto
       0.5 -0.8716 lineto
       0.3728 -0.8716 lineto
       0.0734 -0.1468 lineto
       -0.0734 -0.1468 lineto
       -0.3728 -0.8716 lineto
       -0.5 -0.8716 lineto
       closepath
       -0.5 -0.87155963 translate

       0.57177274 1 translate
       0 0 moveto
       0.4282 0 lineto
       0.4282 -1 lineto
       closepath
       -0.57177274 -1 translate

       0 1 translate
       0 0 moveto
       0.4282 0 lineto
       0 -1 lineto
       closepath
       0 -1 translate

       Linewidth 0 ne
          { stroke }
          { fill }
       ifelse

      end
     } def
   end

   /pntsize 1000 Frequency div def
   /FillFont newfont definefont pop
   /FillFont findfont pntsize scalefont setfont

   eoclip
   BackgroundGray 0 ge
      { BackgroundGray 100 div 1 exch sub setgray fill }
      { newpath } ifelse

   ForegroundGray 100 div 1 exch sub setgray

   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (a) show
       } for
     pop
     } for
   } bind def


%@Fill
/Lineargray %Lineargray,5, Levels=256, Cycles=1, Angle=0.0, ForegroundGray=100, BackgroundGray=0
   {
   /BackgroundGray exch 0 100 Rangefilter def
   /ForegroundGray exch 0 100 Rangefilter def
   /Angle exch def
   /Cycles exch 1 8 Rangefilter def
   /Levels exch 2 256 Rangefilter def
   /SetXbb {
      /Y exch def
      /X exch def
      X Xbbllx lt {/Xbbllx X def} if
      Y Xbblly lt {/Xbblly Y def} if
      X Xbburx gt {/Xbburx X def} if
      Y Xbbury gt {/Xbbury Y def} if
   } bind def

   /GrayConv { 100 div 1 exch sub } bind def
   /GrayIncr ForegroundGray GrayConv BackgroundGray GrayConv 
       sub Levels 1 sub div def

   Angle rotate
   flattenpath

   currentpoint
   dup /Xbbury exch def /Xbblly exch def
   dup /Xbburx exch def /Xbbllx exch def
   {SetXbb} {SetXbb} {1 1 3 {pop SetXbb} for} {} pathforall

   Xbbllx Xbblly translate
   /Width Xbbury Xbblly sub def
   /Incr Xbburx Xbbllx sub dup /Length exch def Levels div Cycles div def

   clip
   ForegroundGray GrayConv setgray
   1 1 Cycles {
      1 ne {Length Cycles div 0 translate} if
      0 Incr Length {
         newpath 0 moveto
         Incr 0 rlineto 0 Width rlineto Incr neg 0 rlineto fill
         currentgray GrayIncr sub setgray
      } for
   /GrayIncr GrayIncr neg def
   } for
} bind def

%@Fill
/Radialgray %Radialgray,3, Levels=256, ForegroundGray=0, BackgroundGray=100
{
   /BackgroundGray exch 0 100 Rangefilter def
   /ForegroundGray exch 0 100 Rangefilter def
   /Levels exch 2 256 Rangefilter def
   /sq {dup mul} bind def
   /Ctr2pt {Ctry sub abs sq exch Ctrx sub abs sq add sqrt} bind def
   /SetMaxrad {Ctr2pt dup Maxrad gt {/Maxrad exch def} {pop} ifelse} bind def

   /GrayConv { 100 div 1 exch sub } bind def
   /Ctrx Bburx Bbllx add 2 div def
   /Ctry Bbury Bblly add 2 div def
   /Maxrad 0 def
   flattenpath
   {SetMaxrad} {SetMaxrad} {1 1 3 {pop SetMaxrad} for} {} pathforall
   /Incr Maxrad Levels 1 add div def
   /GrayIncr ForegroundGray GrayConv BackgroundGray GrayConv 
       sub Levels 1 sub div def
   /IRad 0 def

   clip
   ForegroundGray GrayConv setgray
    0 Incr Maxrad {
      /ORad exch def
      ORad 0 ne {
      Maxrad ORad sub Incr lt {/ORad Maxrad def} if
         IRad 0 ne {
            Ctrx IRad add Ctry moveto
            Ctrx Ctry IRad 0 360 arc
            Ctrx ORad add Ctry moveto
            Ctrx Ctry ORad 0 360 arc eofill
         }{
            Ctrx ORad add Ctry moveto
            Ctrx Ctry ORad 0 360 arc fill
         } ifelse
         currentgray GrayIncr sub setgray
         /IRad ORad def
      } if
   } for
} bind def

%@Fill
/Square %Square,5, Scale=1.0, Separation=25, LineWidth=1, ForegroundGray=100, BackgroundGray=0
  {
   /BackgroundGray exch -1 100 Rangefilter def
   /ForegroundGray exch 0 100 Rangefilter def
   /LineWidth exch 0 100 Rangefilter def
   /Separation exch 0 100 Rangefilter def
   /Scale exch 1 100 Rangefilter def
   /ll Separation 100.0 div def
   /ur 100 Separation sub 100.0 div def
   /newfont 10 dict def
   newfont begin
      /FontMatrix [1  0  0  1  0  0] def
      /FontType 3 def
      /FontBBox [0 0 1 1] def
      /Encoding 256 array def
      0 1 255 {Encoding exch /.notdef put} for
      Encoding 97 /Filled put
      Encoding 98 /Lines put
      /CharProcs 4 dict def
      CharProcs begin
         /.notdef {} def
         /Filled {
            newpath
            ll ll moveto
            ur ll lineto
            ur ur lineto
            ll ur lineto
            closepath
            fill
         } def
        /Lines {
            newpath
            ll ll moveto
            ur ll lineto
            ur ur lineto
            ll ur lineto
            closepath
            LineWidth 100 div setlinewidth
            stroke
        } def
      end

     /BuildChar { 1 0 0 0 1 1 setcachedevice exch
       begin
         Encoding exch get
         CharProcs exch get
       end
       exec
     } def
   end
   /pntsize 1000 Scale mul def
   /FillFont newfont definefont pop
   /FillFont findfont pntsize scalefont setfont
   eoclip
   BackgroundGray 100 div 1 exch sub setgray fill
   ForegroundGray 100 div 1 exch sub setgray fill
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (a) show
       } for
     pop
     } for
   0 setgray
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (b) show
       } for
     pop
     } for
   } bind def

%@Fill
/Waffle %Waffle,6, Scale=1.0, Proportion=30, LineWidth=1, UpLeftGray=100, BotRightGray=50, TopGray=0
   {
   /TGray exch 0 100 Rangefilter def
   /BRGray exch 0 100 Rangefilter def
   /ULGray exch 0 100 Rangefilter def
   /LineWidth exch 0 100 Rangefilter def
   /Proportion exch 0 50 Rangefilter def
   /Scale exch 1 10000 Rangefilter def
   /ll Proportion 100.0 div def
   /ur 100 Proportion sub 100.0 div def
   /newfont 10 dict def
   newfont begin
   /FontMatrix [1  0  0  1  0  0] def
   /FontType 3 def
   /FontBBox [0 0 1 1] def
   /Encoding 256 array def
   0 1 255 {Encoding exch /.notdef put} for
   Encoding 97 /Fill1 put
   Encoding 98 /Fill2 put
   Encoding 99 /Lines put
   /CharProcs 4 dict def
   CharProcs begin
   /.notdef {} def
   /Fill1
      {
      newpath
      0 0 moveto
      0 1 lineto
      1 1 lineto
      ur ur lineto
      ll ur lineto
      ll ll lineto
      closepath
      fill
      } def
   /Fill2
      {
      newpath
      0 0 moveto
      1 0 lineto
      1 1 lineto
      ur ur lineto
      ur ll lineto
      ll ll lineto
      closepath
      fill
      } def
   /Lines
      {
      newpath
      0 0 moveto
      0 1 lineto
      1 1 lineto
      1 0 lineto
      0 0 lineto
      ll ll lineto
      ll ur lineto
      ur ur lineto
      ur ll lineto
      ll ll lineto
      0 1 moveto
      ll ur lineto
      1 1 moveto
      ur ur lineto
      1 0 moveto
      ur ll lineto
      LineWidth 100 div setlinewidth
      stroke
      } def
   end

   /BuildChar
     { 1  0
       0 0 1 1
       setcachedevice
       exch begin
       Encoding exch get
       CharProcs exch get
       end
       exec
     } def
   end
   /pntsize 1000 Scale mul def
   /FillFont newfont definefont pop
   /FillFont findfont pntsize scalefont setfont
   eoclip
   TGray 0 ge
      { TGray 100 div 1 exch sub setgray fill }
      { 0 setgray fill newpath } ifelse

   ULGray 100 div 1 exch sub setgray
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (a) show
       } for
     pop
     } for
   BRGray 100 div 1 exch sub setgray
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (b) show
       } for
     pop
     } for
   0 setgray
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (c) show
       } for
     pop
     } for
   } bind def
%@Fill
/Zigzag %Zigzag,4, Scale=1.0, LineWidth=1, ForeGroundGray=50, BackGroundGray=0
   {
   /BackGroundGray exch 0 100 Rangefilter def
   /ForeGroundGray exch 0 100 Rangefilter def
   /LineWidth exch 0 100 Rangefilter def
   /Scale exch 1 10000 Rangefilter def
   /newfont 10 dict def
   newfont begin
   /FontMatrix [1  0  0  1  0  0] def
   /FontType 3 def
   /FontBBox [0 0 1 1] def
   /Encoding 256 array def
   0 1 255 {Encoding exch /.notdef put} for
   Encoding 97 /Fill1 put
   Encoding 98 /Lines put
   /CharProcs 3 dict def
   CharProcs begin
   /.notdef {} def
   /Fill1
      {
      newpath
      .000 1.000 moveto
      1.000 1.000 lineto
      1.000 .625 lineto
      .875 .500 lineto
      .750 .625 lineto
      .750 .875 lineto
      .625 1.000 lineto
      .500 .875 lineto
      .500 .625 lineto
      .375 .500 lineto
      .250 .625 lineto
      .250 .875 lineto
      .125 1.000 lineto
      .000 .875 lineto

      .000 .000 moveto
      1.000 .000 lineto
      1.000 .125 lineto
      .875 .000 lineto
      .750 .125 lineto
      .750 .375 lineto
      .625 .500 lineto
      .500 .375 lineto
      .500 .125 lineto
      .375 .000 lineto
      .250 .125 lineto
      .250 .375 lineto
      .125 .500 lineto
      .000 .375 lineto
      closepath
      fill
      } def
   /Lines
      {
      newpath
      1.000 .125 moveto
      .875 .000 lineto
      .750 .125 lineto
      .750 .375 lineto
      .625 .500 lineto
      .500 .375 lineto
      .500 .125 lineto
      .375 .000 lineto
      .250 .125 lineto
      .250 .375 lineto
      .125 .500 lineto
      .000 .375 lineto
      .000 .125 lineto

      1.000 .875 moveto
      1.000 .625 lineto
      .875 .500 lineto
      .750 .625 lineto
      .750 .875 lineto
      .625 1.000 lineto
      .500 .875 lineto
      .500 .625 lineto
      .375 .500 lineto
      .250 .625 lineto
      .250 .875 lineto
      .125 1.000 lineto
      .000 .875 lineto
      LineWidth 100 div setlinewidth
      stroke
      } def
   end

   /BuildChar
     { 1  0
       0 0 1 1
       setcachedevice
       exch begin
       Encoding exch get
       CharProcs exch get
       end
       exec
     } def
   end
   /pntsize 1000 Scale mul def
   /FillFont newfont definefont pop
   /FillFont findfont pntsize scalefont setfont
   eoclip
   BackGroundGray 100 div 1 exch sub setgray fill
   ForeGroundGray 100 div 1 exch sub setgray
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (a) show
       } for
     pop
     } for
   0 setgray
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (b) show
       } for
     pop
     } for
   } bind def

%@Fill
/Stars %Stars,4, Scale=1.0, LineWidth=1, ForegroundGray=100, BackgroundGray=0
   {
   /Bgray exch 0 100 Rangefilter def
   /Fgray exch 0 100 Rangefilter def
   /LineWidth exch 0 100 Rangefilter def
   /Scale exch 1 10000 Rangefilter def
   /newfont 10 dict def
   newfont begin
   /FontMatrix [1  0  0  1  0  0] def
   /FontType 3 def
   /FontBBox [0 0 1 1] def
   /Encoding 256 array def
   0 1 255 {Encoding exch /.notdef put} for
   Encoding 97 /Filled put
   Encoding 98 /Lines put
   /CharProcs 3 dict def
   CharProcs begin
   /.notdef {} def
   /Filled
      {
      newpath
      .500 .350 moveto
      .025 .075 lineto
      .381 .495 lineto
      .275 .625 lineto
      .492 .625 lineto
      .725 .900 lineto
      .725 .625 lineto
      .975 .625 lineto
      .725 .480 lineto
      .725 .075 lineto
      closepath
      fill
      } def
   /Lines
      {
      newpath
      .500 .350 moveto
      .025 .075 lineto
      .381 .495 lineto
      .275 .625 lineto
      .492 .625 lineto
      .725 .900 lineto
      .725 .625 lineto
      .975 .625 lineto
      .725 .480 lineto
      .725 .075 lineto
      closepath
      LineWidth 100 div setlinewidth
      stroke
      } def
   end

   /BuildChar
     { 1  0
       0 0 1 1
       setcachedevice
       exch begin
       Encoding exch get
       CharProcs exch get
       end
       exec
     } def
   end
   /pntsize 1000 Scale mul def
   /FillFont newfont definefont pop
   /FillFont findfont pntsize scalefont setfont
   eoclip
   Bgray 100 div 1 exch sub setgray fill
   Fgray 100 div 1 exch sub setgray
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (a) show
       } for
     pop
     } for
   0 setgray
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (b) show
       } for
     pop
     } for
   } bind def

%@Fill
/Brick %Brick,5, Scale=1.0, LineWidth=1, BrickGray1=100, BrickGray2=50, BackGroundGray=0
   {
   /Bgray exch 0 100 Rangefilter def
   /Fgray2 exch 0 100 Rangefilter def
   /Fgray1 exch 0 100 Rangefilter def
   /LineWidth exch 0 100 Rangefilter def
   /Scale exch 1 10000 Rangefilter def
   /newfont 10 dict def
   newfont begin
   /FontMatrix [1  0  0  1  0  0] def
   /FontType 3 def
   /FontBBox [0 0 1 1] def
   /Encoding 256 array def
   0 1 255 {Encoding exch /.notdef put} for
   Encoding 97 /Fill1 put
   Encoding 98 /Fill2 put
   Encoding 99 /Lines put
   /CharProcs 4 dict def
   CharProcs begin
   /.notdef {} def
   /Fill1
      {
      .025 .975 moveto
      .025 .525 lineto
      .975 .525 lineto
      .975 .975 lineto
      .025 .975 lineto
      closepath
      fill
      } def
   /Fill2
      {
      .000 .475 moveto
      .000 .025 lineto
      .475 .025 lineto
      .475 .475 lineto
      .000 .475 lineto
      1.000 .475 moveto
      1.000 .025 lineto
      .525 .025 lineto
      .525 .475 lineto
      1.000 .475 lineto
      closepath
      fill
      } def
   /Lines
      {
      newpath
      1.000 .025 moveto
      .525 .025 lineto
      .525 .475 lineto
      1.000 .475 lineto
      .000 .025 moveto
      .475 .025 lineto
      .475 .475 lineto
      .000 .475 lineto
      .025 .975 moveto
      .025 .525 lineto
      .975 .525 lineto
      .975 .975 lineto
      .025 .975 lineto
      LineWidth 100 div setlinewidth
      stroke
      } def
   end

   /BuildChar
     { 1  0
       0 0 1 1
       setcachedevice
       exch begin
       Encoding exch get
       CharProcs exch get
       end
       exec
     } def
   end
   /pntsize 1000 Scale mul def
   /FillFont newfont definefont pop
   /FillFont findfont pntsize scalefont setfont
   eoclip
   Bgray 100 div 1 exch sub setgray fill
   Fgray1 100 div 1 exch sub setgray
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (a) show
       } for
     pop
     } for
   Fgray2 100 div 1 exch sub setgray
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (b) show
       } for
     pop
     } for
   0 setgray
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (c) show
       } for
     pop
     } for
   } bind def

%@Fill
/Specks %Specks,3, Scale=1.0, ForeGroundGray=100, BackGroundGray=0
   {
   /Bgray exch 0 100 Rangefilter def
   /Fgray exch 0 100 Rangefilter def
   /Scale exch 1 10000 Rangefilter def
   /newfont 10 dict def
   newfont begin
   /FontMatrix [1  0  0  1  0  0] def
   /FontType 3 def
   /FontBBox [0 0 1 1] def
   /Encoding 256 array def
   0 1 255 {Encoding exch /.notdef put} for
   Encoding 97 /Filled put
   /CharProcs 2 dict def
   CharProcs begin
   /.notdef {} def
   /Filled
      {
      newpath
      .125 1.000 moveto
      .125 .875 lineto
      .000 .875 lineto
      .000 1.000 lineto

      .500 1.000 moveto
      .500 .750 lineto
      .250 .750 lineto
      .250 1.000 lineto

      1.000 .875 moveto
      .875 .875 lineto
      .875 1.000 lineto
      1.000 1.000 lineto

      .000 .500 moveto
      .250 .500 lineto
      .250 .250 lineto
      .000 .250 lineto

      .625 .625 moveto
      .625 .375 lineto
      .375 .375 lineto
      .375 .625 lineto

      1.000 .500 moveto
      .750 .500 lineto
      .750 .750 lineto
      1.000 .750 lineto

      .000 .125 moveto
      .125 .125 lineto
      .125 .000 lineto
      .000 .000 lineto

      .500 .000 moveto
      .500 .250 lineto
      .750 .250 lineto
      .750 .000 lineto

      .875 .000 moveto
      .875 .125 lineto
      1.000 .125 lineto
      1.000 .000 lineto
      closepath
      fill
      } def
   end
   /BuildChar
     { 1  0
       0 0 1 1
       setcachedevice
       exch begin
       Encoding exch get
       CharProcs exch get
       end
       exec
     } def
   end
   /pntsize 1000 Scale mul def
   /FillFont newfont definefont pop
   /FillFont findfont pntsize scalefont setfont
   eoclip
   Bgray 100 div 1 exch sub setgray fill
   Fgray 100 div 1 exch sub setgray fill
   Bblly pntsize Bbury
     { Bbllx pntsize Bburx
       { 1 index moveto
       (a) show
       } for
     pop
     } for
   } bind def
