anchor.diff:          (point-set start-point)
           (do ()
               ((null
  -              (search-forward search-string
  -                              end-point)))
  +              (funcall *isearch-search-forward-function*
  +                       search-string end-point)))
             (let ((point2 (point))
                   (point1 (save-excursion
  -                         (prev-char (length search-string))
  +                         (funcall *isearch-search-backward-function*
  +                                  search-string)
                            (point))))
               (push (make-overlay point1 point2
                                   :attr (if (and (point<= point1 save-point)
  
positive.code: (defvar *isearch-prev-string* "")
  (defvar *isearch-start-point*)
  (defvar *isearch-search-function*)
  (defvar *isearch-highlight-overlays* nil)
  
  (define-minor-mode isearch-mode
  
negative.code:   (isearch-start
     #'(lambda (str)
         (prev-char (length str))
         (search-forward str))
     #'search-forward
     #'search-backward))
  
  (define-key *global-keymap* (kbd "C-r") 'isearch-backward)
  (define-command isearch-backward () ()
    (isearch-start
     #'(lambda (str)
         (next-char (length str))
         (search-backward str))
     #'search-forward
     #'search-backward))
  
  (define-key *global-keymap* (kbd "C-M-s") 'isearch-forward-regexp)
  (define-command isearch-forward-regexp () ()
    (isearch-start #'re-search-forward
                   #'re-search-forward
                   #'re-search-backward))
  
  (define-key *global-keymap* (kbd "C-M-r") 'isearch-backward-regexp)
  (define-command isearch-backward-regexp () ()
    (isearch-start #'re-search-backward
                   #'re-search-forward
                   #'re-search-backward))
  
  (defun isearch-start (search-func
                        search-forward-function
                        search-backward-function)
    (isearch-mode t)
    (setq *isearch-string* "")
    (isearch-update-minibuf)
    (setq *isearch-search-function* search-func)
    (setq *isearch-start-point* (point))
    (setq *isearch-search-forward-function* search-forward-function)
    (setq *isearch-search-backward-function* search-backward-function)
    t)
  
  (define-key *isearch-keymap* (kbd "C-g") 'isearch-abort)
  