Tento dokument slouží jako stručný popis činnosti programu TCPBatch ver. 1.10 ----------------------------------------- Popis možných argumentů programu TCPBatch ----------------------------------------- Běžně program spouštíme bez parametrů, pak je umožněno interaktivní zadávání jména souboru-scriptu a jeho spouštění. -p ... jméno souboru-protokolu. Neuvedeme-li, použije se soubor se jménem TCPBATCH.LOG v aktuálním DOS-adresáři -p- ... žádný protokol -d ... definuj symbol pro možná větvení programu (viz níže příkaz Define/UnDefine nebo IfDef/IfNotDef), malá a velká písmena významná -n <čítač> ... definuj čítač a nastav jej na iniciální hodnotu -l <řetězec> ... iniciální hodnota pro term line (viz níže), který může být součástí odesílaného řetězce, zpráv apod. -c ... ihned po startu programu zahájí spojení s těmito parametry. Obvykle je parametr kombinován s autostartovým scriptem -a ... ihned po startu programu čeká na spojení na tomto portu. Obvykle je parametr kombinován s autostartovým scriptem Pokud za klíčovými parametry uvedeme i nějaké poziční (nepředcházené znakem -), má první z nich význam souboru-scriptu, v tom případě se tento script ihned spouští, aniž by program čekal na stisk tlačítka Start (jde o autostartový script), obvykle je na konci scriptu End, tzn. ukončení celého programu TCPBatch. ----------------------------------------------------- Popis scriptu pro TCPBatch (defaultová přípona *.TCP) ----------------------------------------------------- Script může obsahovat následující příkazy: Connect - port zadat číslem, server jménem DNS nebo IP-adresou. Připojí se k serveru na dotyčný port. Pokud je jedna z hodnot znak otazník, vyžádá si program parametry spojení interaktivně Accept - port zadat číslem. Počká (listening) na portu, dokud se k němu někdo nepřihlásí, žádost akceptuje a listening ukončí. Pokud je místo portu znak otazník, vyžádá si program parametry spojení interaktivně Disconnect - ukončí spojení. Není třeba, pokud jej ukončil protějšek, ale nic se nestane při duplicitě (vypíše se jen warning do protokolu) Je-li spojení navázáno (tj. za Connect nebo Accept, také jej ovšem mohl navázat předchozí script nebo parametry -c či -a programu), může následovat: Send <řetězec> - pošle řetězec v jeho délce (nepřidává za něj sám od sebe newline) Receive - načte přesně tolik znaků SkipTo <řetězec> - řetězec musí být jednoznakový. Načítá znaky, dokud nenačte tento znak. Lze použít i pro načtení jedné řádky ve tvaru: SkipTo nl WaitFor - načítá řádky ukončené newlinem (ignoruje CR), dokud není splněna podmínka. Podmínky: End ... až do uzavření spojení protějškem EmptyLine ... dokud nenačte prázdnou řádku LineStarting <řetězec> ... dokud nenačte řádku začínající textem ExactMatch <řetězec> ... dokud nenačte přesně tuto řádku Řetězec je mezerami oddělené zřetězení libovolného počtu termů, přičemž term je: - cokoli v uvozovkách - funguje escapování pomocí '\' včetně běžných symbolů obdobných z C++ až na dekadickou interpretaci znaků (v C++ oktalová) - dekadický zápis čísla 0-255 (součástí řetězce může být i 0, tedy null) - nl či lf = newline, cr = carriage return, tab = tabelator, esc = escape - line - poslední načtený řetězec bez koncového znaku řádky v případě SkipTo a WaitFor, resp. v čistém počtu znaků v případě Receive nebo naposledy zadaný řetězec v příkazu Input - jméno použité dříve v příkazu SetCounter - hodnota čítače v prostém dekadickém zápisu Příklad řetězce: "Ahoj\r\nPolib mi\tšos\27\010" nl "Ahoj" tab 4 127 nl "\n" Program umožňuje příjem dat do souboru. Pokud uvedeme příkaz: OutputFile budou všechna data čtená ze socketu příkazy Receive, SkipTo a WaitFor ve své čisté délce opisována binárně do tohoto souboru až do konce všech scriptů nebo do příkazu CloseOutput (který jej uzavře) nebo dalšího OutputFile. Zapisují se pouze čistá data - pokud bylo v bloku dat přijato více dat, ale např. WaitFor skončil prázdnou řádkou, končí zápis touto prázdnou řádkou. Příkazy OutputFile a CloseOutput nemají vliv na základní chování programu. Jméno souboru nedáváme do uvozovek ani nezdvojujeme znaky '\'. Program má i jednoduché řídící příkazy: Label - nic nevykoná, jen označuje místo ve scriptu (malá a velká písmena významná) GoTo - skočí na první Label téhož jména ve scriptu a pokračuje za ním. Pokud nenalezne jméno v tomtéž scriptu a ten je spouštěn z jiného, ukončí provádění tohoto scriptu a zkouší to v nadřízeném. Pokud jméno není nalezeno v žádném z nadřízených (volajících) scriptů, vyvolá chybu Wait - počká tolik milisekund (hodnota není shora omezená; čekání není přímo v milisekundách, ale je převedeno na jednotky, kterými právě časují Windows) Comment - nic nevykoná. Význam komentářů mají i prázdné řádky a řádky začínající '/' a dále řádky přeskočené příkazem GoTo (jejichž obsah se tudíž nekontroluje) SetCounter <číslo> - nastaví čítač na číselnou hodnotu, založí jej, pokud dosud nebyl vytvořen. Čítače lze používat jako součást řetězců, zvětšovat o konstantu a testovat, ve jméně jsou malá a velká písmena významná IncrementCounter [<číslo>] - zvětší čítač o číselnou hodnotu (může být i záporná), při neuvedení čísla o 1. Čítač musel již existovat (jinak vyvolá chybu) TestCounter <číslo> - pokud je čítač v relaci s číslem, definuje globální symbol TRUE, jinak jej undefinuje. Operátor může být jeden z <, >, <=, >=, =, <>. Čítač musel již existovat (jinak vyvolá chybu) ShowCheckBox [<řetězec>] - pokud dosud není vidět check-box s tímto jménem, vytvoří se nový v pořadí a zobrazovaný text (vpravo od čtverečku) bude řetězec (má syntaxi shodnou s příkazy Send apod., typicky text v uvozovkách). Při vynechání řetězce se zobrazí jméno check-boxu, velká a malá písmena významná. Pokud byl již check-box s tímto jménem vidět, nezpůsobí žádnou akcí ani chybu HideCheckBox - pokud je vidět check-box s tímto jménem, skryje jej a uvolní prostor pro další check-boxy (současně jich může být vidět max. 10). Pokud check-box vidět není, nezpůsobí žádnou akci ani chybu SetCheck - pokud je vidět check-box s tímto jménem, označí ho podle způsobu (druhého argumentu), pokud není, ohlásí chybu a ukončí interpretaci scriptů. Způsob může být číslice 0 (zruš označení), 1 (označ) nebo 2 (změň stav na opačný) TestCheck - pokud je check-box s tímto jménem vidět a označen, definuje globální symbol CHECKED, jinak jej undefinuje. Nikdy nezpůsobí chybu WaitCheck [] - čeká, dokud není check-box s tímto jménem označen dle hodnoty (0=neoznačen, 1=označen, při vynechání označen). Pokud check-box není viditelný, ohlásí chybu a ukončí interpretaci scriptů Return - ukončí provádění scriptu (týž efekt má konec souboru-scriptu) Stop - ukončí provádění všech rozběhnutých scriptů End - ukončí provádění scriptu i program TCPBatch, používáme obvykle v kombinaci s autostartovým scriptem (uvedením scriptu v příkazové řádce) Signalize - soubor musí být dle standardu *.WAV, příkaz přehraje tento zvuk, nečeká na jeho dokončení a ihned pokračuje v interpretaci scriptu. Pokud není soubor nalezen nebo operační systém nemá nainstalován žádný přehrávač zvuků, je příkaz ignorován bez event. hlášení chyb ShowWindow - je-li způsob=1, zobrazí hlavní okno programu, je-li 0, schová jej (tzn. minimalizuje jej na taskbar). Tuto akci lze rovněž vyvolat myší nebo systémovým menu Message <řetězec> - zahlásí text jako zprávu, vyčká stisku buttonu Ok/Cancel a pokračuje ve scriptu (Cancel ukončí provádění všech scriptů jako příkaz Stop). Řetězec se řídí syntaxí uvedenou výše, typicky nějaký text v uvozovkách Input <řetězec> - zahlásí text jako zprávu, vyčká zadání řetězce a stisku buttonu Ok/Cancel a pokračuje ve scriptu (Cancel ukončí provádění všech scriptů jako příkaz Stop). Řetězec bude uložen do termu line a zůstává platný až do dalšího příkazu Input, Receive, WaitFor nebo SkipTo, tzn. lze jej použít jako součást jiných řetězců Question <řetězec> - zahlásí text jako zprávu, vyčká stisku buttonu Yes/No/Cancel a pokračuje ve scriptu. Cancel ukončí provádění všech scriptů jako příkaz Stop, Yes definuje a No undefinuje globální symbol CONSENT IfDef [příkaz] IfNotDef [příkaz] - příkaz se provede, pokud byl (resp. nebyl ve verzi IfNotDef) symbol definován pomocí -d v příkazové řádce nebo příkazy Define/Undefine nebo (v případě symbolu CONSENT) příkazem Question nebo (v případě symbolu TRUE) příkazem TestCounter. Příkazem bývá obvykle GoTo nebo Call, může jím být i další IfDef/IfNotDef a ovšem i jakýkoli jiný příkaz Define Undefine - definuje symbol resp. zruší definici symbolu stejně jako -d v příkazové řádce Call - přeruší provádění scriptu, provede celý script a pokud během něj nedojde k chybě nebo příkazům Stop a End, pokračuje za příkazem Call Veškerá čtená i protokolovaná čísla jsou v dekadické soustavě. Program vytvoří soubor pro protokol TCPBATCH.LOG v aktuálním DOSovém adresáři (neuvedeme-li v příkazové řádce -p) a vypisuje do něj všechny události i s konkrétními daty. Tento protokol se sice příkazu DIR jeví jako prázdný, ale pomocí notepadu nebo příkazu TYPE jej lze číst vždy v aktuálním stavu.