Az általam vizsgált MH-TSS rendszer alá fejlesztett B nyelv gazdag beépített függvényekben.
Az elõre megírt függvények az I/O mûveletek, a karakterkezelés és a beépített típusok
kezelését könnyítik meg. Használatukhoz nem kell modult importálni.
Input/Output rutinok
Az I/O kezelés karakter orientált a B nyelvben, két rutinnal:
getchar() és
putchar(). Alapértelmezésben a elõbbivel tudunk beolvasni,
utóbbival kiírni
karaktereket. Az IO egységek hasonlóan használhatóak, mint például a Fortran nyelvben.
Mindig egy input és egy output egység van. Ezeknek a száma –1 és 10 között van, és az aktuális
értékek az
’rd.unit’ és a
’wr.unit’
külsõ változókban vannak. Alapértelmezésben elõbbi értéke 0, utóbbié pedig –1,
amik a képernyõröl való olvasást, illetve a képernyõre való írást teszik lehetõvé.
A
putchar(c) mûvelet az aktuális kimenetre (wr.unit) írja a c karaktert. Egyszerre csak
4 karakternyit lehet kiírni a képernyõre.
A következõ B kód a ’hi!’ szöveget írja a
képernyõre egy soremeléssel:
main() {
auto a;
a = ’hi!’;
putchar(a);
putchar(’*n’);
}
A következõ kód az input egy sorát az outputra másolja:
while(putchar(getchar()) != ’*n’);
File-ból olvasáshoz és file-ba íráshoz az
openr(u, s) (fájl megnyitása olvasási
joggal ascii állományként)
illetve az
openw(u, s) (fájl megnyitása írási/olvasási
joggal ascii állományként) eljárásokat használhatjuk.
Az 's' string helyére a file neve
(elérési útja) kerül, ez csak ”cat/file”, ”/file” vagy ”file” lehet,
u pedig az IO egységet
határozza meg, hogy honnan történjen az olvasás. Üres s string esetén a képernyõröl
olvasunk.
Ha u –nak nem 2 és 10 közötti értéket adunk meg, akkor az
openr() és
openw() hatástalanok.
Az 1 érték például a képernyõröl való olvasást jelenti.
Ha már egy megnyitott IO egységet próbálunk újra megnyitni,
akkor a korábban megnyitott
bezárásra kerül.
A következõ két IO funkció inkább string orientált, megvalósításuk
lényege,
hogy a getchar() és putchar() eljárások egymásután hívódnak meg:
- getstr(a): az ’a’ vektorba olvassa az input következõ sorát, az újsor jelet
eldobja.A felhasználónak kell gondoskodnia arról,
hogy a vektor elég hosszú legyen
a string tárolására. A függvény visszatérési értéke az ’a’ vektor.
- putstr(a): ’a’ stringet az aktuális outputra másolja. Nem történik automatikusan
soremelés.
- reread(): az aktuális sort lehet újra olvasni vele. Elsõ olvasás esetén ez a
beolvasás a parancssorból történik.
- putnumb(n): n számot írja az outputra
A leghasznosabb output eszköz a
printf(fmt, a1, .. ,a10) funkció. Ez lényegében
megegyezik a C-beli printf() –el.
Az ’fmt’ string paraméterrel tudjuk meghatározni a kiírás
formáját.
Pl:
%c karakter
%d decimális szám
%o oktális szám
%s string kiírására szolgál. Egy példa a használatra:
Printf(”%d + %o is %s or %c*n”, 1, -1, ”zero”, ’0’);
erdménye: 1 + 777777777777 is zero or 0.
A printf() segítségével rendszer szintû programokat is írhatunk.
Ilyenkor a –1
IO egységet használjuk ( wr.unit = -1; )
system(a): a rendszer kimenetére írja az 'a' karakterláncot. Újsor karakter nem szükséges.
close(u) az ’u’ output egységet zárja le
flush() aktuális kimeneti állomány bezárása (ugyanaz, mint close (wr.unit))
Néhány string és vektorkezelő függvény
char (s, n) - s karakterlánc n-edik karakterét adja meg.
lchar (s, n, c) - az s
karakterlánc n-edik karakterét cseréli c-re.
charb (s, n) - megegyezik charb-al, de
csak 6-bites karaktereket vesz 8-bites helyett.
lcharb (s, n, c) - megegyezik
lcharb-al, de csak 6-bites karaktereket vesz 8-bites helyett.
ascbcd (v, n, s) -
konvertálás bcd-be.
bcdasc (s, v, n) - visszaalakítés bcd-bõl.
concat (a, b1, ..,
b10) - a-ba konkatenálja b1 .. b10 sztringeket.
getarg (a, b, n) - a-ba teszi b n-edik
argumentumat (karakterláncok esetén n-edik szavát).
getvec (n) - n méretû vektort
visszaadó függvény.
rlsevec (v, n) - a rendszernek adja v vektor n+1 szavát.
Egyéb függvények
nargs () - az aktuálisan futó függvény argumentumainak számát adja vissza.
exit () -
lezár minden output állományt és befejezi a program futását.