



(defun foo  ()
  (interactive)
  (beginning-of-line)
  (skip-chars-forward "^(")
  (if (looking-at "(void)") 
      (delete-region (1+ (match-beginning 0)) (1- (match-end 0)))
    (let ((param-start (1+ (point))))
      (forward-sexp)
      (let ((param-end (1- (point))))
	(goto-char param-start)
	(let ((param-list nil)
	      (param))
	  (while (setq param (eat-param param-end))
	    (setq param-list (append param-list (list param))))
	  (delete-region param-start param-end)
	  (goto-char param-start)
	  (let ((pl param-list))
	    (while pl
	      (let ((p (car pl)))
		(if (string-match "[a-zA-Z0-9_]+$" p)
		    (insert (substring p (match-beginning 0) (match-end 0)))
		  (insert "???")))
	      (setq pl (cdr pl))
	      (if pl (insert ", "))))
	  (end-of-line)
	  (let ((pl param-list))
	    (while pl
	      (insert "\n     ")
	      (insert (car pl))
	      (insert ";")
	      (setq pl (cdr pl))))))))
  (re-search-forward "^{" nil nil 2)
  (re-search-backward "^[ \t]*$")
  (forward-line 1))
  



(defun eat-param (end)
  (skip-chars-forward " \t\n")
  (if (>= (point) end) nil
    (let ((pstart (point)))
      (skip-chars-forward "^," end)
      (let* ((pend (point))
	     (pstr (buffer-substring pstart pend)))
	(goto-char (1+ pend))
	pstr))))



