   (.lightSpecular *applet* (float x) (float y) (float z)))
 
 (defn line
+  "Draws a line (a direct path between two points) to the screen. The version of
+  line with four parameters draws the line in 2D. To color a line, use the
+  stroke function. A line cannot be filled, therefore the fill method will
+  not affect the color of a line. 2D lines are drawn with a width of one pixel
+  by default, but this can be changed with the stroke-weight function. The
+  version with six parameters allows the line to be placed anywhere within XYZ
+  space. "
   ([p1 p2] (apply line (concat p1 p2)))
   ([x1 y1 x2 y2] (.line *applet* (float x1) (float y1) (float x2) (float y2)))
   ([x1 y1 z1 x2 y2 z2]

                   (float n30) (float n31) (float n32) (float 33))))

(defn arc
  [a b c d start stop]
  (.arc *applet* (float a)(float b) (float c) (float d)
        (float start) (float stop)))

;; $$arraycopy

(defn asin [val] (PApplet/asin (float val)))

(defn atan [val] (PApplet/atan (float val)))

(defn atan2 [a b] (PApplet/atan2 (float a) (float b)))

(defn background-float
  ([gray] (.background *applet* (float gray)))
  ([gray alpha] (.background *applet* (float gray) (float alpha)))
  ([r g b] (.background *applet* (float r) (float g) (float b)))
  ([r g b a] (.background *applet* (float r) (float g) (float b) (float a))))

(defn background-int
  ([rgb] (.background *applet* (int rgb)))
  ([rgb alpha] (.background *applet* (int rgb) (float alpha))))

(def background background-float)

(defn background-image
  [^PImage img] (.background *applet* img))

(defn begin-camera
  [] (.beginCamera *applet*))

(defn begin-raw
  ([^PGraphics raw-gfx] (.beginRaw *applet* raw-gfx))
  ([^String renderer ^String filename]
     (.beginRaw *applet* renderer filename)))

;; $$str

(defn stroke-float
  "Sets the color used to draw lines and borders around shapes."
  ([gray] (.stroke *applet* (float gray)))
  ([gray alpha] (.stroke *applet* (float gray) (float alpha)))
  ([x y z] (.stroke *applet* (float x) (float y) (float z)))
  ([x y z a] (.stroke *applet* (float x) (float y) (float z) (float a))))

(defn stroke-int
  "Sets the color used to draw lines and borders around shapes."
  ([rgb] (.stroke *applet* (int rgb)))
  ([rgb alpha] (.stroke *applet* (int rgb) (float alpha))))

(def ^{:arglists (:arglists (meta #'stroke-float))
       :doc (:doc (meta #'stroke-float))}
  stroke stroke-float)

(defn stroke-cap [cap] (.strokeCap *applet* (int cap)))

(defn stroke-join [jn] (.strokeJoin *applet* (int jn)))

(defn stroke-weight
  "Sets the width of the stroke used for lines, points, and the border around
  shapes. All widths are set in units of pixels. "
  [weight]
  (.strokeWeight *applet* (float weight)))

;; $$subset

