%!PS-Adobe-2.0
/r 360 26 div def % degrees in each segment
/Tempstr 2 string def % for writing value to a string
/Helvetica-Bold findfont 18 scalefont setfont
/radius 120 def % size of outer circle

/circleofLetters {
  [(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)]
  /ary exch def % the array of letters
  0 1 25{ % from 0 to 25 in steps of 1
    /ind exch def % the for loop value
    gsave
      ind r mul neg rotate % rotate by (for loop value)*360/26
      ary ind get stringwidth pop 2 div neg radius 30 add moveto
      ary ind get show
      % convert ind to string, store in Tempstr, using cvs
      ind Tempstr cvs stringwidth pop 2 div neg radius 10 add moveto
      ind Tempstr cvs show
      3 setlinewidth
      0 radius 50 add moveto 0 20 rlineto stroke
    grestore
  } for
}def

/circles {
   3 setlinewidth
   0 0 radius 60 add 0 360 arc stroke
   0 0 6 0 360 arc stroke
   1 setlinewidth 
   0 0 radius 80 add 0 360 arc [5 3] 0 setdash stroke
} def

/arrowhead {
  newpath 0 radius 78 add moveto
  -5 -12 rlineto 10 0 rlineto closepath fill
} def

/doitall {
  newpath 
  -306 -396 moveto 612 0 rlineto 0 792 rlineto -612 0 rlineto
  closepath stroke
  circleofLetters circles arrowhead
  /Helvetica-Bold findfont 13 scalefont setfont
  -45 50 moveto (Inner letters are) show
  -60 35 moveto (plaintext characters) show
  -80 -50 moveto (Set arrow on pad character) show
  -75 radius 100 add neg moveto ((Cut along dashed line.))show
} def

306 396 translate % 0.6 0.6 scale
doitall showpage