Home


Aktualizováno 26.06.19 12:09:02
**********************
26.06.2019
POZOR: Opravena wr587 vzhledem k eet. V původním stavu WR po cca 100 odeslání
upadlo - paměťová záležitost.
**********************
26.02.2019
Ještě jsem se vrátil k an:x. Zjistil jsem totiž, že oproti svým zvyklostem
jsem stav 0 bral jako ano a stav 1 jako ne. Takže an:1 zapínalo X
a an:2 zapínalo Y (i X). (Přitom zapnuté Y zrušilo možnost účinku X).
Takže jsem vnitřní stav pro jistotu obrátil, význam an:1
a an:2 zůstáva stejný, an:4 shodí X i Y. Y v init5w nyní nenahazuje zbytečně
interně i X. Takže novum je v tom, že se dá X a Y programově zapnout, ale i vypnout.
Pomocí an:5 nejprve zrušíme X a Y a pak nahodíme X. an:2 nahodí Y bez ohledu na
předchozí stav a netřeba tedy eventuální X rušit, protože Y ho přebíjí.
**********************
Zdůrazňuji, že obecně přepínač xx:0 nuluje sice příslušnou buňku, ale ta je
již na začátku čtení přepínačů vynulovaná. V případě an:1 an:2 se na základě
hodnoty ATP přepínače Y a X shazovalo, ale an:0 byla prázdná akce. Nelze
tedy obecně tvrdit, že xx:0 něco ruší, spíše v instrukcích to nic nezpůsobí.
U _mode to může mít vliv, ale také nemusí.
**********************
25.02.2019
Příkaz _mode an:1 rušil Y ale ne X a an:2 rušil X z init5w (nahozeno obvykle pro
antivir ESET). Přidal jsem an:3 - ruší X i Y a an:4 nahazuje X a Y. Protože
nahození předchází shození, je an:5 rovno X v initu a an:4 je rovno Y v initu.
**********************
05.02.2019
V příkazu odbcadd chyběl převod češtiny z KOI do Windows. Pokud to někdo
doplnil před příkaz ručně, přestane mu to na česká jména souborů fungovat.
**********************
04.02.2019
V GRD se špatně četl typ HM.
***********************
10.10.2019
Vzhledem k dnešním zásahům do instrukce CSV jsem změnil význam

pr:n

na normální: "Přeskoč prvních n řádků (a ne n-1 řádků)".
***********************
6.01.2019
Odstraněn problém s heslem kratším než 4 znaky tak, že se doplní mezerami
do 4 znaků. Odstraněn problém s výpisem zašifrovaného CMD.
************************
05.01.2019
Zabýval jsem se údajovým typem HM po kritice, že nejde

hm1=hm2

Problém byl v tom, že HM jsem interně deklaroval se dvěma desetinnými místy
a při převodu do čísla se uplatnily HM=01.00 se převedlo jako 60.00 a zpětně
se převádělo do HM hodnota 6000 - došlo k přeplnění. Proto jsem desetinná
místa zrušil a použivám je pouze při čtení HM a tisku HM. Do jisté míry
funguje i aritmetika

hm2=hm1+1

v hm2 bude o minutu více. Pokud byste chtěli do HM dát čas 12.54, je nutno

hm=12*60+54

tedy vstup v minutách. Do jisté míry jsou to hypotetické úvahy, protože
prvotní snahou bylo zaznamenat třeba příchod do práce hm1 a odchod
z práce hm2. Potom ti(hm1,hm2) dalo počet odpracovaných minut.
************************
26.12.2018
Dokončena aktualizace příručky k WR587. POZOR! Nutno stáhnout i poslední stav
WR587 (jinak to jede na DOK586!).
***********************
21.11.2018
Čtení XML o velikosti 90 MB se 150000 větami vedlo k pádu WR587 32 bitů, 64 bitová
verze to vydržela (tvorba definice). Proto jsem jednak zajistil slušný konec v případě
nedostaku paměti a dále přes dodanou verzi xmlrdf to upadlo při alokaci 20x<délka XML>
- bylo to natvrdo. Přidán přepínač DX:n, kdy se alokuje na vznikající RDA nx<délka XML>.
Takže nakonec program pro wr587 32 bitů vypadá:

%xml
df.
Obor1.xml
XMLRDA.rdf
%xml
dx:1,sk,q5:81.
"xmlrda.rdf" "oborvzdelani.xml"
XMLRDA
xml\row.
%

(RDA je menší než XML) kde Obor1.xml obsahuje začátek souboru "oborvzdelani.xml".
Původní program

%xml
sk,q5:81.
"oborvzdelani.xml"
XMLRDA
xml\row.
%

končí na nedostatek paměti při tvorbě definice.
***********************
02.11.2018
V instrukci ZMT povolen přepínač q5:18 a q5:19. Předpokládané využití je pouze u
přepínače CS - výstup CSV.
***********************
29.10.2018
Postupně se vzpamatovávám po operci tříselné kýly. Občas na základě nějaké připomínky
provedu úpravu wr587, ale jsou to drobnosti. WR587 je tedy stále prověřována a do konce
roku, kromě reakcí na připomínky, nebudu do ní již zasahovat.
***********************
31.08.2018
Změna kořenového certifikátu u EET nás neohrozí, protože odesílatele nekontrolujeme,
stejně jako curl - dáno u něj přepínačem "-k".
***********************
19.07.2018
Ing. Havel Vosa Znojmo se pokoušel pod Win10 zprovoznit příkaz DATE. Zjistil,
že správce může pouze _date. Nicméně tedy můžeme prohlásit příkaz DATE
z MSDOS za mrtvý a nutno používat novější příkaz .olddate.
***********************
19.07.2018
Timeout pro SFTP nefungoval správně, takže jsem příjem bufferu přepracoval.
***********************
18.07.2018
Práce na SFTP jsem momentálně ukončil. Funguje .open_sftp, .close_sftp,
.dir_sftp, .read_sftp. Ostatní příkazy vyžadující přístup na změnu nebo
zápis nemám kde odzkoušet.
***********************
16.07.2018
Pomocí _mode wt. lze nastavit čekání při mazání, přejmenování, otevření ap.
jako v init5w, pomocí MW místo M4.
***********************
Jinak to SFTP jsem uchodil na operacích .opensftp, .dirsftp, .readsftp v posledních
dvou operacích téměř ve shodě pro výše zmíněné dva případy. Se třetím se spojím
a tím to skončí. Protože ani vzorový program se serverem nedomluví, považuji
to, zatím, za jakýsi folkrór.
***********************
Protože se mne již pár uživatelů ptalo, co je to HASH, tak k tomu pár slov.
Hash funkce přiřazuje libovolnému souboru textovému/binárnímu/obrázkům atd.
jakési číslo - hash určité bajtové délky. Ze známějších MD5 16 bajtů, SHA1
20 bajtů, SHA256 32 bajtů a SHA512 64 bajtů. Snaha autorů spočívá v tom, aby
při změně jakéhokoliv znaku v hashovaném souboru byl hash jiný (obecně je
úplně jiný). Pokud máte alespoň základní logické myšlení, musí Vam být jasné,
že zobrazení nekonečně mnoha souborů na několik bajtů nemůže být jednoznačné.
Dokonce se dá tvrdit, že konkrétní hash je shodný pro nekonečně mnoha souborů.

Jako mimořádná událost byla prezenována nalezená shoda hash pro dva úplně jiné
PDF soubory. Takže podpis prvního PDF by se po podstrčení do druhého PDF
tvářil jako O.K. Nicméně k nalezení "duálního" PDF potřebovali několi dnů
značného výpočetního výkonu.

Takže náš dif, který mně léta slouží (DOS!), dělal hash řádku textového souboru
na 4 bajty = 32 bitovému číslu, takže to občas nedopadne. Takže změna zobrazení
řádků na 8 bajtů hash to "občas", doufám, značně naředí.
***********************
09.07.2018
Zkuste na starém dif:

p1.txt

DH_Sha_hash(c_s,32,(B8*)"E");/* client-server */
DH_Sha_hash(s_c,32,(B8*)"F");/* server-client */

p2.txt

DH_Sha_hash(c_s,20,(B8*)"E");/* client-server */
DH_Sha_hash(s_c,20,(B8*)"F");/* server-client */

a vypadne dojemná shoda p1.txt i p2.txt.
***********************
Protože procesory nyní umí 64 bitů, tak jsem hash mírně pošolichal a navýšil
z 32 bitů na 64 bitů a různé řádky se nyní v diff objevují.
**********************
08.07.2018
Dnes mně selhal diff i systemový diff. Měl jsem dva zdrojáky podle diff
totožné, nicméně s jednou variantou to jelo s druhou ne. Překlad měl stejnou
velikost. Protože diff je založen na hash 32 bitů může obecně selhat - podle
zkušenosti na cca 0.1% případů. I napsal jsem si porovnávač:

.openr dh1.cpp
.openr #1,\wrtst\dh1.cpp
.do()
.read rad1
.if($eof) .break
.read #1,rad2
.if(rad1!=rad2) "'rad1'";
.if(rad1!=rad2) "'rad2'";
.end_do

a ukázalo se, že na dvou řádcích byla hodnota 20 a v druhém souboru správně
32. Takže se žádná duchařina nekonala!
**********************
03.07.2018
Podařily se protlačit úvodní inicializační takty SFTP pro

(diffie-hellman-group1-sha1/ssh-rsa/aes128-ctr/hmac-sha2-256)

a konstatuji, že se bohužel liší podstatně od původní komunikace i
v následujících krocích po initu. Dá se říci, že je to jiný jazyk.
**********************
27.06.2018
Jeden den jsem hledal příčinu, proč server SFTP neodpoví po prvním šifrovaném
paketu. Náhodně jsem přišel na to, že zatímco přišly 4 pakety, server
je považoval za 3 pakety. Protože číslo paketu je součástí MAC kontrolního
součtu, tak součet serveru nevyšel. Takže se neozval. Žádná chybová zpráva
se nekoná!
Navíc všechny MAC KS jsou výsledkem složitého hešování SHA256, takže změna
4 na 3 dá zcela jinou sekvenci 32 binárních znaků. Toto uvádím jen pro představu,
jak se nějaký protokol těžko realizuje a protlačuje. Není jasné, zda je paket
chybně šifrován nebo má chybný KS. Jedná se o

(diffie-hellman-group1-sha1/ssh-rsa/aes128-ctr/hmac-sha2-256)

což je jednodušší vaianta nadstavby nad původně zrealizovanou

(diffie-hellman-group-exchange-sha256/ssh-rsa/aes128-ctr/hmac-sha2-256)
**********************
25.06.2018
Začal jsem řešit druhou (asi starší s SHA1) metodu u SFTP, která mně vyšla
u dvou veřejných testovacích serverů. První umí to, co umí i WR586,
(diffie-hellman-group-exchange-sha256/ssh-rsa/aes128-ctr/hmac-sha2-256)
se zbývajícími se zatím nedorozumím.

Zatím jsem zvládl úvodní komunikaci (diffie-hellman-group1-sha1) se shodným
kontrolním součtem úvodní komunikace se serverem (KS zašifrovaný RSA metodou
soukromým klíčem serveru). Veřejný klíč serveru je součástí úvodní komunikace.

Jeden server umí mezi jiným:

(diffie-hellman-group1-sha1/ssh-rsa/aes128-ctr/hmac-sha2-256)

a druhý

(diffie-hellman-group1-sha1/ssh-rsa/aes256-cbc/hmac-sha1)

Je to dost zdlouhavá a psychicky náročná práce.
**********************
V SFTP připuštěn i textově zadaný server:

.opensftp "test.rebex.net:22","demo","password",1

možno i

.opensftp "195.144.107.198:22","demo","password",1

a vypořádal jsem se u tohoto serveru i s odřádkovaním před
každou odpovědí. Rovněž v testu na úspěch jsem zrušil
komparaci na "success", neboť tento server vrací "OK".
**********************
21.06.2018
V režimu de:x ve VST se nyní obrázky zmenšují se zachováním poměru
stran na zadanou velikost obrázku <počet řádků>x<počet sloupců>.
Dříve se zobrazil pouze levý horní roh původní velikosti.
**********************
15.06.2018
Pokud ve VST použijete pro obrázek formát:

obr 0r 1 1 0; <* velikost obrázku 0x0 *>

tak se nezobrazí a v režimu de:x pak můžete provést zobrazení v ATP
ve vhodné velikosti. Přitom lze standardně obrázek ve VST vyměnit.
**********************
31.05.2017
Původní kešování CMD je nahrazeno inteligentnějším systémem - drží se v
paměti posledních 50 použitých CMD. Původně pouze právě otevřená větev.
takže např.

@p1
@p1

se dvakrát otvíralo a četlo p1.
**********************
22.05.2017
Příkaz

pip <adresář>\*.*/dd/tr

smazal celý adresářový podstrom pod <adresář>. Prázdný <adresář> zůstal
zachovaný. Pokud chcete vymazat i <adresář>, můžete nyní míto /dd
použít /du.
**********************
Problém podpisu byl pouze pro 2. a další chod. Chyběla inicializace jedné
proměnné.
**********************
18.05.2018
Ne vždy je podpis správný, takže se vracím k předchozí verzi.

Ing. Havel z Vosa Znojmo zjistil jakási závadna hesla v programu
hesla.cmd. Bylo to způsobeno binární podobou hash v relaci. Po
přidání konverze .crypt_encode do tvaru B64 je to již O.K. viz
www.redap.cz/heslo.zip
**********************
17.05.2018
Tak jsem konečně na základě teorie zbytkových tříd pochopil Montgomery
multiplication a podpis jsem přepsal - místo dělení je násobení a shift.
Bohužel jako obvykle jsem místo 42.8 kB originálu zplodil pouze 4 kB.
**********************
13.05.2018
Příkaz

pip =<soubor>.zip/dc

se chybně v dávce ptal na přepsání souborů. Opraveno.
**********************
12.05.2018
Pokud byste chtěli najít nějaký řetězec v docx, pak vězte, že se jedná o zip
soubor (podobně xlsx) a je nutno:

copy <jmeno>.docx tmp.zip
pip =tmp.zip/dc
ret:=conv("Šantl",18)
.bopenr word\document.xml
del=$strlen
.bfind 0,'del',ret
;'$strlen'

to znamená, že text je zde uložen jako utf-8. Viz záhlaví document.xml.
**********************
10.05.2018
pip out.txt=c:\*.<cosi>/ln/tr

se na win7 a výše kousl na adresáři c:\windows\winsxs. Má to cca 33000 adresářů
se jmény kolem 100 znaků. To PIP paměťově nevydržel. Takže jsem tam dal
nestandardní velikost paměti - teď to projde a navíc po

pip out.txt=c:\*.<cosi>/ln/tr/ig

se adresář windows zcela ignoruje.
**********************
Funkce conv se dá využít nyní pro prohledávaní WORD souborů - texty v UTF16
- zde text dokument.

_mode bm.<*jinak se binární nuly v UTF16 převedou na mezery!*>
rad:=conv("dokument",19)
.bopenr <word>.doc
del=$strlen
.bfind 0,'del',rad
.bread '$strlen',vys:16
;'vys'
_mode bm:0.
**********************
08.05.2018
Funkci conv jsem naučil převod do UTF16 - pozor na zdvojnásobení délky!
**********************
18.04.2018
Rýpal jsem se v RSA podpisu kódování, dekódování. Originál pracuje
s "Monghomery multiplikative inverse". Já to zkusil podle prosté
teorie zbytkových tříd. Jednak pro malá čísla např. (37,209) a (73,209)
(soukromý a veřejný klíč) dává originál chybné výsledky. Můj prográmek
počítá správně. Pravdou je, že pro RSA 2048 bitů je trochu pomalejší
na mém stařičkém stroji 0.2 s oproti asi 0.03 s originálu. Velikostí
je ovšem nesrovnatelný s mými několika řádky. Pro EET to nemá valný
význam. Šlo spíše o ukojení mého ega - nerad mám ve WR něco, čemu zcela
nerozumím.
**********************
17.04.2018
Do CSV a ODBC jsem přidal při .codepage 6 změnu 0xa0 na mezeru.

U GRD jsem přidal za "Redapovská podmínka" - "Reset této podmínky"
********************
10.04.2018
Řešil jsem problém jednak chyného zdvojeného zobrazení věty pro režim AK,DE
v případě indexu + nemožnost couvat na aktualizované věty. Tento stav je od
nepaměti. Zřejmě se mně v minulosti nechtělo řešit tento problém a ani po
řešení nebyla poptávka. Nakonec lze problém řešit stávajícími prostředky:

1. Do RDA přidáme jednu číselnou (stačí jednobitová) položku - třeba AKT

2. Místo AK dáme do přepínačů PO:2 reprezentované řádky

.se(AKT- 0)
.co()
.se()

3. Do závěrečného PTB přidáme AKT=1

Konečně, nemá-li být uživatel zmaten přerovnáváním či mizením vět je dobré
použit subindex s prázdným seznamem třídících klíčů.

Pokud před VST položku AKT vynulujeme, může se uživatel vracet pouze na věty
pořízené v následujícím sezení.
********************
31.03.2018
Po úpravě SHA1, SHA256 a SHA512 + kryptografie pro EET jsem se dostal s velikostí
wr587.exe pod velikost wr586.exe, i když toho první EXE umí o něco více.
********************
20.03.2018
Trochu jsem pošolichal cizí program na výpočet hash MD5. Možná, že je o něco
pomalejší, ale EXE je o 10 kB menší. Nicméně autor by ho po úpravě nepoznal.
********************
16.03.2018
V OPT připuštěna modifikace klíčů xm:x a ht:x na xm:x:8 a ht:x:8 vedoucí
k výstupu XML resp. HTM v kódu UTF-8. Doposud to bylo pouze Win 1250.
********************
15.03.2018
Zavedena funkce

n=cdpg("<vstupní soubor>","<výstupní soubor>")

detekující použitou codepage <vstupního souboru> - bude obsahem n a
do <výstupního souboru> převede data do KOI08. Čím delší vstup, tím
je pravděpodobnější, že to dopadne správně.
********************
28.02.2018
Nafukovací bafr jsem musil zařadit i do CSV kvůli početným, ale jednoznakovým
údajům.
********************
27.02.2018
Vzhledem k rozsáhlosti stahovaného PDF (1.5 MB) kolabovalo .https. Proto
jsem do WR587 přidal automatické nafukování příjmového bafru, který má
na počátku pouze 100 kB.
********************
26.02.2018
V CSV připuštěno až 2000 sloupců a uchozen případ oddělovače mezera.
*********************
25.02.2018
Nevím jak se vám to bude líbit, ale zanesl jsem do WR další část notace z C-čka.
Konkrétně:

n=1
a=-1; b=-1;
.if(n==1) {a=0; b=1; "ano";} .else {a=0; b=2; "ne";}
;'a' 'b'
.if(n==0) {a=1;
b=1;
"ano";}
.else
{a=2;
b=2;
"ne";}
;'a' 'b'
.if(n==0) {a=0;
b=0;
"ano";}
;'a' 'b'
.if(n==1)
{a=3; b=3; "ano";}
;'a' 'b'
.if(n==0)
{a=3; b=3; "ano";} .else {a=4; b=4; "ne";}
;'a' 'b'

Tudíž nerozlišuji .if(...)CRLF a .if(...) příkazy. Mizí tedy .begin a .end a
ano a ne příkazy jsou uzavřeny v hranatých závorkách. Může být přirozeně
jen ano. Geometrické rozložení příkazů na řádcích je zcela libovolné.
*********************
23.02.2018
Do .readhttps doplněna práce se staženými PDF soubory. Dosud jsem se k nim choval
jako k HTML a poničil jsem jejich obsah.
*********************
22.02.2018
Vzhledem k tomu, ze téměř všude chodí z minulosti pokračovací řádek pomocí \\,
dotáhl jsem to všude v ATP. Takže

.if(n==1)\\
a=1; b=1; "ano";\\
.else\\
a=2; b=3; "ne";
.if(n==1) "ahoj všichni rodní rodáci,\\
nazdar ostatní"; .else "nezdravím"

se interně převede na

.if(n==1) a=1; b=1; "ano"; .else a=2; b=3; "ne";
.if(n==1) "ahoj všichni rodní rodáci, nazdar ostatní"; .else "nezdravím"

U typu HM jsem použil příznak, který již existoval a nefungovalo pak správně sčítání.
Opraveno ve spolupráci s ing. Eidelpesem. Zdá se, že tento typ zatím nikdo
pořádně nepoužil.
*********************
21.02.2018
Tu licenci s obráceným lomítkem jsem zatím stáhl. Např.

cd \

šlo do kytek.
*********************
20.02.2018
Dnes jsem řešil nahodilé padání .direct_mail v RT. Ukázalo se, že v dokumentaci
je možnost ",SSL", ale mělo by být správně "SSL" v uvozovkách!
********************
19.02.2018
Uchozena licence, že když na konci řádku ATP je obrácené lomítko, tak
se k němu přilepí následující řádek. Např.

.if(n==1) "ahoj všichni rodní rodáci,\
nazdar ostatní"; .else "nezdravím"

nebo

.if(n==1)\
a=1; b=1; "ano"; .else a=2; b=3; "ne";

nebo

.if(n==1)\
a=1; b=1; "ano";\
.else\
a=2; b=3; "ne";

Řádek ATP ale nesmí překročit 30000 znaků.
********************
18.02.2018
Z důvodů symetrie doplněna funkce dc(x,y) zajišťující celočíselné
dělení bez nároku na hodnotu zbytku.
********************
17.02.2018
V TRZBA.ZIP na webu je zmodifikovaný program TRZBA.CMD pro WR587.
********************
16.02.2018
Ještě v Heslo.cmd lze psát:

.crypt_hash hes,"SHA512",heshsh
.if(text[1:2]=="Zo" || leer)
.begin
hes:=r.hes
.if(hes!=heshsh) "Špatně"; .exit
.else
r.hes:=heshsh

místo

.crypt_hash "<>hes.txt","SHA512","<>hes.hsh"
del <>hes.txt
.if(text[1:2]=="Zo" || leer)
.begin
_savebig r.hes,"<>hes2.hsh"
.bopenr #1,"<>hes.hsh"
.bopenr #2,"<>hes2.hsh"
.bcomp #1,#2,0,0,64
.if($eof) "Špatně"; .exit
.bclose #1,#2
del <>*.*
.else
_loadbig r.hes,"<>hes.hsh"
********************
16.02.2018
Ještě jsem v .cryp_encode v případě výstupu do proměnné vypnul odřádkovaní
po 48 vstupních znacích.
********************
16.02.2018
V příkazech .crypt_hash, .bintohex, .hextobin, .crypt_decode a .crypt_encode
se jede ze souboru do souboru. Jména souborů musí být v uvozovkách. Toho jsem
využil pro možnost místo souborů zadávat eventuálně ATP proměnnou. Např.

heslo:="Nazdar"
.bopenw heslo.dat
.bwrite -1,"Nazdar"
.bclose
.crypt_hash "heslo.dat","sha512","hsh.bin"
type hsh.bin
.crypt_hash heslo,sha512,hsh
;'hsh'
.bintohex "hsh.bin","hsh.hex"
typ hsh.hex
.bintohex hsh,hex
;'hex'
.hextobin hex,hsh
;'hsh'

V testovacím příkládku jsou vidět obě varianty a dávají stejný výsledek. Přirozeně
může být i na vstupu soubor a na výstupu proměnná nebo obráceně.

V prográmku trzba.cmd je nyní

.crypt_decode pkp,pkpbin
.crypt_hash pkpbin,SHA1,pkphsh
.bintohex pkphsh,bkp0
bkp:=bkp0[1:8]+"-"+bkp0[9:16]+"-"+bkp0[17:24]+"-"+bkp0[25:32]+"-"+bkp0[33:40]

místo

.open pkp.b64
.data 'pkp'
.close
.crypt_decode "pkp.b64","pkp.bin"
del pkp.b64
.crypt_hash "pkp.bin","SHA1","pkp.hsh"
del pkp.bin
.bintohex "pkp.hsh","bkp.hex"
del pkp.hsh
.openr bkp.hex
.read bkp0
.close
bkp:=bkp0[1:8]+"-"+bkp0[9:16]+"-"+bkp0[17:24]+"-"+bkp0[25:32]+"-"+bkp0[33:40]

********************
15.02.2018
Minulý týden jsem řešil problém nekompatibility výstupu z TBN na tiskárnu
a do PDF při vyplňování formuláře (obrázek). Problém byl v tom, že obrázek
měl formát přesně A4. Tisk ve WR začíná na nulové lince (spodek písmen)
vzdálené od horního okraje o výšku fontu nad nulovou linkou. WR nevadí,
že se obrázek dole ořízne (bílý okraj obrázku nenese informaci), ale
Adobe to nepřipustí a obrázek poněkud zmenší, aby se neořezával.
A nekompatibilita je na světě. Pomohlo xy! 0# 0#; před obrázkem, který se pak
kreslí opravdu jak pro tiskárnu tak pro PDF od nulové souřadnice.
********************
15.02.2018
Pro usnandnění práce se šifrovanými RDA a indexy je nyní možno zadat

.secret "<cesta1><jmeno1>","<cesta2><jmeno2>",...

analogie syntaxe _openc včetně udržovaných indexů (x__).

Po .password% <číslo> se automaticky všechny indexy a RDA uvedené v seznamu
za .secret šifrují a na nic jiného se šifrování nevztahuje.
********************
08.02.2018
Ukázalo se, že při latentním heslu (.password- ) se nepracovalo správně
se zašifrovaným indexem.
**********************
05.02.2018
Pro usnadnění programování se šifrovanými soubory je zaveden příkaz

.password% <max 9 cifer číslo>

číslo se bere hjako heslo a zároveň se interně provede .password-, tj. heslo
je latentní. Pokud byste chtěli zašifrovat nějaké RDA, pak musíte

.password+
%zuz
<soubor>
<soubor>
;
//
%
.password-

<soubor> je zašifrován a vše ostatní jede v otevřeném módu. Pokud byste ale
někde udělali:

%zuz
<soubor>
<soubor>
;
//
%

pak <soubor> již nebude zašifrován.
*********************
05.02.2018
Pokračoval jsem v uchození jednak v ATP

r.ret|="abc"

a v instrukci

ret|="abc"

bohužel nejde

ret+="abc"

je to jednak do této doby funkční příkaz - ret se převede na číslo a přidá se
k němu číselná hodnota "abc". Smysl nedává ani ret+:="abc", protože za řetězec
se přidá "abc" a pak se ořízne na délku ret - "abc" zmizí.
*********************
05.02.2018
Ve snaze znemožnit smysluplné prohlížení paměti PC bylo provedeno šifrování
informace při kešování souborů - původně byl částečný obsah souboru po delší dobu
dostupný v paměti.
*********************
03.02.2018
Dále po všech uvolnění alokované paměti je paměť vynulována.
*********************
03.02.2018
Pro jistotu jsou nyní soubory na RAM disku zašifrované, takže odezíraním
paměti není nic rozumného vidět. Pouze na krátké okamžiky se někde v paměti
nějakým způsobem objevuje něco čitelnějšího. Tak je to ale i v jiných
konkurenčních úlohách. Takže např. v kombinaci se zmíněným šifrováním Windows
vybraných složek, lze lokální citlivé informace ochránit. Doporučuje se
zejména na přenosných a tím i snadno zcizitelných počítačích.
*********************
01.02.2018
Jednak znovu zdůrazňuji, že název RAM disk nemá nic společného s původním
RAM diskem. Soubory jsou nějakým způsobem uloženy v paměti v mé správě a
kromě běžící úlohy na ně nikdo nevidí, ostatní ani netuší, kde se v paměti
nacházejí. Struktura nemá nic společného s file systémem Windows! Dnes jsem
pro jistotu přidal mazání alokované paměti souborem při vymazání souboru
nebo pamětí všech souborů po ukončení úlohy, aby nebylo možno z fragmentů
paměti získat původní informaci.
*********************
01.02.2018
Z důvodu výzkumu šifrování složek ve Windows jsem se rozhodl pořídit další účet
na mém PC. Po zadání jména mně bylo sděleno, že alespoň jeden účet musí mít
práva administrátora. Takový účet jsem ale měl, takže jsem to nicméně odklepl
a přišel jsem o původní přístup, nastaveni plochy, přístup k poště atd. Když
už se stalo, vytvořil jsem další účet s omezenými právy a zkusil nastavit
šifrované složky v jednom i druhém účtu. To jde a co je zašifrováno není možno
prohlížet z druhého přihlášení (oboje přes heslo). Takže můžete uživatelům
vytvořit soukromou složku, do které budou vidět pouze oni. Pokud jsem zaškrtl
použít i pro podsložky, došlo k okamžitému šifrování všech souborů, v opačném
případě se šifrovaly pouze nově kopírované soubory do této složky.
*********************
31.01.2018
Uchodil jsem zatim v pouze v ATP možnost zkrácení zápisu:

s:=s+t na s+=t

a

s:=s|t na s|=t

přirozeně obě proměnné musí být řetězcové a tudíž existovat.
*********************
30.01.2018
?? Dalo by se z hash hesla odvodit nějaký klíč a tím šifrovat všechny soubory.
Při otevření by se soubor dešifroval na RAM disk a při uzavření zašifroval
na původní místo. Způsob šifrování by byl znám pouze mně. Nevýhodou by bylo,
že při pádu Windows by byly aktualizace ztraceny. Výhodou by bylo, že veškeré
lokální soubory by byly na disku nečitelné. Pro společná data na serveru by
ovšem musil být společný klíč a to by byl problém s utajením. Takže výše
navržený způsob utajení by se hodil pouze pro lokální data.
*********************
29.01.2018
Představa ukládání hesel v nějakém centrálním RDA pro různě přihlášené uživatele
je na www.redap.cz/heslo.zip. RAM disk je vhodný, protože na něj nikdo jiný
nevidí.
*********************
29.01.2018
Jestě k tomu, že pokud si ukládáte hesla uživatelů, tak obecně se to dělá tak,
že se z hesla udělá hash (máme MD5, SH1, SHA256 a SHA512) a ten se uloží. Pak po
zadání hesla se vypočte hash a porovná se s uloženým hash. Tedy heslo nikde
nefiguruje.
*********************
29.01.2018
Uvědomil jsem si, že Windows nabízejí šifrování složek. Buď jsem to nepochopil
nebo je to tak, že šifrované složky určuje Administátor a ten do toho může
kopírovat soubory (přitom se zašifrují). Když jsem se přihlásil jako uživatel,
tak pro nakopírování souboru do šifrované složky jsem musil zadat heslo
administrátora a soubor byl pak pro mne nečitelný. Nevím, zda to nesouviselo s tím,
že uživatelský účet byl bez hesla.
*********************
29.01.2018
Vzhledem ke GDPR nevím, zda by se nehodilo nějaké modernější šifrování dat.
A pokud ano, tak konkrétně kde.
*********************
29.01.2018
Kdysi pro čtení z DBF se udělal převod textu ve tvaru DT do našeho DT.
Problém byl ale v tom, že se předpokládalo formátované DT - tečky, mezera
a za mezerou číslo vše na pevných pozicích. V rámci CSV je DT ve volném
formátu. CSV sloupec s DT považuje za text. V následujícím ZUZ nebo
v aritmetice nad výstupní větou lze nyní psát <dt>=dadt(<csv dt>) a dojde
k převodu novou funkcí textu <csv dt> do položky typu <dt>.
********************
23.01.2018
Dokončena úprava instrukce CSV ve spolupráci s RNDr. Květoněm z ČHMÚ, který
zpracovává velké objemy CSV souborů (meterologická data).

Nový popis:

Instrukce CSV čte tzv. CSV struktury z Excelu ap.

P a r a m e t r y CSV

CSV funguje a má parametry častečně jako ZUZ, s tím, že na vstupu má soubor CSV.
Vstupní soubor je několika
průchody analyzován. Hledají se čísla a datumy ve sloupcích. Potom se
stanoví nejčetnější počet sloupců v řádcích CSV (může v tom být také uložen
normální sestava!) a řádky s jiným počtem se vynechají, pokud není přepínači
určeno jinak. Stadardním oddělovačem je středník. Lze ho přepínačem OD změnit.

Přepínače:

"ai" zapnout automatickou generaci názvů sloupců ve tvaru Sxxx,
xxx je číslo 001, 002, ...

"di:x" možnost lokálně zadat délku identifikátorů (standard 12 znaků)

"ch" si můžete nechat vypsat řádky, které se vynechávají do souboru se
jménem shodným s CSV, ale příponou .CHB. V prvním chodu se do protokolu
zapisují řádky s odchylným počtem sloupců od průměrného počtu a ve druhém
řádky které mají správný počet sloupců, ale některá sloupcová hodnota
neodpovídá průměrnému charakteru sloupce DD nebo ND. Má tedy charakter RE.

"mx:1" - vypne algoritmus vynechání menšího počtu řádků s jiným počtem sloupců.

"mx:2" - nehomogenní sloupce se deklarují jako RE/RV, jinak se řádky s odlišnými
hodnotami vynechají a eventuálně se zapíší do chybového protokolu.

od:ddd" - oddělovač údajů. Implicitně středník.

"ov" - operace nad vstupem - jako ZUZ

"oz" - operace nad výstupem (standard) jako ZUZ

"pr:n" přeskočit prvních n-1 řádků (n=1 se ignoruje!), s tím,
že hlavička je na n-tém řádku.

"ps" - prázdné sloupce se ponechají jako prázdné textové údaje, jinak
se vypustí.

"q5:xy" nyní i 81 a 91

"re" - všechny údaje se považují za textové a deklarují se
RV(do 255 znaků)/RE.

"re:2" - všechny údaje se považují za textové
a deklarují se RE.

Sloupce s datumy a čísly se deklarují v pomocné RDF jako DD a ND, ostatní jako
RV/RE. U čísel nevadí desetinná čárka, účetní formát i s měkkými mezerami.
U datumů nevadí různé oddělovače. Akceptuje se DDxMMxRRRR a MMxxDDxRRRR
a RRRRxMMxDD. Akceptuje se i datum ve volném formátu 1.1.2011|31.1.2011|1.11.2011
tj. případy s 8 a 9 znaky místo 10.

Identifikátory se berou z úvodního řádku (obecně nemusí být první) a to
v maximální délce dle _mode di:x. (implicitně 12). Kódová stránka se
určuje přepínačem "q5:xy". Pokud je struktura divočejší, lze pomocí přepínače
pr:n přeskočit několik úvodních řádků.
Pokud jsou texty identifikátorů nesmyslné nebo úplně chybí, lze pomocí
přepínače ai zapnout automatické pojmenování sloupců.

V případě AI+PR:n se předpokládá, že na n-tém řádku je přímo hlavička,
která je ale ignorována.

Např.

/n
_mode di:20.
%csv
q5:61,ai,pr:6.
c:\tmp\apsoft\money2~1.csv
(=) pokus
;
//
%
inf pokus
/a

a soubor začíná

/n
Obratová předvaha;;;;;;;;
;;;;;;účetní rok:;2010;


;;Počáteční stav;;Obraty za období;;Zůstatek;;
Účet;Středisko;MD;D;MD;D;MD;D;
013000;;11 558,00;0,00;0,00;0,00;11 558,00;0,00;
01300x;;11 558,00;0,00;0,00;0,00;11 558,00;0,00;
0130xx;;11 558,00;0,00;0,00;0,00;11 558,00;0,00;
...
/a

Vytvoří POKUS.RDA se strukturou:

/n
pokus.rda
S001 rv 6 58
S002 dd 6 2
S003 dd 2 2
S004 dd 2 2
S005 dd 2 2
S006 dd 6 2
S007 dd 2 2
$
/a

mx:2 pomůže např. řešit neobvyklý případ kdy sloupec telefon je numerický,
ale v jednom případě je "000000000,111111111" a k tomu "+420000000000"
což by se bez přepínače RE pojalo jako číslo s 12 místy před a 9 za desetinnou
tečkou a vylezlo to z rozsahu. V tomto případě se nyní řádek se dvěma čísly
bez přepínače RE vynechá z důvodů odchylky od normálu.

Textové údaje se deklarují jako RV pro délku <256 znaků jinak jako RE.
Pokud by to vadilo, lze použít přepínač re:2 vše je pak RE.
********************
11.01.2018
Zkoumáním příkazu .setprns konstatuji, že příručka neodpovídá skutečnosti.
Správně v A.2.15:

.setprns "<>|<jméno prn>",<0|landscape>[,<číslo formátu papíru>]

v přírucče chybí možnost volby papíru. V A.4.4.10 je ale popis správný.
********************
11.01.2018
Ve Win10 poslední vydání přestal chodit .sendmail i posílání z Acrobata. Řešení je

1. V adresáři C:\Program Files\Common Files\System\Msmapi\1029 (byl
tam místo adresáře 1033) jsem přejmenoval soubor MSMapi32.dll na
MSMapi32.old

2. Restart PC

účinné dle ing. M. Nováka z MINOV.
********************
10.01.2018
Trochu si hraji s instrukcí CSV. Z pohledu uživatele je to v dosavadním provedení
černá skříňka. Proto jsem do ní vložil jednak výpisy intervalů řádků se stejným
počtem sloupců a pak řádků+číslo sloupce, jehož hodnota v rámci numerického nebo
datového sloupce je jiného typu. Při přepínači CH, se vytvoří soubor se shodným
jménem s CSV, ale s připonou .chb, obsahující řádky, které se vynechaly.

Pokud dáte přepínač MX:2, pak se všechny nehomogenní sloupce deklarují jako RE/RV.
********************
08.01.2018
Protože se mně dostal do ruky soubor XML, kde hodnoty byly obkrouženy apostrofy
místo uvozovkami a prohlížeč XML byl spokojen, připustil jsem v instrukci XML
i alternativu s apostrofy.
********************
01.01.2018
Nevím, zda ještě má smysl pokračovat ve vývoji WR.