diff --git a/bin/on_start.lsp b/bin/on_start.lsp new file mode 100644 index 0000000..9c1263a --- /dev/null +++ b/bin/on_start.lsp @@ -0,0 +1,120 @@ +;; ============================================================ +;; on_start.lsp - SSG_LIB Startup fuer BricsCAD +;; Wird beim Start von BricsCAD automatisch ausgefuehrt +;; ============================================================ + +(defun ssg-lib-safe-load (datei / result) + (setq result (vl-catch-all-apply 'load (list datei))) + (if (vl-catch-all-error-p result) + (progn + (princ (strcat "\n[SSG_LIB] FEHLER beim Laden von " datei ":")) + (princ (strcat "\n " (vl-catch-all-error-message result))) + nil + ) + t + ) +) + +;; ------------------------------------------------------------ +;; SSG-DBG-FN - Prueft ob ein AutoLISP-Symbol gebunden ist +;; Gibt "JA" oder "NEIN" zurueck (atoms-family, BRX-Cmds nicht pruefbar) +;; ------------------------------------------------------------ +(defun ssg-dbg-fn (fname) + (if (car (atoms-family 1 (list fname))) "JA" "NEIN") +) + +;; ------------------------------------------------------------ +;; SSG-LIB-REGISTER-CHECK - Verfuegbarkeit aller Befehle ins Debug-Log schreiben +;; ------------------------------------------------------------ +(defun ssg-lib-register-check () + (dbgmsg "[CHECK] --- AutoLISP Funktionen (atoms-family) ---") + (dbgmsg (strcat "ssg-start: " (ssg-dbg-fn "SSG-START"))) + (dbgmsg (strcat "ssg-end: " (ssg-dbg-fn "SSG-END"))) + (dbgmsg (strcat "ssg-make-layer: " (ssg-dbg-fn "SSG-MAKE-LAYER"))) + (dbgmsg (strcat "ssg-errhan: " (ssg-dbg-fn "SSG-ERRHAN"))) + (dbgmsg (strcat "ensure-block-loaded: " (ssg-dbg-fn "ENSURE-BLOCK-LOADED"))) + (dbgmsg "[CHECK] --- SSG_LIB_Commands (c:...) ---") + (dbgmsg (strcat "c:ILS_BTMT_Beladung: " (ssg-dbg-fn "C:ILS_BTMT_BELADUNG"))) + (dbgmsg (strcat "c:ILS_K90LA: " (ssg-dbg-fn "C:ILS_K90LA"))) + (dbgmsg (strcat "c:ILS_TEF_Strecke: " (ssg-dbg-fn "C:ILS_TEF_STRECKE"))) + (dbgmsg (strcat "c:KreiselInsert: " (ssg-dbg-fn "C:KREISELINSERT"))) + (dbgmsg (strcat "c:KreiselEdit: " (ssg-dbg-fn "C:KREISELEDIT"))) + (dbgmsg (strcat "c:ILS_Eckrad: " (ssg-dbg-fn "C:ILS_ECKRAD"))) + (dbgmsg (strcat "c:OMNI_AP60: " (ssg-dbg-fn "C:OMNI_AP60"))) + (dbgmsg (strcat "c:OMNI_APB_630_90: " (ssg-dbg-fn "C:OMNI_APB_630_90"))) + (dbgmsg (strcat "c:OMNI_W90_Einfach: " (ssg-dbg-fn "C:OMNI_W90_EINFACH"))) + (dbgflush) +) + +(defun ssg-lib-startup ( / lisp-pfad menu-pfad curr-srch menu-datei lsp-fb-pfad) + + ;; Pfade aus Umgebungsvariablen lesen + (setq lisp-pfad (getenv "DXFM_LISP")) + (setq menu-pfad (getenv "DXFMAKRO")) + + ;; Pfadtrenner vereinheitlichen: Backslash -> Forward-Slash + (if lisp-pfad (setq lisp-pfad (vl-string-translate "\\" "/" lisp-pfad))) + (if menu-pfad (setq menu-pfad (vl-string-translate "\\" "/" menu-pfad))) + + (if (null lisp-pfad) + (progn + (princ "\n[SSG_LIB] FEHLER: DXFM_LISP nicht gesetzt!") + (princ "\n[SSG_LIB] Bitte zuerst bin\\setenv.bat ausfuehren.") + ) + (progn + ;; Debug-Logging so frueh wie moeglich starten + (if (findfile (strcat lisp-pfad "/ssg_dbg.lsp")) + (progn + (load (strcat lisp-pfad "/ssg_dbg.lsp")) + (dbgopen "debugfile.dbg" "DXFM_LOG") + (dbgmsg "[on_start] Startup begonnen") + (dbgmsg (strcat "[on_start] DXFM_LISP=" lisp-pfad)) + (dbgmsg (strcat "[on_start] DXFMAKRO=" (if menu-pfad menu-pfad "nicht gesetzt"))) + (dbgflush) + ) + ) + + (princ "\n[SSG_LIB] Lade SSG_LIB Umgebung...") + + ;; Library laden (direkt, damit Fehler sichtbar sind) + ;; Kein SRCHPATH-Aendern noetig - alle Dateien werden ueber + ;; absolute Pfade (Umgebungsvariablen) geladen + (if (findfile (strcat lisp-pfad "/ssg_load.lsp")) + (progn + (load (strcat lisp-pfad "/ssg_load.lsp")) + (princ "\n[SSG_LIB] ssg_load.lsp geladen.") + ) + (princ "\n[SSG_LIB] WARNUNG: ssg_load.lsp nicht gefunden!") + ) + + ;; Menue laden + (if menu-pfad + (progn + (setq menu-datei (strcat menu-pfad "/menu/SSG_LIB.mnu")) + (if (findfile menu-datei) + (progn + (command "_.MENULOAD" menu-datei) + (menucmd "P13=+SSG_LIB.POP1") + (princ "\n[SSG_LIB] Menue SSG_LIB geladen und eingebunden.") + ) + (princ (strcat "\n[SSG_LIB] WARNUNG: " menu-datei " nicht gefunden!")) + ) + ) + (princ "\n[SSG_LIB] WARNUNG: DXFMAKRO nicht gesetzt, Menue nicht geladen!") + ) + + ;; DBLCLKEDIT=1: Doppelklick aktiv, ***DOUBLECLICK-Eintraege steuern Block-Verhalten + (setvar "DBLCLKEDIT" 1) + + (dbgflush) + + (ssg-lib-register-check) + + (princ "\n[SSG_LIB] Startup abgeschlossen.") + ) + ) + (princ) +) + +;; Startup ausfuehren +(ssg-lib-startup)