Matkönyv megjelenítő főoldalProgramraktár főoldal

A programraktár bővítése

Ez a leírás feltételezi "A programraktár leírása felhasználóknak" elolvasását. Ez a leírás azoknak szól, akik megbeszélés után fejleszteni szeretnék a programraktárt.

A programraktár elérése

Jelenleg a programraktár fájljait csak én (a Fazekas gd felhasználója) tudom írni. Kérem, hogy az új/módosított fájlokat a groszd@users.sourceforge.net e-mail címre küldjék. A programraktár fájljai a "programraktár gyökérkönyvtárában" foglalnak helyet, ami jelenleg a pingvin.fazekas.hu gép /home/gd/public_html/mathdisplay/pd könyvtára. Lehetőleg egy tömörített (pl. zip, tar.gz) állományt küldjenek, amelyben a könyvtárszerkezet olyan, mint a programraktár könyvtárszerkezete, tehát kiderül, melyik fájlnak melyik könyvtárba kell kerülnie.

A programraktár fájljainak nevében csak angol kisbetűk, számjegyek és _ jel és pont szerepelhet. A forrásfájlok nevében legfeljebb egy pont lehet, és nem lehet olyan forrásfájl, amelyben _ jel szerepel, de pont nem. A pont után nem lehet _ jel.

A programraktár fájljainak felépítése

A modulok

A modulok a gyökérkönyvtár modulok alkönyvtárában lévő könyvtárak. A könyvtárak tartalma:
NévFunkció
descriptionA modul ismertetője. Részletesen leírja a modul által nyújtott szubrutinok és egyéb deklarációk használatát.
shortdescrRövid leírás a modul céljáról.
usedA felhasznált deklarációk listáját tartalmazó fájl. Minden sorba egy azonosító kerül.
subs könyvtárA modul által deklarált azonosítókat tartalmazza. Minden fájl neve egy azonosító, tartalma annak rövid leírása. Ha a programnyelvben nem számítanak a kisbetű-nagybetű különbségek (Pascal ilyen, C++ nem), a fájlnév kisbetűs legyen.
files könyvtárA modul fájljai. Minden programnyelvkez egy a programnyelv nevével megegyező nevű alkönyvtár tartozik, amelyben vannak a modulhoz tartozó forrásfájlok. Ezekbe alkönyvtárakat ne helyezzünk, ha szükséges, tömörítsük egy fájlba a fájlokat/könyvtárakat, és írjuk le a description fájlban, hogy ki kell csomagolni.
examples könyvtárMinden alkönyvtár egy példát tartalmaz.
A modul könyvtárában lévő tex kiterjesztésű fájlok a mathdisplay frissítéskor automatikusan lefordításra kerülnek, és PS-szé, majd PDF-fé konvertálódnak. Ez pl. TeX struktogramok belinkelésére jó.

A példák

A példák a modulok examples alkönyvtárában lévő könyvtárak. A könyvtárak tartalma:
NévFunkció
descriptionA példa ismertetője.
shortdescrRövid leírás a példa funkciójáról.
installA példa részletes telepítési, lefordítási, futtatási utasításai, szükség esetén programnyelvekre és/vagy operációs rendszerekre lebontva.
files könyvtárA példa fájljai. Minden programnyelvkez egy a programnyelv nevével megegyező nevű alkönyvtár tartozik, amelyben vannak a példához tartozó forrásfájlok. Ezekbe alkönyvtárakat ne helyezzünk, ha szükséges, tömörítsük egy fájlba a fájlokat/könyvtárakat, és írjuk le a description fájlban, hogy ki kell csomagolni.
A mathdisplay frissítéskor a példa könyvtárában lévő tex kiterjesztésű fájlok is automatikusan lefordításra kerülnek, és PS-szé és PDF-fé konvertálódnak.

A kategóriák

A kategóriák a gyökérkönyvtár categories alkönyvtárában lévő könyvtárak, amelyeknek a neve a kategória neve. A könyvtárak tartalma:
NévFunkció
shortdescrRövid leírás a kategória tartalmáról.
modulesA kategóriába tartozó modulok listáját tartalmazó fájl. Minden sorba egy modul neve kerül.

A forrásfájlok

A bonyolultabb forrásfájlokba megjegyzéseket, hiszen a programraktár célja nem csak egy programokban felhasználható függvénytár létrehozása, hanem az is, hogy bemutassa az algoritmusokat, megmutassa, hogy hogy lehet hatékonyan megoldani egy-egy programozási feladatot.

Hogy elkerüljük az ékezetes betűk különböző kódolásaiból eredő zavarokat, a forrásfájlokban, főleg a modulookban (de a példákban is) lehetőleg csak a megjegyzésekben használjunk ékezetes betűket. Az azonosítókat angolul írjuk.

Törekedjünk arra, hogy az algoritmusból mindig újrafelhasználható modult készítsünk, ne kész programot, és a keretprogramot példaként tegyük közzé. Ha lehet, a modul ne írjon semmit a képernyőre, és ne olvasson onnan semmit. Ez a keretprogram dolga. A modul, ha mégis beolvas vagy kiír valamit, és lehetőleg a példaprogram is, csak a standard csatornákat használja, pl. semmiképpen ne használja Pascalban a crt unitot, mert az nehézzé teszi a program automatikus futtatását más programból. A példaprogram pl. csak akkor törölje a képernyőt, ha valóbban a teljes képernyőfelületet használja. A példaprogramok ne várjanak Enter-re a befejeződésük után. A fejlesztőkörnyezetek lehetőséget biztosítanak a program kimenetének megtekintésére (pl. Turbo Pascalban Window/User screen), ha pedig parancssorból futtatjuk a programot, felesleges és kényelmetlen. A modul legyen minél szélesebb körben felhasználható, minél jobban bővíthető, és az adatmennyiségre minél kevésbé vonatkozzanak megkötések (pl. használjunk dinamikus memóriát akkor is, ha a közzétett példaprogramban nem is használjuk ezt ki). A példaprogramokban mutassuk is be a modul képességeit, hiszen egy algoritmus sebessége sokszor nem akkor mutatkozik meg, ha 5-10 kézzel bevitt adaton próbáljuk ki, hanem sok MB-os adatfájloknál. Ilyenkor esetleg közzétehetünk az adott példának megfelelő, véletlenszerű adatokkal feltöltött, nagyméretű adatfájlokat generáló programot is.

Mivel lehet, hogy egy program több modult is használ, amelyek mindegyike beilleszti ugyanazt a forrásfájlt, meg kell oldani, hogy ha egy forrásfájl már betöltődött, és újra beillesztésre kerül, akkor a benne lévő deklarációkat a fordító ne olvassa el még egyszer, mert az duplikált azonosító hibaüzenethez vezetne. Ezért a Pascal forrásfájlok elejére helyezzük el a következő direktívákat:
{$IFNDEF filename}
{$DEFINE filename}

, a végére pedig a következőt:
{$ENDIF}
. C, C++ források elejére, külön sorokba:

#ifndef filename
#define filename

, a végére pedig a következőt:
#endif
, ahol filename a forrásfájl neve, a pontot _ jellel helyettesítve.

Hogy a felesleges ütközéseket elkerüljük, ha két forrásfájl nem tartalmaz ugyanolyan nevű azonosítót, ne legyen ugyanaz a nevük. Ezt "A modulok fájljainak listája" oldalon ellenőrizhetjük. Két modulban csak akkor legyen azonos nevű szubrutin, ha azok paraméterezése és funkciója is azonos, csak implementációjuk más. Ha az implementációjuk is azonos, rakjuk őket egy külön modulba. Lehetnek azonos nevű, különböző paraméterezésű (Pascalban overloados) szubrutinok, de ezeknek azonos modulban kell lenniük, és ha egy másik modul szintén implementálja őket, annak az összeset implementálnia kell. (A portolhatóság érdekében Free Pascal esetén is tegyük ki az overload jelzést.) Ha két modul azonos nevű szubrutint tartalmaz, azoknak azonos nevű fájlban kell lenniük, hogy a szubrutint használó program megtalálja.

A forrásfájlokba írjunk copyright információt. Ajánlott copyright információ forrásfájl elejére, megjegyzésben:
Copyright X. Y., évszám(intervallum). Ez a fájl a GNU GPL v2 vagy későbbi változat feltételei mellett terjeszthető, lásd http://fazekas.hu/~gd/mathdisplay/pd/gpl.txt .