Ein paar Worte vorabHome   Letzte MeldungenNews   Index der Kapitel und der besprochenen FunktionenIndex   Wer ich bin, warum ich diese Seiten mache, KontaktImpressum   Ich freue mich über jeden Eintrag im Gästebuch!Gästebuch   Einige Links zu anderen AutoLisp-SeitenLinks   Copyrights und DisclaimerRechts
Hier können die kompletten Seiten als ZIP-File heruntergeladen werden!

Berechnen von arithmetischen Ausdrücken in der Kommandozeile Sitz!Platz!Fass!
Das Verschachteln von Ausdrücken Alte Schachtel!
Das Speichern von Werten in Variablen Gebunkert
Verhindern der Evaluation mit Quote Bergbäche
Erzeugen von einfachen Listen in AutoLisp Brot,Eier,Käse
Einfache Funktionen zur Listenbearbeitung ...um die Wurst
Funktionen für den Zugriff auf Listenelemente Was ein Salat!
Über Haupt- und Nebeneffekte von Funktionen Schwer schuften
Das Definieren von eigenen Funktionen in AutoLisp Ostfriesischer...
Lokale Variablen und Funktionsargumente in AutoLisp Kondome!
Das Laden von Programmdateien in AutoLisp Banküberfall
Verzweigung in Funktionen aufgrund von Entscheidungen Wenn das Wort...
Zusammenfassen von Entscheidungen mit den Logik-Funktionen Ins Schweinderl
Mehrfach-Verzweigungen in AutoLisp mit Cond 3. Strasse links
Schleifen zum Steuern des Ablaufs in AutoLisp-Funktionen Wie im Fernsehen
Testfunktionen zum Steuern von Schleifen in AutoLisp Schwanger?
Gleichheitstests als Schleifenkriterium in AutoLisp Noch gleicher?
Zeichneketten-Bearbeitung in AutoLisp Rauchzeichen
Funktionen zur Konvertierung von Datentypen in AutoLisp Wasser zu Wein
Komplexere Funktionen für die Bearbeitung von Listen in AutoLisp Nicht arbeiten...
Das Erzeugen von anonymen Funktionen mit lambda Schwarze Kutte
Das Bearbeiten von Listenelementen mit foreach Jedem das Seine
Erzeugen und Verwenden von Assoziationslisten in AutoLisp Beim Psychiater
Zugriff auf Geometriedaten und Erzeugen von Geometrieelementen Ententanz
Der Umgang mit Auswahlsätzen in AutoLisp Jung gefreit, ...
Auswahl von AutoCAD-Zeichnungsgeometrie mit ssget Raffgierig!
Verändern von Zeichnungs-Geometrie mit entmod Flickschusterei
Das Erzeugen von Geometrie mit entmake Houdini
Über Programmierstile in AutoLisp, Teil 1 Emma
Über Programmierstile in AutoLisp, Teil 2 Sti(e)lblüten
Über Programmierstile in AutoLisp, Teil 3 Eingewickelt
Über Programmierstile in AutoLisp, Teil 4 Doofe Frisur?


Zum den Seiten für Fortgeschrittene

Zu den ActiveX-Seiten

Meine Private HP mit Fotos, Gedichten, Musik und Postkartenversand

Mein Online-Lexikon der Fotografie

Mein völlig abgedrehtes Reisebüro










Wir sind jetzt an einem Punkt angelangt, wo es vielleicht nicht mehr allzu effektiv ist, jede Funktion, die wir testen wollen, immer wieder auf der Kommandozeile einzutippen. Bei einem kleinen Tippfehler war alles umsonst, und wir müssen wieder von vorne anfangen. Aber natürlich: AutoLisp stellt uns einen Mechanismus zur Verfügung, Funktionsdefinitionen in eine Datei zu schreiben und dann zu laden. Diese Funktion heisst (load ...).

Ein kleines Beispiel, wie das funktioniert: Wir schreiben eine Funktion mit einem Texteditor in eine Datei. Für das Beispiel genügt es, wenn wir unsere Definition für das Quadrat einer Zahl verwenden:
(defun sqr(zahl)
  (* zahl zahl)
)
                  
Als Texteditor sollten wir ein Programm benutzen, das reine ASCII-Dateien ohne Formatierung schreibt, zunächst einmal genügt der in Windows eingebaute Editor (notepad.exe) völlig. Später sollte man sich ach einem geeigneten Editor für Programmierer umsehen, es gibt z.B. TextPad, Ultra-Edit, Multi-Edit und noch viele mehr.

Ungeeignet sind Textverarbeitungsprogramme, die Steuerzeichen für Formatierungen in den Text einbetten, z.B. Word oder WordPad. Zwar kann man mit diesen Programmen auch reine ASCII-Dateien schreiben, aber nur, wenn man immer daran denkt, vor dem Speichern das entsprechende Ausgabeformat zu wählen.

Auf jeden Fall speichern wir unsere Funktion unter dem Dateinamen 'sqr.lsp' auf der Festplatte ab, und zwar erst einmal in einem geeigneten Verzeichnis. Schliesslich ist eine Festplatte riesengross, und AutoLisp muss die Datei auch finden können, wenn wir sie laden möchten. Wir können ein Verzeichnis wählen, das bei AutoCAD in den Voreinstellungen bereits eingetragen ist, oder wir machen gleich Nägel mit Köpfen, legen uns ein Verzeichnis für unsere selbstgeschriebenen Lisp-Programme an und tragen es in den Suchpfad von AutoCAD ein. Wie das funktioniert, sollte bekannt sein - es ist genauso, wie wenn wir Blöcke laden wollen.

Jetzt können wir jederzeit unser Programm laden: Wir geben auf der Kommandozeile (load "sqr") ein, und schon können wir quadrieren. Die Datei-Endung .lsp haben wir hier weggelassen, Lisp geht davon aus, dass die Endung so lautet. Es hindert uns nichts daran, der Datei eine andere Endung zu geben, dann müssen wir beim Laden allerdings den vollständigen Namen angeben. Ob das aber sinnvoll ist, bleibt dahingestellt...

Mit dem Befehl 'appload' stellt uns AutoCAD eine Alternative zu (load ...) zur Verfügung. Wer diesen Befehl noch nicht kennt, kann sich über die AutoCAD-Hilfe damit vertraut machen. Ich werde hier auf 'appload' nicht weiter eingehen, da das Laden von Lisproutinen auf diesem Wege viel zu umständlich ist und auch verschachtelte loads, auf die wir später zu sprechen kommen, nicht möglich sind.

Es müssen übrigens nicht unbedingt Funktionsdefinitionen sein, die wir in der Datei ablegen. Jeder Lisp-Ausdruck, den wir auf der Kommandozeile eingeben können, kann auch in einer Datei stehen. Egal, welche und wie viele Ausdrücke in der Datei stehen, sie werden durch den Ladeprozess evaluiert. Die durch (defun ...) definierten Funktionen sind anschliessend geladen, und wenn in der Datei eine (setq ...)-Anweisung angetroffen wird, ist die Variable anschliessend definiert.

Man kann auch Lisp-Dateien laden, die an anderen Stellen auf der Festplatte oder einem anderen Datenträger liegen. In diesem Fall muss man natürlich den vollständigen Namen der Datei mit Pfad eingeben. Dabei ist allerdings eines zu beachten: Der Backslash '\' ist in Lisp-Zeichenketten ein Steuerzeichen. Es gibt z.B. das Zeichen '\n' für einen Zeilenumbruch (= newline) in einer Zeichenkette oder '\t' für einen Tab-Vorschub. Damit ein Backslash wirklich als solcher interpretiert wird, muss man ihn doppelt eingeben oder statt dessen einen Schrägstrich verwenden:
(load "sqr")
; Die einfachste Variante, Datei liegt
; im AutoCAD-Suchpfad

(load "sqr.lsp")
; genauso, aber mit angegebener Endung

(load "a:\\sqr.lsp")
; Die Datei von Diskette laden

(load "a:\\neue programme\\sqr.lsp")
; korrekt, liegt in Unterverzeichnis

(load "a:/neue programme/sqr.lsp")
; ebenso korrekt

(load "a:\neue programme\sqr.lsp")
; so nicht! '\n' ist ein Zeilenumbruch
; und \s ist nichtdefiniert!
; Das wird von AutoCAD so interpretiert:
(load "a:
eue programmesqr.lsp")
; So wird das also nichts!
                  
An dieser Stelle sollte auch nicht unerwähnt bleiben, dass es die sinnvolle Einrichtung des Kommentars gibt. Ich habe hier bisher stillschweigend in vielen Beispielen das Kommentarzeichen ; verwendet, ohne bisher darauf einzugehen. Alles, was in einer Zeile nach dem Semikolon folgt, wird vom AutoLisp-Interpreter ignoriert (es sei denn, das Kommentarzeichen ist innerhalb einer Zeichenkette).

Kommentare sind dazu da, sich selbst (und anderen) eine Hilfestellung zu geben. Was nützt die schönste Funktion, die wir auf der Platte abspeichern, wenn aber schon nach vier Wochen in Vergessenheit geraten ist, was sie macht, wie sie es macht, wer sie gemacht hat, wann sie gemacht wurde? So könnte es aussehen:
; Funktion sqr zum Quadrieren einer Zahl (INT oder REAL)
; wird öfters mal benötigt für das Autolisp-Tutorial
(defun sqr(zahl)
  (* zahl zahl)
)
                  
Im Kapitel über Stilfragen werden wir noch einmal ausführlich auf die Kommentierung von Funktionen eingehen.


Übungsaufgaben