 ; VBC - centre rejustify a column of text.  Change existing entities rather
 ; than replacing them - useful when style, layer etc. must be preserved.
 ; Copyright 1995, 2006 by Rocket Software Ltd.
 ; Why do people who have their lives perfectly planned always live in the suburbs?
 (DEFUN C:VBC (/ ss cc rr xa num enam entt typ pty pa sp)
  (setvar "cmdecho" 0)
  (command "undo" "mark")
  (prompt "Pick text/attdefs to centre justify: ")
  (if (setq ss (ssget '((-4 . "<or")
                        (0 . "text")
                        (0 . "attdef")
                        (-4 . "or>"))))
      (progn
           (setq cc (getpoint "Pick one side: "))
           (setq rr (getpoint cc "\n...and the other side or <Return>:"))
           (if rr 
              (setq xa (/ (+ (car cc) (car rr)) 2))
              (setq xa (car cc)))
           (setq num 0)
           (while (setq enam (ssname ss num))
                  (setq num (1+ num))
                  (setq entt (entget enam))
                  (setq typ (cdr (assoc 0 entt)))
                  (setq pty (cddr (assoc 10 entt)))
                  (setq pa (cons xa pty))
                  (setq entt (subst (cons 72 1) (assoc 72 entt) entt))
                  (if (= typ "ATTDEF")
                      (setq entt (subst (cons 74 0) (assoc 74 entt) entt))
                      (setq entt (subst (cons 73 0) (assoc 73 entt) entt)))
                  (entmod (subst (cons 11 pa) (assoc 11 entt) entt)))
           (setq sp (if (= (setq num (sslength ss)) 1) "" "s"))
           (prompt (strcat "\n" (itoa num) " line" sp " centred.")))
      (prompt "\nNo text selected."))
 (princ))