Wikipedista:Kolarp/DIGITAL Command Language

Kolarp/DIGITAL Command Language
Paradigmaimperativní
AutorDigital Equipment Corporation[1]
VývojářVMS Software Inc. (VSI)[2]
Ovlivněn jazykyBASIC
Ovlivnil jazykyPowerShell
OSRSTS/E, RSX-11, RT-11, OpenVMS, VAXELN, MICA

Digital Command Language (DCL) je standardní interpret příkazů používaný v mnoha operačních systémech firmy Digital Equipment Corporation. DCL má kořeny v systémech IAS, TOPS-20, a RT-11 a byl implementován jako standard ve většině operačních systémů firmy DEC, především RSX-11 a RSTS/E, ale nerozvinutější implementace pochází z VAX/VMS (později OpenVMS). DCL je po roce 2020 jako jedna ze součástí OpenVMS vyvíjen firmou VMS Software, Inc. (VSI).[3]

DCL je skriptovací jazyk, který vznikl v době, kdy se intenzivně používal programovací jazyk Fortran. Přesto DCL podporuje několik datových typů, včetně řetězců, celých čísel, bitových polí, polí a logických hodnot, nemá však podporu čísel s pohyblivou řádovou čárkou. Pro přístup k systémovým službám API jádra OpenVMS slouží lexikální funkce, které poskytují stejnou funkčnost jako jejich protějšky v kompilovaných jazycích a umožňují skriptům získat informace o stavu systému. DCL umožňuje používat podmíněný příkaz IF-THEN-ELSE, přístup k všem typům souborů, které podporují Record Management Services (RMS) včetně streamů, indexovaných, a sekvenčních souborů, ale nemá žádné konstrukce pro vytváření cyklů; cykly se musí programovat pomocí příkazů IF a GOTO.

DCL je dostupný i pro jiné operační systémy:

DCL je základem jazyka XLNT pro Microsoft Windows v podobě kombinace interpretu a IDE-WSH s funkcionalitou CGI, který od roku 1997 dodává firma Advanced System Concepts Inc.

Analyzátor příkazového řádku editovat

Analyzátor příkazového řádku v OpenVMS tvoří běhová knihovna (CLI$), kterou lze použít v uživatelských aplikacích, které tak mohou využívat rozhraní příkazového řádku známé z operačního systému i pro vlastní ovládání. Příkazový řádek musí začínat jménem příkazu (anglicky verb, doslova sloveso), za kterým může být až 8 parametrů (argumentů) nebo kvalifikátorů (v terminologie systému Unix, volby nebo přepínače), který začínají znakem '/'. Před lomítkem nemusí být na rozdíl od Unixu mezera (podobně jako v DOSu). Kvalifikátory mohou být poziční (které ovlivňují parametr zapsaný za nimi nebo před nimi) nebo nepoziční (které mohou být použity kdekoli na příkazovém řádku). Většina kvalifikátorů poziční nejsou. Kvalifikátorům může být také přiřazena jednoduchá nebo složená hodnota. Jména příkazů a kvalifikátorů lze zkracovat. Parametry mohou být celá čísla nebo alfanumerický text.

V DCL příkazech se nerozlišují malá a velká písmena a mohou být zadány libovolnou kombinací malých a velkých písmen; v dokumentaci jsou však příkazy a kvalifikátory obvykle uváděny velkými písmeny.

Příkaz operačního systému může vypadat takto:

    set audit /alarm /enable=(authorization, breakin=all)
    show device /files $1$DGA1424:

Druhý příkaz show je možné napsat také jako:

   sh dev $1$DGA1424:/fil

Některé implementace DCL, například v OpenVMS, umožňují zadávat libovolně zkrácená jména příkazů, pokud je zachována jejich jednoznačnost (například příkaz SHOW může být zkrácen až na SH – při zadání S už by se mohlo jednat i o příkaz SET). Ostatní implementace, například pro RSX-11, povolují zkracování jmen příkazů nejvýše na tři znaky.

Mnoho operačních systémů používá seznam adresářů, ve kterých se vyhledávají programy spouštěné pro vykonání určitého příkazu. Do DCL byla tato vlastnost zavedena až od OpenVMS verze V6.2 v podobě logického jména DCL$PATH, jehož hodnotou je seznam adresářů (oddělených čárkami), v nichž DCL hledá soubory s příkazovými procedurami (se jménem příkaz.COM) a spustitelné programy (se jménem příkaz.EXE).

Standardním způsobem, který funguje ve všech verzích DCL je explicitní deklarace příkazů, buď pomocí definic CLD (Command Definition Language), nebo definovaných jako foreign symbol (cizí symbol). Většina nativních příkazů OpenVMS je definována pomocí CLD souborů, které se překládají programem CDU, Command Definition Language, a ukládají do DCL 'tabulky' – implicitně do SYS$LIBRARY:DCLTABLES.EXE, ale procesy mohou používat své vlastní tabulky – a může pak být vyvolaný by uživatel. Například definice příkazu FOO, který může mít kvalifikátor /BAR a je implementován programem SYS$SYSEXE:FOO.EXE může používat CLD soubor s tímto obsahem:

 DEFINE VERB FOO
    IMAGE "SYS$SYSEXE:FOO.EXE"
    QUALIFIER BAR

Pokud uživatel zadá příkaz FOO nebo FOO/BAR, bude vyvolán binární program SYS$SYSEXE:FOO.EXE. Command Definition Language podporuje mnoho typů hodnot kvalifikátorů, například zadání datumů a jmen souborů, a umožňuje, aby při uvedení určitého kvalifikátor byl spuštěn jiný program – jako je tomu v případě příkazu CREATE pro vytvoření souboru a CREATE/DIRECTORY pro vytvoření adresáře.

Druhou (jednodušší, ale méně flexibilní) metodou, která se podobá příkazovým aliasům v Unixu, je definovat příkazy jako cizí příkazy. Například následující definice symbolu foo:

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

zajistí, že příkaz FOO vyvolá program $sys$sysexe:foo.exe, přičemž příkaz může mít libovolné parametry, které budou doslovně předány programu, například foo -v. Tato metoda se často používá pro programy přenesené z Unixu a dalších systémů od jiných firem. V programech v jazyce C jsou parametry dostupné pomocí parametrů funkce main zpravidla nazývaných argc a argv.

Skriptování editovat

Psaní skriptů v DCL se podobá použití jiných skriptovacích jazyků. Před každým DCL příkazem ve skriptu musí být symbol dolar; ostatní řádky jsou považovány za standardní vstup předchozího příkazu. Například pro vypsání jednoho nebo více řádků textu na obrazovku lze použít příkaz TYPE tímto způsobem:

$ TYPE SYS$INPUT:
Příklad použití příkazu TYPE
v jazyce DCL.
$ EXIT

Nepřímé odkazy na proměnné editovat

V DCL je možné používat pole, na která se odkazuje pomocí přeložených symbolů. To umožňuje programátorovi vytvářet datové struktury s libovolným počtem rozměrů, která budou indexována hodnotami symbolů DCL.

$ i = 1
$ prom'i' = "modra"
$ i = 2 $ prom'i' = "zelena"
$ j = 1
$ barva = prom'j'
$ duha'barva' = "cervena"
$ barva = prom'i'
$ duha'barva' = "zluta"

V tomto příkladě bude proměnná duhamodra mít hodnota „cervena“, a duhazelena hodnotu „zluta“.

Příkazy editovat

Níže je uveden seznam nejpoužívanějších DCL příkazů, které jsou dostupné v příkazovém řádku systému OpenVMS.[2]

Lexikální funkce editovat

Lexikální funkce poskytují funkce pro práci s řetězci a přístup k datům operačního systému

Výběr lexikálních funkcí:

  • F$EXTRACT(start,délka,řetězec) – vrátí podřetězec zadané délky od od zadané pozice (počítáno od 0)
  • F$CVTIME – získat informace o datu/čase, například
    YEST_DOW=F$EXTRACT(0,3,F$CVTIME(DATE_EXPR,,"WEEKDAY"))
  • F$ELEMENT(0," ",ABC_DEF) – třetí parametr rozdělí v místě oddělovačů zadaných druhým parametrem na položky a vrátí položku čísla daného prvním (číslováno od 0) – pro ABC_DEF = "ABC DEF" vrátí "ABC"
  • F$SEARCH – ověří existenci souboru zadaného jména, vrátí prázdný řetězec (""), pokud soubor neexistuje
  • F$LOCATE(co,kde) – vrátí pozici prvního výskytu podřetězce co v řetězci kde (počítáno od 0) nebo délku řetězce kde, pokud se podřetězec v řetězci nevyskytuje
  • F$SetPRV("BYPASS,CMKRNL,ALTPRI") – přidělí oprávnění pro přístup k určitým funkcím systému

Odkazy editovat

Reference editovat

V tomto článku byl použit překlad textu z článku DIGITAL Command Language na anglické Wikipedii.

  1. VAX/VMS Software Language and Tools Handbook [online]. bitsavers.org, 1985 [cit. 2020-12-31]. Dostupné online. 
  2. a b VSI OpenVMS User's Manual [online]. VSI, July 2020 [cit. 2021-01-27]. Dostupné online. 
  3. Software Product Description and QuickSpecs - VSI OpenVMS Version 8.4-2L1 for Integrity servers [online]. VMS Software Inc., July 2019 [cit. 2021-01-02]. Dostupné online. 
  4. MichelValentin/PC-DCL [online]. GitHub, 2022-05-29. Dostupné online. 
  5. Comparison of PC-DCL vs. Open DCL Lite [online]. Porovnání Valentinova PC-DCL a Accelr8 Open DCL Lite. Dostupné online. 

Literatura editovat

  • Paul C. Anagnostopoulos; Steve Hoffman, 1998. Writing Real Programs in DCL. 2. vyd. [s.l.]: Digital Press. ISBN 1-55558-191-9. 

Související články editovat

Externí odkazy editovat