(defun c:wfs (/ *error* WriteLengthsForSegments pl i dir)
  (vl-load-com)
  ;;; Tharwat 12. Sep. 2012 ;;;
  (if (not acdoc)
    (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  )
  (defun *error* (msg)
    (vla-EndUndoMark acdoc)
    (princ "\n *Cancel*")
    (princ)
  )

  (defun WriteLengthsForSegments (sn dir / h j a b sty)
    (progn (setq j 0)
           (repeat (fix (vlax-curve-getendparam sn))
             (setq a (vlax-curve-getpointatparam sn j))
             (setq b (vlax-curve-getpointatparam sn (setq j (1+ j))))
             (entmakex
               (list
                 '(0 . "MTEXT")
                 '(100 . "AcDbEntity")
                 '(100 . "AcDbMText")
                 (assoc 8 (entget sn))
                 (cons 7 (getvar 'textstyle))
                 (cons
                   40
                   (setq h
                          (if
                            (eq (cdr (assoc 40
                                            (setq sty (entget (tblobjname
                                                                "style"
                                                                (getvar 'textstyle)
                                                              )
                                                      )
                                            )
                                     )
                                )
                                0.
                            )
                             (cdr (assoc 42 sty))
                             (cdr (assoc 40 sty))
                          )
                   )
                 )

                 (cons 10
                       (polar (mapcar '(lambda (x y) (/ (+ y x) 2.)) a b)
                              (if (eq dir "Out")
                                (+ (angle a b) (* pi 0.5))
                                (+ (angle b a) (* pi 0.5))
                              )
                              (* h 1.1)
                       )
                 )

                 (cons 1 (rtos (distance a b) 2))
                 (cons 50 (angle a b))
                 '(71 . 5)
               )
             )
           )
    )
    (princ)
  )
  (princ "\n select a Polyline :")
  (if (and (setq pl (ssget '((0 . "*POLYLINE"))))
           (progn (initget "In Out")
                  (setq dir
                         (cond
                           ((getkword "\n Specify Text placement [In/Out] <Out> :")
                           )
                           (t "Out")
                         )
                  )
           )
      )
    (progn (vla-StartUndoMark acdoc)
           (repeat (setq i (sslength pl))
             (WriteLengthsForSegments (ssname pl (setq i (1- i))) dir)
           )
           (vla-EndUndoMark acdoc)
    )
    (princ)
  )
  (princ "\n Written By Tharwat Al Shoufi")
  (princ)
)