diff --git a/Lisp/OmniModulInsert.lsp b/Lisp/OmniModulInsert.lsp index 5fa6d62..b1fc57b 100644 --- a/Lisp/OmniModulInsert.lsp +++ b/Lisp/OmniModulInsert.lsp @@ -578,11 +578,22 @@ (setq e (entnext lastEnt)) (while e (ssadd e ss) (setq e (entnext e))) - ;; Block mit eindeutigem Zeitstempel-Namen erzeugen + ;; Block mit eindeutigem Zeitstempel-Namen erzeugen. ssg-timestamp hat nur + ;; Sekundenaufloesung - bei mehreren Aufrufen innerhalb derselben Sekunde + ;; (z.B. Streckenzug-Schleife) kollidiert der Name; dann einen laufenden + ;; Zaehler anhaengen, bis der Name frei ist. (Fruehere Variante haengte + ;; (itoa (fix (* CDATE 1000000))) an - das sprengt den 32-Bit-INT-Bereich + ;; von itoa und brach mit einem Lisp-Fehler ab.) (setq bname (strcat blockname "_" (ssg-timestamp))) - ;; Falls Name schon existiert, Suffix anhaengen (if (tblsearch "BLOCK" bname) - (setq bname (strcat bname "_" (itoa (fix (* (getvar "CDATE") 1000000))))) + (progn + (if (null *omni-gerade-block-counter*) (setq *omni-gerade-block-counter* 0)) + (while (tblsearch "BLOCK" bname) + (setq *omni-gerade-block-counter* (1+ *omni-gerade-block-counter*)) + (setq bname (strcat blockname "_" (ssg-timestamp) "_" + (itoa *omni-gerade-block-counter*))) + ) + ) ) ;; Objektfang aus: sonst kann _.INSERT den Einfuegepunkt pt auf ein Objekt ;; umfangen (z.B. den Text bei pt) und die Hoehe verfaelschen. diff --git a/tests/testdata/linienzug_tests.json b/tests/testdata/linienzug_tests.json index 00b16fd..9257c43 100644 --- a/tests/testdata/linienzug_tests.json +++ b/tests/testdata/linienzug_tests.json @@ -159,6 +159,11 @@ "wert": "3", "kommentar": "getstring Ist Endpunkt? (Option 3 - Kettenende)" }, + { + "typ": "string", + "wert": "1", + "kommentar": "getstring ES-Element setzen? (Ja) - neue Frage aus 3e23003, fehlte bisher in den Testdaten" + }, { "typ": "point_rel", "dL": 6215,