anchor.diff:      (shen.openh Path Direction)))
   
   (DEFUN shen.openh (Path Direction)
  -  (COND ((EQ Direction 'in)
  -         (OPEN Path
  -          :DIRECTION :INPUT
  -          :ELEMENT-TYPE
  -            #+CLISP 'UNSIGNED-BYTE
  -            #+CCL   '(UNSIGNED-BYTE 8)
  -            #+SBCL  :DEFAULT))
  -        ((EQ Direction 'out)
  -         (OPEN Path
  -          :DIRECTION :OUTPUT
  -          :ELEMENT-TYPE
  -            #+CLISP 'UNSIGNED-BYTE
  -            #+CCL   '(UNSIGNED-BYTE 8)
  -            #+SBCL  :DEFAULT
  -          :IF-EXISTS :SUPERSEDE))
  -        (T
  -         (ERROR "invalid direction"))))
  +  (COND
  +    ((EQ Direction 'in)
  +     (OPEN Path
  +      :DIRECTION :INPUT
  +      :ELEMENT-TYPE
  +        #+CLISP 'UNSIGNED-BYTE
  +        #+CCL   '(UNSIGNED-BYTE 8)
  +        #+SBCL  :DEFAULT))
  +    ((EQ Direction 'out)
  +     (OPEN Path
  +      :DIRECTION :OUTPUT
  +      :ELEMENT-TYPE
  +        #+CLISP 'UNSIGNED-BYTE
  +        #+CCL   '(UNSIGNED-BYTE 8)
  +        #+SBCL  :DEFAULT
  +      :IF-EXISTS :SUPERSEDE))
  +    (T
  +     (ERROR "invalid direction"))))
   
   (DEFUN type (X MyType)
     (DECLARE (IGNORE MyType)) X)
  
positive.code: 
  (DEFMACRO if (X Y Z)
    `(LET ((*C* ,X))
      (COND ((EQ *C* 'true)
             ,Y)
            ((EQ *C* 'false)
             ,Z)
            (T
             (ERROR "~S is not a boolean~%" *C*)))))
  
  (DEFMACRO and (X Y)
    `(if ,X (if ,Y 'true 'false) 'false))
  
negative.code: 
  (DEFUN cn (Str1 Str2)
    (DECLARE ((TYPE STRING Str1) (TYPE STRING Str2)))
    (CONCATENATE 'STRING Str1 Str2))
  
  (DEFUN string? (S)
    (IF (STRINGP S) 'true 'false))
  