#C
VYPOČÍTANÉ ÚDAJE - odstavec #C
Vypočítané údaje jsou pojmenované výrazy. Ve výrazech se mohou vyskytovat
operátory a funkce, ostatní uložené i vypočítané údaje téhož souboru,
viditelné údaje z nadřízených souborů a globální proměnné. Seznam vypočí-
taných údajů je ve tvaru:
██ NázevÚdaje:=Výraz:TypÚdaje; ... vypočítaný údaj (pojmenování výrazu)
Typ údaje udává pouze způsob zobrazení v datovém editoru a automatických
sestavách , výrazy se interně vyhodnocují a do dalších výrazů vstupují v
plném rozsahu v typech real, string, boolean. Zarovnání L u typu N resp.
R u typu A se uplatní pouze při zadání hodnoty údaje pro hledání podle
klíče (F3).
░░░░░░░░░░░░ #C Cena:=JednCena*Množství:F,4.2;
░░příklady░░ Jméno:=Křest+' '+Příjm:A,20;
░░░░░░░░░░░░ Psč6:=copy(Psč,1,3)+' '+copy(Psč,4,2):A,6;
Bezdětný:=Děti=0:B;
Adresa:=Ulice+'\13\10'+Místo:T;
Přídavky:=cond(Deti=1: 200,Deti=2: 580,Deti>=3: 1040+(Deti-3)*300):F,4.0;
Cache
INSTALACE
Instalací rozumíme nastavení různých parametrů, které mají vliv na práci
PC FANDu a nastavují se před jeho spuštěním. V zásadě lze rozlišit dvě
skupiny : prostředky operačního systému (MS-DOSu) a vnitřní globální pro-
měnné PC FANDu.
■ Vnitřní globální proměnné, se inicializují při startu PC FANDu
a jejich inicializační hodnoty jsou uloženy v souboru FAND.CFG.
Pro jejich nastavení lze použít instalační program FANDINST.EXE.
■ Prostředky oper.systému a jeho konfigurace ovlivňují činnost programů
obecně. Sem patří:
- Parametr FILES= systémového souboru CONFIG.SYS
kterým je nutno zajistit dostatek místa pro najednou otevřené soubory
konkrétní úlohy. Při nedostatečném nastavení tohoto parametru není úloha
provozovatelná a havaruje s chybovým hlášením "příliš mnoho otevřených
souborů ...." . Toto je v běžných podmínkách jediný podmiňující
parametr pro běh úloh. Další parametry mají význam především pro
optimalizaci (většinou urychlení) práce.
- Proměnné prostředí MS-DOSu, tzv. SET-parametry
- EMS paměť lze použít pro umístění overlay modulu (FAND.OVR), což
se děje automaticky, pokud je dostatek volné EMS paměti.
Dle praktických zkušeností to nemá význam pro urychlení práce. Výhodnější
je použít volnou paměť jako XMS pro cache či pro umístění rezidentních
programů v horní paměti (viz. EMM386, loadhigh)
- XMS paměť (driver HIMEN.SYS v CONFIG.SYS) je možno s výhodou použít
pro cache programy (SMARTDRIVE). Pozor - PC FAND obsahuje vlastní cache
která standardně alokuje 200KB XMS-paměti (viz.instalace konstant).
!!! doporučujeme nekombinovat FAND-cache s jinou (běžně SMARTDRIVE).
Call
CALL - duplicitní klíčové slovo
■ volání podřízené úlohy ..... viz. volání procedur a podprogramů
■ volání predikátu z jiné L-kapitoly.... viz. call
Cancel
Case
VĚTVENÍ PROGRAMU
Pro větvení programu, jako jednu ze základních programátorských konstrukcí
lze použít podmíněný příkaz pro jednoduché větvení if ... else nebo příkaz
case pro vícenásobné větvení.
██ Syntaxe: IF LogVýraz THEN Příkaz1 [ ELSE Příkaz2 ]
■ Jestliže je splněna podmínka LogVýraz (=TRUE), provede se Příkaz1. Pokud
splněna není, provede se (je-li uvedena) větev else - tedy Příkaz2.
───────────────
Vícenásobné větvení lze použít příkaz case. Postupně se vyhodnocují logické
podmínky a provede se příkaz u první splněné podmínky. Pokud není splněná
žádná podmínka, provede se příkaz ve větvi else, příp. žádný. Příkazy mohou
být i složené (begin .. end).
██ Syntaxe: CASE LogVýraz : Příkaz;
{ LogVýraz : Příkaz; }
[ ELSE Příkaz; { Příkaz } ]
END;
Catalog
CATALOG
V každé úloze je katalog úlohy implicitně deklarován jako běžný datový
soubor s názvem catalog. Pokud tento název použijeme pro deklaraci jiného
souboru (kapitoly F) bude implicitní deklarace lokálně překryta.
██ Struktura katalogu NazUlohy : A,8 ;
NazSouboru : A,8 ;
Ar : N,2 ;
Cesta : A,79 ;
Navesti : A,11 ;
Catalog lze v zásadě používat jako každý jiný soubor. Díky výsadnímu posta-
vení katalogu je však třeba řešit důsledky některých akcí, které mají vliv
na právě otevřené datové soubory. K tomu slouží příkaz resetcatalog.
██ Syntaxe: RESETCATALOG
Příkaz procedury, který je nutno použít vždy když:
- jsou zrušeny věty katalogu
- jsou doplněny nové věty jinde než za koncem katalogu.
Resetcatalog zajistí korektní promítnutí změn katalogu do systému
aktuálních (otevřených) souborů. Kromě aktivních .RDB uzavře všechny
datové soubory. Ošetřeny jsou i SQL-soubory.
POZOR - před jakýmikoliv změnami katalogu je účelné pomocí příkazu close
uzavřít soubor resp. soubory, kterých se změna týká. Vyhneme se
tak určitým úskalím použití příkazu resetcatalog.
CF
VÝSTUP SESTAVY
Výstup sestavy je členěn do úrovní výstupu:
■ #RH ...(zkratka Report Heading) začátek celé sestavy (vystoupí v sestavě..)
■ #RF ...(Report Footing) ukončení celé sestavy (..pouze jednou)
■ #PH ...(Page Heading) začátek tiskové strany (vystoupí..)
■ #PF ...(Page Footing) ukončení tiskové strany, notatend (..na každé straně)
■ #CH_ŘídícíÚdaj ...(Control Heading) začátek skupiny (stejné hodnoty..)
■ #CHi_TřídícíÚdaj... začátek skupiny pro individuální řídící úroveň daného
vstupu s číslem i. Třídící údaje jsou v podstatě individuální řídící
údaje pro dané číslo vstupního souboru. Pozor ! CH1 není to samé
jako CH, pro srovnání viz. úroveň DE.
■ #CF_ŘídícíÚdaj ...(Control Footing) ukončení skupiny (..řídícího údaje)
■ #CFi_TřídícíÚdaj... analogicky jako CHi.
■ #DH ...(Detail Heading) hlavička skupiny vět (po odstránkování, při změně
řídících údajů nebo vstupního souboru pro DE) ... notsolo
■ #DEi...(DEtail) výstup jedné věty souboru (vystoupí pro každou větu) pro
odpovídající vstupní soubor (i). Pokud i chybí, použije se i=1.
Pořadí deklarace úrovní a jejich počet jsou libovolné. V sestavě může být i
několik úrovní stejného typu. Každá úroveň začíná znakem '#' a zkratkou (příp.
pořadovým číslem) a má následující syntaxi:
█ #Zkratka (LogVýraz) ..... označení úrovně, volitelně výstupní podmínka
█ PopisnáČástÚrovně; ...... popis vystupujících dat (seznam výrazů), výpočty
█ ZobrazovacíČástÚrovně ... textová předloha pro generování výstupu
CH
VÝSTUP SESTAVY
Char
TEXTOVÉ FUNKCE
Délka řetězce.
██ syntax: LENGTH ( TextovýVýraz ) : real
■ Kapitoly ........ F,M,R,P,D (Funkce v L kapitole)
──────────────────────────────
Práce s ASCII kódem znaků. Funkce CHAR vrací znak s určitým kódem, zohlední
aktuální tabulku znaků. Funkce ORD naopak vrací ASCII kód určeného znaku.
Tyto funkce umožňují mimo jiné i vyhodnocení obecného BYTE-streamu.
██ syntax: CHAR ( Kód ) : string
ORD ( TextVýraz ) : real
■ Kód ......... ASCII kód znaku. Přepočte se modulo 256.
■ TextVýraz ... Vezme se první znak řetězce a ORD vrátí jeho kód.
ord('') = 0 viz. Tabulky znaků, instalace abecedy
■ Kapitoly .... F,M,R,P,D
zpracování textu
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
██ char( 65 ) = A ; { = char ( 321 ) }
ord('Jan') = 74 ;
Check
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í
CheckFile
CHECKFILE
Příkaz procedury checkfile provede test, zda zadaný fyzický soubor odpovídá
deklaraci datového souboru PC FANDu. Výsledek testu vrací prostřednictvím
funkce exitcode. Nelze používat pro deklarace typu .SQL,.DBF,.DTA.
██ Syntaxe: CHECKFILE ( NázevSouboru, Cesta )
■ NázevSouboru ... Název kapitoly F, identifikátor.
■ Cesta .......... Fyzická cesta k souboru (v apostrofech) nebo název
dle katalogu (identifikátor).
■ ExitCode ....... 0 - O.K.
1 - fyzický soubor neexistuje(prázdný)
2 - chybná cesta a pod.
3 - nesoulad délky věty (deklarace & hlavička)
nebo fyz.délka souboru < dle hlavičky
4 - pro volné texty neex. .T00
Cizí klíč
CIZÍ KLÍČ
Cizí klíč definuje vazbu z podřízeného do nadřízeného souboru, resp.do sebe
sama. V nadřízeném souboru musí existovat vlastní klíč , potom lze vybrat v
podřízeném souboru odpovídající klíčové údaje (musí souhlasit jejich počet
a typy) a definovat je jako cizí klíč. Tato vazba definuje viditelnou větu
nadřízeného souboru, což je věta se stejnými hodnotami vlastního klíče,jako
jsou hodnoty cizího klíče v podřízeném souboru. V kontextu věty podřízeného
souboru lze používat údaje z viditelné věty ve výrazech pomocí tečkové
notace. Většinou jde o vazbu 1:N a jedné nadřízené větě odpovídá skupina
podřízených vět se stejným cizím klíčem.
█ NázevSouboru SeznamÚdajů ... vazba do nadřízeného souboru podle vlastního
klíče
█ NázevKlíče SeznamÚdajů ... vazba podle alternativního vlastního klíče
█ NázevRole(NázevSouboru) SeznamÚdajů ... role: pojmenování cizího klíče
█ NázevRole(NázevKlíče) SeznamÚdajů při vícenásobném spojení souborů
■ prefix NázevSouboru, NázevKlíče nebo NázevRole nazveme NázevSpojení
Role ............... Role se používá pro vytvoření vícenásobné vazby do
jednoho souboru podle jednoho klíče v nadříz. souboru.
Vazba typu owner ... speciální typ vazby mezi soubory, který vytváří
podporu pro další konstrukce v PC FANDu. Většinou
jde o urychlení výběru podmnožiny v podříz. souboru.
█ NázevSpojení ! SeznamÚdajů ......... Referenční integrita
Datový editor hlídá referenční integritu,i rekurzivně.
Vazba musí být typu OWNER. Při vyřazení nadřízené věty
se vyřadí i všechny podřízené. Při změně klíče nadř.
věty se změní i odpovídající hodnoty podříz. souboru.
Omezení: všechny položky cizího klíče musí být uložené
údaje.
Přepínač aditivních změn v datovém editoru vypne
i referenční integritu.
█ NázevSpojení !! SeznamÚdajů
Varianta referenční integrity, která odmítne pokus o
zrušení věty v datovém editoru, pokud pro tuto větu
existují podřízené věty (podle definice vazby owner
obdobně jako předchozí případ).
█ NázevSpojení.exist : boolean .......... funkce pro test viditelné věty
Cizí klíč umožňuje navigaci nahoru (F7 v podřízeném souboru). Pokud je
podřízený soubor podporován indexy, a jeho vlastní klíč je rozšířením
cizího klíče, funguje také navigace dolů (Ctrl-F7 z nadřízeného souboru).
█ NázevSpojení.NázevÚdaje ... tzv. viditelný údaj, použitelný ve výrazech
pro vypočítané údaje, a dále v kapitolách R
a M. V proceduře pro record-proměnnou.
Místo názvu údaje lze použít i funkci owned
■ Odkaz na viditelný údaj může být víceúrovňový.
NázevSpojení1.NázevSpojení2. ... NázevSpojeníX.NázevÚdaje
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
██ Deklarace nadřízeného souboru
F MESTA.X Mesto : A,30 ;
PSC : N,5 ;
#K @ PSC ; { vlastní klíč }
DleNazvu(@) ~Mesto ; { alternativní vlastní klíč }
Deklarace podřízeného souboru
F ADRESY.X Jméno : A,25 ;
PSC : N,5 ;
MatkaPSC : N,5 ; { směrovací číslo bydliště matky }
MestoOtce: A,30 ;
#K @ *PSC ; { vlastní klíč s duplicitami }
MESTA ! PSC ; { cizí klíč }
NaMatku(MESTA) MatkaPSC ; { definice role }
NaOtce(DleNazvu) MestoOtce ; { definice role }
#C Mesto:=MESTA.Mesto : A,30 ; { využití vazby }
MestoMatky:=NaMatku.Mesto : A,30 ;
PscOtce:=NaOtce.PSC : N,5 ;
F UCTY JménoMajitele:A,25;
Kolik:F,6.2;
#K ADRESY JménoMajitele ;
#C Mesto:=ADRESY.MESTA.Mesto:A,30 ; {víceúrovňový odkaz}
KOMENTÁŘ : Cizí klíč je vazba typu owner s referenční integritou.
Vazby NaOtce a NaMatku nejsou typu owner.
Vazba NaMatku musí být formou role, neboť jde o druhou vazbu
přes primární klíč souboru MĚSTA.
─────────────────────────────────────────────────────────
██ Vazby do vlastního souboru / evidence občanů (rekurze)
F LIDI.x rc : N,6 ;
jmeno : A,20 ;
rc_matka : N,6 ;
rc_otec : N,6 ;
PocetDeti : F,2.0;
#K @ rc ;
AlterM (@) * rc_matka;
AlterO (@) * rc_otec ;
NaMatku(lidi) ! rc_matka ; {!!! referenční integrita}
NaOtce(lidi) ! rc_otec ; {!!! referenční integrita}
{ údaje z jiných vět toho samého souboru }
#C JmenoMatky := cond( NaMatku.exist: NaMatku.Jmeno,
else:'neuvedena') : A,20 ;
...
JmenoBabiM := cond( NaMatku.exist: NaMatku.JmenoMatky,
{rekurzivní odkaz} else:'neuvedena') : A,20 ;
#A NaMatku.PocetDeti+= cond( IsNewRec: 1 );
CLAUSES
#CLAUSES
Fakt:
Predikát[(Term[{,Term})].
Pravidlo:
Predikát[(Term{,Term})] :- Instrukce [{,Instrukce}].
Deklarace predikátů. Hlavička programového predikátu je
deklarovaná v odstavci #PREDICATES a pro lokální predikáty může být
deklarovaná obdobně i v části CLAUSES následujícím tvarem:
: DeklaracePredikátu
Každý programový predikát včetně predikátu "main" musí mít uvedenu
alespoň jednu větev, ale může jich být i více.
Databázové predikáty mohou být zapsány pouze ve tvaru faktu.
Deklarovány jsou v odstavci #DATABASE. Při běhu programu lze pomocí
predikátů assert a retract fakt zrušit i doplnit nový.
lad:
sezn_prvku:- mem_Firma(X,[]), write(X,' '),fail.
sezn_prvku.
:is_ is_:-X:Integer=10+12,write('Součet 10+12 = ',X),wait.
Clearkeybuf
OŠETŘENÍ KLÁVESNICE
Buffer klávesnice - kromě systémového bufferu klávesnice obsahuje PC FAND
i vlastní buffer klávesnice, ze kterého čte znaky přednostně. Pokud je
buffer PC FANDu prázdný, čte znaky ze systémového bufferu.
██ SETKEYBUF(TextVýraz)... naplnění PC FAND-bufferu klávesnice
██ CLEARKEYBUF ........... vyprázdní oba buffery klávesnice
██ KEYBUF : string........ přečte znaky ze systémového bufferu a připojí
je k bufferu PC FANDu, jehož spojený obsah
vrátí jako hodnotu funkce. Bezprostředně po
keybuf nebo clearkeybuf je keypressed=false.
vstup z klávesnice
██ READKEY :string ...... vrací znak z klávesnice (příp. včetně prefixu'\0')
██ KEYPRESSED :boolean... stiskl uživatel klávesu ?
██ WAIT ................. čeká na stisk libovolné klávesy (nebo myši)
zvuk
██ SOUND(ČísVýraz) ...... zapne zvukový signál (parametr=výška tónu v Hz)
██ NOSOUND .............. vypne zvuk
██ BEEP ................. pípne (totéž co write('\7')),
lze vypnout - viz. Instalace konstant
pauza
██ DELAY(ČísVýraz) ...... pauza v programu (parametr je v milisekundách),
na některých typech procesorů však měří chybně a
je třeba čas čekání upravit vhodnou konstantou.
Clipbd
FUNKCE DATOVÉHO EDITORU
Po ukončení nebo přerušení editace dat se nastavují hodnoty ( přístupné
přes následující funkce), které udávají stav při opuštění editoru.
██ CLIPBD : string ... Interní proměnná, která programátorsky zpřístupní
obsah "clipboardu". Může býti rovněž na levé straně
přiřazovacího příkazu clipbd:=TextVýraz.
Dále viz. textový editor - bloky.
██ EDBOOL : string ... Vrátí text výrazu pro výběr podmnožiny v datovém
editoru. Musí se použít v exit-proceduře a vztahuje
se na právě přerušenou editaci. Pokud takový výběr
není, vrátí ''.
██ EDBREAK : real ...... Návratový kód editoru podle způsobu ukončení
editace:
0 ... běžné ukončení editace klávesou <Esc>
11 ... přerušení při překročení času - watch (lokální sítě)
12 ... přerušení na údaji klávesou <Enter>, <F4> (exit)
13 ... opuštění editoru při prázdné množině vět a módu '^n'
14 ... návrat z vložené editace klávesou <CtrlF4> s přenosem hodnoty
15 ... ukončení klávesou <Esc> za stavu "soubor je blokován" (sítě)
16,17 ... přerušení typu record před zápisem, změnou (16)
nebo mazáním věty (17) (exit)
18 ... vstup do pořízení nové věty (viz. newrec)
Přerušení funkčními klávesami při definovaném exit:
1 až 10 ... ShiftF1 až ShiftF10
21 až 30 ... F1 až F10
31 až 40 ... CtrlF1 až CtrlF10
41 až 50 ... AltF1 až AltF10
Přerušení kurzorovými klávesami při definovaném exit:
51 ... Home 57 ... Right 71 ... CtrlLeft 77 ... Tab
52 ... Up 59 ... End 72 ... CtrlRight 78 ... ShiftTab
53 ... PgUp 60 ... Down 73 ... CtrlEnd 79 ... CtrlN
55 ... Left 61 ... PgDn 74 ... CtrlPgDn 80 ... CtrlY
62 ... INS 75 ... CtrlHome 81 ... Esc
76 ... CtrlPgUp 82 ... CtrlP
██ EDFIELD : string .... Název údaje pod kurzorem při opuštění editoru.
Souvislosti: parametr editace field
██ EDFILE : string ...... Název editovaného souboru. Má význam pro psaní
obecné exit-procedury. Mimo datový editor má
význam jen v ladícím režimu, kde vrací název
zpracovávané úlohy.
██ EDIREC : real ...... Pořadové číslo aktuální věty na obrazovce při
opuštění editoru.
Souvislosti: parametr editace irec.
██ EDKEY : string ....... Název klíče při editaci. Při editaci podle
pracovního indexu nebo při editaci souboru bez
indexů vrací '' (prázdný string). Tato funkce
je korektně definována v exit-proceduře, tj.
v průběhu editace.
██ EDRECKEY : string .... Interní hodnota klíče poslední editované věty.
Vrací hodnotu před případnou změnou klíče věty.
Souvislosti: parametr editace reckey,
funkce keyof, SQL-server.
Speciální použití - text chyby při kontrole
syntaxe dynamické deklarace, viz. check
██ EDRECNO : real ...... Fyzické číslo věty při opuštění editoru.
Při opuštění v módu pořízení vrací 0 !
Souvislosti: parametr editace a funkce recno
██ EDUPDATED: boolean ... Test provedení změn v souboru během editace
udává, zda byl soubor (v exit procedurách věta)
změněn. Je funkční pro datový i textový editor.
Změnou může být i změna třídění souboru (F6).
██ ISNEWREC : boolean ... Vrací TRUE pokud je právě editovaná věta nově
pořízenou. Má smysl jen v datovém editoru - tedy
v kapitole F nebo při volání exit-procedury.
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
██ Pomocí funkcí edrecno,edirec,edfield a edreckey spolu s odpovídajícími
parametry editace recno, irec, field a reckey lze po opuštění datového
editoru zajistit návrat na přesně stejné místo. Tj. návrat na stejný
údaj stejné věty včetně pozice v okně.
██ Funkce edbreak se nejčastěji použije pro rozhodnutí o následné akci
po ukončení nebo přerušení datového editoru.
Clipboard
BLOKY TEXTOVÉHO EDITORU
Close
ULOŽENÍ ZMĚN A UZAVŘENÍ SOUBORU
Během přímého přístupu k datům a práce s globálními proměnnými se výsledky
kvůli rychlosti uchovávají ve vyrovnávací paměti ( cache ). Příkaz save
zajistí výpis informací z paměti na disk včetně aktualizace hlavičky
souboru a adresářových záznamů (fyzická délka souboru).
Po ukončení příkazů jako např. edit, merge se činnost příkazu save provede
implicitně.
██ syntaxe: SAVE
───────────
Uzavírání souborů je (relativně) pomalá operace, proto PC FAND implicitně
uzavírá datové soubory až při ukončení úlohy ( otevírá je při prvním
použití ). To znamená , že během provádění úlohy jsou současně otevřeny
všechny použité soubory. Omezení počtu současně otevřených souborů zajistí
příkaz close.
██ syntaxe: CLOSE [ (NázevSouboru) ]
■ NázevSouboru ... Název kapitoly F. Příkaz uzavře uvedený soubor. Pokud
není jméno souboru uvedeno, uzavře všechny otevřené
datové soubory.
Poznámka:
Fyzické soubory se uzavřou ihned po použití. Uzavření všech souborů se
provede také jako vedlejší efekt příkazu exec.
ClrEOL
VYMAZÁNÍ OBRAZOVKY
Příkaz clrscr provede vymazání okna. Pomocí parametrů lze ovlivnit, zda
jde o aktuální nebo explicitně souřadnicemi zadané okno. Místo výmazu lze
vyplnit okno zadaným znakem.
██ Syntaxe: CLRSCR [ ( souřadnice [ ,Atr [,Znak ] ] ) ]
■ Souřadnice ... Sloupec1,Řádek1,Sloupec2,Řádek2 ... souřadnice levého
horního a pravého dolního rohu okna, které má být mazáno.
Když nejsou zadány, převezmou se dle aktuálního okna.
■ Atr .......... atribut barvy nebo Ctrl-znak, pro mazání se bere
složka pozadí. Když není zadán, převezme se dle
1: nejsou-li souřadnice - dle aktuálního okna
2: jsou-li souřadnice - dle instalace barev -
parametr "Uživatelská obrazovka"
■ Znak ......... textový výraz, okno se vyplní zadaným znakem
───────────────
Mazání od pozice kurzoru do konce řádku.
██ Syntaxe: CLREOL
░░░░░░░░░░░░
░░příklady░░
░░░░░░░░░░░░
██ clrscr; { mazání aktuálního okna, podle aktuálního }
{ okna převezme souřadnice i atribut }
clrscr(10,5,30,10); { mazání stanoveného okna, atribut dle }
{ instalace "Uživatelská obrazovka" }
clrscr(10,5,30,10,32) { mazání zelenou barvou }
clrscr(1,1,80,25,^e,'░') { vyplnění obrazovky zadaným znakem }
ClrScr
VYMAZÁNÍ OBRAZOVKY
ColBlk
SETEDITTXT
Color
INSTALOVANÉ BARVY
Pro všechny konstrukce PC FANDu, které pracují s barvami na obrazovce, je
možno tyto barvy instalovat programem FANDINST. Dále je v instalaci obsaže-
no i 16 uživatelských barev pro volné použití programátorem. Všechny kódy
barev z instalace jsou dostupné pomocí funkce color.
██ syntaxe : COLOR ( PořadíBarvy ) : real
Návratová hodnota je kódem barvy se složkou popředí i pozadí - viz. barvy
■ PořadíBarvy ... pořadí daného parametru v tabulce barev programu
FANDINST. Celkem 54 barev:
0-15 uživatelská barva č.0 až 15 34 kurzíva
16 MENU normální text 35 široký text
17 aktivní volba 36 dvojitý text
18 první písmeno 37 mastný text
19 nepovolená volba 38 zhuštěný text
20 VÝBĚR normální text 39 písmo elite
21 aktivní položka 40 EDITOR DAT data
22 maska pro soubor 41 datový kurzor
23 ZADÁNÍ zadávaný text 42 podmnožina
24 nápověda 43 ostatní text
25 HLÁŠENÍ na posledním řádku 44 zrušené věty
26 POSLEDNÍ ŘÁDEK nápověda 45 výběr (F8,ShiftF8)
27 symboly kláves 46 UŽIVATELSKÁ OBRAZOVKA
28 přepínače 47 NÁPOVĚDA text
29 PRVNÍ ŘÁDEK systém.informace 48 vybrané téma
30 EDITOR TEXTU text 49 ostatní témata
31 ctrl-znaky 50 zvýrazněný text
32 blok 51 KRÁTKÁ NÁPOVĚDA
33 DRUHY PÍSMA podtržený text 52 OKNA stíny
53 DESKTOP
Compress
EXPLICITNÍ INDEXOVÁNÍ
Indexy se vytvářejí a udržují automaticky. V některých situacích je však
na vhodné "donutit" PC FAND k indexování souboru. Např. tehdy, když byly
indexy zrušeny (výstup merge), a je lépe, když se indexuje ihned a ne až
před použitím souboru ( třeba edit ). Indexování potom nezdržuje
uživatele.
██ syntaxe: INDEXFILE( NázevSouboru [,compress] )
■ NázevSouboru ... název kapitoly F
■ compress ....... nejprve odstraní neplatné věty
Poznámka: Jiným způsobem lze donutit PC FAND k novému indexování souborů
tak, že prostě zrušíme indexové soubory ( příkaz del *.X00,
manažer). Ty pak jsou obnoveny při prvním pokusu o práci s nimi
v úloze. Toto indexování však nemá efekt compress. Ale, což je
důležité, jde použít i pro uzavřenou (zaheslenou) úlohu.
concat
concat
concat([&]Term1,[&]Term2,[&]Term3)
Term Term typu String.
Spojení nebo porovnání textových termů. Porovnávání založeno na
výrazu Term1+Term2=Term3. Dle kombinace vstupních a výstupních
proměnných lze použít pro porovnávání, spojení i výběr řetězce.
Umožněny jsou následující kombinace parametrů (i=vstup o=vystup):
(i,i,i) - test
(i,i,o) - spojení
(o,i,i) - výběr řetězce
(i,o,i) - výběr řetězce
Příklad:
spoj:- trace(1),concat('A','B','AB'),
concat('A','B',X), write(X),
concat('A',Y,'AB'), write(Y),
concat(Z,'B','AB'), write(Z).
Cond
COND - duplicitní klíčové slovo
■ cond ................. speciální funkce: speciální výběrová funkce
■ edit(...cond...) ..... parametry editace: editace vybrané podmnožiny
■ graph( ...cond...) ... grafické zobrazení dat, viz. cond
■ report(...cond...) ... parametry sestavy: sestava z vybrané podmnožiny
consult
consult
consult(NázevDatabáze,ParamSoub.UdajTypuT)
NázevDatabáze Jméno databáze. Uvedeno za klíčovým slovem #DATABASE.
ParamSoub.UdajTypuT Globální proměnná.
Připojení obsahu databáze uložené v globální proměnné typu T k
současným záznamům databáze. Obsah globální proměnné
ParamSoub.UdajTypuT musí být uložen pomocí predikátu save.
Deklarace uložené databáze a databáze, k níž je obsah připojen,
musí být totožná. Není prováděna úplná kontrola shodnosti. Při
nesouladu může dojít k zhroucení systému. Pokud provádíte přenos
databáze z jedné logické procedury do druhé doporučujeme deklaraci
konstant, typů a databáze umístit do vkládané kapitoly {$Include ...}.
Pozor - údaj může být chybně naplněn pomocí prostředků FANDu (např.
přímý přístup) nekorektní hodnotou !
Příklad:
obnov:-consult(FIRMA,PROLPAR.KapB).
Copy
TEXTOVÉ FUNKCE
Výběr podřetězce z textu.Funkce vrátí podřetězec textu TextVýraz délky
Délka, který se vybere od zadané pozice.
██ syntaxe: COPY ( TextVýraz ,OdPozice ,Délka ) : string
■ Kapitoly .... F,M,R,P,D (Funkce v L kapitole)
──────────────────────────
Konstrukce řetězce opakováním.
██ syntaxe : REPEATSTR ( TextVýraz ,PočetOpakování ) : string
■ Kapitoly .... F,M,R,P,D
zpracování textu
░░░░░░░░░░░░
░░příklady░░ ██ copy('Jan Novák',5,5) = 'Novák'
░░░░░░░░░░░░
CopyFile
KOPÍROVÁNÍ A PŘEVODY
Příkaz procedury CopyFile provádí kopírování souborů. Může jít jak o prosté
kopírování , připojení tak i o převody - datové struktury , diakritiky nebo
formátu. Vlastní proces kopírování dat má buď charakter fyzického ( binár-
ního ) přenosu, tak i strukturovaného přenosu definovaných dat - v podstatě
merge včetně změny pořadí vět. Charakter operace se odvozuje od typu použi-
tých souborů a dalších parametrů příkazu.
██ Syntaxe: COPYFILE ( Soubor1[/Klíč | Formát | .X], Soubor2 [/Formát]
[ ,head=TextovýVýraz ]
[ ,nocancel ] [ ,append ] [ ,mode='Převod'] )
■ Soubor1,Soubor2 ... Vstupní a výstupní soubor. Lze zadat buď logické
jméno - tj. název kapitoly F nebo jméno dle katalogu,
nebo fyzické jméno ( v apostrofech, včetně cesty ).
Použitý odkaz na vstupní a výstupní soubor má zásadní
vliv na způsob kopírování - viz. níže varianty
■ Klíč .............. Název klíče indexového souboru, věty se kopírují v
pořadí dle klíče. Pokud není použit, kopíruje se
dle fyzického pořadí.
■ Formát ............ Definuje typ souboru při změně formátu. Lze použít:
FIX textový soubor v pevném formátu
VAR textový soubor ve volném formátu (viz.formát)
TXT jen pro vstupní soubor, převod textového souboru
PC FANDu do standardního tvaru (^M -> ^M^J)
POZOR !!!
Při použití /FIX nebo /VAR pozor na převod údajů
typu D, zvláště při implicitní masce DD.MM.YY.
Implicitní století se dosadí podle obecných
pravidel, viz. Posun implicitního století,
Instalace konstant
■ .X ................ Kopíruje se včetně indexů (soubor .X00)
!!! Při variantě copyfile(A.x,B), kde A i B jsou
názvy kapitol F, se indexy nekopírují (interně
jde o merge).
■ head=GlobProměnná.. Při převodech /fix a /var, vytvoří první řádek
(hlavičku) textového souboru. Při importu textového
souboru to musí být uložený údaj.
■ append ............ Soubor1 se připojí za konec Souboru2. Zde pozor na
rozdíl mezi fyzickým a logickým připojením (viz.níže)
■ mode='Převod' ..... Převod mezi různými kódy diakritiky. Má význam pouze
pro textové soubory. Jde o dvouznakovou konstantu.
Kódy: K - Kamenických
L - Latin2
W - Windows (CP1250)
N - bez diakritiky ┌─────────────────────┐
Povolené kombinace pro převod:│KL,LK,KN,LN,KW,LW,WL │
└─────────────────────┘
■ nocancel ... Potlačí ukončení úlohy při chybě, nastaví kód chyby exitcode
██ POZNÁMKY
Pokud použijeme jako Soubor1 nebo Soubor2 název identifikátoru, chápe se
prioritně jako název kapitoly F. Pokud taková neexistuje, hledá se odpo-
vídající název dle katalogu. Není-li nalezen, je to chyba syntaxe. Nelze
použít lokální proměnnou typu string. Fyzickou cestu lze přímo v příkazu
zadat jen jako konstantu ( v apostrofech ). Kopírování s možností změny
cesty lze realizovat přes katalog viz. příklad.
██ VARIANTY:
Soubor1 i Soubor2 jsou kapitoly F
V tomto případě se příkaz copyfile interně realizuje jako implicitní merge.
#I1_Soubor1
#O1_Soubor2 [+] { + se použije když je append }
Z toho plynou tyto podstatné skutečnosti:
- kopírování se provádí v kontextu logické struktury souborů. Pokud
není deklarace souborů stejná, dojde ke konverzi "by-name" podle
pravidel merge. Může se tedy i změnit fyzická velikost souboru.
- jde o jediný případ, kdy lze kopírovat do sebe - inplace.
POZOR - inplace nelze obecně syntakticky odhalit - jestliže
v jiných případech "projde", nemusí být výsledek korektní.
Jeden ze souborů je fyzický soubor
Tj. název dle katalogu nebo konstanta v apostrofech. Pokud nejde o export
nebo import (není VAR nebo FIX) kopíruje se fyzicky, i když je odkaz na
ten druhý soubor proveden názvem kapitoly F.
Append - připojení fyzické a logické
Při fyzickém připojení se bez ohledu na vnitřní strukturu dva soubory
prostě "srazí" k sobě. To znamená, že výsledek nemusí odpovídat požadavku
na strukturu dat. A pro FANDovské datové soubory také neodpovídá.
Oproti tomu při logickém spojení dochází navíc k aktualizaci prefixu
souboru a k připojení jednotlivých vět. Zvláště zřejmé je to pro soubor
volných textů (.T00).
CopyLine
ZPRACOVÁNÍ ŘÁDKU TEXTU
Délka volných textů ( a lokálních proměnných typu string ) je omezena na
65 000 B. Parametry funkcí jsou textové a číselné výrazy.
Výběr jednoho nebo více řádků z textu od zadaného počátečního řádku.
██ syntaxe : COPYLINE ( Text , ČísloŘádku [ ,Počet ] ) : string
■ Kapitoly ....... F,M,R,P,D
─────────────────────────────
Počet řádků textu.
██ syntaxe : LINECNT ( TextVýraz ) : real
■ Kapitoly ....... F,M,R,P,D
Cos
ARITMETICKÉ FUNKCE
Count
GROUP, COUNT - duplicitní klíčová slova
■ group ............ pořadí aktuální zpracovávané skupiny vět
■ Ii.count ......... pořadí věty vstupního souboru v aktuální skupině vět
(rozdělení vstupů sestavy nebo transformace do skupin
podle řídících údajů)
Cprinter
PŘÍKAZY PRO TISK TEXTU
Základním způsobem tisku v PC FANDu je tisk textu z prostředí textového
editoru. Tisk textu lze vyvolat i explicitně příkazem procedury printtxt.
██ syntaxe: PRINTTXT ( NázevTextSouboru | LokálníPromTypuString )
───────────
V PC FANDu je možno instalovat až 10 tiskáren, ze kterých lze interaktivně
vybrat jednu aktivní tiskárnu. Pro manipulaci se seznamem instalovaných
tiskáren je možno použít příkazy a funkce procedury:
setprinter .... příkaz pro nastavení aktivní tiskárny,implic.první z .CFG
cprinter ...... funkce typu real, vrací číslo aktivní tiskárny (0,1,..)
██ syntaxe: SETPRINTER ( ČísVýraz )
CPRINTER : real
Cr
LAN - POUŽITÍ VYŠŠÍCH MÓDŮ BLOKOVÁNÍ
Wr ■ zápis změněné věty v datovém editoru
■ #A += , provedení aditivní změny bez přidání vět
■ změna hodnot klíčů podříz. věty (referenční integrita)
■ writerec
■ Soubor.údaj:=, Soubor[Věta].údaj:=
■ RecordProměnná:= (pokud obsahuje volné texty)
Cr ■ zápis nové věty v datovém editoru (pořízení)
■ výstup merge s připojením vět (+)
■ #A !+=, #A !!+= provedení aditivní změny
■ writerec(,0) - přidání věty
■ recallrec
■ appendrec
■ zápis do journalu
Del ■ rušení vět editorem ( i podříz. souboru při refer. integritě)
■ deleterec
■ Soubor.nrecs:=,
■ starý formát (FAND verze 2.x) exit=(..proc())
Excl ■ merge výstup bez připojení vět
■ sort
■ indexfile
■ restore (obnova zálohovaných souborů)
Ctrl
CTRL - duplicitní klíčové slovo
■ edit(...ctrl) ..... volání editoru: alternativní nápověda
■ report(...ctrl) ... parametry automatické sestavy: řídící údaje součt.
sestavy
Ctrl-F1 error
┌─────────────────────────────┐ ┌──────────────────────────────────────┐
│ Navigace na rejstřík hesel │ │ PC FAND - programátorská verze v.4.2 │
│ *Rok 2000* v PC FANDu │ └──────────────────────────────────────┘
│ A F L R V │ Nápověda ................ práce s helpem
│ B G M Ř W │ ░ .................... označuje příklady
│ C H N S X │
│ Č I O Š Y │ Projektantské prostředí ... programování
│ D J P T Z │ Katalog ................. seznam souborů
│ E K Q U │ Instalace
└─────────────────────────────┘ Komunikace ........ uživatelské rozhraní
┌─────────────────────────────┐ Klávesnice, Myš ......... základní popis
│ kapitoly projektu │ Textový editor ........... práce s texty
│ deklarace souboru - File │ Datový editor ..............práce s daty
│ formulář - Edit │ Lokální sítě
│ sestava - Report │ Grafy ....... grafické možnosti PC FANDu
│ transformace - Merge │ Tabulky znaků ...... aktuální sada znaků
│ procedura - Proc. │ SQL ......... komunikace s SQL serverem
│ funkce - Dekl. │ ODBC ...... datové rozhraní pro Windows
│ seznam uživatelů - User │ Identifikátor Interní proměnné
│ vkládané texty - Include │ Výrazy Standardní funkce
│ PROLOG - Logic │ Operátory Příkazy procedury
└─────────────────────────────┘ Syntaktické diagramy
(c)ALIS s.r.o. Česká Lípa p.s. 79, tel. 0425/823806, 824800
CurrTime
AKTUÁLNÍ DATUM A ČAS, KONVERZE
Funkce today vrací aktuální (dnešní) datum podle systémových hodin.Podobně
funkce currtime vrací aktuální čas. Obě návratové hodnoty jsou ve formátu
pro typ údaje D PC FANDu.
██ Syntaxe: TODAY : real
CURRTIME : real
Rok 2000 !!! Speciální přiřazení Today:=real;
─────────────────────
Konverzní funkce strdate převede datum a čas v interním formátu na string.
Funkce valdate provede pravý opak. Obě funkce provedou převod podle masky.
Maska pro datum formátuje textové vyjádření datumu a času.
██ Syntaxe: STRDATE ( ČísVýraz ,Maska ) : string
VALDATE ( TextVýraz ,Maska ) : real
■ ČísVýraz .... Datum a čas v interním formátu PC FANDu (real)
■ TextVýraz ... Datum a čas v textové presentaci.
■ Maska ....... Uvedení dnů bez měsíce a roku se nechápe jako datum ale
jako počet dní.