ps_macros()
{
   printf("%%! PS-Adobe-1.0: For Apple LaserWriter\n");
   printf("%% default font is 10 pt. Helvetica\n");
   printf("/basefont {/Helvetica findfont 10 scalefont setfont} def\n");

   printf("/mm {72.27 mul 25.4 div} def\n");   /* Specify millimeters */

   printf("/M\n");                             /* Move macro */
   printf("{\n");
   printf("    /Ymove exch def\n");
   printf("    /Xmove exch def\n");
   printf("    Xmove mm Ymove mm moveto\n");
   printf("} def\n");

   printf("/R\n");                             /* Relative move macro */
   printf("{\n");
   printf("    /Yrmove exch def\n");
   printf("    /Xrmove exch def\n");
   printf("    Xrmove mm Yrmove mm rmoveto\n");
   printf("} def\n");

   printf("/D\n");                             /* Draw macro */
   printf("{\n");
   printf("    /Ydraw exch def\n");
   printf("    /Xdraw exch def\n");
   printf("    Xdraw mm Ydraw mm lineto\n");
   printf("} def\n");

   printf("/I\n");                             /* Relative draw  macro */
   printf("{\n");
   printf("    /Yrdraw exch def\n");
   printf("    /Xrdraw exch def\n");
   printf("    Xrdraw mm Yrdraw mm rlineto\n");
   printf("} def\n");
   /*
    *          Procedure to change font and size of font
    *          ---->   font size Font    <----
    */
   printf("/Font\n");
   printf("{\n");
   printf("    /Height exch def\n");
   printf("    /FontName exch def\n");
   printf("    FontName findfont Height mm scalefont setfont\n");
   printf("} def\n");
   /*
    *          Procedure to change font, width, slant and height
    *          ---->   font width height slant DefFont    <----
    *
    *  Note: slant = height * tan( slant_angle )
    */
   printf("/DefFont\n");
   printf("{\n");
   printf("    /Slant exch def\n");
   printf("    /Height exch def\n");
   printf("    /Width exch def\n");
   printf("    /FontName exch def\n");
   printf("    FontName findfont [ Width mm 0 Slant mm Height mm 0 0] makefont setfont\n");
   printf("} def\n");
   /*
    *          General Text Layout Procedure
    *          ---->   x y pos_num angle (text) Text    <----
    */
   printf("/Text\n");
   printf("{\n");
   printf("    /String exch def\n");
   printf("    /Angle exch def\n");
   printf("    /Position exch def\n");
   printf("    /Ymove exch def\n");
   printf("    /Xmove exch def\n");
   printf("    Position 1 lt {/hpf 0 def /lpf 0 def} if\n");
   printf("    Position 1 eq {/hpf 0 def /lpf 0 def} if\n");
   printf("    Position 2 eq {/hpf 0 def /lpf 0.5 def} if\n");
   printf("    Position 3 eq {/hpf 0 def /lpf 1 def} if\n");
   printf("    Position 4 eq {/hpf 0.5 def /lpf 0 def} if\n");
   printf("    Position 5 eq {/hpf 0.5 def /lpf 0.5 def} if\n");
   printf("    Position 6 eq {/hpf 0.5 def /lpf 1 def} if\n");
   printf("    Position 7 eq {/hpf 1 def /lpf 0 def} if\n");
   printf("    Position 8 eq {/hpf 1 def /lpf 0.5 def} if\n");
   printf("    Position 9 eq {/hpf 1 def /lpf 1 def} if\n");
   printf("    Position 9 gt {/hpf 1 def /lpf 1 def} if\n");
   printf("    /StrLen String stringwidth pop lpf mul def\n");
   printf("    /StrHt Height mm hpf mul def\n");
   printf("    /Xdiff StrHt Angle sin mul StrLen Angle cos mul sub def\n");
   printf("    /Ydiff StrHt Angle cos mul StrLen Angle sin mul add def\n");
   printf("    Xmove mm Xdiff add Ymove mm Ydiff sub moveto\n");
   printf("    gsave\n");
   printf("        Angle rotate\n");
   printf("        String show\n");
   printf("    grestore\n");
   printf("    /PosterOnly 0 def\n");
   printf("} def\n");
   /*
    *          Ellipse and Circle procedure.
    *  ---->   xcen ycen xrad yrad start_angle end_angle Ellipse   <----
    */
   printf("/EllipseDict 8 dict def\n");
   printf("EllipseDict /mtrx matrix put\n");
   printf("/Ellipse \n");
   printf("{   EllipseDict begin\n");
   printf("    /endangle exch def\n");
   printf("    /startangle exch def\n");
   printf("    /yradius exch def\n");
   printf("    /xradius exch def\n");
   printf("    /ycenter exch def\n");
   printf("    /xcenter exch def\n");
   printf("    /savematrix mtrx currentmatrix def\n");
   printf("    xcenter mm ycenter mm translate\n");
   printf("    xradius mm yradius mm div 1 scale\n");
   printf("    newpath\n");
   printf("        0 0 xradius mm startangle endangle arc\n");
   printf("    stroke\n");
   printf("    savematrix setmatrix\n");
   printf("    end\n");
   printf("} def\n");

   printf("basefont\n");               /* Set the default font */
   printf("1 setlinecap\n");           /* Use round caps */
   printf("1 setlinejoin\n");          /* Use round joins */
   printf("3 setmiterlimit\n");        /* Bevel small angle miters */
}