;; ============================================================ ;; SSG_LIB.mnl - Automatisch geladen beim MENULOAD von SSG_LIB.mnu ;; ;; Definiert den Lazy-Loader (ssg-ensure) und laedt alle Module. ;; Kern-Module: ssg_core, ssg_dbg, ssg_dialog, ssg_layer, ssg_id ;; Feature-Module: KreiselInsert, Gefaellestrecke, VarioFoerderer, ... ;; ============================================================ ;; Globale Variable: Pfad zu den LISP-Dateien ;; Zuerst Umgebungsvariable, dann Heuristik aus MNL-Datei-Pfad (setq *ssg-lisp-pfad* (getenv "DXFM_LISP")) (if *ssg-lisp-pfad* (setq *ssg-lisp-pfad* (vl-string-translate "\\" "/" *ssg-lisp-pfad*)) ;; Fallback: Pfad aus MNL-Datei ableiten – menu/SSG_LIB.mnl → Lisp/ (progn (setq *ssg-mnl-datei* (findfile "SSG_LIB.mnl")) (if *ssg-mnl-datei* (progn (setq *ssg-mnl-datei* (vl-string-translate "\\" "/" *ssg-mnl-datei*)) (setq *ssg-menu-pos* (vl-string-search "/menu/" *ssg-mnl-datei*)) (if *ssg-menu-pos* (progn (setq *ssg-lisp-pfad* (strcat (substr *ssg-mnl-datei* 1 *ssg-menu-pos*) "/Lisp")) (if (not (findfile (strcat *ssg-lisp-pfad* "/ssg_core.lsp"))) (progn (setq *ssg-lisp-pfad* nil) (princ "\n[SSG_LIB] Heuristik fehlgeschlagen: ssg_core.lsp nicht gefunden.") ) ) ) ) ) ) ) ) ;; ------------------------------------------------------------ ;; ssg-ensure - Lazy-Loader fuer SSG_LIB Module ;; ;; Laedt ein Modul einmalig. Setzt Flag *ssg--loaded*. ;; Laedt Kern-Abhaengigkeiten (core/dbg/dialog/layer) automatisch. ;; ------------------------------------------------------------ (defun ssg-ensure (modul / flag-sym) (setq flag-sym (read (strcat "*ssg-" modul "-loaded*"))) (if (not (eval flag-sym)) (progn ;; Pfad nachschlagen falls noch nicht gesetzt (if (null *ssg-lisp-pfad*) (progn (setq *ssg-lisp-pfad* (getenv "DXFM_LISP")) (if *ssg-lisp-pfad* (setq *ssg-lisp-pfad* (vl-string-translate "\\" "/" *ssg-lisp-pfad*)) ) ) ) (if (null *ssg-lisp-pfad*) (progn (alert "SSG_LIB: DXFM_LISP nicht gesetzt!\nBitte zuerst setenv.bat ausfuehren.") (princ "\n[SSG_LIB] FEHLER: DXFM_LISP nicht gesetzt!") ) (progn ;; Kern-Module als Abhaengigkeit laden (je nur einmal) ;; WICHTIG: auch den modul-spezifischen Flag setzen, sonst Doppelladen (if (not *ssg-core-loaded*) (progn (ssg-ensure-load "ssg_core") (set '*ssg-core-loaded* t) (set '*ssg-ssg_core-loaded* t) (ssg-load-config) ) ) (if (not *ssg-dbg-loaded*) (progn (ssg-ensure-load "ssg_dbg") (set '*ssg-dbg-loaded* t) (set '*ssg-ssg_dbg-loaded* t) (if (and (atoms-family 1 '("DBGOPEN")) (getenv "DXFM_LOG")) (dbgopen "debugfile.dbg" "DXFM_LOG") ) ) ) (if (not *ssg-dialog-loaded*) (progn (ssg-ensure-load "ssg_dialog") (set '*ssg-dialog-loaded* t) (set '*ssg-ssg_dialog-loaded* t) ) ) (if (not *ssg-layer-loaded*) (progn (ssg-ensure-load "ssg_layer") (set '*ssg-layer-loaded* t) (set '*ssg-ssg_layer-loaded* t) ) ) ;; Angefordertes Feature-Modul laden (falls noch nicht via Kern-Flags gesetzt) (if (not (eval flag-sym)) (progn (ssg-ensure-load modul) (set flag-sym t) ) ) ) ) ) ) (princ) ) ;; Hilfsfunktion: Datei laden mit Fehlerbehandlung (ohne eigene Lademeldung) (defun ssg-ensure-load (modul / datei result) (setq datei (strcat *ssg-lisp-pfad* "/" modul ".lsp")) (if (findfile datei) (progn (setq result (vl-catch-all-apply 'load (list datei))) (if (vl-catch-all-error-p result) (princ (strcat "\n[SSG_LIB] FEHLER beim Laden von " modul ": " (vl-catch-all-error-message result))) ) ) (princ (strcat "\n[SSG_LIB] WARNUNG: " datei " nicht gefunden!")) ) ) ;; ------------------------------------------------------------ ;; Beim MNL-Laden: Kern-Module + Feature-Module laden ;; ------------------------------------------------------------ (if *ssg-lisp-pfad* (progn ;; 1) Kern-Module (Core) (ssg-ensure "ssg_core") (ssg-ensure "ssg_dbg") (ssg-ensure "ssg_dialog") (ssg-ensure "ssg_layer") (ssg-ensure "ssg_id") ;; Allgemein-Zusammenfassung (princ "\n=========================================") (princ "\n[SSG_LIB] Core-Module geladen:") (princ "\n ssg_core, ssg_dbg, ssg_dialog, ssg_layer, ssg_id") (princ (strcat "\n Pfad: " *ssg-lisp-pfad*)) (princ "\n=========================================") ;; 2) Feature-Module in Anzeigereihenfolge (ssg-ensure "KreiselInsert") (ssg-ensure "Gefaellestrecke") (ssg-ensure "VarioFoerderer") (ssg-ensure "EtageVarioFoerderer") (ssg-ensure "export") (ssg-ensure "external_call") (ssg-ensure "OmniModulInsert") (ssg-ensure "SSG_LIB_Commands") ;; Menue einhaengen (menucmd "P13=+SSG_LIB.POP1") (setvar "DBLCLKEDIT" 1) (princ "\n[SSG_LIB] Alle Module geladen. Menue aktiv.") ) (princ "\n[SSG_LIB] WARNUNG: DXFM_LISP nicht gesetzt - Befehle nicht verfuegbar.") ) (princ)