D
FUNKCE
Kromě předdefinovaných funkcí (viz. standardní funkce) je možno definovat
vlastní, tzv. uživatelské funkce. Pro jejich deklaraci slouží kapitola
typu D, která nesmí mít název. Konstrukce funkcí je velice podobná proce-
durám. Před použitím názvu funkce v úloze musí být tato funkce deklarována.
Je povolena (přímá) rekurze.
██ Syntaxe: [{ function NázevFunkce( [ DeklaraceParametrů ] ) : Typ ;
[ DeklaraceLokálníchProměnných ]
begin [{ Příkaz ; }] end ; }]
■ DeklaraceParametrů .. seznam parametrů Název : Typ ;
■ Povolené typy ....... pro parametry, lokální proměnné a typ funkce
jsou povoleny "pouze" typy real, string, boolean
■ Název funkce ........ je implicitně deklarován jako lokální proměnná.
Hodnota funkce se definuje tak, že v těle funkce
je této proměnné přiřazen požadovaný výsledek.
■ Povolené příkazy .... v těle funkce jsou povoleny příkazy if, while,
for, repeat, case, break, cancel, begin, end,
přiřazovací příkaz (:=,+=)
■ Definiční obor ...... Uživatelské funkce lze použít v každém výrazu,
jsou tedy přístupné i uživateli. Uživatelská
funkce se stejným názvem jako standardní funkce
tuto funkci znepřístupní. Podobně deklarace
funkce v podúloze překryje stejnojmennou funkci
z nadřízené úlohy.
■ Omezení ............. V jedné kapitole D je možno deklarovat libovolný
počet funkcí (omezeno jen rozsahem volného textu).
Počet kapitol D není omezen. Celkový počet funkcí
je omezen jen velikostí paměti (všechny uživatel-
ské funkce jsou umístěny v paměti po celou dobu
zpracování úlohy.
V těle funkce nejsou povoleny vedlejší efekty,
např. zápis do údajů souboru, práce s proměnnou
record of soubor ...
■ Volání funkce ....... Analogicky jako standardní funkce, uvedením
identifikátoru funkce ve výrazu. Při vyvolání
musí souhlasit počet a typ parametrů z deklarace
funkce.
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
██ funkce bez function DatumACas() : real ;
parametru begin
DatumACas := today + currtime ;
end ;
{ vrátí v jedné hodnotě aktuální datum a čas }
██ funkce s function MIN ( prvni : real ; druhy : real ) : real ;
parametry begin
MIN := cond( prvni<=druhy : prvni ,
else : druhy ) ;
end ;
{ vrátí minimum ze dvou čísel }
██ rekurzivní function faktorial (n:real) : real ;
funkce var i : real ;
begin
if frac(n)>0 then faktorial:=0
{ faktorial pouze pro celá čísla }
else if n>1 then faktorial:=n*faktorial(n-1)
else faktorial:=1 ;
end ;
{ faktorial n = 1 * 2 * ... * (n-1) * n ;
je klasický příklad použití rekurzivní funkce }
#D
ZÁVISLOSTI - odstavec #D
Pomocí závislostí může programátor řešit kontextové pořízení dat. Na základě
některých již pořízených údajů (obecně logického výrazu) je možné jiné údaje
dosadit automaticky nebo vůbec přeskočit, protože v daném kontextu nemají
význam.
██ Syntaxe: #D { (LogVýraz) NázevÚdaje:=Výraz; }
Pro jeden logický výraz (podmínku) může následovat seznam několika
přiřazovacích příkazů. V případě, že je splněn logický výraz, hodnota údaje
se dosadí a datový kurzor se posune na další údaj. Při nesplnění logického
výrazu je třeba údaj pořídit nebo editovat ručně. Závislosti se vyhodnocují
během pořízení i editace pouze při příchodu k údaji klávesou Enter.
░░░░░░░░░░░░
░░příklady░░ #D (ADRESY.exist) Jméno:=ADRESY.Jméno;
░░░░░░░░░░░░ Adresa:=ADRESY.Adresa;
#D (DruhMzdy='03') Třída:=''; Sazba:=0;
(DruhMzdy='04') Úkol:=0; Prémie:=Sazba*0.15;
DATABASE
#DATABASE - Popis dat
#DATABASE [-JmDatabáze]
NázevPredikátu[(NázevTypu{,NázevTypu})]
@NázevPredikátu(NázevÚdaje/NázevTypu[{,NázevÚdaje/NázevTypu}])
RDB projekt může obsahovat více databází. Shodné jméno databáze
může být použito v několika "L" kapitolách. Pokud se bude obsah
databáze přenášet vzájemně z několika L kapitol pomocí uložení a obnovy
databáze do globální proměnné musí souhlasit popis použitých typů v
odstavci #DOMAINS.
Kapitola "L" může obsahovat více odstavců #DATABASE.
Znak @ naznačuje, že se jedná o pohled do datového souboru. Typ
údaje musí být určen explicitně. Ve FAND PROLOGU může být zpřístupněna
pouze část vyjmenovaných údajů datového souboru. Zpřístupněn může být i
vypočítaný údaj.
Při vyhledávání predikátu je vždy prováděno sekvenční
prohledávání. Hledání v datovém souboru s vhodným klíčem je prováděno
pomocí indexu.
Databáze znalostí
#DATABASE - Popis dat
#DATABASE [-JmDatabáze]
NázevPredikátu[(NázevTypu{,NázevTypu})]
@NázevPredikátu(NázevÚdaje/NázevTypu[{,NázevÚdaje/NázevTypu}])
RDB projekt může obsahovat více databází. Shodné jméno databáze
může být použito v několika "L" kapitolách. Pokud se bude obsah
databáze přenášet vzájemně z několika L kapitol pomocí uložení a obnovy
databáze do globální proměnné musí souhlasit popis použitých typů v
odstavci #DOMAINS.
Kapitola "L" může obsahovat více odstavců #DATABASE.
Znak @ naznačuje, že se jedná o pohled do datového souboru. Typ
údaje musí být určen explicitně. Ve FAND PROLOGU může být zpřístupněna
pouze část vyjmenovaných údajů datového souboru. Zpřístupněn může být i
vypočítaný údaj.
Při vyhledávání predikátu je vždy prováděno sekvenční
prohledávání. Hledání v datovém souboru s vhodným klíčem je prováděno
pomocí indexu.
Datové typy
#DOMAINS - Definice typů
Odstavec deklaruje nové datové typy. Název datového typu musí
začínat velkým písmenem. Současně lze definovat více typů (seznam
oddělený znakem ","). Při definici lze použít i typ deklarovaný později
v rámci téhož odstavce #DOMAINS a rekurzivní deklarování.
Zápis deklarace má tvar:
{ NázevTypu{,NázevTypuX} = DeklaraceTypu }
jde o zkrácený zápis:
NázevTypu = DeklaraceTypu
NázevTypuX = NázevTypu
NázevTypu Název nově deklarovaného typu.
NázevTypuX Název dalšího deklarovaného typu.
DeklaraceTypu Deklarace nového typu.
Implicitně deklarované typy jsou:
┌──────────────┬──────────────────────────┬──────────────────────┐
│ název │ min. -max. hodnota │ popis │
├──────────────┼──────────────────────────┼──────────────────────┤
│ Integer │ -32768 až +32767 │ celé číslo │
│ Real │ │ desetinné číslo │
│ │ -2.9e-39 až +1.7e8 │ standardní verze │
│ │ -5e-324 až +1.7e308 │ koprocesorová verze │
│ Boolean │ false, true │ logická hodnota │
│ String │ 0 - 255 znaků │ řetězec │
│ LongString │ 0 - 65000 znaků │ dlouhý řetězec │
└──────────────┴──────────────────────────┴──────────────────────┘
Přesnost typu Real se liší u verze bez koprocesoru (11 míst) a u
verze s koprocesorem (15 míst). Term typu LongString se ukládá v
souboru FANDWORK.$$$ a práce s ním bude pomalejší než u typu String
uloženého v operační paměti.
Konstanty typu Real a Integer lze zadat i v hexadecimálním tvaru
začínajícím znakem "$".
Odvozený typ.
NovýTyp = JinýTyp
Predikáty pracující s typem JinýTyp budou pracovat i s odvozeným
typem NovýTyp.
Seznam.
Automaticky pro každý typ Typ je deklarován seznam označený L_Typ.
Seznam označujeme pomocí hranatých závorek a jednotlivé prvky
oddělujeme znakem ",". Znakem "|" se odděluje hlava od těla seznamu.
Výraz na pravé straně je považován za tělo. Hlava obsahuje vyjmenované
prvky seznamu a tělo je zbývající část seznamu, který může být i
prázdný nebo obsahovat několik prvků. "[]" označuje prázdný seznam.
Při zápisu lze použít tvaru [Prvek1{, Prvekx}|ZbytekSeznamu].
Příklad seznamu:
['Alis','Derby','T7'] Seznam termů typu String
[X|Y] Hlava X, tělo Y
Svázání [X|Y] s hodnotou ['Alis','Derby','T7'] sváže proměnné
X s hodnotou 'Alis'
Y s hodnotou ['Derby','T7']
Výčtový typ.
VýčtovýTyp = SeznamTypůOddělStředníkem
Definujeme seznam hodnot, kterých může typ nabývat.
Struktura.
StrTyp[{,StrTyp}] = název(SeznamOddělČárkou)
název Název funktoru
SeznamOddělČárkou Seznam prvků.
FAND PROLOG umožňuje definování i složitých datových útvarů.
Struktura je obdobou recordu jazyka PASCAL. Prvkem struktury může být i
další struktura.
Příklad:
Výčtový typ : Organiz = alis; kibo
Odvozený typ: Firma,Zamestnanec = String
Struktura : Strukt=sez(L_Firma,Real,Strukt)
- rekurzivní odkaz na vlastní typ
Datový editor
DATOVÝ EDITOR
pohyb po souboru pohyb uvnitř údaje
---------------- ------------------
■ <- ..... na předchozí údaj ve větě ■ Ins,CtrlV ......... vkládání/přepis
■ -> ..... na následující údaj ■ <- .................. o znak doleva
■ Enter .. na další editovatelný údaj ■ -> ................. o znak doprava
■ Home ... na první údaj ve větě ■ Home ............. na začátek údaje
■ End .... na poslední údaj ve větě ■ End ................ na konec údaje
■ Ins .... vstup do údaje bez přepsání ■ Del ..... mazání znaku pod kurzorem
■ PageUp ......... na předchozí stranu ■ BackSpace <- ........ před kurzorem
■ PageDown ....... na následující stranu ■ Enter ...... ukončení editace údaje
■ Ctrl-Home ...... na předchozí větu ■ Esc ....... návrat bez uložení změn
■ Ctrl-End ....... na následující větu ■ F4 ............ diakritika pro znak
■ Ctrl-PageUp .... na začátek souboru ■ Alt-F8 ....... přepínání klávesnice
■ Ctrl-PageDown .. na konec souboru
Editace volných textů ... Ins - dovnitř, Esc - zpět. Samotný text editujete
textovým editorem. Na obrazovce znamená * naplněný a . prázdný text. Editaci
datového souboru ukončíte klávesou Esc. Nápověda popisuje běžné ovládání
editoru, v úloze může programátor některé povely uživateli zakázat.
Přepínače pro vkládací a přepisovací režim při editaci dat jsou dva. Jeden pro
textový editor ( údaje typu T ) a jeden pro ostatní typy údajů. Přepínač pro
textový editor je globální (nastavení platí i pro editaci dalších textů).
Přepínač pro ostatní typy dat je naopak lokální, což znamená,že jeho nastavení
je platné jen v rámci právě rozpracované editace údaje. Po vstupu do údaje je
vždy vkládací režim.
DBF
SOUBOR FORMÁTU .DBF
Soubor s příponou .DBF v NázvuSouboru bude na disku uložen ve standardním
formátu .DBF (dBASE III, včetně volných textů .DBT nebo .FPT) a může být
přímo zpracováván databázemi typu XBase. Kromě formátu uložení se z
uživatelského hlediska .DBF soubory neliší od ostatních datových souborů.
.DBF soubory však nemohou mít indexovou podporu a nelze je sdílet v lokální
síti.
Převodní vztah mezi typy údajů PC FANDu a XBase ukazuje tabulka:
┌──────────┬────────────┬───────────────────────────────────────────┐
│ PC FAND │ XBase │ poznámky │
├──────────┼────────────┼───────────────────────────────────────────┤
│ F,n.m │F,N n+m+1,m │ (totéž platí i pro F,n,m) │
│ F,n.0 │F,N n │ │
│ A,n │ C n │ │
│ D │ D │ (bez ohledu na masku zobrazení v PC FANDu)│
│ T │ M │ │
│ B │ L │ │
└──────────┴────────────┴───────────────────────────────────────────┘
Zrušené věty v .DBF souboru budou zobrazeny jinou barvou a po sort nebo
merge se ze souboru vypustí. Když má deklarace souboru .DBF prázdný
Text, při překladu doplní PC FAND deklaraci automaticky podle
hlavičky existujícího souboru na disku.
Vypočtené údaje v souboru DBF mohou být i typů N a R, které však nelze použít
jako typy uložených údajů.
DE
VÝSTUP SESTAVY
DeadLock
LAN - PŘEHLED POUŽÍVANÝCH POJMŮ
Exclusive.. výlučné, výhradní otevření souboru jedním účastníkem, ostatní
účastníci nemají povolen žádný přístup k tomuto souboru.
POZOR - odlišovat od módu Excl
Shared .... sdílený přístup k datovému souboru několika účastníky najednou
Módy blokování souboru.. pro práci se sdílenými soubory FAND používá řadu
módů blokování souboru. Tyto módy umožňují postupný přechod
mezi režimem Shared a Exclusive.
Lock ...... uzamčení, blokování věty datového souboru po dobu provádění
akce. Automatické zamykání vět slouží ke koordinaci datových
editorů, v proceduře je k dispozici také příkaz with locked
Deadlock... zablokování, uváznutí programu v síti je nežádoucí situace,
kdy si účastníci v síti navzájem blokují přístup k souboru
(větě). K uváznutí nedochází často, ale nebezpečí jeho výskytu
vzrůstá s časem, po který jsou soubory (věty) blokovány.
Uváznutí je třeba na jedné za zablokovaných stanic uvolnit
klávesami Ctrl-Break.
Net delay.. perioda pro opakování blokovaného přístupu (čas v CPU).
Konstantu lze instalovat programem FANDINST.
Refresh ... perioda obnovy obrazovky v datovém editoru při sdílené editaci
(čas v sekund.). Konstantu lze instalovat programem FANDINST.
Okamžitou obnovu obrazovky je možné vyvolat ručně CTRL-F2.
DEFINE
PODMÍNĚNÝ PŘEKLAD - direktivy kompilátoru
Často je nutno udržovat několik verzí programu, např. pro několik typů
uživatelů. Tyto situace lze řešit použitím direktiv kompilátoru, pomocí
kterých lze při překladu vynechat části zdrojového textu dle zvoleného
kontextu.
{$define} | {$define X ... X} X je velké písmeno A ... Z
{$ifdef X} | {$ifndef X}
{$else}
{$endif}
Příkaz define zneplatní dosavadní definice a určí množinu definovaných
znaků. Maximálně lze definovat 20 znaků.Takto definované znaky lze použít
v podmínce k označení bloku zdrojového textu, který je vázán na definici
daného znaku (ifdef), nebo naopak na to, že znak definován není (ifndef).
Direktiva else uvozuje blok zdrojového textu, který se přeloží, pokud byl
ignorován text za předchozí direktivou Ifxxx.
Direktiva endif podmíněný blok zdrojového textu ukončí.
Lze s výhodou použít analogii s příkazem procedury if - ale nezaměňovat !
■ Direktivy se mohou vyskytovat všude, kde jsou povoleny komentáře.
■ Direktivy mohou být vnořené jedna do druhé.
■ Při nenávratném zaheslení se vypustí větve programu, které nejsou podle
nastavených přepínačů platné.
■ Časové zdržení překladu podmíněným textem je stejné jako komentářem
této délky.
■ V kapitole F lze použít podmíněnou kompilaci za předpokladu, že je v
první (uložené údaje,#K,#C,#A) a druhé části (#U,#D,#L,#I) použita
samostatně. Druhá část kapitoly F nesmí začínat direktivou.
Direktivy nelze použít uvnitř pohledu (#U).
■ Speciální direktiva {$include NázevKapitolyI} vloží do textu kapitoly
text kapitoly typu I. (vkládané texty)
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
██ Program manipuluje s velkými částkami a chceme rozlišit standardní
verzi a verzi pro koprocesor, která zpracuje větší čísla (ale při
emulaci pomaleji). Podmíníme přímo strukturu datového souboru.
F Soubor ČísloÚčtu : N,6 ;
{$ifndef K}
CelkemKc : F,8.2 ; {standardní verze}
{$else}
CelkemKc : F,12.2 ; {pro koprocesor}
{$endif}
Definice okna
DEFINICE OKNA
Kromě explicitního příkazu with window pro definici okna je možno ovlivnit
i parametry oken v dalších příkazech, které používají okno ke komunikaci
s uživatelem.
V příkazech graph, edittxt, edit a v uživatelských pohledech #U lze použít
pro definici okna parametr ww, který má téměř totožnou syntaxi jako příkaz
with window. Liší se pouze různým počtem atributů barev. V příkazu graph
se deklarují tři barvy, edittxt jedna a v datovém editoru ( a #U ) 7 barev.
Vesměs platí, že pokud se atribut nedefinuje, použije se barva dle
instalace barev pro daný objekt.
Další skupina příkazů pracujících s oknem již neumožňuje jeho plnou defi-
nici ale dle kontextu je možno některé parametry okna definovat a jiné se
dosadí automaticky.
Jde o příkazy a funkce menu, menuloop, menubar, clrscr, selectstr, getpath
a interní okna PC FANDu (výběr údajů,...)
░░░░░░░░░░░░ clrscr(10,5,70,15,^Q)
░░příklady░░ edit(DATA,(),ww=(1,3,40,12,,^A,23,0,^S));
░░░░░░░░░░░░ menubar (3,10,60) of ... ;
Deklarace souboru
DEKLARACE SOUBORU - kapitola F
Deklarace datového souboru obsahuje povinně uložené údaje, další odstavce
kapitoly (začínají speciálním znakem # a písmenem-zkratkou) jsou volitelné:
■ uložené údaje definice fyzické struktury souboru na disku
■ vypočítané údaje (#C) pojmenované výrazy pro další použití
■ klíče (#K) vyhledávání, spojení mezi soubory, integrita
■ aditivní změny (#A) číselná aktualizace údajů nadřízeného souboru
■ uživatelské pohledy (#U) navigace po databázi, přístupová práva
■ závislosti (#D) kontextové pořízení a editace dat
■ logické kontroly (#L) kontrola správnosti zadaných dat
■ implicitní hodnoty (#I) pohodlnější pořizování nových vět
Názvem kapitoly F (NázevSouboru) se na datový soubor odvoláváme v projektu,
výjimečně se v názvu kapitoly F (ne v dalších odkazech) zadává přípona:
■ indexovaný soubor (.X ) automatická indexová podpora pro vlastní klíče
■ projektový soubor (.RDB) údržba jiného projektu
■ soubor pro nápovědu (.HLP) nápověda k úloze (help-soubor)
■ soubor formátu .DBF (.DBF) datová kompatibilita s databázemi typu XBase
■ SQL - tabulka (.SQL) možnost prezentace souboru jako tabulky na SQL
serveru
■ speciální deklarace: like ...... zjednodušená deklarace stejných souborů
(odkaz místo textu) journalof ... žurnál pro sledování změn při editaci
Deklarace Lokálních Proměnných
DEKLARACE LOKÁLNÍCH PROMĚNNÝCH
Lokální proměnné slouží pro uchovávání mezivýsledků uvnitř jedné sestavy,
transformace, procedury nebo funkce. Jejich typy odpovídají typům výrazů.
Pouze v proceduře lze navíc použít record proměnnou (věta souboru),
proměnnou typu pracovní index nebo lokální soubor (typ file) .
█ var SeznamProměnných:Typ .............. lokální proměnná
█ var SeznamProměnných:Typ=PočHodnota ... s počáteční hodnotou (konstanta)
░ var i,j,k:real; i:=j+k;
░ max:real=999999; max+=1;
░ s1,s2:string; write(s1+s2);
░ Hlášení:string='Čekejte, probíhá výpočet !'; message(Hlášení);
░ OK:boolean; if OK then exit;
░ x,y,z:boolean=true; x:=y<=>z;
Del
DEL - duplicitní klíčové slovo
■ with shared Soubor(Del) ... mód blokování souboru,
viz. módy blokování vyšší
■ del_ ..... FAND - PROLOG, implicitní predikát pro rušení prvku v seznamu
Delay
OŠETŘENÍ KLÁVESNICE
DeleteRec
ZALOŽENÍ, RUŠENÍ A OBNOVENÍ VĚTY SOUBORU
Delim
SELECTSTR
Funkce pro výběr z množiny znakových řetězců. Vybrat lze jeden řetězec,
podmnožinu řetězců nebo nic. Pozici výběrového okna a třídění položek
v okně lze stanovit pomocí parametrů.
██ syntaxe: SELECTSTR( X, Y, Vstup
[, head= ] [, foot=] [, delim=] [, mode=] ) : string
■ X,Y ..... Číselné výrazy, souřad.levého horního rohu okna (0 centruje)
■ Vstup ... Textový výraz, který obsahuje seznam vstupních textových
řetězců, oddělených oddělovačem. Oddělovač je implicitně
nový řádek, lze ho předefinovat pomocí parametru delim.
Jednotlivé položky bere v maximální délce 46 znaků,
u delších jen začátek.
■ head .... Textový výraz, obsahuje text pro horní hranu okna.
■ foot .... Textový výraz, obsahuje text pro spodní hranu okna.
■ delim ... Textová konstanta, znak v apostrofech.
■ mode .... Textový výraz, mohou se vyskytovat znaky ve významu :
A abecedně setřídit
S vybírá se množina řetězců (subset)
I implicitně vybrat všechny (při Enter bez výběru)
Hodnotou funkce je seznam vybraných řetězců oddělených znakem nový řádek
( '\13' - vždy ). Pokud uživatel zadá ESC je seznam prázdný a exitcode=1.
DH
VÝSTUP SESTAVY
DifMonth
ODEČTENÍ ČASU
Funkce difwdays vrací počet pracovních dnů ( resp. dnů daného typu ) mezi
dvěma daty. Analogicky difmonth vrací rozdíl mezi daty v měsících. Funkce
fungují v intervalu 1.1.1910 .. 31.12.2019, nezapočítává Datum1
██ Syntaxe: DIFWDAYS ( PočDatum ,KoncDatum [,Typ] ) : real
DIFMONTH ( PočDatum ,KoncDatum ) : real
■ PočDatum Číselné výrazy, počáteční a koncové datum v interním
■ KoncDatum .... formátu. Lze i KoncDatum < PočDatum.
■ Typ .......... Typ dne o které se započítají do výsledku, pokud není
zadán, použije se typ 0 (pracovní den). Na výsledek
funkce difwdays má tedy vliv i instalovaná tabulka
pracovních dní viz. Instalační program.
Inverzní funkce: addwdays, addmonth
DifWDays
ODEČTENÍ ČASU
Direktivy
PODMÍNĚNÝ PŘEKLAD - direktivy kompilátoru
DirX
PARAMETRY GRAFU
■ HEAD=TextVýraz ... hlavička grafu,centrována,velkými písmeny, v základní
barvě (implic.bílá), v horní části grafu. head=''
potlačí zobrazení hlavičky. Implicitně se použije
název souboru (není-li head uvedeno).
■ HEADX=TextVýraz... popis (název) osy X, implicitně název 1.údaje
ze seznamu. Směr výpisu viz. parametr DirX.
■ DIRX=TextVýraz ... směr popisu a názvu osy X, string délky 1 znak
H - horizontální (pro CIRCLE popis uvnitř grafu)
V - vertikální (pro CIRCLE popis v legendě)
I - vertik. hlavička X, popis údajů uvnitř objektu
platí pro 2DBAR a CIRCLE, pro ostatní jako V)
■ HEADY=TextVýraz... Popis osy Y. Pro (2DBAR | CIRCLE | APPROX | POLYREG)
implicitně název 2.údaje ze seznamu.
■ HEADZn=TextVýraz.. Pro 3DBAR a 3DLINE popis osy Zn, nebo
popis legendy pro GROUP, GROUPLINE.
DiskFree
OBSAZENÍ DISKU A VELIKOST SOUBORU
Funkce diskfree vrací volné místo na disku v byte. Při chybě vrací -1.
██ Syntaxe: DISKFREE ( Disk ) : real
■ Disk .......... Textový výraz, označení diskové jednotky (A,B,C,...),
Rozhoduje první znak výrazu.
Funkce filesize vrací délku souboru v bytech (-1 když neexistuje).
Aktivní datový soubor (kapitola F) je nejprve nutno uzavřít pomocí close.
██ Syntaxe: FILESIZE ( JménoSouboru ) : real
■ JménoSouboru... Buď fyzická cesta v apostrofech nebo název dle katalogu.
░░░░░░░░░░░░ edit( soubor,(),...) ;
░░příklady░░ close ;
░░░░░░░░░░░░ writeln('fyzická délka=', filesize('soubor.000')) ;
{ POZOR! - takto lze jen, není-li soubor katalogizován }
Display
VÝSTUP NA OBRAZOVKU
Příkaz display zobrazí do aktuálního okna help jako běžný text včetně
interpretace barev a formátování textu podle šířky okna. Příkaz help
zobrazí ( do aktuálního okna ) odpovídající heslo v konvencích helpu, tj.
včetně navigace na další hesla.
██ syntaxe : DISPLAY( HesloHelpu )
HELP( HesloHelpu )
────────────
Zápis do prvního (systémového) řádku obrazovky, výpis je centrován.
Zprava se doplní aktuální datum (od verze 4.2 ve formátu DD.MM.YYYY).
██ syntaxe : HEADLINE( TextVýraz )
────────────
Hlášení v posledním řádku potvrzované klávesou F10.
██ syntaxe: MESSAGE( SeznamPrvků [,help=HesloHelpu] )
■ SeznamPrvků ... viz. příkaz write
■ HesloHelpu .... Textový výraz pro heslo help-souboru. Před potvrzením
hlášky klávesou F10 může uživatel klávesou F1 vyvolat
odpovídající text helpu.
Div
SPECIÁLNÍ OPERÁTORY
█ ČísVýraz DIV ČísVýraz :real ..... celočíselné dělení
█ ČísVýraz MOD ČísVýraz :real ..... zbytek po celočíselném dělení
░ 10 div 3 = 3
░ 10 mod 3 = 1
█ ČísVýraz1 ROUND ČísVýraz2 :real ... zaokrouhlení ČísVýraz1 na určený počet
míst dle hodnoty ČísVýraz2 (0..10)
░ pi round 2 = 3.14
░ 1.6 round 0 = 2
█ Výraz IN [SeznamArgumentů] :boolean ... množinový test
testuje, zda výraz je prvkem množiny konstant nebo intervalů konstant
konstanty a výraz jsou stejného typu (real nebo string)
■ in.Číslo ...přesnost číselného srovnání (počet des.míst, implicitně 5)
■ in~ ....... lexikální textové srovnání v národní abecedě
░ Účet in ['300'..'399','520','800'..'999']
░ Rok in [1914..1918,1939..1945,1968,1989]
Do
WITH, DO - duplicitní klíčová slova
■ while do ......... while cyklus podle podmínky
■ forall do ........ forall cyklus přes věty souboru nebo podmnožinu
■ with window do ... definice okna pro výstup na obrazovku
■ with graphics do . přepnutí do grafického módu
■ with shared do ... určení režimu blokování (LAN)
■ with locked do ... uzamčení věty (LAN)
DOMAINS
#DOMAINS - Definice typů
Doplňky editoru
DOPLŇKY EDITORU
kreslení čar a rámečků
■ Ctrl-Q - ........ jednoduchá čára ┌──┐
■ Ctrl-Q = ........ dvojitá čára │ ╔ě═╗
■ Ctrl-Q / ........ maže čáru ve směru pohybu kurzoru └─Î┘ ║
■ šipky ........... kreslení čáry ╚══╝
■ Esc ............. konec kreslení
v průběhu kresby rámečku lze použít:
■ - ............... přepnutí na jednoduchou čáru
■ = ............... přepnutí na dvojitou čáru
■ \ ............... přepnutí na mazání
■ ' ' ............. mezera - přepnutí na pohyb kurzoru bez kresby či mazání
■ F4 .............. přidání/odstranění diakritiky ke znaku pod kurzorem
■ Alt-F8 .......... vyvolá menu pro přepínání rozložení kláves
■ Ctrl-F5 ......... vyvolání kalkulačky (Ctrl-F4 - převzetí do textu)
Dotaz uživateli
DOTAZ UŽIVATELI
Zadání hodnoty z klávesnice.
██ syntaxe: PROMPT ( Dotaz : Typ1 [ := Implicitně ] ) : Typ2
■ Dotaz ...... Textový výraz, který se vypíše na aktuální pozici obrazovky.
■ Typ1 ....... Použije se jeden z typů kapitoly F (F,A,N,B,D). Komunikace
při editaci potom odpovídá editaci jednoho údaje tohoto
typu datovým editorem. Tomuto typu odpovídá i typ vrácené
hodnoty Typ2: string pro typ1=A,N
real F,D
boolean B
■ Implicitně.. Nepovinné zadání implicitní hodnoty odpovídajícího typu.
■ Kapitoly ... P,D
───────────────────
Test na ukončení posledního PROMPTu klávesou Esc ?
██ syntaxe: ESCPROMPT : boolean ...
Dotaz typu A/N na 25. řádku obrazovky.
██ syntaxe: PROMPTYN ( Dotaz ) : boolean
komunikační příkazy typy údajů typy výrazů
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
██ BEGIN
....
r:=prompt('Zadej datum a čas':D,'DD.MM.YY hh:mm':=today+currtime);
if escprompt then
if prompt('Ukončit program ? (A/N) ':B) then cancel
else ...
...
END ;
Dupl
PARAMETRY EDITACE
Parametry příkazu edit, lze je použít i v definici uživatelského pohledu.
██ tab=(SeznamÚdajů) .... nastavení tabelátorů , viz. seznam údajů
██ dupl=(SeznamÚdajů) ... nastavení automatické duplikace
██ noed=(SeznamÚdajů) ... zadané údaje nelze editovat (měnit), ani při
pořízení
██ mode='SeznamMódů' .... mód editace (parametrizace některých funkcí
datového editoru) viz. módy datového editoru
██ cond=(LogVýraz) ...... podmínka pro výběr vět k editaci, v podmínce
lze použít key in - výběr podle indexu
██ journal=NázevSouboru . soubor pro uchování změn při editaci (journalof)
██ saveafter=ČísVýraz ... aut.uložení na disk po daném počtu změněných vět.
Zajistí korektní stav editovaného souboru. Menší
saveafter znamená vyšší bezpečnost při výpadku
proudu či jiné havárii.
██ ww=(...) ............. editace v okně
██ exit=(...) . ..... přerušení editace (volání vnořené procedury)
██ head=TextVýraz ... nestandardní první (systémový) řádek editoru, může
obsahovat masku pro číslo věty _____ , (a) nebo
masku pro dnešní datum __.__.__)
██ watch=ČísVýraz ... časový interval (sek.), pokud tak dlouho není
stisknuta klávesa, zvukově varuje, čekání 3 x opakuje
a potom ukončí automaticky editaci. Je to prevence
proti zablokování sítě uživatelem (edbreak=11)
Pouze pro sdílené soubory ( #, #R v katalogu ).
██ refresh=ČísVýraz.. časový interval (sek.) pro automatickou obnovu
obrazovky při editaci sdílených souborů v LAN.
██ last,Ctrl,Shift,Alt ... alternativní nápověda
Dummy
VÝSTUP TRANSFORMACE
Určuje výstupní soubory transformace, způsob naplnění výstupních dat a
intervaly zápisu do výstupních souborů. Druhy výstupu určují, ve kterém
okamžiku čtení vstupu se provede výstup:
█ #Oi_NázevSouboru ... detailní výstup (vystoupí za každou vstupní větu)
i je pořadové číslo odpovídajícího vstupního souboru
█ #O_NázevSouboru .... skupinový výstup (vystoupí jednou za skupinu)
skupina vět se stejnými řídícími údaji
█ #O*_NázevSouboru ... násobný výstup (vystoupí pro každou kombinaci vět)
součin vstupních souborů po skupinách
■ klíčové slovo dummy místo NázvuSouboru ..... neprobíhá fyzický výstup do
souboru, pouze přiřazení do proměnných
Každý výstup může být doplněn:
█ #O1_NázevSouboru + (LogVýraz) Přiřazení; ... rozšíření výstupu
■ + ........ nové věty (i indexy) připojí za konec souboru (jinak přepsání)
připojovat nelze za soubor, který je zároveň vstupní
■ LogVýraz ... výstupní logická podmínka (výstup se provede, je-li splněna)
■ Přiřazení... přiřazovací příkazy pro naplnění výstupní věty
(výpočetní část výstupu)
Duplicitní klíčová slova
DUPLICITNÍ KLÍČOVÁ SLOVA
assign end mode txtpos
append else nocancel txtxy
archives exit nrecs U
begin group recno var
call head save width
cond I sort with
ctrl if sum write
del in then writeln
do line txt ww
edit
Dynamické deklarace
DYNAMICKÉ DEKLARACE
Klasickým přístupem k programování je spouštění předem odladěných úloh, tj.
jednotlivých kapitol. Některé konstrukce PC FANDu však lze dynamicky
sestavit až při běhu úlohy. Odpovídající zdrojový kód vložíme do textového
výrazu, který se použije při vyvolání místo odpovídající kapitoly.
V takovém případě však při provedení těchto konstrukcí může dojít
k nepředvídatelným běhovým chybám.
Syntaktická správnost je plně v moci programátora a proto lze tyto možnosti
doporučit jen zkušeným programátorům.
report( ...,[TextovýVýraz],...) .......... dynamická deklarace sestavy
merge([TextovýVýraz]) ..................... dynamická deklarace transformace
proc([TextovýVýraz],...) .................. dynamická deklarace procedury
proc(...,(@[NázevSouboru,TextVýraz],..))... dynamická deklarace pracovního
souboru - viz. parametr FILE.
edit(...,[TextovýVýraz]...) ....... dynamická deklarace formuláře editace
#U NázevPohledu ...:[TextovýVýraz].. formulář pro uživatelský pohled
exit=(..:[TextovýVýraz],...:report([TextovýVýraz],..))
dynamická deklarace exit-procedury
██ CHECK - ověření syntaktické správnosti před spuštěním:
edit(...,[TextovýVýraz],check,...) ....... dynamická deklarace sestavy
report(...,[TextovýVýraz],check,...) ...... dynamická deklarace formuláře
S parametrem check se příkazy neprovedou ale zkontrolují syntaxi dynamicky
deklarovaných kapitol E resp. R. Výsledek:
exitcode .... = 0 když O.K.
> 0 když chyba, = pozice chyby v textu
edreckey .... text chybového hlášení