Zum Inhalt springen

Digital Command Language

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 21. November 2007 um 15:24 Uhr durch WikiNick (Diskussion | Beiträge) (Foreign Commands). Sie kann sich erheblich von der aktuellen Version unterscheiden.

DCL, die DIGITAL Command Language, ist die Standard-Kommandosprache des Betriebssystems OpenVMS, welches ursprünglich von der Firma Digital Equipment Corporation (kurz DEC) entwickelt wurde. Aktuell wird OpenVMS von Hewlett-Packard (kurz HP) weiterentwickelt und vertrieben.

Mit DCL lassen sich am Kommando-Prompt Aktionen ausführen, etwa zur Dateibe- und verarbeitung (ähnlich wie unter MS-DOS) oder zur Systemadministration, aber auch komplexe Kommandoprozeduren erstellen, die interaktiv oder im Batchbetrieb laufen können (vgl. Shellskripte unter Unix).

Eigenschaften von DCL

DCL erlaubt die Erstellung von komplexen Kommandoprozeduren und ist somit durchaus für die Programmierung geeignet, jedoch sind DCL als Kommandosprache auch Grenzen gesetzt. Im Vergleich zu konventionellen Programmiersprachen weist DCL Vor- und Nachteile auf.

Die folgenden Punkte zählen für DCL.

  • DCL ist auf jedem OpenVMS-System verfügbar.
  • DCL-Kommandoprozeduren können schnell entwickelt werden. Der Programmierer muß keine Editieren/Kompilieren/Linken/Testen-Zyklen durchlaufen, da DCL eine interpretierte Sprache ist.
  • DCL-Prozeduren können bei Bedarf schnell angepaßt, verändert oder erweitert werden.
  • DCL-Prozeduren können OpenVMS-Werkzeuge (engl. utilities) und andere Software-Produkte auf einfache Weise nutzen.
  • Einige komplexe Aspekte der Programmierung für OpenVMS werden durch DCL signifikant vereinfacht, wie z.B. die Behandlung von Fehlern und Interrupts (soweit die Verarbeitung verhältnismäßig unkompliziert bleibt).
  • Weniger erfahrene Programmierer können DCL-Prozeduren benutzen, um einzelne Blöcke einer umfassenderen Programmierung separat zu erstellen

Die folgenden Punkte zählen zu den Grenzen von DCL.

  • Eine DCL-Prozedur wird langsamer abgearbeitet als ein konventionelles, kompiliertes Programm, da eine DCL-Kommandoprozedur durch einen Interpreter ausgeführt wird. Dies kommt speziell zum Tragen, wenn die DCL-Prozedur sehr rechenintensive Kommandos (z.B. sehr viele arithmetische Operationen) durchführt. Es kommt weniger zum Tragen, wenn die Prozedur z.B. hauptsächlich Dateioperationen durchführt.
  • DCL fehlen einige wichtige arithmetische Funktionen, wie z.B. die Unterstützung von Gleitkommazahlen.
  • Fähigkeiten und Möglichkeiten zur Strukturierung von Daten, die wichtig für viele Software-Algorithmen sind, sind so gut wie nicht existent in DCL.
  • DCL läßt einige Konstrukte moderner Programmierung vermissen, wie etwa WHILE- oder FOR-Schleifen. Diese müssen in DCL manuell nachgebildet werden.
  • Nur einfache Benutzerschnittstellen können in DCL realisiert werden. DCL hat keine Unterstützung für Fenstertechniken oder andere graphische Darstellungen.
  • Ein Programm kann von einer DCL-Prozedur nur aufgerufen werden, wenn es eine Kommandoschnittstelle (engl. command interface) bereitstellt, d.h. Codebibliotheken können von DCL aus nicht direkt genutzt werden.
  • Die Flexibilität von DCL kann es als schwierig gestalten, eine Prozedur zu erstellen, die es einem weniger priviligierten Benutzer gestattet, ausgewählte Funktionen zu benutzen, zu denen der Benutzer nicht direkt authorisiert ist (engl. captive command procedures). Zum Beispiel akzeptiert das INQUIRE-Kommando nicht nur Eingaben, sondern kann auch zur Ausführung von lexikalischen Funktionen (engl. lexical functions) benutzt werden.

Als DCL in den 1970ern konzipiert wurde, konnte die weitere Entwicklung und Nutzung für die Erstellung komplexer Aufgaben nicht unbedingt vorhergesehen werden, so daß DCL in einigen Punkten nicht so strukturiert wie andere modernere Programmiersprachen erscheinen mag.

Spezialitäten von DCL

DCL weist einigen Besonderheiten im Vergleich zu anderen Kommandosprachen auf.

Foreign Commands

In DCL ist es möglich (und üblich), sogenannte Fremdkommandos (engl. foreign commands) zu definieren. Über diesen Mechanismus können Benutzer, z.B. in ihrer Loginprozedur, eigene Kommandos oder abgewandelte Standardkommandos definieren.

$ foo :== $sys$sysexe:foo.exe

Nach dieser Definition wird das neue Kommando FOO das Programm namens FOO.EXE aufrufen. Hierbei können optional auch Parameter an das Programm mit übergeben werden.

$ ST == "SHOW TIME"

Hier wird das neue Kommando ST definiert, welches anschließend eine Kurzfassung des Kommandos zum Anzeigen der Zeit ist.

$ del*ete:==delete /confirm/log

Hier wird das Standardkommando DELETE als foreign command so erweitert, daß standardmäßig die Optionen zum Nachfragen und Protokollieren mit angegeben sind. Der Stern bei der Definition regelt, ab welcher Position das Kommando auch in abgekürzter Form benutzt werden darf.

Erstellen von Kommandoprozeduren

Das Erstellen von Kommandoprozeduren in DCL erfolgt mittels eines Texteditors, der direkt vom DCL-Prompt aus aufgerufen werden kann.

Die Dateiextension für eine DCL-Datei lautet .com - diese Extension unter OpenVMS ist nicht zu verwechseln mit der gleichlautenden Extension unter DOS/Windows, die eine andere Bedeutung hat.

LOGIN.COM

Üblicherweise wird eine spezielle Prozedur nach dem Login eines Benutzer automatisch ausgeführt. Diese Prozedur trägt in der Regel den Namen LOGIN.COM - dies kann pro Benutzer vom Systemadministrator (ggf. auch mit abweichendem Namen) festgelegt werden. In dieser DCL-Prozedur können entweder vom Benutzer selbst oder vom Systemadministrator wichtige Eigenschaften und Kommandos definiert werden, die für die Sitzung des Benutzers wichtig sind.

Zeilenkennung

Skripte (bzw. Kommandoprozeduren) in DCL ähneln Skripten in anderen Sprachen, jedoch mit einigen Ausnahmen. Alle DCL-Kommandos in einer Kommandoprozedur müssen mit einem $-Zeichen beginnen. Andere Zeilen werden als Eingabe für ein Kommando gewertet. (Selbst Zeilen, die mit THEN oder ELSE beginnen, erfordern das $-Zeichen).

Das folgende Beispiel demonstriert die Verwendung des TYPE-Kommandos, um einen Abschnitt auf dem Bildschirm darzustellen.

$ TYPE SYS$INPUT:
Dies ist ein Beispiel für das
TYPE-Kommando in DCL.
$ EXIT

Indirekte Referenzierung von Variablen

Es ist durchaus möglich, in DCL Arrays nachzubilden. Die einzelnen Elemente eines Arrays werden durch übersetzte Symbole referenziert. Diese Technik erlaubt es dem Programmierer, Datenstrukturen in dynamischer Größe zu erstellen, die ggf. die Daten selbst als Index benutzen.

 $ i = 1
 $ variable'i' = "blau"
 $ i = 2 
 $ variable'i' = "gruen"
 $ j = 1
 $ farbe = variable'j'
 $ regenbogen'farbe' = "rot"
 $ farbe = variable'i'
 $ regenbogen'farbe' = "gelb"

In diesem Beispiel ist der Variablen regenbogenblau der Wert "rot" zugewiesen, der Variblen regenbogengruen der Wert "gelb".

Literatur

  • Paul C. Anagnostopoulos, Steve Hoffman: Writing Real Programs in DCL, Second Edition, 1998, Digital Press