M
TRANSFORMACE - kapitola M
Transformace definuje sekvenční operace s datovými soubory:
█ DeklaraceLokálníchProměnných ... pomocné proměnné použité v transformaci
█ VstupTransformace .............. vstupní soubor(y)
█ VýstupTransformace ............. výstupní soubor(y) a způsob transformace
Deklarace proměnných je volitelná, transformace však musí obsahovat alespoň
jeden vstupní a jeden výstupní soubor.
Algoritmus transformace: čtou se vstupní soubory (případně jen část vět podle
vstupního filtru), podle definice výstupu přitom vystupují věty do výstupních
souborů.
Main
STRUKTURA PROJEKTU
Maska pro datum
VÝJIMKY V TYPECH ÚDAJŮ
Pro speciální případy jsou určeny následující typy údajů:
█ F,m,n ... (čárka místo tečky) číslo s myšlenou desetinnou čárkou,
číslo bude interně uloženo jako celé, což odstraňuje potíže
se zaokrouhlováním desetinné části v binární soustavě
█ A,nR ... znakový řetězec bude při pořízení zarovnaný doprava
█ A,...! ... Znak ! na konci deklarace znamená, že údaj bude na disku
uložen v zakódované formě.
█ A,'Maska'.. Maska pro alfanumerický řetězec,text. konstanta v apostrofech.
Délka údaje odpovídá největší možné délce podle masky a údaj
je vždy uložen se zarovnáním doleva. Význam znaku masky:
# číslice
9 číslice
@ písmeno
? libovolný znak
$ písmeno s automatickou změnou na velké (upcase)
! libovolný znak s automatickou změnou na velké (upcase)
[....] volitelná skupina znaků
(...|...|...) alternativní skupiny znaků příp. různé délky
Ostatní znaky musí přesně souhlasit se vstupem (zadávají se
a negenerují). Není povoleno vnoření závorek.
Kontrola (a upcase) je až po Enter na údaji.
█ N,nL ... číselný řetězec bude při pořízení zarovnaný doleva
█ D,'Maska'.. datum se speciální maskou
Maska pro datum je libovolný řetězec v apostrofech obsahující
kromě oddělovačů také speciální znaky pro jednotky datumu a
času. Tyto znaky budou ve výsledku nahrazeny skutečnými
hodnotami. Maska určuje způsob zobrazení datumu.
■ Y-rok, M-měsíc, D-den,
■ h-hodina, m-minuta, s-vteřina, t-setina vteřiny
instalace konstant
█ T,n ... volný text, při editaci se zobrazí také n znaků prvního řádku
█ T,...! ... Znak ! na konci deklarace znamená, že údaj bude na disku
uložen v zakódované formě.
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
Cena: F,9,2; {myšlená řádová čárka}
Nazev: A,20R; {zarovnané doprava}
RodneCislo: A,'######/###(#| )'; {maska s alternativou}
EvidCislo: N,6L; {zarovnané doleva a doplněné nulami zprava}
Obdobi: D,'YMM'; {různé varianty datumu}
Cas: D,'mm:ss.tt';
UplnyRozsah: D,'DD.MM.YYYY hh:mm:ss';
PopisVyrobku: T,40; {volný text s viditelným začátkem}
Maska pro text
VÝJIMKY V TYPECH ÚDAJŮ
Max
PARAMETRY GRAFU
MaxCol
ROZMĚRY OBRAZOVKY
MaxRow
ROZMĚRY OBRAZOVKY
mem
Prvek seznamu
mem_NázevTypu([&]TermNázev,TermL_Název)
TermNázev Term typu NázevTypu.
TermL_Název Term typu L_NázevTypu, tj. seznam termů typu NázevTypu.
Podmínkou činnosti je podmínka odpovídajícího pojmenování typů. K
uživatelskému typu je automaticky definován typ seznam s jménem
doplněným předponou "L_".
Funkčnost predikátu je určena typem prvního parametru. Při
vstupním parametru zjišťuje, zda je term prvkem seznamu. U výstupních
parametrů postupně unifikuje všechny prvky seznamu s uvedenou
proměnnou.
Příklad:
Firma,Zamestnanec = String
{ Test existence prvku v seznamu }
je_prvek:- mem_Firma('Alis',['Alis','Derby','Pussa']),
write('Je prvkem seznamu'),!.
je_prvek:- write('Neni prvkem seznamu').
{ Příklad výpisu seznamu }
sezn_prvku:- mem_Firma(X,['Alis','Derby','Pussa']), write(X,' '),fail.
sezn_prvku.
MemAvail
SPECIÁLNÍ PŘÍKAZY A FUNKCE
Při ladění větších úloh či spouštění externích programů může být důležitá
informace o velikosti volné paměti. Volná paměť se používá pro cache
(stránkování přístupu na disk). Podle potřeby se do ní překládají další
subúlohy nebo volají externí programy.
██ syntaxe: MEMAVAIL : real
Vrací velikost volné paměti v bytech
────────────
██ syntaxe: MEMDIAG
Ladící procedura vypíše na obrazovku obsah důležitých pointerů:
dolní zásobník - začátek a konec (PC FAND pracuje se dvěma zásobníky)
horní zásobník - začátek a konec (proti sobě místo standardního Heapu)
Stack Pointer procesoru
použitelná XMS paměť
┌────────────────────────────────────────────────────────────────────────┐
│!!! Memdiag je použitelný pouze při spuštění programátorské verze, to │
│ jest FAND(C).EXE. Uživatelský run-time UFANDx.EXE ho "nezná". │
└────────────────────────────────────────────────────────────────────────┘
MemDiag
SPECIÁLNÍ PŘÍKAZY A FUNKCE
Menu
UŽIVATELSKÁ NABÍDKA - MENU
Nabídka definuje větvení programu podle interaktivní volby uživatele.
Existují tři typy nabídek s obdobnou syntaxí:
■ menu ....... jednorázová nabídka
■ menuloop ... nabídka se opakuje v cyklu, ukončí se klávesou Esc
■ menubar .... vodorovná nabídka (většinou hlavní nabídka programu), chová
se jako pulldown.
██ syntaxe: MENU[LOOP] [([x,y][;a1,a2,a3,a4])] [!] [pulldown] [hlavička] of
Seznam voleb
end;
■ x,y ............čís.výrazy-levý horní roh (jinak implicitně dle kontextu)
■ a1,a2,a3,a4 ... atributy barev (normální,vybraná,důraz,nefunkční),
Ctrl-znaky nebo čís.výrazy, instalace barev
■ ! ............. stín okna menu
■ pulldown ...... nabídka navazuje na předchozí nabídku (jinak uprostřed
nebo podle souřadnic) a okno zůstane na obrazovce během
provádění příkazu. Navazující pozice viz. MenuX, MenuY.
■ hlavička ...... Textový výraz, text v záhlaví okna s nabídkou (jinak
bez hlavičky)
██ syntaxe: MENUX : real funkce,vracejí sloupec a řádek hor.
MENUY : real levého rohu pro pulldown.
───────────
██ syntaxe: MENUBAR [(y[,x,xsize][;a1,a2,a3,a4])] of
Seznam voleb
end;
■ y ............. Číselný výraz, menu je umístěno na řádku y
■ x,xsize........ Číselné výrazy, počáteční sloupec,délka
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
██ menubar (3,10,60) of
'Finance',Finance : menuloop ! pulldown 'FINANCE' of
'Peněžní deník': proc(Deník);
'Závazky': proc(Závazky);
end;
'Inventář',Inventář : menuloop ! pulldown 'INVENTÁŘ' of
'ZP': proc(ZP);
'DKP': proc(DKP);
end;
'Ostatní','Ostatní volby',trust(3):
menuloop ! pulldown of
'Systém',,trust(1)!: with window (1,1,80,25) do exec('','');
'Nápověda': menuloop (0,10) ! pulldown of
'Prohlížení': help('root');
'Tisk': report(HELP,Help);
end;
end;
escape : if prompt(' opravdu skončit (A/N)': B) then break ;
end;
MenuBar
UŽIVATELSKÁ NABÍDKA - MENU
MenuLoop
UŽIVATELSKÁ NABÍDKA - MENU
MenuX
UŽIVATELSKÁ NABÍDKA - MENU
MenuY
UŽIVATELSKÁ NABÍDKA - MENU
Merge
VOLÁNÍ TRANSFORMACE
Spuštění transformace lze provést ve dvou variantách. Základem je první
varianta, která znamená statické spuštění předem připravené a hlavně řádně
zkompilované kapitoly M.
Druhá varianta přináší zkušenějším programátorům možnost dynamické definice
kódu transformace v textovém výrazu. V tomto případě si programátor přebírá
veškerou odpovědnost za riziko běhových chyb při provedení.
██ Syntaxe: varianta1 MERGE ( NázevTransformace )
varianta2 MERGE ( [ TextovýVýraz ] )
■ NázevTransformace ... Název kapitoly M.
■ TextovýVýraz ........ Obsahuje dynamickou deklaraci zdrojového kódu
transformace.
Message
VÝSTUP NA OBRAZOVKU
Min
PARAMETRY GRAFU
minus
minus_
minus_NázevTypu(L_NázevTypu_1,L_NázevTypu_2,&L_NázevTypu_3)
L_NázevTypu_1 Vstupní seznam.
L_NázevTypu_2 Odstraňované prvky.
L_NázevTypu_3 Výsledný seznam.
Vynechá z prvního seznamu L_NázevTypu_1 všechny členy, které se
vyskytují i v druhém seznamu L_NázevTypu_2 a výsledek je vrácen ve
výstupním parametru L_NázevTypu_3. Prvky druhého seznamu, které se
nevyskytují v prvním jsou ignorovány.
Příklad:
mi:-minus_String(['A'],['A','B'],X),writeln(X),
minus_String(['B','A'],['A'],Y),writeln(Y).
Mod
SPECIÁLNÍ OPERÁTORY
Mode
MODE - duplicitní klíčové slovo
■ edit(...mode) ........ módy datového editoru: omezení při editaci
■ report(...mode) ...... parametry automatické sestavy: typ autoreportu
■ selectstr(...mode) ... parametrizace výběru z pole stringů
■ copyfile(...,mode) ... převod diakritiky při kopírování textových souborů
Modulo
MODULO
Funkce modulo vrací true pokud kontrola vstupních parametrů metodou
"modulo n" vyhovuje.
██ Syntaxe: MODULO ( TextVýraz ,n,w1,w2,..wm ) : boolean
■ TextVýraz .... řetězec cifer délky m+1, ci (i=1..m) jsou jeho cifry
a cp je kontrolní cifra na pozici m+1
■ w1,...,wm .... tzv. váhy
■ definice: ( n - sum ( ci * wi ) mod n ) mod 10 = cp
Pokud platí tato rovnost, je výsledek TRUE.
Módy blokování nižší
LAN - POUŽITÍ NIŽŠÍCH MÓDŮ BLOKOVÁNÍ
Null ■ implicitně při otevření souboru, neklade žádné omezení pro ostatní
účastníky
NoExcl ■ uplatní se pouze pro indexovaný soubor při:
■ edit s použitím cond, owner, mode='F2', mode='wx'
nebo při editaci podle pracovního indexu (editace podmnožiny)
■ editace podle pracovního indexu ... edit(Soubor/PracIndex,...
■ report - ve fyzickém pořadí bez automatického třídění
- s automatickým tříděním - jen část generování sestavy
- třídění vstupu podle pracovního indexu
■ vstupní soubor merge ve fyzickém pořadí bez automatického třídění
NoDel ■ editace celého souboru (kromě cond, owner, mode='F2' nebo mode='wx')
NoCr ■ edit souboru bez indexů při použití cond nebo mode='F2' (podmnožina)
■ report souboru bez indexů, bez automatického třídění
■ vstupní soubor merge bez indexů, bez automatického třídění
Rd ■ datový editor - fáze startu datového editoru
- další čtení vět souboru
- obnova obrazovky v datovém editoru (refresh)
- referenční integrita, varianta s !!
■ blokování nadřízených souborů při čtení viditelných údajů
■ report (ostatní případy)
■ vstupní soubor merge (ostatní případy)
■ údaje nebo věty ve výrazech kromě přiřazení (recno,link,nrecs,
nrecsabs,lastupdate,isdeleted,owned)
■ readrec
■ help
■ close (uzavření souboru, kvůli trunc)
■ automatické vytváření indexu, příkaz getindex
■ cyklus forall (akce v průběhu cyklu mohou blokování zesílit)
■ backup (zálohování)
Módy blokování souboru
LAN - MÓDY BLOKOVÁNÍ SOUBORU
Po otevření sdíleného souboru používá FAND na nezbytně nutnou dobu jeden z
uvedených módů blokování (vyšší zahrnují vždy i nižší).
Null - nejnižší mód blokování, bez omezení pro ostatní
NoExcl - zákaz módu Excl pro ostatní, povoluje vše kromě celkové reorganizace
NoDel - zákaz rušení vět
ostatní nemohou spustit akci, která vyžaduje blokování Del nebo Excl
NoCr - zákaz vytváření vět
ostatní nemohou blokovat Cr, Del nebo Excl
Rd - čtení na vlastní stanici
ostatní nemohou blokovat Wr, Cr, Del nebo Excl
Wr - psaní na vlastní stanici,
ostatní nemohou Rd, Wr, Cr, Del nebo Excl
Cr - vytváření nových vět
ostatní nemohou NoCr, Rd, Wr, Cr, Del nebo Excl
Del - rušení vět
ostatní nemohou NoDel, NoCr, Rd, Wr, Cr, Del, Excl
Excl - nejvyšší mód blokování, výstup do souboru resp. celková reorganizace
ostatní účastníci nemohou se souborem pracovat
Módy blokování vyšší
LAN - POUŽITÍ VYŠŠÍCH MÓDŮ BLOKOVÁNÍ
Módy datového editoru
MÓDY DATOVÉHO EDITORU
Parametr procedury edit mode='SeznamMódů' ovlivňuje chování editoru během
editace. Zadává se v textové konstantě nebo v textovém výrazu, složeným
z dvoupísmenných zkratek. Textový výraz se vyhodnotí až při provedení.
Případné neplatné kombinace se ignorují.
■ ^Y ... zákaz rušení vět
■ ?Y ... rušení vět s potvrzením A/N
■ ^N ... zákaz vytváření vět ( mode='^y^n' - nelze ani třídit )
■ F2 ... režim pořízení
■ 01 ... editace jedné věty ('F201'...pořízení jedné věty)
■ !! ... editace na tabelátorech (ostatní údaje jen na prohlížení)
■ F3 ... hledání podle vlastního klíče (vlastní klíč)
■ <= ... potlačí hlášení F10 - věta neexistuje při hledání F3
■ ?? ... konec editace bez dotazu (instalace konstant)
■ ?E ... opak-vyžaduje potvrzení výskoku Esc dotazem opustit editor ? (A/N)
■ #A ... zákaz vypnutí aditivních změn (aditivní změny)
■ #L ... zákaz vypnutí logických kontrol (logické kontroly)
■ R2 ... použije 2.řádek obrazovky k vypsání výrazu pro aktuální podmnožinu
■ F1 ... zobrazuje nápovědu z .HLP souboru pod heslem NázevSouboru.NázÚdaje
při pohybu po souboru jsou na posledním řádku jednořádkové nápovědy
Ctrl-F1 vyvolá celoobrazovkovou nápovědu. Viz.soubor pro nápovědu
■ F124.. Nápověda se zobrazí na 24.řádku (instalace barev)
■ WX ... při editaci sdíleného .X souboru vytváří pracovní index
a tím umožňuje ostatním stanicím mazat věty (lokální sítě)
■ S7 ... potlačení chybového hlášení s ShiftF7, přímý přechod do editace
nadřízeného souboru s možností převzetí údaje
■ CO ... podmínka COND slouží jen k výběru podmnožiny, nebude kontrolována
při aktualizaci resp. pořízení nových vět
■ LI ... Při hledání pomocí F3, pro údaje typu A,N se nastavuje kurzor
editoru již v průběhu zadávání. klíč
■ ^M ... Double click levé klávesy myší není INS ale ENTER.
myš v datovém a textovém editoru
■ -> ... Klávesa Up generuje <-, klávesa Down generuje ->.
■ EX ... exit-procedury vyvolané klávesou lze vyvolat i z editace údaje
typu T. Parametr aktuální věty se předává stejně jako při volání
z jiných míst. Rovněž nastavuje edfield,edirec,... Navíc nastavuje
i txtpos, který bude pro ostatní typy přerušení -1.
Explicitní nápovědné řádky ( last=, shift=,...) se zobrazí
i v textovém editoru. (viz. přerušení editace textu)
■ SL ... Při použití parametru sel lze klávesou ENTER v existující větě
ukončit editaci. Pokud byl zatím pracovní index prázdný, bude
zároveň aktuální věta vybrána. V opačném případě se index nezmění.
■ ?N ... Při přerušení pořizování nové věty klávesou ESC nebo F2 je od
obsluhy vyžádáno potvrzení dotazem "Nedokončená věta bude zrušena!
Přesto opustit A/N?" (Instalace konstant).
Mount
MANIPULACE S DISKETAMI
Příkaz pro explicitní montování diskety. Implicitně se tento příkaz vyvolá
před použitím prvního souboru z diskety
██ Syntaxe: MOUNT ( NázevDleKatalogu [ ,nocancel ] )
■ NázevDleKatalogu ... Soubor musí být v katalogu definován jako disketový
včetně návěští ( identifikace diskety ).
■ nocancel ........... Potlačí ukončení práce po stisku ESC a nastaví
návratový kód exitcode=1
──────────────────────
Nasazenou disketu lze vyjmout z jednotky jen na výzvu programu. To se
implicitně stane až při ukončení úlohy nebo požadavku na jinou disketu.
Explicitně lze korektní vyjmutí diskety zajistit příkazem releasedrive.
██ Syntaxe: RELEASEDRIVE ( Jednotka )
■ Jednotka .... Textový výraz (A:,B:,CPM-jednotka)
MouseEvent
MYŠ V PROCEDUŘE
MouseIn
MYŠ V PROCEDUŘE
Test na pozici kurzoru myši. Funkce testuje, zda je v zadaném obdélníku.
██ syntaxe: MOUSEIN ( x1, y1, x2, y2 ) : boolean
■ x1,y1,x2,y2 Číselné výrazy, absolutní textové souřadnice levého
horního a pravého dolního rohu obdélníku. V grafickém
režimu jsou souřadnice v grafických bodech.
■ Kapitoly .... P,D
────────────────────
Příkaz pro nastavení pozice kurzoru myši.
██ syntaxe: SETMOUSE ( x, y , JeVidět )
■ x,y ......... Číselné výrazy. Požadované souřadnice - absolutní,textové.
V grafickém režimu jsou souřadnice v grafických bodech.
■ JeVidět ..... Logický výraz. Určuje zda bude kurzor myši viditelný.
■ Kapitoly .... P,D
────────────────────
██ syntaxe: MOUSEX : real ..... Souřadnice kurzoru myši.
MOUSEY : real ! Korektní až po mouseevent
V grafickém režimu jsou souřadnice
v grafických bodech, jinak textové.
MouseX
MYŠ V PROCEDUŘE
MouseY
MYŠ V PROCEDUŘE
Myš
MYŠ
┌─────┬─────┬─────┐
Podpora myši funguje jen pro EGA/VGA │ cli │ │ E │
V zásadě dodržuje běžně používané konvence │ ck │ │ S │
Funkce myši odpovídají kontextu a poloze kurzoru │ │ │ C │
Význam pravé a levé klávesy lze instalací prohodit ├─────┴─────┴─────┤
│ │
Funkce myši dle kontextu a polohy kurzoru: │ │
│ │
■ menu ... stisk na volbě = vybrat │ │
stisk na posledním řádku = nápověda │ │
└────────┬────────┘
■ dotaz na text. řetězec ... (prompt,název souboru, ┌───┘
editace údaje): stisk na vymezeném poli = Enter └─┐
■ výběr ze seznamu ..... (názvy souborů, údaje pro třídění atd.):
stisk na názvu .... při výběru jednoho názvu = přesun kurzoru a Enter
při výběru množiny = přesun kurzoru
a přepnutí označit/neoznačit
dvojitý stisk mimo název při výběru množiny: Enter
držet a přesunout: výměna položek
Myš v datovém a textovém editoru
MYŠ V DATOVÉM A TEXTOVÉM EDITORU
■ datový editor ... stisk na údaji: kurzor přejde k údaji
dvojitý stisk na údaji: INS (přechod k editaci údaje)
nebo ENTER - viz. mode='^m'
mode='F1 | F124' a click na nápovědě: jako Ctrl-F1
■ textový editor ...stisk - přenesení kurzoru na danou pozici
■ nápověda kláves ... v posledním řádku obrazovky může být buď standardní
nebo alternativní - tj. určená parametry editace last, alt,
ctrl, shift. Názvy kláves musí být uvedeny přesně a zdůrazněny
^P^W. Stisk na zdůrazněném názvu klávesy generuje tuto klávesu
podržení generuje opakování. V "ikoně" pro myš nemusí být
uveden název kontrolní klávesy. Např. v Ctrl nápovědě generuje
ikona F8 kombinaci CtrlF8.
Klávesy: F1..F10, AltF1..AltF10, ShiftF1..ShiftF10, CtrlF1..CtrlF10,
^Q┘, Enter, Alt, Ctrl, Shift, Esc, CtrlY,
↑,↓, PgUp,PgDn,CtrlHome,CtrlEnd,
ikona pro tabelátor '\196\16\179' , ShiftTab('\179\17\196')
analogicky funguje při chybovém hlášení také stisk na 'F10'
resp. 'ShiftF7'
■ helpy... stisk na hesle: jako Enter na hesle, další v nápovědě 25.řádek
Myš v proceduře
MYŠ V PROCEDUŘE