3 VaxNt JLABS

VaxNt.PGuide.Příkazy všechny

Programátorská příručka.Přikazy všechny.

Bullet

Zde se uvádí alfabeticky podle prvního znaku všechny příkazy, kterým VaxNt rozumí.

    A - proměnná
    V - přímá hodnota
    C - přímá hodnota a je to char
    I - přímá dodnota a čeká se integer
    P - přímá hodnota a je to jeden z mála parametrů výpočtu
    N - přímá hodnota a je to typicky jméno skriptu apod
    L - délka
    F - field
    T - target, návěští uvitř skriptu
    Q - query
    Src - zdrojov proměnná
    Dst - cílová proměnná
    Interpretace - jde v udaném souboru shora dolů a provádí příkaz za příkazem. Má vlastní sadu proměnných (Context) a podle jinde popsaných pravidel hodnoty vrací
        zpět.
    Konec interpretace - ukončuje se buď pomocí return (vnořené skripty) nebo exit a nebo překročením konce interpretovaného souboru. Ukončení má dvojí efekt:
        Je-li skript vlán iniciálně nad pohledem do databáze, řídí se pomocí návratového kódu způsob překreslení (vůbec, vše načíst znova, jenom aktuální řádek načíst a překreslit)
        Ke konci interpretace se vezmou všechny neprázdné proměnné a vrazí se jako výsledek do Contextu volajícího skriptu.
        Je-li ale volajícím formulář, předává se jen reference na data a tudíž se každá změna hned promítne. To je žádoucí chování. Jelikož je toto hodně silné, často jsou
        počítavé věci dedikovány do podřízenného skriptu, který vynuluje vše krom výsledků. Diky tomu, že se pak proměnné smíchají s ostatními, nemusí se volaný
        skript starat o to, odkud a kým je volán. Může vše pomrvit, ale díky jdnopatrové izolaci navíc se vlastně nec neděje.
    Zásobník - sada stringů, které nemají explicitní jméno a přistupuje se k nim pmocí push a pop. Každá kopie interpreteru má svůj zásobník a není nutno jej vracet
        vyprázdněný. Vždy se vytvoří jako čistý.
    Substituce - příkazy jsou tvaru cmd x, přičemž jak cmd tak i x mhou být prefixovány jedním až třemi vykřičníky. Počet vykřičníků naznačuje, jak moc se má program
        šetrně chovat k systémovým promenným a ke znakům "\". Detailně se to popisuje jinde. Zde jen tolik, že substituce se provádí dvěma DataSety. Systímovými proměnnými a
        aktuální sadou hodnot. Je to velmi mocný nástroj, protože se substituce provádá dynamicky, just in time.
    CC - většina příkazů nějak "dopadne", vraci se false nebo true v proměnné _PreviousResult a je možno ji referencovat jako ERROR nebo SUCCESS
    Kontexty - každý skript má svoji sadu proměnných, sadu pojmenovaných dat. Pro různé uschovávání, předávání mezi skrioty či přežívání se používá několik dalších sad,
        kontextů. To se používá u složitých skriptů a pro přenášení mezi běžnými hodnotami a hodnotami v jiném kontextu jsou vesměs k mání příkazy typu get a put.

    Cílem interpretace skriptů je, aby se interpretovala vesměs jednoduše jednoduchá věc. Vše má nějaké defaulty, dlouhé věci jsou reimplementovány dovnitř interpreteru
    a mnoho funkcí má aliasy či se zdají zbytečnými - jde je nahradit sekvencí jiných příkazů. Cílem ale je, aby skripty byly krátké, přehledné a šlo je i mezi různými
    aplikacemi kopírovat. Místo složitého výkladu se odvoláme na příklady.

    Command                      Synopsis                                                            Příklad
    ----------------------------------------------------------------------------------------------------------------------
    [cnd]                        Cca jako unix, platí && a ||
    
    add                          A1,A2,A3 - sečte A1 a A2 a uloží do A3. Je-li proměnná A2 prázdní, chápe se jako konstanta
    adjust.between               A1,@A2,@A3 - upraví hodnotu A1 tak aby ležela v daných mezích, které se pokusí nalézt buď inirekcí nebo jako proměnné a konečně i konstanty
    addf                         A1,A2,A3 - jako add ale pro floaty. Ty jsou ukládány na čtyři místa.
    abs                          A1,A2 - do A2 dá absolutní hodnotu z A1
    absf                         A1,A2 - dtto jako float
    answer                       A - používá se pro vyzvedávání složitých výsledků via jDatobot a to tehdy, může-li být odpovědí více. Tyto jsou číslovány od nuly.
                                     Když hodnota A přesáhne počet existujících odpovědí, vrátí false. Jinak naplní proměnné podle odpovědi.
    answer.etc                   A,V - dtto a skočí na V:, překročí-li A mez odpovědí
    answer.clear                 Vyčistí buffer s odpověďmi
    answer.put                   V* - do bufferu odpovědí narve hodnoty z command line
    arrange                      A1,A2,V,... - projde postupně argument a hledá tam trojice, vždy dvě proměnné a jednu konstantu. Provede potřebné substituce a pak nastaví
                                     A2 podle A1. Vyjde-li to prázdné, pak použije default z V.
    append.v                     A,V - do A vloží konkatenaci s V
    append                       A - provede konkatenaci hodnoty v A s vrcholem zásobníku a V
    append.string                V - provede podobnou konkatenaci s hodnotou V
    ask                          A,V - dotáže se na string výzvou V a vrací v A vyzískanou hodnotu. XY se chápe stejně jako nevyplnění za false.
    ask.or.exit                  A,V - dtto a případně skončí, když se nic nedotáže

    ask.calendar                 A - dosadí do A datum a k jeho získání zobrazí kalendář
    ask.calendar2                A1,A2 - dosadi do A1 a A2 dva datumy, rozumí se obyvykle DatumOd a DatumDo, k získání se zobrazí kalendář
    ask.date                     A,V - do A se dosadí datum, výzva je V
    alert                        V1,V2 - ukáže výhružné hlášky a skončí interpretaci skriptu
    alias                        A* - prochází argument, čeká tam dvojice jmen a hodnotu v první složce dosadí do druhé
    age                          A1,V,A2,A3 - v A1 se vrací věk v létech jako int. V obsahuje styl výpočtu - rrmmdd nebo rc. A2 je datum narození, případně vypočítané.
                                     A3 je datum, ke kterému se věk počítá, není-li vyplněno, bere se "dnes". Porůznu si to poradí se situací, kdy hodnota v A2 je větčí než dnes,
                                     převede rc žen na normální datum a podle délky rc usoudí, zda se dotyčný náhodou nenarodil po lednu 1954 a zda se dotyčný nenarodil už
                                     v 21 století.
    autosize                     V - nastaví globální flag AutoSize pro pohledy, true je V=1
    ask.ifvoid                   A,V - když je hodnota v A prázdná, pak se na ní dotáže s výzvou V. Vrácená hodnota XY se chápe jako pokyn k ukončení skriptu
    analyze                      @A - nejprve se získá z A hodnota. Všechny znaky nad 127 se nahradí tečkou. Až 32 políček se chápe jako jména hodnota ... obsolentní
    async.set                    V - probere V a podle něj nastaví AsyncContext. Je-li V prázné, zkopíruje se celý aktuální Context. Narazí-li se na hodnotu "clear", vyprádní
    async.get                    V - dtto, ale přenese se to obráceně
    async.set.static             V - zase přenos
    async.get.static             V - dtto

    arglist                      P,V,A1,A2,... - P může být change, set, default nebo suffix. Jestliže je to change, vezme se ještě V tam se hledá commas nebo pipes a pdole toho
                                     se systematicky nahrazuje v hodnotě | za , nebo obráceně. Vstup je z A1 a výstup je A2.
                                     Jinak se systematicky nastavuje, defaultuje nebo suffixuje. Nejlépe je to vidět na příkladu ek2.prg
accumulate.to A1,A2,V,... - první tři argumenty mají pevný význam - Co, Kolik a KamDátJiné. Následuje neomezený počet dvojic, když vždy je první Co a druhé KamToPřičíst. Příklad: accumulate.to Mikrob,Pocet,JINE,ESCO,ESCO,ESCH,ESCO,PRMI,PRMI,KLSP,KLSP,... a zde je záhodno si všimnout, že výskyty ESCH se přičítají do ESCO. all.be.x V,A* - nastaví všechna A ze seznamu na commandline na hodnotu V atb.sieve.reset V* - vyčištění přesívačky antibiotik. Nastaví se zadanému seznamu ATB všude nuly. atb.sieve.get @V,A1,A2,A3,A4 - vezme hodnotu z V a pokud je tato řádkem z přesívačky antibiotik, je menší nebo rovna cardinalitě, pak se do A1,A2,A3 a A4 dosadí Nam,Total,Found a iFound. Tímto obratem se tedy ke konci počítání vyberou výsledky. atb.sieve.step Projde se celá přesívačka antbiotik. Pokud se nějaké Nam vyskytuje v Context, dělalo se testování na Nam. Započte se to do Total, a podle toho, jak to dopadlo, se aktualizuje i Found a iFound - citlivé se získají už trojčlenkou. Příklad použití: atbsieve.prg
atbgram.reset Resetuje antibiogram, atbgram je vlastne dalsi kontext. atbgram.sort Setřídí jej podle antibiotik atbgram.step A1,A2. V obou promennych se ceka ATB string ve tvaru ATC=C|X|ATB=C|X|... Prvni je MIC a druha diskovka. Do atbgramu se izoluji jednotliva antibiotiak, MIC trumfuji diskovky. ATBgram se "rozisri" uricite o tri znaky (zkratka antibiotika) a pripadne i o delku hodnoty. atbgram.store A,V - nastavi do atbgramu konkretni hodnotu atbgram.restore V,A - v kontextu nastavi promennou jmenem V podle hodnoty z promenne A v atbgramu atbgram.get V1,V2 - V1 obsahuje jmeno vystupni promenne. V2 pak index, cislo ukazujici do atbgramu. Vraci se jmeno ATB mezera a hodnota. Kdyz se dane ATB nenajde, vrci se -. atb.order Setridi atbgram podle sys/anti.seq a FRx jsou za tim. at Zapne glabalni flag AtAllowed honotami 1 nebo on. Promenne zacinajici @ se vice zacnou resit i tam, kde se muselo psat $(...) break Skoci za nejblizsi uvedeny cyklus. Bez parametru se to bere jako repeat,until. Jinak treba break for,endfor break.if Cnd break.ifnot Cnd break.unless Cnd break.ifvoid A - testuje hodnotu v A break.ifnotvoid A - dtto break.if Cnd break.if. Cnd begin Zvedne citac beginu o 1 begin.select Do end.select se vsechny radky berou jako argumenty pro nacitani sql, hidden se dava do hidden. Hidden stringy (az 16) byly zavedeny pro skladovani dlouhych stringu, treba knih ci vysledku. Do konextu se dostavaji flip-flop pomovi fynkce hide a typicjy jen na chvili. Jsou-li totiz nekolik KB dlouhe ci jeste delsi, zbytecne zpomaluji vypocty. button.hotkeys Podle hodnoty argumentu se nastavi globalni flag ButtonHotKeys, kterym se řídi chovani buttonu ve formularich b.open V - otevrá binární soubor bf s délkou záznamu 1. Vrací IOResult v CC. b.close Uzavře soubor bf b.read I,V - přečte I (nanejvýše 10240) znaků z bf a uloží je do V. V CC vrací, zda se to povedlo. b.create V - vytvoří bf na zápis b.seek I - seekne bf na pozici I b.write I,A - vezme I znaků z todnoty A, nejvýše však 10240. Pak udělá binární zápis do bf a to I znaků. breakpoint Nedělá nic, jen pro přehlednost kódu breakpoint.data V,V,... - používá se při ladění. Je-li argument prázdný, dotáže se na něj. Je-li i po dotazu prázdný, pouze vypne používání datových breakpointů. Jinak povolí datové breakpointy a vyjmenované hodnoty označí, že se má u nich sledovat zápis. V další exekuci se pak případně objeví změna a debugovací úroneň se automaticky zvedne na nejvyšší. button C,V1,V2 - nastaví button C v prave používaném wizardovi, V1 je nápis a V2 skript, C je A-G a doporučuje se A-D. bad.values.clear Vyčistí seznam nežádoucích hodnot bad.values.load V1,V2 - načte seznam nežádoucích hodnot. V1 obsahuje jméno a jím se řidí to, že se nepovolené hodnoty načtou jen jednou. Zbytek rádku se chápe jako SQL query a vybere se za každý řádek hodnota sloupce X. Výsledek se oddělí znaky | a schová. Použití viz ?bad.value backslashes A,A,... - projde argument a v každé nalezené proměnné změní / na \ - používá se při odkazech na jména souborů. Nějaké kretén v Microsoftu kdysi rozhodl, že místo / bude používat \, to ovšem vadí pak při kódování znaků á la C. backslashes.single A - vezme hodnotu z A a systematicky v ní nahradí \\ za \ a pak výsledek zase do A uloží big.message V1,V2 - vypíše velkou hlášku/výstrahu. První kus normálně a druhý velkymi bukvami. Je-li globálně nastaveno pípání, pípne. Iniciálná default pro pípání je off. Pípání je nesnesitelné. bcp.printto V1,V2 - obsolentní beep Zapípá blob.getline Promenna,HledanaSekvence,PrvniNaRadku,VysledkyRadek,VYSLEDNYTAIL blob.part Promenna,HledanaSekvence,PrvniNaRadku,VysledkyRadek,VYSLEDNYTAIL be.integer A,A,... projde seznam proměnných a zonertuje je na čísla. Kyž to nejde, zkusí vzít i pojmenovaná čísla: zero=0 null=0 void=0 one=1 i=1 ii=2 break.line A,V1,V2 - vezme hodnotu z A a ve V1 čeká maximální šířku a ve V2 počet mezer po násilném zalomení řádku. Hodnotu v A zalomí pomocí \n a hledá zpět až 32 znaků, aby zalomil v mezeře. bb Obsolentní big.show.message V - totéž co big.meggage, akorát první argument je 'Message:' call N - zavolá skript N call.over.file P|*,F,N,A=V,... P jsou jména položek oddělená pipítky F je datový soubor a předpokládá se, že právě obsahuje řádky a pipítky oddělenými daty N je jméno skriptu A=V jsou rovnice, kterými je možno skriptu strkat parametry Skript se pak volá takto: Na začátku se do _Phase dá SetUp (a dal39 parametry) Pak se vždy přečte jeden rádek z F, rozbetlí se a do _Phase se dá Step Na konci se do _Phase dá CloseDown Používá se na systematické volání skriptu nad výsledkem nějakého query. Příklad: dump.sql zakaznik|fid|Color,c:/tmp/faktura-vypocet.tmp,select zakaznik,fid,Color from frontanaf order by zakaznik,fid call.over.file zakaznik|fid|Color,c:/tmp/faktura-vypocet.tmp,pokus-step.prg,Counter=100 exit call.over.equfile F,N,A=V,... Varianta předešlého, kde vstupní soubor je v equ formátu call.over.query Viz iterate call.args N,A=V,... nastaví proměnné a vyvolá skript N, volajícímu se změní vše co je neprázdné a případně se mu i nové hodnoty nastaví call.freeze N,A=V,... provede totéž, ale volajícímu se nic nevrátí a ani nic nezmění s výjimkou proměnné Result, ta se transformuje na CC call.freeze.return N,A=V,... totéž a hden se pak volaný skript ukončí call.freeze.exit Dtto call.library N,A=V,... call se udělá na knihovnu skriptů built-in call.library.use N,A=V,... dtto a na začátku se provede use z předaného view Následující skripty jsou pro kompaktifikaci kódu ... call.args.goto T,N,A=V,... po ukončení se skočí na návěští T, návěští rt, _return a return mají očekávaný smysl call.return N,A=V,... vyvolá call a hned pak exit podle parametru ExitCode call?exit N,A=V,... dtto, ale podle hodnoty_Result udělá exit. Vyjde=li prázdná, pokračuje se normálně call.sub T ... návratový bod je definován jako hodnota za daným přikazem, pak se skočí na T. Volání podprogramu bez stacku. call.sub.args T,A=V,... varianta předešlého s tím, že se nejprve nastaví proměnné. call.subr.args T,A=V,... tot0éž, ale volání je se stackem, čili končí typicky via rt Tato funkce má aliasy call.p, jsr, cs a _call cardinal A,V - do A nastaví počet fieldů ve V, oddělovačem je čárka calling.context.clear Vyčistí konext volanému, obsolentní call.ext.dialog DLL,Id,Ctx - obsolentní, natáhne DLL, zavolá v něm Id jako dialog a Ctc je kontext dialogu. Výsledek vrátí v CC. call.ext.fnc Obsolentní callback.values.clear Obsolentní calc Obsolentní, umí podle prvního argumentu různé složité výpočty, třeba sférickou vzdálenost case Obsolentní, vezme proměnnou a usekne z ní zadaný počet znaků. Pak skočí na výsledek, pokud tento existuje. call.p Alias za jsr check.variable V,A,P,P - provede test V na proměnné A, P jsou parametry testu. Výsledek vrátí v proměnné _Result. Pokud to nevyjde a pokud je vyplněna proměnná _ExitLabel, skočí na její obsah check.obligatory Obsolentní chop A,V,A,V,... useká proměnné A na délky V change A,V1,V2,... projde postupne trojice. Nalezne-li, že hodnota A je V1, nahradí ji za V2. chkstr A1,A2 ... otestuje hodnotu v A1 pomocí testu v A2, obsolentní chain N,A=V,... vyvolá skript N s udanými argumenty a pak skončí change.chars A,V,C1,C2 ... vezme hodnotu z A, nahradí v ní každý výskyt znaku C1 za C2 a výsledek uloží do proměnné V charx @A1,I,A2 ... vezme hodnotu referencovanou v prvnim parametru a do A2 da I-tý char z ní chart.start Obsolentní. Vyčistí všechny proměnné chartu a nastaví jeho iniciální hodnoty na aktuální kontext chart.setup Obsolentní. @A1,@A2 ... první parametr je číslo mezi 1 a 8 a druhé jméno. Jsou to cardinal a name chartu. chart.serie Obsolentní. No,Cap,Typ,Col') then fChartSerie chart.serie.add Obsolentní. chart.serie.revert Obsolentní. chart.create Obsolentní. choose @A1,@A2,@A3,@A4 - do proměnné referencované v prvním parametru dá výběr z číselníku, parametry jsou tedy Dst,Navod,Soubor,Hodnota choose.change @A1,@A2,@A3 - vezme hodnotu z A2 a přeloží ji číselníkem z A3. Vyjde-li nepráznř výsledek, uloží jej do A1 char.get A1,A2,I - do A1 dosadí I-tý znak z A2, I je omezeno na 1-256 čistě z praktických důvodů char.put A1,A2,I - do A1 dosadí původní hodnotu změněnou na I-tém místě na odpovídající znak z A2 chars.get A1,A2,I,L - jako char.get, udělá to ale s L znaky chars.put A1,A2,I,L clear.more A1,A2,... - vymaže hodnoty A1,A2,... clear.except A1,A2,... - vymaže všechny hodnoty krom A1,A2,... clear Vymaže všecko clear.pattern V - vymaže vše, co splní pattern V. Splněním se zde rozumí substring. Funkce je case insensitive. clear.by.suffix V - vymaže vše, co končí V-čkem, funkce je case insensitive. clear.shorts Vymaže všechny tzv. kratké proměnné, které se obvykle používají v medikačních listech apod. Data jsou typicky velká, ale řídká matice, kde jsou prvky pojmenovány cca jako a23 nebo q17. Čistě konvencí jdou písmena po řádcích a čísla po sloupcích. Je tedy b16 chlívek ve druhém řádku a 16 ve sloupečku. Konkétně tedy vymaže všecho od a00 do z99. Funkce je case insensitive. clear.shorts.x @A - snaží se najít číslo jako parametr a vymaže všechny kratké proměnné v daném sloupci clipboard.save Schová všechny aktuální hodnoty do clipboardu clipboard.use Vezme naopak vše z clipboardu a nehradí tím aktuální hodnoty clipboard.zoom Zobrazí clipboard jako rovnice, umožní editace a pak zas výsledek uloží do clipboardu close.fg Uzavře pracovní soubory f a g jedním vrzem. Pouze zkratka za dva příkazy, ovšem velmi frekventní. context.use Každý skript může být volán nad nějakým datasetem. Typicky to je tedy obsah nějakého SQL query, tedy view. Může ho komplet ignorovat nebo naopak z něj čerpat. Zde má tedy smyslu "aktuální řádek" a sloupečky v něm. Pomocí context.use se vlastně získává obvykle to, nad čím se má akce provést. Třeba číslo vzorku, rodné číslo pacienta nebo číslo účtu. context.use.only A1,A2,... - z původního kontextu si vezme jen některé hodnoty. context.force A1,V1,A2,V2,... - dovolí předefinovat to, nad čím je skript volán. continue X,Y - skočí na začátek cyklu obaleného X a Y, bez parametrů pak repeat,until. connect V - připojí se v rámci daného skriptu k databázi V. Příkazy jako insert, update či load.sql se chvíli týkají prostě jiné databáze V Bez parametrů se zase vrátí k původní, implicitní databázi. connect.stick Připojí se trvale až do odvolání k databázi V. Bez parametrů se pak vrátí k původnímu připojení. context.set A1,V1,A2,V2,... - provede sérii přiřazení context.clear Totéž co clear construct A,X1,X2,... - definuje hodnotu A jako konkatenaci hodnot Xi. Xi je buď hodnota v proměnné nebo přímá hodnota (je-li v proměnné prázdno) a vždy se ještě řeší ve druhém případě substitucí všemožné proměnné typu Today apod. condition Cnd - libovolná syntakticky správná podmínka, výsledek se vrací via CC context.test A - otestuje hodnotu v A na neprázdnost a výsledek vrací via CC context.freeze V - V je číslo mezi 1 a 16. Aktuální kontext se schová na jednom ze 16 míst. Používá se tehdy, kdy podřízený skript může všelijak divoce hodnoty změnit a vůbec se nestará o následky. Bez parametrů se použije jeden defaultní chlívek č. 0. context.unfreeze V - opak předešlého. context.save Všechny hodnoty v savedcontext se vymažou a pak se schová celý aktuální kontext. context.restore Aktuální kontext se vezme ze savedcontext. context.restrict A1,A2,... - aktuální kontext se omezí pouze na proměnné A1,A2,... context.get_system A - hodnota A se vezme ze systemcontext, který přetrvává a jsou v něm globální proměnné typu Today, ale také třeba Product, Author a pomocí následující funkce cokoli context.set_system A - hodnota v A se dostane mezi globály context.export A - dtto context.cp A1,A2 - do A2 dosadí hodnotu z A1, A2 napřed připadně všemožně substituuje. context.set.encode A=V - dosadí do A hodnotu V a ev, ji i zakóduje CRLF na \n copy V1,V2 - zkopíruje dva udané soubory přes buffer dlouhý cca 64KB. Je-li WithProgress nastaveno na 1, ukazuje i progress kopírování. context.set_systemr A - mezi globály dá A a jeho hodnotu vezme z aktuálního kontextu a resolvuje ji. context.default A,V - do A dá hodntu V, pkud je v A prázdno context.inc A - o jedničku zvedne hodnotu z A context.to.defaults Schová se celý kontext a následně se dá z Defaults vytahovat. context.w.memo A,F - hodnotu z A zapíše do souboru F, dekóduje \n context.r.memo A,F. Opak předešlého. context.set.export A=V - provede přiřazení v aktuálním i systémovém kontextu context.set.export.more A1,V1,A2,V2,... - udělá totéž nad mnoho proměnnými context.set.more A1,V1,A2,V2,... - udělá řadu přiřazení compare A,V - porovná hodnotu v A s konstantou V (do konce řádku) a zastaví CC compare.strings V1,V2 - porovná hodnotu dvou konstant copy.string V,A,I1,I2 - zkopíruje část stringu, V je destinace, A zdroj a I1 a I2 jsou přímé hodnoty - odkud a kolik znaků context.new_hospid Do proměnné HospId vygeneruje nové HospId, obsolentní context.load.sql Q - vezme query Q a do aktuálního kontextu dá jeho výsledek context.load_sql Q - dtto context.dump V - vydumpuje aktuální kontext pod názvem V do logovacího adresáře log. Přesný způsob logování ovlivní též globální hodnota DumpCompByComp. Výsledný soubor je cca PC-Stamp.V a slouží jako značka, nezávislé uložení dat apod. Mlčky se předpokládá, že potom někdy v noci je obsah logovacího adresáře zazipován, smazán apod. Typická instalace generuje několik tisíc dumpů denně čistě aby bylo vidět, co kdo a kde dělá. confirm V - vyvolá dialog s potvrzením V, výsledek dá do CC confirm.or.exit V - dtto a případně rovnou skončí confirm.big.or.exit V - dtto a dialog je více viditelní confirm.twice.or.exit V - dvakrát si nechá věc potvrdit compact.file F,G - vezme textový soubor F a vyháže z něj násobné výskyty prázdných řádků, výsledek uloží do G. context.use.implicite Obsolentní context.clear.implicite Obsolentní compiler Obsolentní condense A1,A2,... - projde všechny hodnoty a vyháže z nich výskyty dvou mezer za sebou a nechá jen jednu. condense.crlf A1,A2,... - projde všechny hodnoty a napřed z nich vyháže vedoucí CRLF. Potom všechny výskyty CRLFCRLF nahradí za CRLF. condense.trailing.spaces A1,A2,... - zahazuje výskyt mezery následované CRLF. condense.balast A1,A2,... - otrimuje všechny hodnoty a pak je zase zakóduje condense.tabs A1,A2,... - taby nahradí mezerou color2hex X,V,I - v X se hledá barva, zezme se z proměnné či z přímé hodnoty, uloží se jako hex do V a I je intenzity flag count V,T,F - do V dosadí počet řádků z F, které obsahují T. F je buď hodnota proměnné nebo přímá hodnota count.tag V,C,@A - získá hodnotu přes A a pak do V uloží počet výskytů znaku C v ní commas.out A1,A2,... - v hodnotách nahradí výskyty čárek za tečky, používá se k unifikaci desetinných čísel. Nějaký debil u nás zavedl desetinnou čárku místo tečky. concat V,A1,A2,... do V uloží zkokatenované hodnoty z A1,A2,... concat.spaced V,A1,A2,... dtto a výsledek vždy prokládá mezerou concat.pattern V,P - projde celý kontext, jména proměnných začínající na P se postupně seřadá do dvojic Jméno|Hodnota| a výsledek se dá do V, jedním vrzem se třeba vyexporují hodnoty všech Vykon.* apod. compute Obsolentní comma2dot Viz commas.out comma V,A1,A2,... - projde šechny hodnoty, oddělí je čárkami a výsledek dá do V comma.strcat A,V - do A přídá čárkou oddělenou hodnotu, na začátku zahodí případnou čárku samotnou. confirm.or.timeout V - nechá cca 30s svítit dialog s V, případně jej při reakci obsluhy zkrátí context.tofile F - vezme aktuálí kontext a šoupne ho jako rovnice do F context.fromfile F - přečte F a podle něj nastaví kontext column.menu DstVar,DstLine,Alias,RowNumber,Caption,Sql;Sql2 - zavolá knihovní DstVar - kam se to uloží DstLine - kam se uloží celý vybraný řádek Alias - typicky ten implicitní RawNumber - počet sloupců při zobrazení Caption Sql - query Sql - také query, druhá volba cocall Path,Legend - zavolání externí aplikace, výsledek jde do proměnné CoCallResult cp F,G - jako copy, zkopíruje dva soubory cp1250 A,V - z A se vezme hodnota, vse mimo cp1250 a rovněž znaky Chr(0), Chr(9), Chr($95), § a © se nahradí mezerou. Výsledek se dá do proměnné jménem V cz.xlate A,X,V - vezme hodnotu z A, přeloží ji do češtiny způsobem X a výsledek dá do V. Toto jsou speciální případy: A je _sp, bere se string ze stacku Stack[SP] A je _r0, bere se string z registru R0 A je _r1, bere se string z registru R1 tyto případy jsou spíš obsolentní a měly význam pro pomalé počítače a velmi velké stringy - ty se tím vytlačily mimo kontext Rozeznávané hodnoty X jsou tvořeny vždy dvěma písmeny, nejčastěji to je wc. První písmeno je vstupní kód a druhé kód výstupní: k = Kamenik l = PcLatin2 i = IsoLatin2 c = Czech, tedy bez diakritiky w = cp1250, tedy Windows Ošklivé písmenko ś a Ś se zakóduje napřed jako s resp. S. Toto zakódování se používá hlavně pro anglický software, který se s písmen s diakritikou ve jménech zblázní. cz.xlate.hard A,X,V - drsnější překlad, nahradí x všechny znaky, co nejsou malými či velkými písmeny, číslicemi mezerou a minusítkem. cz.xlate.loop X,A1,A2,... - v X je způsob překladu a pak se postupně přeloží a zpět uloží hodnoty z A1,A2,... cz.to.numbers A1,V1,A2,V2,... v Ai hledá hodnoty a v nich znaky zadané jako české změní na odpovídající číslice, používá se u čteček čárového kódu, kde se zapomene čeština. create.rtf M,F - obojí jsou přímé hodnoty, M je mustr a F je výsledek. M se projde a výskyty $(Promenna) se sustituují podle aktuálního contextu. Používá se pro tvorbu různých dokumentů. create.rtf.open Dtto a výsledek se rovnou otevře zaregistrovanou aplikací. create.rtf.print Dtto a výsledek se rovnou vytiskne zaregistrovanou aplikací. create.rtf.open.off Dtto a výsledek se rovnou otevře zaregistrovanou aplikací. Tzv. MagicSwitch se před substitucí na chvíli vypne. Některé verze software či systému nedokázali vydýchar data v cp1250 a tu se tato data kódovala, ta s diakritikou, jako sekvence. Většinou však ne. Má-li uživatel smůlu, pak se jen vypínání zruší. Aktuální kombinace W7 nebo W10 a recentní Office tuto nectnost nemá. create.rtf.print.off Dtto pro print crlf A1,A2,... - postupně projde Ai, vezme z nich hodnotu a textové výskty zanradí za \n a výsledek zase uloží zpět. Používá se tam, kde načtení nebo i zápis zakódované podoby dělá potíže. crlf.strcat A1,A2 - do A1 uloží konkatenaci hoznot z A1 a A2 oddělenou \n. Je-li hodnota z A1 prázdná, pak se \n nepřidává. cross.getkeylist A - vrazí do A (případně do @A) aktuální seznam klíčů pro aktuální pohled. Tzv. křížkované pohledy slouží k ad-hoc označování záznamů. Obsahují v definici sql query vždy sekvenci: select '~' as cc, Labno||'-'||Radek as Klic,LABNO,MATERIAL,KODZDRZA,KODODD,MIKROB, ... a systém sám řeší + a -, rozumí se šedé plus a šedé minus. Tato i daší funkce pak slouží ke vnucení určitého stavu, k uložení atd. Globálně se klíče i chování definuje ve vaxnt.prm: GlobalMsKeys = Labno - klíčem je LabNo, není-li nastaveno jinak GlobalMsStyle = Bold - vybraný řádek je bold GlobalMsColor = Magenta - a zobrazí se jako Magenta cross.putkeylist A - v A se čeká (může to být i @A) seznam klíčových položek a ten se vnutí pohledu. cross.savetofile F - klíčové hodnoty z pohledu a z nich ty vybrané, se uloží do souboru F cross.loadfromfile F - naopak se to načte následující funkce jedou na vlastním kontextu ... a nejsou moc hotové cross.clear Nic není označeno cross.ins @V - nastaví se označení u udané klíčové hodnoty cross.del @V - odoznačení u udané klíčové hodnoty cross.read V - načte hodnoty ze souboru cross.write V - zapíše do souboru cross.union V - udělá sjednocení s daným souborem cross.meet V - zatím nedělá nic, ale je to míněno na průnik current.column.name V - do proměnné V uloží jméno aktuálního sloupce z aktuálního pohledu csv V,A1,A2,... - do V oloží středníky oddělení hodnoty z Ai csv.strcat A1,A2 - obsolentní') then fWhatStrcat(';') cs S,A1=V1,A2=V2,... volání podprogramu, alias k jsr a _call csv.tofile Obsolentní csv.prepare A1,A2,... - vezme hodnoty a vyháže z nich středníky csv.format 0 nebo 1 - změní defaultní formát exportu a importu na CSV csv.buffer.clear Vyčistí CSV buffer csv.buffer.add @A - přidá řádek do CSV bufferu csv.buffer.use 0 nebo 1 - zapíná užívání CSV bufferu csv.novoid A1,A2,A3,... - do A1 seskládá hodnoty z A2,A3,... a ignoruje přitom prázdné hodnoty či hodnoty - csv.index Src,I,Dst - do Dst dá I-tý sloupec z hodnoty v Src, oddělovačem je středník csv2pipe Src,I,Dst - vezme hodnotu ze Src, dekóduje CRLF a z každého řádku si vezme I-tý sloupec. Vyjde-li v daném řádku neprázdno, výsledek appenduje do Dst a oddělí | dmr2yyyymmdd Src,Dst - vezme hodnotu ze Src, zkonvertuje ji dle schématu dmr na yyyymmdd. Tedy například 17.2.14 na 20140217. Odělovač je tečka. dhs.put Obsolentní dhs.get Obsolentní do Stejně jako fsetup slouží k vertikálnímu zhuštění kódu, dokumentováno samostatně. dot2comma A1,A2,... - projde hodnoty proměnných Ai a všechny výskyty "." nahradí za "," dot A1,A2,... - přidá znak "." ke každé z hodnot proměnných Ai dec A1,A2,... - dekrementuje hodnoty v Ai default A1,V1,A2,V2,... - nastaví hodntoty v Ai podle Vi pro prázdné hodnoty defaultv A1,A2,A3,A4,... - dtto, hodnoty ale vezme z proměnných decimal.point A1,A2,... - standardizuje čísla v proměnných Ai, vyháže mezery a znaky "," nahradí za "." decode.crlf Obsolentní, dekóduje CRLF ve stringu na vrcholu zásobníku defaults.get Obsolentní, nastaví defaulty pro řadu proměnných delete V - podle hodnot v aktuálním kontextu lokalizuje řádek v tabulce V a ten deletuje a případně raisuje exception, když řádek nenajde defaults.to.context Vezme context Defaults a ten propaguje do aktuálního kontextu defaults.test A - otestuje hodnotu A v kontextu Defaults na prázdnost a podle toho nastaví CC default.year A,V - vezme hodnotu z A, nahradí v ní všechny výskyty "/" a "-" za "." a V se čeká jako rok YYYY. Jestliže hodnota neobsahuje žádnou tečku a má délku 4, do A se uloží původní hodnota a suffixuje se hodnotou V. To je tedy například 1207. Jestliže počet teček je 1, uloží se původní hodnota a suffixuje se .V - například 12.07 se transformuje na 12.07.2017. V případě, že počet teček je 2 a více, nedělá se nic. debuglevel I - povolené hodnoty jsou 0,1,2 a 3 a doporučené jsou 0 (vypnuto) a 3 (maximální úroveň). Řídí se tím debugování skriptů a při úrovni 3 se s každým příkazem v daném skriptu interpretace zastaví a ukáže hodnoty aktuálního kontextu. Jiné úrovně debugování: 1 - ukáže se jen dialog DEBUG: a interpretovaný string 2 - zastaví se jen při změně hodnot určitých proměnných, obsolentní Příkazem nodebug je tot možno úplně potlačit a chová se pak jako nop. To se využije tam, kde se třeba debugování nechá být, ale s výjimkou konkrétního usera se debugování potlačí. Pak se debugování zapne jen konkrétnímu uživateli debug V,W - v adresáři debug apenduje soubor se jménem odvozeným z PC a V a zapše do něj W. Slouží k debugovacím výpisům na pozadí. debugnote V - do stále stejně se jmenujícího souboru c:/tmp/debugnote.txt se appenduje V. Je-li to ".clear", pak se tento soubor odstraní. Slouží k debugování na lokálním PC, typicky ke sledování nějaké hodnoty v sáhodlouhém výpočtu. debugfast V - dtto. ale děje se to celé na stringu v paměti debugfast.clear Nadbytečné, vyčistí degugovací string debugfast.view Zobrazí debugovací string Mezi debugnote a debugfast jsou dva hlavní rozdíly. Debugnote zůstane na disku, není-li smazán úmyslně. A prohlížení uvnitř běžícího exempláře VaxNt je omezeno na cca 60tis znaků, zatímco soubor c:/tmp/debugnote.txt může být i velmi velký. decimals I - nastaví počet decimálních míst pro výpočty, default je 4. Čili se počítá na 4 platné decimální číslice, rozumí se u floatů. deref Ptr,Dst,... - obsolentní, do Dst dá hodnotu z proměnné Ptr define A=V - obsolentní. vyřeší proměnné ve V a výsledek šoupne do proměnné A div A,I,Dst - do proměnné Dst uloží hodnotu z proměnné A dělenou přímou hodnotou I a to vše jako integer¨ divf A,I,Dst - dtto pro floaty. Počítá se na decimals číslic, by default na 4. I se chápe jako 0.0000, je-li Abs(I) hodně malé, menší než 0.000000000000001. Všechny chyby jsou potlačeny a nesmysly defaultovány na 0. Typicky se ve skriptech počítají tak maximálně procenta apod. difftime Dst,A1,A2 - V A1 hledá menší čas a v A2 větší, ve formátu HHMMSS. Do proměnné Dst se uloží rozdíl ve vteřinách. Chyby a nesmysly se defaultují na 0. diffdate Dst,A1,A2 - dtto pro datumy ve formátu YYYYMMDD a vrací se rozdíl ve dnech jako integer diffdate+1 Dst,A1,A2 - dtto a vrací se rovnou o jedničku více pro sestry apod., kde pořadí dne od nuly je moc složité nebo není zažité. diffdatetime Dst,A1,A2 - dtto a vrací se rozdíl ve vteřinách pro formát YYYYMMDDHHMMSS diffdatetime.d Dst,A1,A2 - dtto a vrací se rozdíl ve dnech jako float ') then fDiffDateTimeD else if OpIs('diff.prf') then fDiffPrf else if OpIs('disable') then fDisable else if OpIs('display') then fDisplay diff A* Nastaví do DIFF rozdily v udaných proměnných proti poslednímu save else BadCommand; 'a': if OpIs('data.clear') then Data.Clear else if OpIs('day.name') then fDayName else if OpIs('day.abbr') then fDayAbbr else if OpIs('day.name.abbr') then fDayNameAbbr else if OpIs('data.from.dst') then Data.Assign(DropDst) else if OpIs('data.from.src') then Data.Assign(DropDst) else if OpIs('data.test') then TestArg(Data) else if OpIs('data.to_context') then XToContext(Data) else if OpIs('data.to.context') then XToContext(Data) else if OpIs('data.load_sql') then DataLoadSql else if OpIs('data.load.sql') then DataLoadSql else if OpIs('database.name') then SetDbName(arg) else if OpIs('datexname') then GetDateXName(ResolvedArg,'cz') else if OpIs('datexname.sk') then GetDateXName(ResolvedArg,'sk') else if OpIs('datopod') then fDatopod else BadCommand; 's': if OpIs('dset.eof') then fDsetEof else if OpIs('dset.card') then fDsetCard else if OpIs('dset.summ') then fDsetSumm else if OpIs('dset.bof') then fDsetBof else if OpIs('dset.first') then fDsetFirst else if OpIs('dset.prior') then fDsetPrior else if OpIs('dset.last') then fDsetLast else if OpIs('dset.next') then fDsetNext else if OpIs('dset.get') then fDsetGet else if OpIs('dset.enablecontrols')then fDsetEnableControls else if OpIs('dset.disablecontrols')then fDsetDisableControls else if OpIs('dset.disablecontrols.freeze') then begin fDsetDisableControls; fDsetFreeze; end else if OpIs('dset.process') then fDsetProcess else if OpIs('dset.freeze') then fDsetFreeze else if OpIs('dset.unfreeze') then fDsetUnFreeze else if OpIs('dset.unfreeze.enablecontrols') then begin fDsetUnFreeze; fDsetEnableControls; end else if OpIs('dset.getrecno') then fDsetGetRecNo else if OpIs('dset.setrecno') then fDsetSetRecNo else if OpIs('dset.export.equ') then fDsetExport('e') else if OpIs('dset.export.pip') then fDsetExport('p') else if OpIs('dst.to.context') then XToContext(DropDst) else BadCommand; 'y': if OpIs('dynamic.wizard') then fDynamicWizard else if OpIs('dynamic.wizard.call') then fDynamicWizardCall(False,'') else if OpIs('dynamic.wizard.call.or.exit') then fDynamicWizardCall(True,'') else BadCommand; '.': if OpIs('d.m.yyyy2yyyymmdd') or OpIs('d.m.yyyy') then fdmyyyy2yyyymmdd else BadCommand; 'd': if OpIs('ddmmyyyy2yyyymmdd') or OpIs('dd.mm.yyyy') then fddmmyyyy2yyyymmdd else if OpIs('d.m.yyyy2yyyymmdd') or OpIs('d.m.yyyy') then fdmyyyy2yyyymmdd else if OpIs('dd_mm_yy.yyyymmdd') or OpIs('dd.mm.yy') then fddmmyy_yyyymmdd else BadCommand; 'u': if OpIs('dump') then DumpContext(ResolvedArg) else if OpIs('dump2file') then DumpContext2File(ResolvedArg) // novinka else if OpIs('dump.sql') then fDumpSql // novinka else if OpIs('dump.sql.equ') then fDumpSqlEqu // novinka else if OpIs('dump.sql.equ.fast') then fDumpSqlFast(0) // novinka else if OpIs('dump.sql.pip.fast') then fDumpSqlFast(1) // novinka else if OpIs('dump.sql.csv.fast') then fDumpSqlFast(2) // novinka else if OpIs('dump.log') then fDumpLog(ResolvedArg) // novinka else BadCommand; 'l': if OpIs('dlg.date') then fDlgDate else BadCommand; else BadCommand; end; 'e': case Op[2] of 'x': if OpIs('exit') or OpIs('ex') then DoExit else if OpIs('exit.iffalse') then fExitIfFalse else if OpIs('exit.iftrue') then fExitIfTrue else if OpIs('exit.if') then fExitIf else if OpIs('exit.ifvoid') then fExitIfVoid else if OpIs('exit.ifnotvoid') then fExitIfNotVoid else if OpIs('exit.ifnot') then fExitIfNot else if OpIs('exit.unless') then fExitIfNot else if OpIs('exit.unlock') then fExitUnlock else if OpIs('exit.unlock.iffalse') then fExitUnlockIffalse else if OpIs('exit.show.message') then fExitShowMessage(2) else if OpIs('exit.message') then fExitShowMessage(2) else if OpIs('exit.dump') then fExitDump else if OpIs('exit.stopsql') then begin StopSql; DoExitNow(0); end else if OpIs('exp') then fExp else if OpIs('export') then SetContextAndSystemValue else if OpIs('export.more') then ExportMore else if OpIs('expander.set') then fExpanderSet else if OpIs('expander.apply') then fExpanderApply else if OpIs('expand.codes') then fExpandCodes else BadCommand; 'a': if OpIs('easter.sunday') then fEasterSunday else BadCommand; 'm': if OpIs('email') then fEmail else BadCommand; 'n': if OpIs('endfor') then fForCommand(True) else if OpIs('endfor.list') then fForListCommand(True) else if OpIs('endthru') then fThruCommand(True) else if OpIs('endthruc') then fcThruCommand(True) else if OpIs('encode.crlf') then Stack[SP]:=utEncodeString(Stack[SP]) else BadCommand; 's': if OpIs('essence') then fEssence else BadCommand; 'q': if OpIs('equ2file') then fEquToFile(true) else if OpIs('equations') then fEquations else if OpIs('equ2file.pip') then fEquToFile(false) else if OpIs('equ') or OpIs('eq') then SetContextValue(False,False,False,False) else if OpIs('equ.nonvoid') or OpIs('eq.nonvoid') then SetContextValue(False,False,False,True) else BadCommand; 'l': if OpIs('elseif') then begin fElseIfCommand; if Trim(SReg)<>'' then begin Dec(PC); Result:=False; end; end else BadCommand; 'd': if OpIs('edit') then fEditString(True) else if OpIs('edit.ro') then fEditString(False) else if OpIs('edit.file') then fEdit else if OpIs('edit.file.ro') then fViewRO else if OpIs('edit.static') then fEditStatic else BadCommand else BadCommand; end; 'f': case Op[2] of 'l': if OpIs('flags.clear') then FlagContext.Clear else if OpIs('flags.remember') then fFlagsRemember else if OpIs('flags.dump') then fFlagsDump else BadCommand; 'r': if OpIs('fromfile') then fFromFile else BadCommand; 'e': if OpIs('fetch') then Fetch(UnifySlashes(ParamDir+'prg\'+Arg),True) else if OpIs('fetch?') then Fetch(UnifySlashes(ParamDir+'prg\'+Arg),False) else if OpIs('fetch.ifvisible') then fFetch(False) else if OpIs('fetch.ifdefined') then fFetch(True) else BadCommand; 'n': if OpIs('fnc.clear') then XformContext.Clear else if OpIs('fnc.sum.clear') then XSumContext.Clear else if OpIs('fnc.put') then fFncPut else if OpIs('fnc.get') then fFncGet else if OpIs('fnc.find') then fFncFind else if OpIs('fnc.sum.add') then fFncSumAdd else if OpIs('fnc.sum.get') then fFncSumGet else if OpIs('fnc.sum.i') then fFncSumI else BadCommand; 'm': if OpIs('fms') then FForm else if OpIs('fms.prepare') then FFormPrepare else if OpIs('fms.ready') then FFormReady else if OpIs('fms.step') then FFormStep(ResolvedArg) else if OpIs('fms.name') then FormName:=ResolvedArg else if OpIs('fms.scan') then FFormScan else if OpIs('fms.dump') then FFormDump else if OpIs('fms.print') then FFormPrint else if OpIs('fms.printj') then FFormPrintJ else if OpIs('fms.buttons') then FmsButtons:=(ResolvedArg='1') else if OpIs('fms.get') then fFormGet else if OpIs('fms.get.static') then fFormGetStatic else if OpIs('fms.put') then fFormGet else if OpIs('fms.put.static') then fFormPutStatic else BadCommand; 'o': if OpIs('for') then fForCommand(False) else if OpIs('for.list') then fForListCommand(False) else if OpIs('format.width') then FormatWidth else if OpIs('format') then fFormat else if OpIs('fold') then fFold(False,False,'') else if OpIs('fold.crlf') then fFold(False,False,#13#10) else if OpIs('fold.trim') then fFold(True,False,'') else if OpIs('fold.trim.crlf') then fFold(True,False,#13#10) else if OpIs('fold.trim.2nd') then fFold(True,True,'') else if OpIs('fold.split') then fFoldSplit else BadCommand; '.': if OpIs('f.write') then begin V1:=utDecodeString(Sysresolve(Arg,False)); LastLength:=Length(V1); Writeln(fx,fIndention,V1) end else if OpIs('f.minuses') then fWriteMinuses else if OpIs('f.create') then fCreate(fx,false) else if OpIs('f.size') then fGetSize else if OpIs('f.create.or.quit') then fCreate(fx,True) else if OpIs('f.create.close') then fCreateClose(fx) else if OpIs('f.append') then AppendOrCreateTextFile(fx,Sysresolve(Arg,false)) else if OpIs('f.close') then begin // if not fxopen then CloseFile(fx); fxopen:=False; end else if OpIs('f.write4excel') then Writeln(fx,fIndention,Excel4(utDecodeString(Sysresolve(Arg,False)))) else if OpIs('f.write._s') then Write(fx,fIndention,_S) else if OpIs('f.wr') then Write(fx,fIndention,utDecodeString(Sysresolve(Arg,False))) else if OpIs('f.dump.data') then Write(fx,fIndention,Data.Text) else if OpIs('f.newline') then Writeln(fx) else if OpIs('f.write.al') then fWriteAdjusted else if OpIs('f.write.var') then Write(fx,Context.Values[Arg]) {doc} else if OpIs('f.write.dir') then fWriteDir(False) {doc} else if OpIs('f.write.dir.recursive') then fWriteDir(True) {doc} else if OpIs('f.write.centered') then fWriteCentered else if OpIs('f.write.more.nolf') then fWriteMore(False,fx) else if OpIs('f.write.more') then fWriteMore(True,fx) else if OpIs('f.writeln.more') then fWriteMore(True,fx) else if OpIs('f.write.wl') then fWriteAdjustedWi(fx) else if OpIs('f.write.raw') then fWriteRaw(fx) else if OpIs('f.writeln.raw') then fWriteLnRaw(fx) else if OpIs('f.write.sp') then Write(fx,' ') else if OpIs('f.write.nl') then Write(fx,Sysresolve(ARg,False),' ') else if OpIs('f.write.ind') then fWriteIndented(fx) else if OpIs('f.write.novoid') then fWriteNovoid(fx) else if OpIs('f.write.context') then Write(fx,fIndention,utSubstString(Arg,Context)) else if OpIs('f.writeln.context') then Writeln(fx,fIndention,utSubstString(Arg,Context)) else if OpIs('f.writeln') then Writeln(fx) {doc} else if OpIs('f.write.textfile') then FWriteTextFile(fx,SysResolve(Arg,False),False) else if OpIs('f.write.textfile.encoded') then FWriteTextFileEncoded(fx,SysResolve(Arg,False)) {doc} else if OpIs('f.write.subst') then fWriteSubst {doc} else if OpIs('f.compose') then FCompose {doc} else if OpIs('f.write.textfile.novoid') then FWriteTextFileNovoid(SysResolve(Arg,False)) else if OpIs('f.write.textfile.nl') then FWriteTextFile(fx,SysResolve(Arg,False),True) {doc} else if OpIs('f.exists') then if FileCheck(UnifySlashes(Sysresolve(Arg,False))) then PreviousResult:=1 else PreviousResult:=0 {doc} else if OpIs('f.erase') then ffErase else if OpIs('f.erase.pattern') then fErasePattern else if OpIs('f.erase.more') then fEraseMore else if OpIs('f.null') then fNullMore {doc} else if OpIs('f.indent+') then fIndention:=fIndention+' ' {doc} else if OpIs('f.indent-') then Delete(fIndention,1,2) else if OpIs('f.write.top') then Write(fx,fIndention,Stack[SP]) {doc} else if OpIs('f.write.diff') then fWriteDiff else if OpIs('f.writeln.change') then fWritelnChange {doc} else if OpIs('f.noindent') then fIndention:='' else if OpIs('f.write.pop') then fWritePop {doc} else if OpIs('f.write.diff.prf') then fWritePrefDiff else if OpIs('f.dump') then fDumpMany(fx,false,false) else if OpIs('f.dump.equ') then fDumpMany(fx,true,false) else if OpIs('f.dump.equ.expanded') then fDumpMany(fx,true,true) else if OpIs('f.dump.text.bold') then fDumpManyTexts(True) else if OpIs('f.write.more.v') then fWriteMoreV(True,fx) else if OpIs('f.write.more.v.nolf') then fWriteMoreV(False,fx) else if OpIs('f.writeln.more.v') then fWriteMoreV(True,fx) else if OpIs('f.create.write.close') then fCreateWriteClose(fx) else if OpIs('f.equ') then fEqu else if OpIs('f.nv') then fNV else if OpIs('f.write.pattern') then fWritePattern(False) else if OpIs('f.write.pattern.xlate') then fWritePattern(True) else BadCommand; 'i': if OpIs('findfirst') then fFindFirst else if OpIs('files.list') then fFilesList('|') else if OpIs('files.list.crlf') then fFilesList('\n') else if OpIs('filter.set') then fFilterSet else if OpIs('filter.get') then fFilterGet else if OpIs('filters') then UsingConstFilters := Arg='const' else if OpIs('file2item') then fFile2Item else if OpIs('file2heap') then fFile2Heap else if OpIs('file') then fFileOp else BadCommand; 's': if OpIs('fsplit') then fFsplit(ResolvedArg) else BadCommand; else BadCommand; end; 'g': case Op[2] of 'l': if OpIs('global.clear') then GlobalResultList.Clear else if OpIs('global.set') then fGlobalSet else if OpIs('global.get') then fGlobalGet else if OpIs('global.get.i') then fGlobalGetI else BadCommand; 'n': if OpIs('gn') then fGeneratorNext else BadCommand; 'u': if OpIs('guru') then Guru(ResolvedArg) else if OpIs('guru.on') then GuruOn:=True else if OpIs('guru.off') then GuruOn:=False else BadCommand; 'e': if OpIs('getsql') then fgetSql(False) else if OpIs('getsql?') then fgetSql(True) else if OpIs('getsql.or.break') then begin Arg:='break' ; fgetSql(True); end else if OpIs('get.this.date') then GetThisDate else if OpIs('get.from.list') then fGetFromList else if OpIs('get.from.equivalence') then fGetFromList else if OpIs('gettime') then Context.Values[ResolvedArg]:=TimeNow else if OpIs('getatom') then fGetAtom else if OpIs('getatom.loop') then fGetAtomLoop else if OpIs('getatom.loop.setv') then fGetAtomLoopSetv else if OpIs('getlength') then fGetLength else if OpIs('genid') then fGenId else if OpIs('getparameter') then fGetParameter else if OpIs('get.parameter') then fGetParameter else if OpIs('generator.next') then fGeneratorNext else if OpIs('get.outer') then fGetOuter else if OpIs('get.text') then fGetText else if OpIs('get.by.tags') then fGetByTags else BadCommand; 'o': if OpIs('goto') then JumpTo(Arg+':',True) else if OpIs('goto@') then JumpToOrContinue(CtxGet(Arg)+':',True) else if OpIs('goal') then WizardGoal:=Arg else if OpIs('goto.back') then JumpToBack(Arg+':',True) else if OpIs('goto.forward') then JumpToForward(Arg+':',True) else if OpLike('goto.if') then fGoto(Copy(Op,Length('goto.if')+1,Maxint)) else if OpLike('goto.if.') then fGoto(Copy(Op,Length('goto.if')+1,Maxint)) else BadCommand; '.': if OpIs('g.read?') then fReadOrJump(gx) else if OpIs('g.read.x.fields') then fReadXFields(gx) else if OpIs('g.open?') then fOpenOrJump(gx) else if OpIs('g.open') then fOpen(gx,False) else if OpIs('g.open.or.quit') then fOpen(gx,True) else if OpIs('g.close') then CloseFile(gx) else if OpIs('g.skip') then fSkip(gx) else if OpIs('g.skip.lines') then fSkipLines(gx) else if OpIs('g.read') then fRead(gx) else if OpIs('g.read.equ') then gReadEqu(gx) else if OpIs('g.read2eof') then fRead2Eof(gx) else if OpIs('g.open.read2eof.close') then fOpenRead2EofClose(gx) else if OpIs('g.open.readln.close') then fOpenReadlnClose(gx) else BadCommand; 'r': if OpIs('group') then fGroupFile else if OpIs('grid.start') then fGridStart else if OpIs('grid.setup') then fGridSetup else if OpIs('grid.kill') then fGridKill else if OpIs('grid.autosize') then fGridAutoSize else if OpIs('grid.stop') then fGridStop else if OpIs('grid.edit') then fGridEdit else if OpIs('grid.set') then fGridSet else if OpIs('grid.set.cr') then fGridSet else if OpIs('grid.get') then fGridGet // else if OpIs('grid.get.cr') then fGridGet else if OpIs('grid.def.set') then fGridDefSet else if OpIs('grid.def.set.area') then fGridDefSetArea else if OpIs('grid.def.set.cr') then fGridDefSet else if OpIs('grid.def.get') then fGridDefGet else if OpIs('grid.def.getall') then fGridDefGetAll else if OpIs('grid.def.get.cr') then fGridDefGet else if OpIs('grid.cr.counts.get') then fGridCrCountsGet else if OpIs('grid.cr.counts.set') then fGridCrCountsSet else if OpIs('grid.cr.fixcounts.set') then fGridCrFixCountsSet else if OpIs('grid.rowcount.set') then fGridRowCountSet else if OpIs('grid.rowcount.get') then CtxPut(Arg,IntToStr(FxGrid.RowCount)) else if OpIs('grid.fixrowcount.set') then fGridFixRowCountSet else if OpIs('grid.fixrowcount.get') then CtxPut(Arg,IntToStr(FxGrid.FixedRowCount)) else if OpIs('grid.caption.set') then FXGrid.Caption:=ResolvedArg else if OpIs('grid.caption.get') then CtxPut(ResolvedArg,FXGrid.Caption) else if OpIs('grid.colcount.set') then fGridColCountSet else if OpIs('grid.colcount.get') then CtxPut(Arg,IntToStr(FxGrid.ColCount)) else if OpIs('grid.fixcolcount.set') then fGridFixColCountSet else if OpIs('grid.fixcolcount.get') then CtxPut(Arg,IntToStr(FxGrid.FixedColCount)) else if OpIs('grid.goto.cr') then fGridGotoCr else if OpIs('grid.focus') then fGridFocus else if OpIs('grid.openedit') then fGridOpenEdit else if OpIs('grid.get.cr') then fGridGetCr else if OpIs('grid.category.set') then fGridCategorySet else if OpIs('grid.legend.set') then fGridLegendSet else if OpIs('grid.cr2hl') then fGridCr2Hl else if OpIs('grid.hl2cr') then fGridHl2Cr else if OpIs('grid.header.set') then fGridHeaderSet else if OpIs('grid.message') then fGridMessage else if OpIs('grid.maximized') then fGridMaximized else if OpIs('grid.getall') then fGridGetAll else if OpIs('grid.fields.set') then fGridFieldsSet else if OpIs('grid.fields.get') then fGridFieldsGet else if OpIs('grid.colwidth') then fGridColWidth else if OpIs('grid.rowheight') then fGridRowHeight else if OpIs('grid.swaprows') then fGridSwapRows else if OpIs('grid.swapcols') then fGridSwapCols else if OpIs('grid.moverow') then fGridMoveRow else if OpIs('grid.movecol') then fGridMoveCol else if OpIs('grid.insertrow') then fGridInsertRow else if OpIs('grid.insertcol') then fGridInsertCol else if OpIs('grid.deleterow') then fGridDeleteRow else if OpIs('grid.deletecol') then fGridDeleteCol else if OpIs('grid.sort.ext') then fGridSortExt else if OpIs('grid.popup.clear') then fGridPopUpClear else if OpIs('grid.popup.add') then fGridPopUpAdd else if OpIs('grid.select.row') then fGridSelectRow(false) else if OpIs('grid.select.rows') then fGridSelectRow(true) else BadCommand; else BadCommand; end; 'h': if OpIs('hide') then fHide else if OpIs('hhmm.int') then fhhmm2int else if OpIs('hhmmss.hhmmsscz') then fhhmmss2hhmmsscz else if OpIs('hhmm.hhmmcz') then fhhmm2hhmmcz else if OpIs('hash.in') then fHashIn else if OpIs('hash.in.check') then fHashCheck else if OpIs('hash') then fHash {doc} else if OpIs('h.close') then begin CloseFile(hx); fxopen:=False; end else if OpIs('h.read2eof') then fRead2Eof(hx) else if OpIs('history') then fHistory else if OpIs('have.or.return') then fHaveOrReturn else if OpIs('http') then fHttp else BadCommand; 'i': case Op[2] of 'f': if OpIs('if') then begin fIfCommand; if SReg<>'' then begin Dec(PC); Result:=False; end; end else BadCommand; 'n': if OpIs('inc') then fInc else if OpIs('int.hhmm') then fint2hhmm else if OpIs('int.hhmmss') then fint2hhmmss else if OpIs('insert.or.update') then fInsertOrUpdate else if OpIs('insert.or.update.break') then begin fInsertOrUpdate; if PreviousResult=1 then begin Arg:=''; fBreakCommand; end end else if OpIs('insert.or.update.db') then fInsertOrUpdateDb else if OpIs('insert') or OpIs('in') then fInsert else if OpIs('insert.nonvoid') then fInsertNonVoid else if OpIs('insert.nonvoid.db') then fInsertNonVoidDb else if OpIs('indent') then IndentFile else if OpIs('inherit') then Context.Assign(ContextValues) else if OpIs('insert.string') then fInsertString else if OpIs('input.open') then fOpen(inputx,False) else if OpIs('input.close') then CloseFile(inputx) else if OpIs('input.read') then fRead(inputx) else if OpIs('input.read.equ') then fReadEqu(inputx) else if OpIs('input.read2eof') then fRead2Eof(inputx) else if OpIs('inp.buffer.clear') then fInpBufferClear else if OpIs('inp.buffer.append') then fInpBufferAppend else if OpIs('inp.buffer.getline') then fInpBufferGetLine else if OpIs('inp.buffer.set') then fInpBufferSet else if OpIs('inp.buffer.get') then fInpBufferGet else if OpIs('inp.buffer.import') then fInpBufferImport(False) else if OpIs('inp.buffer.import.noapos') then fInpBufferImport(true) else BadCommand; 'v': if OpIs('ivo.wizard') then fIvoWizard else BadCommand; 't': if OpIs('item') then fItem(',') else if OpIs('iterator.clear') then Iterators[AdjustInteger(IntOf(ResolvedArg),0,9)]:='' else if OpIs('iterator.add.line') then fIteratorAddLine else if OpIs('item.pipe') then fItem('|') else if OpIs('item.count') then fItemCount else if OpIs('item2file') then fItem2File else if OpIs('iterate.call.over.file') then fCallArgsOverFile iterate.call.over.query P|*,F,N,Q Příklad: iterate.call.over.query mailbox|quota|presmerovano|prazdniny,c:/tmp/sestava-vsechno.tmp,vypocty/vsechno-step.prg,select mailbox,quota,presmerovano,prazdniny from mailboxy order by mailbox ')then fCallArgsOverQuery else BadCommand; 's': if OpIs('isolate') then fIsolate else BadCommand; else BadCommand; end; 'j': if OpIs('jump') then JumpTo(Arg+':',True) else if OpIs('jump.iffalse') then JumpTo(Arg+':',(PreviousResult=0)) else if OpIs('jump.iftrue') then JumpTo(Arg+':',(PreviousResult=1)) else if OpIs('jump.ifvoid') then fJumpIfVoid else if OpIs('jump.ifeq') then JumpIfEq else if OpIs('jump.ifeq.v') then JumpIfEqV else if OpIs('jump.ifprefix') then JumpIfPrefix else if OpIs('jump.ifnoprefix') then JumpIfNoPrefix else if OpIs('jump.ifinfix') then JumpIfInfix else if OpIs('jump.ifnoinfix') then JumpIfNoInfix else if OpIs('jump.ifne') then JumpIfNe else if OpIs('jump.ifgt') then JumpIfGt else if OpIs('jump.iflt') then JumpIfLt else if OpIs('jump.ifgt.num') then JumpIfGtNum else if OpIs('jump.iflt.num') then JumpIfLtNum else if OpIs('jump.ifgt.float') then JumpIfGtNumFloat else if OpIs('jump.iflt.float') then JumpIfLtNumFloat else if OpIs('jump.top.ifvoid') then fJumpTopIfVoid else if OpIs('jump.top.ifvoid.pop') then fJumpTopIfVoidPop else if OpIs('java') then fJava else if OpIs('java2') then fJava2 else if OpIs('java3') then fJava3 else if OpIs('jdatobot') then fJava3 else if OpIs('jumpinglevel') then JumpingLevel:=IntOf(Arg) else if OpIs('journal') then fJournal else if OpIs('journal.db') then fJournalDb else if OpIs('journal.name') then fJournalName else if OpIs('journal.aname') then fJournalArchiveName else if OpIs('jsr') then fCallSubrWithArgs else if OpIs('jsr.rt') then fCallSubrWithArgsAndRT else BadCommand; 'k': if OpIs('key.name') then KeyName:=ResolvedArg else if OpIs('key.value') then KeyValue:=ResolvedArg else if OpIs('kkk') or OpIs('kk') then fKKK else if OpIs('kdv.load') then fKdvLoad else BadCommand; 'l': if OpIs('loop') then fLoop else if OpIs('let') then SetContextValue(False,False,False,False) else if OpIs('load.sql') or OpIs('lq') then fLoadSql else if OpIs('lqc') then fLoadSqlClear else if OpIs('lk') or OpIs('load.using.key') then fLoadSqlK(false) else if OpIs('lki') then fLoadSqlK(true) else if OpIs('load.sql.hidden') then fLoadSqlHidden else if OpIs('log.clear') then LogText:='' else if OpIs('log.text') then LogText:=LogText+Arg+' ' else if OpIs('log.value') then LogText:=LogText+Context.Values[Arg]+' ' else if OpIs('log.write') then RememberEvent(LogText) else if OpIs('list.clear') then List.Clear else if OpIs('list.add') then fListAdd(List) else if OpIs('list.count') then fListCount(List) else if OpIs('list.value') then fListValue(List) else if OpIs('list.value.idx') then fListValueIdx(List) else if OpIs('list.load') then fListLoad(List) else if OpIs('list.load.select') then fListLoadSelect else if OpIs('list.nv') then fListGetNV(List) // novinka else if OpIs('list.sort') then List.Sort // novinka else if OpIs('list.make.of') then fListMakeOf // novinka else if OpIs('list.of.files') then fListOfFiles else if OpIs('list2.clear') then List2.Clear else if OpIs('list2.add') then fListAdd(List2) else if OpIs('list2.count') then fListCount(List2) else if OpIs('list2.value') then fListValue(List2) else if OpIs('list2.value.idx') then fListValueIdx(List2) else if OpIs('list2.load') then fListLoad(List2) else if OpIs('list3.clear') then List3.Clear else if OpIs('list3.add') then fListAdd(List3) else if OpIs('list3.count') then fListCount(List3) else if OpIs('list3.value') then fListValue(List3) else if OpIs('list3.value.idx') then fListValueIdx(List3) else if OpIs('list3.load') then fListLoad(List3) else if OpIs('list.diffs') then fListDifferences else if OpIs('list.next.diff') then fNextDiff else if OpIs('list.construct') then fListConstruct(0) else if OpIs('list.construct.from.view') then fListConstructFromView(0) else if OpIs('load.equations') then LoadEquations else if OpIs('load.context') then LoadContext else if OpIs('ln') then fLn else if OpIs('load.under') then fLoadUnder(False) else if OpIs('load.profile') then CurrentProfile:=Arg else if OpIs('load.under.prg') then fLoadUnder(True) else if OpIs('load.controls') then fLoadControls else if OpIs('lock') then fLock else if OpIs('launch') then fLaunch(false,false) else if OpIs('launch.view') then fLaunchView else if OpIs('launch.named') then fLaunch(true,false) else if OpIs('launch.named.exit') then fLaunch(true,true) else if OpIs('launch.closeall') then MainFrm.CloseAll else if OpIs('launch.vxl') then fLaunchVxl else if OpIs('login.get') then Context.Values[ResolvedArg]:=LoginContext.Values[ResolvedArg] else if OpIs('log.values') then fLogValues else if OpIs('license') then fLicense else if OpIs('licence') then fLicense else if OpIs('loglowlevel') then Utilities.LogLevel:=IntOf(Arg) else if OpIs('library.dump') then fLibraryDump else if OpIs('list.op') then fListOp else if OpIs('lcondition') then lCondition else if OpIs('lowercase') or OpIs('locase') or OpIs('lower') then fLowerCase else if OpIs('learn') then fLearn else if OpIs('lek.name') then fLekName else if OpIs('lacmus') then fLacmus else BadCommand; 'm': if OpIs('mod') then fMod else if OpIs('mul') then fMul else if OpIs('mulf') then fMulf else if OpIs('mkdir') then CreateDir(ResolvedArg) else if OpIs('mkdir.recursive') then fMkDirRecursive else if OpIs('menu.read') then ReadMenu(MenuDir+Arg) else if OpIs('menu.call') then PreviousResult:=CallMenu else if OpIs('menu.action') then DoMenuAction else if OpIs('menu.reset') then DoMenuReset else if OpIs('menu.items') then DoMenuItems else if OpIs('menu.seteq') then DoMenuSetEq else if OpIs('matrix.clear') then MatrixClear else if OpIs('matrix.accept') then MatrixAccept else if OpIs('matrix.dump') then MatrixDump else if OpIs('matrix.interval') then MatrixInterval else if OpIs('menu.items.seq') then DoSequencedMenuItems else if OpIs('menu.construct') then fListConstruct(1) else if OpIs('menu.multiselect') then fMultiSelect else if OpIs('menu.multiselect.etc') then fMultiSelectEtc else if OpIs('menu.multiselect.noetc')then fMultiSelectNoEtc else if OpIs('menu.getnext') then fMenuGetNext else if OpIs('menu.global') then AnalyzedList:=GlobalAnalyzedList else if OpIs('map') then FMap(False) else if OpIs('map.wild') then FMap(True) else if OpIs('map.reverse') then FMapReverse else if OpIs('mapv') then FMapV else if OpIs('make.floats') then FMakeFloats(True) else if OpIs('make.floats.setv') then FSetvAndMakeFloats(True,False) else if OpIs('make.floats.setv.00') then FSetvAndMakeFloats(True,True) else if OpIs('make.integers') then FMakeIntegers(True) else if OpIs('make.floats.off') then FMakeFloats(False) else if OpIs('make.floats.setv.off') then FSetvAndMakeFloats(False,False) else if OpIs('make.floats.setv.00.off') then FSetvAndMakeFloats(False,True) else if OpIs('make.integers.off') then FMakeIntegers(False) else if OpIs('mapper') then fMapper else if OpIs('mem.clear') then MemContext.Clear else if OpIs('mem.remember') then fMemRemember else if OpIs('mem.recall') then fMemRecall else if OpIs('memorize') then fMemorize else if OpIs('memorize.list') then fMemorizeList else if OpIs('mix.memos') then fMixMemos else BadCommand; 'n': if OpIs('new_hospid') then Context.Values['HospId']:=GetNewHospId else if OpIs('nice.number') then fNiceNumber else if OpIs('number.14.4') then f14_4 else if OpIs('number.format') then fNumberFormat else if OpIs('number.4.2') then f4_2(false,false) else if OpIs('number.4.2.c') then f4_2(true,false) else if OpIs('number.4.2.0.c') then f4_2(true,true) else if OpIs('nested.wizard') then fNestedWizard else if OpIs('nop') then begin end else if OpIs('nodebug') then DebuggingAllowed:=Arg='1' else if OpIs('name') then FName names T - nastaví proměnné _ListPipe a _ListComma jako seznam jmen sloupcu tabulky T else if OpIs('newop') then FNewOp else if OpIs('numbers') then FNumbers else if OpIs('null.more') then NullMore else if OpIs('number.pages') then fNumberPages else BadCommand; 'o': if OpIs('opendoc') then begin utOpenDoc(ResolvedArg,'open'); if OpenDocError then PreviousResult:=0 else PreviousResult:=1; end else if OpIs('opendoc?') then begin utOpenDoc(ResolvedArg,'open',true); if OpenDocError then PreviousResult:=0 else PreviousResult:=1; end else if OpIs('opendoc/') then utOpenDoc(UnifySlashes(ResolvedArg),'open') else if OpIs('opendoc/?') then utOpenDoc(UnifySlashes(ResolvedArg),'open',true) else if OpIs('order.by') then fOrderBy else if OpIs('open.fg') then fOpenFg else if OpIs('output.write') then Writeln(outputx,fIndention,utDecodeString(Sysresolve(Arg,False))) else if OpIs('output.create') then fCreate(outputx,false) else if OpIs('output.create.or.quit') then fCreate(outputx,True) else if OpIs('output.create.close') then fCreateClose(outputx) else if OpIs('output.append') then AppendOrCreateTextFile(outputx,Sysresolve(Arg,false)) else if OpIs('output.close') then CloseFile(outputx) else if OpIs('output.create.write.close') then fCreateWriteClose(outputx) else if OpIs('output.fv') then fWriteMoreV(True,outputx) else if OpIs('ones') then fOnes else if OpIs('out.buffer.clear') then fOutBufferClear else if OpIs('out.buffer.append') then fOutBufferAppend else if OpIs('out.buffer.getline') then fOutBufferGetLine else if OpIs('out.buffer.set') then fOutBufferSet else if OpIs('out.buffer.get') then fOutBufferGet else if OpIs('out.buffer.import') then fInpBufferImport(False) else if OpIs('out.buffer.import.noapos') then fOutBufferImport(true) else BadCommand; 'p': case Op[2] of 'u': if OpIs('push') or OpIs('pu') then Push(Arg,False) else if OpIs('push.clear') then Push(Arg,True) else if OpIs('push.src') then XPush(Arg,DropSrc) else if OpIs('push.dst') then XPush(Arg,DropDst) else if OpIs('push.string') then PushString(Arg) else if OpIs('push.diff') then PushDiff else if OpIs('purify') then fPurify else BadCommand; 'o': if OpIs('pop') or OpIs('po') then Pop(Arg) else if OpIs('pos') then fPos else if OpIs('power') then fPower else if OpIs('popupmenu') then fPopUpMenu else BadCommand; 'r': if OpIs('progress.show') then ShowProgress else if OpIs('progress.tell') then Tell(ResolvedArg) else if OpIs('progress.create') then Progress2Create(ResolvedArg) else if OpIs('progress.begin') then Progress2Begin(ResolvedArg) else if OpIs('progress.start') then fProgressStart else if OpIs('progress.end') then Progress2End(True) else if OpIs('progress.restart') then begin Progress2End(True); fProgressStart end else if OpIs('progress.destroy') then fProgressDestroy else if OpIs('progress.stop') then fProgressStop(False) else if OpIs('progress.stop.exit') then fProgressStop(True) else if OpIs('progress.clear') then ClearProgress else if OpIs('printdoc') then begin if WaitWhilePrinting or (CtxGet('DoWait')='1') then utPrintDocAndWait(ResolvedArg,'print') else utPrintDoc(ResolvedArg,'print'); end else if OpIs('printdoc/') then begin if WaitWhilePrinting or (CtxGet('DoWait')='1') then utPrintDocAndWait(UnifySlashes(ResolvedArg),'print') else utPrintDoc(UnifySlashes(ResolvedArg),'print') end else if OpIs('print') then fPrint else if OpIs('print.to') then fPrintToPrinter else if OpIs('printer.exists') then fPrinterExists else if OpIs('printer.exists.like') then fPrinterExistsLike else if OpIs('printers') then fPrinters else if OpIs('prefix') then fPrefix else if OpIs('prefix.on') then fPrefixOn else if OpIs('prefix.off') then fPrefixOff else if OpIs('print.png') then fPrintPng else if OpIs('prices.clear') then PriceList.Clear else if OpIs('prices.read') then fPricesRead else if OpIs('prices.remember') then fPricesPut else if OpIs('prices.get') then fPricesGet else if OpIs('prices.count') then fPricesCount else BadCommand; 'a': if OpIs('pad') then fPad else if OpIs('parse') then fParse else if OpIs('pages') then fPages else if OpIs('pack.on') then fPackOn else if OpIs('pack.off') then fPackOff else if OpIs('pack.equ') then fPackMany else if OpIs('pass.csv') then fPassCsv else BadCommand; 'i': if OpIs('pipe.format') then DbAccess.UsingPipeFormat:=Arg='1' else if OpIs('pip') then fPip else if OpIs('pip.strcat') then fWhatStrcat('|') else if OpIs('pip.tofile') then fXToFile('|') else BadCommand; 'e': if OpIs('percent') then fPercent(False,False) else if OpIs('percent.comma') then fPercent(True,False) else if OpIs('percent.round') then fPercent(False,True) else BadCommand; 'd': if OpIs('pdf.print.to') then fPdfPrintTo else BadCommand; else BadCommand; end; 'q': if OpIs('quietly.sql.script') then QuietlyRawSqlCommand(ResolvedArg) else if OpIs('quartal') then fLibQuartal else if OpIs('quartal.of') then fQuartalOf else if OpIs('quit') then fExitShowMessage(2) else if OpIs('quit.norefresh') then fExitShowMessage(0) else if OpIs('quit.stop') then begin fProgressStop(False); fExitShowMessage(0) end else BadCommand; 'r': case Op[2] of 'a': if OpIs('randomize') then Randomize else if OpIs('randomize+random') then fRandomizeRandom else if OpIs('random') then RandomString:=IntToStr(Random(4096)) else if OpIs('random.get') then fRandomGet else if OpIs('random.string') then fRandomString else if OpIs('ramtext.clear') then fClearRamText else if OpIs('ramtext.paste') then fRamPaste(SysResolve(Arg,False)) else if OpIs('ramtext.save') then fSaveRamText(SysResolve(Arg,False)) else if OpIs('ramtext.column') then fRamTextColumn else if OpIs('ramtext.put.over') then fRamTextPutOver else if OpIs('ramtext.get') then fRamTextGet else BadCommand; 'e': if OpIs('return') then DoExit else if OpIs('return.clear') then DoExitClear else if OpIs('return.if') then fExitIf else if OpIs('return.ifnot') then fExitIfNot else if OpIs('return.unless') then fExitIfNot else if OpLike('return.if') then DoExitCnd(Copy(Op,Length('return.if')+1,Maxint)) else if OpLike('return.if.') then DoExitCnd(Copy(Op,Length('return.if.')+1,Maxint)) else if OpIs('return.p') then fReturnSubr else if OpIs('return.p.if') then fReturnSubrIf else if OpIs('return.p.ifnot') then fReturnSubrIfNot else if OpIs('return.p.unless') then fReturnSubrIfNot else if OpIs('return.p.call') then fCallArgs(True,false,false) else if OpIs('return.p.show.message') then WizardShowMessage(False,True) else if OpIs('repeat') then begin end else if OpIs('restore') then fRestore else if OpIs('return.values') then fReturnValues else if OpIs('return.warning.ifvoid') then fReturnWarningIfVoid else if OpIs('return.warning') then fReturnWarning else if OpIs('return.sub') then PC:=ReturnPoint else if OpIs('return.subr') then fReturnSubr else if OpIs('resolve') then Stack[SP]:=SysResolve(Stack[SP],False) else if OpIs('resolve!') then Stack[SP]:=utSubstString(Stack[SP],Context) else if OpIs('resolve!!') then fResolve else if OpIs('remove.undesired') then fRemoveUndesired else if OpIs('remove.undesired.tail') then fRemoveUndesiredTail else if OpIs('remove.marked') then fRemove else if OpIs('remember') then fRemember else if OpIs('rename') then fRename else if OpIs('rename.to.old') then fRenameToOld else if OpIs('report.header.1') then ReportHeader1:=Arg else if OpIs('report.footer.1') then ReportFooter1:=Arg else if OpIs('report.header.2') then ReportHeader2:=Arg else if OpIs('report.footer.2') then ReportFooter2:=Arg else if OpIs('report.header.3') then ReportHeader3:=Arg else if OpIs('report.footer.3') then ReportFooter3:=Arg else if OpIs('report.newline') then ReportNewLine:=Arg else if OpIs('report.page.length') then ReportPageLength:=StrToInt(Arg) else if OpIs('report.format') then fReportFormat else if OpIs('report.diffs') then fReportDiffs else if OpIs('read.equ') then fReadEqu(gx) // novinka else if OpIs('read.from.file') then fReadFromFile(False) else if OpIs('read.from.file.trim') then fReadFromFile(True) else if OpIs('read.from.params') then fReadFromParFile(False) else if OpIs('read.from.params.trim') then fReadFromParFile(True) else BadCommand; 'f': if OpIs('rf.create') then fRfCreate else if OpIs('rf.write') then fRfWrite else if OpIs('rf.erase') then fRfErase else if OpIs('rf.writeln') then fRfWriteln else if OpIs('rf.readln') then fRfReadln else if OpIs('rf.reset') then fRfReset else if OpIs('rf.open') then fRfOpen else if OpIs('rf.view.inner') then fRfViewInner else if OpIs('rf.view.inner.i') then fRfViewInnerI else if OpIs('rf.vi') then fRfViewInnerI else if OpIs('rf.subst') then fRfSubst else if OpIs('rf.fv') then fRfFv(True) else if OpIs('rf.fv.nolf') then fRfFv(False) else if OpIs('rf.get') then fRfGet else if OpIs('rf.close') then begin end else if OpIs('rf1.close') then begin end else if OpIs('rf2.close') then begin end else if OpIs('rf1.create') then begin Arg:='1,1'; fRfCreate end else if OpIs('rf1.write') then begin Arg:='1,'+Arg; fRfWrite end else if OpIs('rf1.erase') then begin Arg:='1'; fRfErase end else if OpIs('rf1.writeln') then begin Arg:='1,'+Arg; fRfWriteln end else if OpIs('rf1.readln') then begin Arg:='1,'+Arg; fRfReadln end else if OpIs('rf1.reset') then begin Arg:='1,'+Arg; fRfReset end else if OpIs('rf1.open') then begin Arg:='1,'+Arg; fRfOpen end else if OpIs('rf1.view.inner') then begin Arg:='1'; fRfViewInner end else if OpIs('rf1.view.inner.i') then begin Arg:='1'; fRfViewInnerI end else if OpIs('rf1.vi') then begin Arg:='1'; fRfViewInnerI end else if OpIs('rf1.subst') then begin Arg:='1,'+Arg; fRfSubst end else if OpIs('rf1.fv') then begin Arg:='1,'+Arg; fRfFv(True) end else if OpIs('rf1.fv.nolf') then begin Arg:='1,'+Arg; fRfFv(False) end else if OpIs('rf1.get') then begin Arg:='1,'+Arg; fRfGet end else if OpIs('rf2.create') then begin Arg:='2,2'; fRfCreate end else if OpIs('rf2.write') then begin Arg:='2,'+Arg; fRfWrite end else if OpIs('rf2.erase') then begin Arg:='2'; fRfErase end else if OpIs('rf2.writeln') then begin Arg:='2,'+Arg; fRfWriteln end else if OpIs('rf2.readln') then begin Arg:='2,'+Arg; fRfReadln end else if OpIs('rf2.reset') then begin Arg:='2,'+Arg; fRfReset end else if OpIs('rf2.open') then begin Arg:='2,'+Arg; fRfOpen end else if OpIs('rf2.view.inner') then begin Arg:='2'; fRfViewInner end else if OpIs('rf2.view.inner.i') then begin Arg:='2'; fRfViewInnerI end else if OpIs('rf2.vi') then begin Arg:='2'; fRfViewInnerI end else if OpIs('rf2.subst') then begin Arg:='2,'+Arg; fRfSubst end else if OpIs('rf2.fv') then begin Arg:='2,'+Arg; fRfFv(True) end else if OpIs('rf2.fv.nolf') then begin Arg:='2,'+Arg; fRfFv(False) end else if OpIs('rf2.get') then begin Arg:='2,'+Arg; fRfGet end else BadCommand; '0': if OpIs('r0.set') then R0:=ResolvedArg else if OpIs('r0.set.raw') then R0:=Arg else if OpIs('r0.store') then Context.Values[Arg]:=R0 else if OpIs('r0.resolve') then R0:=SysResolve(R0,False) else if OpIs('r0.resolve!') then R0:=utSubstString(R0,Context) else if OpIs('r0.resolve!!') then R0:=utSubstStringRaw(ResolveGlobals(R0),Context) else if OpIs('r0.set.raw') then R0:=Arg else BadCommand; '1': if OpIs('r1.set') then R1:=ResolvedArg else if OpIs('r1.set.raw') then R1:=Arg else BadCommand; 'o': if OpIs('round') then fRound else BadCommand; 'c': if OpIs('rc') then fRC else BadCommand; 't': if OpIs('rt') then fReturnSubr else if OpIs('rt.if') then fReturnSubrIf else if OpIs('rt.ifnot') then fReturnSubrIfNot else if OpIs('rt.unless') then fReturnSubrIfNot else if OpIs('rt.call') then fCallArgs(True,false,false) else if OpIs('rt.show.message') then WizardShowMessage(False,True) else if OpLike('rt.if') then fReturnSubrCnd(Copy(Op,Length('rt.if')+1,Maxint)) else if OpLike('rt.if.') then fReturnSubrCnd(Copy(Op,Length('rt.if.')+1,Maxint)) else BadCommand; 's': if OpIs('rsr') then fReturnSubr else if OpIs('rsr.if') then fReturnSubrIf else if OpIs('rsr.ifnot') then fReturnSubrIfNot else if OpIs('rsr.unless') then fReturnSubrIfNot else if OpIs('rsr.call') then fCallArgs(True,false,false) else if OpIs('rsr.show.message') then WizardShowMessage(False,True) else BadCommand else BadCommand; end; 's': case Op[2] of 'e': if OpIs('set') or OpIs('se') then SetMore(false) else if OpIs('setv') then SetMoreV(false,false) else if OpIs('setv.upper') then SetMoreV(false,true) {doc} else if OpIs('set.trim') then SetMore(True) else if OpIs('set@') then SetClever(False) else if OpIs('set@.trim') then SetClever(True) {doc} else if OpIs('set.slashes') then SetMoreSlashes else if OpIs('setup') then fSetup else if OpIs('setv.trim') then SetMoreV(true,false) else if OpIs('set.more') then SetMore(false) else if OpIs('setv.multi') then SetvMoreMulti else if OpIs('set.more.trim') then SetMore(true) else if OpIs('set.push') then fSetAndPush else if OpIs('select') then fSelect else if OpLike('set.if') then fSetMoreCnd(false,Copy(Op,Length('set.if')+1,Maxint)) else if OpLike('set.if.') then fSetMoreCnd(false,Copy(Op,Length('set.if.')+1,Maxint)) else if OpLike('set.trim.if') then fSetMoreCnd(true,Copy(Op,Length('set.trim.if')+1,Maxint)) else if OpLike('setv.if') then fSetMoreVCnd(false,Copy(Op,Length('setv.if')+1,Maxint)) else if OpLike('set.trim.if.') then fSetMoreCnd(true,Copy(Op,Length('set.trim.if.')+1,Maxint)) else if OpLike('setv.if.') then fSetMoreVCnd(false,Copy(Op,Length('setv.if.')+1,Maxint)) else if OpIs('set.outer') then fSetOuter else if OpIs('set.eq') then SetContextValue(False,False,False,False) else if OpIs('set.eq.nonvoid') then SetContextValue(False,False,False,True) else if OpIs('set.success') then PreviousResult:=1 else if OpIs('set.error') then PreviousResult:=0 else if OpIs('sed.subst') then fSedSubst else BadCommand; 'a': if OpIs('save') then fSave else if OpIs('save.set') then fSaveSet else if OpIs('save.vxl') then fSaveVxl else BadCommand; 'c': if OpIs('scope.list') then fScopeList else if OpIs('schedule.clear') then iClear else if OpIs('schedule.check') then fisFill else if OpIs('scope.int') then fScopeInt else BadCommand; 'u': if OpIs('succ') then fSucc else if OpIs('sub') then fSub else if OpIs('subf') then fSubf else if OpIs('sum') then fSum else if OpIs('sumf') then fSumf else if OpIs('substitution') then fSubstitution else if OpIs('suffix') then fSuffix else if OpIs('suffix.on') then fSuffixOn else if OpIs('suffix.off') then fSuffixOff else if OpIs('supress') then fSupress else if OpIs('subst') then SubstFile(ResolvedArg,false) else if OpIs('subst.xml') then SubstFileXml(ResolvedArg,false) else if OpIs('subst.xml.cdata') then SubstFileXmlCData(ResolvedArg,false) else if OpIs('subst.view') then SubstFile(ResolvedArg,true) else if OpIs('subst.append') then SubstFileAppending(ResolvedArg,True) else if OpIs('subst.append.novoid') then SubstFileAppending(ResolvedArg,False) else if OpIs('substitutions') then fSubstitutions else BadCommand; 'l': if OpIs('slashes') then fSlashes(False) else if OpIs('sl') then fSL else if OpIs('sleep') then Sleep(IntOf(Arg)) else BadCommand; 'h': if OpIs('shl') then fShiftLeft else if OpIs('shift.pattern') then fShiftPattern else if OpIs('shift.many.down') then fShiftManyDown else if OpIs('shift.many.up') then fShiftManyUp else if OpIs('shift.in.list') then fShiftInList else if OpIs('show.warning') then WizardShowWarning(False,False) else if OpIs('show.message') then WizardShowMessage(False,False) else if OpIs('show.message.goto') then ShowMessageAndGoto else if OpIs('show.message.exit') then ShowMessageAndExit else if OpIs('show.warning.nice') then WizardShowWarning(True,False) else if OpIs('show.message.nice') then WizardShowMessage(True,False) else if OpIs('shellapi') then fShellApi else if OpIs('shift.day') then fShiftDate(False) else if OpIs('shift.day.15') then fShiftDate(True) else if OpIs('shell') then ShellCommand(unifyslashes(Arg)) else if OpIs('shell.visible') then ShellCommand(unifyslashes(Arg),True,False,True) else BadCommand; 'q': if OpIs('sql.script') or OpIs('sql') then fSqlScript else if OpIs('sqrt') then fSqrtf else if OpIs('sql.text') then SqlText:=Arg else if OpIs('sql.to.context') then fSqlToContext else if OpIs('sql.load.cmd') then SqlLoadCmd else if OpIs('sql.load') then SqlLoad else if OpIs('sql.cmd.file') then RawSqlCommandFile(ResolvedArg) else if OpIs('sql.exec.file') then SqlExecFile(ResolvedArg) else if OpIs('squeeze.serie') then fSqueezeSerie else BadCommand; 'r': if OpIs('src.to.context') then XToContext(DropSrc) else BadCommand; 'y': if OpIs('system.set') then SystemContext.Values[Arg]:=Context.Values[Arg] else if OpIs('sysresolve') then Stack[SP]:=SysResolve(Stack[SP],false) else if OpIs('system.define') then DefineVariable else if OpIs('system.undefine') then SystemContext.Values[ResolvedArg]:='' else if OpIs('system') then utCommand(Sysresolve(Arg,false)) else if OpIs('sysutils.set') then fSysUtilsSet else if OpIs('syntax') then fSyntax else if OpIs('syslog') then fCentralSysLog else BadCommand; 't': if OpIs('startsql') then QuietlyStartSql(ResolvedArg) else if OpIs('stopsql') then fStopSql else if OpIs('stopsql.startsql') then begin fStopSql; QuietlyStartSql(ResolvedArg); end else if OpIs('start.sql') then QuietlyStartSql(ResolvedArg) else if OpIs('stop.sql') then fStopSql else if OpIs('store.clear') then Store.Clear else if OpIs('store.merge') then MixNonVoidValues(Context,Store) else if OpIs('string.to.hex') then fStringToHex else if OpIs('string.from.hex') then fStringFromHex else if OpIs('static.set') then fStaticSet else if OpIs('static.get') then fStaticGet else if OpIs('static.set.from.file') then fStaticSetFromFile else if OpIs('static.get.to.file') then fStaticGetToFile else if OpIs('static.clear') then ClearStaticStrings else if OpIs('strcat') then fStrcat(False) else if OpIs('strcat.ln') then fStrcat(True) else if OpIs('strcombine') then fStrcombine(False) else if OpIs('strcombine.ln') then fStrcombine(True) else if OpIs('string') then fStringOp else if OpIs('stetoskop') then fStetoskop else if OpIs('stetoskop-m') then fStetoskopM else if OpIs('strextend') then fStrextend else if OpIs('strextend.raw') then fStrextendRaw else BadCommand; '1': if OpIs('s1.set') then S1:=Context.Values[Arg] else if OpIs('s1.test') then Cmp(S1,SysResolve(Arg,False)) else BadCommand; 'o': if OpIs('sort') then fSort else if OpIs('sort.mbiobook') then fSortMbioBook else BadCommand; 'v': if OpIs('sv') then SetMoreV(false,false) else BadCommand; 'w': if OpIs('switch.fetch') then fSwitchFetch else if OpIs('swap') then fSwap else if OpIs('switch2wizard') then SwitchWiz:=ResolvedArg else BadCommand; 'p': if OpIs('spaces.out') then fSpacesOut else if OpIs('spaces.strcat') then fWhatStrcat(' ') else if OpIs('split') then fGetAtomLoop else BadCommand; '.': if OpIs('s.close') then begin end else if OpIs('s.start') or OpIs('s.clear') then begin Arg:='1,1'; fRfCreate end else if OpIs('s.put') or OpIs('s.write') or OpIs('s.append') then begin Arg:='1,'+Arg; fRfWrite end else if OpIs('s.putln') or OpIs('s.writeln') or OpIs('s.appendln') then begin Arg:='1,'+Arg; fRfWriteln end else if OpIs('s.vi') then begin Arg:='1'; fRfViewInnerI end else if OpIs('s.subst') then begin Arg:='1,'+Arg; fRfSubst end else if OpIs('s.fv') then begin Arg:='1,'+Arg; fRfFv(True) end else if OpIs('s.fv.nolf') then begin Arg:='1,'+Arg; fRfFv(False) end else if OpIs('s.get') then begin Arg:='1,'+Arg; fRfGet end else BadCommand; else BadCommand; end; 't': case Op[2] of 'a': if OpIs('table.update') then fUpdate else if OpIs('table.try.update') then fTryUpdate else if OpIs('table.insert') then fInsert else if OpIs('table.name') then DbTableName:=Arg else if OpIs('tag') then fTag else if OpIs('tail') then fTail else if OpIs('tail.last.x') then fTailX else if OpIs('tables.import') then fManipulateTables('import') else if OpIs('tables.zimport') then fManipulateTables('zimport') else if OpIs('tables.zexport') then fManipulateTables('zexport') else if OpIs('tables.export') then fManipulateTables('export') else if OpIs('tables.empty') then fManipulateTables('empty') else if OpIs('table2external') then fTableToExternal else if OpIs('tab.tofile') then fXToFile(#9) else if OpIs('tab') then fTab else if OpIs('tab.strcat') then fWhatStrcat('\t') else BadCommand; 'e': if OpIs('test') then TestArg(Context) else if OpIs('text.pos') then fTextPos else if OpIs('text.copy') then fTextCopy else if OpIs('text.delete') then fTextDelete else if OpIs('text.insert') then fTextInsert else if OpIs('text.dotlines.out') then fTextDotLinesOut else if OpIs('text.no.dots') then fTextNoDots else if OpIs('text.insert.line') then fTextInsertLine else if OpIs('text.cleanup') then fTextCleanup else if OpIs('terminate') then begin OnExitScriptCancelled:=True; Halt; end else BadCommand; 'i': if OpIs('time.shift') then fShiftTime else if OpIs('tick.report') then fTickReport else if OpIs('tick.profile') then fTickProfileReport(ResolvedArg) else BadCommand; 'm': if OpIs('tmpfile.subst') then SubstFile(ResolvedArg,false) else if OpIs('tmpfile.view') then BetterViewer(TmpFile) else if OpIs('tmpfile.standard') then TmpFile:=StdTmpFile else if OpIs('tmpfile.name') then TmpFile:=ResolvedArg else if OpIs('tmpfile.view.inner') then utInnerViewer(TmpFile,false) else BadCommand; 'o': if OpIs('tomorrow') then fTomorrow else if OpIs('to.ddmmyyyy') then fSmartToDDMMYYYY else if OpIs('to.yn') then fSmartToYn else if OpIs('to.number') then fSmartToNumber else if OpIs('today') then fToday else if OpIs('tofile') then fToFile else if OpIs('touples.clear') then TouplesClear else if OpIs('touples.get') then fTouplesGet else if OpIs('touples.register.pip') then fTouplesRegisterPip else if OpIs('touples.register') then fTouplesRegisterList else if OpIs('touples.cnt') then CtxPut(ResolvedArg,StringOf(TouplesCnt)) else if OpIs('touples.get') then fTouplesGet else if OpIs('touples.get.xth') then fTouplesXGet else if OpIs('touples.pip') then fTouplesPip else if OpIs('touples.ucet') then fTouplesUcet else BadCommand; 'r': if OpIs('trim') then fTrim else if OpIs('trim.trailing.balast') then fTrimTrailingBalast else if OpIs('try.update') then fTryUpdate else if OpIs('try.update.db') then fTryUpdateDb else if OpIs('try.insert') then fTryInsert else if OpIs('try.insert.break') then fTryInsertBreak else if OpIs('try.update.break') then fTryUpdateBreak else if OpIs('try.insert.db') then fTryInsertDb else if OpIs('try.insert.saved') then fTryInsertSaved else if OpIs('try.insert.saved.db') then fTryInsertSavedDb else if OpIs('try.delete') then fTryDelete else if OpIs('try.sql.script') then fTrySqlScript else if OpIs('try.delete.db') then fTryDeleteDb else if OpIs('translate.l2r') then fContextTranslateL2R else if OpIs('translate.r2l') then fContextTranslateR2L else if OpIs('translate') then fTranslate else if OpIs('trunc.number') then fTruncNumber else if OpIs('try.insert.dump') then fTryInsertDump(False) else if OpIs('try.update.dump') then fTryUpdateDump(False) else if OpIs('try.insert.dump.exit') then fTryInsertDump(True) else if OpIs('try.update.dump.exit') then fTryUpdateDump(True) else if OpIs('tr') then fTr else if OpIs('tr.loop') then fTrLoop else if OpIs('treewindowadd') then fTreeWindowAdd else if OpIs('treewindow.keepfocus') then fTreeWindowKeepFocus else if OpIs('trace') then fTrc else if OpIs('traverse.tables') then fTraverseTables else if OpIs('traverse.params') then fTraverseParams else if OpIs('trounce') then fTrounce else if OpIs('trump') then fTrump else BadCommand; 'w': if OpIs('two.columns') then fTwoColumns else BadCommand; 'h': if OpIs('thru') then fThruCommand(False) else if OpIs('thruc') then fcThruCommand(False) else BadCommand; else BadCommand; end; 'u': if OpIs('upper') or OpIs('upcase') then fUpper else if OpIs('until') then fUntilCommand else if OpIs('untag') then fUntag else if OpIs('unpack') then fUnpack else if OpIs('unpack.in.order') then fUnpackInOrder else if OpIs('unpack.equ') then fUnPackMany else if OpIs('update') or OpIs('up') then fUpdate else if OpIs('unlock') then fUnlock else if OpIs('unify.number') then fUnifyNumber else if OpIs('unify.lf') then fUnifyLf else if OpIs('unify.cents') then fUnifyCents else if OpIs('unify.string') then fUnifyString else if OpIs('unlink') then fUnlink else if OpIs('unwrap') then UnwrapFile else if OpIs('unwrap.paragraphs') then UnwrapParagraphs else if OpIs('user') then fResetUser else if OpIs('undevil') then fUndevil else if OpIs('unless') then UnlessEnabled := Arg='on' else if OpIs('us') then Context.Assign(ContextValues) else if OpIs('use') then Context.Assign(ContextValues) else if OpIs('use.only') then fRestrict(0) else if OpIs('unpip') then fUnPip else if OpIs('unpip.trim') then fUnPip else if OpIs('unpip.fromfile') then fUnXFromFile('|') else if OpIs('uncomma') then fUnComma else if OpIs('uncomma.del') then fUnCommaDel else if OpIs('uncomma.unquote') then fUnCommaUnQuote else if OpIs('uncomma.trim') then fUnComma else if OpIs('uncsv') then fUnCsv else if OpIs('uncsv.unquote') then fUnCsvUnquote else if OpIs('uncsv.del') then fUnCsvDel else if OpIs('uncsv.fromfile') then fUnXFromFile(';') else if OpIs('undot') then fUnDot else if OpIs('uncsv.trim') then fUnCsv else if OpIs('unquote') then fUnQuote else if OpIs('untab') then fUnTab else if OpIs('untab.trim') then fUnTab else if OpIs('untab.fromfile') then fUnXFromFile(#9) else if OpIs('unempty') then fUnEmpty else if OpIs('unz') then fUnZ else if OpIs('utcontext') then XtoContext(utContext) else if OpIs('unczetc') then fUnCzEtc else if OpIs('unczech') then fUnCzech else if OpIs('uncrlf') then fUnCrLf else if OpIs('undesired') then fRemoveUndesired else if OpIs('unlearn.all') then UnlearnAll else if OpIs('unlearn') then Unlearn(ResolvedArg) else BadCommand; 'v': if OpIs('view.refresh') then ReturnedResult:=2 else if OpIs('view.refresh.all') then Main.MainFrm.RefreshAllViews else if OpIs('view.search') then fViewSearch else if OpIs('view.refresh.all') then Main.MainFrm.RefreshAllViews else if OpIs('viewer') then BetterViewer(ResolvedArg) else if OpIs('viewer.exit') then begin BetterViewer(ResolvedArg); DoExitNow(2); end else if OpIs('viewer.colors') then fViewerColors else if OpIs('view.inner') then begin JustSpooled:=''; utInnerViewer(ResolvedArg,false,Context.Values['_Wrapping']='1'); CtxPut('_JustSpooled',JustSpooled); end else if OpIs('view.ro') then fViewRo else if OpIs('view.better') then fBetterViewer else if OpIs('viewer.inner') then utInnerViewer(ResolvedArg,false,Context.Values['_Wrapping']='1') else if OpIs('viewer.font') then IncreaseFontBy:=IntOf(Arg) else if OpIs('view.inner.erase') then begin utInnerViewer(ResolvedArg,false,Context.Values['_Wrapping']='1'); Ferase(ResolvedArg); end else if OpIs('view.inner.erase.exit') then begin utInnerViewer(ResolvedArg,false,Context.Values['_Wrapping']='1'); Ferase(ResolvedArg); DoExitNow(2); end else if OpIs('view.inner.ro') then utInnerViewer(ResolvedArg,true,Context.Values['_Wrapping']='1') else if OpIs('view.inner.exit') then begin utInnerViewer(ResolvedArg,false,Context.Values['_Wrapping']='1'); DoExitNow(2); end else if OpIs('verify') then fVerify else if OpIs('void') then fClearMore else BadCommand; 'w': if OpIs('wizard') then CallWizard(Arg,False) else if OpIs('wizard.or.exit') then CallWizard(Arg,True) else if OpIs('wi') then fDynamicWizardCall(True,'') else if OpIs('wizard.keydown') then LaKeyDown:=ResolvedArg else if OpIs('wizard.fkeys.set') then WizardKeyHandler:=ResolvedArg else if OpIs('wizard.fkeys.get') then CtxPut(ResolvedArg,WizardKeyHandler) else if OpIs('wizard.shortcuts') then fWizardShortCuts else if OpIs('write.context') then WriteContext else if OpIs('worktable.reset') then ResetWorkTable else if OpIs('worktable.accept.x') then WorkTable.AcceptX(ResolvedArg) else if OpIs('worktable.sort.by') then WorkTable.SortBy(ResolvedArg) else if OpIs('worktable.get') then fWorkTableGetXth else if OpIs('worktable.put') then fWorkTablePutXth else if OpIs('worktable.accept') then WorkTable.Accept(Context) else if OpIs('worktable.assign.x') then fWorkTableAssignFromXth else if OpIs('worktable.binsearch') then fWorkTableBinSearch else if OpIs('worktable.load.sql') then fWorkTableLoadSql else if OpIs('worktable.sort.by.3') then fWorkTableSortBy3 else if OpIs('watch') then fWatch else if OpIs('wildeditofcontext') then fEditContext else if OpIs('who') then fWho else if OpIs('write.equ') then fWriteEqu else if OpIs('wrap') then fWrap else if OpIs('write.scripts.summary') then WriteScriptsSummary else if OpIs('warning') then WizardShowWarning(False,False) else if OpIs('week.of') then fWeekOf else BadCommand; 'x': if OpIs('xlator.load') then DoXlatorLoad else if OpIs('xlator.apply') then DoXlatorApply else if OpIs('xlator.csv') then CsvToXlator(ResolvedArg) else if OpIs('xlog') then fXLog else if OpIs('xcounter') then fXCounter else if OpIs('xxx') then fXXX else if OpIs('xxxkkk') then begin fXXX; fKKK; end else if OpIs('xform') then fxForm else if OpIs('xml.encode') then fXmlEncode else if OpIs('xml.decode') then fXmlDecode else if OpIs('xml.encode.all') then fXmlEncodeAll else if OpIs('xml.decode.all') then fXmlDecodeAll else if OpIs('xmlwrapper.clear') then begin if XmlWrapper = NIL then XmlWrapper:=TXmlWrapper.Create(nil); XmlWrapper.Clear; end else if OpIs('xmlwrapper.add') then fXmlWrapperAdd else if OpIs('xmlwrapper.attribute') then fXmlWrapperAttributes else if OpIs('xmlwrapper.addnode') then fXmlWrapperAddNode else if OpIs('xmlwrapper.appendtext') then fXmlWrapperAppendText else if OpIs('xmlwrapper.appendraw') then fXmlWrapperAppendRaw else if OpIs('xmlwrapper.savetofile') then fXmlWrapperSaveToFile else if OpIs('xmlwrapper.close') then fXmlWrapperClose else if OpIs('xmlwrapper.add') then fXmlWrapperAdd // sem pridat funkce na eof a next else if OpIs('xmlwrapper.eof') then fXmlWrapperInEof else if OpIs('xmlwrapper.next') then fXmlWrapperInNext else if OpIs('xmlwrapper.load') then fXmlWrapperInLoad else if OpIs('xmlwrapper.lfs') then fXmlWrapperInLoadFromString else if OpIs('xmlwrapper.find') then fXmlWrapperInFind else if OpIs('xmlwrapper.closein') then fXmlWrapperInClose else if OpIs('xmlwrapper.xattr') then fXmlWrapperInXAttr else if OpIs('xmlwrapper.xvalue') then fXmlWrapperInXValue else if OpIs('xrx') then fXrx else BadCommand; 'y': if OpIs('yyyymmdd.ddmmyyyy') then gyyyymmdd_ddmmyyyy else if OpIs('yyyymmdd.yyyy-mm-dd') then gyyyymmdd_yyyy_mm_dd else if OpIs('yymmdd.yyyymmdd') then fYYMMDD_YYYYMMDD else if OpIs('yyyymmdd2ddmmyyyy') then fyyyymmdd2ddmmyyyy else if OpIs('yyyymmdd2cz') then fyyyymmdd2ddmmyyyy else if OpIs('yyyymmdd2ddmmyyyy_void') then fyyyymmdd2ddmmyyyy_void else if OpIs('yyyymmdd2/ddmmyyyy') then fslash_yyyymmdd2ddmmyyyy else if OpIs('yesterday') then fYesterday else if OpIs('yestermonth') then fYesterMonth else if OpIs('yyyymmdd') then fyyyymmdd2ddmmyyyy else if OpIs('y.write') then begin V1:=utDecodeString(Sysresolve(Arg,False)); Writeln(fy,V1) end else if OpIs('y.create') then fCreate(fy,false) else if OpIs('y.close') then begin CloseFile(fy); end else BadCommand; 'z': if OpIs('zoom') then DoZoom else if OpIs('zeroes') then fZeroes else BadCommand; '?': case Op[2] of 'c': if OpIs('?call?') then fCallOrNot(False) else if OpIs('?call.or.exit?') then fCallOrNot(True) else if OpIs('?call') then fCallArgsOrExit else if OpIs('?call.args') then fCallArgsOrExit else if OpIs('?confirm') then fConfirm else if OpIs('?clear.getsql') then begin Context.Clear; fgetSql(True); end else BadCommand; 'b': if OpIs('?bad.value') then fBadValue else if OpIs('?b.create') then fbCreate else BadCommand; 'x': if OpIs('?xlate') then fXLate else BadCommand; 'i': if OpIs('?ifsome') then fIfSome else if OpIs('?inner') then fInner else if OpIs('?infix.v') then fInfixV else if OpIs('?infix') then fInfix else if OpIs('?inner.variable') then fInnerVariable else BadCommand; 's': if OpIs('?switch') then fSwitch else if OpIs('?switch.v') then JumpTo(Context.Values[ResolvedArg]+':',True) else BadCommand; 'e': if OpIs('?eq.cc') then fEq else if OpIs('?eq.vc') then JumpIfEq else if OpIs('?eq.cc.upper') then fEqUpper else if OpIs('?error.break') then begin if PreviousResult=0 then fBreakCommand; end else if OpIs('?error.goto') then JumpTo(Arg+':',PreviousResult=0) else BadCommand; 'a': if OpIs('?allowed') then fAllowed else if OpIs('?approxdate') then fApproxDate else if OpIs('?answer') then fAnswerOrJump else if OpIs('?append.textfile') then fAppendTextFileEtc else BadCommand; 'g': if OpIs('?getsql') then fgetSql(True) else if OpIs('?g.read') then fReadOrJump(gx) else if OpIs('?g.open') then fOpenOrJump(gx) else BadCommand; 'n': if OpIs('?noinfix') then fNoInfix else if OpIs('?noinfix.v') then fNoInfixV else BadCommand; 'h': if OpIs('?h.read') then fReadOrJump(hx) else if OpIs('?h.create') then fCreateHOrJump else if OpIs('?h.open') then fOpenOrJump(hx) else BadCommand; 't': if OpIs('?time.or.interval') then fTimeOrInterval else BadCommand; 'w': if OpIs('?worktable.assign.x') then fWorkTableAssignFromXth else if OpIs('?wizard') then fDynamicWizardCall(True,'') else if OpIs('?wizard-main') then fDynamicWizardCall(True,'main') else if OpLike('?wizard-') then fDynamicWizardCall(True,Copy(Op,Length('?wizard-')+1,Maxint)) else if OpIs('?wizard.kkk') then begin fDynamicWizardCall(True,''); fKKK; end else if OpIs('?wizard.kkkc') then fWizardWithCaption(True) else if OpIs('?write.textfile') then fWriteTextFileEtc else BadCommand; 'l': if OpIs('?load.sql') then fLoadSqlOrJump else BadCommand; 'f': if OpIs('?f.create') then fCreateOrJump else if OpIs('?f.append') then fAppendOrJump else BadCommand; 'r': if OpIs('?read.textfile') then fReadTextFileEtc else BadCommand; else BadCommand; end; '_': if length(Op)>1 then case Op[2] of 'b': if OpIs('_buffer.clear') then fBufferClear else if OpIs('_buffer.append') then fBufferAppend else if OpIs('_buffer.getline') then fBufferGetLine else BadCommand; 'c': if OpIs('_call') then fCallSubrWithArgs else if OpIs('_check') then fCheck else if OpIs('_clear') then fClearMore else if OpIs('_cache.restart') then MbioMain.InvalidateMbioCache else if OpIs('_cache.clear') then begin LaCache.CacheClear; Verificator.Clear end else if OpIs('_compose') then FCompose else if OpIs('_column.select') then fColumnSelect else if OpIs('_column.multiselect') then fColumnMultiSelect else if OpIs('_column.bioselect') then fColumnBioSelect else if OpIs('_compress') then fCompress else if OpIs('_compressor_load') then LoadCompressor(Arg) else BadCommand; 'r': if OpIs('_return') then fReturnSubr // else if OpIs('_return.if.eq') then fReturnSubrIfEq // else if OpIs('_return.if.error') then fReturnSubrIfError // else if OpIs('_return.if.success') then fReturnSubrIfOK else if OpIs('_return.if') then fReturnSubrIf else if OpIs('_return.ifnot') then fReturnSubrIfNot else if OpIs('_return.unless') then fReturnSubrIfNot else if OpIs('_return.call') then fCallArgs(True,false,false) else if OpIs('_return.show.message') then WizardShowMessage(False,True) else if OpIs('_returnatom') then fReturnAtom else if OpLike('_return.if') then fReturnSubrCnd(Copy(Op,Length('_return.if')+1,Maxint)) else if OpLike('_return.if.') then fReturnSubrCnd(Copy(Op,Length('_return.if.')+1,Maxint)) else if OpIs('_returnatom.break') then begin fReturnAtom; if _Atom='' then fBreakCommand; end else if OpIs('_returnline') then fReturnLine else if OpIs('_renamefile') then fRenameFile else BadCommand; 'u': if OpIs('_use') then try Context.Assign(ContextValues) except end // tady else if OpIs('_u2d') then Context.Values[Arg]:=U2D(Context.Values[Arg]) else if OpIs('_usage.tracking') then UsageTracking:=Arg='1' else BadCommand; 's': if OpIs('_sload') then fSload(False) else if OpIs('_substr') then fSubStr else if OpIs('_set') then SetContextValue(False,False,False,False) else if OpIs('_set.nonvoid') then SetContextValue(False,False,False,True) else if OpIs('_set.trim') then SetContextValue(False,False,True,False) else if OpIs('_spacing') then Spacing:=AdjustSL('',IntOf(Arg)) else if OpIs('_sload.encode.crlf') then fSload(True) else if OpIs('_separator') then _Separator:=ResolvedArg+',' else if OpIs('_separator2') then _Separator2:=ResolvedArg+'x' else if OpIs('_s.set') then _S:=ResolvedArg else if OpIs('_s.put') then CtxPut(ResolvedArg,utEncodeString(_S)) else if OpIs('_s.crlf') then _S:=_S+#13#10 else if OpIs('_s.append') then _S:=_S+ResolvedArg else if OpIs('_s.append.const') then _S:=_S+Arg else if OpIs('_s.push') then PushString(_S) else if OpIs('_s.pop') then _S:=PopString else if OpIs('_s.squeeze') then _S:=fSqueeze(_S) else if OpIs('_spaces') then FSpaces else if OpIs('_skip2') then fSkip2 else if OpIs('_s.word2text') then fWord2Text else if OpIs('_stat.clear') then fStatisticsClear else if OpIs('_stat.time.start') then fStatisticsTimeStart else if OpIs('_stat.time.stop') then fStatisticsTimeStop else if OpIs('_stat.write') then fStatisticsWrite else if OpIs('_stat.speed.limit') then SpeedLimit := IntOf(Arg) else if OpIs('_syslog') then FSysLog else if OpIs('_savedialog') then fSaveDialog else if OpIs('_split.words') then fSplitWords else BadCommand; 'l': if OpIs('_lowercase') then fLowerCase else if OpIs('_lowercase1') then fLowerCase1 else if OpIs('_length') then FLength else if OpIs('_list.construct') then fListConstruct(0) else if OpIs('_list.to.context') then fListToContext else if OpIs('_list.from.context') then fListFromContext else if OpIs('_list.construct.from.view') then fListConstructFromView(0) else if OpIs('_list.get') then fListGet else if OpIs('_list.get.to') then fListGetTo else if OpIs('_list.get.xth.to') then fListGetXthTo(False) else if OpIs('_list.get.xth.to.clean') then fListGetXthTo(True) else if OpIs('_list.save') then SavedList:=ConstructedList else if OpIs('_list.restore') then ConstructedList:=SavedList else if OpIs('_list.clear') then ConstructedList:='' else if OpIs('_list.append') then ConstructedList:=ConstructedList+ResolvedArg else if OpIs('_latrace') then LaTraceOn:=Arg='1' else if OpIs('_login.q') then LaVax.LoginQ else BadCommand; 'm': if OpIs('_mbiobook') then begin if InMbioBook = 0 then begin GlobalResultList.Clear; InMbioBook:=1; MikrobiologickaKniha(Context,Context.Values['_mbiobook.command']); InMbioBook:=0; end else ShowMessage('Mikrobiologickou knihu nelze volat rekurzivne ...'); // MikrobiologickaKniha(Context,'FakedF2'); end else if OpIs('_mbiogetfile') then fMbioBookGetFile else if OpIs('_mbiocontext') then fMbioContext else if OpIs('_mbiosubst') then fMbioSubst else if OpIs('_mbiobook.serology.no') then fSerologyNumber else if OpIs('_move') then fMove else if OpIs('_morphism') then fMorphism else if OpIs('_mbiocheck') then fMbioCheck else if OpIs('_mbiomenu') then fMbioMenu else if OpIs('_mbioxlate') then fMbioXlate else if OpIs('_mbio.atb.vector.create') then fCreateMbioVector else if OpIs('_mbio.atb.vector.reset') then MikrobList.Clear else if OpIs('_mbio.atb.vector.setup') then fMbioVectorSetUp else if OpIs('_mbio.atb.unroll') then fAtbUnroll else if OpIs('_mbio.atb.sensitive.only') then fAtbSensitiveOnly else if OpIs('_mbio.atb.resistant.to') then fAtbResistantTo else if OpIs('_mbio.atb.sensitive.to') then fAtbSensitiveTo else if OpIs('_mbiobook.load') then fMbioBookLoad else if OpIs('_mbiobook.get3') then fMbioBookGetThree else if OpIs('_mbiobook.exam') then fMbioBookExam else if OpIs('_mbiobook.exam.s') then fMbioBookExamS else if OpIs('_mbiobook.exam.i') then fMbioBookExamI else if OpIs('_mbiobook.check.data') then fMbioBookCheckData else if OpIs('_mbiobook.schema') then fMbioBookSchema else if OpIs('_mbiobook.dissect') then fMbioGlbBookSchema else if OpIs('_mbiobook.get.corr.pairs') then fMbioGlbGetCorrespondingPairs else if OpIs('_mbiobook.get') then fMbioGlbGet else if OpIs('_mbiobook.get.corr') then fMbioGlbGetCorresponding else if OpIs('_mbiobook.pnh') then fMbioBookPNH else if OpIs('_mbiobook.get.tampon') then fMbioBookGetTampon else BadCommand; 'f': if OpIs('_fms') then FFms else if OpIs('_fv') then fWriteMoreV(True,fx) else if OpIs('_fv.nolf') then fWriteMoreV(False,fx) else if OpIs('_fuzzy_find') then fFuzzyFind else if OpIs('_fvh') then fWriteMoreV(True,hx) else if OpIs('_fvh.nolf') then fWriteMoreV(False,hx) else if OpIs('_fetch.absolute') then Fetch(Arg,True) else if OpIs('_flatiron') then fFlatIron else if OpIs('_flatwrap') then fFlatWrap else if OpIs('_flatiron.f') then fFlatIronFile else if OpIs('_flatwrap.f') then fFlatWrapFile else BadCommand; 'g': if OpIs('_getline') then FGetLine else if OpIs('_getline.byprefix') then FGetLineByPrefix else if OpIs('_getfield') then FGetField else if OpIs('_getmikrob') then fMikrobOnLine else BadCommand; 'v': if OpIs('_view') then utInnerViewer(ResolvedArg,false) else if OpIs('_view.exit') then begin utInnerViewer(ResolvedArg,false); DoExitNow(2); end else if OpIs('_vector.clear') then Vector.Clear else if OpIs('_vector.sort') then Vector.Sort // NormalizeStringList(Vector) else if OpIs('_vector.count') then Context.Values[Arg]:=StringOf(Vector.Count) else if OpIs('_vector.load') then FVectorLoad else if OpIs('_vector.load.idx') then FVectorLoadIdx else if OpIs('_vector.store') then FVectorStore else if OpIs('_vector.inc') then FVectorInc else if OpIs('_vector.store.idx') then FVectorStoreIdx else if OpIs('_vector.squeeze') then SqueezeTStringList(Vector) else if OpIs('_vector.filter.from') then FVectorFilterFrom(Vector) else if OpIs('_vector2.filter.from') then FVectorFilterFrom(Vector2) else if OpIs('_vector2.clear') then Vector2.Clear else if OpIs('_vector2.sort') then Vector2.Sort // NormalizeStringList(Vector2) else if OpIs('_vector2.count') then Context.Values[Arg]:=StringOf(Vector2.Count) else if OpIs('_vector2.load') then FVector2Load else if OpIs('_vector2.load.idx') then FVector2LoadIdx else if OpIs('_vector2.store') then FVector2Store else if OpIs('_vector2.store.idx') then FVector2StoreIdx else if OpIs('_view.changed') then LastDbView.ViewChanged:=True else if OpIs('_view.locate') then fViewLocate else BadCommand; 'q': if OpIs('_quit') then fExitShowMessage(2) else if OpIs('_quit.norefresh') then fExitShowMessage(0) else if OpIs('_quit.stop') then begin fProgressStop(False); fExitShowMessage(0) end else BadCommand; 'h': if OpIs('_hhmm.hh_mm') then fHHMMToHH_MM else if OpIs('_hh_mm.hhmm') then fHHMMToHHMM else BadCommand; 'p': if OpIs('_ptr') then FPtr else if OpIs('_pump.sql') then fPumpSql else if OpIs('_password') then FPassWord else if OpIs('_privilege.vaxnt') then fPrivilegeVaxNt else if OpIs('_prepare.decimal') then PrepareDecimalOn := Arg='1' else if OpIs('_printer') then fPrinter else if OpIs('_parameter') then fSetParameters else BadCommand; 'n': if OpIs('_null') then fNull else if OpIs('_nice') then fNiceNumber else if OpIs('_normalize') then Context.Sort // NormalizeStringList(Context) else BadCommand; 'e': if OpIs('_edit') then fEdit else if OpIs('_edit.value') then fEditValue else if OpIs('_exitlabel') then _ExitLabel:=ResolvedArg else BadCommand; 't': if OpIs('_touple') then fTouple else if OpIs('_touple.x') then fToupleX else if OpIs('_title.user') then LaVax.SetTitleUser(ResolvedArg) else if OpIs('_trace.on') then TraceOn := true else if OpIs('_trace.off') then TraceOn := false else if OpIs('_trace.super') then SuperTraceOn := Arg='1' else if OpIs('_trace.start') then fTraceStart(ResolvedArg) else if OpIs('_trace.next') then TraceCntDown:=IntOf(DefaultedValue('1',ResolvedArg)) else if OpIs('_trace.clear') then FErase(TraceFn) else if OpIs('_trace.view') then BetterViewer(TraceFn) else BadCommand; '2': if OpIs('_2yyyymmdd') then fToYYYYMMDD else if OpIs('_2columns') then fXColumns(2) else if OpIs('_2ddmmyyyy') then fToDDMMYYYY else BadCommand; '3': if OpIs('_3columns') then fXColumns(3) else BadCommand; '4': if OpIs('_4columns') then fXColumns(4) else BadCommand; 'z': if OpIs('_zip') then fZip else if OpIs('_zipfile') then fZipFile else BadCommand; 'd': if OpIs('_dm_text') then FDmText else if OpIs('_dd_text') then fDdText else if OpIs('_decompress') then fDeCompress else if OpIs('_dayno') then fDayNo else if OpIs('_daymax') then fDayMax else if OpIs('_dateslashchar') then DateSlashChar:=Arg else BadCommand; 'y': if OpIs('_yyyymmdd') then fyyyymmdd2ddmmyyyy else if OpIs('_yyyy-mm-dd') then fyyyy_mm_dd2ddmmyyyy else if OpIs('_yyyymmddhhmmss') then fyyyymmddhhmmss2ddmmyyyyhhmmss else BadCommand; 'o': if OpIs('_opendialog') then fOpenDialog else BadCommand; 'i': if OpIs('_invalidate.cache') then InvalidateMbioCache else if OpIs('_impecable') then fImpecable else BadCommand; 'w': if OpIs('_watchfileactivity') then WatchFileActivity:=Arg='1' else if OpIs('_wizard') then fDynamicWizardCall(False,'') else if OpLike('_wizard-') then fDynamicWizardCall(False,Copy(Op,Length('?wizard-')+1,Maxint)) else BadCommand; 'a': if OpIs('_application.terminate') then // 20170328 terminate implemented begin OnExitScriptCancelled:=True; Halt; end else BadCommand; else BadCommand ; end; '@': if OpIs('@list.create') then LibCreateList else if OpIs('@rozvrh') then fRozvrh else if OpIs('@list.update') then LibListUpdate(DbName,ResolvedArg,Context) else if OpIs('@snoofer') then PreviousResult:=LibOneFileSnoofer(ResolvedArg,Data) else if OpIs('@excel') then fExcel else if OpIs('@clipboard.set') then ClipBoard.AsText:=ReadRawTextFileToString(Arg) else if OpIs('@ulozky.reset') then UlozkyReset else if OpIs('@ulozky.accept') then UlozkyAccept(DoubleOf(Arg)) else if OpIs('@ulozky.compute') then begin CtxPut('Vysledek',StringOfDouble(VypocetUM(DoubleOf(Arg)))); CtxPut('Iteraci',StringOf(Iteraci)); end

BulletRejstřík kapitoly
BulletNadřízená kapitola dokumentace / rejstřík


JLABS Aktualizováno dne 20170425. Komentář: info@jlabs.cz