Totally agree that there are plenty of information missing, so lots of assumptions needed.
Anyway, here's me humble attempt, see THIS
It converts just TEXTs, default left justification required.
Blocknames are their ascii. Also make "0" block as dummy if any char missing.
k is for kerning, it's a constant. Space is 5k.
(vl-load-com)
(defun c:LTB ( / xbb k s e d p c a w b)
(defun xbb (o)
(vla-getboundingbox (vlax-ename->vla-object o) 'll 'ur)
(- (car (vlax-safearray->list ur)) (car (vlax-safearray->list ll))))
(setq k 0.1)
(if (setq s (ssget "_:L" '((0 . "TEXT"))))
(repeat (setq i (sslength s))
(setq e (ssname s (setq i (1- i)))
d (entget e)
p (cdr (assoc 10 d))
c (cdr (assoc 40 d))
a (cdr (assoc 50 d))
w (vl-string->list (cdr (assoc 1 d))))
(foreach l w
(if (= l 32)
(setq p (polar p a (* 5 k)))
(progn
(if (not (tblsearch "block" (itoa l))) (setq l 0))
(setq b (entmakex (list '(0 . "INSERT") (cons 2 (itoa l)) (cons 10 p) (cons 41 c) (cons 42 c) (cons 43 c))))
(setq p (polar p a (+ (xbb b) k)))
(entmod (append (entget b) (list (cons 50 a)))))))
(entdel e)))
(princ)
)