#A
ADITIVNÍ ZMĚNY - odstavec #A
Aditivní změny umožňují aktualizovat během editace
podřízeného souboru
číselné údaje
nadřízeného souboru podle zadaného číselného výrazu. Výraz
se vyhodnotí před a po editaci věty, pokud se změnila jeho hodnota, rozdíl
se přičte k aktualizovanému údaji
viditelné věty nadřízeného souboru (pro
nové věty se výraz přičte, pro zrušené věty se odečte). Soubory samozřejmě
musejí být spojeny
klíčem. Změny se provedou tranzitivně přes více úrovní
nadřízených souborů.
██ Syntaxe: #A { ViditelnýÚdaj [ ( LogVýraz [ :'ChybovéHlášení' ] ) ]
               [ ! | !! ] [ += | := ] ČísVýraz ; }
■ při použití += se provede aditivní změna tak, jak byla výše popsána
■ při použití := se provede prosté přiřazení nové hodnoty (nikoliv rozdíl)
■
Viditelný údaj může být údaj nadřízeného souboru nebo globální proměnná
                 (tj. údaj parametrického
souboru)
█
NázevSpojení.NázevÚdaje+=ČísVýraz; ...
aditivní změna do
nadřízeného
                    
                   
souboru (minimální varianta)
■
(LogVýraz) ........ před aditivní změnou se provede logická kontrola
■
'ChybovéHlášení'... chyba vyvolá toto hlášení
■
!  ................ dotaz na vytvoření viditelné věty, když neexistuje
■
!! ................ automatické vytvoření viditelné věty bez dotazu
(naplní se hodnoty klíčových údajů podle podřízené věty)
Aditivní změna předpokládá existenci viditelné věty , jinak hlásí editor
chybu "není věta pro kumulaci". Pomocí navigace lze chybějící větu doplnit
ručně, uvedení znaku ! v deklaraci toto zajistí automaticky. Pokud logická
kontrola v nadřízeném souboru spuštěná před provedením aditivní změny
skončí chybou, aditivní změna se neprovede a uživatel musí opravit edito-
vanou větu nebo anulovat změny, případně přepínačem vypnout aditivní změny.
Logické kontroly v podřízeném souboru lze simulovat konstrukcí cond v
číselném výrazu.
■ Při editaci souboru může obsluha provádění aditivních změn vypnout.
  Viz.
přepínače datového editoru.
■ Programátor může toto obsluze zakázat pomocí parametru editace mode='
#A'.
  Viz.
mody datového editoru.
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
#A SKLAD.Stav += Množství; {příklady deklarace aditivních změn}
   SKLAD.Stav += cond(Zaevidováno:Množství);
   SKLAD.Stav (Stav>=PARAM.Min) += Množství; {s logickou kontrolou}
   SKLAD.Stav (Stav>0:'Není na skladě') += Množství; {s chybovým hlášením}
   SKLAD.Stav ! += Množství; {s vytvořením chybějící věty pro kumulaci}
   SKLAD.Stav !! += Množství; {totéž bez dotazu}
#A PARAM.Počet += 1; {kumulace do parametrického souboru}
#A KUMUL.Zisk !! += cond(Příjmy>Výdaje:Příjmy-Výdaje);
   KUMUL.Ztráta !! += cond(Příjmy<Výdaje:Výdaje-Příjmy);
Abs
ARITMETICKÉ FUNKCE
Uvedené funkce jsou typu real, jejich výsledkem je tedy číselná hodnota.
█ abs(ČísVýraz) ...... absolutní hodnota
█ int(ČísVýraz) ...... celá část čísla (před desetinnou tečkou)
█ frac(ČísVýraz) ..... desetinná část čísla (za desetinnou tečkou)
█ sqr(ČísVýraz) ...... druhá mocnina
█ sqrt(ČísVýraz) ..... druhá odmocnina
█
random .............
náhodné číslo z intervalu <0,1)
█ ln(ČísVýraz) ....... přirozený logaritmus
█ exp(ČísVýraz) ...... exponenciální funkce
█ pi ................. Ludolfovo číslo
█ sin(ČísVýraz) ...... sinus
█ cos(ČísVýraz) ...... cosinus
█ arctan(ČísVýraz) ... arcus tangens
AccRight
PRÁVA PŘÍSTUPU K DATŮM
Následujícími funkcemi se lze dotázat na jméno, kód a přístupová práva
aktuálního uživatele podle kapitoly U (závisí na heslu, kterým se uživatel
přihlásil) a podle nich měnit chování úlohy pro různé uživatele. Během
zpracování lze všechny hodnoty měnit přiřazovacím příkazem bez nutnosti
nového nastartování úlohy a přihlášení se pod novým heslem.
█ USERNAME: string ... interní proměnná, jméno aktuálního uživatele,
(lze i přiřadit username:=TextVýraz)
█ USERCODE: real ..... interní proměnná, kód aktuálního uživatele
(lze i přiřadit usercode:=ČísVýraz)
POZOR: při usercode:=číslo se naplní stejnou
hodnotou i accright (accright:='\číslo')
█ ACCRIGHT: string ... interní proměnná, přístupová práva kódovaná do textu
Seznam čísel je kódován jako ordinální hodnoty
jednotlivých bytů stringu, maxim. délka je 255 znaků
(lze i přiřadit accright:=TextVýraz)
█ TRUST(SeznamČísel): boolean ... test práva přístupu
funkce vrátí true, když aktuální seznam přístupových
práv a množina čísel v parametru nejsou disjunktní.
V parametru SeznamČísel lze použít i interval.
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
██ Použitím kapitoly U se inicializuje implicitní mechanismus přístupových
práv, který lze ovlivnit výše uvedenými funkcemi a proměnnými. Kapitolu
U je možné i úplně vypustit a přesto pomocí těchto funkcí používat
přístupová práva.
Kapitolu U s obsahem :
'Jana' , (2) , 'obsluha' , ( 1, 5, 20, 100, 221 ) ;
lze rovnocenně nahradit příkazy procedury (spustíme při startu úlohy):
if password = 'obsluha' then begin
usercode := 2 ;
username := 'Jana' ;
accright := '\001\005\020\100\221' ;
end ;
Poznámka: Pokud umístíme údaje z kapitoly U např. do datového souboru,
přináší nám to zhruba tyto výhody:
■ změna uživatele za běhu úlohy
■ privilegovaný uživatel má z úlohy přístup k údajům
  o ostatních uživatelích (různé statistiky jejich práce)
■ možnost práce se seznamem uživatelů "zevnitř" úlohy
add
Vyhledání, případně doplnění prvku do seznamu
add_NázevTypu(Prvek,Seznam_Vstup,&Seznam_Výstup)
Prvek Hledaný prvek v seznamu typu NázevTypu.
Seznam_Vstup Vstupní seznam prvků typu L_NázevTypu.
Seznam_Výstup Výstupní seznam obsahující zařazený prvek.
Predikát vyhledává term v seznamu. Při nalezení je výstupní seznam
kopie vstupního seznamu. Pokud není nalezen je prvek doplněn na začátek
seznamu.
Příklad:
hl_prvek:-add_String('A',['A','B'],X),add_String('A',['B'],Y),
write('X:',X,' Y:',Y).
V prvním volání je prvek 'A' v seznamu nalezen (X=['A','B']) , ve
druhém případě nalezen není a je do seznamu doplněn (Y=['A','B']) .
AddMonth
AddWDays
PŘIČTENÍ ČASU
Funkce addwdays přičte ( resp. odečte ) k počátečnímu datumu zadaný počet
dní daného typu. Obdobně funkce addmonth přičte zadaný počet měsíců.
Návratové hodnoty jsou v interním datovém formátu PC FANDu.
██ Syntaxe: ADDWDAYS ( PočDatum , OKolikDní [,Typ] ) : real
ADDMONTH ( PočDatum , OKolikMěsíců ) : real
■ PočDatum ..... Číselný výraz, počáteční datum v interním formátu.
■ OkolikDní .... Číselný výraz, o kolik dní (zadaného typu) se má datum
posunout. Když je záporný, provede se odečtení.
■ OKolikMěsíců.. obdobně
■ Typ ..........
Typ dne, o který se má datum posunout, pokud není zadán,
použije se typ 0 (pracovní den). Na výsledek funkce
addwdays má tedy vliv i instalovaná tabulka pracovních
dní viz. Instalační program.
■ Omezení ...... AddWDays má horní hranici 2020 (obrana proti zacyklení)
Inverzní funkce :
difwdays,
difmonth
Aditivní změny
ADITIVNÍ ZMĚNY - odstavec #A
Aditivní změny umožňují aktualizovat během editace podřízeného souboru
číselné údaje nadřízeného souboru podle zadaného číselného výrazu. Výraz
se vyhodnotí před a po editaci věty, pokud se změnila jeho hodnota, rozdíl
se přičte k aktualizovanému údaji viditelné věty nadřízeného souboru (pro
nové věty se výraz přičte, pro zrušené věty se odečte). Soubory samozřejmě
musejí být spojeny klíčem. Změny se provedou tranzitivně přes více úrovní
nadřízených souborů.
██ Syntaxe: #A { ViditelnýÚdaj [ ( LogVýraz [ :'ChybovéHlášení' ] ) ]
[ ! | !! ] [ += | := ] ČísVýraz ; }
■ při použití += se provede aditivní změna tak, jak byla výše popsána
■ při použití := se provede prosté přiřazení nové hodnoty (nikoliv rozdíl)
■ Viditelný údaj může být údaj nadřízeného souboru nebo globální proměnná
(tj. údaj parametrického souboru)
█ NázevSpojení.NázevÚdaje+=ČísVýraz; ... aditivní změna do nadřízeného
souboru (minimální varianta)
■ (LogVýraz) ........ před aditivní změnou se provede logická kontrola
■ 'ChybovéHlášení'... chyba vyvolá toto hlášení
■ ! ................ dotaz na vytvoření viditelné věty, když neexistuje
■ !! ................ automatické vytvoření viditelné věty bez dotazu
(naplní se hodnoty klíčových údajů podle podřízené věty)
Aditivní změna předpokládá existenci viditelné věty , jinak hlásí editor
chybu "není věta pro kumulaci". Pomocí navigace lze chybějící větu doplnit
ručně, uvedení znaku ! v deklaraci toto zajistí automaticky. Pokud logická
kontrola v nadřízeném souboru spuštěná před provedením aditivní změny
skončí chybou, aditivní změna se neprovede a uživatel musí opravit edito-
vanou větu nebo anulovat změny, případně přepínačem vypnout aditivní změny.
Logické kontroly v podřízeném souboru lze simulovat konstrukcí cond v
číselném výrazu.
■ Při editaci souboru může obsluha provádění aditivních změn vypnout.
Viz. přepínače datového editoru.
■ Programátor může toto obsluze zakázat pomocí parametru editace mode='#A'.
Viz. mody datového editoru
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
#A SKLAD.Stav += Množství; {příklady deklarace aditivních změn}
SKLAD.Stav += cond(Zaevidováno:Množství);
SKLAD.Stav (Stav>=PARAM.Min) += Množství; {s logickou kontrolou}
SKLAD.Stav (Stav>0:'Není na skladě') += Množství; {s chybovým hlášením}
SKLAD.Stav ! += Množství; {s vytvořením chybějící věty pro kumulaci}
SKLAD.Stav !! += Množství; {totéž bez dotazu}
#A PARAM.Počet += 1; {kumulace do parametrického souboru}
#A KUMUL.Zisk !! += cond(Příjmy>Výdaje:Příjmy-Výdaje);
KUMUL.Ztráta !! += cond(Příjmy<Výdaje:Výdaje-Příjmy);
Akce
F6 - AKCE DATOVÉHO EDITORU
F6 vyvolá akce pro právě editovaný soubor.
┌─────────────────┐
│ Opis            │ generátor automatických sestav
│ Kontroly        │ od pozice kurzoru až do konce souboru provede kontroly
│ Nová podmnožina │ zadání logického výrazu pro vybranou podmnožinu
│ Graf            │ grafické zobrazení dat souboru (interaktivní režim)
│ Třídit          │ setřídí soubor podle vybraných údajů
└─────────────────┘
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
Datum>=1.1.92 {příklady zadání výrazu pro novou podmnožinu}
Ucet in ['300'..'599','999']
Mzda>5000
Místo=~'Praha'
Align
SETEDITTXT
Způsob práce textového editoru lze ovlivnit nastavením přepínačů, které
se nastavují interaktivně při editaci ( viz. přepínače ) nebo před startem
textového editoru příkazem procedury SetEditTxt.
Přepínače jsou globální v rámci PC FANDu. Tj. jednou nastavená hodnota
platí i po opuštění textového editoru a startu editoru s jiným textem nebo
i v rámci jiné úlohy, dokud není explicitně nastavena jiná hodnota.
Při startu PC FANDu jsou přepínače resetovány na implicitní hodnoty.
██ syntaxe: SETEDITTXT ( [ Overwr=LogVýraz, ] [ Indent=LogVýraz,]
[ Align=LogVýraz, ] [ Wrap=LogVýraz,]
[ ColBlk=LogVýraz, ]
[ Left=ČísVýraz, ] [ Right=ČísVýraz,] )
■ Overwr .... vkládání/přepis ■ Align ... zarovnání
■ Indent..... odsazení ■ ColBlk... režim sloupcových bloků
■ Left ...... levý okraj textu ■ Wrap .... automat.formátování
■ Right ..... pravý okraj textu
Příkaz nastaví jen uvedené přepínače, ostatním ponechá dosavadní hodnoty.
all
Cyklické volání predikátu
all_NázevTypu(Predik([&]Term{,[&]Term}),
Výsl, &Seznam_Výsl)
Predik(Term{,Term}) Vyvolávaný predikát.
Výsl Term zapisovaný do seznamu.
Seznam_Výsl Výstupní seznam tvořený z termů Výsl.
Umožňuje cyklické volání predikátů a sestavení seznamu z
výstupních parametrů.
Predikát Predik je opakovaně vyvoláván až do okamžiku nesplnění -
fail. Po úspěšném návratu predikátu Predik je vyhodnocen term Výsl a
zařazen do seznamu Seznam_Výsl.
Opakované volání lze naprogramovat i pomocí implicitního predikátu
fail. Záporem naprogramovaného cyklu je nemožnost předat přiřazenou
proměnnou. Při zpětném chodu je výsledek predikátů mimo efektu assert,
retract a procedur FANDu anulován.
Příklad:
cykl:- all_String(fandfile(X,_,_,_),X+' <--' ,Y),writeln(Y).
Cyklické vyvolávání predikátu fandfile. K jménu souboru je
připojen ukazatel a výsledek je zařazen do seznamu, který je na závěr
vypsán.
Alt
Ctrl-Home ALTERNATIVNÍ NÁPOVĚDA
Pomocí těchto parametrů lze ovládat nápovědní (25.) řádek datového editoru
Symboly funkčních kláves (Ctrl,Alt,Shift,*F1..*F10) a dalších kurzorových
kláves, zvýrazněné pomocí ^W generují při stisku (click) myši odpovídající
akci.
██ last=TextVýraz .... nahradí standardní poslední (25.) řádek editoru
██ ctrl=TextVýraz .... alternativní text nápovědy po delším stisku Ctrl
██ alt=TextVýraz  .... - " - Alt
██ shift=TextVýraz ... - " - Shift
V textu alternativní nápovědy není třeba zadávat celou "ikonu" ale stačí
uvést jen vlastní funkční klávesa. Např. v nápovědě Ctrl se bere ikona F8
jako Ctrl-F8.
Nápověda kláves v 25. řádku může být "překryta" nápovědou datového editoru
viz. mode='F1' (módy datového editoru). Lepší řešení je použít mode='F124'.
─── Ctrl-End ─────────────────────────────────────────────────────────────
Append
APPEND - duplicitní klíčové slovo
■ PutTxt(...,append ...) .... připojení textu k souboru
■ CopyFile(...,append...) ... připojení jednoho souboru k jinému.
AppendRec
ZALOŽENÍ, RUŠENÍ A OBNOVENÍ VĚTY SOUBORU
Příkaz pro zrušení věty souboru má dvě varianty podle způsobu identifikace
věty: fyzickým číslem věty nebo hodnotou vlastního klíče. U neindexovaných
souborů dojde k fyzickému zrušení věty v souboru ( věty za zrušenou se po-
sunou "dopředu"). U indexovaných souborů se věta pouze označí jako neplatná
a vyřadí se všechny její indexy. Fyzicky bude věta vyloučena při celkové
reorganizaci (indexfile-compress,výstup merge). Odtud plyne možnost obnovy
zrušené věty (recallrec). Test platnosti věty indexového souboru provede
funkce isdeleted. Obnovu zrušené (zneplatněné) věty indexového souboru
provede příkaz recallrec.
██ syntaxe: DELETEREC (NázevSouboru ,ČísloVěty [,+] )
DELETEREC (NázevSouboru [ /NázevKlíče ] ,HodnotaKlíče [,+] )
funkce ISDELETED (NázevSouboru ,ČísloVěty ) : boolean
funkce ISDELETED (RecordProměnná) : boolean
RECALLREC (NázevSouboru ,ČísloVěty [,+] )
APPENDREC (NázevSouboru)
■ ČísloVěty ... Fyzické číslo věty, číselný výraz.
■ NázevKlíče .. Vlastní klíč souboru. Implicitně @.
■ HodnotaKlíče Textový výraz, hodnota klíče v interní podobě.
Viz. KeyOf, SQL
■ + ........... Provedení aditivních změn. V případě havárie se aditivní
změny neprovedou a nastaví se exitcode=1.
IsDeleted je funkce definovaná pro indexové soubory (soubor formátu .DBF)
Vrací true pokud je věta neplatná. Druhá varianta testuje výsledek
příkazu readrec. Vrací true když je přečtená věta neplatná , respektive
se hledaná hodnota klíče nenašla.
U indexovaných souborů příznak IsDeleted udává, zda je věta platná (false)
nebo neplatná (true). Přidávání (rušení) vět u neindexovaných souborů zna-
mená reorganizaci celého souboru, zatímco u indexovaných pouze nastavení
příznaku.
RecallRec označí větu indexového souboru za platnou, nastaví prefix věty
IsDeleted:=false, zkontroluje duplicitu a zařadí větu do indexů.
AppendRec připojí prázdnou větu za konec souboru. U indexového souboru
bude věta označena jako neplatná (isdeleted:=true). Příkaz je poněkud
archaickým pozůstatkem ze starších verzí (kompatibilita).
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
██ SKLAD[x].ks+= -Mnozstvi; {přímý přístup do souboru}
SKLAD[SKLAD.NRecs].Cena:=10.5;
appendrec(DATA) {připojování vět}
deleterec(SKLAD,1) {mazání vět}
deleterec(SKLAD,SKLAD.nrecs)
██ appendrec(DATA); { zařazení nové věty do indexového souboru}
věta:=DATA.nrecsabs; { Tento způsob ovšem silně voní nostalgií }
DATA[věta].údaj1:=... { po verzi 2.2 }
DATA[věta].údaj2:=...
...
recallrec(DATA,věta);
{ lepší způsob }
VAR rec : record of soubor ;
....
rec.udaj1:= ... ; { méně fyzických přístupů do souboru }
rec.udaj2:= ... ; { "měkčí" na blokování v LAN }
writerec( rec,0) ;
██ i:=1; {obnovení zrušených vět v indexovém souboru}
repeat if isdeleted(DATA,i) then recallrec(DATA,i)
i:=i+1;
until i=DATA.nrecsabs
ArcTan
Archivace
ZÁLOHOVÁNÍ
PC FAND zahrnuje podporu pro zálohování (archivaci) datových souborů,
přičemž existují dva možné přístupy:
1. logické zálohování souborů, jejichž seznam se uveden v katalogu
příkazy backup a restore
2. fyzické zálohování souborů z adresáře podle masky (analogie ARJ,ZIP,....)
příkazy backupm a restorem
Zásady logické archivace:
■ Pro účely zálohování má základní význam katalog úlohy. Pomocí katalogu
lze definovat určité úrovně archivace ( např. denní, měsíční,...)
a rozdělení souborů do těchto úrovní.
■ Pro každý soubor, který chceme zálohovat musí v katalogu existovat
položka s cestou k souboru a číslem archivace (Ar). Pomocí údaje kata-
logu číslo archivace (ar) lze určit do které úrovně archivace patří.
■ Pro každou úroveň archivace lze speciální položkou katalogu určit
název archivace a adresář pro zálohovaná data. Pod jeden název archivace
lze spojit více úrovní archivace:
NazUlohy NazSouboru Ar Cesta Navesti
ARCHIVES NázevArchivace ČísloArch. AdresářArchívu Návěští 1.diskety
ARCHIVES ......... povinné jméno úlohy
NázevArchivace ... použije se v příkazech backup a restore.
ČísloArchivace ... určení úrovně archivace, další úrovně mohou být
zadány v položce cesta - viz. dále
AdresářArchívu ... musí končit znakem '\', za alespoň jednou mezerou
lze psát další ČíslaArchivace (např. A:\ 1,3,4 )
■ Na jednotlivé soubory se uplatní kompresní algoritmus.
■ Zálohování se provede příkazem backup, obnova dat příkazem restore.
■ Pokud je to nutné (nejsou čitelné), jsou při zálohování (volitelně)
formátovány cílové diskety, včetně zápisu návěští.
Zahrnuta je i podpora více disket dle konvencí příkazu copyfile.
■ Název zálohovaného souboru se rovná názvu originálu bez cesty.Rozlišení
pomocí přípony : .0xx resp. Txx xx je pořadové číslo během
kopírování x je 0..9,A..Z
.5xx resp. Yxx pokud pokračuje na další disketě
Archives
ARCHIVES - duplicitní klíčové slovo
■ NázevDleKatalogu.Archives ..... přímý přístup k údajům katalogu v
proceduře ( archives)
■ spec. název úlohy v katalogu... speciální jméno úlohy archives v
katalogu označuje položku pro definici
názvu archivace - viz zálohování
Aritmetické funkce
assert
assert
assert(predikát[(Term[{,Term}])])
predikát Vkládaný databázový predikát.
Term Konstanta nebo vázaná proměnná.
Predikát assert ukládá do databáze databázový predikát definovaný
jako parametr. Termy smějí obsahovat jen konstanty a vázané proměnné.
Predikát se ukládá na konec databáze.
Nelze použít pro predikáty definované jako soubory PC FANDu s
indexovou podporou v cyklu čtení téhož predikátu.
Příklad:
uloz:- assert(a(1)), assert(a(2)), assert(b(2)).
Assign
ASSIGN - duplicitní klíčové slovo
■ Report(...,assign=TextVýraz ...) ... přesměrování tiskového výstupu
parametry sestavy
■ Graph(...,assign=TextVýraz...) ..... přesměrování souboru .PCX pro zápis
Automatická sestava
AUTOMATICKÁ SESTAVA
Umožňuje vytisknout obsah datového souboru nebo jeho části s automatickým
rozvrhem strany. Vyvolává se z datového editoru (F6-akce, Opis) nebo přímo
v projektu procedurou report. Dovoluje výběr podmnožiny, dočasné třídění,
součtování a dělení souboru do skupin.
┌───────────────┐
│ Opis vět │ opis datového souboru nebo vybrané podmnožiny
│ Součt.sestava │ opis doplněný součty vybraných údajů
│ Totály │ součtovaná sestava bez jednotlivých vět (jen součty)
│ Chybné věty │ opis chybných vět souboru (logické kontroly)
└───────────────┘
Postup komunikace v autoreportu: před generováním sestavy zadáváte údaje:
■ součtované údaje... číselné údaje, na konci sestavy budou sečteny
■ řídící údaje ...... rozdělují soubor do skupin se stejnými řídícími údaji
součty jsou potom prováděny i po skupinách
■ třídící údaje ..... věty budou vystupovat v pořadí podle třídících údajů
třídění je dočasné a nemá vliv na soubor
■ podmnožina ........ když zadáte logický výraz, do sestavy vystoupí pouze
věty splňující tuto podmínku