[comp.lang.postscript] IBM Extended Character Set Font

dudkl@dcatla.UUCP (Danny K. Llewallyn) (06/28/89)

Sorry I botched up the last posting.  Here is the IBM Extended Font
that I downloaded off of the net a while back.

 
From gatech!cwjcc!tut.cis.ohio-state.edu!cs.utexas.edu!uunet!mcvax!ukc!warwick!cudac Thu May 25 07:47:30 EDT 1989
Article 2432 of comp.lang.postscript:
Path: dcatla!gatech!cwjcc!tut.cis.ohio-state.edu!cs.utexas.edu!uunet!mcvax!ukc!warwick!cudac
>From: cudac@warwick.ac.uk (Tim Clark)
Newsgroups: comp.lang.postscript
Subject: Re: PC graphic fonts. (long)
Keywords: IBM PC font
Message-ID: <2600@sol.warwick.ac.uk>
Date: 19 May 89 12:26:10 GMT
References: <102@ajfcal.UUCP>
Reply-To: cudac@warwick.ac.uk (Tim Clark)
Organization: Computing Services, University of Warwick, UK
Lines: 620

In article <102@ajfcal.UUCP> tony@ajfcal.UUCP (Tony Field) writes:
>Is an IBM-PC graphic character font set available for postscript
>compatible with the Courier fixed pitch font?

I developed a crude definition of all characters in the IBM PC font which
do not exist in Adobe standard or symbol fonts. It was originally for use with
Microsoft Word. PostScript to define the extra characters follows.

Bugs: PC characters 1,2,8 and 10 (the smiley faces and dots/circles in boxes)
don't scale too well. Some characters are formed by combinations of characters
from the Times-Roman font and look rather messy.

You are welcome to make whatever use you wish of the definition below.
As mentioned, it is rather crude, but at least it lets our PC users get
a representation of the special characters, without having to do a screen
dump. Note that it only defines the font, other software will be required
to actually make use of it.

% IBMextended font definition
% Defines the characters in the IBM-PC extended character set, not
% found elsewhere in Adobe fonts
% Produced by Tim Clark, Computing Services, University of Warwick UK
%             (T.Clark@warwick.ac.uk)
% No restrictions are placed on the use of this information
/newfont 10 dict def
newfont begin

/FontType 3 def
/FontMatrix [.001 0 0 .001 0 0] def
/FontBBox [0 -200 600 800] def

/Encoding 256 array def
0 1 255 {Encoding exch /.notdef put} for
Encoding 33 /wsmiley put
Encoding 34 /bsmiley put
Encoding 35 /rarrowhead put
Encoding 36 /larrowhead put
Encoding 37 /exclamdbl put
Encoding 38 /bar put
Encoding 39 /updownua put
Encoding 40 /lblcorn put
Encoding 41 /Psubt put
Encoding 42 /ltlcorn put
Encoding 43 /half put
Encoding 44 /quarter put
Encoding 45 /xhatch1 put
Encoding 46 /xhatch2 put
Encoding 47 /xhatch3 put
Encoding 48 /vers put
Encoding 49 /rtss put
Encoding 50 /rtds put
Encoding 51 /rtsd put
Encoding 52 /trsd put
Encoding 53 /trds put
Encoding 54 /rtdd put
Encoding 55 /verd put
Encoding 56 /trdd put
Encoding 57 /brdd put
Encoding 58 /brsd put
Encoding 59 /brds put
Encoding 60 /trss put
Encoding 61 /blss put
Encoding 62 /btss put
Encoding 63 /ttss put
Encoding 64 /ltss put
Encoding 65 /hors put
Encoding 66 /crss put
Encoding 67 /ltds put
Encoding 68 /ltsd put
Encoding 69 /bldd put
Encoding 70 /tldd put
Encoding 71 /btdd put
Encoding 72 /ttdd put
Encoding 73 /ltdd put
Encoding 74 /hord put
Encoding 75 /crdd put
Encoding 76 /btds put
Encoding 77 /btsd put
Encoding 78 /ttds put
Encoding 79 /ttsd put
Encoding 80 /blsd put
Encoding 81 /blds put
Encoding 82 /tlds put
Encoding 83 /tlsd put
Encoding 84 /crsd put
Encoding 85 /crds put
Encoding 86 /brss put
Encoding 87 /tlss put
Encoding 88 /block put
Encoding 89 /blockb put
Encoding 90 /blockl put
Encoding 91 /blockr put
Encoding 92 /blockt put
Encoding 93 /updowna put
Encoding 94 /uarrowhead put
Encoding 95 /darrowhead put
Encoding 96 /ltrcorn put
Encoding 97 /sup2 put
Encoding 98 /squaredot put
Encoding 99 /whitedot put
Encoding 100 /circle put
Encoding 101 /whitecircle put
Encoding 102 /mars put
Encoding 103 /venus put
Encoding 104 /quaver put
Encoding 105 /doublequaver put

/CharProcs 74 dict def
CharProcs begin
/.notdef {} def
/wsmiley { % position 33, PC char 1, white smiley face
  newpath
  300 300 280 0 360 arc
  closepath 40 setlinewidth stroke
  300 300 150 210 330 arc
  1 setlinecap stroke
  200 400 40 0 360 arc closepath fill
  400 400 40 0 360 arc closepath fill
  } def
/bsmiley { % position 34, PC char 2, black smiley face
  newpath
  300 300 300 0 360 arc
  closepath fill
  300 300 150 210 330 arc
  1 setgray 1 setlinecap 100 setlinewidth stroke
  200 400 70 0 360 arc closepath fill
  400 400 70 0 360 arc closepath fill
  } def
/rarrowhead { % position 35, PC char 16, right pointing arrow-head
  newpath
  600 300 moveto 0 600 lineto 0 0 lineto 600 300 lineto
  closepath fill
  } def
/larrowhead { % position 36, PC char 17, left pointing arrow-head
  newpath
  0 300 moveto 600 600 lineto 600 0 lineto 0 300 lineto
  closepath fill
  } def
/exclamdbl { % position 37, PC char 19, double exclamation mark
  /Times-Roman findfont 1000 scalefont setfont
  0 0 moveto -100 0 (!!) ashow
  } def
/bar { % position 38, PC char 22, short fat bar
  newpath
  50 200 moveto 50 400 lineto 550 400 lineto 550 200 lineto 50 200 lineto
  closepath fill
  } def
/updownua { % position 39, PC char 23, underscored up and down pointing arrow
  /Symbol findfont 1000 scalefont setfont
  50 50 moveto (\137) show
  0 -150 moveto (\255) show
  0 -150 moveto (\257) show
  } def
/lblcorn { % position 40, PC char 28, little bottom left corner
  newpath
  30 300 moveto 30 30 lineto 600 30 lineto
  stroke
  } def
/Psubt { % position 41, PC char 158, P subscript t
  /Times-Roman findfont dup 1000 scalefont setfont
  0 0 moveto (P) show
  667 scalefont setfont
  250 -80 moveto (t) show
  } def
/ltlcorn { % position 42, PC char 169, little top left corner
  newpath
  30 0 moveto 30 300 lineto 600 300 lineto
  stroke
  } def
/half { % position 43, PC char 171, half
  /Times-Roman findfont 600 scalefont setfont
  0 300 moveto (1) show
  240 -100 moveto (2) show
  newpath 70 150 moveto 530 460 lineto
  36 setlinewidth stroke
  } def
/quarter { % position 44, PC char 172, quarter
  /Times-Roman findfont 600 scalefont setfont
  0 300 moveto (1) show
  240 -100 moveto (4) show
  newpath 70 150 moveto 530 460 lineto
  36 setlinewidth stroke
  } def
/xhatch1 { % position 45, PC char 176, light cross hatching
  0 200 400 {
    -200 200 600 {
      exch dup 3 -1 roll
      newpath moveto
      40 40 rmoveto
      0 20 rlineto 20 0 rlineto 0 -20 rlineto -20 0 rlineto
      closepath fill
      } for
    pop
    } for
  100 200 500 {
    -100 200 700 {
      exch dup 3 -1 roll
      newpath moveto
      40 40 rmoveto
      0 20 rlineto 20 0 rlineto 0 -20 rlineto -20 0 rlineto
      closepath fill
      } for
    pop
    } for
  } def
/xhatch2 { % position 46, PC char 177, medium cross hatching
  0 200 400 {
    -200 200 600 {
      exch dup 3 -1 roll
      newpath moveto
      20 20 rmoveto
      0 60 rlineto 60 0 rlineto 0 -60 rlineto -60 0 rlineto
      closepath fill
      } for
    pop
    } for
  100 200 500 {
    -100 200 700 {
      exch dup 3 -1 roll
      newpath moveto
      20 20 rmoveto
      0 60 rlineto 60 0 rlineto 0 -60 rlineto -60 0 rlineto
      closepath fill
      } for
    pop
    } for
  } def
/xhatch3 { % position 47, PC char 178, heavy cross hatching
  0 200 400 {
    -200 200 600 {
      exch dup 3 -1 roll
      newpath moveto
      0 100 rlineto 100 0 rlineto 0 -100 rlineto -100 0 rlineto
      closepath fill
      } for
    pop
    } for
  100 200 500 {
    -100 200 700 {
      exch dup 3 -1 roll
      newpath moveto
      0 100 rlineto 100 0 rlineto 0 -100 rlineto -100 0 rlineto
      closepath fill
      } for
    pop
    } for
  } def
/vers { % position 48, PC char 179, vertical single
  newpath
  300 -200 moveto 300 800 lineto
  stroke
  } def
/rtss { % position 49, PC char 180, right tee single single
  newpath
  300 -200 moveto 300 800 lineto
  0 300 moveto 300 300 lineto
  stroke
  } def
/rtds { % position 50, PC char 181, right tee double single
  newpath
  300 -200 moveto 300 800 lineto
  0 200 moveto 300 200 lineto
  0 400 moveto 300 400 lineto
  stroke
  } def
/rtsd { % position 51, PC char 182, right tee single double
  newpath
  200 -200 moveto 200 800 lineto
  400 -200 moveto 400 800 lineto
  0 300 moveto 200 300 lineto
  stroke
  } def
/trsd { % position 52, PC char 183, top right single double
  newpath
  0 300 moveto 400 300 lineto 400 -200 lineto
  200 300 moveto 200 -200 lineto
  stroke
  } def
/trds { % position 53, PC char 184, top right double single
  newpath
  0 400 moveto 300 400 lineto 300 -200 lineto
  0 200 moveto 300 200 lineto
  stroke
  } def
/rtdd { % position 54, PC char 185, top right double double
  newpath
  400 -200 moveto 400 800 lineto
  0 200 moveto 200 200 lineto 200 -200 lineto
  0 400 moveto 200 400 lineto 200 800 lineto
  stroke
  } def
/verd { % position 55, PC char 186, vertical double
  newpath
  200 -200 moveto 200 800 lineto
  400 -200 moveto 400 800 lineto
  stroke
  } def
/trdd { % position 56, PC char 187, top right double double
  newpath
  0 400 moveto 400 400 lineto 400 -200 lineto
  0 200 moveto 200 200 lineto 200 -200 lineto
  stroke
  } def
/brdd { % position 57, PC char 188, bottom right double double
  newpath
  0 200 moveto 400 200 lineto 400 800 lineto
  0 400 moveto 200 400 lineto 200 800 lineto
  stroke
  } def
/brsd { % position 58, PC char 189, bottom right single double
  newpath
  0 300 moveto 400 300 lineto 400 800 lineto
  200 300 moveto 200 800 lineto
  stroke
  } def
/brds { % position 59, PC char 190, bottom right double single
  newpath
  0 200 moveto 300 200 lineto 300 800 lineto
  0 400 moveto 300 400 lineto
  stroke
  } def
/trss { % position 60, PC char 191, top right single single
  newpath
  0 300 moveto 300 300 lineto 300 -200 lineto
  stroke
  } def
/blss { % position 61, PC char 192, bottom left single single
  newpath
  300 800 moveto 300 300 lineto 600 300 lineto
  stroke
  } def
/btss { % position 62, PC char 193, bottom tee single single
  newpath
  0 300 moveto 600 300 lineto
  300 300 moveto 300 800 lineto
  stroke
  } def
/ttss { % position 63, PC char 194, top tee single single
  newpath
  0 300 moveto 600 300 lineto
  300 300 moveto 300 -200 lineto
  stroke
  } def
/ltss { % position 64, PC char 195, left tee single single
  newpath
  300 -200 moveto 300 800 lineto
  300 300 moveto 600 300 lineto
  stroke
  } def
/hors { % position 65, PC char 196, horizontal sngle
  newpath
  0 300 moveto 600 300 lineto
  stroke
  } def
/crss { % position 66, PC char 197, cross single single
  newpath
  0 300 moveto 600 300 lineto
  300 -200 moveto 300 800 lineto
  stroke
  } def
/ltds { % position 67, PC char 198, left tee double single
  newpath
  300 -200 moveto 300 800 lineto
  300 200 moveto 600 200 lineto
  300 400 moveto 600 400 lineto
  stroke
  } def
/ltsd { % position 68, PC char 199, left tee single double
  newpath
  200 -200 moveto 200 800 lineto
  400 -200 moveto 400 800 lineto
  400 300 moveto 600 300 lineto
  stroke
  } def
/bldd { % position 69, PC char 200, bottom left double double
  newpath
  200 800 moveto 200 200 lineto 600 200 lineto
  400 800 moveto 400 400 lineto 600 400 lineto
  stroke
  } def
/tldd { % position 70, PC char 201, top left double double
  newpath
  200 -200 moveto 200 400 lineto 600 400 lineto
  400 -200 moveto 400 200 lineto 600 200 lineto
  stroke
  } def
/btdd { % position 71, PC char 202, bottom tee double double
  newpath
  0 200 moveto 600 200 lineto
  0 400 moveto 200 400 lineto 200 800 lineto
  400 800 moveto 400 400 lineto 600 400 lineto
  stroke
  } def
/ttdd { % position 72, PC char 203, top tee double double
  newpath
  0 400 moveto 600 400 lineto
  0 200 moveto 200 200 lineto 200 -200 lineto
  400 -200 moveto 400 200 lineto 600 200 lineto
  stroke
  } def
/ltdd { % position 73, PC char 204, left tee double double
  newpath
  200 -200 moveto 200 800 lineto
  400 -200 moveto 400 200 lineto 600 200 lineto
  400 800 moveto 400 400 lineto 600 400 lineto
  stroke
  } def
/hord { % position 74, PC char 205, horizontal double
  newpath
  0 200 moveto 600 200 lineto
  0 400 moveto 600 400 lineto
  stroke
  } def
/crdd { % position 75, PC char 206, cross double double
  newpath
  0 400 moveto 200 400 lineto 200 800 lineto
  400 800 moveto 400 400 lineto 600 400 lineto
  400 -200 moveto 400 200 lineto 600 200 lineto
  0 200 moveto 200 200 lineto 200 -200 lineto
  stroke
  } def
/btds { % position 76, PC char 207, bottom tee double single
  newpath
  0 200 moveto 600 200 lineto
  0 400 moveto 600 400 lineto
  300 400 moveto 300 800 lineto
  stroke
  } def
/btsd { % position 77, PC char 208, bottom tee single double
  newpath
  0 300 moveto 600 300 lineto
  200 300 moveto 200 800 lineto
  400 300 moveto 400 800 lineto
  stroke
  } def
/ttds { % position 78, PC char 209, top tee double single
  newpath
  0 400 moveto 600 400 lineto
  0 200 moveto 600 200 lineto
  300 200 moveto 300 -200 lineto
  stroke
  } def
/ttsd { % position 79, PC char 210, top tee single double
  newpath
  0 300 moveto 600 300 lineto
  200 300 moveto 200 -200 lineto
  400 300 moveto 400 -200 lineto
  stroke
  } def
/blsd { % position 80, PC char 211, bottom left single double
  newpath
  200 800 moveto 200 300 lineto 600 300 lineto
  400 800 moveto 400 300 lineto
  stroke
  } def
/blds { % position 81, PC char 212, bottom left double single
  newpath
  300 800 moveto 300 200 lineto 600 200 lineto
  300 400 moveto 600 400 lineto
  stroke
  } def
/tlds { % position 82, PC char 213, top left double single
  newpath
  300 -200 moveto 300 400 lineto 600 400 lineto
  300 200 moveto 600 200 lineto
  stroke
  } def
/tlsd { % position 83, PC char 214, top left single double
  newpath
  200 -200 moveto 200 300 lineto 600 300 lineto
  400 -200 moveto 400 300 lineto
  stroke
  } def
/crsd { % position 84, PC char 215, cross single double
  newpath
  0 300 moveto 600 300 lineto
  200 -200 moveto 200 800 lineto
  400 -200 moveto 400 800 lineto
  stroke
  } def
/crds { % position 85, PC char 216, cross double single
  newpath
  0 200 moveto 600 200 lineto
  0 400 moveto 600 400 lineto
  300 -200 moveto 300 800 lineto
  stroke
  } def
/brss { % position 86, PC char 217, bottom right single single
  newpath
  0 300 moveto 300 300 lineto 300 800 lineto
  stroke
  } def
/tlss { % position 87, PC char 218, top left single single
  newpath
  300 -200 moveto 300 300 lineto 600 300 lineto
  stroke
  } def
/block { % position 88, PC char 219, solid full size block
  newpath
  0 -200 moveto 0 800 lineto 600 800 lineto 600 -200 lineto 0 -200 lineto
  closepath fill
  } def
/blockb { % position 89, PC char 220, solid bottom half block
  newpath
  0 -200 moveto 0 300 lineto 600 300 lineto 600 -200 lineto 0 -200 lineto
  closepath fill
  } def
/blockl { % position 90, PC char 221, solid left half block
  newpath
  0 -200 moveto 0 800 lineto 300 800 lineto 300 -200 lineto 0 -200 lineto
  closepath fill
  } def
/blockr { % position 91, PC char 222, solid right half block
  newpath
  300 -200 moveto 300 800 lineto 600 800 lineto
  600 -200 lineto 300 -200 lineto
  closepath fill
  } def
/blockt { % position 92, PC char 223, solid top half block
  newpath
  0 300 moveto 0 800 lineto 600 800 lineto 600 300 lineto 0 300 lineto
  closepath fill
  } def
/updowna { % position 93, PC char 18, up and down pointing arrow
  /Symbol findfont 1000 scalefont setfont
  0 -150 moveto (\255) show
  0 -150 moveto (\257) show
  } def
/uarrowhead { % position 94, PC char 30, upwards arrow head
  newpath
  0 0 moveto 600 0 lineto 300 700 lineto 0 0 lineto
  closepath fill
  } def
/darrowhead { % position 95, PC char 31, downwards arrow head
  newpath
  0 700 moveto 600 700 lineto 300 0 lineto 0 700 lineto
  closepath fill
  } def
/ltrcorn { % position 96, PC char 170, little top right corner
  newpath
  0 300 moveto 570 300 lineto 570 0 lineto
  stroke
  } def
/sup2 { % position 97, PC char 253, superscript 2
  /Times-Roman findfont 600 scalefont setfont
  120 380 moveto (2) show
  } def
/squaredot { % position 98, PC char 254, centered square dot
  newpath
  200 200 moveto 200 400 lineto 400 400 lineto 400 200 lineto 200 200 lineto
  closepath fill
  } def
/whitedot { % position 99, PC char 8, black square with white dot
  newpath
  0 0 moveto 0 600 lineto 600 600 lineto 600 0 lineto 0 0 lineto
  closepath fill
  300 300 150 0 360 arc closepath 1 setgray fill
  } def
/circle { % position 100, PC char 9, large circle
  newpath
  300 300 270 0 360 arc closepath stroke
  } def
/whitecircle { % position 101, PC char 10, black square with white circle
  newpath
  0 0 moveto 0 600 lineto 600 600 lineto 600 0 lineto 0 0 lineto
  closepath fill
  300 300 225 0 360 arc closepath 100 setlinewidth 1 setgray stroke
  } def
/mars { % position 102, PC char 11, mars masculine
  newpath
  200 200 170 0 360 arc closepath stroke
  341 341 moveto 470 470 lineto stroke
  550 550 moveto 550 390 lineto 390 550 lineto 550 550 lineto
  closepath fill
  } def
/venus { % position 103, PC char 12, venus feminine
  newpath
  300 500 170 0 360 arc closepath stroke
  300 0 moveto 300 300 lineto 150 150 moveto 450 150 lineto stroke
  } def
/quaver { % position 104, PC char 13, quaver
  300 150 translate
  gsave 30 rotate 1.5 1 scale
  newpath -100 0 100 0 360 arc closepath fill grestore
  newpath
  0 0 moveto 0 550 lineto stroke
  0 550 moveto 0 0 200 550 200 120 curveto
  200 550 0 550 0 500 curveto closepath fill
  } def
/doublequaver { % position 105, PC char 14, two joined quavers
  newpath
  250 300 moveto 250 700 lineto 550 550 lineto 550 150 lineto stroke
  gsave 250 300 translate 30 rotate 1.5 1 scale
  newpath -100 0 100 0 360 arc closepath fill grestore
  gsave 550 150 translate 30 rotate 1.5 1 scale
  newpath -100 0 100 0 360 arc closepath fill grestore
  } def
end

/BuildChar {
  600 0 setcharwidth
  0 setgray
  60 setlinewidth
  0 setlinecap
  exch begin
    Encoding exch get
    CharProcs exch get
  end
  exec
  } def
end

/IBMextended newfont definefont pop
%End of definition of IBMextended
------------------------------------------------------------------------------
T.Clark@warwick.ac.uk                            | Post: Computing Services
JANET: T.Clark@uk.ac.warwick                      \      University of Warwick
Internet: T.Clark%warwick.ac.uk@nsfnet-relay.ac.uk |     Coventry,  UK
EARN/BITNET: T.Clark%warwick.ac.uk@UKACRL         /      CV4  7AL
UUCP:  T.Clark%warwick.ac.uk@ukc.uucp            | Phone: +44 203 523224