Output nyelv - beépített eljárások ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Az output nyelv beépített eljárásai funkciójuk szerint több kategóriába sorolhatók, úgy mint: - pozicionáló eljárások - nyomtató eljárások - kapcsolódó mező kezelő eljárások - mezőérték vizsgáló eljárások - string kezelő eljárások - dátum kezelő eljárások - egyéb Azoknál az eljárásoknál, amik adnak vissza értéket, ennek típusát természetesen feltüntettük. Amelyeknél ezt nem tettük meg, azok nem adnak vissza semmit. .Pozicionálás a lapon belül ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A nyomtatásnál mindig tudhatjuk, hogy hány soros lapra nyomtatunk, és hány oszlop fér ki egy sorba. Azt is lehet tudni, hogy a lapon belül egy adott pillanatban éppen hol tartunk. A pozicionáló eljárások segítségével meg tudjuk változtatni az aktuális pozíciót, ahova a következő nyomtatás kerül. NEWLINE(0|1) Uj sort kezd. Ha 1 paraméterrel hívjuk, akkor mindenképpen, ha a 0 paramétert adjuk meg, akkor csak abban az esetben, ha nem egy sor elején tartunk éppen. Ezzel elkerülhető, hogy üres sorok keletkezzenek az outputban. Nem kell mindig ezt az eljárást használni soremelésre, a verérlő karakterek között is van, aminek a kiírása ugyanezt eredményezi (\s, \n). Pl: CPRINT("Egyik sor"); NEWLINE(0); NEWLINE(0); NEWLINE(0); CPRINT("Következő sor. Üresek nincsenek közben."); NEWPAGE(0|1) Uj lapot kezd. Ha az 1 paraméterrel használjuk, akkor többhasábos nyomtatásnál is új lapot kezd, ellenkező esetben csak új hasábot. Ha egy lap elején tartunk, akkor nem kezd új lapot. Ha ki akarunk hagyni egy üres lapot, akkor ki kell írni például egy kemény szóközt. Pl: CPRINT("Előző lap vége"); NEWPAGE(1); CPRINT("Uj lap eleje"); TABTO(oszlop) - oszlop - hanyadik oszlopra kell állni Az aktuális sorban az oszlop-adik pozícióba áll (a pozíciók 1-től számozódnak). Ha már túl vagyunk ezen a pozíción, akkor nem csinál semmit. Pl: CPRINT("szöveg"); TABTO(20); CPRINT("20!!!"); .Nyomtató eljárások ~~~~~~~~~~~~~~~~~~~~~~~ CPRINT(szöveg) - szöveg - a kiírandó szöveg Konstans szöveg, vagy string változó kiírására használható. A szöveg tartalmazhat vezérlő karaktereket is. Pl: CPRINT("Ez csak egy kiírás,\nami két soros"); NPRINT(előtte,szám,hossz,utána) - előtte - mező érték előtt kiírandó szöveg - szám - szám konstans, vagy ilyen típusú változó - hossz - milyen hosszban írja ki? - utána - mező érték után kiírandó szöveg Szám konstans és CHAR, INT, LONG változó kiírására használható. A szám elé és után kiírja a megadott szövegeket. Pl: INT szerzo; szerzo = FNUM(#SZERZO); NPRINT("osszesen ",szerzo,4," szerzo volt"); DPRINT(előtte,dátum,utána) - előtte - mező érték előtt kiírandó szöveg - dátum - a dátum - utána - mező érték után kiírandó szöveg Dátumot ír ki 1997-12-31 formában. Kiírja az előtte és az utána szöveget is. Pl: DPRINT("Ma ",Today()," van"); PRINT(előtte,mező,utána) - előtte - mező érték előtt kiírandó szöveg - mező - kapcsolódó mező, vagy almező neve - utána - mező érték után kiírandó szöveg Rekord mezőjének az értékét írja ki. Különböző típusú mezőket különbözőképpen kezel: string - a mező értéke dref - a kapcsolódó rekord főmezős feloldása almező - főmezős feloldása ismételhető - csak az első ismétlődés Pl: REC_PROC DOKUMENTUM DokSzerz( INT par ) { PRINT("Az első szerző ",#SZERZO," volt"); } RPRINT(előtte,mező,mettől,meddig,közte,utána) - előtte - mező érték előtt kiírandó szöveg - mező - kapcsolódó mező, vagy almező neve - mettől - ettől az előfordulástól kezdve (1 = elsőtől) - meddig - eddig az előfordulásig (255 = utolsóig) - közte - előfordulások között megjelenítendő szöveg - utána - mező érték után kiírandó szöveg Ismételhető mező értékeinek a kiírására szolgál. Nem csak azt lehet megadni, hogy az elejére és a végére mit írjon ki, hanem az előfordulások közé kiírandó szöveget is. Szintén megadható, hogy mely ismétlődéstől, mely ismétlődésig kell kiírni. Ha minden előfordulást akarunk, akkor az 1,255 értékeket adjuk meg. Az egyes mezőket a PRINT eljárásnál leírt módon kezeli. Pl: REC_PROC DOKUMENTUM DokSzerzok( INT par ) { RPRINT("Szerzők: ",#SZERZO,1,255," ; ","\n"); } .Kapcsolódó mezők kezelése ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CALL(név,mező,előtte,utána,par); - név - a meghívandó REC_PROC vagy PROC neve - mező - a kapcsolódó mező, vagy almező neve - előtte - az eljárás meghívása előtt kiírandó szöveg - utána - az eljárás lefutása után kiírandó szöveg - par - az eljárásnak átadandó paraméter Nem ismételhető kapcsolódó mező (vagy ismételhető mező első ismétlődése) által mutatott rekord, és almezős mező első ismétlődésének kezelésére szolgáló eljárás. Az adott mező által mutatott rekorddal (mint aktuális rekorddal) meghívódik a felhasználó által definiált 'név' nevű eljárás a 'par' paraméterrel. Az 'előtte' és 'utána' paraméter szövegek csak abban az esetben íródnak ki, ha a 'mező'-nek volt legalább egy előfordulása. Pl: CALL(Szerzo,#SZERZO,"Ez: "," volt",0); RCALL(név,mező,mettől,meddig,előtte,közte,utána,par) Ismételhető kapcsolódó mező és almező kezelése használható a CALL utasításhoz hasonlóan. Az ott nem szereplő paraméterek: - mettől - ettől a mező előfordulástól kezdve (1 = elsőtől) - meddig - eddig a mező előfordulásig (255 = utolsóig) - közte - az ismétlések között megjelenítendő szöveg Pl: RCALL(Szerzo,#SZERZO,1,255,"Ezek: "," ; "," voltak",0); eredménye valami ilyesmi lesz: Ezek: Arany János ; Petőfi Sándor voltak .Mező értékek kezelése ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INT FNUM(mező) - mező - a mező neve A mező előfordulásainak a számát szolgáltatja. Nem ismételhető mező esetén ez csak 0 (üres a mező), vagy 1 (ki van töltve) lehet. Ismételhető mezőnél természetesen az ismétlések számát adja. Pl: if( FNUM(#SZERZO) > 3 ) CPRINT("sok szerző van"); int FLD_INT(mező) int FLD_INTN(mező,n) - mező - mező neve - n - hanyadik ismétlődés INT típusú mező értékét szolgáltatja. A második paraméterben megadhatjuk, hogy hanyadik ismétlődést akarjuk (1-től számozódnak). Ha a mező nincs kitöltve, akkor mindig 0-t kapunk. Pl: INT alma; alma = FLD_INT(#TARTOZAS); long FLD_LONG(mező) long FLD_LONGN(mező,n) - mező - mező neve - n - hanyadik ismétlődés LONG típusú mező értékét szolgáltatja. A második paraméterben megadhatjuk, hogy hanyadik ismétlődést akarjuk (1-től számozódnak). Ha a mező nincs kitöltve, akkor mindig 0-t kapunk. Pl: LONG pldar; pldar = FLD_LONG(#BESZERZESIAR); date FLD_DATE(mező) date FLD_DATEN(mező,n) - mező - mező neve - n - hanyadik ismétlődés DATE típusú mező értékét szolgáltatja. A második paraméterben megadhatjuk, hogy hanyadik ismétlődést akarjuk (1-től számozódnak). Ha a mező nincs kitöltve, akkor mindig 0-t kapunk. Pl: DATE hatarido; hatarido = FLD_DATE(#HATARIDO); IF ( hatarido < TODAY() ) CPRINT("késedelem"); string FLD_DREF(mező) string FLD_DREFN(mező,n) - mező - mező neve - n - hanyadik ismétlődés DREF típusú mező értékét szolgáltatja. A második paraméterben megadhatjuk, hogy hanyadik ismétlődést akarjuk (1-től számozódnak). Ha a mező nincs kitöltve, akkor üres stringet kapunk. Pl: STRING dref; dref = FLD_DREF(#SZERZO,1); string FLD_STR(mező) string FLD_STRN(mező,n) - mező - mező neve - n - hanyadik ismétlődés STRING típusú mező értékét szolgáltatja. A második paraméterben megadhatjuk, hogy hanyadik ismétlődést akarjuk (1-től számozódnak). Ha a mező nincs kitöltve, akkor üres stringet kapunk. Pl: STRING cim; cim = FLD_STR(#FOCIM); cim = FLD_STRN(#ALCIM,2); .String kezelés ~~~~~~~~~~~~~~~~~~~ INT SUBSTR(str,sub) - str - a string - sub - amit keresni kell benne Megadja, hogy hol található az str stringben a substring. 0-t ad, ha nincs benne, egyébként az str-en belüli pozíciót (1 = az elején van). Pl: INT hol; hol = SUBSTR("ebben hol van","hol"); /* itt hol = 7 lesz */ INT STRLEN(str) - str - a string Megadja a string hosszat. Nem a tárolt méretét, hanem azt, hogy kiíráskor mekkora helyre fér el. Pl: INT meret; meret = STRLEN("ennek a hossza"); /* itt meret = 14 lesz */ .Dátum kezelés ~~~~~~~~~~~~~~~~~~ INT MONTH(dátum) - dátum - a kérdéses dátum A dátum hónapját szolgáltatja. Pl: INT honap; DATE datum; datum = FLD_DATE(SZULIDO); honap = MONTH(datum); INT DAY(dátum) - dátum - a kérdéses dátum A dátum napját szolgáltatja. Pl: INT nap; DATE datum; datum = FLD_DATE(SZULIDO); nap = DAY(datum); INT YEAR(dátum) - dátum - a kérdéses dátum A dátum évét szolgáltatja. Pl: INT ev; DATE datum; datum = FLD_DATE(SZULIDO); ev = YEAR(datum); date MDATE(év,hó,nap) - év - mely év - hónap - mely hónapjának - nap - mely napja Az adott értékekből előállít egy dátumot. Pl: DATE datum; datum = MDATE(1996,12,16); datum = datum + 30; date TODAY() A mai napot adja meg. Pl: DATE datum,majd; datum = TODAY(); majd = datum + 30; .Egyéb ~~~~~~~~~~ int DF(dref) - dref - a rekord egyedi azonosítója Megadja az adott azonosítójú rekord adatfile sorszámát. A PROC és REC_PROC eljárásokban néha el kell ágazni az adatfile-tól függően (pl: Testület és Rendezvény más adatfile, de ugyanaz a rekordtípus). Pl: INT dfile; dfile = DF(CurrDref); int RT(dref) - dref - a rekord egyedi azonosítója Megadja az adott azonosítójú rekord típusának sorszámát. A PROC és REC_PROC eljárásokban néha el kell ágazni a rekord típusától függően (pl: a szerző Alkotó, vagy Testület). Pl: INT rtip; rtip = RT(CurrDref); if( rtip == ALKOTO_rt ) ... if( rtip == TESTULET_df ) ... SETINDEX(index,tetel,altetel) - INT index - index azonositoja (1,2,3,4 lehet) - long tetel - a tétel azonosítója (0, ha nem kell) - long altetel - tétel-en belüli azonosító (0, ha nem kell) Indexek készítésénél (kiadvány készítéshez index generáló modul írásakor) használandó eljárás. Ennek a meghívása után a kinyomtatandó sorok nem a nyomtatóra kerülnek, hanem mindegyikből egy indexkulcs képződik, amiket a TextLib automatikusan lerendez. Az indexek nyomtatása ebben a sorrendben fog történni. Pl: SETINDEX(1,INUM,0); PRINT("",##FOMEZO,"\n");