Sorry, I had a blunder...
(defun c:openclosedlwstartseg ( / chiv s lw lwx )
(defun chiv ( e m / ed edd eddd eddd1 eddd2 eddd3 newed n i ) ; args e - ename of lwpolyline, m - parameter of initial vertex ;;; ( e p / ed edd eddd eddd1 eddd2 eddd3 newed m n i ) ; args e - ename of lwpolyline, p - new initial vertex point in WCS
(vl-load-com)
(setq ed (entget e))
(setq edd nil)
(foreach ec ed
(if (not
(or (eq (car ec) 10) (eq (car ec) 40) (eq (car ec) 41) (eq (car ec) 42) (eq (car ec) 91) (eq (car ec) 210))
)
(setq edd (cons ec edd))
)
)
(setq edd (reverse edd))
(setq eddd nil)
(setq eddd1 nil)
(setq eddd2 nil)
(setq eddd (member (assoc 10 ed) ed))
;;;(setq p (getpoint "\nPick vertex you want to become initial"))
;;;(setq m (vlax-curve-getparamatpoint e (vlax-curve-getclosestpointto e p)))
(if (assoc 91 ed) (setq n (* m 5)) (setq n (* m 4)))
(setq i 0)
(foreach ec eddd
(progn
(setq i (+ i 1))
(if (<= i n)
(setq eddd1 (cons ec eddd1))
)
(if (> i n)
(setq eddd2 (cons ec eddd2))
)
)
)
(setq eddd1 (reverse eddd1))
(setq eddd3 (list (assoc 210 eddd2)))
(setq eddd2 (cdr eddd2))
(setq eddd2 (reverse eddd2))
(setq newed (append edd eddd2 eddd1 eddd3))
(entmod newed)
(entupd e)
)
(while
(or
(prompt "\nPick closed lwpolyline on unlocked layer...")
(not (setq s (ssget "_+.:E:S:L" '((0 . "LWPOLYLINE") (-4 . "&=") (70 . 1)))))
)
(prompt "\nMissed...")
)
(setq lw (ssname s 0))
(chiv lw 1.0)
(setq lwx (entget lw))
(setq lwx (subst (cons 70 (1- (cdr (assoc 70 lwx)))) (assoc 70 lwx) lwx))
(entupd (cdr (assoc -1 (entmod lwx))))
(princ)
)
HTH., M.R.