%!PS-Adobe-2.0
/r 360 26 div def
/inch { 72 mul} def
/Tempstr 2 string def
/radius 225 def

/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
    /rind ind 0 eq {0} {26 ind sub} ifelse def
    gsave
      ind r mul neg rotate % rotate by (for loop value)*360/26
      /Helvetica-Bold findfont 23 scalefont setfont
      ary ind get stringwidth pop 2 div neg radius 5 sub moveto
      ary ind get show
      % convert ind to string, store in Tempstr, using cvs
      ind Tempstr cvs stringwidth pop 2 div neg radius 25 add moveto
      ind Tempstr cvs show
      3 setlinewidth
      0 radius 30 sub moveto 0 20 rlineto stroke
    grestore
  } for
}def

/circles {
   3 setlinewidth
   newpath 0 0 radius 20 sub 0 360 arc stroke
   newpath 0 0 6 0 360 arc stroke
} def

/Helvetica-Bold findfont 15 scalefont setfont
40 80 moveto (Place arrow of inner circle on pad character.) show

/Helvetica-Bold findfont 15 scalefont setfont
40 60 moveto (To encrypt, follow inner circle plaintext letter to outer circle ciphertext letter.) show

/Helvetica-BoldOblique findfont 15 scalefont setfont
40 40 moveto (To decrypt, follow outer circle ciphertext letter to inner circle plaintext letter.) show

/Helvetica-BoldOblique findfont 15 scalefont setfont
130 700 moveto (Outer letters belong to the ciphertext or to the pad.) show

8.5 inch 2 div 11 inch 2 div translate
-90 20 moveto (Attach smaller circle here.) show
circleofLetters
circles
showpage