an emacs macro

(defun guard ()
  "http://en.wikipedia.org/wiki/Include_guard"
  (interactive)
  (if (buffer-file-name)
      (let ((macro-name
	     (concat
	      (upcase
	       (file-name-sans-extension
		(file-name-nondirectory
		 (buffer-file-name))))
	      "_H")))
	(save-excursion
	  (goto-char (point-min))
	  (insert
	   (concat
	    "#ifndef "
	    macro-name
	    "\n#define "
	    macro-name
	    "\n"))
	  (goto-char (point-max))
	  (insert
	   (concat
	    "\n#endif /* "
	    macro-name
	    " */\n"))))))