P

PROCEDURA - kapitola P
Procedura kombinuje volání již připravených kapitol projektu a komunikaci
s uživatelem. Start celé úlohy začíná procedurou, která se povinně jmenuje
MAIN.

██ Syntaxe: [ ( ParametryProcedury ) ]
[ DeklaraceLokálníchProměnných ]
begin
{ Příkaz ; }
end ;

██ ParametryProcedury
Seznam parametrů oddělených středníkem. Celý seznam parametrů je
uzavřený v kulatých závorkách. Pro tyto parametry se používá termín
formální parametr. Při volání procedury se na místo formálního
parametru dosadí skutečný parametr.

( [VAR] NázevParametru : Typ [{ ;[var] NázevParametru : Typ }] )

■ Typ ... Povolené typ parametrů : integer, real, string,
record of soubor,
index of soubor,
file

■ VAR ... Tento prefix znamená, že při volání procedury se do proměnné,
použité jako parametr procedury, dosadí hodnota, kterou tento
parametr získal v proceduře. Jde o tzv. volání parametru odkazem.
Lze použít jen pro typy real, string, boolean.
Poznámka : typy RECORD of soubor a INDEX of soubor jsou vždy
volány odkazem.

Při volání z jiné procedury musí souhlasit počet a typy parametrů v
deklaraci volané procedury a v příkazu volání proc. Před parametr typu
FILE musíme vložit znak '@'.
Příklad: proc( Uzaverka,(@Ucty1)) ;


██ Tělo procedury begin
Příkazy ;
end ;
řídící příkazy volání editoru výrazy
přiřazovací příkaz volání sestavy příkazy pro editaci textu
komunikační příkazy volání transformace kopírování a převody
grafy třídění externí programy
speciální příkazy přímý přístup k datům katalog v proceduře


░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░

██ Minimální zápis procedury: P Ukazka1 * BEGIN
END ;
Nejčastěji se pro takovou proceduru používá výraz prázdná procedura.
Vlastě neudělá vůbec nic. To se ale může někdy docela hodit.

██ Procedura s parametry a lokálními proměnnými:

P Ukazka2 * ( rec:record of Soubor1; r:real; VAR s:string) {parametry}
VAR i,j : real;
b : boolean ; { lokální proměnné }
BEGIN
s:='';
for i:=1 to int(r) do s:=s+char(i);
rec.Poznamka:=s ;
....
end ;

V proceduře Ukazka2 se vytvoří řetězec znaků s kódy 1,2,...r (parametr)
a ten se předá přes (VAR)parametr s ven z procedury. Kromě toho se
zapíše string i do údaje record-proměnné rec, kde bude přístupný i po
ukončení procedury.

Page

SPECIÁLNÍ FUNKCE V SESTAVĚ

PageLimit

STRÁNKOVÁNÍ V SESTAVĚ
Stránkování v sestavě je určeno pro změnu implicitních hodnot:

■ fyzická strana ... délka jedné strany papíru (pagesize)
■ logická strana ... počet řádek využitých sestavou na straně (pagelimit)

Implicitní nastavení fyzické strany je 72 řádků (12 palců), délka logické
strany je dána instalačním programem (parametr automatická sestava - délka,
obvykle 69 řádků). Délku fyzické i logické strany v sestavě lze změnit
přiřazením na začátku deklarace sestavy (před názvem vstupního souboru).

█ .pagesize:=ČísVýraz ... řízení stránkování na začátku sestavy (kap. R)
█ .pagelimit:=ČísVýraz
█ pagelimit ............. také funkce v popisné části výstupní úrovně reportu

░ .pagesize:=43; {tisk do kratších formulářů}
░ #I_FAKTURY
░ ... atd ...
░ .pagelimit:=55; {tisk na volné listy}
░ .pagelimit:=PARAM.DélkaStrany {vlastní instalace v programu}

PageSize

STRÁNKOVÁNÍ V SESTAVĚ

Palette

PARAMETRY GRAFU
■ PALETTE=TextVýraz ... pořadí barev pro zobrazení údajů, max 14 znaků
B - modrá G - zelená A - tmavě šedá
Y=y - žlutá R - červená c - sv.purpurová
r - sv.červená b - sv.modrá W=w - bílá
g - sv.zelená M - fialová L=l - černá
m - sv.fialová C - purpurová
O=o - hnědá a - sv.šedá
implicitně BYrgmORGbMCaAc

■ RGB=(KódBarvy,R,G,B) ... předefinování barev (jen VGA)
KódBarvy: dle Palette nebo '@' - ruční míchání
R,G,B : ČísVýrazy, poměr složek R,G,B v %

Parametrický klíč

PARAMETRICKÝ KLÍČ
Datový soubor s definovaným parametrickým klíčem je parametrický soubor.
Jeho poslední věta je viditelná (tj. jeho údaje se mohou vyskytovat pomocí
tečkové notace ve výrazech i na levé straně přiřazovacího příkazu) v celém
projektu.

█ @ @ ....................... definice parametrického klíče

Parametrický soubor může být dále v projektu zpracováván jako obyčejný
datový soubor a může mít více vět, většinou má však pouze jednu větu. Když
je parametrický soubor prázdný, PC FAND automaticky vytváří při prvním
přístupu jednu větu a naplní ji nulami a mezerami.

Údaje poslední věty parametrického souboru nazýváme globální proměnné.
Na globální proměnné se v celém projektu odkazujeme tečkovou notací
a mohou vystupovat ve výrazech i na levé straně přiřazovacího příkazu.

█ NázevSouboru.NázevÚdaje ... globální proměnná


░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░

██ Deklarace parametrického souboru PARAM

F PARAM Datum : D ;
....
#K @ @ ;

Odkaz na globální proměnnou PARAM.Datum kdekoliv v projektu
PARAM.Datum:=today;

Parametry automatické sestavy

PARAMETRY AUTOMATICKÉ SESTAVY
■ mode=errcheck ......... automatická sestava "Chybné věty"
■ mode=onlysum .......... automatická sestava "Jen součty"
■ sort=(TřídícíÚdaje) ... dočasné setřídění souboru
(nemá vliv na data po ukončení sestavy)
■ speciální znaky před názvy třídících údajů: > ... sestupné setřídění
~ ... lexikální setřídění
■ ctrl=(SeznamÚdajů) .... řídící údaje součtované sestavy
(nejsou automaticky zároveň třídícími údaji)
■ sum=(SeznamÚdajů) ..... součtované údaje sestavy

■ width=ČísVýraz ........ počet znaků na řádek podle šířky papíru
(implicitně podle instalace)
■ style=compressed ...... tisk úzkým písmem (17cpi)
■ style=normal .......... tisk normálním písmem (10 cpi)
■ head=TextVýraz ........ vlastní hlavička strany autoreportu (řádek textu)
maska pro číslo strany _____ ,
maska pro dnešní datum __.__.__
V textu hlavičky se nesmí vyskytovat znak '\'

Parametry editace

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

Parametry programu SHARE

LAN - PARAMETRY PROGRAMU SHARE
Některé sítě vyžadují na serveru spuštění programu SHARE. Pro správné
fungování PC FANDu je nutné věnovat pozornost nastavení parametrů tohoto
programu:

█ SHARE /F:n /L:m

■ parametr /F:n - prostor pro tabulku názvů otevřených souborů. Při určení
hodnoty parametru doporučujeme následující postup
(přetečení program SHARE nehlásí a může dojít k přepsání
paměti):

n = 71 * FILES 71 = nejdelší MS DOS cesta + 11 bytů
FILES = maxim. počet otevřených souborů,
uvedený například v CONFIG.SYS

■ parametr /L:m - počet locků (zámek souboru nebo věty), které může SHARE
najednou provést. Pro parametr "m" lze doporučit dvojná-
sobek maximálního počtu najednou otevřených souborů
(např. parametr FILES z CONFIG.SYS)

Parametry sestavy

PARAMETRY SESTAVY
Následující nepovinné parametry se používají pro sestavy podle kapitoly R
i pro automatické sestavy.

■ cond=(LogVýraz) ...... logická podmínka pro výběr vět souboru do sestavy
v podmínce lze použít key in - výběr podle indexu
uplatní se pouze pro první vstupní soubor (#I1_..)

■ cond=( ? ) ........... podmínku zadá uživatel před generováním sestavy

■ assign=UrčeníVýstupu ... přesměrování výstupu na tiskárnu 'LPT1'
nebo do souboru: jméno text.souboru včetně cesty
nebo název dle katalogu. Implicitně se sestava
vygeneruje do textu 'PRINTER.TXT' a edituje se
assign potlačí editaci výsledné sestavy

■ times=ČísVýraz ....... počet výtisků při tisku sestavy
(vygeneruje na začátek tečkový příkaz .ti)

■ edit ................. standardně se sestava edituje jen v módu prohlížení
edit dovolí úplnou editaci (změny) sestavy

■ check .............. příkaz report provede jen kontrolu syntaxe
dynamické deklarace kapitoly R.

■ printctrl ............ výstup do tiskového souboru
(místo řídících znaků pro přepínání typů písma se do sestavy generují
rovnou kódy pro tiskárnu podle instalace - např.pro tisk mimo PC FAND,
většinou ve spojení s assign, POZOR - nezpracuje tečkové příkazy).

Password

SPECIÁLNÍ FUNKCE

Path

KATALOG V PROCEDUŘE

PAU

PARAMETRY GRAFU
■ PRINT=TextVýraz... parametry pro tisk grafu : string délky 6 znaků
1. (impl.)D|M|H Kvalita tisku - Draft,Midle,High
2. H(impl.) | V Směr tisku: horizont. nebo vertik.
3. 0|1|2(impl.)|3 Hustota tisku: 120,60,120,240 dpi
4. (impl.)0..9 Posunutí grafu od levé strany v cm
5. (impl.)0..9 Počet prázdných řádků před tiskem
6. (impl.)Y | N Odstránkování po tisku grafu
(nebo Print='PAUnn': doba zobrazení grafu v sekundách)
tisk grafu

■ ASSIGN=TextVýraz... určí jméno souboru (nebo cestu), do kterého se zapíše
graf při uložení do PCX (implicitně GRAPH.PCX,
implicitní přípona .PCX)

PF

VÝSTUP SESTAVY

PH

VÝSTUP SESTAVY

Pi

ARITMETICKÉ FUNKCE

Podmíněný překlad

PODMÍNĚNÝ PŘEKLAD - direktivy kompilátoru

Pohyby kurzoru

POHYBY KURZORU TEXTOVÉHO EDITORU
■ šipka doleva ......... na předchozí znak
■ šipka doprava ........ na následující znak
■ šipka nahoru ......... na předchozí řádek
■ šipka dolů ........... na následující řádek
■ Ctrl-šipka doleva .... na předchozí slovo
■ Ctrl-šipka doprava ... na následující slovo
■ Home ................. na začátek řádku
■ End .................. na konec řádku

■ PageUp ............... na předchozí stranu
■ PageDown ............. na následující stranu
■ Ctrl-PageUp .......... na začátek textu
■ Ctrl-PageDown ........ na konec textu
■ Ctrl-F3 .............. na zadaný řádek
■ Ctrl-Q Ctrl-E ........ na první řádek okna
■ Ctrl-Q Ctrl-X ........ na poslední řádek okna

■ Ctrl-Home ............ na předchozí volný text
■ Ctrl-End ............. na následující volný text

■ Ctrl-W ... posune obrazovku o jeden řádek dolů (nemění pozici kurzoru)
■ Ctrl-Z ... posune obrazovku o jeden řádek nahoru

PopisnáČástÚrovně

POPISNÁ ČÁST ÚROVNĚ
Na rozdíl od formuláře (E) v sestavě (R) vystupují nejen údaje souboru, ale
obecně výrazy. Popisná část obsahuje seznam výrazů vyhodnocovaných v kontextu
jedné věty vstupního souboru (uložené a vypočítané údaje, operátory a funkce,
lokální a globální proměnné, údaje z nadřízených souborů pomocí tečkové
notace). Při více vstupech platí pro stejnojmenné údaje obdobná implicitní
pravidla jako v transformaci, silnější je použití prefixu Ii.NázevÚdaje.

█ SeznamVýrazů ... popisná část výstupní úrovně reportu bez přiřazení

█ begin SeznamPřiřazovacíchPříkazů end SeznamVýrazů ... s přiřazením do
█ SeznamVýrazů begin SeznamPřiřazovacíchPříkazů end proměnných
Před seznamem a/nebo po seznamu vystupujících výrazů může být uvedena
výpočetní část - seznam přiřazovacích příkazů v programových závorkách
begin...end (uvnitř případně s větvením if-then-else). Objektem přiřazení jsou
lokální a globální proměnné. Před a/nebo po výstupu se provedou definovaná
přiřazení.

Popisná část může být i prázdná, potom vystoupí na tomto místě beze změny text
definovaný v zobrazovací části (zobrazovací část je bez masek). Pokud celá
úroveň obsahuje jen přiřazení, provedou se jen výpočty bez výstupu.

PortIn

PRÁCE S PORTEM
Pro práci na úrovni vstupních/výstupních portů, tj. na úrovni instrukcí
procesoru IN a OUT lze použít funkci portin pro příjem a příkaz portout
pro výstup informací. Např. je tedy možno řešit častý problém komunikace
přes sériové porty COMx.


██ syntaxe: PORTIN ( Slovo, AdresaPortu ) : real

Funkce vrací hodnotu byte nebo slova, které bylo
přečteno z portu.
■ Slovo ......... Logický výraz, pokud je true, čte se z portu slovo
(dva byte), jinak se čte jeden byte.
■ AdresaPortu ... Číselný výraz s adresou portu, např. pro COM1 se
zadává 1016 (hexadecimálně 3F8).

■ Kapitoly .... P,D
────────────────────

Příkaz
██ syntaxe: PORTOUT ( Slovo, AdresaPortu, Výstup )

■ Slovo ......... Logický výraz, viz. portin.
■ AdresaPortu ... Číselný výraz s adresou portu, viz. portin
■ Výstup ........ Číselný výraz, hodnota slova nebo byte, který vystupuje

■ Kapitoly .... P


██ Poznámka: Použití těchto instrukcí předpokládá znalosti na úrovni
programování v assembleru a znalost popisu odpovídajících
komunikačních rozhraní.
Příklad na komunikaci mezi dvěma počítači pomocí portů
COM1 a COM2 je uveden v distribuci PC FANDu verze 4.0 pod
názvem PORT.

PortOut

PRÁCE S PORTEM

Pos

POROVNÁNÍ TEXTOVÝCH ŘETĚZCŮ

Používané pojmy

LAN - PŘEHLED POUŽÍVANÝCH POJMŮ

Pracovní index

INDEX of Soubor

Práva přístupu k datům

PRÁVA PŘÍSTUPU K DATŮM

PREDICATES

#PREDICATES
NázevPredikátu[([&]NázevTypu[{,[&]NázevTypu}])]

@NázevPredikátu [['ZdrojovýKódProc']] [([&]NázevTypu[{,[&]NázevTypu}])]

Deklarace hlaviček predikátů.

Deklarace predikátů rozlišuje vstupní a výstupní parametry.
Výstupní parametry jsou označeny pomocí znaku "&". Znak "@"
označuje proceduru PC FANDu s parametry typu Integer a Real - ve FANDu
Real, Boolean - v FANDu Boolean nebo String a LongString - ve FANDu
String. Seznamové a záznamové typy budou proceduře předány ve vnitřním
tvaru (ve FANDu typ String) a procedura je může uložit do typu string a
volný text. Za názvem predikátu může být uvedena dynamická deklarace
predikátu umístěná v hranatých závorkách.

Znak "&" se skutečně zapisuje. Při popisu predikátů je tohoto
znaku použito pro označení výstupních termů. Při volání predikátu není
znak "&" součástí zápisu.

Odstavec definuje pouze hlavičku predikátu. Větev predikátu musí
být alespoň jednou uvedena v následujícím odstavci CLAUSES.

Implicitně je deklarován predikát "main" bez parametrů, který je
implicitně volán při vyvolání příkazu lproc(NázevLKap).

Příklad:

secti(Integer,Integer,&Integer)

@upcase['(a:string;var b:string) begin b:=upcase(a); end;']
(String,&String)

Predikát

Predikát
Zápis programu i dat je tvořen posloupností predikátů. Predikát
může být zapsán ve tvaru faktu nebo pravidla. Před vlastním popisem
predikátů je nutno uvést krátkou zmínku o syntaktickém zápisu. Logická
procedura je rozdělena do odstavců s pevně daným formátem (viz
syntaxe).

Predikáty lze dělit do skupin:
■ Databázové predikáty - lze zapsat pouze jako fakt, z běžícího
programu je lze modifikovat.
■ Programové predikáty - mohou být zapsány ve tvaru pravidla nebo faktu
■ Implicitní predikáty - predikáty realizované překladačem.


Programový predikát je zapsán ve tvaru:

Definice pravidla : Hlava:-Tělo.

Tělo tvoří posloupnost příkazů oddělených znakem ",". Pokud je
tělo prázdné lze využít zápisu : Hlava.

Hlava má následující tvar:

Identifikátor[(Term{,Term})]

Provádění predikátu je označováno jako volání. Při vyvolání
predikátu se nejdříve substitují vstupní parametry (termy). Při
substituci je nutno rozlišit tvar předávaných termů a termů vyvolaného
predikátu.
Mohou nastat následující kombinace:

╔═════════════════╦══════════════════════╦════════════════════════════╗
║ Volání ║ Predikát ║ Popis ║
╠═════════════════╬══════════════════════╬════════════════════════════╣
║ Konstanta ║ Vstupní prom. ║ Vázání hodnoty prom. ║
║ Vázaná prom. ║ Vstupní prom. ║ Vázání hodnoty prom. ║
║ Nevázaná prom. ║ Výstupní prom. ║ Po vyhodn. pred. vázání ║
║ Váz.prom.,konst.║ Výstupní prom. ║ Test shodnosti po vyhodn. ║
║ Váz.prom.,konst.║ Konst. ║ Test shodnosti ║
╚═════════════════╩══════════════════════╩════════════════════════════╝

V případě že nás nezajímá hodnota výstupního parametru zapíšeme do
volání znak "_".

Srovnaní a přiřazení proměnných je nazýváno unifikace. Vytvoření
konstantního termu pomocí substituce proměnných jejich obsahem je
označováno kopírování.

Při úspěchu unifikace vstupních parametrů se zpracuje tělo (tj.
pravá strana) predikátu a při zdárném ukončení těla predikátu následuje
návrat k volajícímu s přiřazením výstupních parametrů - substituce.

Při neúspěchu unifikace hlavičky větve se přejde k další větvi.
Není-li další větev, vrátí s neúspěchem.

Po neúspěchu a návratu k předchozímu bodu se v tomto bodu hledá
další alternativní řešení, tj. nezačíná se od počátku.

Metodu zpracování popisuje strom zpracování. Je tvořen z uzlů a
hran. Uzel je bod tvořený voláním predikátu. Hrany vycházejí z uzlu a
představují větve predikátu. Neúspěch vyvolá návrat do posledního uzlu
a hledání další větve.


Příklad:

Fakty:

a(1).
a(2).
b(2).
sezn_prvku.

Pravidlo:

sezn_prvku:- mem_Firma(X,[]), write(X,' '),fail.

Print

PARAMTERY GRAFU

PrintCtrl

PARAMETRY SESTAVY

PrintTxt

PŘÍKAZY PRO TISK TEXTU

Priorita operátorů

PRIORITA OPERÁTORŮ
Pokud není uzávorkováním určeno jinak, operátory mají následující priority
(od nejvyšší k nejnižší):

1. - (unární mínus) ^
2. * / div mod round
3. + -
4. = <> > >= < <=
5. &
6. |
7. => <=>

Proc

VOLÁNÍ PROCEDUR A PODPROGRAMŮ
Příkaz volání procedury.

██ syntaxe: PROC ( NázevProcedury | [DynamickáDeklarace]
[ ,(Parametry) ] )

■ NázevProcedury .. Identifikátor, název kapitoly P.
■ Parametry ....... Seznam parametrů. Obsahuje výrazy odpovídající co do
typu a pořadí parametrům v deklaraci volané procedury
Parametry typu real, string, boolean mohou být volány
hodnotou nebo odkazem. Parametry strukturovaných typů
( record of, index of ) jsou volané vždy odkazem ( po
návratu do volající procedury se přenášejí případné
změny hodnot, viz. procedura ). Parametr typu file je
nutno označit prefixem @ ( Proc(Ukazka,(@Ucty)); ) .
■ DynamickáDeklarace ... Textový výraz, který obsahuje zdrojový kód podle
syntaxe kapitoly P. Viz. dynamické deklarace.

Volání podúlohy (volání v L kapitole call).

██ syntaxe: CALL ([\]NázevPodúlohy [,[ Procedura [( Parametry )]])

Pokud není uvedeno jméno procedury,volá se procedura MAIN. V podúloze jsou
použitelné všechny kapitoly deklarované v nadřízených úlohách (pokud nejsou
překryty stejnojmennou deklarací v podúloze). Podúloha může volat další
podúlohu atd.

Po ukončení vnořené procedury nebo podúlohy se vrací řízení na místo volání
a úloha pokračuje dalším příkazem.

\ ... Z libovolné úlohy ve strukturovaném projektu je vyvolána úloha, která
je přímo podřízená hlavní úloze. Oproti základnímu způsobu volání se
modifikuje alokace souborů, které nemají v katalogu úplnou cestu,
jako by byla volána přímo z hlavní úlohy.

░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░


██ menuloop 'ÚLOHY v PC FANDu' of
'SKLADY - příjem ze skladu': call(SKLADY,prijem);
' - výdej ze skladu' : call(SKLADY,vydej);
' - celé zpracování' : call(SKLADY);
'MZDY': call(MZDY);
'UCETNICTVI': call(UCTY);
end;

██ call( SKLADY, vydej('MTZ')); { volání procedury z podúlohy
z parametrem }

Procedura

PROCEDURA - kapitola P

Procedurální parametry editace

PROCEDURÁLNÍ PARAMETRY EDITACE

Projektantské prostředí

PROJEKTANTSKÉ PROSTŘEDÍ HOT - klávesy
Program v PC FANDu je projektový soubor - tj. speciální případ datového
souboru. Programátor při ladění používá datový editor obohacený o některé
další funkce:

■ Ctrl-F8 .... diagnostika a syntaktická kontrola projektu
■ Ctrl-F9 .... ladění (kontrola a spuštění) jedné kapitoly projektu.
Úloha jako celek musí být syntakticky v pořádku.
■ Alt-F9 ..... start procedury MAIN z libovolného místa v úloze
■ Ctrl-F10 ... uzavření (návratné zaheslování) úlohy
Na kontrolní dotaz "chcete úlohu zaheslovat (A/N)?" jsou
možné 3 odpovědi: A ......... návratné zaheslení
N ......... zrušení
Alt-F10 ... nenávratné zaheslení
Nenávratné zaheslení úlohy
Před tím však PC FAND nabídne zálohování zdrojových textů.
Z nenávratně zaheslené úlohy jsou vypuštěny poznámky,
nevýznamné oddělovače (mezery,...) a neplatné úseky dle
direktiv kompilátoru. Dále jsou provedeny některé přesuny,
takže ani případným dekódováním nelze získat původní
kompletní zdroje.
■ Shift-F1 ... navigace po projektu - přechod k první kapitole s názvem,
který je pod kurzorem návrat klávesou F10 - až 10 vnoření.
Pozor na to, že znak podtržítko může být nyní součástí
identifikátoru. Proto v kapitolách E,M,R píšeme místo
#I_soubor lépe #I_ soubor a lze navigovat Shift-F1.

■ Alt-F3 ..... vyvolání editace katalogu úlohy

Podpora pro vytvoření helpu úlohy
■ Alt-F2 ..... přechod do aktuálního helpu úlohy dle kontextu:
z editace úlohy (RDB) - editace helpu
z editace dat.souboru - přechod na položku helpu, která
odpovídá danému údaji, popř. ji
vytvoří (viz. mode='F1'nebo'F124')
z uživatelského menu - přechod na položku helpu, která
odpovídá dané volbě menu,
pokud dosud není - vytvoří ji
■ F3 ......... při editaci helpu, hledání názvu

Ladění
spustí kapitolu, na které je kurzor, což znamená otevření datového
editoru pro soubor (kapitola F a E), vygenerování sestavy (R),
provedení transformace (M - pozor - pracuje s daty) nebo spuštění
procedury (P). Při překladu se mohou některé úseky zdrojového textu
vynechat podle nastavení direktiv kompilátoru - viz. podmíněný překlad

Při nalezení první syntaktické chyby se kurzor nastaví na místo chyby
a je vydáno chybové hlášení, které je třeba potvrdit libovolnou klávesou
U syntakt. odladěných programů Diagnostika vypíše velikost obsazené
a volné paměti.

Další vlastnosti překladu:
Při Ctrl-F10 se provede překlad všech kapitol úlohy, při ostatních typec
překladu se přeloží jen kapitoly, které byly změněny od posledního
překladu (viz. Projektový soubor - údaj "overit").

Některé změny v úloze jsou natolik závažné, že se po nich provede vždy
kompletní překlad celé úlohy (jako při Ctrl-F10) a navíc se uloží
kontrolní datum a čas posledního překladu. Jsou to tyto změny:
■ změna v kapitolách typu F,D,E nebo I
■ přehozeni pořadí kapitol

Příkazy datového editoru důležité v projektantském prostředí:
■ Ctrl-<- resp. Ctrl--> ... výměna sousedních kapitol při špatném pořadí
■ Ctrl-F7 a Shift-F7 .......... přenos bloků mezi kapitolami (Clipboard)
■ F6-Opis-Opis Vět ............... listing (opis zdrojového textu úlohy)

Projektový soubor

PROJEKTOVÝ SOUBOR
V PC FANDu lze využít fakt, že projektový soubor ( program ) je zvláštním
datovým souborem. Celý projekt je možné zpracovávat z jiné pomocné úlohy,
jako by to byl standardní datový soubor (tvorba dokumentace, údržba velkých
projektů, instalace úlohy, automatické generování programu).

Deklarace projektového souboru: ve stejném adresáři založíte pomocnou úlohu
a deklarujete kapitolu typu F s názvem projektového souboru (včetně přípony
.RDB). Text deklarace je třeba nechat prázdný, deklarace se převezme
z interních tabulek. Takto lze zpracovávat pouze otevřené úlohy.

Údaje projektového souboru:

■ TxtPos:F,4.0... pozice v textu při poslední editaci kapitoly
■ Overit:B ...... příznak, zda již prošla kapitola syntaktickou kontrolou
■ StText:T ...... používá se pouze u kapitol typu F, obsahuje přeloženou
aktuální deklaraci souboru po změnách (umožňuje
automatickou transformaci podle nové deklarace)
■ Typ :A,'!'... typ kapitoly
■ Nazev :A,12 ... název kapitoly
■ Text :T ...... vlastní deklarace ve volném textu

PROLOG

FAND PROLOG
Syntaxe : #DOMAINS Identifikátory Term
#CONSTANTS Predikát Proměnné
#DATABASE Provádění predikátů
#PREDICATES OperaceSrovnání
#CLAUSES Funkce v L kapitole

Implicitní predikáty:
! fandkey retract
abbrev fandkeyfield save
add_ fandlink self
all_ fandlinkfield trace
assert getlex union_
call inter_ write*
concat inv_
consult len_
del_ loadlex
error mem_
fail minus_
fandfield nextlex
fandfile not

Proměnné (PROLOG)

Proměnné
Proměnné jsou určeny pro uchování dat. Identifikátor proměnné
začíná velkým písmenem. Proměnná může obsahovat libovolný datový
objekt.

Proměnné se předem nedefinují, zavádí se implicitně prvním
použitím. Typ proměnné je určen prvním výskytem. Obsah proměnné lze
naplnit pouze jednou, dále jej již nelze modifikovat. Naplnění proměnné
je označováno jako vázání. Proměnná jejíž obsah nás nezajímá je
označena znakem "_".

Platnost svázání proměnné je vždy jen v rámci jedné větve
programu. Stejný název v další větvi označuje jinou proměnnou. Při
zpětném chodu se vázání proměnné uvolní a proměnná může být znovu
svázána s jinou hodnotou.

Vázání proměnné lze realizovat i přiřazením ve tvaru:

Proměnná[:Typ]= Term

Proměnná Jméno nevázané proměnné.
Typ Typ proměnné. Nutno uvést pokud proměnná nebyla předem
deklarovaná. Deklarovaná může být pouze jako výstupní
parametr v hlavičce predikátu.
Term Term obsahující vázené proměnné a konstanty.

Příklad:

is_:-X:Integer=10+12,write('Součet 10+12 = ',X),wait.

Prompt

DOTAZ UŽIVATELI

Promptyn

DOTAZ UŽIVATELI

Přepínače

PŘEPÍNAČE TEXTOVÉHO EDITORU
Aktuální hodnoty přepínačů jsou vypsány zkratkami v prvním řádku obrazovky.
Odpovídajícím povelem střídavě zapínáte a vypínáte funkci přepínače.

přepínač povel zkratka
-------------------------------------------------------------zap--vyp------
vkládání/přepisování při psaní textu Ins Vkl Přep
odsazování dalšího řádku podle předchozího Ctrl-Q Ctrl-I Ods
automatické formátování na konci řádku Ctrl-O Ctrl-W Form
zarovnávání na pravý okraj při formátování Ctrl-O Ctrl-J Zar
sloupcový blok/běžný blok Ctrl-K Ctrl-N Slp

Přepínače datového editoru

F5 - PŘEPÍNAČE DATOVÉHO EDITORU
Po F5 střídavě přepínače zapínáte a vypínáte volbou z menu:

┌─ zapni-vypni ──┐
│ Podmnožina │ editace podmnožiny vět nebo celého souboru
│ Duplikace │ při pořízení se údaj zkopíruje z předešlé věty
│ Tabelátor │ po Enter se kurzor zastaví jen na údajích s tabelátorem
│ Aditivní změny │ vypnutí automatického přičítání do nadřízeného souboru
│ Kontroly │ vypnutí logických kontrol na správnost zadaných dat
│ Varování │ vypnutí kontrolních varování
└────────────────┘

Podmnožina, Aditivní změny a Kontroly jsou globální přepínače pro editaci
souboru, zatímco Tabelátor a Duplikace patří ke každému editovanému údaji.

Indikace stavu přepínačů: při zapnuté podmnožině jsou vybrané věty zvýrazněny
barevně, navíc je v posledním řádku šipka. Vypnutí aditivních změn a logických
kontrol je vyznačeno v posledním řádku znaky #A, resp. #L. Přepínač aditivních
změn slouží rovněž i pro referenční integritu ( zap/vyp ). Zapnuté tabelátory
a duplikace jsou přímo u odpovídajícího údaje označeny šipkami.

Přepínač vkládacího a přepisovacího režimu
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.

Přerušení editace

PŘERUŠENÍ EDITACE

Přerušení editace textu

PŘERUŠENÍ EDITACE TEXTU
Práce textového editoru může být přerušena jinou činností - tzv. exit
- procedurou. Syntaxe přerušení editace je stejná jako v datovém editoru s
některými logickými omezeními a odlišnostmi, které vyplývají především z
toho, jaký druh textu je editován.

■ Implicitně se přerušení textového editoru uskuteční v rámci datového
editoru při editaci položky typu volný text a použití mode='EX'. V tomto
případě dojde k předání rozpracovaného stavu editované věty do procedury
formou parametru procedury typu record of editovaný soubor, jehož prost-
řednictvím jsou změněné hodnoty v exit - proceduře vráceny do datového
editoru. (viz. módy datového editoru).

■ Explicitně se volá přerušení editace textu při uvedení parametru exit
příkazu edittxt. V tomto případě nelze v seznamu přerušení použít akci
typu record nebo seznam údajů a dále nelze použít dodatečný parametr
procedury typu record of soubor (viz. record proměnná).

■ Přerušení editace textu nastavuje EdBreak, TxtPos, TxtXY

■ Přerušení editace textového souboru:
Před přerušením se aktualizovaný text vypíše zpět do souboru a soubor se
uzavře. Je tedy v exit-proceduře korektně přístupný. Při jeho změně nelze
ovšem obecně automaticky zajistit návrat na původní místo.

■ Přerušení editace lokální proměnné typu string:
Rozpracovaný text ( po případných změnách ) je v exit-proceduře dostupný,
pokud ho explicitně předáme do exit-procedury jako parametr typu string.

░░░░░░░░░░░░ var s : string ;
░░příklady░░ begin
░░░░░░░░░░░░ edittxt( s, exit=( F10:ExProc(s) ));
...
end ;

PříkazováČástVýstupu

PŘÍKAZOVÁ ČÁST VÝSTUPU TRANSFORMACE
Příkazová část (seznam přiřazovacích příkazů) definuje obsah vět souborů
vystupujících v transformaci. Pokud chybí, údaje se naplní hodnotami
stejnojmenných údajů ze vstupních souborů podle implicitních pravidel, příp.
zůstanou prázdné. Jinak obsahuje seznam přiřazovacích příkazů (:= nebo +=),
lze použít i konstrukci if-then-else.

Objekty přiřazení v přiřazovacích příkazech jsou uložené údaje výstupního
souboru, lokální proměnné transformace nebo globální proměnné úlohy. Výrazy na
pravé straně přiřazovacího příkazu mohou obsahovat údaje ze vstupních souborů
(NázevÚdaje), příp. ze souborů s nimi spojených klíčem (NázevKlíče.NázevÚdaje,
NázevSouboru.NázevÚdaje nebo NázevRole.NázevÚdaje). Všechny tyto konstrukce
mohou být opatřeny prefixem:

■ Ii.NázevÚdaje ... i udává číslo vstupního souboru
(také Ii.NázevSouboru.NázevÚdaje, příp. Ii.NázevKlíče..., Ii.NázevRole...)
■ O.NázevÚdaje .... údaj z právě připravované věty výstupního souboru
■ implicitní doplnění prefixu: detailní výstup (#Oi): #Ii, #I1..#Ii-1
skupinový nebo násobný výstup (#O, #O*): #I1..#In

Příkazy pro editaci textu

PŘÍKAZY PRO EDITACI TEXTU

Příkazy procedury

PŘÍKAZY PROCEDURY
Přiřazovací příkaz ObjektPřiřazení := Výraz
ObjektPřiřazení += Výraz (a+=b odpovídá a:=a+b)

Řídící příkazy složený příkaz Begin, End
skoky Break, Cancel, Exit
větvení Case , If
cykly For, ForAll, Repeat, While

Komunikace s uživatelem zvuky Beep, Sound, NoSound
čekání Delay, Wait
klávesnice ClearKeyBuf, SetKeyBuf
myš SetMouse

Výstup na obrazovku With Window, ClrScr, ClrEol, Display, GoToXY,
Help, HeadLine, Message, Write, WriteLn

Uživatelské nabídky Menu, MenuLoop, MenuBar

Editace a uložení změn Edit
Sestava Report
Transformace Merge
Práce s texty EditTxt, PrintTxt, PutTxt
Vyvolání procedury Proc
Třídění a indexování Sort, IndexFile, GetIndex

Přístup k větám AppendRec, DeleteRec, RecallRec, ReadRec,
WriteRec, LinkRec

Katalog,diskové jednotky Close, Save, Mount, ReleaseDrive
TurnCat, ResetCatalog, CheckFile

Archivace Backup, Restore, BackupM, RestoreM
Externí programy Exec
Kopie a převody souborů CopyFile

Grafika With Graphics, Graph, GetMaxX, GetMaxY,
PutPixel, Line, Ellipse, Rectangle, FloodFill,
OutTextXY

Práce s porty PortOut

Síťové příkazy With Shared, With Locked

Přímý přístup k datům

PŘÍMÝ PŘÍSTUP K DATŮM
Kromě implicitních datových vazeb, deklarovaných v kapitole F, lze s daty
pracovat procedurálními prostředky pro přímý přístup k datům. Základním
pojmem je zde číslo věty, které jednoznačně identifikuje data, se kterými
chceme pracovat. Lze použít dvě úrovně přístupu:

■ přístup k jednotlivým údajům... NázevSouboru[FyzČísVěty].NázevÚdaje
Hranaté závorky se skutečně píší.
FyzČísVěty je číselný výraz. Výsledkem
je výraz typu, který odpovídá typu údaje.
Může se vyskytovat na levé straně přiřa-
zovacího příkazu a ve výrazech.

■ přístup k větám ......... Je preferovaný v novějších verzích (od 3.0).
Základní jednotkou pro přístup na disk je celá
věta ( record ) souboru. Přístup k údajům věty
se realizuje v rámci operační paměti.
readrec deleterec appendrec keyof
writerec isdeleted recallrec linkrec

Přiřazovací příkaz

PŘIŘAZOVACÍ PŘÍKAZ
Použití: v procedurách a příkazové části sestav a transformací.

██ ObjektPřiřazení:=Výraz ... výraz musí být odpovídajícího typu
██ ObjektPřiřazení+=Výraz ... např. a+=b je rychlejší varianta a:=a+b

objekt přiřazení

■ lokální proměnné ........... proměnné deklarované v této kapitole
■ globální proměnné .......... údaje parametrických souborů
■ RecordProměnná.Údaj ........ naplnění položky record - proměnné
■ NázevSouboru[Číslo].Údaj ... přímý přístup k datům
■ Interní proměnné ........... vnitřní proměnné PC FANDu
───────────────────

V proceduře lze přiřadit i celou strukturu record proměnné :
██ RecordProměnná1:=RecordProměnná2
Record proměnné nemusí být ze stejných souborů, přiřazení se provede
by-name - tj. údaje se stejným názvem a typem se přiřadí, ostatní zůstanou
nezměněny (neresetují se) - podobně jako v merge.

PullDown

UŽIVATELSKÁ NABÍDKA - MENU

PutPixel

ELEMENTÁRNÍ GRAFICKÉ KONSTRUKCE
Příkaz putpixel vykreslí bod. Line kreslí přímku , která je jednoznačně
určena zadanými krajními body. Rectangle vykreslí obdélník dle zadaného
levého horního a pravého dolního rohu.

██ syntaxe: PUTPIXEL ( X, Y, Barva )
LINE ( X1, Y1, X2, Y2, Barva+Typ+Síla )
RECTANGLE ( X1, Y1, X2, Y2, Barva+Typ+Síla )

■ X,Y,X1,Y1,X2,Y2 ... Souřadnice se zásadně zadávají v grafických bodech
(pixel) relativně v aktuálním okně.
■ Barva ............. Číselný výraz - kód barvy nebo Ctrl-znak.
■ Typ ............... 16 ... tečkovaná čára
32 ... čerchovaná čára
48 ... čárkovaná čára
■ Síla ............. 64 ... tlustá čára

Parametry typ a síla pro příkazy line a rectangle jsou zavedeny od verze
3.3d, jejich součet spolu s parametrem barva

PutTxt

ZÁPIS A ČTENÍ TEXTU ZE SOUBORU