Home


Aktualizováno 13.02.14 18:32:15
**************************
13.02.2014
POZOR!!! RAM disk nefungoval, pokud nebyla povelena dlouhá jména!!! to jsem
dnes napravil.
**************************
09.02.2014
POZOR! Dnes jsem měl na stole zdánlivě nefunkční příklad na _read+ rprom a pak
_write rprom,-1. Problém spočíval v tom, že uživatel změnil klíč první
věty tak, že se stala poslední. Protože _read+ čte další větu za poslední
načtenou větou, nahodilo to $eof=true - další věta za poslední již není,
čehož si přirozeně uživatel v příkladu nevšímal a tak druhý zápis skončil
s chybou.

Z toho plyne poučení, že pokud přes index chcete provést aktualizaci celého
souboru, pak musíte zvolit složku indexu, ve které neporušíte při aktualizaci
původní setřídění složky - vždy vyhoví složka s prázdným seznamem klíčů!
**************************
Nyní po cd <> je <logdev>="<>", takže se dá detekovat, že jsme implicitně
na RAM disku <loguic> se nemění - nemá smysl.
**************************
31.01.2014
Na základě zaslaného příkladu lze konstatovat, že obrázky JPG nelze zobrazit
ani vytvořit na RAM disku. Nejde ani LST nad souborem na RAM disku, pokud
soubor obsahuje JPG obrázky.

Je to dáno skutečností, že procedury dekomprese i komprese JPG jsou převzaté
procedury a soubory s JPG si otvírají přes API Windows a přirozeně to náš
RAM disk neumí!!
*************************
30.12.2013
Ještě jsem se vrátil k revizi QR kódů. Zjistil jsem drobnou odlišnost od
standardu, nemající ale vliv na čitelnost QR kódu. Problémem při ověřování
správnosti je skutečnost, že např. "Hello World" zakóduje každý on line
generátor jinak. Některý neumožňuje nastavení error levelu L, M, Q a H a
dále je problémem výběr optimální masky z 8 možností - ohodnocení je dost
složité a dosti vágně popsané, takže to každý autor pojme po svém. Takže
na zakódování výše uvedeného textu existuje 4*8 "správných" obrázků nebo
přesněji pro daný error level 8 správných obrázků.

Navíc na chart.apis.google.com mně vyjde QR kód pro Q 25x25, ale já vygeneruji
QR kód 23x23, což je korektní a více optimální. Čtečka vyhodnotí oba
obrázky jako "Hello World". Takže je opravdu těžké si absolutní správnost
optimálního QR kódu někde ověřit.
*************************
20.12.2013
Pokud vám uživatelé reklamují od dneška nefunkčnost kontroly plátců DPH,
pak vězte, že závada je na straně MFČR.
*************************
08.12.2003
Připomínám, že kromě jiného ve wr582 přibylo:

- podpora dotykové obrazovky

- generování QR kódů

- vylepšená keš

- RAM disk

*************************
05.12.2013
Na web dána první verze dokumentace k WR582 - nuto si stáhnout i WR582, kde je
pozměněn odkaz z DOK581.XHL/CHM a DOK582.XHL/CHM.
*************************
25.11.2013
Po instalaci Exploreru 11 do Win7 a Win8 přestane správně fungovat FTP přístup,
konkrétně zápis. Při každém otevření projde pouze zápis prvního souboru. Ve wr582
uděláno zatím opatření, že se FTP přístup zavře a znovu otevře v případě neúspěchu.
Problémem je ale to, že se shodí cesty a zápis ukazuje do rootu na FTP serveru.
Proto přidána ještě pamět na poslední dvě cesty. Není to tedy obecné!
*************************
23.11.2013
Přidán další význam poslednímu paremetru u příkazu .openftp - nepovinné číslo portu.

.OPENFTP "<jméno serveru>","<uživatel>|anonymous","<heslo>"
[,{<passive mode>|port}]

pokud je parametr >1, považuje se za číslo portu - standardně 21.
*************************
07.11.2013
V posledním období jsem odstraňoval zejména problémy v nové dynamické keši a RAM disku
na základě hlášení z EKOSOFTu Krásná Hora.
*************************
01.11.2013
S příkazem .disable cache je nyní spojena i likvidace statických keší vytvořených
v rámci příkazu _opnec ... - tedy jakoby zrcadlové _closec a dynamických keší
zavedených ve wr582. Zároveň kontrola na změnu souboru, která byla s přesností
po vteřinách, je nyní zpřesněna na milisekundy. Nadto, protože milisekundy
jsou autonomní pro každé PC, je prakticky nemožná shoda tohoto údaje ze dvou stanic,
i kdyby v rámci jedné milisekundy byl soubor 2x vytvořen ze dvou stanic.
*************************
25.10.2013
Zaveden příkaz

cd <>

zavádějící implicitní disk RAM disk.
*************************
27.09.2013
Včera a dnes jsem léčil PRO nad souborem cca 300 MB a 3 miliony řádků
***********************
26.09.2013
Chcete-li, aby Vám zobecněná definice virtuální tabulky fungovala v instrukcích
i ATP, nepouživejte v ní pomocné proměnné! Ty ATP nezná. Např.

_openrw radek "radek.x00">
"hlav"<
#cv!
id_hlav.
.se()
.bco
.if( polo < 20 ) qa+=vst(1000,1) .else qa+=vst(1000,2)
pocet+=1
.if( polo > nejvyssi ) nejvyssi=polo;
.eco

ale např.

_openrw radek "radek.x00">
"hlav"<
#cv!
id_hlav.
.se()
.bco
.if( polo < 20 ) vm+=vst(1000,1) .else vm+=vst(1000,2)
pocet+=1
.if( polo > nejvyssi ) nejvyssi=polo;
.eco
***********************
23.09.2013
Aby bylo možno rozlišit v novém %MNU ESC od pravého tlačítka myši a klávesy ESC,
je nyní v $alphan po opuštění %MNU v prvém případě 'y' a ve druhém případě 'n'.
***********************
03.09.2013
Doplněny příkazy:

.signpdf "-" zachová certifikát, ale pdf nepodepíše
.signpdf "+" obnoví podepisování dle .signpdf "<certifikát>"

Mělo by šetřit zadávání PIN při střídání podepsaných a nepodepsaných dokumentů
jedním uživatelem.
***********************
01.08.2013
Na základě příkladu od fy JUMP v CSV jednak opravena přeměna mezer v identifikátoru
na podtržítka a jednak přidán přepínač RE - všechny položky textově. Řeší
se tak neobvyklý případ kdy sloupec telefon je numerický, ale v jednom případě
je "000000000,111111111" a k tomu "+420000000000" což se 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.
****************
24.07.2013
Ve spolupráci s Ekosoftem dotahuji operace nad RAM diskem.

Na základ příkladu od ing. Skoumala dopracován adresní
refr() pro = otevření RDA ve vst viz následující příklad:

cls
_openw r (~dokl(rj:10:0),obj(rj:20:0),nazevhl(re:50:0),popolo(dd:4:0),polocel(dd:4:0)) hlav
r.dokl:="1"; r.obj:="1"; r.nazevhl:="1"; r.popolo=1; r.polocel=1; _write r 0;
r.dokl:="2"; r.obj:="2"; r.nazevhl:="2"; r.popolo=2; r.polocel=1; _write r 0;
r.dokl:="3"; r.obj:="3"; r.nazevhl:="3"; r.popolo=3; r.polocel=1; _write r 0;
r.dokl:="4"; r.obj:="4"; r.nazevhl:="4"; r.popolo=4; r.polocel=1; _write r 0;
r.dokl:="5"; r.obj:="5"; r.nazevhl:="5"; r.popolo=5; r.polocel=1; _write r 0;
r.dokl:="6"; r.obj:="6"; r.nazevhl:="6"; r.popolo=6; r.polocel=1; _write r 0;
r.dokl:="7"; r.obj:="7"; r.nazevhl:="7"; r.popolo=7; r.polocel=1; _write r 0;
r.dokl:="8"; r.obj:="8"; r.nazevhl:="8"; r.popolo=8; r.polocel=1; _write r 0;
r.dokl:="9"; r.obj:="9"; r.nazevhl:="9"; r.popolo=9; r.polocel=1; _write r 0;
_close r
tri hlav|#cv.
_openw r (~id_hlav(dd:8:0),polo(dd:4:0),nazevra(re:50:0)) radek
r.id_hlav=1; r.polo=1; r.nazevra:="1"; _write r 0;
r.id_hlav=2; r.polo=2; r.nazevra:="2"; _write r 0;
r.id_hlav=3; r.polo=3; r.nazevra:="3"; _write r 0;
r.id_hlav=4; r.polo=4; r.nazevra:="4"; _write r 0;
r.id_hlav=5; r.polo=5; r.nazevra:="5"; _write r 0;
r.id_hlav=6; r.polo=6; r.nazevra:="6"; _write r 0;
r.id_hlav=7; r.polo=7; r.nazevra:="7"; _write r 0;
r.id_hlav=8; r.polo=8; r.nazevra:="8"; _write r 0;
r.id_hlav=9; r.polo=9; r.nazevra:="9"; _write r 0;
_close r
ind hlav|hlav.x00|dokl&.
ind radek|radek.x00|id_hlav,polo.

_openrw hlav "hlav.x00"#[hlav]
#cv/id_hlav.

%vst
.;******************************************************************************
RF,bp.
hlav=
.; hlavni okno -----------------------------------------------------------------
{ho|r1,1,1,6,50,<15500>,<12700>,"1.Hlavicka",""}
.pr(
)
.co()
{-1#,-2#,0,0,<15500>}
<06000>,<11000>,<27100>,<27500>,<14700>,<06000>,<27100>,<11700>
.gpr(dokl,obj,nazevhl,popolo,polocel.
Doklad ##########
Objednávka ####################
Popis #######################################
Poslední #### ####
)
[popolo,polocel,]
.;------------------------------------------------------------------------------
dokl
/
.bpr
.co(qa+=refr(3);)
.epr
.pr()
/
.; zaverecny kontrolni blok
.bpco
.epco
.;
.;******************************************************************************
rf,bp,DE:1,VI:2.
"radek.x00"#>[radek]
#cv/id_radek.
id_hlav.
"hlav"
#cv!
radek.id_hlav.
.; hlavni okno -----------------------------------------------------------------
{ho|r1,7,1,14,50,<03000>,<03000>,"2.Položky",""}
.pr(xt "<12700>Polo|Popis " r;)
.co()
{-1,0,0,0,<03000>}
<06000>,<11000>,<27100>,<27000>,<14700>,<23000>,<27100>,<11700>
.gpr(polo,nazevra.
#### #############################################
)
/
.; zaverecny kontrolni blok
.bpco
.epco
.;******************************************************************************
RF,BP,DE:1,VS,en:2.
hlav=
.; hlavni okno -----------------------------------------------------------------
{ho|r1,1,51,10,30,<03000>,<03000>,"3.Seznam",""}
.pr(xt "<12700>Doklad |Objednávka " r;
)
.co()
{-1,0,0,0,<03000>}
<06000>,<11000>,<27100>,<27000>,<14700>,<23000>,<27100>,<11700>
.gpr(dokl,obj.
########## ###################
)
dokl
/
.bpco
qa+=refr(1)
.epco
.pr()
/
.; zaverecny kontrolni blok
.bpco
.epco
%

_close hlav
.exit
****************
06.07.2013
Poprvé sestavena 64 bitová verze WR82X64.EXE
********************
Přidán příkaz

.external_hotkey <Virtual Key>[,[A|C|S|W]]

zavádějící globální horkou klávesu. Pokud v jiném programu je tato
klávesa s odpovídající kombinací Alt, Control, Shift a Win klávesou
stisknuta, ve WR582 je jakoby přijat kód klávesy 7777. Např. čekání
na aktivaci po <Alt F7>:

.; Virtuální kód klávesy F7 + Alt
n=0x76;
.external_hotkey 'n',A
.do()
.test $key
.if($strlen==7777) .break
.pause 1
.end_do
.read $key
; konec


Kódy virtuálních kláves jsou:

VK_LBUTTON (01) Left mouse button
VK_RBUTTON (02) Right mouse button
VK_CANCEL (03) Control-break processing
VK_MBUTTON (04) Middle mouse button (three-button mouse)
VK_XBUTTON1 (05) Windows 2000/XP: X1 mouse button
VK_XBUTTON2 (06) Windows 2000/XP: X2 mouse button
VK_BACK (08) BACKSPACE key
VK_TAB (09) TAB key
VK_CLEAR (0C) CLEAR key
VK_RETURN (0D) ENTER key
VK_SHIFT (10) SHIFT key
VK_CONTROL (11) CTRL key
VK_MENU (12) ALT key
VK_PAUSE (13) PAUSE key
VK_CAPITAL (14) CAPS LOCK key
VK_ESCAPE (1B) ESC key
VK_SPACE (20) SPACEBAR
VK_PRIOR (21) PAGE UP key
VK_NEXT (22) PAGE DOWN key
VK_END (23) END key
VK_HOME (24) HOME key
VK_LEFT (25) LEFT ARROW key
VK_UP (26) UP ARROW key
VK_RIGHT (27) RIGHT ARROW key
VK_DOWN (28) DOWN ARROW key
VK_SNAPSHOT (2C) PRINT SCREEN key
VK_INSERT (2D) INS key
VK_DELETE (2E) DEL key

Znaky 0-9 a A-Z standard (pouze velká písmena!)

VK_LWIN (5B) Left Windows key (Microsoft Natural keyboard)
VK_RWIN (5C) Right Windows key (Natural keyboard)
VK_APPS (5D) Applications key (Natural keyboard)
VK_SLEEP (5F) Computer Sleep key
VK_NUMPAD0 (60) Numeric keypad 0 key
VK_NUMPAD1 (61) Numeric keypad 1 key
VK_NUMPAD2 (62) Numeric keypad 2 key
VK_NUMPAD3 (63) Numeric keypad 3 key
VK_NUMPAD4 (64) Numeric keypad 4 key
VK_NUMPAD5 (65) Numeric keypad 5 key
VK_NUMPAD6 (66) Numeric keypad 6 key
VK_NUMPAD7 (67) Numeric keypad 7 key
VK_NUMPAD8 (68) Numeric keypad 8 key
VK_NUMPAD9 (69) Numeric keypad 9 key
VK_MULTIPLY (6A) Multiply key
VK_ADD (6B) Add key
VK_SEPARATOR (6C) Separator key
VK_SUBTRACT (6D) Subtract key
VK_DECIMAL (6E) Decimal key
VK_DIVIDE (6F) Divide key
VK_F1 (70) F1 key
...
VK_F12 (7B) F12 key
VK_NUMLOCK (90) NUM LOCK key
VK_SCROLL (91) SCROLL LOCK key
VK_LSHIFT (A0) Left SHIFT key
VK_RSHIFT (A1) Right SHIFT key
VK_LCONTROL (A2) Left CONTROL key
VK_RCONTROL (A3) Right CONTROL key

POZOR!!

n=numb("X")
.external_hotkey 'n'

bude hotkey klávesa X - Alt, Ctrl, Shift a Windows
klávesy nesmí být současně s klávesou X stisknuty!
********************
21.05.2013
Ve VST je nápověda odjakživa brána jako toolbar. Najetím na text se část textu
orámuje a cca po 1s se objeví bublinka. To neplatilo ale pro návovědu pro
text Zapsat. Nyní přidáno okamžité orámování "tlačítek" a zprovozněny
tlačítka i u Zapsat.
********************
26.05.2013
Když místo +M5 v init5w. dáte +L5, začne se pip /li chovat jako pip /ln
a .lnextn jm,<soubor> vracel ve jm jméno i s cestou a v lname nic. Nyní
vrátí ve jm pouze dlouhé jméno a v lname dlouhé jméno i s dlouhou cestou.
********************
24.05.2013
Ve smyslu závěrů ze školení v Plzni dán do ZUZ přepínač "MA" malá písmena,
který způsobí zrušení case sensitiv u výstupní tabulky. Tak se přepíší
stejnojmenné položky ve smyslu shody po převodu na malá písmena.

Opraveno CPO, kdy nyní při case sensitive neodmítá identifikátory lišící se
pouze velikostí písmen.
********************
17.05.2013
Na základě diskuse na školení v Plzni byla přepracována filosofie dotyku
v případě existence připojené klávesnice.

1. Pro systémy nižší než Win7 se nepřepokládá podpora dotykové obrazovky.

2. Po prvním stlačení libovolné klávesy se přestanou nabízet grafické klávesnice
a logická klávesnice. Ikony vypadnou i z horního menu a přejde se na jejich
zmenšenou podobu. Je-li taková klávesnice již aktivována, po stlačení
libovolné klávesy zhasne a nadále se přepokládá vstup pouze z klávesnice.

3. Toolbary, menu a jiné grafické prvky lze nadále ovládat dotykem.
********************
U QR kodů při tisku provedena změna kódování rozměrů a to:

<abc93>, kde c je tzv. error level 0-3 a ab oktalově <=37, tj. 31 dekadicky

udává velikost základní kostičky. Pro 00 je velikost 4 pixely, pro 37 je 4+31=35 pixelů.
********************
16.05.2013
Na základě odsouhlasené úpravy na školení v Plzni, plácačky .pdmen napravo
zůstavají v aktivním okně - původně mohly dosáhnout až okraje základního okna.
********************
29.04.2013
V XML jak jsem uvedl 03.04.2013 lze uvést před názvem souboru s daty v XML tvaru
i vlastní definici (obvykle rozšířenou o chybějící položky v konkrétním XML).
V tom případě jak v cestě k definici, tak k cestě k datům se mohou vyskytovat
mezery. Dodělána tedy možnost obě jména uzavřít do uvozovek.
********************
28.04.2013
Pomocí pip <Soubor s IDN>=<XMLRDA>/df bylo možno získat úplné cesty na položky
v XMLRDA. Uzly jsem záměrně vynechal. Ukázalo se, že i jména uzlů jsou zapotřebí
při návrhu zpracování XML dat. Proto jsem ignoraci výpisu uzlů vypustil.
*******************
21.04.2013
V souladu s čárovými kódy jsem zavedl:

naz<abc93> r 0;

kde 93 značí QR kód a c=0,1,2,3 - L, M, Q, H error level a (a&2)*4+b je velikost
kostičky v pixlech. Pro formát 0 se bude obecně měnit celková velikost QR kódu
v závislosti na délce textu i třeba nepřítomnosti malých znaků, takže se
vejdeme do čislice, velká písmena a pár výše uvedených zvláštních znaků.
*******************
18.04.2013
Ve font5w lze zadat ofset a "e" jako ekvidistantní. Nadále zadání ofsetu bez "e"
znamená, že poslední znak textu bude mít pouze šířku znaku a ne ofsetu - při vyplňování
formuláře se nesmaže poslední svislá linka okénka. S "e" i poslední znak má
šířku ofsetu a tak pak texty na sebe správně navazují, protože i poslední znak
má šírku ofsetu.
*******************
?? Mělo by smysl se zabývat implementací WR do systému Android? Tj. přenosem
aplikací na většinu tabletů evetuálně mobilů?
*******************
18.04.2013
QR snad úspěšně dokončen.
*****************
14.04.2013
9. den po zahájení prací (12 hodinové šichty) na QR kódech (patent fy Denso Wave Incorporated)
jsem docíl čitelnosti výsledku, i když to zdaleka není hotové. Přemýšlel jsem,
co by mělo být výstupem a nakonec jsem se rozhodl pro grafické okno - tedy jako
kdybyste dali příkaz:

#pictxms n,,,,,"<Soubor s QR kódem>"

pak máte v grafickém aparátu řadu možností co s "obrázkem" udělat.

QR kód se generuje pomocí příkazu:

#qrgen n,L|M|Q|H,<pixlů na bod>,"<Vlastní text>"[,maska]

n je číslo grafického okna, písmena L, M, Q, H představují úroveň tzv. error level
neboli schopnost skeneru dekódovat i mírně poničený obrázek. L je cca 7%, M cca 12.5%,
Q cca 25% a H cca 30%. Čím větší procento, tím je na stejnou informaci třeba větší
obrázek (tzv. verze 1-40 a obrázek 21x21 až 177x177 bodů). Ukládáme čísla 3 na 10 bitů,
čísla, písmena, mezeru a "$", "%", "*", "+", "-", ".", "," a ":" 2 na 11 bitů nebo
UTF-8 znak na 1 až 3 bajty.

Maska je číslo 0 až 7 a slouží mně zatím pro ladění. Správně se na základě ohodnocení
konkréního QR kódu má vybrat optimální maska.
********************
07.04.2013
Jednak jsem v minulých dnech zprovoznil ukázkovou aplikaci www.redap.cz/dekomp.zip,
která se po skoro roce po vytvoření stala díky různým úpravám WR nefunkční.

Dále jsem ve snaze zjednodušit syntetickou čast aplikace přidal do instrukce
INS přepínač im, který vyžaduje jméno uzlu jako sk:2 a funguje pro případ
syntézy (XMLRDA<-RDA)->XMLRDA. Novum je v tom, že se je nejprve snaha naplnit
z RDA položky v uvedném uzlu a teprve, když takové jméno v uzlu chybí, hledá
se eventuální shoda v celé XMLRDA. Tím odpadá pracný seznam odkud kam se má
co přenášet. Např. původně viz DEKOMP.ZIP:

%ins
!
x1
client
x1 x2
sqnr.
bno,sur,fir,tit,cit,str,num,pos,pnu,cnt,dat,nam,narcit!
bno,sur,fir,tit,cit,str,num,pos,pnu,cnt,dat,RELDP\eldp09\client\birth\nam,RELDP\eldp09\client\birth\cit.
!
//
%

a nyní

%ins
im.
x1
client
x1 x2
sqnr.
client.
!
RELDP\eldp09\client\birth\cit:=narcit
//
%

Rovněž byl zprovozněn aritmetický příkaz typu XMLRDA:=RDA. Příklad viz
o několik řádků výše.
********************
05.04.2013
Ing. Havel z VoSa Znojmo zkompletoval celý proces ověření plátce DPH s využitím i poslední
možnosti a to předhodit XML vlastní RDF. Řešení je na

www.redap.cz/dott.zip

i se změnou zkušební URL na ostrou URL.
*******************
04.04.2013
Podařilo se zakomponovat metodu SOAP do .readhttp, takže návod na kontrolu
plátce DPH nyní vypadá takto:

.readhttp "mfwwwit-1.mfcr.cz","/adistc/axis2/services/rozhraniCRPDPH.rozhraniCRPDPHSOAP"#"d.xml","dphodp.xml"

obsah d.xml je

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<StatusNespolehlivyPlatceRequest
xmlns="http://adis.mfcr.cz/rozhraniCRPDPH/">
<dic>445522999</dic>
<dic>8855229999</dic>
<dic>7755229999</dic>
<dic>010101010</dic>
</StatusNespolehlivyPlatceRequest>
</soapenv:Body>
</soapenv:Envelope>

U metody POST jsme měli "!", indikace SOAP je tedy "#" před souborem s dotazem.
*******************
03.04.2013
Ukázalo se, že obecně při přepisu XML do RDA nemusí v XML být některé položky
uvedeny a pak se obecně mohou naplnit nějakými jinými hodnotami ze stejnojmenných
položek. Proto jsem do XML přidal možnost uvést konkrétní definici, podle které
se data mají číst.

%xml
!
<definice XMLRDA>[.rdf] <soubor XML>
<Výstupní XMLRDA>
%

Získat základ XMLRSD lze pomocí

%xml
rs.
<soubor XML>
<RSD>.rsd
%

kterou lze editovat a pak přeložit CPO.
*******************
01.04.2013
Pokud místo +-M5 uvedete +-MT, přepne se WR582 do dotykového režimu, který
se okamžitě projeví zdvojnásobením ikon základního menu a doplněním ikony textové
a numerické klávesnice. Sekundárně rozšířením šoupáků, zvětšením ovládacích prvků
plochy atp.
******************
31.03.2013
V minulosti byl zaveden ve VST lokální i globální přepínač wm:2 a wm:6, které jednak
aktivovaly nové menu a jednak spouštěly automatickou polohu nápovědného menu
pod/nad vyplňovaným údajem podle toho, kde bylo více místa na rozvoj menu.

wm:2 bylo bez rámečku, wm:6 s rámečkem. Protože při dnešní revizi jsem konstatoval,
že tato sekce měla být ve verzi WR56 opravena a nebyla, lze z toho usuzovat, že to
nikdo nevyužívá. Tuto sekci jsem opravil a přidal následující licenci:

{.0,0,<133'fnt'>,<113'fnt'>,<154'fnt'>,<143'fnt'>,r1|pv:3|dv|rm:1,15,1000,"Název 1","Název 2"}

je ekvivalentní lokálnímu přepínači wm:6


{.0,0,<133'fnt'>,<113'fnt'>,<154'fnt'>,<143'fnt'>,r1|pv:3|dv|rm:1,15,1000,"",""}

je ekvivalentní lokálnímu přepínači wm:2

Tedy polohovací "." jednak automaticky spouští nové menu a jednak v případě prázdných
textů jak v horním tak dolním rámečku, aktivuje bezrámečkovou variantu.
****************
28.03.2013
Ještě přenos nebyl dokonalý pro absenci prázdných údajů. Zatím vyprazdňování
údajů zrealizováno pouze pro XML definici s RE.

_mode di:50.
.open status.rsd
.edt
status&
cisloFu re 00003 058
datumZverejneniNespolehlivosti re 00010 058
dic re 00010 058
nespolehlivyPlatce re 00009 058
$
.close
.open ucty.rsd
.edt
ucty&
dic re 00010 058
cislo re 00010 058
kodBanky re 00004 058
predcisli re 00003 058
$
.close
.open nucet.rsd
.edt
nucet&
dic re 00010 058
cislo re 00010 058
$
.close
%XML
re,sk.
E2.XML
XDIC
statusPlatceDPH
%
inf xdic
cpo status
%zuz
xdic
status
;
//
%
inf status
%zuz
ex.
xdic
ucty
zverejneneUcty\ucet\standardniUcet.
;
//
%
inf ucty
cpo nucet
%zuz
ex.
xdic
nucet
zverejneneUcty\ucet\nestandardniUcet.
;
//
%
inf nucet
*****************
25.03.2013
Jakási verze fungující pro soubory do 1 MB jakž takž funguje. Zkuste třeba

copy uziv.rda <>uziv1.rda
copy uziv.rda <>uziv2.rda
.pause 30
copy uziv.rda <>uziv3.txt
pip <>/li
pip <>*.txt/li
pip <>*.rda/li
del <>uziv1.rda
pip <>*.rda/li
inf <>uziv2
*****************
První dojmy nejsou na lokále zrovna ohromující. Kopíruji 50x uziv.rda cca 1 MB a 5000 vět
volné délky na u1/u50.rda a pak takto vzniklé soubory třídím tam a zpátky. V paměti
to stihnu za 5 s na klasicky na disku za 8 s. Pokud bychom ale použili síťový disk, situace
by se dramticky změnila. Ato víc jak jsem čekal 6 s oproti 1080 s.
*****************
24.03.2013
Začal jsem na návrh ing. Baláše realizovat myšlenku paměťových souborů - analogie RAM
paměti v DOSu. Zatím detekuji RAM soubory na základě úvodních znaků <>. Takže
třeba:

%zuz
uziv
uziv <>uziv
.se()
.co()
%
inf <>uziv

Soubor <>uziv.rda je v paměti a na disku se vůbec neobjeví. Tak lze pracovat s pomocnými
soubory, obsahující nějaké mezivýpočty, které běžně po vytěžení mažeme.

Základní velikost souboru se alokuje 1 MB, uvažuji o možnosti zadávat alokaci při vytváření
souboru např. <50>uziv.rda by znamenalo 50/10 MB=5 MB . Přirozeně interně bude
realokace v případě překročení základní délky, ale to časově něco stojí.
*********************
23.03.2013
Na základě oprávněné kritiky ing. Havla z Vosa Znojmo, zveřejňuji opravu příkladu
na vytěžení XML. Je třeba si stáhnut poslední stav wr582.

_mode di:50.
.open status.rsd
.edt
status&
cisloFu re 00003 058
datumZverejneniNespolehlivosti re 00010 058
dic re 00010 058
nespolehlivyPlatce re 00009 058
$
.close
.open ucty.rsd
.edt
ucty&
dic re 00010 058
cislo re 00010 058
kodBanky re 00004 058
predcisli re 00003 058
$
.close
.open nucet.rsd
.edt
nucet&
dic re 00010 058
cislo re 00010 058
kodBanky re 00004 058
predcisli re 00003 058
$
.close
%XML
re,sk.
E2.XML
XDIC
statusPlatceDPH
%
inf xdic
cpo status
%zuz
xdic
status
;
//
%
inf status
%zuz
ex.
xdic
ucty
zverejneneUcty\ucet\standardniUcet.
;
//
%
inf ucty
cpo nucet
%zuz
ex.
xdic#
zverejneneUcty\ucet\standardniUcet\cislo/aaaa,zverejneneUcty\ucet\standardniUcet\kodBanky/bbbb,zverejneneUcty\ucet\standardniUcet\predcisli/cccc.
nucet
zverejneneUcty\ucet\nestandardniUcet.
;
//
%
inf nucet
*********************
23.03.2013
Pokračuji mírně na vylepšení kešování. Zatím se to zdá na dobré cestě. Testovací úloha
běží na lokále 10 s, na síti 63 s, po staru wr581 183 s, bez keše 255 s. Po použití _openc
po staru 100 s po novu 75 s (zde po promínutí úprav z automatické permanentní keše by měl být
výsledek rovněž 63 s). Nicméně jsem zkonstatoval, že i zápis na lokál se 6x bezdůvodně zpomalí,
pokud soubor na serveru otevřu EDK a něco v ném změním a EDK nechám běžet. Toto zjištění opírám
o fakt, že ze serveru jedenkrát načtu soubor do keše a pak ho z paměti přepisuji 1000x na lokál,
takže by výsledný čas měl být teoreticky 10 s, ale ve skutečnosti je to 63 s.
******************
21.03.2013
Protože se na mne dens obrátil Ekosoft, jak pomocí aparátu XMLRDA vytěžit
XML o spolehlivosti plátců DPH, dávám naznačené řešení k dispozici:

Soubor XML vypadá:

<?xml version="1.0" encoding="utf-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<StatusNespolehlivyPlatceResponse
xmlns="http://adis.mfcr.cz/rozhraniCRPDPH/">
<status odpovedGenerovana="2013-03-07" statusCode="0"
statusText="OK" />
<statusPlatceDPH cisloFu="451"
datumZverejneniNespolehlivosti="2013-03-02" dic="445522999"
nespolehlivyPlatce="ANO" />
<statusPlatceDPH cisloFu="13" dic="8855229999"
nespolehlivyPlatce="NE">
<zverejneneUcty>
<ucet datumZverejneni="2013-03-01">
<standardniUcet cislo="123456789" kodBanky="0800" />
</ucet>
<ucet datumZverejneni="2013-02-01">
<standardniUcet cislo="9876543210" kodBanky="0800"
predcisli="158" />
</ucet>
<ucet datumZverejneni="2013-02-01">
<nestandardniUcet cislo="AL47212110090000000235698741" />
</ucet>
</zverejneneUcty>
</statusPlatceDPH>
<statusPlatceDPH cisloFu="451" dic="7755229999"
nespolehlivyPlatce="NE" />
<statusPlatceDPH dic="010101010"
nespolehlivyPlatce="NENALEZEN" />
</StatusNespolehlivyPlatceResponse>
</soapenv:Body>
</soapenv:Envelope>

Program

.open status.rsd
.edt
status&
cisloFu re 00003 058
datumZverejneniNespolehlivosti re 00010 058
dic re 00010 058
nespolehlivyPlatce re 00009 058
$
.close
.open ucty.rsd
.edt
ucty&
dic re 00010 058
cislo re 00010 058
kodBanky re 00004 058
predcisli re 00003 058
$
.close
.open nucet.rsd
.edt
nucet&
dic re 00010 058
cislo re 00010 058
kodBanky re 00004 058
predcisli re 00003 058
$
.close
%XML
.
E2.XML
XDIC
.;statusPlatceDPH
%
.;inf xdic
_mode di:50.
cpo status
%zuz
ex.
xdic
status
Envelope\Body\StatusNespolehlivyPlatceResponse\statusPlatceDPH.
;
//
%
inf status
_mode di:50.
cpo ucty
%zuz
ex.
xdic
ucty
Envelope\Body\StatusNespolehlivyPlatceResponse\statusPlatceDPH\zverejneneUcty\ucet\standardniUcet.
;
//
%
inf ucty
_mode di:50.
cpo nucet
%zuz
ex.
xdic
nucet
Envelope\Body\StatusNespolehlivyPlatceResponse\statusPlatceDPH\zverejneneUcty\ucet\nestandardniUcet.
;
//
%
inf nucet

Tedy z XML vytěžím staus plátce DPH - obsahuje klíč DIČ, pak standardní účty s DIČ
majitele a pak nestandardní účty s DIČ majitele. To jsou pak data již čistě relační.
*******************
20.03.2013
Dnes jsme řešili s fy JUMP problém, že ve Windows 8 se jim edi *.cmd
v menu nedělala krátká jména, ale zmršená dlouhá. Na webi jsem zjistil,
že pokud se disk sformátuje pod Win8, tak to dopadne takto a pokud pod něčím
nížším Win7 ap., tak to dává 8.3 jména. Náprava údajně:

Ano, viz. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem




Key: HKLM\SYSTEM\CurrentControlSet\Control\FileSystem

Value: NTFSDisable8dot3NameCreation

DataType: REG_DWORD

Here is the meaning of the value:

0 - Enable 8dot3 name creation on all volumes on the system

1 - Disable 8dot3 name creation on all volumes on the system

2 - Set 8dot3 name creation on a per volume basis

3 - Disable 8dot3 name creation on all volumes except the system volume
*******************
13.03.2013
Zapomněl jem uvést, že všechny položky typu so, ob a tx se v ZMT přeskakují.
*******************
Do ZMT v souvislosti s výstupem do CSV přidán přepínač od:xxx - dekadický
oddělovač údajů - standardně středník. Např. od:9 - oddělovačem bude
tabulátor.
*******************
12.03.2013
Abych předchozí úvahy podpořil raději v instrukci, upravil jsem ZMT
na:

%zmt
cs,q5:16.
uziv.csv
uziv
.co()
.se()
%
edi uziv.csv

tj. přibyl přepínač cs a pak se celá tabulka bez VM nasype ve tvaru
CSV do uvedeného souboru v určené kódové stránce. Je možno nějaký
údaj modifikovat a věty podmínkou probrat.
*****************
12.03.2013
Při realizaci předchozího příkladu jsem původně chtěl skládat
řádky hodnot přímo v ATP. Přiznám se, že se mně to nepodařilo
pro nesprávný přístup k dvojité substituci. Proto nezaškodí
to připomenout:

_openr u uziv.rda
_read+ u
n=1
_getattrib u,idn{n},1
idn{n}:=idn{n}|""
prm:="''u.'idn{n}'''"
;'prm'
.esdouble
a:="'prm'"
;'a'

Vtip spočívá v tom, že obsah prm musí být např. 'u.pc' a pak
máme v uvozovkách za a:="'prm'" -> první substituce
a:="'u.pc'" -> druhá substituce a:="<hodnota>"
****************
11.03.2013
Dnes jsme se s kolegou Skálou z JUMP Plzeň předháněli v tvorbě software
na převod libovolné RDA na formát CSV. Tady je moje řešení:

tab:="uziv.rda"

_openr u 'tab'
n=1; hlv:=""; vys:=""
.do()
_getattrib u,idn,n
.if($eof) .break
hlv:=hlv+idn|";"
vys:=vys+idn|" ; ;"
.end_do n++
vys:=vys[1:*-10]+" r 0;"<* Likvidace posledního VM *>
.open tbn.cmd
.edt
%tbn
uziv
ns,hs,nl,so. vys.csv
65000
!
0 80
1 0 1
!
.pr(xt "'hlv'"r;)
.pr('vys')
$
%
.ddt
.close
@tbn
pro vys.csv
*****************
10.03.2013
Protože se mně na stůl dostalo pár dotazů kolem tiskáren a došlo mně, že ne
vše je po letech dořešeno, přidal jsem do volby tiskárny a nastavení tiskárny
pár nových funkcí:

.setprns "",0

vrátí v $poc1 orientaci tisku, $poc2 nastavení papíru, ve $strlen délku
papíru a $filerr šířku papíru pro vybranou tiskárnu ve WR.

.setprns "<jméno prn>",<landscape>,<číslo formátu papiru>

nastaví pro danou tiskárnu orientaci a typ papíru.

.prnfirst

načte seznam možných tiskáren na PC a do $prn uloží

<Jméno tiskárny>|<landscape>|<papír>|<Jméno ovladače>

pro vybranou tiskárnu a do $strlen dá počet možných tiskáren a do
$filerr pořadové číslo vybrané tiskárny v seznamu tiskáren.

POZOR!! <landscape> a <papír> odpovídá buď nastaveným
hodnotám ve Windows nebo, poud jste je změnili v rámci jednoho
spuštění WR, pak aktuálně nastaveným hodnotám.

.prnnext n

nastaví $prn jako .prnfirst podle n-té tiskárny seznamu, takže lze udělat
menu např.:

.prnfirst
poc=$strlen;
.defn $filerr
!.bigmen(6,r1|mh|rm:1,-1,-1,16,1000,"Zvol tiskárnu","ESC nic")
n=1;
.do(n<=poc)
.prnnext n
.parse $prn "|" jmn pom
;'jmn'
.end_do n++
.asks n
<*Nastavíme vybranou tiskárnu portrait a A4 papír *>
.setprns "'$mnu'",2,9
<*podíváme se jak to dopadlo*>
.setprns "",0
;'$poc1' '$poc2'
<*Jaká je vybraná tiskárna*>
.prnfirst
;'$prn'

Jméno driveru je pevné, zatímco jméno tiskárny může uživatel měnit. Proto
je pro identifikaci tiskárny lepší použít jméno driveru.
*****************
08.03.2003
V rámci dynamické podmínky nad jedniným formulářem dopracován formálně aparát
tak, aby přepnutí na sebe sama bylo symetrické i pro víceformulářový přístup.
Původní filosofie považovala přepínání u jednoho formuláře za nesmysl.

Dále dp:n:1 zruší při otázce Co? dynamickou podmínku a nahradí ji původní
globální podmínku.

Dále dp:n:2 zakáže otázku Co? zcela - lze použít i přepínač HL.

Dále funkce VST(1001,1) zruší dynamickou podmínku a aktivuje původní globální
podmínku a funkce vst(1001,2) zruší lokální podmínku zadanou pomocí Co?.
*****************
03.03.2013
Ve spolupráci s ing. Perášem do ODBC přidána podpora UTF řetězců, které nyní
WR automaticky deklaruje místo PZ na UT.
****************
02.03.2013
Na základě problému ing. Havla z Vosy Znojmo s oboustranným tiskem daňového
přiznání na A3 tiskárně jsem tento obecnější problém řešil zavedením tiskového
příkazu

xy! -4# <okraj v desetinnách milimetru>#

kdy dynamicky můžete změnit okraj (původní okraj "ok" se připočítává). Konkrétně
tedy pro zmíněný případ místo posledního xz s; po první straně dáte:

xy! -4# <cca 2200>#;xy! 0# 0#;

Důležité je, aby změna okraje přišla na konci posledního řádku
na první stránce (bez koncového xz r;!). Na konci druhé strany pak místo xz s; dáte:

xy! -4# 0#;xz s;

Příkazu můžete použít i pro dynamické odstavcování v sestavě.
****************
Do grafického standardního winmenu přidány ikonky pro spuštění textové a numerické
klávesnice.
****************
28.02.2013
Nabídka klávesnice/numerické klávesnice/kalendáře dle typu údaje doplněna
i do GRD po _mode fk:x.
****************
26.02.2013
Řešen problém, kdy WR582 na tabletu bez klávesnice a myši na doteky nereagovala.
Dále upraveny rozměry okna, které po zvětšení ikon na dvojnásobek bylo
oříznuté. Vše se zdařilo i díky tomu, že do Win8 se mně podařilo nainstalovat
moje vývojové prostředí jako na Win XP.
****************
25.02.2013
Bylo třeba přepracovat .putclip, .pitclips, .getclip a editaci řádku, protože
nefungovalo <Ctrl V> např. s ruskými znaky.
****************
22.02.2013
Ve snaze dotáhnout problematiku UTF znaků do konce, jsem oživil ruskou
klávesnici, která nám mezitím "uhnila". Nyní, na rozdíl od předchozího
řešení, lze psát české a ruské texty současně. Pouze v editaci příkazového
řádku to ještě skřípe (ne editor!).
****************
17.02.2013
Pokus o dynamickou generaci bitové mapy přispěl k tomu, že jsem aparát
využil pro znaky, které dosud bitovou mapu neměly vygenerovanou. Takže
nyní na obrazovku píšeme všemi jazyky! Na tiskárnu již dávno. Na PDF
ale zatím zapomeňte.

Stáhněte si w.zip a na uložený w.txt pusťe ťřeba type nebo edi.
****************
Ještě jsem zkusil zrušit transpozici bajtové mapy zavedené ještě kolegou
Rytychem, který tak znormalizoval bajtovou mapu TT v souladu s bajtovou
mapu dosových znaků. Přirozně v návaznosti na tutu změnu bylo nutno
přepracovat vlastní zobrazení TT znaků z uložené bajtové mapy.

Výsledkem je o něco rychlejší naběh wr582.
****************
14.02.2013
Několik uživatelů si stěžovalo na zpožďování náběhu WR se zvyšujícími
se verzemi. Podstatnou část času spotřebuje tvorba "obrázků" písmen
pro TT znaky. Pokud je fontů ve font5w 90 a každý font se nyní
skládá z 355 znaků po zavedení UTF znaků, pak je to pořádná porce práce.
90*355 je zhruba 32000 bitových map. Zkusil jsem tedy obrázky generovat
až v případě potřeby a tedy opakovaně. Dalo to dost práce a výsledkem
je řádové zpomalení např. výpisu dir v režimu .nostop.

Tudy cesta asi nevede. Na druhou stranu by to podpořilo výpis např.
azbuky nebo arabštiny na obrazovku. Dosud to jde pouze na tiskárnu.

Pozitivním výsledkem byl cca 1 s náběh s 50 TT fonty, zatímco původní
řešení dává cca 4 s na mém PC.

Nechávám na Vaši úvahu, co preferujete. Faktem je, že souvislý mnohastránkový
výpis není asi součástí Vašich aplikací.
****************
03.02.2013
.ask <lprm> <Otazka>

při zapnutém .enable touch + _mode fk:x. se převede na dotykovou
třítlačítkovou klávesnici - Ano-Ne-Esc.

Ve VST se po .enable touch aktivují pro Zapsat a Zrušit messageboxy.
****************
Dnes rovněž vyřešen problém, kdy po stisku křížku v redapovském menu,
systém přemístí kurzor myši do místa doteku a zablokuje tím další
činnost programu - zůstávalo se ve winmenu, po chvíli se objevila
bublinka Esc.
****************
Pomocí n=numk(r,s,fnt) zahájíte vstup z numerické klávesnice pomocí
.read $key a pomocí n=numk(r,s,0) vstup ukončíte. Analogicky
n=txtk(r,s,fnt) aktivuje textovou klávesnici. Pokud je r=0 nebo s=0
klávesnice se umístí pod nebo nad kurzor.
****************
30.01.2013
Při současném .enable touch + _mode fk:x. se pro .askn objeví numerická
klávesnice a pro .asks obecná klávesnice.
****************
29.01.2013
Podařila se poslední fáze v kauze kešování. Nyní by WR582 měla být ve stavu,
že při síťové verzi je zcela lhostejné, zda má jedna stanice zapnutou keš
a druhá ne.
****************
Na webu je zatím k dispozici 32 bitové síťové demo s omezenou platností
do 30.06.2013
**************
Ve spolupráci s ing. Petrášem doplněn přístup přes ODBC o typ řetězce
v UTF kódu - v definici WR se automaticky místo RE generuje typ UT
- UTF16.
**************
27.01.2013
Podařila se grafická kalkulačka, která se spouští po _mode fk:x. pomocí
F10. Ukončení buď knoflíkem Esc - do klávesnice se nic nevloží nebo
knoflíkem Ins - výsledek se nasype do klávesnice jako po <Ctrl F10>
u dosavadní klakulačky. Dále je možno vyvolat kalkulačku jako funkci

n=kalk(r,s,fnt)

kde r,s jsou pixelové souřadnice levého horního rohu okna kalkulačky
a fnt je font pro tvorbu textových informací v okně kalkulačky. Zároveň
podle velikosti písma se mění i rozměry knoflíků kakulačky. Po Ins se
kalkulačka ukončí a zobrazený výsledek se přesune do numerické proměnné
n.

Po Esc se vratí hodnota 18-ti devítek.

n=kalk(200,200,10)
.if(n==999999999999999999) "Bylo Esc"; .else ;'n'

U VST se grafická kalkulačka po F10 nahodí pod nebo nad vyplňovanou
hodnotu. Jinak se umístí do středu halvního okna WR.
**************
26.01.2013
Podařilo se na základě výhradního přístupu do souboru (bez vytvoření
nové kopie) bez kešování z jedné stanice, indikovat tuto skutečnost
pro jiné stanice a ty pak obsah permanentní keše spojené s tímto
souborem považují za nevěrohodný a keš se znovu začne plnit
od prázdného stavu.
*************
21.01.2013
Dnes jsem řešil selhání keše v případě permanentní keše, která se
naplnila, soubor se uzavřel, z jiné stanice se soubor bez zapnuté
keše přepracoval do nového souboru s totožným názvem a původní stanice
pokračovala nyní již s falešnou permanetní keší dál s fatálními následky.
Zapnuté _mode db. potvrdilo různost obsahu keše a stavu souboru na disku.

Z této situace vyplynulo, že se to může snadno opakovat a že tomu
mohu programově předejít tak, že si do struktury spojené s konkrétním
souborem ještě poznamenám čas vzniku souboru. V případě nového otevření
takového souboru s naplněnou permanentní keší porovnám čas vzniku
souboru v keši s momentálním časem vytvoření souboru. Pokud nesouhlasí,
keš zruším a začnu od nuly. Tím pádem výše uvedený problém nemůže
nastat.

Zůstává ale situace, kdy například při vypnuté keši stanice provede
změnu několika vět v souboru. Čas vzniku souboru zůstane stejný,
ale permamentní nebo i dynamická keš na jiné stanici je nesprávná.
*************
Pomocí _mode uk:xx. nastavíte šířku šoupáků pro EDI, okna, nové
menu a plochu. Jinak po .enable touch je šířka šoupáků nastavena
jako 1/80 z pixelové šířky obrazovky.
*************
EDI/PRO se dá též ovládat prstem - zpíchnutím do textu se přesouvá
kurzor do místa doteku - s dotykem a pohybem prstem po obrazovce
se přesouvá souhlasně se směrem pohybu prstu i text. Reagují i
šoupáky a tlačítka pro pohyb o jeden řádek/sloupec.
*************
Pomocí .enable touch, aktivujem ovládání menu prstem, zvětšení
šoupáků podle fontu menu, nalevo od tlačítka ukončovacího křížku
generujícího Esc i tlačítko generující Enter, pro ukončení
označovacího menu.

Pro dotyk prstem se změní trochu chování - první dotyk na položku
menu na ni přesune pravítko a opakovaný dotyk ji teprve vybere.
*************
U plochy lze přidat jeden parametr do

.BPL[ [!][[[x]Mřd,Msl][,n:m][,fnt]]

tj. číslo fontu a pak se předpokládá, že polocha bude ovládána
prstem a úměrně velikosti fontu se pak kreslí radiobuttony,
zškrtávací tlačítka a šoupáky, které dopsud pro myšové ovládání
vyhovovaly, ale pro prsty při HD rozlišení monitoru se již jevily
jako titěrné.
*************
Pomocí _mode fk:x. aktivujeme ve VST zobrazení kalendáře u typu ND,
grafické numerické klávesnice pro číselný typ a grafické klávesnice
pro textový typ. U dotykové obrazovky lze tedy pouze prstem zadávat
údaje do všech polí VST. Číslo fontu x se použije pro vykreslení
těchto vstupních grafických útvarů.

První dotyk prstem na položku způsobí přechod na položku a druhý
přesun do vstupu s aktivací příslušné grafické pomůcky - kalendář,
numerická klávesnice, textová klávesnice.