BbdbCreateRecord

Last tested on Gnu Emacs 22.2.1 using bbdb 2.35.

(defun my-bbdb-create-record ()
  "Prompt for and return a completely new BBDB record.
Doesn't insert it in to the database or update the hashtables, but does
ensure that there will not be name collisions."
  (interactive)
  (bbdb-records)                        ; make sure database is loaded
  (if bbdb-readonly-p
      (error "The Insidious Big Brother Database is read-only."))
  (let (firstname lastname net info notes addr)
    (bbdb-error-retry
     (progn
       (let ((names (bbdb-divide-name (bbdb-read-string "Name: "))))
	 (setq firstname (car names)
	       lastname (nth 1 names)))
       (when (string= firstname "")
	 (setq firstname nil))
       (when (string= lastname "")
	 (setq lastname nil))))
    (setq net (bbdb-split (bbdb-read-string "Mail Adressen: ") ","))
    (let ((street (bbdb-read-string "Strasse: "))
	  zip city
	  (it (split-string (bbdb-read-string "PLZ und Stadt: "))))
      (when (string= street "")
	(setq street nil))
      (when (and (stringp (car it))
		 (string-match "^[0-9]+$" (car it)))
	(setq zip (concat "CH-" (car it))
	      it (cdr it)))
      (when it
	(setq city (mapconcat 'identity it " ")))
      (when city
	(setq addr (make-vector bbdb-address-length nil))
	(bbdb-address-set-location addr "Home")
	(bbdb-address-set-streets addr (list street))
	(bbdb-address-set-zip addr zip)
	(bbdb-address-set-city addr city)
	(bbdb-address-set-state addr "")
	(bbdb-address-set-country addr "Schweiz")))
    (setq notes (bbdb-read-string "Weitere Info: "))
    (when (string= notes "")
      (setq notes nil))
    (when (y-or-n-p "Info mail? ")
      (if notes
	  (setq notes `((notes . ,notes)
			(mail-alias . "info-mail")))
	(setq notes '(mail-alias . "info-mail"))))
    (bbdb-create (vector (or firstname nil)
			 (or lastname nil)
			 nil nil nil
			 (when addr (list addr))
			 net notes
			 (make-vector bbdb-cache-length nil)))))

(define-key bbdb-mode-map "c" 'my-bbdb-create-record)