--- /dev/null
+@node Pictures, , Starbase Graphics, Graphics
+@section Pictures (MIT 6.001 implementation only)
+
+@cindex pictures
+A @dfn{picture} data object is a two-dimensional array of real numbers
+that represents a grey-scale image on the screen. The grey level that
+the value of each element represents is determined relative to the range
+of values of the array.
+
+The width of a picture is the number of elements in each row and the
+height is the number of elements in each column. The elements are
+referenced by giving the horizontal component first and the vertical one
+second, with the origin at the bottom left corner of the displayed
+picture.
+
+Coordinates (@var{i}, @var{j}) are @dfn{valid coordinates} of picture
+@var{p} if and only if:
+
+@example
+@group
+(and (exact-nonnegative-integer? @var{i})
+ (exact-nonnegative-integer? @var{j})
+ (< @var{i} (picture-width @var{p}))
+ (< @var{j} (picture-height @var{p})))
+@end group
+@end example
+
+@menu
+* Construction of Pictures::
+* Manipulating Pictures::
+* Displaying Pictures::
+* Saving and Restoring Pictures::
+@end menu
+
+@node Construction of Pictures, Manipulating Pictures, , Pictures
+@subsection Construction of Pictures
+
+@code{make-picture} and @code{procedure->picture} are simple ways to
+make pictures. @code{picture-map} is a way to create a new picture by
+applying a procedure to one or more pictures. Pictures can also be made
+by reading files: see @code{pgm-file->picture}.
+
+@deffn {procedure+} make-picture x y [k]
+@var{X} and @var{y} must be exact positive integers and @var{k}, if
+specified, must be a real number. Returns a picture of width @var{x}
+and height @var{y}. If @var{k} is specified then each picture element
+is initialized to @var{k}, otherwise the elements are unspecified.
+@end deffn
+
+@deffn {procedure+} procedure->picture x y f
+@var{X} and @var{y} must be exact positive integers, and @var{f} must be
+a real-valued procedure of two variables. Returns a picture of width
+@var{x} and height @var{y}, where the value of each element is the
+result of applying @var{f} to the element's coordinates.
+@end deffn
+
+@deffn {procedure+} picture-map f picture @dots{}
+@var{F} must be a procedure, and all of the @var{picture} arguments must
+have the same dimensions. Returns a newly allocated picture, each
+element of which is obtained by calling @var{f}, passing it as arguments
+the corresponding element of each @var{picture} argument. (Thus @var{f}
+must accept the same number of arguments as there are @var{picture}
+arguments to @code{picture-map}.)
+
+In other words, each element could have been initialized as follows:
+
+@example
+@group
+(picture-set! @var{result} @var{i} @var{j}
+ (@var{f} (picture-ref @var{picture} @var{i} @var{j}) @dots{}))
+@end group
+@end example
+@end deffn
+
+@node Manipulating Pictures, Displaying Pictures, Construction of Pictures, Pictures
+@subsection Manipulating Pictures
+
+@deffn {procedure+} picture? object
+Returns @code{#t} if @var{object} is a picture, otherwise returns
+@code{#f}.
+@end deffn
+
+@deffn {procedure+} picture-width picture
+@deffnx {procedure+} picture-height picture
+These procedures return the width and height, respectively, of
+@var{picture}.
+@end deffn
+
+@deffn {procedure+} picture-min picture
+@deffnx {procedure+} picture-max picture
+These procedures return, respectively, the least and the greatest values
+stored in @var{picture}.
+@end deffn
+
+@deffn {procedure+} picture-ref picture i j
+Returns the value of element (@var{i},@var{j}) of @var{picture} (always
+a real number). @var{I} and @var{j} must be valid coordinates for
+@var{picture}.
+@end deffn
+
+@deffn {procedure+} picture-set! picture i j k
+Stores @var{k} at element (@var{i},@var{j}) in @var{picture} and returns
+an unspecified value. @var{K} must be a real number and @var{I} and
+@var{j} must be valid coordinates for @var{picture}.
+@end deffn
+
+@node Displaying Pictures, Saving and Restoring Pictures, Manipulating Pictures, Pictures
+@subsection Displaying Pictures
+
+To display pictures, an X graphics window must first be created.
+Although any window may be used, the colormap will not be guaranteed to
+be correct for grey-scale pictures, therefore the recommended way of
+creating windows for displaying pictures is to use the
+@code{make-window} procedure.
+
+@deffn {procedure+} picture-display w picture [min [max]]
+Displays, in the graphics device @var{w}, the largest integer scaling of
+@var{picture} that can be contained in @var{w}. If @var{min} and
+@var{max} are specified then the grey levels will be computed using
+these values as @var{picture}'s minimum and maximum values, otherwise
+the actual least and greatest values of @var{picture} will be used. The
+value returned by this procedure is unspecified.
+@end deffn
+
+@deffn {procedure+} make-window w h x y
+Returns a graphics device of width @var{w}, height @var{h} and screen
+position @var{x},@var{y} (as would be given in an X geometry string)
+with a grey-scale colormap attached.
+@end deffn
+
+@node Saving and Restoring Pictures, , Displaying Pictures, Pictures
+@subsection Saving and Restoring Pictures
+
+Pictures can be read from or written to files in @sc{pgm} format using
+the following procedures.
+
+@deffn {procedure+} pgm-file->picture pathname
+Reads a grey-scale image stored in @sc{pgm} format from the file
+@var{pathname}, returning a picture whose graphical representation will
+closely resemble that of the saved image.
+@end deffn
+
+@deffn {procedure+} picture->pgm-file picture pathname
+Saves @var{picture} in @sc{pgm} format in the file @var{pathname}.
+Overwrites any previously existing file of that name.
+@end deffn