@c -----------------------------------------------------------------------------
@c File        : Runtime.de.texi
@c License     : GNU General Public License (GPL)
@c Language    : German
@c Original    : Runtime.texi revision 03.09.2011
@c Translation : Dr. Dieter Kaiser
@c Date        : 09.12.2011
@c 
@c This file is part of Maxima -- GPL CAS based on DOE-MACSYMA
@c -----------------------------------------------------------------------------

@menu
* Initialisierung von Maxima::
* Interrupts::
* Funktionen und Variablen der Laufzeitumgebung::
@end menu

@c -----------------------------------------------------------------------------
@node Initialisierung von Maxima, Interrupts, Laufzeitumgebung, Laufzeitumgebung
@section Initialisierung von Maxima
@c -----------------------------------------------------------------------------

@cindex maxima-init.mac
@cindex maxima-init.lisp

Wenn Maxima startet, werden die beiden Dateien @code{maxima-init.mac} und
@code{maxima-init.lisp} automatisch geladen, sofern diese vorhanden sind.  Die
Datei @code{maxima-init.mac} wird mit der Funktion @mref{batchload} von Maxima
geladen und kann beliebige Maxima-Ausdr@"ucke enthalten, die beim Starten von
Maxima ausgef@"uhrt werden.  Die Datei @code{maxima-init.lisp} wird mit der
Funktion @mref{load} geladen und kann entsprechende Lisp-Anweisungen enthalten.
Beide Dateien erlauben es dem Nutzer, globale Variablen zu setzen, Funktionen zu
definieren oder sonstige Aktionen auszuf@"uhren, um zum Beispiel die
Maxima-Umgebung anzupassen.

Die Dateien @code{maxima-init.mac} und @code{maxima-init.lisp} k@"onnen in jedem
Verzeichnis abgelegt werden, das von der Funktion @mref{file_search} gefunden
wird.  @"Ublicherweise wird das Verzeichnis gew@"ahlt, das in der
Optionsvariablen @mref{maxima_userdir} enthalten ist und die von Maxima beim
Starten entsprechend dem Betriebssystem mit einem Standardwert initialisiert
wird.

Beispiel:

Im Folgenden wird ein Beispiel f@"ur den Inhalt einer Datei
@code{maxima-init.mac} gezeigt.  In diesem Beispiel werden einige globale
Werte auf neue Anfangswerte gesetzt.

@example
/* maxima-init.mac */
print(" Lade ", file_search("maxima-init.mac"), " ...")$
linel:65$      /* 65 Zeichen pro Zeile */
leftjust:true$ /* Linksb@"undige Ausgabe */
algebraic:true$ /* Vereinfache algebraische Zahlen */
fpprec:25$      /* gro@ss{}e Gleitkommazahlen mit 25 Stellen */
print (" maxima-init.mac ist geladen.")$
@end example

Die Optionsvariable @code{maxima_userdir} enth@"alt ein geeignetes Verzeichnis,
um die Datei @code{maxima-init.mac} abzulegen.  Mit der Funktion
@code{file_search} kann gepr@"uft werden, ob die Datei von Maxima gefunden wird.

@example
(%i1) maxima_userdir;
(%o1)                 /home/dieter/.maxima
(%i2) file_search("maxima-init.mac");
(%o2)         /home/dieter/.maxima/maxima-init.mac
@end example

Im Folgenden wird Maxima mit einer Datei @code{maxima-init.mac} gestartet, die
die oben angegebenen Maxima Kommandos enth@"alt.

@example
dieter@@dieter:~/Maxima/maxima$ rmaxima
Maxima 5.25.1 http://maxima.sourceforge.net
Mit Lisp SBCL 1.0.53
Lizensiert unter der GNU Public License. Siehe die Datei COPYING.
Gewidmet dem Andenken an William Schelter.
Die Funktion bug_report() gibt Informationen zum Berichten von Fehlern.
 Lade  /home/dieter/.maxima/maxima-init.mac  ... 
 maxima-init.mac ist geladen. 
(%i1) 
@end example

Die Sitzung wird fortgesetzt, die Variablen enthalten die gew@"unschten neuen
Standardwerte und die Anzeige ist linksb@"undig formatiert.

@example
(%i1) linel;
(%o1) 65
(%i2) algebraic;
(%o2) true
(%i3) fpprec;
(%o3) 25
@end example

@emph{Hinweis:}

Mit dem Kommando @mref{reset} werden die Optionsvariablen nicht auf die Werte
der Datei @code{maxima-init.mac} zur@"uckgesetzt, sondern auf die
urspr@"unglichen in Maxima festgelegten Standardwerte.  Wird das Kommando
@mref{kill} ausgef@"uhrt, gehen weiterhin alle in der Initialisierungsdatei
definierten Variablen und Funktionen verloren.  In beiden F@"allen muss die
Datei @code{maxima-init.mac} erneut zum Beispiel mit der Funktion
@mref{load} geladen werden.

Die obige Sitzung wird fortgesetzt.  Die Variablen werden mit @code{reset}
zur@"uckgesetzt.  Dann wird die Datei @code{maxima-init.mac} mit der Funktion
@code{load} geladen.

@example
(%i4) reset();
(%o1) [features, fpprec, _, __, labels, %, linenum, algebraic, 
                                   tr-unique, leftjust, lispdisp]
(%i2) fpprec;
(%o2)                          16
(%i3) load("maxima-init.mac");
 Lade  /home/dieter/.maxima/maxima-init.mac  ... 
 maxima-init.mac ist geladen. 
(%o3) /home/dieter/.maxima/maxima-init.mac
(%i4) fpprec;
(%o4) 25
@end example

Die obigen Ausf@"uhrungen treffen auf gleiche Weise auf die Datei
@code{maxima-init.lisp} zu, wobei in diesem Fall die Datei Lisp-Anweisungen
enth@"alt.

Beispiel:

Das folgende Beispiel zeigt die @"Ubersetzung des obigen Beispiels f@"ur die
Datei @code{maxima-init.mac} in Lisp-Anweisungen.

@example
;;; maxima-init.lisp
(format t " Lade ~A ...~%" ($file_search "maxima-init.lisp"))
(setq $linel 65)
(setq $leftjust t)
(setq $algebraic t)
(setq $fpprec 25)
(fpprec1 nil $fpprec)
(format t " maxima-init.lisp ist geladen.~%")
@end example

Die Datei @code{maxima-init.lisp} ist im besonderen dazu geeignet, einen
Patch in Maxima einzuspielen, um einen Programmierfehler zu beheben.

@c -----------------------------------------------------------------------------
@node Interrupts, Funktionen und Variablen der Laufzeitumgebung, Initialisierung von Maxima, Laufzeitumgebung
@section Interrupts
@c -----------------------------------------------------------------------------

Eine Berechnung kann mit dem Kommando @kbd{^c} (@kbd{control-c}) abgebrochen 
werden.  Standardm@"a@ss{}ig kehrt Maxima zu der Eingabeaufforderung der Konsole
zur@"uck.  In diesem Fall ist es nicht m@"oglich, die Berechnung fortzusetzen.

Beispiel:

Eine lange Rechnung wird mit @kbd{^c} abgebrochen.  Maxima kehrt zur
Eingabeaufforderung zur@"uck.

@example
(%i1) factor(factorial(10000))$

Maxima encountered a Lisp error:
 Interactive interrupt at #x9224192.

Automatically continuing.
To enable the Lisp debugger set *debugger-hook* to nil.
(%i2) 
@end example

Wird die Lisp-Variable @code{*debugger-hook*} mit dem Kommando
@code{:lisp (setq *debugger-hook* nil)} auf den Wert @code{nil} gesetzt, dann 
startet Maxima den Lisp-Debugger, wenn das Kommando @kbd{^c} ausgef@"uhrt wird.
Mit dem Kommando @code{continue} im Lisp-Debugger kann die unterbrochene
Berechnung fortgesetzt werden.

Beispiel:

Die Variable @code{*debugger-hook*} wird auf den Wert @code{nil} gesetzt.
Der Abbruch der Rechnung startet in diesem Fall den Lisp-Debugger.  Die
Rechnung kann mit der Auswahl @code{0} f@"ur das Kommando @code{continue}
fortgesetzt werden.

@example
(%i2) :lisp (setq *debugger-hook* nil)
NIL
(%i2) factor(factorial(10000))$

debugger invoked on a SB-SYS:INTERACTIVE-INTERRUPT
     in thread #<THREAD
     "initial thread" RUNNING
     @{C597F49@}>:
  Interactive interrupt at #x9224192.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [CONTINUE    ] Return from SB-UNIX:SIGINT.
  1: [MACSYMA-QUIT] Maxima top-level
  2: [ABORT       ] Exit debugger, returning to top level.

(SB-BIGNUM:BIGNUM-TRUNCATE #<unavailable argument>
                           #<unavailable argument>)
0] 0

(%i3) 
@end example

Hinweis:

Mit dem Kommando @code{:lisp (setq *debugger-hook* 'maxima-lisp-debugger)} kann
das Standardverhalten von Maxima wiederhergestellt werden.

In Unix-Systemen kann die Ausf@"uhrung auch mit Kommando @kbd{^z} 
(@kbd{control-z}) abgebrochen werden.  In diesem Fall wird eine Unix-Shell 
gestartet.  Das Kommando @code{fg} kehrt zu Maxima zur@"uck.

Wie mit dem Kommando @kbd{^c} kann auch ein Lisp-Fehler zu einem Abbruch
der Berechnung f@"uhren.  Maxima meldet den Lisp-Fehler und kehrt
standardm@"a@ss{}ig zu der Eingabeaufforderung zur@"uck.  Wurde die
Lisp-Variable @code{*debugger-hook*} auf den Wert @code{nil} gesetzt, startet
Maxima den Lisp-Debugger.

Beispiel:

Es wird eine Lisp-Funktion @code{$sqr} definiert, die aus Maxima mit @code{sqr}
aufgerufen werden kann und ihr Argument quadriert.  Wird die Funktion mit mehr
als einem Argument aufgerufen, wird ein Lisp-Fehler generiert und Maxima
kehrt zu der Eingabeaufforderung zur@"uck.

@example
(%i1) :lisp (defun $sqr (x) (* x x))
$SQR
(%i1) sqr(3);
(%o1)                           9
(%i2) sqr(2,3);

Maxima encountered a Lisp error:

 invalid number of arguments: 2

Automatically continuing.
To enable the Lisp debugger set *debugger-hook* to nil.

(%i3)
@end example

Jetzt wird die Lisp-Variable @code{*debugger-hook*} auf den Wert @code{nil}
gesetzt.  In diesem Fall wird der Lisp-Debugger aufgerufen.  Die Ausf@"uhrung
kann in diesem Fall nicht mit dem Kommando @code{continue} fortgesetzt werden,
da ein Syntax-Fehler aufgetreten ist.  Jedoch ist es m@"oglich, Maxima mit dem
Kommando @code{(run)} vom Lisp-Prompt neu zu starten.

@example
(%i3) :lisp (setq *debugger-hook* nil)
NIL
(%i3) sqr(2,3);

debugger invoked on a SB-INT:
   SIMPLE-PROGRAM-ERROR in thread #<THREAD
   "initial thread" RUNNING @{C597F49@}>:
  invalid number of arguments: 2

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [MACSYMA-QUIT] Maxima top-level
  1: [CONTINUE    ] Ignore runtime option --eval "(cl-user::run)".
  2: [ABORT       ] Skip rest of --eval and --load options.
  3:                Skip to toplevel READ/EVAL/PRINT loop.
  4: [QUIT        ] Quit SBCL (calling #'QUIT, killing the process).

($SQR 2)[:EXTERNAL]
0] continue

* (run)
Maxima restarted.
(%i4)
@end example

@c -----------------------------------------------------------------------------
@node Funktionen und Variablen der Laufzeitumgebung, , Interrupts, Laufzeitumgebung
@section Funktionen und Variablen der Laufzeitumgebung
@c -----------------------------------------------------------------------------

@c --- 09.12.2011 DK -----------------------------------------------------------
@anchor{maxima_tempdir}
@defvr {Systemvariable} maxima_tempdir

Die Systemvariable @code{maxima_tempdir} enth@"alt das Verzeichnis, in dem
Maxima tempor@"are Dateien ablegt.  Insbesondere werden tempor@"are
Grafikausgaben von Funktionen wie @mref{plot2d} und @mref{plot3d} in diesem
Verzeichnis abgelegt.  Der Standardwert von @code{maxima_tempdir} ist das
Home-Verzeichnis des Nutzers, sofern Maxima dieses feststellen kann.
Andernfalls initialisiert Maxima die Systemvariable @code{maxima_tempdir} mit
einer geeigneten Annahme.

Der Systemvariablen @code{maxima_tempdir} kann eine Zeichenkette zugewiesen 
werden, die ein Verzeichnis bezeichnet.
@end defvr

@c --- 09.12.2011 DK -----------------------------------------------------------
@anchor{maxima_userdir}
@defvr {Systemvariable} maxima_userdir

Die Systemvariable @code{maxima_userdir} enth@"alt ein Verzeichnis, das Maxima
durchsucht, um Maxima- oder Lisp-Dateien zu finden.  Der Standardwert der
Systemvariablen @code{maxima_userdir} ist ein Unterverzeichnis des
Home-Verzeichnis des Nutzers, sofern Maxima dieses bestimmen kann.  Ansonsten
initialisiert Maxima die Systemvariable @code{maxima_userdir} mit einer
geeigneten Annahme.  Dieses Verzeichnis ist zum Beispiel geeignet, um die
Initialisisierungsdateien @code{maxima-init.mac} und @code{maxima-init.lisp}
abzulegen.

Maxima sucht in weiteren Verzeichnissen nach Dateien.  Die vollst@"andige Liste
der Suchverzeichnisse ist den Variablen @mref{file_search_maxima} und
@mref{file_search_lisp} enthalten.

Der Systemvariablen @code{maxima_userdir} kann eine Zeichenkette zugewiesen 
werden, die ein Verzeichnis bezeichnet.  Wenn der Wert von @code{maxima_userdir}
ge@"andert wird, werden die Variablen @code{file_search_maxima} und
@code{file_search_lisp} nicht automatisch angepasst.
@end defvr

@c --- 09.12.2011 DK -----------------------------------------------------------
@anchor{room}
@deffn  {Funktion} room ()
@deffnx {Funktion} room (true)
@deffnx {Funktion} room (false)

Gibt eine Beschreibung der Speicherplatznutzung aus.  Die Darstellung und der
Inhalt der Beschreibung h@"angt von dem Maxima zugrunde liegendem Lisp ab.  Mit
den Argumenten @code{true} und @code{false} kann der Umfang der auszugebenden
Information kontrolliert werden, sofern die Option vom verwendeten Lisp
unterst@"utzt wird.  Mit dem Argument @code{true} wird die umfangreichste
Darstellung ausgegeben und mit dem Argument @code{false} die k@"urzeste.

@need 800
Beispiel:

Das folgende Beispiel zeigt die Ausgabe auf einem Linux-System mit der 
Lisp-Im@-ple@-men@-tie@-rung SBCL 1.0.45.

@example
(%i1) room(false);
Dynamic space usage is:   63,719,856 bytes.
Read-only space usage is:      3,512 bytes.
Static space usage is:         2,256 bytes.
Control stack usage is:        1,440 bytes.
Binding stack usage is:          184 bytes.
Control and binding stack usage is for the current thread only.
Garbage collection is currently enabled.
(%o2)                         false
@end example
@end deffn

@c --- 09.12.2011 DK -----------------------------------------------------------
@anchor{sstatus}
@deffn {Funktion} sstatus (@var{keyword}, @var{item})

Hat das Argument @var{keyword} den Wert @code{feature}, wird das Argument
@var{item} der internen Lisp-Eigenschaftsliste @code{*features*} hinzugef@"ugt.
Das Kommando @code{status(feature, item)} hat dann das Ergebnis @code{true}.
Hat das Argument @var{keyword} den Wert @code{nofeature}, wird das Argument
@var{item} von der internen Lisp-Eigenschaftsliste @code{*features*} entfernt.

Siehe auch die Funktion @mrefdot{status}
@end deffn

@c --- 09.12.2011 DK -----------------------------------------------------------
@anchor{status}
@deffn  {Funktion} status (@code{feature})
@deffnx {Funktion} status (@code{feature}, @var{item})

Das Kommando @code{status(feature)} gibt die interne Lisp-Eigenschaftsliste
@code{*features*} zur@"uck.  @code{status(feature,item)} gibt @code{true}
zur@"uck, wenn das Argument @var{item} in der internen Lisp-Eigenschaftsliste
@code{*features*} enthalten ist.  Ansonsten ist die R@"uckgabe @code{false}.
@code{status} wertet die Argumente nicht aus.  Eine Systemeigenschaft
@var{item}, die Sonderzeichen wie @code{-} oder @code{*} enth@"alt, muss als
Zeichenkette angegeben werden.

Siehe auch die Funktion @mrefdot{sstatus}

Die Lisp-Variable @code{*features*} steht in keinem Zusammenhang mit der
Maxima-Systemvariablen @mrefcomma{features} die eine Liste mit mathematischen
Eigenschaften enth@"alt, die Funktionen und Variablen erhalten k@"onnen.

Beispiel:

Das folgende Beispiel zeigt die Ausgabe f@"ur ein Linux-System mit SBCL als
Lisp.  Die Ausgabe ist abgek@"urzt.

@example
(%i1) status(feature);
(%o1) [sb-bsd-sockets-addrinfo, asdf2, asdf, cl, mk-defsystem, 
cltl2, ansi-cl, common-lisp, sbcl, ...]

(%i2) status(feature,"ansi-cl");
(%o2)                         true
@end example
@end deffn

@c --- 23.10.2010 DK -----------------------------------------------------------
@anchor{system}
@deffn {Funktion} system (@var{command})
 
@code{system(command)} f@"uhrt das Kommando @var{command} in einem eigenen 
Prozess aus.  Das Kommando wird an die Standard-Shell @"ubergeben.
@code{system} wird nicht von allen Betriebssystemen unterst@"utzt, steht aber im
Allgemeinen unter Unix oder Unix @"ahnlichen Betriebssystemen zur Verf@"ugung.
@end deffn

@c --- 28.12.2010 DK -----------------------------------------------------------
@anchor{time}
@deffn {Funktion} time (%o1, %o2, %o3, @dots{})

Gibt eine Liste mit den Ausf@"uhrungszeiten zur@"uck, die ben@"otigt wurden, um
die Ergebnisse @code{%o1}, @code{%o2}, @code{%o3}, @dots{} zu berechnen.
Die Argumente der Funktion @code{time} k@"onnen nur Ausgabemarken sein.  F@"ur 
andere Argumente ist das Ergebnis @code{unknown}.

Siehe die Optionsvariable @mrefcomma{showtime} um die Ausf@"uhrungszeiten f@"ur 
jede einzelne Berechnung anzuzeigen.

Beispiel:

Die Zeit f@"ur die Berechnung der Fakult@"at einer gro@ss{}en ganzen Zahl wird 
mit @code{time} ausgegeben.

@example
(%i1) factorial(100000)$

(%i2) time(%o1);
(%o2)                        [7.589]
@end example
@end deffn

@c --- 28.12.2010 DK -----------------------------------------------------------
@anchor{timedate}
@deffn {Funktion} timedate ()

Gibt eine Zeichenkette zur@"uck, die das aktuelle Datum und die aktuelle Zeit 
enth@"alt.  Die Zeichenkette hat das Format @code{yyyy-mm-dd HH:MM:SS (GMT-n)}.

Beispiel:

@example
(%i1) timedate();
(%o1)               2010-12-28 21:56:32+01:00
@end example
@end deffn

@c --- 28.12.2010 DK -----------------------------------------------------------
@anchor{absolute_real_time}
@deffn {Funktion} absolute_real_time ()

Gibt die Sekunden zur@"uck, die seit dem 1.@w{ }Januar 1990 UTC verstrichen 
sind.  Die R@"uckgabe ist eine ganze Zahl.

Siehe auch @mref{elapsed_real_time} und @mrefdot{elapsed_run_time}

@need 800
Beispiel:

@example
(%i1) absolute_real_time ();
(%o1)                      3502559124
(%i2) truncate(1900+absolute_real_time()/(365.25*24*3600));
(%o2)                         2010
@end example
@end deffn

@c --- 27.12.2010 DK -----------------------------------------------------------
@anchor{elapsed_real_time}
@deffn {Funktion} elapsed_real_time ()

Gibt die Sekunden zur@"uck, die seit dem letzten Start von Maxima verstrichen 
sind.  Die R@"uckgabe ist eine Gleitkommazahl.

Siehe auch @mref{absolute_real_time} und @mrefdot{elapsed_run_time}

Beispiel:

@example
(%i1) elapsed_real_time ();
(%o1)                       2.559324
(%i2) expand ((a + b)^500)$
(%i3) elapsed_real_time ();
(%o3)                       7.552087
@end example
@end deffn

@c --- 27.12.2010 DK -----------------------------------------------------------
@anchor{elapsed_run_time}
@deffn {Funktion} elapsed_run_time ()

Gibt eine Sch@"atzung der Zeit in Sekunden zur@"uck, die Maxima f@"ur 
Berechnungen seit dem letzten Start ben@"otigt hat.  Der R@"uckgabewert ist
eine Gleitkommazahl.

Siehe auch @mref{absolute_real_time} und @mrefdot{elapsed_real_time}

Beispiel:

@example
(%i1) elapsed_run_time ();
(%o1)                         0.04
(%i2) expand ((a + b)^500)$
(%i3) elapsed_run_time ();
(%o3)                         1.26
@end example
@end deffn

@c --- End of file Runtime.de.texi ---------------------------------------------

