Limbă de control - Control Language
| Paradigmă | imperativ |
|---|---|
| Proiectat de | IBM |
| Dezvoltator | IBM |
| A apărut prima dată | 1978 |
| OS | Control Program Facility , IBM i |
| Licență | Proprietate |
| Influențată de | |
| Limbajul de control al postului , PL / I | |
| Influențat | |
| Windows PowerShell | |
Limba de control ( CL ) este un limbaj de scripting creat inițial de IBM pentru System / 38 Facilitatea de control al programului și mai târziu utilizate în OS / 400 (acum cunoscut sub numele de IBM i). Are o asemănare cu IBM Job Control Language și constă dintr-un set de obiecte de comandă (* CMD) utilizate pentru a invoca programe tradiționale sau pentru a obține ajutor cu privire la acele programe. CL poate fi, de asemenea, utilizat pentru a crea programe CL (congruente cu scripturile shell ) în care există comenzi suplimentare care oferă funcționalități de tip program (IF / ELSE, declarație variabilă , introducere de fișiere etc.)
Deși CL este un limbaj de script pentru administrarea sistemului, este utilizat în principal pentru a crea programe compilate. Utilizarea scripturilor CL interpretate prin comanda SBMDBJOB este de fapt extrem de limitată.
În timp ce mii de comenzi au fost scrise de dezvoltatorii IBM pentru a efectua sarcini la nivel de sistem cum ar fi compilarea programelor, backupul datelor, schimbarea configurațiilor sistemului, afișarea detaliilor obiectului de sistem sau ștergerea acestora, comenzile nu se limitează la preocupările la nivel de sistem și pot fi elaborate pentru aplicațiile utilizatorului de asemenea.
Comenzi și programe
Parametrii ( argumente de linie de comandă ) definite în procedurile principale ale tuturor programelor tradiționale System / 38 și AS / 400 sunt liste cu coduri rigide care sunt alcătuite din parametri care pot fi numerici, alfanumerici, booleni etc. și ordinea în care parametrii sunt trecute este important. Aceasta este o diferență puternică față de lumile Unix și DOS în care lista parametrilor din scripturile shell Unix și programele C este un set sau o serie de indicatori de caractere și cel mai adesea parametrii nu sunt dependenți de poziție.
Soluția dezvoltatorului la această problemă a fost obiectul de comandă (* CMD). În timp ce parametrii de pe comandă pot fi specificați în orice ordine, fiecare parametru este definit pentru a fi transmis într-o ordine specifică programului. Programatorul poate defini, printre altele, tipul de date al parametrului, numele unic al parametrului, textul descriptiv (pentru solicitare), valoarea implicită (utilizată numai dacă parametrul nu este specificat în timpul execuției), dacă valorile sunt restricționate la un anumit set sau interval, dacă datele introduse ar trebui schimbate la altă valoare înainte de a apela programul etc.
Cel mai de bază o comandă numește un singur program de apelat atunci când utilizatorul tastează sau solicită comanda și apasă tasta Enter. Comanda ia toți parametrii tastați de utilizator și cei care nu sunt tastați de utilizator și construiește o listă de parametri pe care îi transmite programului atunci când este apelată.
Sintaxă
BNF pentru o sintaxă mult simplificată de comandă CL ar fi definită după cum urmează:
<CL-command> ::= command-name [<positional-parameter-list>] [<named-parameter-list>]
<positional-parameter-list> ::= <parameter-value> [<positional-parameter-list>]
<named-parameter-list> ::= parameter-name "(" <parameter-element-list> ")" [<named-parameter-list>]
<parameter-element-list> ::= <parameter-value> [<parameter-element-list>]
<parameter-value> ::= CL-name |
qualified-CL-name |
"*"special-value |
generic-CL-name"*" |
"'"alphanumeric-value"'" |
numeric-value |
"X'"hexadecimal-value"'"
Elementele de mai sus care se termină în -name urmează convențiile de denumire a obiectelor care, în general, înseamnă că numele începe cu o literă și poate avea până la zece caractere în lungime. (Comenzile CL nu sunt sensibile la majuscule și minuscule.)
Un bun exemplu al unei comenzi tipice CL este comanda Change Program (CHGPGM) de mai jos:
CHGPGM MYPGM OPTIMIZE(*FULL) RMVOBS(*BLKORD *PRCORD) TEXT('My program.')
Comanda de mai sus transmite patru parametri programului care efectuează procesarea Change Program și aceștia sunt:
- MYPGM: un parametru pozițional (PGM) și singurul parametru necesar. În acest caz, este numele programului care se schimbă. Parametrii poziționali sunt întotdeauna primii. Odată ce apare un parametru numit, toți parametrii care urmează trebuie să fie numiți parametri.
- OPTIMIZE (* FULL): Un parametru numit care specifică un singur element care este o valoare specială. În acest caz, va schimba programul pentru a fi complet optimizat.
- RMVOBS (* BLKORD * PRCORD): un parametru numit (Eliminare observabilitate) care specifică mai multe valori speciale. În acest caz, spunându-i să elimine două tipuri de date de profilare din program.
- TEXT („Programul meu”): Un alt parametru numit care specifică o singură valoare alfanumerică. În acest caz, schimbă textul descriptiv al programului.
În realitate, sistemul va trece cu mult mai mulți parametri decât cei patru specificați mai sus. Acest lucru se datorează faptului că restul parametrilor comenzii CHGPGM nu au fost specificate, deci valorile implicite vor fi trecute în schimb. Pentru fiecare parametru, în afară de parametrul PGM, acel parametru implicit este * SAME , adică nu-l modificați.
Fapt care i-a determinat
Toate comenzile CL pot fi solicitate direct din linia de comandă sau din sursa programului CL tastând comanda și apăsând tasta funcțională F4 . O comandă OS / 400 poate fi solicitată și prin tastarea unui? înainte de comandă. (Acest lucru este util într-un program interactiv care indică un șir de comandă, după ce a completat deja unele valori.)
Sistemul va prezenta apoi un ecran cu setul de parametri pe care programul îi acceptă / necesită (parametrii solicitați sunt de obicei evidențiați).
Parametrii necesari sunt enumerați mai întâi, iar parametrii cu valori implicite furnizate de sistem sunt listate în cele din urmă. Pentru a vedea toți parametrii, apăsați F10. Dacă o alegere necesită alte selecții, acestea se indică pe măsură ce selectați acea valoare pentru acel parametru, prin afișarea pe ecran.
Promptarea este îmbunătățită în continuare pentru a permite programatorului să găsească ce valori sunt valabile pentru fiecare parametru. Pentru a face acest lucru în timpul solicitării, utilizatorul ar muta cursorul în câmpul de parametri în cauză și ar apăsa din nou F4. Sistemul va afișa apoi un ecran care descrie tipul de intrare necesar și o listă disponibilă de valori admise.
Pentru a introduce un nume mai lung sau pentru a extinde lista pentru a vă permite să introduceți valori suplimentare, tastați un semn plus în loc de o valoare. (Ca și când se enumeră numele obiectelor care trebuie salvate sau restaurate.)
Comandați ajutor
Ajutor sensibil la cursor poate fi furnizat și la comenzi, dar nu este necesar. Dacă a fost furnizat ajutor, puteți vizualiza ajutorul pentru un parametru deplasând cursorul în câmpul parametrului dorit și apăsând F1 (ajutor). Pentru a obține ajutor pentru întreaga comandă în sine (și pentru toți parametrii săi), utilizatorul ar apăsa F1 oriunde pe afișajul prompt și apoi apăsați F2 (ajutor extins).
Crearea de noi comenzi
Pot fi create noi comenzi pentru a apela programe non-sistem și vor funcționa exact ca varietatea încorporată. Limbajul de definire a comenzilor este descris în Ghidul programatorului CL .
Este o idee bună să creați ecrane de ajutor pentru noi comenzi și parametrii acestora. Toate ecranele de ajutor utilizează obiecte de grup de panouri (* PNLGRP) și acestea pot fi create utilizând limbajul UIM descris în manualul IBM AS / 400 Application Display Programming manual .
Începând cu V5R3 al sistemului de operare a fost adăugată o nouă metodă mult mai simplă de a crea ajutor: rulați comanda
GENCMDDOC CMD(MYLIB/MYCMD) TODIR('/QSYS.LIB/MYLIB.LIB/QPNLSRC.FILE) GENOPT(*UIM)
Un grup de panouri UIM schelet va fi generat automat incluzând toți parametrii descriși de comandă. Fișierul rezultat poate fi editat (seu, wdsc, rdi), apoi compilat cu comanda CRTPNLGRP și, în final, asociat cu comanda prin CHGCMD HLPPNLGRP ().
Găsirea comenzii corecte
Există 2.262 de comenzi IBM încorporate conținute în V7R3, dar găsirea acestora nu este atât de dificilă din cauza mai multor modele ale sistemului care facilitează viața. Aceste modele de economisire a forței de muncă sunt: abrevieri standardizate, meniuri de grupare a comenzilor și selecție a comenzilor.
Abrevieri standardizate
Dezvoltatorii IBM au standardizat abrevierile folosite pentru a crea nume de comenzi. Verbe precum schimbare sunt întotdeauna redate ca CHG , afișate ca DSP , funcționează ca WRK , creează ca CRT , etc. Subiecte precum programul sunt întotdeauna PGM , utilizatorul este USR , modulul este MOD , serverul este SVR , etc. Puteți vedea fiecare verb posibil și subiectul utilizat în sistem în meniurile VERB și SUBJECT , introduceți doar comenzile GO VERB sau GO SUBJECT.
La fel, „Control Language Programming” a fost abreviat CLP, iar tipul sursă a fost în consecință CLP. Odată cu introducerea modelului de programare ILE, tipul sursei a fost schimbat în „CLLE”.
Meniurile VERB și SUBJECT fac parte din ceea ce se numește Meniuri de grupare a comenzilor. Pentru fiecare abreviere de trei (sau patru) litere există un meniu dedicat acesteia, care începe cu literele CMD . Deci, pentru a vedea toate comenzile CHG , utilizatorul ar executa comanda GO CMDCHG. Pentru comenzile de program meniul ar fi CMDPGM.
Există și alte meniuri în afară de meniurile de grupare a comenzilor. Punctul de plecare pentru sistemul de meniuri poate fi accesat apăsând F4 pe o linie de comandă goală .
Selectarea comenzii
Dacă se cunoaște doar o parte a unei comenzi sau dacă se folosește un software terță parte unde comenzile nu sunt conforme cu standardul de abreviere AS / 400, atunci veți introduce acea parte a comenzii cunoscute, atașați un asterisc (pentru a o face generic) și apăsați Enter. Sistemul va afișa apoi o listă de comenzi în lista de biblioteci a jobului care se potrivește cu numele generice abia introduse. Apoi puteți parcurge lista căutând comanda necesară și apoi selectați-o folosind opțiunea 1.
În fundal, sistemul folosește comanda SLTCMD pentru a îndeplini această funcție. Dacă doriți să selectați toate comenzile dintr-o bibliotecă, atunci solicitați această comandă și introduceți valoarea specială * ALL.
Cod simplu
Următorul este un eșantion de programare CL. Programul convertește interactiv datele de la Julian la MDY și invers. Rezultatele sunt afișate pe linia 24 a terminalului. Acceptă doi parametri. &INParametrul care este șirul dată care urmează să fie convertite. Dacă un șir julian ar trebui să fie în format YYNNN unde YY este numărul anului și NNN este numărul zilei anului. Dacă un șir MDY trebuie să fie în format MMDDYY. Al doilea parametru este &TYPtipul de dată în care trebuie convertit. Trebuie să fie „J” (Julian) sau „M” (MDY). De exemplu: comanda CALL PGM(ICVTDATC) PARM('04180' 'M')va converti data iuliană 04180 la 062804 (28 iunie 2004).
PGM (&IN &TYP)
DCL &IN *CHAR 6
DCL &OUT *CHAR 8
DCL &TYP *CHAR 1
IF (&TYP = J) +
DO
CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*MDY) +
TOFMT(*JUL) TOSEP(*NONE)
ENDDO
ELSE IF (&TYP = M) +
DO
CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*JUL) +
TOFMT(*MDY) TOSEP(*NONE)
ENDDO
SNDPGMMSG MSG('IN=' || &IN || ' OUT=' || &OUT) +
MSGTYPE(*COMP)
ENDPGM