VaxNt/ProDB.PGuide.Konvence
Množina existujících příkazů.
Vyčerpávající seznam všech implementovaných příkazů by byl opravdu vyčerpávající. Proto v této
příručce vyjmenujeme nejprve ty, které jsou frekventované a mají vyloženě obecné použití. Existuje
řada "divokých" funkcí nebo specialit, které bylo nutno implementovat díky nějakým velmi neobvyklým
vlastnostem aplikace. Navíc se postupně vyvíjel názor na syntax - existuje tedy řada variant kvůli
zpětné kompatibilitě. Zde si klademe za cíl dát dostatečné informace pro toho, kdo chce psát nové
skripty a teprve okrajově ev. upravovat nějaké staré a třebas obsolentní skripty z minulosti.
Proto příručka obsahuje nejprve bázový přehled, potom výčet frekventovaných funkcí a potom teprve
taxativní výčet všech funkcí - ten navíc nutně nebude nikdy úplný. Paralelně s jazykem skriptů je
nutno ještě zvládnout popisy wizardů a jejich klauzulí.
Argument list. Funkce většinou očekávají podle své povahy jako argumenty seznamy oddělené čárkami.
Řada funkcí umí zpracovávat iterativně seznam argumentů, dokud není vyčerpán. Kupříkladu set nebo setv
zpracovávají vždy dvojici dokud se nenarazí na situaci, kdyby jméno cílové proměnné bylo prázdné.
Je potřeba s tím počítat tehdy, kdy čárka může být součástí hodnoty. K tomu účelu jsou variantní
příkazy, kde oddělovačem je rovnítko a seznam argumentů nemůže být iterován. Takové příkazy, například
context.set, berou jako druhý argument jednoduše "zbytek řádku po rovnítku". Pozor na to, že i nevinně
vypadající příkaz: context.set !X=Nález: $(Text) může při interpretaci nabubřet na neuvěřitelné bago,
to když Text je třebas hodnota MEMO položky, třebas propouštěcí zprávy pacienta. Všimněte si i toho faktu,
že interpret hodnotu proměnné dekóduje na zakódované backslashe, přilepí k tomu nadpis jako konstantu a
celek pěkně zakóduje a uloží do X. Obvykle by to vypadalo tak, že by to X se dosazovaly konkatenované
hodnoty hned několika dalších MEMO položek (operační zpráva, ...). Zde bychom jednoduše dopsali pár
dolarových proměných - A JE TO!
Resolvování hodnot proměnných v argument listu
Pro všechny příkazy platí, že jejich argumenty následující za jménem funkce se resolvují substitucí podle
aktuálních hodnot proměnných kontextu skriptu, ale i podle hodnot globálního kontextu (systémové proměnné).
Vedle určení, jaké vlastně hodnoty se mají používat je nutno vyřešit i zapeklitou otázku bacslashů. Jsou-li
v proměnných jména souborů, není záhodno backslashe interpretovat. Jsou-li v proměnné ale naopak zakódovány
všechny řádky nějakého MEMO fieldu, je potřeba při výpisu takové hodnoty do databáze nebo souboru zase provést
dekódování sekvencí \n na CRLF ... Proto je možno ovládat pomocí prefixů vykřičníků způsob interpretace.
Některé příkazy, kupříkladu viewer, už "tuší", že argumentem bude jméno souboru a snaží se jej uchopit v
syrové podobě a ponechat backslashe. U většiny jiných příkazů je ale předem úplně nejasné, zda jsou backslashe
skutečnými literály nebo výsledkem zakódování řídících znaků. Pravidla jsou následující:
Resolvování - jediný průchod Argument list se prochází jenom jednou zleva doprava a hodnoty se
substituují jenom jednorázově. Tedy nepoužívá se rekurze a není možno ji zde využívat.