Index: /trunk/source/lib/misc.lisp
===================================================================
--- /trunk/source/lib/misc.lisp	(revision 12793)
+++ /trunk/source/lib/misc.lisp	(revision 12794)
@@ -1044,2 +1044,22 @@
               (lock-name lock)
               (%ptr-to-int (%svref lock target::lock._value-cell)))))
+
+(defun watch (&optional thing)
+  (if thing
+    ;; typecheck thing?
+    (%watch thing)
+    (let (result)
+      (%map-areas #'(lambda (x) (push x result)) area-watched area-watched)
+      result)))
+
+(defun unwatch (thing)
+  (%map-areas #'(lambda (x)
+		  (when (eq x thing)
+		    ;; This is a rather questionable thing to do,
+		    ;; since we'll be unlinking an area from the area
+		    ;; list while %map-areas iterates over it, but I
+		    ;; think we'll get away with it.
+		    (%unwatch thing)
+		    (return-from unwatch)))
+	      area-watched area-watched))
+      
