#L

LOGICKÉ KONTROLY - odstavec #L

LAN

LAN - LOKÁLNÍ SÍTĚ
V lokální počítačové síti je možné sdílet FAND , úlohu i datové soubory.
Před použitím FANDu v síti je nutné nejprve v závislosti na předmětu
sdílení provést potřebné zásahy do instalace.

V síťovém provozu FAND automaticky určuje režim sdílení (blokování)
datových souborů a koordinuje práci datových editorů.

Při programování síťových aplikací je možné použít také příkazy with shared
a with locked.

Pro sdílené soubory (#,#R) se kromě módu sdílení Excl nepoužívá cache paměť

Instalace FANDu v síti Technika sdílení souborů Síťové příkazy

instalace sítě technika sdílení with shared
parametry programu SHARE technika blokování souboru with locked
sdílení FANDu módy blokování souboru
sdílení úlohy tabulka módů blokování
sdílení datových souborů technika zamykání vět
používané pojmy sdílená editace

LANNODE

SET-parametry

Lantastic

LANTASTIC
V praxi je provozováno několik verzí této sítě. Nejsou známy nějaké speci-
fické problémy při instalaci PC FANDu nebo úloh. Nižší verze LANTASICu
používají externí (DOSový) program SHARE.

Verze LANTASTICu 6.0 může alternativně použít i interní SHARE:
Spustíme program NET_MGR, nabídky Server startup parameters (rolovat dolů)
Internal share

volby: Internal share ... enabled/disabled (povolen/vypnut interní share)
Share locks ...... maximální počet zámků (viz. SHARE /L: )
Name space ....... velikost tabulky otevřených souborů (SHARE /F:)

Last

ALTERNATIVNÍ NÁPOVĚDA

LastUpdate

ÚDAJE O SOUBORU
Parametry každého datového souboru lze zjistit v následujících interních
proměnných a funkcích : nrecs, nrecsabs, lastupdate.
Fyzickou délku souboru v bytech lze zjistit pomocí funkce filesize.

██ LASTUPDATE .............Datum a čas poslední aktualizace souboru
(ve formátu typu D).
Syntaxe: NázevSouboru | NázevDleKatalogu .lastupdate : real

Poznámka: Před lastupdate je vhodné dát close[(Soubor)], neboť
aktualizace časového údaje se provádí při uzavření souboru.
───────────

██ NázevSouboru.NRECS :real ...... počet platných vět v souboru
██ NázevSouboru.NRECSABS :real ... počet fyzických vět (včetně neplatných)

Neplatné věty mohou být pouze v indexovém nebo .DBF souboru, proto pro
ostatní (neindexové) soubory platí nrecs=nrecsabs. Konstrukce nrecs může
stát na levé straně přiřazovacího příkazu:

■ NázevSouboru ... název kapitoly F
■ Interní proměnná NázevSouboru.nrecs může být i na levé straně přiřazova-
cího příkazu. Tím lze docílit změnu počtu vět souboru na zadanou hodnotu.
Tj. zkrácení, zrušení nebo prodloužení souboru.
NázevSouboru.nrecs:=ČísVýraz
Pro indexové soubory je přípustné pouze NázevSouboru.nrecs:=0. (zrušení)
Toto je povoleno i pro pracovní index.

■ Fyzická interpretace příkazu soubor.NRECS:=0 je poněkud odlišná pro
jednotlivé typy datových souborů:
- běžný lokální datový soubor bude zrušen
- sdílený datový soubor bude míti délku 6 byte - tj prefix.
- soubor .DBF - zůstane hlavička (délka dle deklarace).
- pracovní index bude zrušen.


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

██ Výpis informací o souboru.
BEGIN
writeln('Informace o souboru DATA');
writeln('... počet platných vět: ',DATA.nrecs:6);
writeln('... počet neplatných vět: ',DATA.nrecsabs-DATA.nrecs:6);
writeln('... počet fyzických vět: ',DATA.nrecsabs:6);
writeln('... poslední aktualizace: ',DATA.lastupdate:'DD.MM.YY hh:mm');
writeln('... fyzické jméno: ',DATA.path); {pouze pro soubory v katalogu}
POMOCNY.Path:=DATA.Path; close(DATA); {POMOCNY je katalogizovaný
soubor bez kapitoly F }
writeln('... délka v bytech:',filesize(POMOCNY));
writeln('... návěští: ',DATA.volume);
END;

██ Zjištění času aktualizace libovolného souboru.
V katalogu úlohy musí být založena věta s názvem souboru např. 'PRACOV',
který nekoresponduje na žádnou kapitolu typu F.
BEGIN
PRACOV.Path:=prompt(' zadej cestu k souboru :':A,79) ;
write('poslední aktualizace: ', PRACOV.lastupdate:'DD.MM.YY hh:mm');
END ;

LeadChar

NAHRAZENÍ V TEXTU
Odstranění nebo nahrazení vedoucích (LEADCHAR) nebo ukončujících
(TRAILCHAR) znaků v textu.

██ syntaxe: LEADCHAR ( 'Zn1' , Text [,'Zn2' ] ) : string
TRAILCHAR ( 'Zn1' , Text [,'Zn2' ] ) : string
■ Zn1,Zn2 ..... Znak Zn1 je odstraněn z textu Text, nebo, pokud je
uveden znak Zn2, je tímto nahrazen.
■ Kapitoly .... F,M,R,P,D (Funkce v L kapitole)

──────────────────────────

Nahrazení podřetězce v textu jiným řetězcem. Na rozdíl od předchozích
funkcí jsou nahrazeny všechny výskyty, nejen první či poslední.

██ syntaxe: REPLACE ( Co , Kde , Čím [,'Podmínky'] ) : string

■ Co,Kde,Čím ... Textové výrazy, význam evidentní z názvu.
Omezení: délka text.výrazů Co a Kde může být max.255 zn.
■ Podmínky ..... viz. funkce pos


Zpracování textu

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


██ leadchar('x',trailchar('x','xxxAAAAxx')) = 'AAAA'

██ Funkce leadchar a trailchar se nejčastěji používají k odstranění
přebytečných mezer z údajů typu A,n , což jsou textové řetězce
pevné délky.

F Adresy * Prijmeni : A,20 ;
...

editace všech Nováků se musí zadat
edit( ADRESY,....,
cond=(trailchar(' ',Prijmeni)='Novák'),...) ;

Podmínka Prijmeni='Novák' by vybrala prázdnou množinu, neboť při
porovnání musí souhlasit i délky řetězců. Mezera je také znak.

Left

SETEDITTXT

len

Zjištění délky seznamu
len_NázevTypu(Seznam, &Integer)

Seznam Vstupní seznam tvořený prvky typu NázevTypu.
Integer Výstupní hodnota určující počet prvků v seznamu.


Spočítá počet prvků v seznamu. Je rychlejší než uživatelem
definovaný predikát provádějící sečtení počtu prvků.

Příklad:

delka_sezn:- len_String(['ff','f'],Del), write(Del).

Length

TEXTOVÉ FUNKCE

Lexikální třídění

LEXIKÁLNÍ TŘÍDĚNÍ
PC FAND může pracovat s instalovatelnou tabulkou národní abecedy. Podpora
pro práci s národní abecedou se týká třídění a porovnávání a funkce upcase
resp. lowcase. Syntakticky se v projektu odlišuje lexikální relace od
běžného třídění (podle kódu znaku) uvedením vlnovky~ za operátor nebo před
klíčový (řídící, třídící) údaj.

Při lexikálním třídění je správně zatříděna dvojhláska CH, jsou rovnocenná
( tj. jejich pořadí je náhodné ) malá a velká písmena a písmena s čárkou a
bez čárky. Naproti tomu písmeno s háčkem je zatříděno až za písmeno bez
háčku. Při lexikálním srovnání se ignorují mezery zprava. Lexikální relace
zasahuje do těchto míst projektu:

■ třídění podle národní abecedy (ruční třídění v dat. editoru, příkaz sort)
■ klíčové údaje typu A v definici klíčů
■ řídící a třídící údaje v sestavě a transformaci
■ srovnávací operátory pro porovnávání textů, operátor in, funkce pos
■ hledání v textovém editoru

░ Název=~'' #K @ ~Jméno #I1_DATA ~ŘídÚdaj;~TřídÚdaj Místo in~ [...]

Like

LIKE deklarace
Deklaraci jednoho souboru lze použít jako základ pro deklaraci dalšího
souboru. Přebírají se všechny uložené údaje i další odstavce deklarace.
Deklarace LIKE může odkazovat na soubor, deklarovaný také like. Vidíme zde
tedy jisté prvky objektového přístupu.

██ Syntaxe: like NázevSouboru [ (Prefix) ] [ ; RozšířeníDeklarace ]

■ RozšířeníDeklarace Může obsahovat obvyklé syntaktické konstrukce
kapitoly F, které rozšiřují původní deklaraci.
Omezení: Pokud je originál indexovaný soubor,
musí být i like-soubor indexovaný.
■ Prefix ............. Pro indexové soubory se musí zajistit jednoznačnost
názvů klíčů, což se provede pomocí prefixu klíče.
"Prefix_NázevKlíče".
Implicitně je prefix NázevSouboru.

░░░░░░░░░░░░
░░příklady░░ F UCTY2 * like UCTY1 ;
░░░░░░░░░░░░ Dodatek : A,10 ; { další uložený údaj }
#U DalšíPohled (1,2) : () ;

Line

LINE - duplicitní klíčové slovo
■ line, .line .... číslo vystupujícího řádku, speciální funkce v sestavě
■ line(....) ..... příkaz pro kreslení čáry mezi dvěma krajními body
line

LineCnt

ZPRACOVÁNÍ ŘÁDKU TEXTU

Link

LINK
Funkce link provede hledání podle cizího klíče a vrátí fyzické číslo
nadřízené věty. Tj. podle definice cizího klíče vyhledá v odpovídajícím
nadřízeném souboru příslušnou (nadřízenou ) větu a vrátí její číslo. Pokud
taková věta není nalezena , vrací záporné číslo nejbližší vyšší věty ( dle
daného klíče). Funkce má dvě varianty dle typu identifikace podřízené věty.


██ Syntaxe : LINK ( NázevSouboru[FyzČísloVěty] ,NázevSpojení ) : real
LINK ( RecordProměnná , NázevSpojení ) : real

■ NázevSouboru ... Název kapitoly F, identifikátor.
■ FyzČísloVěty ... Číselný výraz. Číslo věty podřízeného souboru, k níž se
hledá viditelná věta
■ NázevSpojení ... NázevSouboru, NázevRole nebo NázevKlíče (Cizí klíč)


░░░░░░░░░░░░
░░příklady░░ i:=link(POD[10],NAD); {podle čísla věty}
░░░░░░░░░░░░ i:=link(Věta,NAD); {podle obsahu record proměnné}

LinkRec

LINKREC
Příkaz procedury, který pro větu podřízeného souboru vyhledá a načte
odpovídající větu nadřízeného souboru.

██ Syntaxe: LINKREC ( RecordProměnná1,
[ NázevSpojení(] RecordProměnná2 [)] )

■ RecordProměnná1 ... věta souboru, ke které hledáme "nadřízenou" větu
■ RecordProměnná2 ... sem bude (v případě úspěchu) načtena věta nadříz.
souboru
■ NázevSpojení ...... Druh vazby na nadřízený soubor (viz. cizí klíč)
NázevSouboru | NázevKlíče | NázevRole

■ Provedení příkazu Pokud příkaz proběhl úspěšně (věta byla nalezena)
bude exitcode = 0,
exitcode = 1 v opačném případě

Ln

ARITMETICKÉ FUNKCE

LoadFont

EXTERNÍ PROGRAMY

Loadlex

loadlex
loadlex(ParamSoub.ÚdajTypuT)

Čte obsah globální proměnné typu T, provede lexikální rozbor
a vytvoří interně uložený seznam L_Lexem. Domain Lexem je implicitně
deklarovaný s následující strukturou:

Lexem = lex(Integer_Pos,Integer_Typ,String)
Integer_Pos Pozice v textu.
Integer_Typ Typ : 0 oddělovač + ostatní
1 slovo tvořené písmeny
2 identifikátor začínající písmenem a obsahující
písmena, číslice a znak "_"
3 celé číslo
String Vlastní lexem

Bílá místa tvořená posloupností znaků ' ' a komentáři se
vynechávají a slouží pouze k oddělení lexemu. Neukončené komentářové
závorky vyvolávají na konci textu chybu error(503).

Závěr seznamu tvoří vždy dodatečný prvek lex(PoziceKonce,0,'').

Vytvořený interně uložený seznam lze zpracovávat pomocí
implicitních predikátů nextlex a getlex. Tyto predikáty se smějí
používat ve větvi po loadlex. V opačném případě hrozí zhroucení
programu.

Příklad:

vyb_slov:- trace(1),loadlex(PROLPAR.Slova),
getlex(X),writeln('Term celkem:',X),
nextlex,getlex(Y),writeln('Term zkr.:',Y).

Lock

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

Locked

LAN - PŘÍKAZ WITH LOCKED
Při přímém přístupu k větě datového souboru z procedury není zamykání vět
automaticky prováděno ! Pro aktualizaci údajů nebo rušení věty příkazem
deleterec v proceduře je tedy vhodné použít pro koordinaci práce v síti
příkaz pro blokování jedné nebo více vět datového souboru:

█ with locked NázevSouboru[VýrazČíslaVěty] {,NázevSouboru[VýrazČíslaVěty]} do
█ Příkaz1
█ [ else Příkaz2 ];

Po dobu provedení "Příkaz1" je zamčena věta (několik vět) datového souboru.
Mód blokování souboru je určen automaticky samostatně pro každou akci
prováděnou v "Příkaz1" nebo je možné jej stanovit příkazem with shared.

Pokus o aktualizaci zamčené věty jiným účastníkem (z datového editoru, z
procedury s uvedením "with locked ...") je odmítnut. Při požadavku na
zamčení více vět najednou zamkne všechny věty současně nebo žádnou. Není-li
uvedena větev "else ..", pak v případě blokování některé z uvedených vět
jiným účastníkem čeká FAND na její uvolnění bez možnosti přerušení čekání.
Periodu opakování přístupu je možné instalovat (net delay).

Logické kontroly

LOGICKÉ KONTROLY - odstavec #L

Login (SQL)

ODBC
Pod zkratkou ODBC (Open Database Connectivity) se skrývá mechanismus
otevřeného rozhraní (interface) pro práci s databázemi (datovýni soubory).

Pro aplikační program přináší zabudování rozhraní ODBC možnost zpracování
dat uložených v libovolné databázi, pro kterou existuje tzv. ODBC-ovladač.
V podstatě jde o technologii zpracování client-server.
Pro FANDovské datové soubory existuje ODBC ovladač pro platformy
16 a 32 bit. Windows.
To znamená, že z libovolné Windows-aplikace, která podporuje ODBC se
lze "dostat" na datové soubory provozovaných FAND-aplikací. Pro příklad
uveďme balík Microsoft Office, WinBase602, Delphi, Java atd.

ODBC ovladač pro soubory PC FANDu
je samostatný produkt, distribuovaný firmou ALIS spol.s.r.o.
Demoverze je dostupná na www.alis.cz.
Jelikož datové soubory PC FANDu neobsahují deklaraci, je pro přístup
přes ODBC potřeba textový soubor s deklaracemi FAND-souborů, a to
v syntaxi jazyka SQL.
Je to proto, že celá filosofie ODBC je založena na jazyce SQL jako
obecném databázovém jazyce.
Pro tento definiční soubor je vyhrazena přípona RDA. Pro vytvoření
tohoto souboru je většinou nutná spolupráce s autorem FAND-aplikace.
Kromě deklarace dat obsahuje soubor RDA i definice uživatelů
a přístupových práv k souborům - tabulkám.

Možnosti použití ODBC ovladače vyplývají z obecných vlastností
technologie ODBC. Z hlediska aplikace PC FANDu je důležité to, že
přes ODBC ovladač je možno sdílet datové soubory spuštěné FAND-aplikace.
Podrobnosti k instalaci jsou uvedeny v dokumetaci, která je i součástí
demoverze ODBC-FAND-ovladače.

POZOR !
Nezaměňovat ODBC ovladač s podporou SQL serveru z FANDu.
* ODBC-ovladač slouží pro přístup k datovým souborům PC FANDu (v.3.0
a výše) z prostředí programů pro Windows.
* SQL podpora ve FANDu (od verze 3.2) slouží k přístupu z DOS-FANDu
k SQL-databázím. Po verzi 3.2 byl již tento směr vývoje ukončen.

Lokální proměnné

DEKLARACE LOKÁLNÍCH PROMĚNNÝCH

Lokální soubory

FILE
Použití typu file (soubor) se pro parametry procedury poněkud liší od
použití jako typu lokální proměnné procedury.

Parametr typu FILE
──────────────────

██ ( ... ; NázevSouboru : FILE ; ... )

■ NázevSouboru ... Při běžném překladu (Ctrl-F8) se bere jako reálný
soubor (název viditelné kapitoly F). Při vyvolání
procedury se substituuje aktuálním parametrem, lze
použít i dynamickou deklaraci souboru.

Význam parametru typu file je především pro psaní zobecněných procedur,tj.
procedur, použitelných pro více souborů. Dynamizací aktuálního parametru
typu file lze deklarovat lokální soubor.

██ Proc( NázevProcedury,(@NázevSouboru)) ;
Proc( NázevProcedury,(@[NázevSouboru,TextVýraz])) ;

V příkazu Proc při volání procedury syntakticky odlišíme parametr FILE
pomocí znaku '@'.

■ Aktuální parametr nemusí mít stejnou deklaraci se souborem , použitým
jako formální parametr, ale musí se samozřejmě shodovat všechny prvky
deklarace použité v proceduře ( údaje, odstavce ). Tato podmínka je
např. splněna, je-li aktuální parametr souborem deklarovaným LIKE
formální parametr.
Pro substituci názvů vlastních alternativních klíčů platí konvence:
Je-li NázevKlíče == [Prefix_]ZbytekNázvu, pak pokud soubor, substi-
tuovaný místo původního, nemá klíč s tímto názvem, PC FAND zkusí
klíč s názvem NázevAktuálníhoParametru_ZbytekNázvu

Pozor: Při použití nevhodného parametru mohou nastat běhové chyby.

■ TextVýraz ... ve druhé variantě znamená možnost dynamické deklarace
souboru - lokálního v dané proceduře. Nemůže mít indexy
a ignorují se odstavce #U/#D/#L/#I. Slouží jako pracovní
soubor, může mít zápis v katalogu.
Na konci procedury se lokální soubor na disku automaticky
nezruší. To lze v případě potřeby zajistit explicitním
příkazem NázevSouboru.nrecs:=0
Při prvním otevření maže případný starý soubor se stejným
jménem - ale jen tehdy, pokud nesouhlasí s deklarací.

.........................................................................

Lokální proměnná procedury typu FILE - lokální soubor
────────────────────────────────────

██ VAR NázevSouboru : file [DeklaraceSouboru];
NázevSouboru : file.X [DeklaraceSouboru];
NázevSouboru : file.DBF [DeklaraceSouboru];

Na rozdíl od parametru typu file je deklarace struktury souboru přímou
součástí deklarace lokálního souboru.

■ NázevSouboru ... Identifikátor, nesmí se překrývat s žádným názvem
kapitoly typu F (na rozdíl od parametru typu file).
■ Lokální soubor může mít indexy nebo může být typu DBF.
■ DeklaraceSouboru Nesmí obsahovat odstavce #U, #D, #L, #I. Tedy je povo-
lena jen první část kapitoly F. Nepíše se jako textový
výraz, např. do apostrofů (na rozdíl od parametru-dyna-
micky deklarovaného lokálního souboru).



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

██ Povolená kombinace parametrů:
( Soubor : File; veta : RECORD of Soubor )

Umožňuje psaní obecných exit-procedur. Odkaz na soubor musí být vždy
za deklarací.

██ Obdobně: ( Soubor : File; indx : INDEX of Soubor )

██ P Ukazka VAR Pracovni : FILE [ Jmeno:A,20; Castka:F,3.0 ] ;
Export : FILE.DBF [ Ucet:A,6; Kc:F,6.2 ] ;
PracX : FILE.X [ Jmeno:A,20; #K @ ~Jmeno ] ;
Begin
....

Lokální sítě

LAN - LOKÁLNÍ SÍTĚ

LowCase

PRÁCE S DIAKRITIKOU A ABECEDOU
Převod malých písmen na velká a naopak.

██ syntaxe: UPCASE ( TextVýraz ) : string
LOWCASE( TextVýraz ) : string

■ Upcase převede všechna malá písmena ve výrazu na velká, lowcase
naopak velká na malá.
■ Kapitoly .... F,M,R,P,D
─────────────────────────────

Odstranění diakritiky z textu. Použití v kapitolách F,M,R,P,D.

██ syntaxe: NODIAKR( TextVýraz ) : string

Poznámka: Důležité je, že tyto funkce zohledňují instalované národní
prostředí ( kód Kamen. a Latin 2). Tzn. že pro některé znaky
s diakritikou jsou výsledky vizuálně shodné, ale interní kódy
převedených znaků se mohou lišit.

Lproc

Syntaxe PC FAND PROLOGu
Program se zapisuje do kapitoly typu "L" a lze jej vyvolat z
procedury pomocí příkazu lproc.

lproc(Název[,NázevPredikátu])

Název Název kapitoly "L".
NázevPredikátu Název prováděného predikátu. Implicitně "main".

Po provedení příkazu je nastavena hodnota proměnné edbreak:

0 úspěch
1 program skončil neúspěchem (fail)
2 skok na konec (error)

Zápis programu se podobá zápisu TURBO PROLOGu a má následující
strukturu dělenou do odstavců:

#DOMAINS Deklarace datových typů
#CONSTANTS Deklarace konstant
#DATABASE Deklarace databázových predikátů
#PREDICATES Deklarace programových predikátu
#CLAUSES Definice predikátů

Odstavce se mohou vyskytovat i několikrát v různém pořadí, ale
deklarace typu a predikátu musí být uvedena vždy před svým použitím.
Vyjímku tvoří pouze deklarace typu uvnitř jednoho odstavce DOMAINS.