#! /bin/sh
# This is a shell archive.  Remove anything before this line, then feed it
# into a shell via "sh file" or similar.  To overwrite existing files,
# type "sh file -c".
# The tool that generated this appeared in the comp.sources.unix newsgroup;
# send mail to comp-sources-unix@uunet.uu.net if you want that tool.
# Contents:  vision vision/README vision/cross.ps vision/header.ps
#   vision/omarker.ps vision/one_bar.ps vision/three_bars.ps
#   vision/two_bars.ps vision/xmarker.ps
# Wrapped by jgm@vegas on Fri Mar 26 20:17:25 1993
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
echo If this archive is complete, you will see the following message:
echo '          "shar: End of archive."'
if test ! -d 'vision' ; then
    echo shar: Creating directory \"'vision'\"
    mkdir 'vision'
fi
if test -f 'vision/README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vision/README'\"
else
  echo shar: Extracting \"'vision/README'\" \(1108 characters\)
  sed "s/^X//" >'vision/README' <<'END_OF_FILE'
XHi everyone!
X
XEnclosed are some tools I thought might be of general interest.
X
XThese files are PostScript enhancements to the original AAAI Robot
XContest PostScript markers. They can be rotated and translated in
X3-space.  Brown University is using them to automatically make bitmaps
Xthat can be fed into our vision algorithms, for testing under ideal
Xconditions. As such, the files are set up to print to the screen only.
XYou can make them print to printers with a little alteration.
X
XEdit a line in the PostScript file to turn the grid off. It helps
Xme think in 3-space, however, so I left it on as a default.
X
XTo view them with an on-line PostScript previewer, no editing is needed.
X
XTo print them, you will need to prepend "header.ps" to the front of all
Xthe other PostScript files, and comment out the line "(header.ps) run".
X
XPlease send comments and questions to me.
X
X%! Jon Monsarrat    jgm@cs.brown.edu    moderator, comp.sources.postscript %! 
X0 0 moveto 15 setlinewidth(qlllll-??LHHL??llH?hH7t,7olCAHH@)1 setlinejoin{dup
X10 mul rotate 80 lt{50 0 rlineto}{50 0 rmoveto}ifelse}forall stroke showpage
END_OF_FILE
  if test 1108 -ne `wc -c <'vision/README'`; then
    echo shar: \"'vision/README'\" unpacked with wrong size!
  fi
  # end of 'vision/README'
fi
if test -f 'vision/cross.ps' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vision/cross.ps'\"
else
  echo shar: Extracting \"'vision/cross.ps'\" \(279 characters\)
  sed "s/^X//" >'vision/cross.ps' <<'END_OF_FILE'
X%! PostScript hack by Jon Monsarrat, jgm@cs.brown.edu.
X(header.ps) run
X/lw {2 inch} def      % The thickness of the lines
X
X% The cross
X
Xlw setlinewidth
X
Xnewpath
X6 inch 1 inch moveto
X6 inch 11 inch lineto
Xstroke
X
Xnewpath
X1 inch 6 inch moveto
X11 inch 6 inch lineto
Xstroke
Xshowpage
END_OF_FILE
  if test 279 -ne `wc -c <'vision/cross.ps'`; then
    echo shar: \"'vision/cross.ps'\" unpacked with wrong size!
  fi
  # end of 'vision/cross.ps'
fi
if test -f 'vision/header.ps' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vision/header.ps'\"
else
  echo shar: Extracting \"'vision/header.ps'\" \(15804 characters\)
  sed "s/^X//" >'vision/header.ps' <<'END_OF_FILE'
X%! PostScript hack by Jon Monsarrat, jgm@cs.brown.edu.
X%
X% Welcome to Jon's happy contest hack. You can display the objects in the
X% robot contest in all manner of 3D rotations and translations. You can
X% use this program to automatically generate lots of bitmaps that you
X% can feed directly into your vision algorithms for ideal testing.
X%
X% This code is based on "The PostScript Zone", which is a 3D PostScript
X% package available from wilma.cs.brown.edu:pub/zone.tar.Z.
X%
X% Please send me email with questions and comments.
X%
X
X%%%%%%%%%%%%% A WHOLE BUNCH OF UGLY STUFF COMES HERE. %%%%%%%%%%%%%%%%%%%%%%
X%%%%%%%%%  SEE THE END OF THIS FILE FOR STUFF TO CHANGE  %%%%%%%%%%%%%%%%%%%
X
X%! zone.ps - a library of routines for a 3D PostScript superset language
X%% Copyright 1991 by Kevin Iga and Jon Monsarrat
X%% Permission given to do anything with this except sell it or strip this header
X
X/negsz3 -500 def   % defined negatively for faster calculation
X/dz3 500 def
X
X/drawmatrix matrix currentmatrix def
X4.25 72 mul 5.5 72 mul translate
X/printmatrix matrix currentmatrix def
Xdrawmatrix setmatrix
X
X% Build a separate dictionary "threedict" which contains 11 variables: ctm3
X% blnkctm3, currpt3stack, thistransform, destarry, i,j,a,b, stackptr3, ctm3stack
X/threeddict 11 dict def  % Adjust the number 11 when adding new variables.
Xthreeddict begin
X/blnkctm3 [1 0 0 0 1 0 0 0 1 0 0 0] def
X/ctm3 12 array def
X/thistransform 12 array def
X/tmp null def
X/ctm3stack [ 31 {[1 0 0 0 1 0 0 0 1 0 0 0]} repeat ] def  %31 is the max
X/currpt3stack [ 31 {[0 0 0]} repeat ] def                 %level in stack
X/stackptr3 0 def
Xend
X
X%%%%%%%%%%%%%   x y z    project3d    x' y'  %%%%%%%%%%%%%%%%%%%%
X% project3d returns the 2D location of the 3D point projected onto printer page
X/project3d { dz3 sub negsz3 div 3 -1 roll 1 index div 3 1 roll div } bind def
X
X%%%%%%%% [matrixa] [matrixb] [destarry]   concatmatrix3   [destarry] %%%%%%%%
X%% concatmatrix3 takes two 12-element arrays intended for 3-d transformation
X%% matrices and a 12-element destination array.  The destination array will
X%% be filled with the contents of the matrix product of the first two
X%% arrays.
X%%   Remember that points are row matrices, and transformation goes left to
X%%   right, but zone goes from user-coords to standard coords, while the
X%%   the user is going the other direction, so if you want to do A then B,
X%%   say B A destarry concatmatrix3.
X/concatmatrix3
X{
X  threeddict begin
X  /destarry exch def
X  [ exch { } forall 14 -1 roll { } forall
X  % index 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2
X  % stack  m  p  q  r  s  t  u  v  w  x  y  z  a  b  c  d  e f g h i j k l
X  %             index    index+1      index+1    index+2    index+2   index+3
X destarry  0 13 index 26 index mul 13 index   24 index mul 13 index 22 index mul
X             add add put
X destarry  1 13 index 25 index mul 13 index   23 index mul 13 index 21 index mul
X             add add put
X destarry  2 13 index 24 index mul 13 index   22 index mul 13 index 20 index mul
X             add add put
X destarry  3 10 index 26 index mul 10 index   24 index mul 10 index 22 index mul
X             add add put
X destarry  4 10 index 25 index mul 10 index   23 index mul 10 index 21 index mul
X             add add put
X destarry  5 10 index 24 index mul 10 index   22 index mul 10 index 20 index mul
X             add add put
X destarry  6  7 index 26 index mul  7 index   24 index mul  7 index 22 index mul
X             add add put
X destarry  7  7 index 25 index mul  7 index   23 index mul  7 index 21 index mul
X             add add put
X destarry  8  7 index 24 index mul  7 index   22 index mul  7 index 20 index mul
X             add add put
X destarry  9  4 index 26 index mul  4 index   24 index mul  4 index 22 index mul
X             add add 17 index add put
X destarry 10  4 index 25 index mul  4 index   23 index mul  4 index 21 index mul
X             add add 16 index add put
X destarry 11  4 index 24 index mul  4 index   22 index mul  4 index 20 index mul
X             add add 15 index add put
X cleartomark
X destarry
X end
X} bind def
X
X%%%%%%%%%%%%%% x y z    transform3    x' y' z'  %%%%%%%%%%%%
X%%%%%%%% x y z matrix   transform3    x' y' z'  %%%%%%%%%%%%
X%% transform3 takes the three given coordinates and transforms them with matrix.
X%% If matrix is omitted, the CTM3 is used.
X/transform3
X{
X  threeddict begin
X  dup type /arraytype ne {ctm3} if [ 5 1 roll { } forall
X  % index  14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
X  % stack   x  y  z  a  b  c  d  e  f  g  h  i  j  k  l
X  %  index    ind+1        ind+1    ind+2       ind+2    ind+3
X  11 index 15 index mul  9 index 15 index mul 7 index 15 index mul add add
X            3 index add
X  %  ind+1    ind+2        ind+2    ind+3       ind+3    ind+4
X  11 index 16 index mul  9 index 16 index mul 7 index 16 index mul add add
X            3 index add
X  %  ind+2    ind+3        ind+3    ind+4       ind+4    ind+5
X  11 index 17 index mul  9 index 17 index mul 7 index 17 index mul add add
X            3 index add
X  19 3 roll cleartomark
X  end
X} bind def
X
X%%%%%%%%%%%%%% dx dy dz    dtransform3    dx' dy' dz'  %%%%%%%%%%%%
X%%%%%%%% dx dy dz matrix   dtransform3    dx' dy' dz'  %%%%%%%%%%%%
X%% dtransform3 is like transform3 but works for dx dy dz
X%% (where translation has no effect)
X/dtransform3
X{
X  threeddict begin
X  dup type /arraytype ne {ctm3} if [ 5 1 roll { } forall
X  % index  14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
X  % stack   x  y  z  a  b  c  d  e  f  g  h  i  j  k  l
X  %  index    ind+1        ind+1    ind+2       ind+2    ind+3
X  11 index 15 index mul  9 index 15 index mul 7 index 15 index mul add add
X  %  ind+1    ind+2        ind+2    ind+3       ind+3    ind+4
X  11 index 16 index mul  9 index 16 index mul 7 index 16 index mul add add
X  %  ind+2    ind+3        ind+3    ind+4       ind+4    ind+5
X  11 index 17 index mul  9 index 17 index mul 7 index 17 index mul add add
X  19 3 roll cleartomark
X  end
X} bind def
X
X%%%%%%%%%%%%%% x y z    itransform3    x' y' z'  %%%%%%%%%%%%
X%%%%%%%% x y z matrix   itransform3    x' y' z'  %%%%%%%%%%%%
X%% itransform takes the inverse of matrix and transforms x y z by it.
X/itransform3
X{
X  threeddict begin
X  dup type /arraytype ne {ctm3} if
X  thistransform invertmatrix3 transform3
X  end
X} bind def
X
X%%%%%%%%%%%%%% dx dy dz    idtransform3    dx' dy' dz'  %%%%%%%%%%%%
X%%%%%%%% dx dy dz matrix   idtransform3    dx' dy' dz'  %%%%%%%%%%%%
X%% idtransform3 is like itransform3 and dtransform3.  Figure it out.
X%% You're a smart boy.
X/idtransform3
X{
X  threeddict begin
X  dup type /arraytype ne {ctm3} if
X  thistransform invertmatrix3 dtransform3
X  end
X} bind def
X
X/concat3 {threeddict begin ctm3 ctm3 concatmatrix3 pop end} bind def
X/matrix3 {threeddict begin blnkctm3 12 array def copy end} bind def
X/setmatrix3 {threeddict begin ctm3 copy pop end} def
X/initmatrix3 {threeddict begin blnkctm3 ctm3 copy pop end} bind def
X/defaultmatrix3 {initmatrix3} bind def
X/identmatrix3 {threeddict begin blnkctm3 exch copy end} def
X/currentmatrix3 {threeddict begin ctm3 exch copy end} def
X
X%% x y z [matrix] matrixorctm3 false x y z
X%% x y z matrixorctm3 true x y z
X%% theta [matrix] rotmatrixorctm3 false theta
X%% theta rotmatrixorctm3 true theta
X%% useful to allow 2 options, one with specifying matrix, one without, for
X%% transformations. Assigns /tmp to point to the matrix or ctm3, depending
X%% on if matrix is given.
X/matrixorctm3 {
X   dup type /arraytype ne dup
X      {4 1 roll /tmp thistransform def}
X      {5 1 roll /tmp exch def} ifelse
X} bind def
X/rotmatrixorctm3 {
X   dup type /arraytype ne dup
X     {exch /tmp thistransform def}
X     {3 1 roll /tmp exch def} ifelse
X} bind def
X
X%% tx ty tz translate3
X%% tx ty tz [matrix] translate3 [matrix]
X/translate3 {threeddict begin
X   matrixorctm3
X   tmp identmatrix3 exch 11 exch put
X   tmp exch 10 exch put
X   tmp exch 9 exch put 
X   tmp exch {concat3} if end} bind def
X
X%% sx sy sz scale3
X%% sx sy sz [matrix] scale3 [matrix]
X/scale3 {threeddict begin
X   matrixorctm3
X   tmp identmatrix3 exch 8 exch put
X   tmp exch 4 exch put
X   tmp exch 0 exch put 
X   tmp exch {concat3} if end} bind def
X
X%% angle rotatex3
X%% angle [matrix] rotatex3 [matrix]
X/rotatex3 {threeddict begin
X   rotmatrixorctm3
X   dup sin exch cos dup 3 -1 roll dup
X   tmp identmatrix3 exch 5 exch neg put
X   tmp exch 7 exch put
X   tmp exch 4 exch put
X   tmp exch 8 exch put
X   tmp exch {concat3} if end} bind def
X
X%% angle rotatey3
X%% angle [matrix] rotatey3 [matrix]
X/rotatey3 {threeddict begin
X   rotmatrixorctm3
X   dup sin exch cos dup 3 -1 roll dup
X   tmp identmatrix3 exch 2 exch neg put
X   tmp exch 6 exch put
X   tmp exch 0 exch put
X   tmp exch 8 exch put
X   tmp exch {concat3} if end} bind def
X
X%% angle rotatez3
X%% angle [matrix] rotatez3 [matrix]
X/rotatez3 {threeddict begin
X   rotmatrixorctm3
X   dup sin exch cos dup 3 -1 roll dup
X   tmp identmatrix3 exch 1 exch neg put
X   tmp exch 3 exch put
X   tmp exch 0 exch put
X   tmp exch 4 exch put
X   tmp exch {concat3} if end} bind def
X
X/rotate3 {rotatez3} bind def
X/newpath3 {newpath} bind def
X/reversepath3 {reversepath} bind def
X/stroke3 {stroke} bind def
X/closepath3 {closepath} bind def
X/flattenpath3 {} bind def
X/strokepath3 {strokepath} bind def
X
X%%%%%%%%%%%%%%%   matrix destarry invertmatrix3  destarry  %%%%%%%%%%%%%%%%%%%
X%% Inverts the 12-element array matrix, and putting the result in destarry.
X/invertmatrix3
X{
X  /destarry exch def
X  /tmp exch def
X  % 0 1 2 3 4 5 6 7 8 9 10 11  get from tmp
X  % a b c d e f g h i j k  l
X  threeddict begin [
X  % put our six mid-calculation values on stack
X  tmp 0 get tmp 4 get tmp 8 get mul mul % S ind 8
X  tmp 0 get tmp 5 get tmp 7 get mul mul % P ind 8
X  tmp 3 get tmp 2 get tmp 7 get mul mul % C ind 6
X  tmp 3 get tmp 1 get tmp 8 get mul mul % F ind 6
X  tmp 6 get tmp 1 get tmp 5 get mul mul % W ind 4
X  tmp 6 get tmp 4 get tmp 2 get mul mul % R ind 4
X  6 copy sub sub sub sub sub             % Det   - index 3 (always 2+1)
X  destarry  0 8 index 8 index sub tmp 0 get div 3 index div put
X  destarry  1 6 index 6 index sub tmp 3 get div 3 index div put
X  destarry  2 4 index 4 index sub tmp 6 get div 3 index div put
X
X  destarry  3 4 index 6 index sub tmp 1 get div 3 index div put
X  destarry  4 8 index 4 index sub tmp 4 get div 3 index div put
X  destarry  5 6 index 8 index sub tmp 7 get div 3 index div put
X
X  destarry  6 6 index 4 index sub tmp 2 get div 3 index div put
X  destarry  7 4 index 8 index sub tmp 5 get div 3 index div put
X  destarry  8 8 index 6 index sub tmp 8 get div 3 index div put
X
X  destarry  9 tmp 9  get destarry 0  get mul 
X              tmp 10 get destarry 3  get mul add
X              tmp 11 get destarry 6  get mul add -1 mul put
X  destarry 10 tmp 9  get destarry 1  get mul 
X              tmp 10 get destarry 4  get mul add
X              tmp 11 get destarry 7  get mul add -1 mul put
X  destarry 11 tmp 9  get destarry 2  get mul 
X              tmp 10 get destarry 5  get mul add
X              tmp 11 get destarry 8 get mul add -1 mul put
X  cleartomark
X  destarry
X  end
X} bind def
X
X%% currentpoint3 returns the untransformed point; currentpt3 returns the
X%% transformed point.
X%% syntax: currentpt3 x y z
X%% syntax: currentpoint3 x y z
X/currentpt3 {threeddict begin currpt3stack stackptr3 get {} forall end} bind def
X/currentpoint3 { threeddict begin currentpt3 itransform3 end } bind def
X
X%% gsave3
X/gsave3 {threeddict begin gsave /stackptr3 stackptr3 dup 1 add ctm3stack
X   dup 3 index get exch 2 index get copy pop
X   currpt3stack dup 3 index get exch 2 index get copy pop
X   exch pop def /ctm3 ctm3stack stackptr3 get def end} bind def
X%% grestore3
X/grestore3 {threeddict begin /stackptr3 stackptr3 1 sub def /ctm3 ctm3stack
X   stackptr3 get def end grestore} bind def
X%% grestoreall3
X/grestoreall3 {threeddict begin grestoreall /stackptr3 0 def
Xinitmatrix3 0 0 0 storecurpt3 ctm3stack 0 ctm3 put def
Xend} bind def
X
X%% syntax: x y z storecurpt3 x y z
X%% useful to store the current point where currentpoint3 can find it later.
X%% used by moveto3 and lineto3.
X/storecurpt3 {threeddict begin
X   currpt3stack stackptr3 get dup 2 3 index put dup 1 4 index put 0 4 index put
X   end } bind def
X
X/moveto3 {transform3 storecurpt3 project3d printmatrix setmatrix
X   moveto drawmatrix setmatrix} bind def
X/lineto3 {transform3 storecurpt3 project3d printmatrix setmatrix
X   lineto drawmatrix setmatrix} bind def
X
X%% rto is used in rlineto and rmoveto to compute where to move to
X%% x y z rto3 x+cx y+cy z+cz
X/rto3 {dtransform3 currentpt3 4 -1 roll add exch 4 -1 roll add 4 -2 roll
X   add 3 1 roll exch} bind def
X
X/rmoveto3 {rto3 storecurpt3 project3d printmatrix setmatrix moveto
X   drawmatrix setmatrix} bind def
X/rlineto3 {rto3 storecurpt3 project3d printmatrix setmatrix lineto
X   drawmatrix setmatrix} bind def
X
Xgrestoreall3    % this has to be here to set up ctm3 and 3D graphics stack
X
X%!
X/tmpmatrix2 6 array def
X
X%make your own 3-d transformations like rotatex3 et al. now
X/linctm3 12 array currentmatrix3 def
Xinitmatrix3
X
X%% syntax: x y linwarp2 x' y' z'
X/linwarp2 { 0 linctm3 transform3} def
X
X/moveto2 {linwarp2 moveto3} def
X/lineto2 {linwarp2 lineto3} def
X/curveto2 {} def
X/closepath2 {closepath} def
X
X/imbedpath2 {
Xflattenpath
Xtmpmatrix2 currentmatrix pop
Xinitmatrix
X[
X{/moveto2} {/lineto2} {/curveto2} {/closepath2} pathforall
X] newpath
X{dup type /nametype eq {cvx exec} if} forall
Xtmpmatrix2 setmatrix
X} def
X
X
X%%% Please don't change the following two lines.
Xinitmatrix3           % Initializes our 3D system. Ignore this line.
X/inch {72 mul} def    % Defines an inch as a unit of measurement.
X
X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X%%%%%%%%%%%%%  END OF STUFF YOU SHOULDN'T TOUCH  %%%%%%%%%%%%%%%%%%%%%
X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X
X%%%% THE FOLLOWING ARE LINES YOU CAN PLAY WITH TO CUSTOMIZE THE IMAGE %%%%
X%
X% You can move the image around in 3-space by doing a translation.
X% The coordinate system is in the middle of the page, with the X axis
X% pointing to the right and the Y axis pointing up. The Z axis points out
X% of the page. So to move the image back 50 inches, up 2 inches and over
X% 1 inch, use "1 inch 2 inch -50 inh translate3" as shown in the below example.
X
X
X1 inch 2 inch -50 inch translate3    % a 3D translation
X
X
X% You can also rotate the image. Rotations are specified in degree of
X% rotation around each of the 3 axis.
X
X
X10 rotatex3   % rotation in the x direction
X60 rotatey3   % rotation in the y direction
X0 rotatez3    % rotation in the z direction
X
X
X% You can specify that a grid should appear behind the object, by
X% making this flag true. Set it to false to not see the grid.
X
Xtrue          % Do you want to see the grid?
X
X%%%%%%%%%% END OF LINES YOU CAN PLAY WITH TO CUSTOMIZE THE IMAGE %%%%%%%%%%%%
X
X%%%%%%%%%%%%% You shouldn't change any of the lines below here. %%%%%%%%%%%%
X% The next few lines are initialization stuff I need to have happen. Ignore.
X/Grid exch def
X/linctm3 12 array currentmatrix3 def
Xinitmatrix3
X
X% uncomment these to see the grid
X
XGrid {
X  -400 50 400 {-400 moveto 0 800 rlineto imbedpath2 stroke} for
X  -400 50 400 {-400 exch moveto 800 0 rlineto imbedpath2 stroke} for
X} if
X
X-6 inch -6 inch translate   % approximately center the cross on the origin
X
X/stroke                     % Magic. Don't touch!
X{
X  strokepath
X  imbedpath2 fill
X} bind def
X
X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
END_OF_FILE
  if test 15804 -ne `wc -c <'vision/header.ps'`; then
    echo shar: \"'vision/header.ps'\" unpacked with wrong size!
  fi
  # end of 'vision/header.ps'
fi
if test -f 'vision/omarker.ps' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vision/omarker.ps'\"
else
  echo shar: Extracting \"'vision/omarker.ps'\" \(303 characters\)
  sed "s/^X//" >'vision/omarker.ps' <<'END_OF_FILE'
X%! PostScript hack by Jon Monsarrat, jgm@cs.brown.edu.
X(header.ps) run
X/lw {2 inch} def      % The thickness of the lines
X
X% One bar
X
Xlw setlinewidth
X
Xnewpath
X2 inch 2 inch moveto
X11 inch 2 inch lineto
X11 inch 9 inch lineto
X3 inch 9 inch lineto
X3 inch 2 inch lineto
Xstrokepath
Ximbedpath2 fill
X
Xshowpage
END_OF_FILE
  if test 303 -ne `wc -c <'vision/omarker.ps'`; then
    echo shar: \"'vision/omarker.ps'\" unpacked with wrong size!
  fi
  # end of 'vision/omarker.ps'
fi
if test -f 'vision/one_bar.ps' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vision/one_bar.ps'\"
else
  echo shar: Extracting \"'vision/one_bar.ps'\" \(239 characters\)
  sed "s/^X//" >'vision/one_bar.ps' <<'END_OF_FILE'
X%! PostScript hack by Jon Monsarrat, jgm@cs.brown.edu.
X(header.ps) run
X/lw {2 inch} def      % The thickness of the lines
X
X% One bar
X
Xlw setlinewidth
X
Xnewpath
X6 inch 1 inch moveto
X6 inch 11 inch lineto
Xstrokepath
Ximbedpath2 fill
X
Xshowpage
END_OF_FILE
  if test 239 -ne `wc -c <'vision/one_bar.ps'`; then
    echo shar: \"'vision/one_bar.ps'\" unpacked with wrong size!
  fi
  # end of 'vision/one_bar.ps'
fi
if test -f 'vision/three_bars.ps' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vision/three_bars.ps'\"
else
  echo shar: Extracting \"'vision/three_bars.ps'\" \(399 characters\)
  sed "s/^X//" >'vision/three_bars.ps' <<'END_OF_FILE'
X%! PostScript hack by Jon Monsarrat, jgm@cs.brown.edu.
X(header.ps) run
X/lw {2 inch} def      % The thickness of the lines
X
X% Three bars
X
Xlw setlinewidth
X
Xnewpath
X2 inch 1 inch moveto
X2 inch 11 inch lineto
Xstrokepath
Ximbedpath2 fill
X
Xnewpath
X5 inch 1 inch moveto
X5 inch 11 inch lineto
Xstrokepath
Ximbedpath2 fill
X
Xnewpath
X8 inch 1 inch moveto
X8 inch 11 inch lineto
Xstrokepath
Ximbedpath2 fill
Xshowpage
END_OF_FILE
  if test 399 -ne `wc -c <'vision/three_bars.ps'`; then
    echo shar: \"'vision/three_bars.ps'\" unpacked with wrong size!
  fi
  # end of 'vision/three_bars.ps'
fi
if test -f 'vision/two_bars.ps' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vision/two_bars.ps'\"
else
  echo shar: Extracting \"'vision/two_bars.ps'\" \(318 characters\)
  sed "s/^X//" >'vision/two_bars.ps' <<'END_OF_FILE'
X%! PostScript hack by Jon Monsarrat, jgm@cs.brown.edu.
X(header.ps) run
X/lw {2 inch} def      % The thickness of the lines
X
X% Two bars
X
Xlw setlinewidth
X
Xnewpath
X3 inch 1 inch moveto
X3 inch 11 inch lineto
Xstrokepath
Ximbedpath2 fill
X
Xnewpath
X7 inch 1 inch moveto
X7 inch 11 inch lineto
Xstrokepath
Ximbedpath2 fill
Xshowpage
END_OF_FILE
  if test 318 -ne `wc -c <'vision/two_bars.ps'`; then
    echo shar: \"'vision/two_bars.ps'\" unpacked with wrong size!
  fi
  # end of 'vision/two_bars.ps'
fi
if test -f 'vision/xmarker.ps' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vision/xmarker.ps'\"
else
  echo shar: Extracting \"'vision/xmarker.ps'\" \(320 characters\)
  sed "s/^X//" >'vision/xmarker.ps' <<'END_OF_FILE'
X%! PostScript hack by Jon Monsarrat, jgm@cs.brown.edu.
X(header.ps) run
X/lw {2 inch} def      % The thickness of the lines
X
X% X marker
X
Xlw setlinewidth
Xnewpath
X1 inch 1 inch moveto
X11 inch 10 inch lineto
Xstrokepath
Ximbedpath2 fill
X
Xnewpath
X11 inch 1 inch moveto
X1 inch 10 inch lineto
Xstrokepath
Ximbedpath2 fill
X
Xshowpage
END_OF_FILE
  if test 320 -ne `wc -c <'vision/xmarker.ps'`; then
    echo shar: \"'vision/xmarker.ps'\" unpacked with wrong size!
  fi
  # end of 'vision/xmarker.ps'
fi
echo shar: End of archive.
exit 0
