Mellékletek

[Tartalomjegyzék] [Index]

1. Kereső nyelv

A TextLibben a keresőnyelven egy több utasításból álló programot (az ún. keresőkérdést) lehet megfogalmazni. A nyelvben a keresésen kívül vannak utasítások az indexes és mező alapján való projekció, halmazműveletek és halmaz szűkítés végrehajtására is. A keresőkérdések használata a rendszergazdai dokumentációban van részletesebben leírva, itt most a nyelv bemutatásával foglalkozunk.

A keresőnyelv egy vagy több utasításból áll. Az utasítások leírása itt következik, csak olyan szinten, hogy meg lehessen érteni.

Újak:

1.1. Keresőnyelv utasításai

Az utasítások leírásában a kulcsszavakat nagybetűvel jelöltük, a zárójelek közötti részek elhagyhatók, a ... pedig az ismételhetőséget jelenti. Minden kulcsszó használható rendes ékezetes (pl:SZŰKÍTS), rövid ékezetes (Pl:SZÜKITS) és ékezet nélküli (pl:SZUKITS) formában is. Ennek gyakorlati okokból lesz jelentősége, pl. a valamikori távoli elérésnél (Internet,BBS) nem biztos, hogy mindenki tud használni ékezetes betűket.

A legtöbb utasítás leírásában szerepel az


[sx =]

rész. Ez azt jelenti, hogy a képződő találati halmaznak nevet lehet adni, hogy egy másik utasításban hivatkozhassunk rá. A halmazok nevei s0, s1, s2 ... s9 lehetnek. Amelyik utasításnál nem adjuk meg, hogy mely halmazba kerüljön, ott az s0 töltődik ki. Ha nem adunk nevet a halmaznak, akkor az s0-ba kerül az eredmény. Ha egymás után két keresést is csinálunk, akkor persze a másodiknak már kell nevet adni.

Az utasításokban hivatkozhatunk a keresőkérdésben már definiált sx halmazokra, és a TextLibben korábban létrehozott találati halmazokra is. Az előbbiekre a nevükkel (pl: s1, s2) az utóbbiakra pedig az & jel után írt nevükkel (pl: &Modosult, &H3), vagy szerver-beli akár sorszámukkal (&1153).

Egy tárolásra szánt keresőkérdésben általában nem érdemes létező halmazokra hivatkozni, hiszen nem biztos, hogy ilyen nevű halmaz létezni fog a kérdés futtatásakor. (Azért persze vannak kivételek, pl. a Bevitt és a Módosult halmazok esetleg jól használhatók).

Az utasításokban azokat a helyeket, ahol mind a kétféle halmazra lehet hivatkozni, hx-szel jelöltük.

Az utasításokat pontosvesszővel, vagy soremeléssel kell elválasztani egymástól.

Az utasítások elé, közé megjegyzéseket rakhatunk a kapcsos zárójelek segítségével. Érdemes az első sorba egy sokat mondó megjegyzést írni, mert a keresés eredményeképpen előálló halmaz megjegyzésében ez fog látszani.

Ha ebbe a megjegyzésbe beírjuk a felhasznált paraméterek neveit, akkor a létrejövő halmaz megjegyzésében ezek helyett a megadott paraméter értékek fognak szerepelni. Lássunk erre egy példát:

A keresőkérdés:


{Az %1 szot tartalmazo konyvek}
 KERESS szavak=%1
 NEVEZD %1 "Cim szava:",szavak

A futtatáskor megadott paraméter érték: alma

A létrejövő halmaz megjegyzése: Az alma szot tartalmazo konyvek

1.2. Az utasítások ismertetése

KERESS - keresés


[sx =] KERESS [adatfile[ ÉS adatfile...]] [REKORDOKAT][,][AHOL] kifejezés

A legfontosabb utasítás, ezzel lehet az indexfile-okban keresni. A kifejezés több kisebb keresőkifejezés operátorokkal (ÉS,VAGY,DE NEM) való összekapcsolásából állhat. A keresőkifejezés pedig három részből áll: egy indexfile-névből, egyenlőség jelből, és egy keresendő kifejezésből. Ha a szövegben kulcsszó, vagy speciális karakter (pl: =, ?, &, --) szerepel, akkor " vagy ' közé kell tenni. A két jel közül az nem fordulhat elő a szövegben, amelyikkel a szöveget kezdtük.


Pl: Szöveg
   "Nem egy -- intervallum, csak szöveg"
   "Szöveg ' jellel"
   '"Idézet" van benne'
   "Van benne egy és kulcsszó"
   "Szóköz is" -- "van az intervallumban"
   "@ karakterrel kezdődő szöveg"

A szöveg lehet:
   - konkrét érték (idézőjellel, vagy anélkül)
   - csonkolt érték (az első és/vagy utolsó karaktere egy kérdőjel Pl: Arany?)
   - teljes intervallum (a -- az intervallum jele. Pl: Arany--Petőfi)
   - nyílt intervallum (Pl: Arany--, --Petőfi )
   - Dátum helyettesítő: MA(), HOLNAP(), TEGNAP(), MA(+4), MA(-3), MA(%1)

Speciális eset (1609 verzió): a kifejezés lehet egy rekord azonosító is.
Ekkor egy '@' jel után jön a rekord dref. Pl: @f70
Csak kapcsolódó és dref-es indexeknél használható:
    KERESS szerzo=@f70
    KERESS ejreszleg=@az12792.2

Néhány példa talán érthetőbbé teszi a dolgot:


KERESS Szerző=Arany?
 KERESS REKORDOKRA, AHOL Szerző=Arany? VAGY Közreműködő=Arany?
 KERESS audiókötet ÉS audiódok AHOL Szerző=Arany? DE NEM Szerző="Arany Dezső"
 KERESS Szerző=Arany--Petőfi? VAGY Cím="Merre menjek?"
 KERESS alkotó REKORDOKRA AHOL Alkotónév=Arany?
 KERESS kolcs REKORDOKRA AHOL kiadva=MA()
 KERESS kolcs REKORDOKRA AHOL kiadva=MA(-3)--TEGNAP()
 KERESS Szerző=@f70

Az indexfile-ok neveit (és azt, hogy az indexfile-ba milyen rekordok indexelődnek a DBSTRUCT programmal tudhatjuk meg. A TextLibben az indexfile-ok neveit technikai okokból ékezet nélkül használjuk, de a keresőnyelvben az ékezetes változat is használható. A SZERZO indexfile-ra tehát hivatkozhatunk 'Szerző' és 'Szerzö"-ként is.

Az adatfile-ok megadásához az adatfile-ok nevét is használhatjuk. Lehetőség van azonban arra is, hogy az 'Általános keresés' ablakból megismert nevekkel hivatkozzunk egyszerre több adatfile-ra. A 'könyv' például a kötet és a dok adatfile-okat jelenti. Az ily módon használható nevek tehát:

1.3. Halmaz műveletek


[sx =] hx
 [sx =] (dref=dref2,dref2,dref3,...)
 [sx =] halmazkif ÉS     halmazkif
 [sx =] halmazkif VAGY   halmazkif
 [sx =] halmazkif DE NEM halmazkif
 [sx =] ( halmazkif )

A halmazkif egy ugyanilyen módon előállított kifejezés lehet, természetesen zárójelek is használhatók.

s4 = s1 ÉS s2 DE NEM s3
s5 = (s1 VAGY s2) ÉS s3
s2 = &Modosult VAGY &Bevitt VAGY s1
s5 = (dref=b1,b2,b3,b4,b5)

VETITS - indexes projekció


[sx =] VETITS [adatfile[ ÉS adatfile...]] [REKORDOKRA] hx [REKORDOKBÓL]
      indexfile[ ÉS indexfile...] [INDEX] [SZERINT]

Ezzel az utasítással egy halmazból egy másik halmazt állíthatunk elő. A halmaz elemeit a megadott indexfile-okon (kapcsolódó vagy dref-es!) lekeresve kapjuk meg az újonnan létrejövő halmaz elemeit.

Ezzel az utasítással tudjuk például egy szerzőket tartalmazó indexfile-ból megkapni az ő könyveiket.


s1 = KERESS Alkotónév=Arany? VAGY Testületnév=Arany?
 VETITS s1 Szerző ÉS Közreműködő ÉS Kiadó SZERINT

 VETITS kötet REKORDOKRA &Modosult REKORDJAIT Szerző SZERINT

UTALJ - mezős projekció


[sx =] UTALJ [adatfile[ ÉS adatfile...]] [REKORDOKRA] hx rekordtípus
        [REKORDOKBÓL] mező[ ÉS mező...] [MEZÖ] [SZERINT]

A VETITS utasításhoz hasonlóan egy halmazból egy másik halmazt képez, de itt a halmaz-beli rekordok adott kapcsolódó mezőiből képződik az új halmaz.

A mezőt meg lehet adni a nevével és a sorszámával. Utóbbi esetben a # karakter jelzi, hogy mező sorszám következik. Ez a megoldás gyorsabb fordítást eredményez, és kevesebb memóriát igényel, mivel nem kell betölteni a mezőneveket (ami 30-40 Kbyte összesen).

Almezők kezelésének kétféle módja van. Ha csak az almező nevét adjuk meg, akkor a benne található összes pointeres mezőre történik a projekció. Ha pontosítani akarjuk a dolgot, akkor mező.mező alakban adhatjuk meg, hogy az almező mely mezőjére gondolunk. Mindkét felében használható a mezőnév és a sorszám is.

Az utasításnak meg kell adni a rekordtípust is, mert enélkül a mező megadása teljesen értelmetlen lenne. Ha olyan rekord is van a halmazban, ami nem ilyen típusú, akkor az figyelmen kívül marad.

Ezzel az utasítással lehet például egy könyveket tartalmazó halmaz szerzőit összegyűjteni egy másik halmazba.


s1 = KERESS Cím=Egri?
 UTALJ Alkotó REKORDOKRA s1 dokumentum REKORDOKBÓL Szerző MEZÖ SZERINT

 s1 = KERESS Cím=Egri?
 UTALJ s1 dokumentum #70

 s1 = KERESS Cím=Egri?
 UTALJ s1 dokumentum közreműködő.valaki

Megjegyzés:

VALOGASS - válogatás halmazból


[sx =] VALOGASS hx rekordtipus [REKORDOKBOL] mezőkifejezés
 [sx =] VALOGASS hx xadatfile ADATFAJL [REKORDOKBOL] mezőkifejezés

A SZUKITS utasításhoz hasonlóan egy halmazból egy másik halmazt képez, az eredeti halmazból csak azokat teszi bele az új halmazba, akik megfelelnek a feltételnek. A feltétel nem indexelt mezőkre is vonatkozhat, ezért van szükség erre az utasításra.

A mezőt meg lehet adni a nevével és a sorszámával. Utóbbi esetben a # karakter jelzi, hogy mező sorszám következik. Azért kell megadni a rekordtípust, mert enélkül a mező neve nem értelmezhető.

Ha olyan rekord is van a halmazban, ami nem a megadott rekordtípusú ill. nem a megadott adatfájlba tartozik, akkor az figyelmen kívül marad.

Figyelem: xadatfile csak valódi adatfájl név lehet (pl. dok, kötet), a máshol használható elvi adatfájlok (pl. könyv,cikk,időszaki) itt nem működnek.

A mezőkifejezés lehet


mezo URES
 mezo NEMURES
 mezo BENNE [van] halmaz [HALMAZBAN]
 mezo NINCS BENNE halmaz [HALMAZBAN]
 mezo=ertek      ( != < <= > >= )
 mezo~=ertek     ( ~!= )
 mezo#=ertek     ( #!= #< #<= #> #>= )
 ( mezőkifejezés VAGY mezőkifejezés)
 ( mezőkifejezés ÉS mezőkifejezés)
 ( mezőkifejezés DE NEM mezőkifejezés)

Nem minden mezőtípusra van minden relácio megengedve. Pl. dref mezőnél nincs értelme a < és > vizsgálatnak.

Ezzel az utasítással lehet például egy könyveket tartalmazó halmaz olyan rekordjait kigyűjteni, akiknek egy konkrét mezőjéről tudunk valamit.


s1 = KERESS Cím=Egri?

 { Alcim nelkuli dokumentumok } 
 VALOGASS s1 dokumentum REKORDOKBÓL ALCIM URES

 { A bevittek kozul valogassunk }
 VALOGASS &BEVITT dokumentum REKORDOKBÓL ALCIM URES

 { Speci esetben, ha a halmaz sorszamat tudjuk }
 VALOGASS &1154 dokumentum REKORDOKBÓL ALCIM URES

 { 'Egri' kezdetu alcimuek }
 VALOGASS s1 dokumentum ALCIM="Egri?"

 { 'Egri' kezdetu alcimuek }
 VALOGASS s1 dokumentum ALCIM="Egri?"

 { adott napon bevittek kigyujtese }
 VALOGASS s1 dokumentum BEVITEL=20100412

 { Biblia cimuek, amiknek van egysegesitett cimuk }
 VALOGASS (KERESS cim=biblia) dokumentum egyscim NEMURES

 { alkotok keresese, akiknek van foglakozasuk }
 VALOGASS (KERESS ALKOTONEV="?") alkoto foglalkozas NEMURES

 { s1 (kolcsonzesek) kozul azok, amiknek a kolcsonzoje benne }
 { van az s2 (olvasok) halmazban }
 VALOGASS s1 kolcs rekordokbol kolcsonzo benne van s2 halmazban

 { s1-bol a mai kolcsonzesek valogatasa }
 VALOGASS s1 kolcs kivive==MA()

 { s1-bol a 2016-os kolcsonzesek valogatasa - regexp-el }
 VALOGASS s1 kolcs kivive~='2016.*'

 { s1-bol a 2016-os kolcsonzesek valogatasa - intervallum }
 VALOGASS s1 kolcs kivive='20160101--20161231'

 { s1-bol kolcsonzesek valogatasa - intervallum }
 { Futtataskor megadhato parameter: 20160101--20161231 }
 VALOGASS s1 kolcs kivive=%1

Vagy ha több mezőt kell nézni egyszerre:


VALOGASS s1 dokumentum (ALCIM NEMURES vagy ALCIM="regény")

 VALOGASS s1 dokumentum (BEVITEL>20100101 es BEVITEL<20101231) 

A mezők ismétlődés számának vizsgálatára szolgálnal a '#' relációk. Ha pl. azokat az olvasókat kell lekeresni, akiknek egynél több email címük van:


valogass (keress olvnev=?) user email #> 1

Meg lehet adni almezőt és hivatkozó mezőt is. Utóbbinál meg kell adni a hivatkozott rekord tipusát is, mert a nélkül nincs értelme mezőnévnek.



    { dokumentumokbol: amiknek van sorozatleirasuk, es abban van sorozatiszam }
    VALOGASS s1 dokumentum sorozatleiras.sorozatiszam NEMURES

    { 563-as kezdetu vonalkodu peldanyokbol azok, amiknek a kotetenek }
    { a szerzoje az 1400-as evekben szuletett... }
    valogass (keress vonalkod=563?) peldany kotete.(dokumentum)szerzo.(alkoto)evek = "14?"

    { kolcsonzesekbol azok, amelyek kolcsonzojenek van email cime }
    valogass (keress kiadva=20120102) kolcs kolcsonzo.(user)email nemures

Szükség lehet arra is, hogy ha a mező megfelelés egy almezőben van, akkor csak az almező egy adott ismétlődése képezzen találatokat. Az adott ismétlődésig egyezést a csoportosító operátorral lehet leírni, azt pedig, hogy az adott mező része a csoportnak, .mező formában. A csoportosítás addig van érvényben amíg .mező módon van megadva a logikai operátor után a következő feltétel mezője.


{ Akik 2011-ben iratkoztak be valamelyik kistersegi intezmenybe }
 valogass (keress userazon=?) user [intkent].beiratkozasa >= 20110101 es .beiratkozasa <= 20111231

 { 2011-ben a térségi ellátó könyvtárba (ah1) beiratkozottak listája }
 valogass (keress userazon=?) user [intkent].beiratkozasa >= 20110101 es .beiratkozasa <= 20111231 es .intezmeny = ah1

Reguláris kifejezést is használhatunk, erre szolgál a ~= Ha pl. azokat az olvasókat kell lekeresni, akiknek három nevük van, akkor:


valogass (keress olvnev=?) user nev ~= '([a-z]+ ){2}([a-z]+)'

SZÜKITS - halmaz szűkítése


[sx =] SZÜKITS [adatfile[ ÉS adatfile...]] [REKORDOKRA] hx [REKORDOKBÓL]

Találati halmazt tudunk ennek az utasításnak a segítségével leszűkíteni oly módon, hogy csak a felsorolt adatfile-beli rekordok maradjanak benne. Ez gyakorlatilag megfelel a Halmaz adatai ablakban is végrehajtható halmaz szűkítésnek.


SZÜKITS dok ÉS kötet s1

 SZÜKITS testület ÉS rendezvény REKORDOKRA s1 REKORDOKBÓL

 SZUKITS alkoto REKORDOKRA &Modosult REKORDOKBOL

RENDEZD - halmaz rendezése


RENDEZD hx [HALMAZT] rendezes [SZERINT]

rendezes - a rendezési formátum neve (ez esetben " jelek közt), vagy dataref-je (ez esetben " nélkül). A rendezési formátum nevét lehet csonkolni, de ha így nem lesz egyértelmű, melyik rendezés kell, akkor a rendezés sikertelen lesz!

Rendezési formátum helyett lehet ún. formalista nevet adni, ez főleg profiknak kell, akik tudják mi is ez... #formalista alakban kell megadni.

A keresőkérdés bármely halmazát lehet ezzel helyben rendezni. Viszont a halmazműveletek jelenleg csak nem rendezett halmazon használhatóak, így praktikusan az eredményhalmaz rendezésére használható. Meg lehet adni a rendezési formátum nevét vagy dataref-jét.


RENDEZD (KERESS CIM=) ar22.2

 RENDEZD s2 HALMAZT "Dokumentumok cim es szerzo?" SZERINT

 rendezd &H2 halmazt ar22.2 szerint

 rendezd (valogass (keress cim=biblia) dokumentum alcim NEMURES) "dok cim?"

 rendezd (keress userazon=?) #default

1.4. Paraméterek

Nem lenne sok értelme keresőkérdéseket tárolni, ha nem lehetne ezeknek paramétereket megadni. Ennek használata igen egyszerű. A KERESS utasításban a keresett érték helyén, és a halmazokra vonatkozó utasításokban (UTALJ, VETITS, SZÜKITS) konkrét érték helyett a %1, %2, %3, ... %9-et használjuk (a DOS batch file-okhoz hasonlóan). Pl.


KERESS Szerző=%1 VAGY Közreműködő=%1

 KERESS Szavak=%1--%2

Megtehetjük azt is, hogy a paraméterként megadottat csonkolva keressük, ezt a következő módon kell megadni:

Pl: KERESS cim=%1?

A paraméter ezen kívül lehet balról, illetve balról és jobbról csonkolt is:

Pl: KERESS cim=?%1?
     KERESS cim=?%1

Megtehetjük azt is, hogy a paramétert dref-nek használjuk:

Pl: KERESS szerzo=@%1

Használhatjuk még a paramétert a halmaz megadásánál is, bár erre sokkal ritkábban lehet szükség (bár projokció definiálásánál épp ezt kell használni). Ilyenkor az &%i formula használatos, hiszen paraméterként csak korábban létrehozott halmazt tudunk átadni, ezekre pedig az '&' jellel tudunk hivatkozni.

Pl: SZUKITS Alkoto REKORDOKRA &%1 REKORDOKBOL

Az ilyen keresőkérdés futtatásakor a program megkérdezi a paraméterek értékeit, és csak azok megadása után indul a keresés. Ahhoz, hogy a felhasználó tudja, hogy melyik paraméterben mit is kell megadnia, a keresőkérdésben szerepelhetnek (nagyon ajánlott!) NEVEZD utasítások, amiknek alakja a következő:

NEVEZD %i paraméter neve[, indexfile]

Minden paraméterhez tartozhat egy NEVEZD utasítás. Ha az indexfile-t is megadjuk, akkor lehet expandot kérni a paraméter megadásakor. Amennyiben %i halmaz paraméter, akkor annak megadásakor halmazt kell választani.

A NEVEZD utasításokat célszerű a keresőkérdés végére írni, mert a képződő alálati halmaz megjegyzése a keresőkérdés eleje lesz.


Pl: NEVEZD %1 "Alkotó neve:",Alkotónév
    NEVEZD %2 "Könyv címe:",Cím
    NEVEZD %3 "Mi legyen a halmaz:"

1.5. Bonyolultabb példák

Keresőyelv példa

1.6. Példa

Keressük az adott című audiovizuális dokumentumokat


KERESS audiódok és audiókötet rekordokat, ahol cím=%1?
 NEVEZD %1 "Audióviz. cime:",cim

Keressük le egy folyóirat valamennyi számában megjelent összes cikket


{Folyoirat cikkei}
KERESS időszaki cím=%1
VETITS időszám REKODOKRA s0 REKODOKBOL időkötete INDEX SZERINT
UTALJ cikk REKORDOKRA s0 időszám REKODOKBOL analitika MEZO SZERINT
NEVEZD %1 Folyóirat:,cim

Keressük le a paraméterként megadott nevű alkotók könyveit. A szerző nevét csonkoltan megadottnak tételezzük fel.


KERESS alkotónév=%1?
VETITS kötet és dok rekordokra S0 rekordokból szerző index szerint
NEVEZD %1 "Alkotó neve:",Alkotónév

Az előző példa ellentéte: a paraméterként megadott című könyvek szerzőit gyűjtsük össze.


KERESS cim=%1?
 UTALJ rekordokra S0 dokumentum rekordokból Szerző mező szerint;
 NEVEZD %1 "Könyv címe:",cim

A következő példa szinte mindent felvonultat, amire a nyelv képes. A feladat az, hogy egy alkotó, mint szerző vagy közreműködő audiovizuális műveit találjuk meg. A szerzőnek több névváltozata is van, és mindegyik alapján minden művét meg kell találni.


{Alkotó (%1) audiovizuális műveinek keresése}
{Először meg kell keresni magát az alkotót}
s1 = KERESS alkotó REKORDOKRA, AHOL Alkotónév=%1?
{ Aztán előszedjük az egységesített nevét, (ha van) }
s2 = UTALJ alkotó REKORDOKRA s1 alkotó REKORDOKBÓL egysnev MEZÖ SZERINT
{ Ezt a kettőt rakjuk egybe, nem tudni melyik volt az egységes név}
s3 = s1 VAGY s2
{ Most vegyük elő a névváltozatokat. (Az s1,s2 már nem kell.) }
s4 = UTALJ alkotó REKORDOKRA s3 alkotó REKORDOKBÓL Névváltozat MEZÖ SZERINT
{ Ezt adjuk hozzá a egységesített névhez }
s5 = s3 VAGY s4
{ Ezeknek szedjük elő az audiovizuális műveit }
VETITS audiókötet és audiódok REKORDOKRA s5 szerző és közreműködő SZERINT
{ Ezzel előállt a kívánt halmaz}
{ Megadjuk, hogy a paraméter bekérésnél mit kell majd kiírni}
NEVEZD %1 "Alkotó neve:",Alkotónév

1.7. Hibalehetőségek

A keresőkérdés megfogalmazásakor elég sok hibalehetőség adódik. Itt most felsoroljuk ezeket, és tippeket adunk a kijavításukra is.

Szintaktikai hiba

Azt jelenti, hogy a keresőkérdés formailag nem felel meg a kívánalmaknak. Egy módon lehet megszüntetni, ki kell javítani.

Példa:

NEVEZZ s3 Akármi

A kérdés teljesen rossz, hiszen a NEVEZZ parancs után egy paraméternek (%i) kellene következnie.

Rossz adatfile

Egy olyan helyen, ahol adatfile nevét várja a program, nem megfelelő szöveget talált.

Példa:

KERESS sokat

A KERESS kulcsszó után csak ezek jöhetnek:

  1. adatfile
  2. REKORDOKRA kulcsszó
  3. ,
  4. AHOL kulcsszó
  5. index =

Rossz indexfile

Nem létező index nevet adott meg.

Példa:

  • keress valahol=valamit
  • vetits alkoto rekordokra s0 rekordokbol nemjoindex szerint
  • Rossz rekordtípus

    Nem létező rekordtípus nevet adott meg.

    Példa:

    utalj alkoto rekordokra s0 nemjorektipus szerzo mezo szerint

    Rossz mezőnév

    Az aktuális rekordtípusban nem létező mezőnevet adott meg.

    Példa:

    utalj alkoto rekordokra s0 dokumentum nemjomezo szerint

    Mezőnevek nincsenek betöltve

    A mezőneveket tartalmazó modul betöltése nem sikerült. Ezért aztán nem használhat mezőneveket a keresőkérdésben. Vagy megoldja, hogy sikerüljön betölteni a mezőneveket, vagy a mezőkre sorszámmal kell hivatkoznia.

    Példa:

    utalj alkotó rekordokra s0 dokumentum szerző mező szerint

    Rossz mező sorszám

    Az aktuális rekordtipusban érvénytelen mező sorszámot adott.

    Példa:

    utalj kötet rekordokra s0 darab #233 mező szerint

    Sx nem definiált

    Egy Sx halmaznak nem adott értéket, de fel akarja használni.

    Példa:

    szűkíts alkotó rekordokra s3 rekordokból

    Sx nem használt

    Egy Sx halmaznak adott értéket, de nem használta fel. Ez csak az S0 halmaz esetében nem gond, hiszen az lesz a keresés eredmény halmaza.

    Példa:

    s3 = keress cimszo=alma

    Sx elveszik

    Egy Sx halmaznak értéket adott, és mielőtt felhasználta volna, újra értéket akar adni neki. Igy az előző értéke elveszik.

    Pl: s3 = keress cimszo=alma? s3 = keress cimszo=korte

    Túl bonyolult keresőkérdés

    Egy olyan helyen, ahol adatfile-ok, indexfile-ok, mezők, stb listáját adhatja meg, túl sokat adott meg, vagy a keresés túl sok utasításból áll.

    Példa:

    keress alkotó és testület és dok és kötet és földrajz és eto és mű és rendezvény és diszköt és diszdok és audióköt és audióköt és kottadok és kottaköt rekordokra, ahol cimszo=alma?

    Paraméter nem folytonos

    A paramétereket nem folytonosan számozta be. Használja például a %3-at, de a %2 nem szerepel a kérdésben.

    Pl: keress cimszo=%2

    Nem létező halmaznév

    Ezt a hibaüzenetet a kérdés futtatásakor kaphatjuk, ha olyan halmaz nevét adtuk meg a kérdésben, vagy a paraméter értékeként, ami nem létezik.

    Példa:

    szukits alkoto rekordokra &nincs rekordokbol

    Rossz mezőtipus

    Az UTALJ utasításban csak olyan mezőt adhat meg, ami kapcsolódó mező, vagy almező.

    Példa:

    utalj alkoto rekordokra s0 dokumentum rekordokbol FOCIM mezo szerint

    Rossz paraméter szám

    Ha olyan keresőkérdést visz be, amit projekcióként akar használni, akkor a keresőkérdésnek egyetlen - halmaz - paramétere lehet csak!

    Példa:

    szukits kotet es dok rekordokra &%1 rekordokbol

    2. Output nyelv

    A TextLibben az output nyelv segítségével lehet leírni, hogy az egyes rekordokat milyen módon kell megjeleníteni (nyomtatón, file-ba, képernyőre). A rekord megjelenítésénél felhasználhatók konstans szövegek, a rekord mezői és almezői, a kapcsolódó mezők által hivatkozott (és az azok által hivatkozott...) rekordok mezői is. Egy könyv rekord megjelenítésénél tehát gond nélkül megjeleníthető a könyv szerzője, annak egységesített nevével, foglalkozásával, stb. együtt.

    Mivel a TextLib adatszerkezete meglehetősen bonyolult, ennek megjelenítésére egyszerű output nyelv nem lett volna alkalmas. Használatát csak programozási gyakorlattal (BASIC, C, Pascal stb.) rendelkezőknek javasoljuk.

    2.1. Nyelv leírása

    2.1.1. Megvalósítás

    A nyomtatási formátum definiálásánál jelenleg úgy kell eljárni, hogy a lap méretein (sorok száma, oszlopok száma, stb) kívül meg kell adni egy nyomtató modul (Pl: TH_CEDUL) nevét (és annak paramétereit) is.

    Az output nyelven megírt programot egy külön fordítóprogrammal lehet lefordítani, ami egy olyan TextLib modult készít, amit a nyomtatási formátum definiálásánál felhasználhatunk. (Lásd:itt)

    2.1.2. Alapok:

    Egy találati halmaz nyomtatása rekordoknként történik. A találati halmaz minden egyes rekordjára meghívódik az output nyelvben definiált PROG() nevű eljárás (ilyen nevű eljárást kötelező definiálni). Ez az eljárás kell, hogy elintézze ennek a rekordnak a megjelenítését. Le tudja kérdezni az aktuális rekord rekordtípusát, és ettől függően különbözőképpen tud nyomtatni.

    A rekord kapcsolódó mezőibe is átmehetünk a megfelelő eljárások segítségével (CALL, RCALL), azokból visszatérve az aktuális rekord ugyanaz, mint azok meghívása előtt volt. Ha egy könyv rekord az aktuális, akkor pl. a szerző foglalkozását nem lehet azonnal megjeleníteni, csak úgy, ha átmegyünk a szerző rekordba, ahol már használhatjuk a 'FOGLALKOZAS' nevű mezőt.

    Az output nyelven megírandó program tartalmazhat tetszőleges számú, a felhasználó által definiált eljárást (lásd: PROC), amik a program más részeiből hívhatók. Az eljárásoknak paramétereik is lehetnek, visszatérési értékük INT típusú.

    Definiálhat a felhasználó olyan eljárásokat is (lásd: REC_PROC), amik egy adott rekord- vagy filetípusba tartozó rekord kezelésére alkalmasak. (Az, hogy egy rekord milyen adatfileba tartozik automatikusan eldönti a típusát.) Csak ilyen eljárásokban lehet rekordok mezőire hivatkozni, mivel a mező neve a rekordtípus megadása nélkül értelmetlen.

    Lehetőség van egy BEFORE_PROG() és egy AFTER_PROG() eljárás definiálására is. Az első a nyomtatás előtt hívódik meg, ilyenkor például fejlécet lehet nyomtatni a rekordok elé. A második pedig az utolsó rekord nyomtatása után kerül meghívásra, itt lehet pl. valamiféle összegzést kinyomtatni.

    2.1.3. Típusok:

    Mint a legtöbb programnyelvben, az output nyelvben is többféle típusú értékkel, változóval dolgozhatunk:

    CHAR   '' jelek közti tetszőleges betű, ill. -128 - 127 közti egész szám 
    INT egész szám -32768 - 32767 között
    LONG egész szám -2.147.483.648 - 2.147.483.647 között
    DATE dátum
    STRING szöveg
    DREF TextLib rekord aznosító

    Vannak olyan típusok, amikkel saját magunk nem definiálhatunk változókat, de lehetnek beépített változók vagy beépített eljárások visszatérési értékének és paramétereinek típusai:

    FLD   mező sorszám; csak a kérdéses rekordnál érvényes sorszám, ill. mező konstans ('#mezőnév') lehet 
    FLDNO egész szám 1 - 255 között
    DFILE TextLib adatfile azonosító
    RECTYPE TextLib rekord típus

    A felsorolt típusok mindegyike helyett definálhatunk INT típust.

    2.1.4. Output nyelv elemei:

    megjegyzés

    Megjegyzésnek számít a /* és */ jelek közé tett tetszőleges szöveg, akár új sorok is, és a // jelek utáni szöveg, egészen a sor végéig.

    konstansok

    A program tartalmazhat szám konstansokat, amiket a szokott módon kell megadni, pl: 154.

    Egy mezősorszám konstans van, amit mindenhol használhatunk, ez a ##FOMEZO. Ez a rekordnak az első nem üres főmezőjét jelenti. Ha egy tetszőleges rekordnak a leginkább jellemző adatát akarjuk kiírni, nem kell minden rekordtípusra írni egy eljárást, egyszerűen kiírjuk a főmezőjét, és kész.

    A konstans szövegeket idézőjelek vagy aposztrófok közé kell tenni. Ha a szöveg tartalmazna idézőjelet, akkor tegyük aposztrófok közé, ha aposztrófot tartalmazna, akkor idézőjelek közé. Ha mindkettőt, akkor szedjük két részre a szöveget.

    Az alábbi lista felsoroja az összes speciális jelet és hatását a nyomtatásra:

    Jel   Jel hatása a nyomtatásra 
    \\ backslash, '\' karakter nyomtatás
    \n soremelés (mindenképp)
    \s soremelés (ha nem a Sor elején állunk)

    Beépített konstansok

    A programban az adatfile, rekordtípus, indexfile és mezőnevek, mint konstansok használhatók. Az adatfile neveket '_df', a rekordtípusokat '_rt', az indexfile neveket '_if' végződéssel kell ellátni, a mezőnevek pedig a '#' karakterrel kezdődnek. (Megjegyezzük, hogy mező megadásának csak olyan helyeken van értelme, ahol a rekordtípus már ismert, vagyis a REC_PROC típusú eljárásokban. Kivételt képeznek a rekordok rendszer mezői, mert ezeknek, a rekord típusától függetlenül ugyanaz a nevük).

    Példa:

    DOKUMENTUM_rt, ALKOTO_rt, KOTET_df, TESTULET_df, CIM_if, SZAVAK_if #EGYSNEVE, #SZERZO

    Beépített változók (nem módosíthatók)

    Változó   Jelentése 
    DREF CURRDREF az aktuális rekord TextLib azonosítója
    DFILE CURRDF az aktuális rekord TextLib adatfile azonosítója
    RECTYPE CURRRT az aktuális rekord TextLib azonosítója
    LONG INUM a halmaz éppen feldolgozás alatt álló elemének sorszáma
    LONG ISIZE a halmaz elemeinek száma
    INT RNO a feldolgozás alatt álló ismétlődő mező sorszáma
    INT ROW az éppen készülő sor sorszáma
    INT ROWNUM az egy lapra nyomtatható sorok száma (konstans)
    INT COL az éppen készülő sor oszlop-pozíciója
    INT COLNUM az egy lapra nyomtatható oszlopok száma (konstans)
    INT PAGENO az éppen készülő lap sorszáma
    INT PRINTED a legutoljára - PRINT(), RPRINT() fv-ekkel - nyomtatott mező ismétlődéseinek a száma
    STRING MODPAR a nyomtató modul által kapott paraméter. Ez az, amit a nyomtatási formátum definiálásakor a Paraméter mezőben megadtunk.

    Beépített változók (módosíthatók)

    INT MARGIN   Bal margó. Ennyi SPACE kerül a sorok elejére. Default értéke 0. 
    INT KILLDOT Kell-e figyelni, hogy egy pont kiírásakor ne írjuk ki, ha az előző karakter is ez volt. Pl: a '. -' kiírásánál szükség van rá. Célszerű BEFORE_PROG()-ban beállítani 1-re. Default értéke 0.
    INT CUTROW Le kell-e vágni a sorok végét. Ha 0-ra van állítva, akkor a sorba már ki nem férő szavak átkerülnek a következő sorba. Ha értéke 1, akkor a sorból kilógó szövegrészek elvesznek, egészen egy új sor kezdéséig. Akkor van szükség az utóbbi beállításra, ha pl. listát akarunk nyomtatni, ezzel lehet garantálni, hogy minden rekordról egyetlen sor készüljön.

    Felhasználó által definiált változók

    INT   név ,név...
    LONG név,név...;
    CHAR név,név...;
    DATE név,név...;
    STRING név,név...;
    DREF név,név...;

    A változók különböző típusú értékek tárolására szolgálnak. Egy programban gyakran van szükség arra, hogy egy értéket félretegyünk, hogy később felhasználhassuk ill. műveleteket, számításokat végezzünk vele. A felhasználó tesztszőleges számú és típusú változót definiálhat. A definícióban először meg kell adnia a típusát, majd a nevét, amivel jelöli. Ezzel a névvel lehet rá hivatkozni később. A név tetszőleges számú nem ékezetes betűből és '_' jelből állhat, de az első kivételével számok is lehetnek benne. Több azonos típusú változót úgy definiálhatunk, hogy a típus után vesszővel elválasztva felsoroljuk a neveiket. A változó definíciót egy ';' zárja le.

    Példa:

    STRING egyik, masik; INT mennyi;

    A globális változóknak (a függvényeken kívül definiált változóknak) egyből értéket is adhatunk.

    Példa:

    STRING egyik="EGYIK", masik="MÁSIK"; INT mennyi=0;

    2.1.5. utasítás

    2.1.5.1. értékadás

    Értéket természetesen változónak lehet adni. Az értékadás jobb oldalán egy kifejezést vagy egy eljárást adhatunk meg:


    {változó} = {kifejezés};
     {változó} = {eljárás}({paraméterek});
    

    Példa:

    tmp = 23 * 2 + 34;
    num = KisEljaras(23,"alma");

    2.1.5.2. if - elágazás


    IF ( feltétel ) { utasítások }; [ ELSE { utasítások } ]
    

    Ezzel az utasítással tehetünk feltételtől függő elágazásokat a programba. A feltétel olyan kifejezés, amiben használhatjuk a <, <=, >, >=, =, <> relációs jeleket az OR, AND, NOT logikai operátorokat (ekvivalens megfelelőjük a ||, &&, !) és a () zárójeleket. Az utasításokat - kivéve, ha csak egy utasításról van szó - \ és \ zárójelek közé kell zárni.


    Pl: IF ( RNO == 1 )  /* ha a rekord számláló 1 - az első előfordulás */
           CPRINT("Ez az első rekord.");
         else
           CPRINT("Ez nem az első rekod.");
    

    2.1.5.3. for - ciklus


    FOR ( értékadások; feltétel; értékadások ) { utasítások };
    

    Ciklus szervezéséhez használható utasítás. Az első értékadások szokás szerint kezdőérték beállítások, a második a ciklusváltozók állítása. A ciklus utasításait, ha nem csak egyetlen egyről van szó, \\ zárójelek közé kell zárni.


    Pl: /* Az összes közreműködő kinyomtatása */
         INT  Cikl;
    
         FOR ( Cikl=1; Cikl<=FNUM(#VALAKI) ; Cikl=Cikl+1 )
             KozremukodoNyomtatas( Cikl );
    

    2.2. Beépített függvények

    Az output nyelv elég sok beépített függvényt tartalmaz, amiknek a segítségével ki lehet nyomtatni az adatokat, pozícionálni lehet a lapon belül, mezők értékeit lehet vizsgálni, a dátumot lehet kezelni, stb. Lásd: outproc.txt

    2.3. Felhasználó eljárásai

    Az output nyelv lehetőséget ad arra, hogy eljárásokat definiáljunk. Kétféle eljárás létezik, egy teljesen általános (mint pl. a C függvényei), és a rekord kezelő eljárás. PROC és REC_PROC kulcsszavakkal különböztetjük meg őket. Az utóbbi annyival több, mint egy rendes eljárás, hogy meg kell adni azt is, hogy milyen rekordtípus kezelésére alkalmas. Csak egy ilyen eljárás belsejében lehet mezőnevekre hivatkozni, hiszen csak itt van ennek értelme.

    Az általános eljárás a következőképpen definiálható:


    [PROC]     név([argumentumok]) { utasítások }
    

    A rekord kezelő eljárás sem sokkal bonyolultabb:


    [REC_PROC] név([argumentumok]) RekordTípus   { utasítások } vagy
     [REC_PROC] név([argumentumok]) AdatfileTípus { utasítások }
    

    A fentiekből látható, hogy PROC-t és REC_PROC-t nem kötelező kirakni, mert ha megadunk rekordtípust vagy adatfilet, akkor az eljárás automatikusan REC_PROC típusú lesz, enélkül pedig PROC. Mindkét eljárásnak INT típusú visszatérési értéke van. REC_PROC eljárásnál ez automtikusan kitöltődik 1-re, ha az aktuális rekord típusa/adatfile-ja megegyezik az eljáráshoz megadottal; ellenkező esetben 0 lesz.

    Pl: REC_PROC Alkoto(int fogl_kell) ALKOTO_rt
           { PRINT("Alkotó:",#NEV,"");
             IF( fogl_kell )
                 PRINT(",foglalkozás:",#FOGLALKOZAS,"");
           }
    

    2.3.1.1. Felhasználó által definiálható rendszer eljárások

    Ezt a három kulcsszót az eljárás definiálásakor a PROC kulcsszó helyett használhatjuk, az eljárás definiálása pedig a már leírtak szerint történik.

    Pl: PROG main
          {
              IF( RT(CURRDREF) == DOKUMENTUM_rt )
                  KonyvNyomtat(0);
              ELSE
                  CPRINT("Más rekord típus\n");
          }
    
     Pl: BEFORE_PROG Elotte
          { CPRINT("\n******** És most jönnek a rekordok: ********\n");
          }
    

    Példa:

    Egy részletes magyarázatokkal ellátott példát nézzünk meg.

    2.4. Output programok lefordítása

    Az output nyelven megírt programból OUTCOMP.EXE fordító programmal tudunk TextLib modult készíteni. Ennek a felhasználásával, egy új nyomtatási formátumot készítve, tudunk az output programnak megfelelő formában nyomtatni.

    Fordítás:

    Az OUTCOMP.EXE program a \TEXTLIB\PRINTER\ könyvtárban található és ide ajánlott tenni a fordítandó output programmot is. Igy, ha a \TEXTLIB\PRINTER\ könyvtáraba belépünk, az 1. ábra szerinti egyszerű paranccsal készíthetjük el az új nyomtató modult (az ábrán 'output program' az éppen fordítandó output program file nevét helyettesíti.), de ennek feltétele, hogy az output programban ne legyen hiba. Az új modul a \TEXTLIB\TLM\ könyvtárba kerül.


    OUTCOMP {output program}
    
           1. ábra
    OUTCOMP.EXE egyszerű használata
    

    A 2. ábra teljes részletességgel összefoglalja OUTCOMP.EXE használati lehetőségeit.


    OUTCOMP[.EXE] {program} [{modul}] [/LIST]
                             [/P{modul könyvtár}] [/L{LOG file}]
    
          {program}          - output program file név.
                               Kiterjesztés: '.TOP',ha nincs megadva.
          {module}           - generált modul név. Ha nincs megadva, akkor
                               ua. mint {program}-ban a file név. Könyvtár:
                               ha nincs a névben, akkor /P szerinti.
                               Kiterjesztés: mindig '.TLM'. (Nem kötelező
                               megadni !)
          /LIST              - az output program listázása a képernyőre
                               fordítás közben.
          /P{modul könyvtár} - az adatbázis leírás könyvtára. Ha nincs
                               megadva, akkor \TEXTLIB\TLM\.
          /L{LOG file}       - A LOG file neve. Ha nincs megadva akkor
                               OUTCOMP.LOG. Kiterjesztés: '.LOG',ha
                               nincs megadva.
    
                    2. ábra
     OUTCOMP.EXE paraméterezésének összefoglalása
    

    Hibaüzenetek:

    A fordítás során OUTCOMP.EXE sorra értelmezi az output programban leírtakat és az ezzel kapcsolatos üzeneteket, valamint a fordítás eredményét nem csak a képernyőre írja ki, hanem az OUTPUT.LOG file-ba is rögzíti. Az üzenetek szerkezetét a 3. ábra mutatja.


    {üzenet típus} {file név} {sorszám} : {üzenet szöveg}
    
     {üzenet típus} - a üzenet fontosságát jellemző szöveg. 4 féle lehet:
                      "Megj." - Megjegyzés. Tájékoztató üzenet valamilyen
                                formai szabálytalanságról, eltérésről a
                                programban.
                      "Figy." - Figyelmeztető üzenet, valamilyen
                                lehetséges hibaforrásról a programban.
                      "Hiba " - Hibaüzenet, valamilyen hibáról a
                                programban.
                      "Krit." - Kritikus, súlyos hiba a programban ill. a
                                fordítás, modul készítés közben.
    
     {file név}     - a fordítandó output program neve
     {sorszám}      - output program azon sora, ahol hiba van ill.
                      azon sor, ahol éppen a fordításban a fordító hibát
                      fedezett fel.
     {üzenet szöveg}- az üzenet okát, a hibát leíró szöveg
    
              3. ábra
     A hibaüzenetek formátuma
    

    A megjegyzések és figyelmeztetések esetén még készül modul, de hiba vagy kritikus hiba ésetében már nem. Nem mindig megoldható, de törekedjünk, arra hogy a programunkban se megjegyzés, se figyelmeztetés ne legyen, hissz ezek lehetséges hibaforrásokra utalnak.

    A fordító, típus szerinti csoportosításban, a következő üzeneteket írhatja ki:

    Megjegyzések

    Figyelmeztetések

    Hibák

    Kritikus hibák

    2.5. Példa

    Az output vagy nyomtató nyelvet új nyomtatási formák létrehozására használhatjuk. Ennek a menete röviden a következő:

    1. A nyomtató nyelven megírjuk, hogyan szeretnénk nyomtatni.
    2. Egy fordító program segítségével - a neve OUTCOMP.EXE -egy nyomtató modult hozunk létre. Ennek feltétele, hogy az elkészített programunk hibátlan legyen. Ezt a fordító program ellenőrzi és csak ebben esetben hoz létre modult.
    3. A TextLibbbe belépve egy új nyomtatási formátumot kell létrehoznunk, amiben nyomtató modulként az általunk létrehozott modul nevét kell megadni. A saját magunk készítette modulok itt egyenértékűen használhatók a TextLibhez készített többi modullal, mint pl. TH_CEDUL.TLM, TH_LPRN.TLM stb.

    A példa program működése

    A példa egy olyan egyszerű programocska (a program file neve REKLISTA.TOP), amely listát készít az éppen nyomtatott halmaz rekordjairól. Az 1. ábra egy példa, hogy néz ki a nyomtatás ezzel a programmal.

    Listás halmaz nyomtatás:


    1. a7        : A magyar mezőgazdasági szakirodalom könyvészete
    2. a9        : A magyar bibliográfiák bibliográfiája
    3. a14       : A Veszprém megyei múzeumok közleményei
    4. b15       : A szúnyog
    5. b17       : A politikai gazdaságtan bírálata
    6. b21       : A szórakoztató biblia
    7. b23       : Aegidius útra kelése és más történetek
    8. b24       : A szerszámgépek karbantartása és jítása
    9. b32       : A kötéltáncos
    10. b33       : Az Újpesti Munkásotthon története
    11. b34       : A Széchenyi tér regénye
    12. d21       : Az Ókortudományi Társaság kiadványai
         A halmazban 12 db rekord volt.
    
        1. ábra
        Példa nyomtatás REKLISTA.TOP programmal
    

    A nyomtatás egy 12 elemű halmazból készült. Az első sor a fejléc majd ezután jönnek rekordonként az adatok: a rekord sorszáma a halmazban, adatbázis azonosítója, majd a főmezejének tartalma. A főmező a rekordokban az a mező, amely önmagában leginkább jellemzi a rekordot. Ebben a példában a halmaz könyv és sorozat rekordokat tartalmaz. Ezekben a főmező a főcím.

    A program érdemi része a 2. ábrán látható. Ez érzékelteti a program röviségét. (A sorok elején a szám és ':' nem része a programnak, csak hivatkozási okok miatt került oda).


    7: INT  SZAMLALO = 0;
    10: BEFORE_PROG Fejlec()
    11: {
    13:  CPRINT( "Listás halmaz nyomtatás:\n" );
    17: }
    19: PROG Rekord_nyomtatas()
    20: {
    21:  SZAMLALO = SZAMLALO+1;
    22:  NPRINT( "",SZAMLALO,4,". " );
    24:  DREFPRINT( CURRDREF );
    26:  TABTO( 15 );
    29:  PRINT( ": ",##FOMEZO,"\n" );
    34: }
    36: AFTER_PROG Lablec()
    37: {
    41:  NPRINT( "A halmazban ",SZAMLALO,0," db rekord volt.\n" );
    42: }
    
        2. ábra
        REKLISTA.TOP program (program sorok)
    

    A 3. ábrán ugyanez a program van, de ki van egészítve a működés megértését segítő, magyarázó megjegyzésekkel. Általában ajánlott programjainkat ilyenekkel ellátni. Megjegyzéseket kétféle módon tehetünk a programba: '/*' és '*/' jelek közé, akár több sorban (pl. 1-5. sorig) és '//' jel után a sor végéig (pl. 7,8,10 stb. sorok vége).


    1: /***  REKLISTA.TOP ***************************************************
    2: ****                                                              ****
    3: **** Találati halmaz listás nyomtatása - egy rekord egy sor       ****
    4: ****                                                              ****
    5: **********************************************************************/
    6:
    7: INT  SZAMLALO = 0;             // változó a rekordok számlálására
    8:                                // kezdőértéke : 0; típus : egész
    9:
    10: BEFORE_PROG Fejlec()           // A fejlécet nyomtató eljárás
    11: {
    12:                                // szöveg nyomtatása a lista tetejére
    13:  CPRINT( "Listás halmaz nyomtatás:\n" );
    14:                                // '\n' karakterpár = soremelés: hogy az
    15:                                // első rekord nyomtyatása is a sor
    16:                                // elején kezdődjön
    17: }
    18:
    19: PROG Rekord_nyomtatas()        // A rekordokat nyomtató eljárás
    20: {
    21:  SZAMLALO = SZAMLALO+1;        // a rekord számláló növelése 1-gyel
    22:  NPRINT( "",SZAMLALO,4,". " ); // a sorszám kinyomtatása: 4 betű
    23:                                // szélességben és utána '.' és ' '
    24:  DREFPRINT( CURRDREF );        // az éppen nyomtatott rekord
    25:                                // azonosítójának a nyomtatása
    26:  TABTO( 15 );                  // pozicionálás a 15. oszlopig,
    27:                                // hogy a kiírások egymás alatt,
    28:                                // rendezetten kezdődjenek
    29:  PRINT( ": ",##FOMEZO,"\n" );  // a rekord főmezejének, a rekordot
    30:                                // leginkább jellemző mező
    31:                                // tartalmának kinyomtatása
    32:                                // '\n' = soremelés: hogy a következő
    33:                                // kiírás új sorba kerüljön
    34: }
    35:
    36: AFTER_PROG Lablec()            // A lista zárósorát nyomtató eljárás
    37: {
    38:     // a lista végén a halmazban lévő rekordok számának kiírása:
    39:     //   darabszám előtti szöveg; a rekordok száma (0, azaz) a szám
    40:     //   méretének megfelelő hosszban; számláló utáni szöveg
    41:  NPRINT( "A halmazban ",SZAMLALO,0," db rekord volt.\n" );
    42: }
    
        3. ábra
        REKLISTA.TOP program
    

    A program a példa listának (1. ábra) megfelelően 3 fő részből áll. Ezek mindegyike egy eljárás. Eljáráson, vagy más szóval függvényen, olyan formailag is elkülönített programrészt értünk, amely a programon belül egy-egy (nyomtatási) részfeladatot old meg. A Fejléc nevű eljárás (10-17. sor) nyomtatja az első, fejléc sort, a Lábléc nevű eljárás (36-42. sor) nyomtatja az utolsó sort. A Rekord_nyomtatás eljárás (19-34. sor) feladata a rekodokról kiírni az egysoros információt. Míg az előző két eljárás a nyomtatás során csak egyszer hajtódik végre, addig ez többször, a találati halmaz minden egyes rekordjánál külön-külön, a rekordok halmaz beli sorrendje szerint. Az eljárások kezdő sorában a BEFORE_PROG, AFTER_PROG, PROG kulcsszavak jelölik azt a tulajdonságot, hogy a program elején, végén, vagy rekordonként végrehajtandó eljárásról van-e szó. Az ezeket követő eljárás név tetszőleges lehet. A kulcsszavak közül egyedül a PROG kötelező. A nyomtató programban mindig kell legyen egy olyan eljárás, ami ezzel jelzett.

    Nézzük meg egy kicsit részletesebben a Fejlec eljárást (4. ábra). Egy eljárás leírása mindig a nevének és egyéb tulajdonságainak megadásával kezdődik (10. sor, Fejléc és BEFORE_PROG ), majd egy kapcsos zárójel pár ( '' és '' ) között a végrehajtó rész következik. A Fejléc függvényben ez csak egy rendszer eljárás hívás. Rendszer eljárás alatt azokat az eljárásokat értjük, amelyeket a rendszer (a TextLib) készen nyújt számunkra a programunk megírásához. Több ilyen eljárás létezik, itt csak azokat érintjük, amiket REKLISTA.TOP használ. A 13. sorban a CPRINT nevű eljárás írja ki a fejléc szöveget. Ez a rendszer függvény szövegek, szöveg részletek nyomtatására szolgál. Általában egy eljárásnak lehetnek paraméteri, azaz olyan bemenő adatai, amelyek befolyásolják, sőt alapvetően meghatározzák a működését. A paraméterek száma (ami esetleg 0 is lehet) és fajtája eljárásonként kötött. A paramétereket a függvény nevét követő kerek zárójelben ( '(' és ')' között ), vesszővel ( ',' ) elválasztva kell megadni. A CPRINT függvénynek egy paramétere van: az a szöveg, amit ki kell nyomtatni. Az eljárás közvetett módon, a szöveg végén lévő '\n' karakterpár segítségével, sort is emel, hogy a következő nyomtatás új sorban kezdődjön. Általános tulajdosága ennek a jelnek, hogy minden olyan helyen, ahova ezt írjuk, nem '\n' nyomtatódik ki, hanem egy új sor kezdődik a nyomtatásban.


    10: BEFORE_PROG Fejlec()           // A fejlécet nyomtató eljárás
    11: {
    12:                                // szöveg nyomtatása a lista tetejére
    13:  CPRINT( "Listás halmaz nyomtatás:\n" );
    14:                                // '\n' karakterpár = soremelés: hogy az
    15:                                // első rekord nyomtyatása is a sor
    16:                                // elején kezdődjön
    17: }
    
       4. ábra
       REKLISTA.TOP program - 'Fejlec' eljárás
    

    A Rekord_nyomtatas eljárás a 19-34. sorig tart (5. ábra). Elsőként SZAMLALO-nak (21. sor), annak a számnak a növelése történik eggyel, amely a halmaz rekordjait számolja. A program 7. sora írja le, hogy mit is kell értenünk pontosan SZAMLALO néven: egy egész szám, 0 alapértékkel. A 22. sorban történik a SZAMLALO értékének kinyomtatása a sorok elejére az NPRINT rendszer eljárás segítségével. A függvény paraméteri sorrendben: egy, a szám elé nyomtatandó (macskakörmök közötti) szöveg - "" ('üres' szöveg), mivel nem kell semmit nyomtatni; a nyomtatandó szám - SZAMLALO; mezőszélesség, amelyben a számot balra rendezve nyomtatni kell - 4; a szám után nyomtatandó szöveg - ". ". Ezután jön a rekord azonosítójának nyomtatása (24. sor) a DREFPRINT fügvénnyel. Az eljárás paramétere CURRDREF, az aktuális (éppen nyomtatott) találati halmaz rekord azonosítója. A 26. sorban a TABTO függvénnyel pozícionálás történik a 15 oszlopra ( az oszlop sorszáma a függvény paramétere ), hogy a rekord adatok kiírása egymás alá rendezve jelenjen meg a listában. A PRINT eljárással a találati halmazz rekord egy tetszőleges mezejét lehet kiirattatni. Ez történik a 29. sorban. Az első paraméter a mező elé kinyomtatandó szöveg - ez most ": " elválasztó jelek; a következő a mező sorszáma vagy neve - ##FOMEZO; és az utolsó a mező után kiirandó szöveg - ebben az esetben ez "\n", tehát új sorban folytatódik a nyomtatás majd. A ##FOMEZO egy olyan speciális mezőnév, amely a rekord típusától függetlenül, a főmezőt jelenti, vagyis a rekordot leginkább jellemző mezőt. Pl. a DOKUMENTUM típusú rekordokban a főmező a FOCIM mező (könyv legjellemzőbb adata a címe), a PELDANY-ban a VONALKOD (a könyv példánynak a példány vonalkódja), az ALKOTO-ban a NEV (a szerzőnek a neve) stb. (A rekordok és mezőik neveiről a DBSTRUCT.EXE programmal kaphatunk felvilágosítást.)


    19: PROG Rekord_nyomtatas()        // A rekordokat nyomtató eljárás
    20: {
    21:  SZAMLALO = SZAMLALO+1;        // a rekord számláló növelése 1-gyel
    22:  NPRINT( "",SZAMLALO,4,". " ); // a sorszám kinyomtatása: 4 betű
    23:                                // szélességben és utána '.' és ' '
    24:  DREFPRINT( CURRDREF );        // az éppen nyomtatott rekord
    25:                                // azonosítójának a nyomtatása
    26:  TABTO( 15 );                  // pozicionálás a 15. oszlopig,
    27:                                // hogy a kiírások egymás alatt,
    28:                                // rendezetten kezdődjenek
    29:  PRINT( ": ",##FOMEZO,"\n" );  // a rekord főmezejének, a rekordot
    30:                                // leginkább jellemző mező
    31:                                // tartalmának kinyomtatása
    32:                                // '\n' = soremelés: hogy a következő
    33:                                // kiírás új sorba kerüljön
    34: }
    
        5. ábra
        REKLISTA.TOP program - 'Rekord_nyomtatas' eljárás
    

    A Lablec eljárás egyetlen NPRINT eljárás segítségével oldja meg a lista zárósórának kiírását (6. ábra), a SZAMLALO szövegbe ágyazott kinyomtatását. A 0 mező szélesség megadása természetesen értelmetlen, az a jelentése, hogy a számot olyan szélességben kell majd nyomtatni ahány számjegyből áll éppen.


    36: AFTER_PROG Lablec()            // A lista zárósorát nyomtató eljárás
    37: {
    38:     // a lista végén a halmazban lévő rekordok számának kiírása:
    39:     //   darabszám előtti szöveg; a rekordok száma (0, azaz) a szám
    40:     //   méretének megfelelő hosszban; számláló utáni szöveg
    41:  NPRINT( "A halmazban ",SZAMLALO,0," db rekord volt.\n" );
    42: }
    
        6. ábra
        REKLISTA.TOP program - 'Fejlec' eljárás
    

    A REKLISTA.TOP program a \TEXTLIB\PRINTER\ könyvtárban található. További példák találhatók ebben a könyvtárban a nyomtató nyelvi programozásra: THULPRN.TOP (,a TH_LPRN.TLM modul nyomtató nyelven meírt változata) - a REKLISTA.TOP-nál árnyaltabb, elsősorban könyv és példány rekordok nyomtatására szolgáló, lista szerű nyomtatási forma; CEDULA.TOP - egy egyszerűsített cédula formátum.

    2.6. A nyomtató modul elkészítése

    A REKLISTA.TOP programból az OUTCOMP.EXE fordító programmal készíthetünk modult. Lépjünk be a \TEXTLIB\PRINTER\ könyvtárba (REKLISTA.TOP és OUTCOMP.EXE is itt található) és indítsuk el a fordító programot a 7. ábra szerint.


    C:\>CD \TEXTLIB\PRINTER
    C:\TEXTLIB\PRINTER>OUTCOMP REKLISTA.TOP
    
    7. ábra
    REKLISTA.TOP lefordítása
    

    Az indítás után a képernyőn a 8. ábrát látjuk majd. Az első sorban a fordító önmagáról ír ki információt, a másodikban a fordított program nevét, majd a fordítás befejeztét jelzi és végül a létrehozott modul nevét a könyvtár névvel együtt. A REKLISTA.TOP programból tehát REKLISTA.TLM nevű modul készül, és ugyanoda kerül, ahol a többi textlib modul van, a \TEXTLIB\TLM\ könyvtárba.


    OUTCOMP  V1.0  - TextLib nyomtató nyelvi fordító       InfoKer 1997
     reklista.out:
     Fordítás rendben !
     Generált module: \TEXTLIB\TLM\reklista.TLM
    
     8. ábra
     OUTCOMP.EXE kiírásai REKLISTA.TOP fordítása közben
    

    Megjegyzendő, hogy általában, amikor nyomtató programot írunk, az első fordításkor még hibák szoktak lenni a programban. Ilyen esetben a programnév után következnek a hibákat felsorló üzenetek és a 8. ábra utolsó két sora elmarad. (Hibás programból a fordító nem készít modult!) OUTCOMP.EXE a képernyőre kiírt szövegeket az aktuális könyvtárban egy OUTCOMP.LOG file-ban is rögzíti (a file végére), így a fordítás eredményét később is meg tudjuk nézni.

    2.7. Nyomtatási formátum készítése

    Lépjünk be a TextLibbe rendszergazdaként és a 'Rendszer/ rendszerelemek Bevitele/Nyomtatási formátum' menüpontokon keresztül hívjuk elő a Nyomtatási formátum beviteli űrlapját (9. ábra). Két mezőt kell kitöltenünk: 'Neve', 'Modul'. Az ábra szerinti kitöltéssel a formátum tárolása után a TextLibben bárki elérheti az új nyomtatási módot 'Listás rekord nyomtatás' néven.

    1. ábra: Nyomtatási formátum
    kep

    3. Statisztika

    3.1. Mező definálás

    3.1.1. Mező definíció

    A Mező specifikációt egyelőre még csak a statisztikai szempontok megadásánál használjuk, de elképzelhető, hogy máshol is jól fog még jönni.

    Ez igazából egy olyan lehetőség, ami egy rekord egy mezőjének értékét adja meg. Megadható több mező is, hogy ha az egyik nincs kitöltve, akkor a másik értékét használja a program (pl: FOCIM, PARHCADAT, CIMADAT). A mező azonban nem kell, hogy a rekord része legyen, lehet egy hivatkozott rekordban levő mező is (pl: példány kötetének ETO jelzete).

    A mező definiálása a következő adatlapon történik (ami a statisztika szempont definiálásából érhető el):

    A Neve mezőben egy az asszociált mezőre jellemző nevet kell megadni (a nyelv szerinti statisztikánál pl. célszerűen "Nyelv"-et). A Mező mezőben azokat a mezősorszámokat (valódi mezősorszámok, a DBSTRUCT programból deríthetők ki) kell megadni, amelyek bármelyike megfelel a szöveges Neve mezőben megadott értelmezésnek és amelyek közül az első kitöltött mezőt veszi majd a kiértékeléskor alapul a program.

    Példánkban a nyelv mező nem a példány rekordban, hanem a példány által hivatkozott kötet rekordban van, tehát ennek a hivatkozó mezőnek a sorszámát (63) kell egyedüli lehetőségként megadni (a hivatkozott kötet rekordnál viszont maga a nyelv mező, de - mivel a többkötetes dokumentumoknál esetleg csak a közös adatnál van megadva a nyelv - a közös adatra hivatkozó mező is, tehát két mező adandó meg).

    A Mező-ben zérus érték is megadható; ez a kérdéses rekord adatfile-ját jelenti. Erre a lehetőségre pélául a dokumentumtípus szerinti osztályozásnál van szükség.

    Ha a mezők bármelyike másik rekordra hivatkozó mező, a Hivatkozott mező aktív; ha itt beszúrás-t választunk, a hivatkozott rekord megfelelő mezőjét adhatjuk meg a fentivel azonos formátumban. Ha a hivatkozás többféle rekordra lehetséges, a Hivatkozott mezőben ennek megfelelő számú előfordulás adható meg (a hivatkozási helyeket a hivatkozott rekord adatfile-jának vagy rekordtípusának megadásával azonosíthatjuk). A hivatkozott rekord megadott mezője szintén lehet hivatkozó mező, tehát tetszőleges, a példány rekordból akárhány hivatkozáson keresztül elérhető adatbázismező megadható a szemponthoz asszociált mezőként.

    Ha bármely szinten egy hivatkozó mező esetén nem töltjük ki a Hivatkozott mezőt, a hivatkozott rekord ún. főmezőjének (általában a rekordok legjellemzőbb mezőjének) értéke lesz a kérdéses szempont szerinti osztályozásnál a besorolás alapja. A szállító szerinti statisztikánál pl. nem kell megadni a Hivatkozott mezőt, hiszen a hivatkozott cég-rekordnak főmezője a cég neve, ami éppen megfelel. A nyelv szerinti statisztikánál viszont két előfordulást is fel kell vennünk a Hivatkozott mezőbe annak megfelelően, hogy a példány kötete vagy kötet-rekordra vagy - az időszaki kiadványoknál - időszaki szám rekordra hivatkozhat és ezek egyikének sem főmezője maga a nyelv, tehát a főmezős feloldás nem megfelelő.

    A Max hossz mezőben azt adhatjuk meg, hogy milyen hosszban vegye figyelembe a program a kapott értéket. Pl: kiadási évnél ezt célszerű 4-re venni, hogy az "1979-" ne külön érték legyen, hanem az "1979"-cel megegyező.

    A Határoló mezőben megadhatunk olyan karaktereket, amiket ki kell hagyni. Az előbb említett problémát pl. úgy is meg lehet oldani, hogy a "-" jelet határoló jelnek vesszük fel.

    3.1.2. Értékkészlet

    Ha a statisztika szempont definiálásánál az Értékek Száma ismert, a kérdéses szempont esetén értelmezett éRtékkészlet mező megadására az alábbi formátum szolgál:

    Az Érték Neve mezőben a kérdéses szempont egy értékének az azonosítóját kell megadni (az itt megadott érték fog szerepelni a kérdéses szempont szerinti statisztika fejlécében, tehát pl. ha a dokumentumtípus szempont egyes értékei: könyv, időszaki, hanghordozó, stb.

    A Kiértékelési rangszám mezőt akkor kell kitölteni, ha nem mindegy, hogy az értékkészlet elemeit milyen sorrendben próbálja "illeszteni" kiértékeléskor a program. Azoknak az elemeknek a kiértékelése történik meg előbb, amelyeknél itt megadunk egy számot, méghozzá a megadott számok emelkedő sorrendjében, és csak ez után kerül sor az értékkészlet egyéb elemeinek kiértékelésére (ezek sorrendje megegyezik a felsorolás sorrendjével). Használatára pl. a tartalom fő jellege szempontnál kerülhet sor, ugyanis előbb kell eldönteni, hogy gyermekirodalom-e valami és csak utána azt, hogy szakirodalom (ami egyiknek sem minősül, az a szépirodalom). Általánosságban tehát olyankor kell ezt a mezőt megadni, amikor a szempontok egyes értékeinek megadási sorrendje és a szükséges kiértékelési sorrend eltér. Elvben felmerül, hogy a megadás megfelelő sorrendjével el lehetne érni a megfelelő kiértékelési sorrendet, azonban a megadási sorrend az eredménytáblázat oszlopainak sorrendje is egyben; ha ez valamilyen oknál fogva - akár csak a megszokás okán - kötött, a kiértékelési rangszámot kell használni.

    Az Értéke mezőt akkor kell megadni, ha a kérdéses értékkészlet-elem nem bontandó tovább (pl. a tartalom fő jellege, mint szempont szerinti osztályozás "gyermekirodalom" értéke nem bontandó tovább, tehát az ÉRtéke mező megadása révén kell rendelkezni arról, hogy milyen mező milyen értékei esetén minősül egy dokumentum gyermekirodalomnak.

    Az ÉRtéke mező ismételhető; az ismétlődések egymással VAGY kapcsolatban értelmezendők. Az ismétlődések mindegyike mezőérték párokat definiál (lásd alább). Az értékkészlet kérdéses eleme akkor "illeszthető" egy példány-rekordra, ha valamelyik mező a hozzá tartozó értéket tartalmazza.

    Például gyermekirodalomnak akkor minősül egy dokumentum, ha az ETO főtáblázati eleme 087.5 vagy formai alosztása 02.053.2 illetve 02.053.6; ennek megfelelően annál az értékkészlet-elemnél, ahol a Neve mezőben "Gyermekirodalom" szerepel, az ÉRtéke mezőnek két előfordulása lesz, melyek közül az elsőnél a mező az ETO főtáblázati elemét, az érték a 087.5 értéket, míg a másodiknál a mező az ETO formai alosztását, az érték két ismétlődést, a 02.053.2 és 02.053.6 értékeket tartalmazza.

    Ha az ÉRtéke mezőt megadjuk, a csak a hierarchikus tovább osztályozásnál értelmezett ÉrtékKészlet és ÖSszegzés mezők láthatatlanná válnak.

    Ha szükség van hierarchikus tovább-osztályozásra, az ÉrtékKészlet mezőben lehet megadni a további bontást (ugyanilyen formátum alkalmazásával). Ilyen eset fordul elő a tartalom fő jellege szempont szerinti osztályozásnál: az első szinten az értékkészletnek 3 eleme van (szakirodalom, szépirodalom és gyermekirodalom, melyek közül a szakirodalom tovább bomlik szakjelzet szerint különböző szakterületekre). Arról, hogy az alárendelt osztályozás szerinti statisztikai értékek "Összesen"-jét kell-e képezni és nyomtatni a statisztika készítésekor, az ÖSszegzés mező megfelelő beállításával lehet rendelkezni.

    Az ÉRtéke mező megadása az alábi formátum alkalmazásával történik:

    A Mező specifikációja a szempont definiálásánál már ismertetett módon impleir.txt történik.

    Az ÉRték (ismételhető) mezőben a Mező-ben specifikált mező elfogadható értékeit kell megadni. A megadásnál használható a csonkolás és az intervallum jele.

    4. TextLib Export / import

    4.1. Csereállomány szerkezete

    csere.txt

    4.2. Impleir.txt

    impleir.txt

    Páldák: imppld.txt

    4.3. expleir.txt

    expleir.txt

    Páldák: exppld.txt

    4.4. veszlog.txt

    veszlog.txt

    4.5. kuldlog.txt

    kuldlog.txt

    5. Hibaüzenetek

    5.1. DBCHK hibaüzenetek

    A program igen sokféle hibát tud jelezni. A talált hibákat a DBCHK.LOG állományba írja. A hibakódok jelentései (a sor elején * jelzi, ha a //javit opcióval a hiba javítható):

    Hibaüzenet   Jelentése 
    95.01.01 előtti dátum dátum mezőben túl kis érték
    cimek a FOCIM, PARHCADAT, CIMADAT ellentmondásban
    dupla egy almező duplán szerepel a rekordban
    egész érték -1 Szám típusú mezőben -1 érték szerepel
    hivatkozás rossz érték a hivatkozó mezőben
    közöse kötet közös adata nincs kitöltve, pedig van részjelzése
    mai napnál újabb Dátum mezőben mainál nagyobb dátum
    nincs címe Nincs címe
    nincs kötete példánynak nincs kitöltve a KOTETE mezője
    pld. kötete nem vissza példány kötete nem mutat vissza
    dok. kötete nem vissza közös adat kötete nem mutat vissza
    részjel kötet RESZJELZES-e nincs kitöltve, pedig van közös adata
    rossz rekord sérült rekord szerkezet
    SPACE kezdet String mező SPACE-szel kezdődik
    SPACE vég String mező SPACE-szel végződik
    több SPACE String mezőben több SPACE egymás után
    törölt rekord Kapcsolódó mezőben nem létező rekordra hivatkozás
    üres mező Ismételhető mezőben üres mezőelőfordulás
    üres rek A rekordnak minden (nem rendszer) mezője üres
    üres pld A példánynak minden fontos mezője üres. Ezek: vonalkod, leltariszam, kotete, rakt.jelzet, allomany, raktar
    újdonság A kötet nem került be az újdonságok közé
    kölcs (10) KOLCS rekordban a VISSZAhozás dátuma és KOV_FELSZOLITAS is ki van töltve
    kölcs (11) KOLCS rekordban a VISSZAhozás dátuma és a KOLCSONZO is ki van töltve
    kölcs (12) KOLCS rekordban a VISSZAhozás dátuma és a KOLCSONOZVE is ki van töltve
    kölcs (21) KOLCS rekordban a KIVIVE (kölcsönzés dátuma) mező üres
    kölcs (22) KOLCS rekordban a HATARIDO mező üres
    kölcs (23) KOLCS rekordban a KIADTA mező üres
    kölcs (24) KOLCS rekordban a KOLCSONZOTT mező üres
    kölcs (31) KOLCS rekordban van KOLCSONZO, és KOLCSONZO != KOLCSONOZTE
    kölcs (32) KOLCS rekordban van KOLCSONOZVE kitöltött és KOLCSONOZVE != KOLCSONOZOTT
    kölcs (41) "élő" KOLCS rekordban (VISSZAhozás dátuma üres) a KOLCSONZO (ennek hiányában a KOLCSONOZTE) mező által mutatott olvasó rekordjában nincs bejegyezve a KOLCS rekord, pedig KOLCSONOZVE létező példányra mutat, ugyanakkor lezárt késés- típusú tartozás sem tartozik KOLCS rekordhoz (azaz valószínű hogy még kölcsönözve van, csak az olvasónál nincs bejegyezve)
    kölcs (42) "élő" KOLCS rekordban (VISSZAhozás dátuma üres) a KOLCSONZO (ha ez üres, a KOLCSONOZTE) mező által mutatott USER nem olvasható
    kölcs (43) KOLCS rekord a KOLCSONOZVE mezője által hivatkozott PELDANY nem mutat vissza KOLCS mezőjén keresztül KOLCS rekordra
    kölcs (44) KOLCS rekordban a KOLCSONOZVE mező által mutatott PELDANY nem olvasható
    kölcs (45) "élő" KOLCS rekordban (VISSZAhozás dátuma üres) a mind a KOLCSONZO, mind a KOLCSONOZTE mező üres
    kölcs (46) "élő" KOLCS rekordban (VISSZAhozás dátuma üres) a KOLCSONZO (ennek hiányában a KOLCSONOZTE) mező által mutatott olvasó rekordjában nincs bejegyezve a KOLCS rekord, ugyanakkor KOLCSONOZVE mező üres vagy az általa mutatott PELDANY nem olvasható
    kölcs (47) "élő" KOLCS rekordban (VISSZAhozás dátuma üres) a KOLCSONZO (vagy KOLCSONOZTE) mező által mutatott olvasónál be van jegyezve a KOLCS rekord, ugyanakkor KOLCSONOZVE mező üres
    kölcs (48) "élő" KOLCS rekordban (VISSZAhozás dátuma üres) a KOLCSONZO (vagy KOLCSONOZTE) mező által mutatott olvasónál be van jegyezve a KOLCS rekord, ugyanakkor KOLCSONOZVE mező által mutatott PELDANY nem olvasható
    kölcs (49) "élő" KOLCS rekordban (VISSZAhozás dátuma üres) a KOLCSONZO (ennek hiányában a KOLCSONOZTE) mező által mutatott olvasó rekordjában nincs bejegyezve a KOLCS rekord, pedig KOLCSONOZVE létező példányra mutat, ugyanakkor a hozzá tartozó késés-típusú TARTOZAS státusza lezárt (azaz valószínű, hogy vissza lett véve)
    kölcs (50) (valószínűleg) kölcsönzött példánynál a KOLCSONZO mező nincs kitöltve (KOLCSONOZTE alapján a program kitölti)
    kölcs (51) kölcsönzött példánynál a KOLCSONZO mező üres (KOLCSONOZTE mező alapján a program kitölti)
    kölcs (251) KOLCS rekordban a KOLCSONOZTE mező üres
    kölcs (252) KOLCS rekordban a HOSSZABITVA > HOSSZ_DB
    kölcs (253) KOLCS rekordban a FELSZOLITANDO mező nem üres
    kölcs (261) KOLCS rekordban a HATARIDO <= KIVIVE
    kölcs (262) KOLCS rekordban a VISSZA < KIVIVE
    kölcs (263) KOLCS rekordban van felszoltas, es MaiNap < HATARIDO
    kölcs (811) PELDANY rekord KOLCS mezője által hivatkozott KOLCS rekordnak a KOLCSONOZVE mezője üres
    kölcs (812) PELDANY rekord KOLCS mezőjéből hivatkozott KOLCS rekordnak a KOLCSONOZVE mezője nem erre a PELDANY rekordra mutat vissza
    kölcs (813) PELDANY rekord KOLCS mezőjéből hivatkozott rekord nem olvasható
    kölcs (814) PELDANY rekord KOLCS mezőjéből hivatkozott ELOJEGY rekord KIJELOLVE mezője nem mutat vissza erre a PELDANY rekordra
    kölcs (815) PELDANY rekord KOLCS mezőjéből hivatkozott KKOLCS rekordnak a KOLCSONOZVE mezője üres
    kölcs (816) PELDANY rekord KOLCS mezőjéből hivatkozott KKOLCS rekordnak a KOLCSONOZVE mezője nem erre a PELDANYra mutat
    kölcs (899) PELDANY rekord KOLCS mezője nem a megfelelő típusú rekordok (KOLCS, ELOJEGY, KKOLCS) valamelyikére mutat
    kölcs (911) Olvasó valamelyik U_STAT-almezője KOLCSONZESEK mezője által hivatkozott valamelyik KOLCS rekord nem olvasható
    kölcs (912) Olvasó valamelyik U_STAT-almezője KOLCSONZESEK mezője által hivatkozott valamelyik KOLCS rekord KOLCSONZO mezője üres
    kölcs (913) Olvasó valamelyik U_STAT-almezője KOLCSONZESEK mezője által hivatkozott valamelyik KOLCS rekord KOLCSONZO mezője másik olvasóra mutat
    kölcs (914) Olvasó valamelyik U_STAT-almezője KOLCSONZESEK mezője által hivatkozott valamelyik KOLCS rekord már nem "élő" kölcsözést fed (VISSZAhozás dátuma mező ki van töltve ill. KOLCSONOZVE mező üres)
    kölcs tartozás (61) KOLCS rekord KESES_TARTOZAS mezője által mutatott TARTOZAS rekord nem olvasható
    kölcs tartozás (62) lezárt kölcsönzésnél (VISSZAhozás dátuma kitöltve) KOLCS rekord KESES_TARTOZAS mezője által mutatott TARTOZAS rekordban a tartozás összege zérus
    kölcs tartozás (63) KOLCS rekord KESES_TARTOZAS mezője által mutatott TARTOZAS rekordban a tartozás összege negatív (az ELVESZT_TARTOZAS mező ki van töltve - vélelmezett elvesztés)
    kölcs tartozás (64) KOLCS rekord KESES_TARTOZAS mezője által mutatott TARTOZAS rekordban a tartozás összege negatív, pedig ELVESZT_TARTOZAS üres (nincs vélelmezett elvesztés)
    kölcs tartozás (65) "élő" KOLCS rekordban (VISSZAhozás dátuma üres, KOLCSONZO-nél a kölcsönzések között be van jegyezve) a KESES_TARTOZAS mező által mutatott TARTOZAS rekord MIERT mezője üres
    kölcs tartozás (66) "élő" KOLCS rekordban (VISSZAhozás dátuma üres, KOLCSONZO-nél a kölcsönzések között be van jegyezve) a KESES_TARTOZAS mező által mutatott TARTOZAS rekord MIERT mezője által mutatott PELDANY nem olvasható
    kölcs tartozás (67) KOLCS rekord KESES_TARTOZAS mezője által mutatott TARTOZAS rekordban mind az UGYFEL mind a KI mező üres (csak //javit paraméter esetén jelzi a hibát, amikor azonnal javítja is!)
    kölcs tartozás (68) KOLCS rekord KESES_TARTOZAS mezője által hivatkozott TARTOZAS rekord javíthatatlan hiba - 511, 512, 532, 533, 534, 553 - miatt törlésre kerül, ezért a KOLCS rekordból is törölni kell a KESES_TARTOZAS mezőt (csak //javit paraméter esetén fordul elő, és akkor el is végzi a törlést)
    kölcs tartozás (69) élő KOLCS rekord ELVESZT_TARTOZAS és KOV_FELSZOLITAS mezője egyszerre üres (//javit paraméter esetén a KOV_FELSZOLITAS mezőt tölti ki a program, ha még nem ment utolsó felszólítás, ellenkező esetben elvesztés tartozás rekordot hoz létre a KOLCS rekordhoz)
    kölcs tartozás (70) Perelt térítési díj típusú tartozásban érintett PELDANY rekordban mind a STATUSZ mind a SELEJTINDOKA mező üres
    kölcs tartozás (522) KOLCS rekord KESES_TARTOZAS mezője által hivatkozott tartozás rekordban a MIERT mező üres (csak //javit paraméter esetén fordul elő, akkor viszont - feltéve hogy a KOLCS rekord KOLCSONZOTT és KOLCSONOZVE mezői valamelyike meg van adva és az általa mutatott PELDANY olvasható - rögtön javítja is arra)
    kölcs tartozás (523) KOLCS rekord KESES_TARTOZAS mezője által hivatkozott tartozás rekordban a MIERT mező által mutatott PELDANY nem olvasható (csak //javit paraméter esetén fordul elő, akkor viszont - feltéve hogy a KOLCS rekord KOLCSONZOTT és KOLCSONOZVE mezői valamelyike meg van adva és az általa mutatott PELDANY olvasható - rögtön javítja is arra)
    tartozás (510) rendezetlen TARTOZAS (RENDEZES_MODJA mező üres) rekordban a KI mező által mutatott USER nem olvasható
    tartozás (511) rendezetlen TARTOZAS (RENDEZES_MODJA mező üres) rekordban a KI mező üres
    tartozás (512) rendezetlen TARTOZAS (RENDEZES_MODJA mező üres) rekord KI (vagy UGYFEL) mezője által mutatott olvasónál nincs bejegyezve semelyik U_STAT almező TARTOZASOK mezője egyik előfordulásában sem a kérdéses TARTOZAS
    tartozás (513) rendezetlen TARTOZAS (RENDEZES_MODJA mező üres) rekordban ki van töltve a BESZEDTE mező
    tartozás (514) rendezetlen TARTOZAS (RENDEZES_MODJA mező üres) rekordban ki van töltve a KIEGYENLITVE mező
    tartozás (515) rendezett TARTOZAS (RENDEZES_MODJA mező kitöltve) rekordban a KI mező ki van töltve
    tartozás (516) rendezett TARTOZAS (RENDEZES_MODJA mező kitöltve) rekord KI (vagy UGYFEL) mezője által mutatott olvasónál be van jegyezve valamelyik U_STAT almező valamelyik TARTOZASOK mezőelőfordulásaként a kérdéses TARTOZAS
    tartozás (517) rendezett TARTOZAS (RENDEZES_MODJA mező kitöltve és az nem VISSZASZOLGALTATAS) rekordban BESZEDTE mező üres
    tartozás (518) rendezett TARTOZAS (RENDEZES_MODJA mező kitöltve) rekord KIEGYENLITVE mezője üres
    tartozás (519) TARTOZAS rekordban az UGYFEL mező üres, pedig a KI mező létező rekordra mutat
    tartozás (520) TARTOZAS rekordban mind az UGYFEL, mind a KI mező ki van töltve, de nem ugyanarra a rekordra mutatnak
    tartozás (521) TARTOZAS rekordban TARTOK mező üres
    tartozás (522) Késés vagy elvesztés miatti TARTOZAS rekordban a MIERT mező üres
    tartozás (523) Késés vagy elvesztés miatti TARTOZAS rekordban a MIERT mezőben hivatkozott PELDANY nem olvasható
    tartozas (524) Nem késés vagy elvesztés miatti TARTOZAS rekordban a MIERT mező ki van töltve
    tartozas (525) Rendezett TARTOZAS rekordban a KOV_FELSZOLITAS mező ki van töltve
    tartozás (531) Késés miatti TARTOZAS rekordban TART_STATUSZ üres
    tartozás (532) Késés miatti TARTOZAS rekordban TART_STATUSZ VALTOZHAT, de a KI (ennek hiányában az UGYFEL) mező által hivatkozott olvasó semelyik U_STAT-almezője TARTOZASOK mezőjének egyetlen előfordulása sem hivatkozik a rekordra
    tartozás (533) Késés miatti TARTOZAS rekordban OSSZEG negatív
    tartozás (534) Késés miatti TARTOZAS rekordban OSSZEG zérus, ugyanakkor a KI (ennek hiányában az UGYFEL) mező által hivatkozott olvasó semelyik U_STAT-almezőjének TARTOZASOK mezőjének egyetlen előfordulása sem hivatkozik a rekordra vagy TART_STATUSZ LEZART
    tartozás (535) Nem késés miatti TARTOZAS rekordban TART_STATUSZ értéke VALTOZHAT
    tartozás (541) Elvesztés miatti TARTOZAS rekordban OSSZEG nem zérus, MEGALLAPITVA ki van töltve, ugyanakkor ELVESZETT nem üres (pedig csak az összeg megállapításáig lehetne kitöltve)
    tartozás (542) Elvesztés miatti TARTOZAS rekordban ELVESZETT ki van töltve, MEGALLAPITVA üres (kártérítés megállapítása folyamatban?), ugyanakkor OSSZEG nem zérus
    tartozás (543) Elvesztés miatti TARTOZAS rekordban ELVESZETT ki van töltve (kártérítés megállapítása folyamatban?), ugyanakkor a KI (ennek hiányában az UGYFEL) mező által mutatott olvasó semelyik U_STAT-almezőjének TARTOZASOK mezőjének egyetlen előfordulása sem hivatkozik a TARTOZAS rekordra (//javit paraméter esetén - amennyiben az 512-es hibával együtt jelentkezik annak javításával ez is megszűnik, ellenkező esetben - rendezett tartozásnál az ELVESZETT mező törlődik)
    tartozás (544) Elvesztés miatti TARTOZAS rekordban ELVESZETT üres, MEGALLAPITVA kitöltve (kártérítés megállapítva), ugyanakkor OSSZEG mező üres
    tartozás (545) Elvesztés miatti TARTOZAS rekordban ELVESZETT üres (kártérítés megállapítva?), ugyanakkor MEGALLAPITVA és OSSZEG mező is üres
    tartozás (551) TARTOZAS rekordban MIKOR mező üres (pedig nem vélelmezett elvesztésről van szó)
    tartozás (552) Késés miatti TARTOZAS rekordban MEDDIG üres
    tartozás (553) Késés miatti TARTOZAS rekordban MIKOR > MEDDIG
    tartozás (554) Késés miatti TARTOZAS rekordban KIEGYENLITVE és MEDDIG kitöltve, KIEGYENLITVE < MEDDIG
    tartozás (555) TARTOZAS rekordban KIEGYENLITVE < MIKOR
    tartozás (556) Késés miatti TARTOZAS rekordban MIKOR, MEDDIG, OSSZEG és KESES_SZORZO közötti összefüggés nem teljesül, ami MIKOR vagy MEDDIG hibás voltára utal (//javit paraméter esetén MIKOR és MEDDIG közül azt javítja a program, amelyik irreális; ha mindkettő reális, MEDDIG értékét módosítja a program)
    tartozás (561) TARTOZAS rekordban FELSZOLITANDO nem üres
    selejtez (600) TORL_JEGYZEK rekord olyan PELDANY rekordra hivatkozik, ami nincs selejtezve
    selejtez (601) TORL_JEGYZEK rekord olyan PELDANY rekordra hivatkozik, ami kölcsönözve van (nem lezárt jegyzéknél javítható)
    user tartozás (71) az olvasó rekord valamelyik U_STAT-almezőjében a TARTOZIK mező értéke és a TARTOZASOK előfordulásai által reprezentált (rendezetlen) tartozások összege nem azonos
    user tartozás (711) olvasó rekord valamelyik U_STAT-almezője TARTOZASOK mezőjének valamelyik előfordulása által hivatkozott TARTOZAS rekord nem olvasható
    user tartozás (712) olvasó rekord valamelyik U_STAT-almezője TARTOZASOK mezőjének valamelyik előfordulása által hivatkozott TARTOZAS rekordban a RENDEZES_MODJA kitöltve (rendezett tartozás)
    user tartozás (713) olvasó rekord valamelyik U_STAT-almezője TARTOZASOK mezőjének valamelyik előfordulása által hivatkozott késés-tartozás típusú TARTOZAS rekordban a tartozás összege negatív
    user tartozás (714) olvasó rekord valamelyik U_STAT-almezője TARTOZASOK mezőjének valamelyik előfordulása által hivatkozott TARTOZAS rekord zérus OSSZEGű rendezetlen tartozást fed (a RENDEZES_MODJA mező üres) ugyanakkor sem nem a USER-nél bejegyzett KOLCSönzéshez tartozó késés típusú tartozásról, sem nem megállapításra váró térítési díjról van szó
    user tartozás (715) olvasó rekord valamelyik U_STAT-almezője TARTOZASOK mezőjének valamelyik előfordulása által hivatkozott TARTOZAS rekordban nincs kitöltve az UGYFEL mező
    előjegy (795) Az olvasó rekordja nem hivatkozik az ELOJEGY rekordra, pedig az ELOJEGY rekord szerint az olvasó számára félre van téve a példány
    előjegy (796) Az olvasó rekordja nem hivatkozik az ELOJEGY rekordra, holott élő, még kielégítetlen ELOJEGY rekordról van szó
    előjegy (797) Az olvasó rekordja által hivatkozott ELOJEGY rekord nem az olvasó rekordjára hivatkozik vissza
    előjegy (798) Már kielégített ELOJEGY rekordra hivatkozik az olvasó rekordja
    előjegy (799) Már kielégített ELOJEGY rekordban KIELEGITI mező nem üres
    előjegy (800) ELOJEGY rekordban ERTESITENDO mező kitöltött, ugyanakkor KIJELOLVE mező üres (legvalószínűbb oka: félretett példányt - Olvasó mezőjének rendszergazda által történt törlése után - valaki másnak adtak ki)
    előjegy (801) ELOJEGY rekordban VARJUK mező kitöltött, ugyanakkor KIJELOLVE mező üres, azaz nincs meg a már értesített előjegyző számára félretett példány (legvalószínűbb oka: a példány Olvasó mezőjének rendszergazda által történt törlése után valaki másnak adták ki)
    előjegy (802) ELOJEGY rekordban ELOJEGYEZTE mező (ami mindig kitöltött kellene legyen) üres
    előjegy (803) ELOJEGY rekordban mind ELOJEGYZO, mind ELOJEGYEZTE mező ki van töltve, de értékük eltér
    előjegy (804) ELOJEGY rekordban ERTESITENDO mező ki van töltve, de értéke nem azonos ELOJEGYZO mezővel
    előjegy (805) ELOJEGY rekordban ELOJEGYZO mező üres (azaz már nem "él" az előjegyzés), a VARTKOTET mező viszont nem az
    előjegy (806) ELOJEGY rekordban a MEGFELEL mező olyan példányra mutat, amely nem kölcsönözhető
    előjegy (807) PELDANY rekord EJSOR mezője már kielégített ELOJEGY rekordra hivatkozik
    előjegy (808) PELDANY rekord MEGFELEL mezője lezárt ELOJEGY rekordra hivatkozik
    előjegy (809) PELDANY rekord ALLOKALT mezője már kielégített ELOJEGY rekordra hivatkozik
    előjegy (810) Kielégítetlen ELOJEGY rekordban a KIJELOLVE mező ki van töltve
    előjegy (817) PELDANY_EJSOR által hivatkozott előjegyzések előjegyzői között többször szerepel ugyanaz az előjegyző
    előjegy (818) PELDANY kölcsönözve vagy kijelölve olyan olvasónak, aki szerepel a PELDANY_EJSOR által hivatkozott előjegyzések előjegyzői között
    előjegy (819) olvasó rekordjában olyan előjegyzés rekordra vonatkozó hivatkozás szerepel, amely nem érhető el (törölve van)
    felszólítás (820) USER FELSZOLITAS-ai között van olyan, amely csak postaköltség-tartozások megfizetésére vonatkozik
    felszólítás (821) USER FELSZOLITAS-ai között van olyan, amely nem hivatkozik a felszólító levél postaköltség típusú tartozás rekordjára
    felszólítás (822) USER FELSZOLITAS-ai között van olyan, amely nem létező FELSZOLITAS rekordra hivatkozik
    felszólítás (823) USER FELSZOLITAS-ai között van olyan, amelynél a még aktuális tételek száma nem egyezik meg a valóban rendezetlen tételek számával
    felszólítás (824) USER FELSZOLITAS-ai között van olyan, amelynek már minden tétele rendezve lett
    felszólítás (825) USER FELSZOLITAS-ai nem időrendben követik egymást
    felszólítás (826) KOLCS rekordban nagyobb a felszólítások maximális száma nagyobb, mint a tényleges felszólítások száma és a paraméter-rendszerből adódó felszólítások max. számának az összege
    perlés (830) VITA/PER rekordban a rendezetlen TARTOZAS-ok között van olyan, amelynek a RENDEZES_MODJA mezője nem üres, (azaz rendezett)
    perlés (831) VITA/PER rekordban csupa rendezett TARTOZAS rekordra való hivatkozás van, az ELLENFEL mező mégis ki van töltve
    perlés (832) PER rekordban nincs kitöltve a NYOMTATANDO mező és a NYOMTATVA mező is üres
    perlés (833) USER rekordban a VITA mező PER rekordra mutat
    számla (81) Számláról állományba vett példány BESZERZESIAR mezője nem egyezik az aktuálisan a könyvtár rekord-beli állományérték nyilvántartási beállításából (bruttó/nettó) és a megfelelő számlasor adataiból (egységár, ÁFA-kulcs, árforma) adódó értékkel
    számla (82) A számla Összesen, ÁFA ill. Engedmény mezői közül egy vagy több nem egyezik a számlasorokból adódó értékkel
    számla (83) A számla Összesen és Fizetendő mezője megegyezik, a Fázis mező értéke mégis "rögzítés alatt"
    számla (84) A számla sora által hivatkozott MEGRENDELES rekordban nincs a számlasorhoz tartozó dokumentumra vonatkozó tétel
    számla (85) A KONYVTAR rekordban nyilvántartott tárgyévi elköltött keret nem egyezik a tárgyévi számlákból kumulált értékkel
    számla (86) A szállító CEG rekordjában nyilvántartott tárgyévi elköltött keret nem egyezik a tárgyévi számlákból kumulált értékkel
    számla (87) A szerzeményezési CSOPORT rekordjában nyilvántartott tárgyévi elköltött keret nem egyezik a tárgyévi számlákból kumulált értékkel
    paraméter (90) A KONYVTAR rekordból hiányzik a hozzáférési paraméter rekordok címeit tartalmazó SUPERPAR rekord címe (//kolcs paraméter esetén vizsgálja)
    paraméter (91) A hozzáférési paraméter rekord címe hiányzik abból a rekordból, amihez tartozik (vagy ez utóbbi nem elérhető) (//kolcs paraméter esetén vizsgálja)
    paraméter (92) A hozzáférési paraméter rekord címe hiányzik a hozzáférési rekordok címét tartalmazó SUPERPAR-rekordból (//kolcs paraméter esetén vizsgálja)

    5.2. Hibaüzenetek a napló program futása közben:

    J000   Nincs elég memória 
    J001 Az utolsó naplózott rekord eltér az adatbázisbelitől
    J002 Az utolsó naplózott rekordot nem sikerült az adatbázisba tölteni
    J003 Hibás típusú napló bejegyzés
    J004 Hibás napló bejegyzés
    J005 Adatbázis olvasási hiba
    J006 A napló hibás, sérült
    J007 A naplót nem sikerült lezárni
    J008 Az adatbázishoz nem készült még napló
    J009 A napló file megnyitási hiba
    J010 A napló nem létezik
    J011 A napló lezárva, rendben
    J012 A naplófile fizikailag sérült
    J013 - nincs -
    J014 Adatbázis módosítási hiba
    J015 A naplókat nem sikerült összegyűjteni
    J016 A megadott könyvtárban nincs napló
    J017 Különböző adatbázishoz tartozó naplók
    J018 Nem az adatbázishoz tartozó naplók
    J019 Nincs feldolgozatlan ill. betölthető napló
    J020 Nincs meg az első betöltendő napló
    J021 Hiányzó napló
    J022 Napló hiba: naplóból kimaradt adatbázis módosítás
    J023 A naplót nem sikerült megnyitni (nem létezik)
    J024 Le nem zárt nap a naplóban
    J025 Hibás napló bejegyzés ill. le nem zárt napló
    J026 Rossz bejegyzés sorrend a naplóban
    J027 Nincs listázható napló
    J028 Napló létrehozási hiba
    J029 Az aktuális napló már létezik
    J030 Az aktuális naplót nem sikerült megnyitni (nem létezik)
    J031 Napló file átnevezési hiba
    J032 File átnevezési hiba, már létező file
    J033 Az aktuális naplót nem sikerült megnyitni
    J034 Új adatbázis mentést kell készíteni
    J035 Már betöltött napló
    J036 Napló olvasási hiba
    J037 Napló módosítási hiba
    J038 Az aktuális napló nevét nem sikerült visszaállítani
    J039 Nem naplózott adatbázis módosítás történt
    J040 Hibás, rosszul megadott path
    J041 File létrehozási hiba, már létező file
    J042 Nem megfelelő napló (rossz paraméterek)
    J043 Az aktuális napló túl nagy
    J044 Hibás napló ill. napló olvasási hiba
    J045 A napló betöltéshez nincs elég hely a diszken
    J046 Könyvtár létrehozási hiba
    J100 Sikertelen adatbázis megnyitás
    J101 Sérült adatbázis
    J102 Adatbázis írási hiba
    J103 Adatbázis lezárási hiba
    J104 Adatbázis mentési (írási) hiba
    J105 Sikertelen adatbázis (adatfile) megnyitás
    J106 Sikertelen adatbázis (indexfile) megnyitás
    J107 Az adatbázis leírást nem sikerült betölteni
    J108 Nem összetartozó adatbázis file-ok
    J109 Adatbázis lezárva (javítandó adatfile-ok)
    J110 Sikertelen adatbázis másolás
    J111 Sikertelen adatbázis áthelyezés
    J112 Sérült adatbázis, csak hibátlan adatbázisra tölthető napló

    5.3. TextLib hibaüzenetek

    5.3.1. Adatbázis megnyitás és lezárás fázisai

    1. az adatbázis szerkezetét leíró állomány betöltése (DBDESC.TLM)
    2. az adatfile-ok megnyitása, lezárása (.DBF)
    3. az indexfile-ok megnyitása, lezárása (.NDX, .POS)
    4. a napló állomány megnyitása, ellenőrzése, lezárása (.ANF, .TNF)
    5. a találati halmazok megnyitása, lezárása (.TTH)
    6. a sértetlenség ellenőrzéséhez szükséges információk beolvasása
    7. az utolsó lezárás sikerességének ellenőrzése
    8. az adatbázis részek összetartozásásnak ellenőrzése
    9. az adatbázis verziószámának összehangolása (adatfile-onként)
    10. az adatbázis verziószámának változtatása
    11. az adatbázis verziószámának összehangolása (lezáráskor)
    A hibakód lehet a felsorolt értékekből képződő összeg is.

    5.3.2. Hibaüzenetek a TextLib adatbázis megnyitásakor:

    2000: Rossz napló bejegyzés 
    2001: Rossz napló tipus
    2002: Más napló tipus
    2003: Rossz napló file
    2004: Rossz adatbázis azonosító
    2005: Rossz adatbázis kor
    2006: Rossz napló azonosító
    2007: Napló megnyitási hiba
    2008: Napló betöltött
    2009: Nincs napló file
    2010: Van napló file
    2011: Nem lezárt napló
    2012: Rossz napló verzió
    2013: Uj napló kell
    2014: Nagy az aktuális napló

    5.3.3. Adatfile kezelő hibaüzenetei

    1. TLFILE_BAD_FUNC,
    2. TLFILE_NO_FILE,
    3. TLFILE_NO_PATH,
    4. TLFILE_NO_HANDLE,
    5. TLFILE_ACCESS,
    6. TLFILE_BAD_HANDLE,
    7. TLFILE_MEM_ERR,
    8. TLFILE_NO_MEM,
    9. TLFILE_BAD_ADDR,
    10. TLFILE_BAD_ENV,
    11. TLFILE_BAD_FORMAT,
    12. TLFILE_ACCESS_MODE,
    13. TLFILE_BAD_DATA,
    14. _TLFILE_RESERVED_,
    15. TLFILE_BAD_DRIVE,
    16. TLFILE_CURR_DIR,
    17. TLFILE_SAME_DEV,
    18. TLFILE_NO_MORE,
    19. TLFILE_PROTECTED,
    20. TLFILE_BAD_UNIT,
    21. TLFILE_NOT_READY,
    22. TLFILE_COMMAND,
    23. TLFILE_DATA_ERR,
    24. TLFILE_REQUEST,
    25. TLFILE_SEEK_ERR,
    26. TLFILE_MEDIA,
    27. TLFILE_SECTOR,
    28. TLFILE_PAPER_OUT,
    29. TLFILE_WRITE_ERR,
    30. TLFILE_READ_ERR,
    31. TLFILE_GENERAL,
    32. TLFILE_EXIST,
    33. TLFILE_OTHER_ERR,
    34. TLFILE_MAX_ERRNO,
    35. írási (törlési) kísérlet csak olvasásra megnyitott fileba
    36. hibas luk nyilvantarto tabla
    37. hibás luk láncolás
    38. rossz a fejléc típus
    39. rossz a rekord lezáró
    40. rossz rekord azonosito
    41. túl kicsi hely luk felvételre
    42. az XREF tábla fejléc rossz
    43. hiba ax XREF tábla bővítése közben
    44. XREF bejegyzés törlése sikertelen
    45. XREF bejegyzés beolvasása sikertelen
    46. XREF bejegyzés írása sikertelen
    47. XREF tábla műveletnél túl nagy index
    48. XREF bejegyzés módosításkor a rekordfejlécben és a bejegyzésben eltérőek a paraméterek
    49. az XREF tábla elérte maximális méretét
    50. nem létező rekord - adatbáziskezelő hívásnál nem létező rekordszám a rekordazonosítóban vagy a rekord nem a megadott logikai file-hoz tartozik
    51. rekord rész módosításnál rosszul megadott pozíció ill. méret
    52. soros keresésnél (előre v. hátra) nincs több rekord
    53. luklánc láncolása hibás - a láncon következő rekord nem mutat vissza a a vizsgált lukra
    54. luklánc láncolása hibás - a láncon az előző rekord nem mutat vissza a a vizsgált lukra
    55. luklánc láncolása hibás - a láncon a következő rekord vagy a maga a lánc mutató hibás
    56. luklánc láncolása hibás - a láncon az előző rekord vagy a maga a lánc mutató hibás
    57. luklánc láncolása hibás - a vizsgált luk a láncon az első, de nem
    58. szerepel a luklánc táblában
    59. XREF táblából nem elérhető rekord
    60. az aktuális rekordot megelőzőnek hibás a lezárása
    61. az aktuális rekord file pozíciója nem egyezik az XREF táblabelivel
    62. az aktuális rekord mérete nem egyezik az XREF táblabelivel
    63. rekord olvasás a file végén túl
    64. file vége
    65. file lezáráskor, ha a file fejlécbe is beírt állapot byte szerint a file-ban van valamilyen szerkezeti (fizikai) hiba
    66. rossz file sorszám
    67. nics hely további file bejegyzéshez
    68. rosszul megadott file típus
    69. rossz logikai file szám vagy lezárt file
    70. már megnyitott logikai file
    71. túl alacson file hozzáférési jog (R/W)
    72. 72: használt logikai file már zárva van
    73. nincs elég memória a LOCK kezeléshez
    74. nincs mód további LOCK-ok kiadására, a LOCK-ok száma elérte a megengedett maximális számot
    75. rekord módosításnál a kérőnek nincs WRITE_LOCK-ja a rekordra
    76. hibás típusú LOCK kérés
    77. nem megengedett művelet WRITE_LOCK-olt rekordra
    78. user üzenet a rekord módosításról
    79. user üzenet a rekord törléséról
    80. nem megengedett művelet LOCK-olt rekordra
    81. a kulcs nem található
    82. a kulcs már létezik (nem lehet duplikált)
    83. kulcs felvételi/törlési hiba
    84. erDEPTH_LIMIT_EXCEED
    85. erREAD_MR,
    86. erREC_TYPE,
    87. erMAIN_FIELD,
    88. erEMPTY_SZELET,
    89. MAX_ALIAS_ERRNO,
    90. rossz a modul bele - átnevezve
    91. nincs ilyen user
    92. rossz adafile-ba mutató dref
    93. van még printelni való, de quit
    94. printer nem működik
    95. soros vonal nem működik
    96. nincs printer definició
    97. túl sok ilyen rekord lenne
    98. lebegő pontos hiba
    99. nincs show/modify module megadva
    100. kritikus hiba
    101. file hiba
    102. ugyanarra a rekordra akar mutatni
    103. rekordra van hivatkozas
    104. napló írási hiba
    105. adatbázis leírás betöltési hiba
    106. sérült adatbázis
    107. különböző verziójú DB file-ok
    108. túl sok rekord
    109. rossz rekord jött
    110. tele a diszk
    111. másolásnál: file ugyanaz

    5.3.4. Indexfile kezelő hibaüzenetei

    1. elfogyott a memória
    2. sikertelen az indexset létrehozása vagy megnyitása
    3. sikertelen az indexset lezárása
    4. hibás adatfile paraméter (rekordhossz, adatfile típus)
    5. sikertelen a lemezre írás
    6. sikertelen a lemezről olvasás
    7. nincs ilyen sorszámú indexset
    8. van már ilyen nevű indexset
    9. rossz az indexfile sorszáma
    10. hibás indexfile paraméter (kulcshossz)
    11. sikertelen az indexlap beolvasása
    12. az indexbejegyzés nem fér az indexlapra
    13. nincs az indexlapon az adott sorszámú kulcs
    14. van már ilyen kulcs az indexfile-ban - bevitelei hiba
    15. nincs ilyen kulcs az indexfile-ban - törlési hiba
    16. hibás az indexfile-ba bejegyzett rekordhivatkozás-hossz
    17. van már ilyen kulcs+rekordhivatkozás - beviteli hiba
    18. nincs ilyen kulcs+rekordhivatkozás - törlési hiba
    19. - nincs -
    20. betelt az indexfile
    21. az indexfile-nak éppen nincs aktuális kulcsa
    22. hibás a kulcsok száma az indexlapon (pl: 0)