Robuste Blockeinfuegung: kaputte Bloecke bei Testlaeufen verhindern

Der Redefine-Flush in ssg-ils-block-laden-dim brach nach genau zwei
(command)-Aufrufen ab; blieb ein Befehl trotzdem aktiv (z.B. bei
abweichenden INSUNITS), verschluckte der naechste (command ...)-Aufruf
des Aufrufers dessen Argumente als Antwort auf den offenen Prompt -
Ursache eines real beobachteten kaputten SC_Entladung-Blocks (keine
Attribute) beim letzten Element eines HundM05-Testlaufs. Flush jetzt als
bounded loop mit Warnung statt fixer 2 Versuche.

hundm05:bau-sensor vertraut nach dem INSERT nicht mehr blind (entlast):
eine ungueltige/keine neue Blockreferenz wird erkannt, evtl. Rest-
geometrie geloescht und der Ergebnis-Record als "abbruch" markiert;
fehlt das ID-Attribut, gibt es "warnung" statt stillschweigend weiter-
zumachen. Testlaeufe hinterlassen damit keine unbemerkt kaputten
Bloecke mehr.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Samer Ayadi
2026-09-17 12:03:39 +02:00
co-authored by Claude Sonnet 5
parent ab2816e9ee
commit d0d112e740
2 changed files with 58 additions and 12 deletions
+17 -3
View File
@@ -787,7 +787,7 @@
;; und Foerderer-Tests) fuehrte das zu minutenlangen Laufzeiten.
;; Zum erzwungenen Neu-Einlesen: ssg-block-refresh-reset.
;; Rueckgabe: effektiver (suffigierter) Blockname oder nil (Datei nicht gefunden).
(defun ssg-ils-block-laden-dim (blockname dim / eff datei base temp-obj osm areq adia)
(defun ssg-ils-block-laden-dim (blockname dim / eff datei base temp-obj osm areq adia n)
(setq eff (ssg-ils-blockname-dim blockname dim))
(setq datei (ssg-ils-block-datei-dim blockname dim))
(if (null datei)
@@ -825,8 +825,22 @@
(if (tblsearch "BLOCK" eff)
(command "_.-INSERT" (strcat eff "=" datei) "_Y") ; Redefine bestehender Block
(command "_.-INSERT" (strcat eff "=" datei))) ; neu (kein Redefine-Prompt)
(if (> (getvar "CMDACTIVE") 0) (command))
(if (> (getvar "CMDACTIVE") 0) (command))
;; Robust statt fixer 2 Versuche abbrechen: manche Block-DWGs (z.B.
;; abweichende INSUNITS) schieben eine zusaetzliche Rueckfrage ein,
;; die zwei (command)-Aufrufe nicht immer leeren. Bleibt danach ein
;; Befehl aktiv, verschluckt der NAECHSTE (command ...)-Aufruf des
;; Aufrufers (die eigentliche Platzierung, z.B. hundm05:bau-sensor/
;; ils-insert-station) dessen Argumente als Antwort auf DIESEN noch
;; offenen Prompt - Ursache eines real beobachteten kaputten Blocks
;; (fehlende Attribute) beim letzten Element eines Testlaufs.
(setq n 0)
(while (and (> (getvar "CMDACTIVE") 0) (< n 10))
(command)
(setq n (1+ n)))
(if (> (getvar "CMDACTIVE") 0)
(princ (strcat "\n[SSG] WARNUNG: Laden von '" eff
"' hat einen Befehl aktiv gelassen (CMDACTIVE > 0) -"
" nachfolgende Einfuegungen sind evtl. beschaedigt.")))
(setvar "OSMODE" osm)(setvar "ATTREQ" areq)(setvar "ATTDIA" adia)))
;; Nur merken, wenn die Definition danach wirklich vorhanden ist -
;; sonst wuerde ein fehlgeschlagener Ladeversuch dauerhaft gesperrt.