;;; ------------------------------------------------------------
;;; AutoCATS ¸®½À ÀÚ·á½Ç
;; ¸í·É: BCOUNT
;; ±â´É: ¼±ÅÃÇÑ ºí·Ï ÂüÁ¶(INSERT)¸¦ ºí·Ï ÀÌ¸§º°·Î Áý°èÇØ ¸í·ÉÇà¿¡ Ç¥½Ã
;; ÃâÃ³: https://www.autocats.co.kr/lisp/block-count
;; ¹öÀü: 1.0 (2026-07-23)
;; ¶óÀÌ¼±½º: ÀÚÀ¯ »ç¿ë¡¤¼öÁ¤, Àç¹èÆ÷ ½Ã ÃâÃ³(autocats.co.kr) Ç¥±â
;; ¾ÈÀü: *error* ÇÚµé·¯ Æ÷ÇÔ, µµ¸é ÀúÀå¡¤Á¾·á¡¤°´Ã¼ ¼öÁ¤ µî ÆÄ±«Àû µ¿ÀÛ ¾øÀ½
;; °ËÁõ: AutoCAD ½ÇÁ¦ »ùÇÃ µµ¸é¿¡¼­ ÀÌ¸§º° ¼ö·® ¹× ÀüÃ¼ ¼±ÅÃ ¼ö È®ÀÎ
;;; ------------------------------------------------------------

(defun c:BCOUNT (/ *error* bcount-add ss idx data name counts total item)

  (defun *error* (msg)
    (if (and msg (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*EXIT*,*Ãë¼Ò*")))
      (princ (strcat "\n[BCOUNT] Áß´Ü: " msg)))
    (princ))

  ;; ÀÌ¸§º° Áý°è ¸ñ·Ï¿¡ 1À» ´õÇÏ°Å³ª »õ Ç×¸ñÀ» Ãß°¡ÇÑ´Ù.
  (defun bcount-add (key rows / found)
    (if (setq found (assoc key rows))
      (subst (cons key (1+ (cdr found))) found rows)
      (append rows (list (cons key 1)))))

  (princ "\n[BCOUNT] ¼ö·®À» Áý°èÇÒ ºí·ÏÀ» ¼±ÅÃÇÏ¼¼¿ä.")
  (setq ss (ssget '((0 . "INSERT"))))
  (if ss
    (progn
      (setq idx 0 counts '() total 0)
      (while (< idx (sslength ss))
        (setq data (entget (ssname ss idx))
              name (cdr (assoc 2 data)))
        (if name
          (progn
            (setq counts (bcount-add name counts))
            (setq total (1+ total))))
        (setq idx (1+ idx)))
      (princ "\n[BCOUNT] ºí·Ïº° ¼ö·®:")
      (foreach item counts
        (princ (strcat "\n  " (car item) ": " (itoa (cdr item)) "°³")))
      (princ (strcat "\n[BCOUNT] ÀüÃ¼ ¼±ÅÃ ºí·Ï: " (itoa total) "°³")))
    (princ "\n[BCOUNT] ¼±ÅÃµÈ ºí·ÏÀÌ ¾ø½À´Ï´Ù."))
  (princ))

(princ "\n[AutoCATS] BCOUNT ·Îµå ¿Ï·á - ¸í·ÉÇà¿¡ BCOUNT ¸¦ ÀÔ·ÂÇÏ¼¼¿ä.")
(princ)
