Zzzzip
A BASIC compiler

File-név: ZZZIP.COM
Program neve: Zzzip Integer BASIC compiler 1.1
Peter Hiner - 1986
BASIC compiler

1. Bevezetés
2. A ZZZIP futtatása
3. A lefordított program futtatása
4. Problémák kezelése
5. BASIC parancsok
6. Beépített függvények
7. A lefordított programok másolása

1. Bevezetés
A ZZZIP egy Egész értékű BASIC Fordító. A BASIC-ben írt programot átalakítja gépi kódúra a gyorsabb futtatás érdekében. A ZZZIP a nagyobb sebességnövekedést azáltal éri el és az "Egész értékű" elnevezés is arra utal, hogy a BASIC programban szereplő konstansok és változók értékeit egész értékeknek tekinti (azaz a tizedespont utáni számjegyeket nem veszi figyelembe). Ennek következtében van néhány megkötés a ZZZIP használatára vonatkozólag, de ha gondosan követjük a kézikönyv utasításait, a ZZZIP-et könnyen fogjuk kezelni és meglepően jó eredményeket érhetünk el.
Az első nyilvánvaló kérdés: "Hányszor lesz gyorsabb a lefordított programok futása?" A válasz attól függ, hogy milyen típusú BASIC program került lefordításra. Egy olyan program, amely véletlenszerűen megadott számokat rendez sorba, körülbelül 50-szer lenne gyorsabb, mint a BASIC, míg egy string-eket sorbarendező program esetleg csak(!) 12-szer. Másrészt egy olyan program, amely különösebb számolás nélkül ábrázol pontokat és vonalakat, valószínűleg csak kétszer lenne gyorsabb a BASIC-nél (ami még mindig bizonyos haladást jelent). Ha BASIC programunkat úgy módosítjuk, hogy a gépi kódú programoknál alkalmazott módszereket használja, sokkal gyorsabb képernyőkezelést kaphatunk (a szalagon található BENCH. BAS program a gyors képernyőkezelésre ad példát).
Szalagunkon a ZZZIP (mely három részből áll -ZIP, ZIPA, ZIPB) és a BENCH. BAS programok találhatók, ez utóbbi néhány egyszerű rutint tartalmaz, s ezekkel szemlélteti a ZZZIP által biztosított sebességnövekedést.
Javasoljuk, hogy először a BENCH.BAS-t fordítsa le, mert ezáltal jobban megismerheti a ZZZIP használatához szükséges eljárást.

Mi is az a compiler?
A compiler egy fordítóprogram, amely egy magasszintű nyelven (esetünkben BASIC-ben) megírt programot fordít gépi kódú programmá (pontosabban pszeudó-kóddá). Így lehetőségünk van gyorsabb programok készítésére, anélkül, hogy más programozási nyelvet kellene választanunk. A compiler-eknek két csoportja létezik: integer és real fordítók. Az integer fordítók csak egész számokkal tudnak dolgozni, cserébe viszont a lefordított program gyorsabban fut mint a real fordítókkal készített program. A real fordítók nem csak egész számokkal tudnak dolgozni, ezért azonban a lassabb programfutásssal fizetünk.

2. A ZZZIP futtatása
A ZZZIP egyformán jól működtethető szalagon és lemezen. A 2.1 fejezet a szalagon történő használatot írja le, de a lemezes használatra is alkalmazható a nyilvánvaló különbségek (és a 2. 2 fejezet pontjainak) figyelembevételével.

2.1 Szalagos rendszerek
Az indulás a BASIC képernyő-editorából történjék, miután törölt belőle minden más programot. A ZZZIP futtatásához nyomja le a START billentyűt, s az három részletben automatikusan betöltődik. Ha ez megtörtént, a ZZZIP egy szöveg kiírásával jelzi, hogy annak a kazettának a bekészítésére vár, amely a fordítani kívánt BASIC programot tartalmazza. A ZZZIP feltételezi a magnó távvezérlésének lehetőségét (ha nincs ilyen, a PAUSE billentyűt kell használnia). Gépelje be a BASIC program nevét (vagy egyszerűen nyomja meg az ENTER billentyűt, s ezáltal az első szóba jöhető program betöltődik). A ZZZIP a BASIC programot a memória egy lefoglalt területére tölti be. Megjegyezzük, hogy az ENTERPRISE 64 gépen ennek a nagysága 16K-ra korlátozódik, s ha a BASIC program túl nagy, a ZZZIP a "Memory Full" (a memória megtelt) üzenetet írja ki.
Ezután a ZZZIP egy szöveg kiírásával jelzi, hogy annak a kazettának a bekészítésére vár, amelyre programjának lefordított változatát ki akarja menteni, továbbá a magnó RECORD billentyűjének lenyomására. Gépelje be azt a nevet, amelyet a lefordított programnak kíván adni, ezután a ZZZIP működésbe lép. (A programnevekről a 2. 3 fejezet ír bővebben). A ZZZIP négy menetben dolgozza fel a BASIC programot, s kiírja a BASIC sorok sorszámait is, így teszi lehetővé a program fordításának nyomonkövetését.
Ha az első két menet alatt a ZZZIP szembekerül valamilyen problémával (például egy BASIC paranccsal amelyet nem tud kezelni), egy üzenetet hagy a kritikus sorszámnál, majd rátér a következő sorra egészen addig, míg ennek a menetnek a végére nem ér. Ily módon rendelkezésre áll azoknak a sorszámoknak a listája, amelyekhez az adott menetben problémás sorok tartoztak, s a mellettük feltüntetett hibaüzenetek jelentését a 4. fejezetben található útmutatások alapján értelmezhetjük.
Rendszerint ebben a részben a ZZZIP probléma nélkül fut, s a harmadik és negyedik menettel folytatódik, amikor is kiír a szalagra egy kis BASIC betöltő programot, majd magát a lefordított programot. Ez utóbbi két menet alatt is van egyfajta ellenőrzés, s ha előfordul valamilyen hiba, a ZZZIP kiír egy üzenetet és azonnal leáll.
Végezetül a ZZZIP megkérdezi, hogy akarja-e más egyéb programok fordítását. Ha igen, a ZZZIP visszatér ahhoz a ponthoz, amelynél a BASIC forrásprogram betöltődik.

2.2 Lemezes rendszerek
Mindenekelőtt át kell másolnia a ZIP, ZIPA, ZIPB és BENCH.BAS programokat szalagról lemezre.
A BASIC forrásprogram vagy a lefordított program nevének bevitele során beírhatók olyan többletinformációk, mint pl. a lemezegység azonosítója vagy a directory elérési út. A forrás és a lefordított program lehet különböző lemezen is, ha szükséges, s ha csak egy lemezegység áll rendelkezésre, a szokásos lemezcserélésre szólító üzenetek jelennek meg.

2.3 Programnevek
A különböző lemezrendszerek kompatibilitását néhány programnévre vonatkozó szabály biztosítja.
Ha a lefordított programot nem látja el névvel (csak megnyomja az ENTER billentyűt), a ZZZIP a default, azaz alapértelmezésű nevet fogja használni: "Z".
A megkívánt név formátuma a következő: egy legfeljebb 8 karakteres főrész, melyet egy esetleges kiterjesztés követ (a pont írásjel és még legfeljebb 3 karakter), mely a program típusát jelzi. A ZZZIP a lefordított program nevét mindig 12 karakterre korlátozza. Amennyiben talál kiterjesztést, akkor ezt a BASIC betöltőhöz csatolja, a lefordított programnak a ".Z" kiterjesztést adja. Ha nincs kiterjesztés, és a név főrésze nem hosszabb 8 karakternél, a ZZZIP egyszerűen hozzácsatolja a lefordított program nevéhez a ".Z" kiterjesztést.
A programok elnevezésére a következő konvenciót javasoljuk:

PROGRNEV.BAS (BASIC változat)
PROGRNEV.ZIP (Betöltő program)
PROGRNEV.Z (Lefordított változat)

3. A lefordított program futtatása
A lefordított programok majdnem ugyanúgy kezelhetők, mintha BASIC programok volnának. A legfontosabb különbség az, hogy egyszerre csak egy lefordított program tartható a memóriában és ez a 0. program kell, hogy legyen. A programon belül a RUN parancs más programok automatikus betöltésére és futtatására használható (szabadon keverve a BASIC és a lefordított programokat).
Minden lefordított programot egy kis BASIC betöltő program előz meg, ez automatikusan betölti a lefordított programot és ellenőrzi a program méretét, beleértve a változók által igényelt helyet, stb. Előfordulhat, hogy egy nagyon nagy program lefordítása után megjelenik az "Insufficient memory" (nem elegendő memória) üzenet. Ilyenkor meg lehet próbálni a gép teljes újraindítását és a program újratöltését, de ha ez nem segít, az eredeti program módosításával kell csökkenteni az igényelt memória mennyiségét.
Ezek után a lefordított programnak ugyanazokat az eredményeket kell szolgáltatnia futtatáskor, mint az eredeti BASIC programnak, csak gyorsabban. A STOP billentyűvel megszakítható a program futtatása, a START billentyűvel pedig újraindítható.
Megjegyezzük, hogy a CONTINUE nem működik, valamint a SAVE és a LIST sem használható lefordított programnál.
Ha valamilyen okból a lefordított program futása mégsem lenne tökéletes, nézzen utána a lehetséges okoknak a 4. fejezetben. Mindamellett javasoljuk, hogy futtassa le mégegyszer a lefordított programot és próbálja megkeresni azt a helyet ahol elszáll a program, ily módon leszűkítheti a BASIC programban történő hibakeresés területét.

4. Problémák kezelése
A felmerülő problémák kezelésének egyetlen járható útja az eredeti BASIC programba való visszatérés és annak módosítása. Jóllehet, a ZZZIP-et alapos vizsgálatoknak vetették alá, nem lehetetlen, hogy esetleg hibát talál benne (egy még ismeretlen tulajdonságát!), de ezekben az esetekben is a BASIC programot kell módosítania úgy, hogy a ZZZIP azt pontosan le tudja fordítani. Ne feledje el annak a lehetőségét sem, hogy hiba következhet be a BASIC program betöltése során is.
A ZZZIP a következő hibaüzeneteket adhatja:

5. BASIC parancsok
A ZZZIP megtart csaknem minden olyan parancsot, amely egy BASIC programon belül általában végrehajtható. A Későbbiekben látni fogja, hogy néhány parancs használatakor óvatosnak kell lennie vagy némelyeket egyáltalán nem használhat, a többi viszont korlátozás nélkül rendelkezésre áll.

A főprogramban lévő PRINT TEN utasítás hatására a 10-es szám kerül majd nyomtatásra. Az 1010-es sor egy egyszerű LET utasítást tartalmaz, s a ZZZIP az ott lévő TEN változót lokálisnak tekinti. Ellenben, ha a TEN nevet az 1010-es sorban valamilyen más típusú utasításban használnánk, ez a TEN függvény rekurzív CALL hívását okozná és a lefordított programban hibásan működne.
Hasonlóan, ha olyan függvényből akarunk értéket visszaadni, amely segédváltozókat tartalmaz paraméterátadás céljából, szintén használhatunk lokális változót. Például a LET DOUBLE=X*2 megengedett egy olyan blokkban, melynek a fejléce DEF DOUBLE(X), s a főprogramban lévő PRINT D0UBLE(3) hatására a 6 kerül majd nyomtatásra. Egyszerű függvénynevek is átadódhatnak egy másik függvényen belül felhasználandó paraméterként, így a főprogramban lévő PRINT DOUBLE(TEN) a 20 kinyomtatását eredményezi. Ezek a példák hibátlanul működnek egy lefordított programban.
Megjegyezzük, hogy a ZZZIP nem fogadja el a REF parancsot és hibaüzenetet ír ki. Valami más, a BASIC programéhoz hasonló eredményeket szolgáltató módszert kell találnia.

6. beépített függvények
A ZZZIP megtart minden beépített függvényt, habár néhány esetben korlátozza használatukat, ezekről külön említést teszünk. Talán meglepő lehet, hogy a ZZZIP megtartja a SIN és COS trigonometrikus függvényeket, hisz ezek valójában nem kompatibilisek az egész értékű matematikával. Ezeket használni is nehezebb, addig ne is foglalkozzunk velük, amíg nincs elegendő tapasztalatunk a ZZZIP működtetésében.

7. A lefordított programok másolása
A lefordított programok csupán a SAVE parancs használatával nem másolhatók szalagra. További másolatok készítésének egy módja az lenne, ha a BASIC programot ismételten lefordítanánk. Egy másik módszer, amely csak egy szalagos készülék használatát igényli, azt a lehetőséget használja ki, amelyet az egyes lefordított programokat megelőző BASIC betöltő program tartalmaz. A Basic képernyőeditorból indulva, a bent lévő programok törlése után, folytassa a következőkkel:

  1. Helyezze be a lefordított programot tartalmazó szalagot és készüljön fel a betöltésre.
  2. Gépelje be a LOAD "XXX"-et (ahol XXX a program neve).
  3. Helyezze be a célszalagot (azt, amelyikre a másolatot szeretné kapni) és készüljön fel a kimentésre.
  4. Gépelje be a SAVE "XXX"-et.
  5. Helyezze be a lefordított programot tartalmazó szalagot és készüljön fel a betöltésre.
  6. Gépelje be a RUN 100-at.
  7. A program jelezni fogja, hogy mikor kell betennie a célszalagot és előkészülnie a kimentésre.
  8. Ekkor nyomja le az ENTER billentyűt és a lefordított program kiíródik a célszalagra.