From 9f5b30709a2056cea1a7a529724442c6a83146c2 Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Sat, 29 Aug 2026 07:33:20 +0200 Subject: [PATCH] [REFACTOR] VF: Core-Pfad-Ermittlung zentralisiert (ssg-lisp-verzeichnis/-datei-pfad) Der 3-stufige Lisp-Pfad-cond (DXFM_LISP -> *ssg-lisp-pfad* -> nil) war 6-fach dupliziert. Neuer Helper ssg-lisp-verzeichnis/ssg-lisp-datei-pfad in ssg_core.lsp. - vf_core.lsp (Submodul-Loader): nutzt Helper direkt (ssg_core hier geladen) - vf_standard/vf_etage/vf_konstanten/VarioFoerderer: Helper mit Inline-Fallback (atoms-family-Guard), falls ssg_core beim isolierten Einzel-Laden fehlt - vf_core.lsp ssg_core-Bootstrap (Z.40): bleibt inline (laedt ssg_core erst) Reines Refactoring, identisches Verhalten. Paren-Balance geprueft. Co-Authored-By: Claude Opus 4.8 (1M context) --- Lisp/VarioFoerderer.lsp | 24 ++++++++++++++---------- Lisp/ssg_core.lsp | 31 +++++++++++++++++++++++++++++++ Lisp/vf_core.lsp | 12 ++---------- Lisp/vf_etage.lsp | 18 +++++++++--------- Lisp/vf_konstanten.lsp | 16 ++++++++-------- Lisp/vf_standard.lsp | 18 +++++++++--------- 6 files changed, 73 insertions(+), 46 deletions(-) diff --git a/Lisp/VarioFoerderer.lsp b/Lisp/VarioFoerderer.lsp index 6fa73ca..d2173ab 100644 --- a/Lisp/VarioFoerderer.lsp +++ b/Lisp/VarioFoerderer.lsp @@ -2,17 +2,21 @@ ;; VarioFoerderer.lsp — Kompatiblitaets-Wrapper ;; Laedt vf_core.lsp (Plugin-Dispatcher-Architektur) ;; ============================================================ -;; vf_core.lsp laden: 1) DXFM_LISP, 2) *ssg-lisp-pfad* (vom MNL gesetzt), 3) findfile +;; vf_core.lsp laden. Pfad zentral ueber ssg_core (ssg-lisp-datei-pfad), mit +;; Inline-Fallback (inkl. findfile) falls ssg_core hier noch nicht geladen ist. (setq *vf-core-datei* - (cond - ((getenv "DXFM_LISP") - (strcat (vl-string-translate "\\" "/" (getenv "DXFM_LISP")) "/vf_core.lsp")) - ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad* - (findfile (strcat *ssg-lisp-pfad* "/vf_core.lsp"))) - (strcat *ssg-lisp-pfad* "/vf_core.lsp")) - ((findfile "vf_core.lsp") - (findfile "vf_core.lsp")) - (t nil) + (if (car (atoms-family 1 '("SSG-LISP-DATEI-PFAD"))) + (cond ((ssg-lisp-datei-pfad "vf_core.lsp")) + ((findfile "vf_core.lsp"))) + (cond + ((getenv "DXFM_LISP") + (strcat (vl-string-translate "\\" "/" (getenv "DXFM_LISP")) "/vf_core.lsp")) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad* + (findfile (strcat *ssg-lisp-pfad* "/vf_core.lsp"))) + (strcat *ssg-lisp-pfad* "/vf_core.lsp")) + ((findfile "vf_core.lsp") + (findfile "vf_core.lsp")) + (t nil)) ) ) (if *vf-core-datei* diff --git a/Lisp/ssg_core.lsp b/Lisp/ssg_core.lsp index 1f27a08..ed12b07 100644 --- a/Lisp/ssg_core.lsp +++ b/Lisp/ssg_core.lsp @@ -137,6 +137,37 @@ ) +;; ------------------------------------------------------------ +;; LISP-PFAD-ERMITTLUNG +;; ------------------------------------------------------------ +;; Zentraler Ersatz fuer den bisher in mehreren Modulen duplizierten +;; 3-stufigen Pfad-cond (DXFM_LISP env -> *ssg-lisp-pfad* vom MNL -> nil). +;; Liefert das Lisp-Verzeichnis (mit "/"-Trennern, ohne abschliessenden "/") +;; oder nil, wenn keine Quelle gesetzt ist. +;; +;; HINWEIS zur Ladeordnung: Diese Funktion lebt in ssg_core.lsp und ist erst +;; verfuegbar, NACHDEM ssg_core geladen wurde. Der ssg_core-Bootstrap selbst +;; (z.B. in VarioFoerderer.lsp/vf_konstanten.lsp/vf_core.lsp, der ssg_core erst +;; laedt) kann sie daher NICHT nutzen - dort bleibt der Inline-cond stehen. +;; Alle Stellen, die garantiert nach dem ssg_core-Laden laufen, nutzen sie. +(defun ssg-lisp-verzeichnis ( / ) + (cond + ((getenv "DXFM_LISP") + (vl-string-translate "\\" "/" (getenv "DXFM_LISP"))) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) + *ssg-lisp-pfad*) + (t nil) + ) +) + +;; Vollstaendiger Pfad zu einer Lisp-Datei im Lisp-Verzeichnis (oder nil). +;; dateiname z.B. "vf_core.lsp". +(defun ssg-lisp-datei-pfad (dateiname / verz) + (setq verz (ssg-lisp-verzeichnis)) + (if verz (strcat verz "/" dateiname) nil) +) + + ;; ------------------------------------------------------------ ;; BENUTZER-ABFRAGEN ;; ------------------------------------------------------------ diff --git a/Lisp/vf_core.lsp b/Lisp/vf_core.lsp index 626a4fd..65ccac6 100644 --- a/Lisp/vf_core.lsp +++ b/Lisp/vf_core.lsp @@ -1210,16 +1210,8 @@ (if (not *ssg-vf-submodule-loaded*) (progn (princ "\n>>> VARIOFOERDERER v26.0 geladen <<<") - ;; Lisp-Pfad ermitteln: 1) DXFM_LISP, 2) *ssg-lisp-pfad* (vom MNL gesetzt) - (setq *vf-lisp-pfad* - (cond - ((getenv "DXFM_LISP") - (vl-string-translate "\\" "/" (getenv "DXFM_LISP"))) - ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) - *ssg-lisp-pfad*) - (t nil) - ) - ) + ;; Lisp-Pfad zentral ueber ssg_core (ssg_core ist hier bereits geladen). + (setq *vf-lisp-pfad* (ssg-lisp-verzeichnis)) (if *vf-lisp-pfad* (progn (load (strcat *vf-lisp-pfad* "/vf_konstanten.lsp")) diff --git a/Lisp/vf_etage.lsp b/Lisp/vf_etage.lsp index 74a2112..a0ee8ed 100644 --- a/Lisp/vf_etage.lsp +++ b/Lisp/vf_etage.lsp @@ -6,18 +6,18 @@ ;; 15-Schritt-Einfuegung ;; ============================================================ -;; Sicherstellen, dass vf_core.lsp geladen ist +;; Sicherstellen, dass vf_core.lsp geladen ist. Pfad zentral ueber ssg_core +;; (ssg-lisp-verzeichnis), mit Inline-Fallback falls ssg_core hier noch nicht +;; geladen ist (nur relevant beim isolierten Einzel-Laden dieser Datei). (if (not (car (atoms-family 1 '("VF-TYP-REGISTRIEREN")))) (progn (setq *vf-etage-core-pfad* - (cond - ((getenv "DXFM_LISP") - (vl-string-translate "\\" "/" (getenv "DXFM_LISP"))) - ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) - *ssg-lisp-pfad*) - (t nil) - ) - ) + (if (car (atoms-family 1 '("SSG-LISP-VERZEICHNIS"))) + (ssg-lisp-verzeichnis) + (cond + ((getenv "DXFM_LISP") (vl-string-translate "\\" "/" (getenv "DXFM_LISP"))) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) *ssg-lisp-pfad*) + (t nil)))) (if *vf-etage-core-pfad* (load (strcat *vf-etage-core-pfad* "/vf_core.lsp")) (progn diff --git a/Lisp/vf_konstanten.lsp b/Lisp/vf_konstanten.lsp index 3714155..142c24f 100644 --- a/Lisp/vf_konstanten.lsp +++ b/Lisp/vf_konstanten.lsp @@ -28,15 +28,15 @@ (if (not (car (atoms-family 1 '("VF-TYP-REGISTRIEREN")))) (progn + ;; Pfad zentral ueber ssg_core (ssg-lisp-verzeichnis), mit Inline-Fallback + ;; falls ssg_core hier noch nicht geladen ist. (setq *vf-konst-core-pfad* - (cond - ((getenv "DXFM_LISP") - (vl-string-translate "\\" "/" (getenv "DXFM_LISP"))) - ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) - *ssg-lisp-pfad*) - (t nil) - ) - ) + (if (car (atoms-family 1 '("SSG-LISP-VERZEICHNIS"))) + (ssg-lisp-verzeichnis) + (cond + ((getenv "DXFM_LISP") (vl-string-translate "\\" "/" (getenv "DXFM_LISP"))) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) *ssg-lisp-pfad*) + (t nil)))) (if *vf-konst-core-pfad* (load (strcat *vf-konst-core-pfad* "/vf_core.lsp")) (princ "\n[WARNUNG] vf_konstanten.lsp: DXFM_LISP/ssg-lisp-pfad nicht gesetzt.") diff --git a/Lisp/vf_standard.lsp b/Lisp/vf_standard.lsp index 1f781a4..037b8b6 100644 --- a/Lisp/vf_standard.lsp +++ b/Lisp/vf_standard.lsp @@ -6,18 +6,18 @@ ;; 11-Schritt-Einfuegung ;; ============================================================ -;; Sicherstellen, dass vf_core.lsp geladen ist +;; Sicherstellen, dass vf_core.lsp geladen ist. Pfad zentral ueber ssg_core +;; (ssg-lisp-verzeichnis), mit Inline-Fallback falls ssg_core hier noch nicht +;; geladen ist (nur relevant beim isolierten Einzel-Laden dieser Datei). (if (not (car (atoms-family 1 '("VF-TYP-REGISTRIEREN")))) (progn (setq *vf-std-core-pfad* - (cond - ((getenv "DXFM_LISP") - (vl-string-translate "\\" "/" (getenv "DXFM_LISP"))) - ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) - *ssg-lisp-pfad*) - (t nil) - ) - ) + (if (car (atoms-family 1 '("SSG-LISP-VERZEICHNIS"))) + (ssg-lisp-verzeichnis) + (cond + ((getenv "DXFM_LISP") (vl-string-translate "\\" "/" (getenv "DXFM_LISP"))) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) *ssg-lisp-pfad*) + (t nil)))) (if *vf-std-core-pfad* (load (strcat *vf-std-core-pfad* "/vf_core.lsp")) (progn