(defun comment-region (start end)
  (interactive "r")
  (save-excursion
    (save-restriction
      (narrow-to-region start end)
      (untabify (point-min) (point-max))
      (goto-char (point-min))
      (cond ((string-equal comment-end "")
	     (beginning-of-line)
	     (while (not (eobp))
	       (insert comment-start)
	       (forward-line 1)))
	    (t (insert comment-start)
	       (goto-char (point-max))
	       (insert comment-end))))))

(defun uncomment-region (start end)
  (interactive "r")
  (save-excursion
    (save-restriction
      (narrow-to-region start end)
      (goto-char (point-min))
      (cond ((string-equal comment-end "")
	     (beginning-of-line)
	     (while (not (eobp))
	       (if (looking-at (regexp-quote comment-start))
		   (delete-char 1))
	       (forward-line 1)))
	    (t (and (search-forward comment-start (point-max) t)
		    (replace-match ""))
	       (goto-char (point-max))
	       (and (search-backward comment-end (point-min) t)
		    (replace-match ""))))
      (tabify (point-min) (point-max)))))

