% Stroked circle % follows the idiom of builtin arc where X Y are parameters % (i.e. not the ~moveto~ then ~show~ idiom of text) % /SCIRC % X Y R SCIRC { /R exch def /Y exch def /X exch def newpath X Y R 0.0 360.0 arc closepath stroke } bind def % Font load /FL % SZ NAME FL { findfont exch scalefont setfont } bind def % HREPEAT /HREPEAT % N X Y DX PROC { /PROC exch def /DX exch def /Y exch def /X exch def /N exch def N { X Y PROC X DX add /X exch def } repeat } bind def % VREPEAT /VREPEAT % N X Y DY PROC { /PROC exch def /DY exch def /Y exch def /X exch def /N exch def N { X Y PROC Y DY add /Y exch def } repeat } bind def % XFORALL /XFORALL % X Y DX ARR PROC { /PROC exch def /ARR exch def /DX exch def /Y exch def /X exch def ARR { /A1 exch def X Y A1 PROC X DX add /X exch def } forall } bind def % YFORALL /YFORALL % X Y YX ARR PROC { /PROC exch def /ARR exch def /DY exch def /Y exch def /X exch def ARR { /A1 exch def X Y A1 PROC Y DY add /Y exch def } forall } bind def % XYSHOW /XYSHOW % X Y STR { /STR exch def /Y exch def /X exch def X Y moveto STR show } bind def % APPLY2 - apply a procedure taking 2 arguments to an % array with 2 elems (pair) /APPLY2 % ARR PROC APPLY2 { /PROC exch def /ARR exch def /S1 ARR 0 get def /S2 ARR 1 get def S1 S2 PROC } bind def gsave 12 /Helvetica FL gsave 5 100 100 20 { 5 SCIRC } HREPEAT 10 100 200 15 { /Y exch def /X exch def X Y moveto (o) show } HREPEAT 7 300 100 15 { (A) XYSHOW } VREPEAT 300 300 50 [5 10 15 20] { SCIRC } XFORALL 100 300 -15 [(1) (2) (3) (4)] { XYSHOW } YFORALL grestore showpage