;;; ------------------------------------------------------------
;;; AutoCATS ¸®½À ÀÚ·á½Ç
;; ¸í·É: TSUM
;; ±â´É: ¼±ÅÃÇÑ ¹®ÀÚ(TEXT/MTEXT)ÀÇ ¼ýÀÚ ÇÕ°è °è»ê + µµ¸é ±âÀÔ(¼±ÅÃ)
;; ÃâÃ³: https://www.autocats.co.kr/lisp/text-sum
;; ¹öÀü: 1.0 (2026-07-20)
;; ¶óÀÌ¼±½º: ÀÚÀ¯ »ç¿ë¡¤¼öÁ¤, Àç¹èÆ÷ ½Ã ÃâÃ³(autocats.co.kr) Ç¥±â
;; ¾ÈÀü: *error* ÇÚµé·¯ Æ÷ÇÔ, µµ¸é ÀúÀå¡¤Á¾·á µî ÆÄ±«Àû µ¿ÀÛ ¾øÀ½
;;; ------------------------------------------------------------

(defun c:TSUM (/ *error* tsum-clean ss idx data raw str val sum cnt skip pt)

  (defun *error* (msg)
    (if (and msg (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*EXIT*,*Ãë¼Ò*")))
      (princ (strcat "\n[TSUM] Áß´Ü: " msg)))
    (princ))

  ;; ½°Ç¥¡¤°ø¹éÀ» Á¦°ÅÇØ "1,234.5" °°Àº Ç¥±âµµ ÇÕ»ê ´ë»óÀ¸·Î ¸¸µç´Ù
  (defun tsum-clean (s / out i ch)
    (setq out "" i 1)
    (while (<= i (strlen s))
      (setq ch (substr s i 1))
      (if (not (member ch '("," " ")))
        (setq out (strcat out ch)))
      (setq i (1+ i)))
    out)

  (princ "\n[TSUM] ÇÕ°è¸¦ ±¸ÇÒ ¹®ÀÚ(TEXT/MTEXT)¸¦ ¼±ÅÃÇÏ¼¼¿ä.")
  (setq ss (ssget '((0 . "TEXT,MTEXT"))))
  (if ss
    (progn
      (setq idx 0 sum 0.0 cnt 0 skip 0)
      (while (< idx (sslength ss))
        (setq data (entget (ssname ss idx))
              raw  (cdr (assoc 1 data))
              str  (tsum-clean raw)
              val  (if (/= str "") (distof str 2) nil))
        (if val
          (setq sum (+ sum val) cnt (1+ cnt))
          (setq skip (1+ skip)))
        (setq idx (1+ idx)))
      (princ (strcat "\n[TSUM] ÇÕ°è: " (rtos sum 2 4)
                     "  (ÇÕ»ê " (itoa cnt) "°³ / °Ç³Ê¶Ü " (itoa skip) "°³)"))
      (if (> cnt 0)
        (progn
          (initget "Y N")
          (if (= (getkword "\nÇÕ°è¸¦ µµ¸é¿¡ ¹®ÀÚ·Î ±âÀÔÇÒ±î¿ä? [¿¹(Y)/¾Æ´Ï¿À(N)] <N>: ") "Y")
            (progn
              (setq pt (getpoint "\n¹®ÀÚ »ðÀÔ À§Ä¡ Å¬¸¯: "))
              (if pt
                (entmake (list (cons 0 "TEXT")
                               (cons 10 pt)
                               (cons 40 (getvar "TEXTSIZE"))
                               (cons 1 (rtos sum 2 4))
                               (cons 7 (getvar "TEXTSTYLE")))))))))
      )
    (princ "\n[TSUM] ¼±ÅÃµÈ ¹®ÀÚ°¡ ¾ø½À´Ï´Ù."))
  (princ))

(princ "\n[AutoCATS] TSUM ·Îµå ¿Ï·á - ¸í·ÉÇà¿¡ TSUM À» ÀÔ·ÂÇÏ¼¼¿ä.")
(princ)
