syntaxe prikazu:
    SEND <local_name> [ TO <ftp_name>]   - funguji wildcards i s frazi "TO", ftp_name se pak bere jako cesta, pripadny slash na konci si doplni
    GET  <local_name> [ FROM <ftp_name>] - funguji wildcards, napr. GET c:\tmp\*.ftp, * a FROM lze kombinovat, napr. GET <TEMP>\fn\grosseto_*.csv FROM fany/

    LOA  <local_name> [ FROM <ftp_name>] - viz GET, ale stazeny soubor na serveru smaze
         funguje i napr. GET/SEND (m.pri_path + "soubor.dbf")

    EXEC <command> [ ; <path>]
    RUN <DOS command> [ ; <path>]
    ECHO ON | OFF
    // komentar       - do resultfile se zapise cely radek, tedy vcetne pocatecnich lomitek
    IGNORE ON | OFF
    #DEF co_nahradit cim_nahradit
    #[ nazev_makra ]# substituce viceradkovych maker z externiho souboru. 
                      makra mohou mit az 9 mezerou oddelenych parametru, na nez je uvnitr makra odkazovano jako <1> az <9> (cislo mezi vetsitkem-mensitkem)



v definicnim souboru je nejprve provedena substituce maker z externiho souboru MACRO.FTP (pokud v .INI neni uveden jiny soubor)
tato makra jsou ohranicena dvojznakem kriminal-hranata zavorka
pote je provedena substituce maker z prikazu #DEF. ta zadne pevne ohraniceni nemaji, pozivame vetsitko-mensitko. je preddefinovano makro <TEMP>
prikazem #DEF lze makra opakovane predefinovavat, plati vzdy posledni definice
pri substituci maker lze pouzit drive definovana makra, takze napr. zafunguje:
      #DEF <DATA> i:\d_strah
      #DEF <DATA_KAS> <DATA>\d_kas - makro <DATA_KAS> bude mit hodnotu "i:\d_strah\d_kas"


pro kontrolu je definicni soubor .FTP z prvni substituce generovan do _1.FTP a po druhe substituci do _2.FTP v privatnim adresari (typicky .\tmp\zkracene-jmeno_scriptu)

automaticky update je zavisly na existenci radku GET .\progs_ftp\ftp.ver v definicnim souboru (muze byt i expandovan z makra)
  pokud je v nem zapsana novejsi verze, GETne ze stejneho adresare i ftp.exe do podadresare .\progs_ftp a po ukonceni spusti davku .\progs_ftp\UPDATE.BAT
  tim padem se dlouhy ftp.exe downloaduje pouze pokud je potreba



poznamky:
- k volani externich prikazu je urcen prikaz RUN (nikoliv EXEC run), jeho parametr neni v uvozovkach
- 7za.exe -x ve frazi -o (urceni adresare, kam se ma rozbalit) nepotrebuje zaverecne lomitko
- 7za.exe a: pokud se maji zipovat vsechny soubory v adresari, konci parametr \*, neni treba \*.*
- volane programy sk_in/out, hk_in/out a dalsi take ve svych parametrech nepotrebuji posledni lomitko v oznaceni adresare
- program copy_dbf ignoruje treti parametr, ktery urcoval, jestli se kopirovalo do TYPE FOX2X


=== === === === === === === === === === === === === === === === === === === === === === === === === === === === === === === === === 

2024-01-01
- zkracen cas testovani opakovaneho spousteni na 55sec

2023-01-01
- kompilovano s west-wind verze 7.31.0

2022-01-22
- v GET obslouzena situace, kdy aFTPDir vrati i adresare ("." a "..")

2021-04-44
- vyhazeny dlouhe ladici zapisy do logu

2021-03-26
- do vysledkoveho souboru se nezapisuji radky #DEF s definicemi maker

2021-03-22
- zrusen download ftp.exe podle ftp.ver
- cas behu se zapisuje s jednotkou min pokud bylo pod 10min, jinak s jednotkou MINUT (velkymi)

2019-09-08
- pokud v aktualnim adresari chybi soubor config.fpw, je vytvoren

2015-08-28
- pred sendem 1 souboru je mazani na serveru kontrolovano a logovano
- v procedure write_to_resultfile se pri NO_UPLOAD posle dotaz aFTPDir, jen aby se udrzovalo spojeni nazivu

2015-07-27
- protoze west-wind zrusil wwipstuff.vcx a trida wwFTP je definovana v wwFTP.PRG, je zrusen set classlib to wwipstuff

2015-05-11
- pokud je program pusten z .exe nebo .app, konci quitem, takze ukonci foxku


2015-02-07
- inicializovana promenna "result_message", do ni by volane programy mely concatenovat hlasky, ktere se pak mohou zobrazit uzivateli

2015-01-02
- ftp__send_1_soubor refactored
- soubor k uploadu je nakopirovan do pri_path a teprve odtud uploadovan
- upraven zapis ignorovanych radku do logu

2014-12-09
- pri komunikaci k licencovani (inputbox k vyplneni nazvu hospody) upraveno jmeno definicniho souboru

2014-09-29
- upravena fce ftp__get, protoze nektere servery z aFTPDir() vraci jmena souboru VCETNE CESTY

2014-05-23
- prejmenovani kolidujicich promennych v write_to_resultfile()

2014-05-23
- lepsi osetreni chyb z 20.5. nezafunguje u zalohy sveho vlastniho eftypkoveho zurnalu, protoze PO nacteni delky se do nej pripise
  takze porovnani rovnosti delek opraveno na vetsi nebo rovno

2014-05-20
- uspornejsi vypis getu programu
- lepsi osetreni chyb v GET (porovna se delka souboru na serveru s prijatym) (ftp__get)

2014-02-08
- nahrazeni testovani existence GETovaneho souboru pred jeho kopirovanim z pri_path sekci TRY-CATCH (ftp__get)
- upraveno zkracovani vysledkoveho souboru (def_file)
- cislovani GETovanych i SENDovanych souboru rozsireno na 3 cislice (ftp__send_1_soubor a ftp__get)

2014-02-05
- ignorovana chyba cislo 13002 (viz http://support.microsoft.com/kb/168492/cs)
- trochu predesignovano opakovani prenosu pri chybe a nasledne pokracovani
- pocet pokusu nastaven #DEFINE POCET_POKUSU

2014-02-02
- kompilovano s west-wind verze 5.68
- nastaveno FtpBinary = 1
- pokud pri get nebo send nastane chyba, delaji se 4 pokusy

2014-01-31
- jen rekompilovano

2013-08-26
- pokud v ini-souboru neni definovan FTPServer, jsou prikazy SEND a GET ignorovany
- #DEF zvladne i oddelovaci tabulatory misto mezer

2013-07-25
- pokud se ma ftp aktualizovat, stahne ftp.exe do podadresare .\progs_ftp, ale na konci nepousti aktualizacni davku, protoze samo ftp je spusteno davkou, ktera to kopirovani dela

2013-07-10
- pokud neni v .ini radek passive=N/0/F, je pouzit pasivni rezim prenosu

2013-07-07
- promenna m.smazat_soubor_na_ftp, pouzita ve funkci ftp__get, nemusi existovat (je interpretovano jako nemazani)
- kompilovano s west-wind verze 5.66

2012-12-20e
- resultfile je downloadovan pouze pokud neexistuje v pri_path a NENI v pri_path mazan, 
  takze i zaznamy o neuspesnych pokusech o pripojeni zustanou zachovany
- pri dlouhem nazvu ini_file je generovana pri_path zkracena

2012-12-20b
- preddefinovana pocatecni hodnota promenne m.errcode=0
- kompilovano s west-wind v.5.62
- cela knihovna west-wind ulozena v podadresari food600\west-wind, nastaveno do nej PATH

2012-12-20
- preddefinovane makro cesty <TEMP> je zkraceno
- u viceradkovych maker muzou by mezery mezi #[ a nazvem makra a ]#
- v rozbalovanem makru mohou byt pouzita drive definovana makra
- u exec neni vysledek prednastaven na " ... EXEC OK ", ale na prazdny string, pokud prikazem neni RUN

2012-12-19b
- automaticky update podle GET ".\progs_ftp\ftp.ver"
- pri kombinaci wildcards s FROM u GET uz nemusi byt nazvy souboru az za FROM
- viceradkova makra zvladnou i parametry, oddelene mezerou

2012-12-18
- pokud je def_file na lokalnim disku a u macrofile neni zadana cesta, bere se ze stejneho adresare jako def_file
  to plati, i kdyz jmeno macrofile neni uvedeno v .INI souboru a pouzije se defaultni jmeno "macro.ftp"
- nemuzu nikde najit atributy na serveru; tak pokud soubor nejde stahnout, v reconectu zapisu i atribut.
  zda se, ze adresare maji atribut 16
  
2012-12-17
- do radku Connect se zapisuje i jmeno .INI souboru
- jmeno souboru maker je brano z ini_file, nebo se pouzije default macro.ftp
- preprocesor ze serveru nacte soubor maker, podle nej dela substituce useku scriptu v definicnim souboru. 
  makra jsou ohranicena dvojznaky #[ a ]#
- resultfile je zkracovan na maxlogsize i kdyz je na lokalnim disku

2012-12-12
- opravena chyba pri umisteni definicniho souboru na lokalnim disku
- GET i SEND vice souboru vypisuje s kazdym souborem sestupne poradi (cili kolik souboru se jeste bude prenaset)

2012-12-10
- mkdir lokal_path je osetreno try-catch, takze nezhavaruje ani pri neexistujicim disku
- pridan prikaz RUN, je interpretovan jako EXEC RUN "<command>", tedy vcetne doplneni uvozovek. 
  pokud sam command uvozovky obsahuje, jsou doplneny apostrofy
- zruseno SET PRINT
- datum do connectoveho radku je slozen rucne, takze ma vzdycky format dd.mm.rrrr

2012-12-06
- zredukovan pocet odesilani resultfile na FTP (procedura write-to-resultfile dostala druhy parametr, ktery potlacuje upload)
- get a send pri posilani vice souboru najednou zapise do resultfile i soucet velikosti souboru a celkovou prenosovou rychlost
- pridelan preprocesor, ktery dela trivialni nahradu stringu. pouzije se treba pro preddefinovani cest k datum a pracovnim adresarum

2012-11-27
- po spusteni se kontroluje vysledkovy textovy soubor. pokud existuje a je mladsi nez 99sec, je prenos nejspis omylem spusten podruhe a ukonci se.
- na zacatku ftp.exe se udela set defa to (gcini_path) a chdir (gcini_path)
- soubory.dbf, pouzite pri mazani pri_path, se generuje do (gcini_path)

2012-11-22
- pri sendu zvladne i kombinaci wildcard a cesty na serveru, napr. SEND c:\kontroly\*.htm  TO /html/
radky vysledkoveho souboru muzou zacinat indikaci, jak se zobrazi v romankove kontroloru, je to string ve tvaru:
   "[" + cislo 1-3 + nepovinne pismeno "B" nebo "T" + < nepovinna barva> + ], kde cislo 1-3 urci velikost pisma, B znaci Bold, T teletype font. 
   barva zacina "#", nasleduje 1 pismeno z r,R,b,B,g,G. vynechana barva je brana jako cerna.
   priklad: [1] - male cerne cerne pismo 
            [1B#g] - male tucne, slabe zelene
            [2T#R]  - stredni pismo cervene, teletype font (=monospace)

2012-11-12
- protoze je v radku ==disconnect== i verze, je pri promazani vysledkoveho souboru ponechan jen on, bez radku ==connect==
- cyklus cteni definicni databaze neprobiha do pevneho seq=3333, ale do realneho maxima
- procedura ftp__pokracuj konci kontrolou, jestli v souboru .\progs_ftp\ftp.ver neni indikace novejsi verze a pokud ano, vola davku update, ktera prepise aktualni ftp.exe


2012-11-01
- do radku Disconnect se zaznamena i delka behu programu v minutach
- pridan prikaz IGNORE ON/OFF, kterym lze potlacit vykonavani casti definicniho souboru. uzije se pri ladeni 

2012-02-29
- pocet zpracovavanych radku definicniho souboru zvetsen z 333 na 3333

2011-01-28
- opravena chyba v write_to_resultfile, kde se pri kazdem prenosu znova connectovalo k serveru
  connect se dela jen pri nepovedenem prenosu souboru na server
- pred kazdy FTPConnect() pridano FTPclose()

2011-01-25
- opraveno mazani resultfile, pokud se getovalo *.txt
- zrusena milanova samostatna procedura ftp__load, zapracovana do stavajici ftp__get
- knihovna WestWind - verze 5.53
- aktualni verze 7za.exe - 9.20
- truncate vysledkoveho souboru zachova radky connect a disconnect
- obsah pri_path je na zacatku smazan
- SEND a GET do logu zapisuji rychlost prenosu

2009-04-03
- pokud je GETovany soubor ".zip" nebo ".7z", je pred vlastnim downloadem smazan, (ostatni jsou ponechany, protoze nekde se mohou downloadovat rovnou ostra data)
- nastaveni aktivniho/pasivniho rezimu se bere z .ini-souboru, kazdopadne pokud se nepodari stahnout definicni soubor, prepne se na pasivni a zkusi se to znovu (radek passive=A/Y/1/T nastavi pasivni mod)
- pred stazenim definicniho souboru jsou v procedure def_file() pro jistotu smazany minule def_file + ".ftp" a + ".txt"
- pokud neni v .ini-souboru po instalaci nastaven nazev definicniho souboru .ftp, program se na nej zepta
- pokud se nepodari download definicniho souboru, zkusi se program sam prepnout do pasivniho modu a zkusi to znovu v nem, takze neni potreba aktivni/pasivni rezim nastavovat v ini-souboru
- pokud je definicni soubor food600_ftp.ini a neexistuje definicni soubor (*.ftp), pusti se aspon get_lic k poslani konfigurace
- oddeleny procedury ftp__send a ftp__get, aby byly volatelne z licencatoru
- pokud je spousteno z adresare, jehoz jmeno obsahuje text "food", bere se defaultni ini_soubor z adresare nad food_xxx se jmenem food600_ftp.ini.
  je-li napr. ftp.exe v i:\food600, pouzije se i:\food600_ftp.ini, je-li v q:\alfa\food600, pouzije se q:\alfa\food600_ftp.ini
- set path je nastaveno do podadresaru .\PROGS\ a .\PROGS_FTP\
- asi lze instalovat do libovolneho adresare, ale muze byt potreba opravit definicni soubory, 
  pokud odkazuji na absolutni cestu do c:\ftp\data, c:\ftp\tmp apod.
- lze getovat i do pri_path
- GET i SEND zvladne cestu v promenne - napr. GET (m.pri_path + "soubor.dbf")
- GET i jednoho souboru se dela aFTPDir + FTPGetEx, tim se odchyti neexistence souboru na serveru.
- i v procedure write_to_resultfile se pri posilani logovaciho souboru se podle potreby dela reconect
- test komunikace prestehovan do funkce write_to_resultfile, hlida returncode z poslani logu se zpravou disconnect
- zda se, ze pri vykonavani dlouhych programu se ftp server odpoji, proto pokud get nebo send ohlasi chybu, program udela FtpConect a get nebo send zkusi zopakovat
- funkce zamkni, pouzivana v programcich, dana primo do ftp.prg, aby nemusela byt v kazdym zvlast
- pri_path se generuje i z jmena scriptu (c:\ftp\tmp\[jmenoscriptu])

