Betölthet AutoLISP rutinokat az indításkor, és bizonyos parancsokat vagy függvényeket a rajzszerkesztés meghatározott fázisaiban automatikusan is futtathat.
Az AutoCAD-alapú termékek és az AutoCAD LT automatikusan betöltik három, felhasználó által definiálható fájl tartalmát:
| Felhasználó által definiálható fájl | Windows | Mac OS | ||
|---|---|---|---|---|
| AutoCAD | AutoCAD LT | AutoCAD | AutoCAD LT | |
| acad.lsp | ✓ | – | ✓ | – |
| acaddoc.lsp | ✓ | – | ✓ | – |
| acadlt.lsp | – | ✓ | – | – |
| acadltdoc.lsp | – | ✓ | – | – |
| MNL-fájl és az aktuális testreszabási fájl | ✓ | – | ✓ | – |
Alapértelmezés szerint az acad.lsp vagy acadlt.lsp fájl csak egyszer töltődik be a termék indításakor, míg az acaddoc.lsp vagy acadltdoc.lsp fájlt minden egyes dokumentumhoz (vagy rajzhoz) betölti a rendszer. Ennélfogva az acad.lsp vagy acadlt.lsp fájl betöltése az alkalmazás indításával, az acaddoc.lsp vagy acadltdoc.lsp fájl betöltése pedig a dokumentum (vagy rajz) indításával függ össze. Ezen induláskor betöltendő fájlok alapértelmezett betöltési módja az ACADLSPASDOC rendszerváltozó értékének megváltoztatásával módosítható.
Ha e fájlok valamelyike egy S::STARTUP típusú függvényt definiál, a rutin futtatása közvetlenül a rajz teljes inicializálása után történik. Használhatja az ALKTÖLT parancs Indítópult opcióját is, amely anélkül tölti be az adott alkalmazást, hogy bármely fájlt szerkesztenie kellene.
Az acad.lsp vagy acadlt.lsp, illetve acaddoc.lsp vagy acadltdoc.lsp indítófájlok nincsenek mellékelve a termékhez. Ezeket a felhasználónak kell létrehoznia és karbantartania.
Az AutoLISP-fájlok betöltésekor a fájlban található parancsdefiníciók memóriát használnak akkor is, ha nem használja a parancsokat. Az AutoLISP autoload függvénye anélkül tesz elérhetővé egy parancsot, hogy az egész rutint a memóriába töltené. Ha az alábbi kódot hozzáírja az acaddoc.lsp vagy acadltdoc.lsp fájlhoz, akkor az automatikusan betölti a PARANCS1, a PARANCS2 és a PARANCS3 parancsot a cmds.lsp fájlból, és a NEWCMD parancsot a newcmd.lsp fájlból.
(autoload "CMDS" '("CMD1" "CMD2" "CMD3"))
(autoload "NEWCMD" '("NEWCMD"))
Amikor a parancspromptnál első alkalommal írja be egy automatikusan betöltődő parancs nevét, az AutoLISP a teljes parancsdefiníciót betölti a megfelelő fájlból. Az AutoLISP az autoarxload függvényt is biztosítja az ObjectARX-alkalmazásokhoz.
Ha rendszeresen használ speciális AutoLISP-rutinokat, létrehozhat egy acad.lsp vagy acadlt.lsp fájlt. Az AutoCAD elindításakor a program a támogatási fájlok keresési útvonalán megkeresi az acad.lsp vagy acadlt.lsp fájlt. Ha megtalálja az acad.lsp vagy acadlt.lsp fájlt, betölti a memóriába.
Mivel az acad.lsp vagy acadlt.lsp fájlt csak az alkalmazásspecifikus indítási rutinok esetében lehet használni, az acad.lsp vagy acadlt.lsp fájlban definiált függvények és rutinok csak az első rajzban érhetők el. Azokat a rutinokat, amelyeket az összes dokumentumban elérhetővé szeretne tenni, érdemes áthelyezni az acad.lsp vagy acadlt.lsp fájlból az acaddoc.lsp vagy acadltdoc.lsp fájlba.
Az acad.lsp vagy acadlt.lsp és az acaddoc.lsp vagy acadltdoc.lsp fájl javasolt funkcióit felül lehet bírálni az ACADLSPASDOC rendszerváltozóval. Ha az ACADLSPASDOC rendszerváltozó értéke 0 (alapbeállítás), az acad.lsp vagy acadlt.lsp fájl csak egyszer töltődik be: az alkalmazás indításakor. Ha az érték 1, akkor a program minden egyes új rajz létrehozásánál és meglévő rajz megnyitásánál újra betölti az acad.lsp vagy acadlt.lsp fájlt.
Az acad.lsp vagy acadlt.lsp fájl tartalmazhat egy vagy több rutinhoz tartozó AutoLISP-kódot, illetve állhat kizárólag load függvényhívások sorozatából is. Az utóbbi módszer előnyösebb, mivel a kód módosítása egyszerűbb. Ha acad.lsp vagy acadlt.lsp fájlnévvel menti a következő kódot, a mysessionapp1.lsp, databasesynch.lsp és drawingmanager.lsp fájlok a program minden egyes indításakor betöltődnek.
(load "mysessionapp1") (load "databasesynch") (load "drawingmanager")
Az acaddoc.lsp vagy acadltdoc.lsp fájl arra való, hogy minden egyes dokumentum (vagy rajz) inicializálásakor be legyen töltve. Ez a fájl akkor hasznos, ha minden egyes új rajz létrehozásakor (vagy egy meglévő betöltésekor) be kíván tölteni egy AutoLISP-rutinokból álló könyvtárat.
A rajzok megnyitásakor az AutoCAD minden alkalommal megkeresi, hogy van-e egy acaddoc.lsp vagy acadltdoc.lsp fájl a könyvtárelérési útvonalon, és ha talál egyet, annak tartalmát a memóriába tölti. Az acaddoc.lsp vagy acadltdoc.lsp fájl minden rajzzal együtt betöltődik, függetlenül az ACADLSPASDOC rendszerváltozó értékétől.
A legtöbb felhasználónak csak egyetlen acaddoc.lsp vagy acadltdoc.lsp fájlja van az összes dokumentumalapú AutoLISP-rutinhoz. A termék az acaddoc.lsp vagy acadltdoc.lsp fájlt a könyvtárútvonal által definiált sorrendben keresi. Ezt kihasználva minden egyes rajzkönyvtárba kerülhet egy-egy különböző tartalmú acaddoc.lsp vagy acadltdoc.lsp fájl, amelyekkel specifikus AutoLISP-rutinokat lehet betölteni az egyes rajz- és feladattípusokhoz.
Az acaddoc.lsp vagy acadltdoc.lsp fájl tartalmazhatja egy vagy több rutin AutoLISP-kódját, de állhat load függvényhívások sorozatából is. Az utóbbi módszer előnyösebb, mivel a kód módosítása egyszerűbb. Ha acaddoc.lsp vagy acadltdoc.lsp fájlként menti a következő kódot, a mydocumentapp1.lsp, build.lsp és counter.lsp fájlok az új dokumentumok megnyitásakor minden alkalommal betöltődnek.
(load "mydocumentapp1") (load "build") (load "counter")
Amikor a termék betölt egy testreszabási (CUI/CUIx) fájlt, egyúttal egy azonos nevű .MNL kiterjesztésű fájlt is keres, és ha megtalálja, annak tartalmát a memóriába tölti. Ez a módszer biztosítja, hogy a felhasználói felület elemeinek működéséhez szükséges AutoLISP-függvényeket a program mindig betöltse.
Ha például a termék betölt egy custom.cuix nevű testreszabási fájlt, akkor egy custom.mnl nevű fájlt fog keresni, amely számos, a felhasználói felület elemei által használt AutoLISP-függvényt határozhat meg a testreszabási fájlban. A program az MNL-fájlt az acaddoc.lsp fájl után tölti be.
(command "menu" "newmenu") (princ "Newmenu utilities… Loaded.") (Princ)
Ebben a példában a princ függvény meghívása használható állapotüzenetek megjelenítésére. A princ függvény első meghívásakor a parancspromptban a következő üzenet jelenik meg:
Újmenü eszközök… Betöltve.
A princ második meghívására az AutoLISP-függvény befejeződik. A princ függvény második meghívása nélkül az üzenet kétszer jelenne meg. Ahogy korábban említettük, a load függvény hívásakor az onfailure argumentumot is megadhatja további óvintézkedésként.
A rajz inicializálása után végrehajtandó valamilyen beállítási művelet végrehajtására S::STARTUP függvényt definiálható.
Az indítási LISP-fájlok (acad.lsp vagy acadlt.lsp és acaddoc.lsp vagy acadltdoc.lsp) mindegyike betöltődik a memóriába az automatikusan betöltött MNL-fájlokkal együtt, mielőtt sor kerülne a rajz teljes körű inicializálására. Ez általában nem okoz problémát, hacsak nem szeretné használni a command függvényt, amelynek működése nem biztosított a rajz teljes inicializálása előtt.
Ha felhasználói S::STARTUP függvény szerepel az acad.lsp vagy acadlt.lsp, acaddoc.lsp vagy acadltdoc.lsp, illetve egy MNL-fájlban, a program mindig meghívja azt egy új rajz elindításakor vagy egy meglévő rajz megnyitásakor. Így a beállítási műveletek elvégzéséhez egy S::STARTUP definíciót helyezhet el az indításkor betöltődő AutoLISP-fájlban.
Ha például a SRAFFOZ parancsot felül szeretné írni egy üzenet hozzáadásával, és át kíván térni a HSRAFFOZ parancsra, akkor használjon egy acaddoc.lsp vagy acadltdoc.lsp fájlt, amely a következőket tartalmazza:
(defun C:HATCH ( ) (alert "Using the BHATCH command!") (princ "\nEnter OLDHATCH to get to real HATCH command.\n") (command "BHATCH") (princ) ) (defun C:OLDHATCH ( ) (command ".HATCH") (princ) ) (defun-q S::STARTUP ( ) (command "undefine" "hatch") (princ "\nRedefined HATCH to BHATCH!\n") )
A rajz inicializálása előtt a SRAFFOZ és RÉGISRAFFOZ parancs új definíciójának megadása a defun függvénnyel történik. A rajz inicializálása után a program meghívja az S::STARTUP függvényt, és törli a SRAFFOZ eredeti definícióját.
Mivel az S::STARTUP függvényt sok helyen lehet definiálni (acad.lsp vagy acadlt.lsp, acaddoc.lsp vagy acadltdoc.lsp, illetve egy ezek bármelyikéből betöltött MNL-fájl vagy egyéb AutoLISP-fájl), a korábban definiált S::STARTUP függvények felülírhatók.
A következő példa arra mutat egy módszert, hogy hogyan gondoskodhat arról, hogy az indításkor betöltődő függvény megfelelően tudjon működni a többi függvénnyel.
(defun-q MYSTARTUP ( )
... indításkor betöltődő függvény ...
) (setq S::STARTUP (append S::STARTUP MYSTARTUP))
Az előző kód az indításkor betöltődő függvényt hozzáfűzi egy meglévő S::STARTUP függvényhez, majd újradefiniálja az S::STARTUP függvényt úgy, hogy az tartalmazza a felhasználó indításkor betöltendő kódját. Ez a módszer attól függetlenül megfelelően működik, hogy létezett-e előzőleg S::STARTUP függvény.