Felhasználói Kézikönyv


TARTALOM

1. ÖSSZEÁLLÍTÁSI UTASÍTÁS

BEVEZETÉS

Ez a fejezet a számítógép összeállításának és a magnetofon, ill. a külső programtár használatának az alapjait tartalmazza. A számítógép használatának egyéb részleteiről a későbbi fejezetekben lesz szó. Aki még soha nem használt ilyen számítógépet, figyelmesen olvassa el ezt az útmutatót, mielőtt hozzáfog a gép összeállításához.
A szállítódobozban a következőket kell találnunk:

A - a számítógépet,
B - a botkormány karját,
C - a tápegységet,
D - a tv-csatlakozókábelt,
E - a magnetofon-csatlakozókábelt,
F - ezt a kézikönyvet,
G - egy magnetofonkazettát,
H - egy külső programtárat (cartridge).
A kazettán levő programok futtatásához szükségünk lesz a fentieken kívül egy kazettás magnetofonra is.

MŰSZAKI ADATOK:
RAM: 128 Kbyte
ROM: 32 Kbyte
Feszültség: 220V
Frekvencia: 50Hz
Teljesítményfelvétel: 25 VA
Érintésvédelmi osztály: II.

Az Enterprise különböző részeivel együtt a házi számítógépek új nemzedékéhez tartozik. A bővítő csatlakozó segítségével a gép alkalmassá tehető nagyobb számítási feladatok végrehajtására is. Más számítógépekhez, illetve külső készülékek vezérléséhez megfelelően csatlakoztatható.

1 - újraindító nyomógomb
2 - nyomtató csatlakozó
3 - kazettás magnetofon csatlakozóaljzat
4 - monitor csatlakozóaljzat
5 - csatlakozóaljzatok külső botkormányok illetve más kiegészítők számára
  6 - csatlakozóaljzat más számítógépek csatlakoztatására
7 - fejhallgató kimenet
8 - TV-antenna csatlakozóaljzat
9 - csak különleges tv-hez használt csatlakozóaljzat
10 - tápegység csatlakozóaljzat
11 - külső programtárak csatlakozóaljzata

 

A SZÁMÍTÓGÉP ÖSSZEÁLLÍTÁSA
A számítógép összeállítását a következő sorrendben ajánljuk:

1. Húzzuk rá a beépített botkormány karját a gép oldalán lévő szárára! 3. Helyezzük be a tv-csatlakozókábel hosszú pecekkel ellátott csatlakozóját a számítógép tv feliratú aljzatába, a vezeték másik végét pedig a tv antenna-csatlakozójába!
2. Csatlakoztassuk a tápegység csatlakozóját a gép hátoldalán lévő POWER feliratú aljzatba! 4. Helyezzük a géphez tartozó külső programtárat a csatlakozóaljzatba, és nyomjuk be addig, amíg bepattan!

5. Kapcsoljuk be a tv-t és illesszük be a tápegység csatlakozóját a hálózatba. A készüléken ekkor egy piros lámpácskának kell kigyulladnia. A számítógép először néhány másodperc alatt ellenőrzi önmagát, majd - feltéve, hogy a tv-t előzőleg behangoltuk- a következő felirat jelenik meg a képernyőn:


E N T E R P R I S E
c 1985 Intelligent Software Ltd

A TV BEHANGOLÁSA
A számítógép a 36-os tv-csatornán sugározza a képet, tehát - a tv használati utasításának segítségével - erre a csatornára kell hangolnunk a készüléket. Mivel a számítógép hangjelet nem sugároz, a hangot kapcsoljuk ki a tv-n.
Ha a kép inog, a betűk szellemképesek, esetleg az egész kép féloldalra dől vagy ugrál, akkor óvatosan hangoljunk utána, amíg tiszta képet nem kapunk. A programozható tv-ken célszerű külön csatornát fenntartani a számítógép számára, ezzel sok időt és fáradságot 'takaríthatunk meg.

A BILLENTYŰZET
A számítógépet leggyakrabban a billentyűzet segítségével irányítjuk. Az ehhez szükséges legfontosabb tudnivalók:
Ha egy billentyűt lenyomva tartunk, akkor kis idő múlva a gép ismételni kezdi a lenyomott betűt mindaddig, amíg el nem engedjük.
Nagybetűk használatához a kívánt betűvel együtt a SHIFT gombot is le kell nyomnunk.
Ha több nagybetűt akarunk egymás után beírni, akkor nyomjuk le együtt a LOCK és a CTRL billentyűket. Ettől kezdve a betűk leütésekor a megfelelő nagybetű jelenik meg. Kisbetűket a SHIFT gomb lenyomásával írhatunk. Ez csak a betűbillentyűkre érvényes, a felső sorban levő számbillentyűkre nem.
Ahhoz, hogy ezeknél is felcseréljük a SHIFT-tel együtt, ill. nélküle való leütés hatását, ne a CTRL, hanem a SHIFT billentyűt nyomjuk le a LOCK-kal együtt a szolgáltatás bekapcsolásakor.
Az utóbbi két szolgáltatás kikapcsolásához a LOCK billentyűt kell még egyszer leütnünk.
A CTRL billentyű - hasonlóan a SHIFT-hez - a különböző egyéb billentyűk jelentését változtatja meg. Erről a későbbi fejezetekben lesz szó részletesen. Az ALT billentyűvel speciális jeleket tudunk -a többi billentyű segítségével előállítani. A LOCK billentyűvel ez is állandósítható.
A funkcióbillentyűkkel egyes parancsok könnyebben begépelhetők, pl. a START parancs kiadható az F1 billentyűvel is. Az egyes funkcióbillentyűk hatása megváltoztatható, de a gép bekapcsolásakor már valamennyinek van valamilyen alapértelmezése. Erről a későbbi fejezetekben olvashatunk majd részletesebben.
Az ENTER billentyű a számítógépnek szóló üzeneteket zárja le. Ezek általában vagy programsorok, vagy közvetlenül végrehajtandó parancsok. Az ERASE, ill. a DEL billentyűvel a kurzortól balra vagy jobbra levő betűt lehet törölni, ha véletlenül hibás szöveget írtunk. Ha ezekkel együtt a SHIFT vagy a LOCK billentyűt is leütjük, akkor egyszerre több betűt is törölhetünk. Általában a begépelt betűk felülírják a már képernyőn levőket.
Az INS billentyűvel szóközöket tudunk beszúrni a meglevő szövegbe. Ha a CTRL billentyűvel együtt ütjük le, akkor a számítógép nem írja felül a meglevőket, hanem beszúrja az új betűket. A szolgáltatás kikapcsolásához újra a CTRL és az INS billentyűket kell együtt lenyomni.
A számítógépen egyszerre több egymásba ágyazott program is futhat. Az ESC billentyűvel a soron következő programba térünk át.
A CTRL és F3 billentyűk együttes leütésével oszlopokat jelölhetünk ki a képernyőn. Ez után a TAB billentyű segítségével mindig a kővetkező oszlop elejére tudunk ugrani.
A HOLD billentyűvel az éppen futó programot tudjuk felfüggeszteni, majd ismételt leütésével folytatni.
A STOP billentyűvel megszakíthatjuk a futó programot, különböző parancsokat adhatunk ki, majd - bizonyos esetekben - a CONTINUE paranccsal folytathatjuk azt.
A beépített botkormánnyal a villogó kurzort mozgatni tudjuk a képernyőn.

A MAGNETOFON CSATLAKOZTATÁSA
A kazettás magnetofon csatlakozókábelének mindkét végén négy-négy dugasz található. Ezek közül az egyik nagyobbat helyezzük a számítógép IN feliratú aljzatába, míg a vezeték másik végén a neki megfelelő dugaszt a magnetofon EAR jelzésű csatlakozójába.
Ha a magnetofon távvezérelhető, akkor csatlakoztassuk az egyik kisebbik dugaszt a számítógép REM 1 jelű kimenetébe, a kábel másik végén levő csatlakozót pedig a magnetofon távvezérlő bemenetébe. Ezután kapcsoljuk be a távvezérlést az F4 billentyű leütésével, ettől kezdve -a gyorstekercselést kivéve - állandóan lejátszás állásban tarthatjuk a magnetofont, mert a számítógép automatikusan be-, ill. kikapcsolja, amikor szükséges.

GYÁRI PROGRAMOK HASZNÁLATA
A számítógéphez sokféle program illeszthető, a géppel együtt kapott kazetta is ilyen kész programokat tartalmaz. A kazettán van egy oktatóprogram a gép kezelésének elsajátítására, ezen kívül egy a gép jellegzetességeit bemutató program és néhány játékprogram.
A programok betöltéséhez helyezzük a kazettát a magnetofonba és tekercseljünk a legelejére. Nyomjuk le az F1 (START) billentyűt és indítsuk el a magnetofont. A képernyő tetején ekkor a SEARCHING felirat látható, amely a program betöltődésének megkezdése után felcserélődik a LORDING..... szöveggel, ahol a pontok helyén a program neve áll. Minden kazettán tárolt programnak van ilyen neve, amelynek alapján könnyen megkülönböztethetjük őket akkor is, ha egy kazettán több program van.
A megfelelő hangerő beállításához segítségül a képernyő felső sávjában kis színes négyszög látható, amely vagy piros, vagy zöld, vagy színe a kettő között váltakozik. A beállítás akkor tökéletes, ha a négyzet színe váltakozik, ha piros, akkor lassan addig csökkentsük a hangerőt, amíg el nem érjük az ideális szintet.
A programok betöltése kazettáról hosszabb ideig tart, az igazán nagy programoké akár öt percig is. Ha a korábban ismertetett jelzéseket látjuk a képernyőn, akkor nyugodtak lehetünk, a betöltés rendben folyik. Bármilyen hiba esetén a gép azonnal jelezni fog.
A mások által írt programok betöltése előtt figyelmesen olvassuk el a betöltési útmutatót, ez mindig tájékoztat a programok beolvasásáról.
Ha gyári programot használunk, gyakran megesik, hogy a billentyűk nem úgy működnek, ahogy azt megszoktuk. Ennek gyakori oka, hogy a program nem BASIC nyelven íródott, hanem a számítógép saját nyelvén, amelynek gépi kód a neve. Ilyenkor ne ijedjünk meg a szokatlan működéstől, hanem tanulmányozzuk át a program mellé kapott használati útmutatót.
A programokat tároló kazettákat mindig gondosan kezeljük: Ne hagyjuk a kazettákat a tűző napon!
Vigyázzunk, hogy ne legyenek nedvesek vagy porosak! Használat után mindig tegyük el őket a tokjukba!
Soha ne érintsük meg a szalagot az ujjunkkal!
Ne hagyjuk a kazettákat olyan elektromos gépek közelében, amelyek mágneses teret gerjesztenek (televízió, rádió, hangszórók)!
Rendszeresen tisztítsuk a magnetofon lejátszófejét!

KÜLSŐ PROGRAMTÁR HASZNÁLATA
A külső programtárak használata sokkal egyszerűbb, mint a kazettáké. Az ilyen tár egy kis doboz, amelynek az egyik oldalán ún. étcsatlakozó vagy csatlakozósáv van, egy műanyag lemez fémcsíkokkal, amelyek a számítógépet kötik össze a doboz áramköreivel.
A számítógéppel kapott programtár az IS-BASIC rendszert tartalmazza, amelynek segítségével BASIC nyelvű programokat tudunk írni, ill. futtatni. Természetesen más programok is kaphatók ilyen kivitelben, csatlakoztatás után ezek is azonnal használhatók. A program futtatásához csak a tárat kell elhelyeznünk a ROM-BAY feliratú csatlakozóaljzatba, majd kétszer megnyomni a gép hátulján levő újraindító (RESET) gombot. Ha más programot akarunk használni, akkor kapcsoljuk ki a gépet, és a programtárat kicserélve útra kapcsoljuk be.
Ha semmilyen programtárat sem csatlakoztathatunk a géphez, akkor a beépített szövegszerkesztőt használhatjuk, amelyről a későbbi fejezetekben olvashatunk bővebben.

EGYÉB PROBLÉMÁK
Ha véletlenül hibásan gépelünk be valamit, a számítógép jelzi azt. Ezután kényelmesen kijavíthatjuk a hibát és az ENTER leütésével most már helyes parancsot adhatunk. Ha teljesen összezavarodnánk, nyomjuk meg az újraindító gombot és kezdjük elölről a munkát.
Ne féljünk attól, hogy hibás billentyű leütésével elronthatjuk a számítógépet - a gép nem megy tönkre attól, hogy nem ért bennünket. Sőt, nyugodtan próbáljunk játszadozni a billentyűzettel és figyeljük meg, mit tapasztalunk.
FIGYELEM! A számítógép tetejének bal oldalán levő bordázattal egyes alkatrészek felesleges hőjét adja le a gép. Nem baj, ha ez a rész forró, ez normális működési jelenség.

A SZÁMÍTÓGÉP ÜZENETEINEK NYELVE
A forgalomba kerülő Enterprise számítógépek egyik része angol, másik része német nyelvű üzeneteket ír ki. Ennek az az oka, hogy a különböző gépek más-más forrásból érkeztek az országba. Ez az eltérés azonban sem a gép kezelését, sem programozását nem módosítja. A programokat, parancsokat mindig a gép programozási nyelvén, azaz BASIC nyelven kell begépelnünk.
A különböző gépeken az egyes billentyűk elhelyezése is eltér, főleg az írásjeleké. A betűbillentyűk közül csak az Y és a Z cserél helyet: az angol nyelvű gépeken Y van az U mellett alulról a harmadik sorban, a német nyelvűeken pedig a Z. Ez azonban a szövegek begépelését nem nehezíti meg, mert a saját gépén mindenki a megfelelő helyen megtalálja az egyes jeleket.
Néhány számítógép mindkét nyelven tud üzeneteket küldeni, ezeken a ":UK" paranccsal tudunk angol, a ":BRD" paranccsal pedig német nyelvű üzemmódba átkapcsolni. Vigyáznunk kell azonban arra, hogy ezeken a gépeken a billentyűk feliratai a német üzemmódnak felelnek meg, tehát angol üzemmódba átkapcsolva az egyes billentyűk leütésekor nem mindig a rajtuk levő jelek jelennek meg a képernyőn. Éppen ezért csak azoknak ajánljuk az angol üzemmód használatát, akik tudnak angolul. Látni fogjuk azt is, hogy ezeknek az üzeneteknek a megértéséhez nincs szükség nyelvtudásra, ugyanakkor a gépelést igencsak megnehezíti, ha a billentyűkön nem a megfelelő feliratok vannak.
Az eltérő nyelvhasználat egyetlen ponton módosítja az utasításokat. Az angol nyelvű gépeken a csatornaszám előtt mindig font jel áll, míg a német nyelvűeken kettős kereszt ( # ). Erre nagyon gondosan oda kell figyelnünk, és a példaprogramok begépelése során is gépünk nyelvének megfelelően kell alkalmaznunk.
A számítógép általában két dolog kapcsán ír ki számunkra valamilyen üzenetet. Az egyik, amikor hibát észlel, a másik, amikor a szövegszerkesztő használata közben valamire fel akarja hívni a figyelmünket. A hibaüzenetek listáját mindhárom nyelven - angol, német, magyar - megtaláljuk a könyv végén, a velük foglalkozó fejezetben. Az egyes üzenetek jelentését a számuk alapján tudjuk a magyar nyelvű táblázatból kikeresni.
A szövegszerkesztő üzeneteit szintén külön fejezet tárgyalja.


2. A PROGRAMOZÁS ALAPJAI

BEVEZETÉS
Ebben a fejezetben a számítógép használatának alapjaival foglalkozunk. Tanulás közben sok-sok példaprogramot, gyakorlatot próbálunk ki, ez ugyanis a legjobb módszer a gép lehetőségeinek kitapasztalására. A szakkifejezéseket is csak fokozatosan kezdjük majd megismerni és használni.
A fejezet az egyes kérdéseket a tanulás számára szerintünk a legkedvezőbb sorrendben tárgyalja, de az egyes alfejezetek önállóan is megérthetők, így mindenki a számára legkényelmesebb módon sajátíthatja el a tudnivalókat. Az ez után következő fejezet a programozás minden részletét mégegyszer ismerteti majd, de ennél részletesebben és pontosabban. Végül az utolsó fejezetben az Enterprise használatának aprólékos ismertetését találhatjuk, ezt azonban csak azután érdemes kézbe venni, ha jól megismertük az alapokat.

AZ ELSŐ PROGRAMOK
Gépeljük be a következő programot. Vigyázzunk, mert a gép igen finnyás, a legapróbb gépelési hibákat sem fogadja el! Mielőtt az egyes sorokat az ENTER-rel lezárnánk, ellenőrizzük, hogy nincs-e benne hiba. Ne feledkezzünk meg a sorok elején álló számokról, ezek. igen fontosak, ugyanakkor a számok után következő szóközöket nyugodtan elhagyhatjuk, ezeket a gép automatikusan beszúrja majd. Figyeljünk arra, hogy a számítógép külön jelet használ a nullára (0) és a nagy o betűre (O).


100 PROGRAM "Ellipse.bas"
110 GRAPHICS
120 PLOT 640,360,
130 !
140 DO
150   FOR SUGAR=250 TO 1 STEP-16
160     SET INK RND(3)+1
170     PLOT ELLIPSE SUGAR,SUGAR,
180     PLOT PAINT
190   NEXT SUGAR
200   PING
210 LOOP
220 !
230 END

A GÉPELÉSI HIBÁK JAVÍTÁSA
A gépelési hibákat igen könnyen kijavíthatjuk. Ha még mindig abban a sorban áll a kurzor, ahol a hiba van, akkor az ERASE billentyűvel töröljük a sort addig, amíg a hibához nem érünk, majd innen kezdve újra írjuk a sori. Ha már más sorban vagyunk, akkor a beépített botkormánnyal a hibás sor végére visszük a kurzort, és az előzőek szerint járunk el. Javítás után ne felejtsük el ENTER-rel lezárni a sort és a kurzort visszavinni az első üres sor elejére. A PROGRAMSZÖVEG SZERKESZTÉSE c. alfejezetből még a javítások sok más módját is megismerjük majd.

A PROGRAMOK FUTTATÁSA
Miután begépeltük a programot, egy új sor elejére írjuk be a RUN kulcsszót, majd küldjük el az ENTER-rel. Ugyanezt érhetjük el, ha lenyomjuk az F1 funkcióbillentyűt, ami után már az ENTER-t sem kell használnunk. A funkcióbillentyűkről később még részletesen lesz szó. Ha a programban valamit elrontottunk, akkor kis idő múlva a gép visszajelez, leggyakrabban a "nicht verstanden / not understood" üzenettel. Ettől ne ijedjünk meg, üssük le az F5 majd az F2 billentyűket, mire újra feltűnik a képernyőn a programunk. Javítsuk ki a hibákat és próbáljuk meg újra futtatni.
A számítógépnek szánt parancsainkat mindig az ENTER billentyűvel kell zárnunk. Amíg ugyanis nem küldjük el vele a parancsot, addig a gép nem kezdi meg a végrehajtást, mert arra vár, hogy hátha meggondoljuk magunkat és módosítjuk a sort. A funkcióbillentyűk lenyomása után nem kell ENTER-t ütnünk, erről később még részletesen is olvashatunk.
A program megállítására üssük le a STOP billentyűt, mire a "STOP in Zeile... / STOP key pressed ... " üzenet jelenik meg, a pontok helyén egy számmal.
Ha mégis folytatni akarjuk a programot, akkor gépeljük be a CONTINUE parancsot, vagy - ami ezzel egyenértékű - üssük le egyszerre a SHIFT és az F1 billentyűt. Ezek hatására a program onnan folytatódik, ahol megszakítottuk.
A HOLD billentyű leütése felfüggeszti a program futását, a folytatáshoz a billentyűt újra le kell ütni. Ez lehetőséget nyújt arra, hogy megállítsuk a programot, ha mondjuk csöng a telefon, vagy kimerevítsük a képernyőn állandóan változó képet, ha jobban meg akarjuk vizsgálni.
Ha már unjuk a programot, akkor állítsuk meg, és gépeljük be a következő utasítást:


145 SET PALETTE RND(256), RND(256), RND(256), RND(256)

Majd indítsuk újra RUN-nal.

A KULCSSZAVAK GÉPELÉSE
Amikor a gép a programot listázza, akkor a BASIC kulcsszavakat - amilyen például a RUN, GRAPHICS, DO stb. - mindig nagybelükkel írja, ezzel is hangsúlyozva őket. Mi azonban nyugodtan írhatjuk kisbetűvel, a gép tökéletesen megérti ezeket is.
A szakszavak magyarázatát a függelékben találhatjuk meg.

MI IS A PROGRAM?
A program a számítógépnek szóló utasítások sorozata, amely megmondja a gépnek, hogy mit kell tennie. Ebben nincs semmi különleges vagy titokzatos, a gép ugyanis magától semmire sem képes, mindenre nekünk kell utasítanunk. Éppen ezért a programoknak nagyon pontosaknak és részleteseknek kell lenniük. A programozás, mint minden más időtöltés, lehet komoly feladat, de lehet csupán szórakozás is.

A KÉPERNYŐ TÖRLÉSE
A programot megállítva, a képernyőn mindenféle ábrát láthatunk, ami igen zavaró, mert nem tudjuk tőle figyelemmel kísérni, mit is gépelünk. Töröljük tehát le a képernyőt a TEXT paranccsal vagy az azzal azonos hatású F5 billentyűvel. Ha a programban nem adtuk ki a GRAPHICS utasítást, akkor a CLEAR SCREEN paranccsal is törölhetjük a képet. A képernyőt törlő utasítások a programsorokat nem módosítják, azokat a gép nem felejti el, hanem bármikor listázhatók.

A PROGRAM LISTÁZÁSA
Valahányszor programot szeretnénk módosítani vagy olvasni, szükségünk van a program szövegének listájára. Ezt a LIST paranccsal vagy az F2 billentyűvel írathatjuk ki. Ilyenkor a program sorait a gép a sorszámok sorrendjében írja ki. Ha a program túl hosszú és nem fér ki a képernyőre, akkor a felső sorok lecsúsznak a képernyőről. Ahhoz, hogy ezeket a sorokat is elolvashassuk, a listázást bármikor felfüggeszthetjük a HOLD billentyűvel vagy megállíthatjuk a STOP-pal.

A PROGRAM TÖRLÉSE
Ha már meguntuk a programot és másikat szeretnénk kipróbálni, a NEW paranccsal törölhetjük. Az utasítás hatására a gép a programot végleg elfelejti, ha újra futtatni szeretnénk, akkor újra be kell gépelnünk.

PÉLDAPROGRAMOK
A következő programok a gép képességeit. lehetőségeit mutatják be. Próbáljuk ki őket!


10 PROGRAM "Csatorna.bas"
20 !
30 ! Ez a program egy szines
40 ! csatornat rajzol a kepernyore
50 ! felrobbano tuzlabdakkal
60 !
100 GRAPHICS HIRES 256
110 LET X=640:LET Y=360
120 FOR R=1 TO 255
130   SET INK R
140   LET A=X-R-220:LET A1=Y-R-50
150   LET C=X+R+220:LET C1=Y+R+50
160   PLOT A,A1;A,C1;C,C1;C,A1;A,A1
170   PRINT R
180 NEXT
190 FOR LABDA=1 TO 100
200   CALL TUZLABDA(RND(254)+1,X,Y)
210 NEXT
220 !
230 END
240 !
250 !
1000 DEF TUZLABDA(SZIN,A,B)
1010   SET LINE MODE 3
1020   SET INK(SZIN)
1030   FOR JEL=1 TO 2
1040     FOR SUGAR=1 TO 650 STEP 30
1050       PLOT A,B,ELLIPSE SUGAR,SUGAR,
1060     NEXT
1070   NEXT
1080   SET LINE MODE 0
1090 END DEF

100 PROGRAM "Rendez.bas"
110 ! Ez a program 10 szamot
120 ! rendez nagysag szerint sorba
130 ! ----------------------------
140 NUMERIC TOMB(1 TO 10)
150 NUMERIC VALT,SZAM,MAX
160 CLEAR SCREEN
170 PRINT AT 10,10:"SZAMRENDEZES"
180 FOR N=1 TO 10
190   PRINT AT 14,10:"Az ";N;"-ik szam";
200   INPUT PROMPT ":":TOMB(N)
210   PRINT AT 14,25:" "
220 NEXT N
230 CLEAR SCREEN
240 PRINT AT 20,20:"Rendezek..."
250 LET VEG=10
260 FOR X=1 TO 10
270   LET MAX=0
280   FOR Y=1 TO VEG
290     IF TOMB(Y)>MAX THEN LET MAX=TOMB(Y)
300     IF TOMB(Y)=MAX THEN LET SZAM=Y
310   NEXT Y
320   LET VALT=TOMB(VEG)
330   LET TOMB(VEG)=MAX
340   LET TOMB(SZAM)=VALT
350   LET VEG=VEG-1
360 NEXT X
370 FOR X=1 TO 10
380   PRINT TOMB(X)
390 NEXT X
400 END

100 PROGRAM "Terulet.bas"
105 ! Ez a program kiszamitja egy kor
110 ! keruletet ill. teruletet
120 ! -------------------------------
130 LET A$="A kor "
140 LET B$="Add meg a kor sugarat:"
150 NUMERIC SUGAR,TERULET,KERULET
160 DO
170   CLEAR SCREEN
180   PRINT AT 10,10:"1. TERULET"
190   PRINT AT 11,10:"2. KERULET"
200   PRINT AT 12,10:"3. BEFEJEZES"
210   DO
220     PRINT AT 15,10:"Add meg a valasztasod"
230     INPUT AT 16,10,PROMPT "szamat ":SZAM
240   LOOP WHILE SZAM<1 OR SZAM>3 OR SZAM<>INT(SZAM)
250   CLEAR SCREEN
260   IF SZAM=1 THEN
270     INPUT AT 10,1,PROMPT B$:SUGAR
280     LET TERULET=PI*SUGAR^2
290     PRINT AT 15,5:A$;"terulete:";
300     PRINT AT 16,4:TERULET
310     CALL WAIT
320   ELSE IF SZAM=2 THEN
330     INPUT AT 10,1,PROMPT B$:SUGAR
340     LET KERULET=2*PI*SUGAR
350     PRINT AT 15,1:A$;"kerulete:"
360     PRINT AT 16,1:STR$(KERULET)
370     CALL WAIT
380   END IF
390 LOOP WHILE SZAM<>3
400 END
490 DEF WAIT
495   PRINT AT 22,2:"Nyomj meg egy gombot!"
500   DO
510     GET KEY$
520   LOOP UNTIL KEY$<>""
530 END DEF

A PROGRAMOK MÓDISÍTÁSA
Próbáljuk meg módisítani ezeket a programokat. Ha a program kulcsszavait változtatjuk meg, könnyen oda juthatunk, hogy a gép számára érthetetlenné, hibássá válik a program. Például a számokat sorba rendező programban a 260-és sort írhatnánk úgy is, hogy:

260 FOR X=1 TOO 10

Ekkor a program első részének lefutása után a gép magáll és hibaüzenetet küld, mivel nem érti ezt a sort:

***Not understood
260 FOR X=1 TOO 10

A különböző hibaüzenetek listáját a függelékben találhatjuk meg.
Az idézőjelek között álló szövegeket nyugodtan módosíthatjuk, ennek hatására csak a program üzenetei változnak meg. Megváltoztathatjuk a program szövegében levő számokat is, és a programokat lefuttatva megfigyelhetjük a változtatás hatását. Általában azt fogjuk tapasztalni, hogy vagy az változik meg, hogy valamit hányszor csinál a program, vagy az, hogy hova írja ki az üzeneteit a képernyőn. Egyes számok egészen más dolgokat jeleznek, például színeket. Az ilyen számokat úgy hívjuk, hogy kódszámok, róluk még bővebben is olvashatunk majd a továbbiakban.

ÚJRAINDÍTÁS
Előfordulhat, hogy annyira összezavarjuk a programot, hogy szeretnénk elölről kezdeni a munkát. Ilyenkor nyugodtan nyomjuk meg az újraindító (RESET) gombot, ezzel ugyanazt érjük el, mintha ki-, majd újra bekapcsolnánk a gépet azzal a különbséggel, hogy a korábban beírt programsorok nem vesznek el, bármikor kilistázhatók. Ez természetesen csak végszükség esetén célszerű, más esetekben elég a STOP gombbal megállítanunk a programot.

NÉHÁNY SZÓ A PROGRAMOZÁSRÓL
Az eddigiekből megismertünk néhány programot. de működésükkel még nem foglalkoztunk. Arra a kérdésre, hogy mi is a program; azt válaszoltuk, hogy a gép számára adott utasításaink sorozata. A program tehát egy probléma megoldásának a módját írja le a gép számára. A számítógéppel egyrészt növelhetjük és meggyorsíthatjuk számítási képességeinket, másrészt természetesen futtathatók játékprogramok és saját szórakoztató programjaink is.
A számítógépek az utasításokat vagy szavak, vagy számsorozatok formájában tudják felhasználni. Mi szavakat fogunk használni az Enterprise irányításához. Minden egyes ilyen szó egy-egy kis utasítás, belőlük a programot ugyanúgy rakhatjuk össze, ahogy a kirakós játékot elemeiből, vagy egy történetet szavakból, azaz egyre nagyobb részeket, utasításcsomagokat, önálló részfeladatokat képezünk belőlük. A programozás lényege: parancsokat adni a gépnek arra, hogy mit és milyen sorrendben csináljon.
A következő ábra is azt mutatja, hogyan lehet egy nagyobb feladatot - a lemezhallgatást - kisebb végrehajtandó munkákra felbontani.

1.Kapcsolja be a lemezjátszót
2.Keresse meg a lemezt
3. Vegye ki a borítójából
4.Törölje le
5.Tegye rá a lemeztányérra
6.Állítsa be a megfelelő sebességet
7.Tegye a hangszedőt a lemez fölé
8.Engedje le a hangszedőt
9.Állítsa be a hangerőt

PROGRAMOZÁSI NYELVEK
Ugyanúgy, ahogy egy emberrel is sokféleképpen lehet beszélgetni, a számítógépnek is sokféle módon adhatunk utasításokat. Sőt, hasonlóan az emberi nyelvekhez, sokféle számítógépes nyelv is létezik. Ezek a nyelvek tartalmaznak bizonyos korlátozásokat, ugyanakkor más feladatok elvégzésére igen jól alkalmazhatóak. Egyes nyelvekkel jól tudunk kezelni sok-sok elemből álló adathalmazokat, listákat, névsorokat, másokkal grafikus ábrákat, képeket tudunk kényelmesen készíteni, megint mások pedig arra jók, hogy könnyen lehet velük megtanulni a programozás alapjait.

MI A BASIC?
Az a nyelv, amit ebben a könyvben ismertetünk, a BASIC. Mivel a BASIC az angol nyelv egyes szavait használja, méghozzá az eredetivel megegyező formában és nagyon hasonló tartalommal, ezért az angolul tudók számára a programok még akkor is könnyen érthetőek, ha a programozásban egyelőre nincs gyakorlatuk. Azoknak sem kell azonban megijedniük, akik nem tudnak angolul, mert nagyon kevés és igen könnyen megjegyezhető szót kell megtanulniuk.
Ebben a könyvben a programok mind BASIC nyelven íródtak és amíg a géphez az IC-BASIC külső programtár csatlakozik, addig a gép is ezen a nyelven ért. Ne felejtsük el, hogy a könyvben levő információk a BASIC nyelvre, annak is az IS-BASIC nevű változatára vonatkoznak más nyelvek ettől formájukban és gondolkodásmódjukban is teljesen eltérőek.

KULCSSZAVAK
A BASIC nyelv által használt szavakat kulcsszavaknak nevezzük, ezek mindegyike egy vagy több feladat végrehajtására utasítja a számítógépet. Például a PRINT kulcsszó az utána álló számokat, ill. karaktertáncokat íratja ki a képernyőre. Sok más kulcsszó is van, ezek egy részével már megismerkedtünk (pl. RUN, LIST, CONTINUE), másokról majd csak később lesz szó.

KARAKTERLÁNCOK
Karakterláncokkal a leggyakrabban a PRINT utasításokban találkozunk, pl. a PRINT "HELLO" utasításban az idézőjelek között álló szöveg egy karakterlánc. Ezeket a számítógép is úgy tekinti, mint betűről betűre átmásolandó idézeteket, tehát ha valamit idézőjelek közé írunk, akkor az a képernyőn változtatás nélkül jelenhet meg a program futása során. Ha magát az idézőjelet szeretnénk megadni, akkor azt kétszer kell egymás után leírnunk az idézetben, például a PRINT "elotte""utana" utasítás hatására a képernyőn a következő szöveg jelenik meg:
elotte"utana

KARAKTEREK
A karakter szóval még sokszor találkozunk, ezért tudnunk kelt, mik is azok a karakterek. A számítógép által használt valamennyi betű, számjegy, jel, írásjel, mindazok az elemek, amelyek a képernyőn egy betűnyi helyet foglalnak el, karakterek. A gép által használható összes karakter együttesét a gép karakterkészletének nevezzük.

A VÉGREHAJTÁSI SORREND
A BASIC programsorok elején álló szám igen fontos a végrehajtás szempontjából.
Gépeljük be azt az utasítást, hogy:
PRINT "HELLO"
Miután elküldtük a parancsot az ENTER-rel, a gép rögtön végrehajtja azt és kiírja a következő sorba az idézőjelek között álló szöveget, azaz azt hogy HELLO. Korábban viszont tapasztaltuk már azt, hogy a programjainkban lévő utasításokat csak akkor hajtja végre a gép, ha lefuttatjuk a programot. A különbséget a sor elején álló sorszám okozza!
A BASIC programok sorokból állnak, minden sornak van saját sorszáma. Ha olyan sorszámmal írunk be egy sort, amilyen már van a programban, akkor a korábbi sort felülírja az új. Egy sort tehát úgy is törölhetünk, hogy
begépeljük a számát és elküldjük az ENTER-rel, ezáltal egy üres sor keletkezik, amit a gép nem a tárol, így ezt a sort kitöröltük. Egyszerre több sort a DELETE paranccsal törölhető, például a DELETE 10 TO 100 parancs a 10-töl 100-ig terjedő sorokat törli.
Az, hogy milyen sorrendben írjuk be a sorokat; soha nem lényeges. A gép mindig számsorrendbe rendezi őket, és csak ez a sorrend számit
A program futása során a számítógép a legkisebb sorszámú sornál kezdi a végrehajtást és végighalad a legnagyobbig, feltéve, hogy bizonyos utasításokkal nem módosítjuk ezt. Ezek a módosítási lehetőségek - amint azt még látni fogjuk- igen fontosak a programozás szempontjából. Az egyik ilyen parancs az END, aminek hatására a gép befejezi a program végrehajtását, úgy tekinti, hogy a programnak itt a vége. Sok más végrehajtási sorrendet módosító utasítás is létezik, ezeket majd később ismerjük meg.

PARANCSMÓD
Ha egy utasítást sorszám nélkül adunk meg, azaz azonnal végrehajtatjuk a géppel, akkor a gépet parancsmódban használjuk. Ilyen parancsmódú utasítás a RUN vagy a LIST, de gyakran használjuk a számítógépet parancsmódban számológépként is.
A billentyűzeten könnyen megtalálhatjuk e négy alapművelet jelét, bár meg kell szoknunk, hogy itt az osztás jele a "/" és nem a ":", a szorzásé pedig a "*" és nem a kereszt vagy a pont. A PRINT kulcsszó után írva egy képletet a gép kiszámítja az értékét, és az eredményt azonnal kiírja. Például a
PRINT 2+2
hatására válaszul a következő sorban megjelenik a 4. Ezekben a képletekben mind a négy alapműveletet használhatjuk, sőt lehetőségünk van számításokra is.


PRINT SQR(100)

A fenti sor hatására a számítógép a 100 négyzetgyökét írja ki (angolul a négyzetgyök square root). A gép sok ehhez hasonló, ún. beépített függvényt ismer, ezeknek a listáját a függelék tartalmazza.
A parancsmódban elvégzett számítások a programsorokat nem módosítják, tehát azokat nyugodtan használhatjuk akár a program egyes számításainak ellenőrzésére is. A legtöbb BASIC utasítás parancsmódban ugyanolyan hatású, mint a program futása közben. Nyugodtan próbáljuk ki a még ismeretlen szavakat parancsmódban; ha valamit nem értünk, keressük ki a kulcsszavak táblázatóból a szó ismertetését. Ez azt is tartalmazza, hogy mely szavak nem használhatók parancsmódban.

A VÁLTOZÓK
A változókat kis példákból fogjuk megismerni. Képzeljünk el két dobozt, legyen a jelük X és Y. Mindkettőben egy-egy számot tehetünk be, azt később onnan kivehetjük vagy egy másikkal felcserélhetjük. Mindkét dobozban egyszerre csak egy elem lehet. A változók is ilyen kis dobozokként képzelhetők el. A következő program beolvas két számot, beteszi őket egy-egy dobozba, más néven változóba, majd kiszámítja a két doboz, azaz a két változó tartalmának összegét és azt beteszi egy harmadik változóba. Ez a program anélkül is érthető, hogy lefuttatnánk.


10 INPUT PROMPT "X erteke=":X
20 INPUT PROMPT "Y erteke=":Y
30 LET Z=X+Y
40 PRINT X;"+";Y;"=";Z
50 END


MEGJEGYZÉSEK A PROGRAM SZÖVEGÉBEN
Azok a sorok, amelyek felkiáltójellel kezdődnek, csak a számunkra fontos emlékeztető szövegeket tartalmazzák, amik alapján később is könnyen meg tudjuk majd állapítani, hogy a program egyes részei mit csinálnak. A számítógép ezeket a sorokat nem törli a program szól, de nem hajtja őket végre, mert a felkiáltójelből észreveszi, hogy ezek a sorok nem neki szólnak. Ha a programsorban levő utasítások után egy felkiáltójelei teszünk a sor további részét a gép megjegyzésként kezeli. A közvetlenül a sorszám után álló felkiáltójelet a REM kulcsszóval is helyettesíthetjük (angolul megjegyzés = remark). A megjegyzések segítségesei könnyen megjelölhetjük azokat sorokat, amelyeket később esetleg ki akarunk keresni.
Soha ne felejtsük el, hogy a megjegyzések sokkal olvashatóbbá teszik a program szövegét. Bár a végrehajtás szempontjából nincs jelentőségük, a használó számára mégis fontosak!

AZ INPUT PROMPT UTASÍTÁS
Ennek a parancsnak a hatására a gép egy kérdést ír ki a lépernyőre, majd a választ egy változóba olvassa be.
Ha csak az INPUT utasítást használjuk önmagában, akkor a gép csak egy kérdőjelet ír ki, és egy piros kurzor jelenik meg, amikor ezt az utasítást hajtja végre és a válaszra vár. A PROMPT és az utána következő karaktersorozat a program futása közben a képernyőre másolódva emlékeztet bennünket, hogy minek az értékét akarja a program beolvasni. Ilyen emlékeztetőt más módon is írhatunk:


10 PRINT "X erteke=";
20 INPUT X
30 PRINT "Y erteke=";
40 INPUT Y

Ez egy kicsit hosszadalmasabb megoldás, de a hatása is más, igaz csak abban az apró részletben, hogy a kérdőjel, aminek a kiírását a gép az INPUT PROMPT utasításnál elhagyta, most megjelenik.

A VÁLTOZÓK
A változók olyan jelképes nevek, amelyekkel különböző számokat jelölhetünk, ill. az általuk jelölt számokat meg is változtathatjuk. Ha az X változóval most éppen a 4000 számot jelöljük, akkor azt szoktuk mondani, hogy az X változó értéke 4000.
A változókat gyakran használjuk olyankor, ha olyan számmal szeretnénk számolni, aminek az értékét nem tudjuk előre. A könyv elején levő példaprogramok is használnak változókat, vagy mert egyes értékeket maga a program számít ki, vagy mert más számokat nekünk kell beírni akkor, amikor a program már fut. Változót használhatunk akkor is, ha egy hosszú számot akarunk többször használni egy programban, és nem akarjuk minden alkalommal kiírni, inkább csak hivatkozunk rá a nevével. A most következő program ismét új felhasználási lehetőséget mutat be.


10 LET A=0 ! az A kezdoerteke 0
20 DO ! ciklus eleje
30   LET A=A+1 ! noveld eggyel az A-t
40   PRINT A, ! ird ki az A erteket
50 LOOP UNTIL A=20 ! ugorj a ciklus elejere, ha az A nem 20
60 END


Most az A a ciklus számlálója. A ciklus belsejében a gép mindig eggyel növeli az A értékét és kiírja azt. A ciklus végén megvizsgálja, hogy az A nem 20-e. Ha nem, akkor újra a ciklus elejére ugrik, ha igen akkor véget ér a program. A 40. sorban levő vessző a kiírt képet teszi szebbé, hatását könnyen érzékelhetjük, ha nélküle is lefuttatjuk a programot.

A VÁLTOZÓNEVEK
A változóknak igen sokféle nevet adhatunk, az X, Y, Z csak egy-egy példa. A nevek legfeljebb 31 karakter hosszúak lehetnek, a gép ilyen hosszú neveket tud megkülönböztetni. Valójában ilyen hosszú nevek használata már számunkra is kényelmetlen, általában nyolc-tíz karakter elegendő ahhoz, hogy a változó feladatát jól jelölő nevet alkossunk. A változóneveknek igen fontos feladata az is, hogy ha később javítani vagy módosítani akarjuk a programot, akkor könnyen felismerjük a nevekből az egyes változók feladatát. Két szám összegét tároló változót tehát célszerű mondjuk "Osszeg"-nek hívni, valaki nevét tároló változót pedig "Nev$"-nek. (A karaktersorozatokat tároló változókról majd később lesz szó.)
A gép számára mindegy, hogy egy változónevet kis- vagy nagybetűvel írunk, tehát vigyázzunk, mert a "VALTOZO, valtozo, Valtozo" szavak mind ugyanazt a változót jelölik. A változónevekben nem minden karakter használható. A névnek mindig betűvel kell kezdődnie, és utána a névben is csak a betűk, a számok, az aláhúzás és a pont használható - eltekintve a karaktersorozatokat tároló változókat jelölő "$" jeltől. A


Szam, A2$, OSSZEG$, Hello1, Resz.ossz.3, Nev, A1234

nevek tehát helyesek, az
En valtozom, 2A, !!!A$, <>3MOST, 3*szam

nevek viszont nem.

A VÁLTOZÓK KEZDŐÉRTÉKE
A számlálóprogram első sorában az A kezdőértékére 0-t adtunk meg. Ha ezt a sort kihagytuk volna, akkor a program nem működne, mert amikor a 30-as sorban az A értékét kellene eggyel növelnie, nem tudná, hogy mihez képest növelje. Az olyan programokban azonban, ahol egy változó értékét INPUT utasítással olvassuk be, nem szükséges kezdőértéket megadni, csak arra kell vigyáznunk, hogy mielőtt beolvasnánk az értékét, ne tároljunk olyan értéket a változóban, amire később szükségünk lehet, mert ez az érték elvész.

A VÁLTOZÓK HASZNÁLATA
A változók működésének jobb megismeréséhez változtassuk meg a számlálóprogram első sorát "LET A= 0 "-ról "LET A=3"-ra. Futtassuk le így is a programot!
A változók alapvetően különböznek az első hasonlatként használt dobozoktól abban, hogy ha értéküket áttöltjük egy másik változóba, akkor a forrásváltozó sem veszti el az értékét. Tegyük fel, hogy S=0 és G=0. Ha most kiadjuk a LET S=G parancsot, akkor a G értékét áttöltjük az S-be, azaz az S értéke 10 lesz, de a G sem veszíti el az értékét, az is megmarad 10 értékűnek. Ha a G-t nullázni akarjuk, akkor a LET G=0 parancsot kell kiadnunk.
A LET kulcsszó után a számítógép mindig egy változónevet vár, amelynek az értéke vagy 0, vagy ha korábban már adtunk neki értéket, akkor valami más. Az értékadó utasítások elejére nem mindig kötelező kitenni a LET kulcsszót, de a gép ezt automatikusan beírja mindenhova, mivel ez megkönnyíti a programban levő ilyen utasítások megtalálását. Néhány kivételtől eltekintve a BASIC kulcsszavak is használhatók változónévként, de ilyenkor mindig ki kell tenni a LET szócskát, hogy a gép fel tudja ismerni az értékadást.
A következő program a változók használatának most ismertetett alapjait mutatja be néhány példán keresztül.


10 LET A$="A ket szam osszege="
20 LET OSSZEG=0
30 ! Az OSSZEG a lenti osszeadas eredmenyet fogja tartalmazni
40 INPUT PROMPT "Gepeld be az elso szamot:":SZAM1
50 INPUT PROMPT "Gepeld be a masodik szamot:":SZAM2
60 ! a 40-es az 50-es sor a ket osszeadando olvassa be
70 LET OSSZEG=SZAM1+SZAM2
80 ! Az OSSZEG nevu valtozo felveszi SZAM1 es SZAM2 osszegenek erteket
90 PRINT A$;OSSZEG
100 ! az A, es az OSSZEG valtozo kiirasa egymas melle
110 END

A MATEMATIKAI KIFEJEZÉSEK
A számítógép használata során igen gyakran kell különböző matematikai kifejezéseket használnunk. Ezekben mind számokat, mind változóneveket használhatunk az értékek jelölésére, az elvégzendő műveletek meghatározására pedig úgynevezett operátorokat. Az operátoroknak két nagy csoportja van, a műveleti jelek és a relációs jelek. A műveleti jelek közül négyet (+, -, *, /) már ismerünk, az ötödik a hatványozás jele, a ^. A 2^3 kifejezés jelentése tehát "kettő a harmadikon", más néven "kettő köbe", értéke ennek megfelelően 8.
A relációs jelek a következők:

Van ezen kívül még egy különleges operátor, a "= ". Ezt összehasonlításban használva relációs jelnek számít, jelentése: egyenlő. A LET kulcsszó után azonban nem operátor, hanem az értékadás jele.
Lássunk példát a relációs operátorok használatára.


10 PROGRAM "Szam.bas"
20 INPUT PROMPT "Adj meg egy szamot:":A
30 ! Beolvassuk a megvizsgalando szamot
40 IF A<0 THEN PRINT "Ez a szam negativ."
50 IF A=0 THEN PRINT "Ez nulla."
60 ! a 40. sor egyszeru dontes, ha
70 ! A negativ, akkor ezt kiirja.
80 ! IF (magyarul: ha) szocska utal
90 ! a vizsgalatra. Ha a feltetel
100 ! teljesul, akkor a sor hatralevo
110 ! reszet vegrehajtja a gep,
120 ! egzebkent nem.
130 IF A>0 AND A<50 THEN PRINT "Ez 0 es 50 koze esik."
140 IF A>50 AND A<100 THEN PRINT "Ez 50 es 100 kozott van."
150 IF A>100 THEN PRINT "Ez a szam nagyobb mint 100."
160 END

Arról, hogy a számítógép hogyan tud döntéseket hozni, később még részletesen is szó lesz, most csak az az érdekes, ahogy a relációs jeleket használja a számok és a változók összehasonlítására. Az ilyen relációs kifejezéseknek nincs szám jellegű értékük, csak "igen vagy nem" típusú választ adnak.

A MŰVELETI JELEK VÉGREHAJTÁSI SORRENDJE
Legyen példánk a 4+2*3-5 kifejezés,. Mennyi ennek az értéke? Ha balról jobbra sorban elvégezzük a műveleteket, tizenhármat kapunk. A számítógép mégis azt válaszolná, hogy 5.
A gép a különböző műveleteket ugyanis nem azonos súllyal kezeli, hanem ún. prioritási sorrendben dolgozza fel. Először a hatványozásokat végzi el, mivel ezeknek a legmagasabb a prioritása, ezután a szorzásokat és az osztásokat, végül az összeadásokat és a kivonásokat. Az azonos prioritású műveletek között viszont már a balról- jobbra szabály szerint halad.

Nézzünk erre egy példát:
Legyen a kifejezés: 2+3*7-5+21/3+4*3^2
Először a hatványozás kerül sorra: 3^2=9
Most a kifejezés így néz ki: 2+3*7-5+21/3+4*9
Ezután a szorzásokat és osztásokat végzi el, sorban haladva balról jobbra:
3*7=21, 21/3=7, 4*9=36
A kifejezés újabb alakja: 2+21-5+7+36
Végül ezeket a műveleteket is elvégzi:
2+21=23, 23-8=18, 18+7=25, 25+36=61
A kifejezés értéke tehát 61.

Amint láttuk, a műveletek prioritási sorrendje jelentősen befolyásolja a gép számításainak az eredményét. Ha meg akarjuk változtatni a műveletvégzési sorrendet, akkor hasonlóan a megszokotthoz, zárójeleket kell használnunk. Figyeljünk azonban arra, hogy a zárójeleken belül már újra érvényes a prioritási sorrend. Rövid példaként nézzük meg a következő kifejezés kiszámítását:
(2+3)*7/(5*2^3-5)
5*7/(5*8-5)
5*7/(40-5)
5*7/35
35/35
1

azaz ennek a kifejezésnek az értéke 1.

A zárójeleken belül természetesen további zárójel-párokat is használhatunk, melyekben megint továbbiakat stb. Próbáljunk ki más kifejezéseket is, ezeket legkönnyebben parancsmódban a PRINT kulcsszó után írva számíttathatjuk ki. A kifejezésekben törtszámok is előfordulhatnak, de ilyenkor vessző helyett ponttal kell elválasztanunk az egész és a törtrészt. Ha előjeles számot használunk, akkor azt leggyakrabban zárójelbe kell tennünk azért, hogy a gép meg tudja különböztetni az előjelet a műveleti jelektől, pl.:
-1*(0.5*(-6.5)) = 3.25

A KIÍRÁSOK FORMÁZÁSA
A PRINT utasítások lezárására többféle jelet használhatunk. Ha semmit sem írunk a végére, akkor az utasítás szerinti szám(ok), illetve karaktersorozat(ok) kiírása után a gép a következő sor elejére áll és a következő PRINT utasítás tartalmát ott kezdi kiírni. Ha egy PRINT utasításba semmit sem írunk, azaz "üres" PRINT-et adunk ki, akkor ezzel egy üres sort hagyhatunk ki, feltéve, hogy éppen egy új sor elején állunk. Az utasítások végére pontosvesszőt téve azonban egymás után ugyanabba a sorba írathatunk ki.


10 PRINT "Szervusz! "
20 PRINT "En "
30 PRINT "vagyok "
40 PRINT "a "
50 PRINT "szamitogep "

Ennek a programnak a hatására a következő jelenik meg a képernyőn:

Szervusz!
En
vagyok
a
szamitogep


Ha viszont a sorok végére egy-egy pontosvesszőt teszünk, akkor ez:
Szervusz! En vagyok a szamitogep
Egészítsük ki a programot a következő sorral:
15 PRINT
Ez egy üres PRINT, mégse kapunk üres sort, mert a 10-es sorban levő PRINT utasítás végén álló pontosvessző hatására a gép még a "Szervusz" szó sorában állt, amikor kiadtuk az üres PRINT-et a 15-ös sorban. Ennek hatására tehát csak a következő sor elejére állunk. Az üres PRINT teljesen úgy működik, mintha egy elektromos írógépen leütnénk a "kocsivissza - soremelés" gombot. Ha a 17-es sorba is írunk egy üres PRINT-et, akkor már tényleg kapunk egy üres sort.

10 LET A=0
20 DO
30   LET A=A+1
40   PRINT A,
50   ! a PRINT vegen allo veszo hatasara a gep a kepernyo kovetkezo oszlopanak elejere all
60 LOOP UNTIL A=20
70 END


A 40 karakter széles képernyőt a gép nyolc karakter széles oszlopokra osztja fel, és a vessző hatására mindig a legközelebbi következő oszlop elejére áll. Ezzel a módszerrel könnyen elválaszthatjuk egymástól a számokat (pontosvesszőt használva ugyanis olvashatatlanul összefolynának - próbáljuk ki), ugyanakkor sokkal kevesebb sort kell elhasználnunk, mintha minden számot új sorba íratnánk.

A "PRINT AT" UTASÍTÁS
A képernyőre a gép az ábrának megfelelően 24 sorban és 40 oszlopban tud karaktereket kiírni. Minden ilyen ún. karakterpozícióra az ábrán látható sor- és oszlopszámának a megadásával tudunk hivatkozni. A PRINT utasításban az AT kulcsszót követően egymástól vesszővel elválasztva adhatjuk meg annak a karakterpozíciónak a sor-, majd az oszlopszámát, ahonnan kezdve a képernyőre akarjuk írni a karaktersorozatot. A kiírandó szöveget kettősponttal kell elválasztanunk a pozíciószámoktól. Az ilyen PRINT utasítás végén ugyanolyan jelek állhatnak és ezek hatása is ugyanaz, mint a korábbiak. Próbaképpen futtassuk le a következő programot:


10 CLEAR SCREEN
20 PRINT AT 1,10:"Ez a teteje"
30 PRINT AT 12,10:"Ez a kozepe"
40 PRINT AT 24,10:"Ez az alja"
50 PRINT AT 2,1:;
60 END

Próbáljuk ki az 50. sor nélkül is!

A 80 KARAKTERES KÉPERNYŐ
A "TEXT 80" parancs hatására a képernyőn nem 40, hanem 80 oszlop jelenik meg, az egyes karakterek azonban csak fele olyan szélesek lesznek, éppen ezért csak igen rosszul olvashatók. Ez a parancs egyidejűleg törli is a képernyőt. A 40 karakter széles képernyőre a "TEXT 40" paranccsal térhetünk vissza.

A PROGRAMSZÖVEG SZERKESZTÉSE
Az egyszerű gépelési hibák kijavítására már megismertünk egy módszert, de a program szövegének jelentősebb módosítása ezzel nagyon bonyolult lenne. A gép több szövegszerkesztési módszert is kínál számunkra, ezzel is megkönnyítve a programok megváltoztatását.

AZ ÚJRASZÁMOZÁS
A korábbi példaprogramokban általában tízesével számoztuk a sorokat és nem egyesével. Ez nem véletlen, ugyanis csak így van módunk arra, hogy a korábbi sorok közé újakat illesszünk be. Ha azonban a 10-es és a 20-as sor közé már mind a kilenc lehetséges új sort (11, 12,... 18, 19) beszúrtuk, akkor más módszerrel kelt a további soroknak helyet csinálni. Ilyenkor kell használnunk a RENUMBER (magyarul újraszámozás) parancsot. Ennek a parancsnak a hatására a gép átsorszámozza a sorokat, mégpedig száztól kezdődően tízesével. A szolgáltatás a SHIFT+ F3 billentyűkkel is elvégezhető. Az átsorszámozás kezdőértékét az AT kulcsszó után adhatjuk meg, még a parancson belül. Ehhez hasonlóan megadhatjuk a sorszámozás lépésközét is, a STEP kulcsszó után írva, de a RENUMBER parancson belül. A programot tehát például a RENUMBER AT 150 STEP 3 utasítással úgy sorszámoztatjuk újra, hogy az első sor sorszáma a 150 lesz, a lépésköz pedig 3.
A későbbiek során találkozni fogunk olyan utasításokkal is, amelyek nem a programszövegre vonatkozó parancsok, hanem a program szövegében vannak, és mégis valamely sor sorszámára hivatkoznak. A RENUMBER parancs az ilyen utasításokban átírja a hivatkozott sorszámot az új megfelelőre, így nekünk ezzel már nem kell törődnünk.

A PARANCSOK PARAMÉTEREI
A programok szövegére vonatkozó parancsok legtöbbjének vannak paraméterei, azaz bizonyos számok, amelyek a parancs működésére jellemzők. A RENUMBER parancsnál ilyen a kezdősorszám és a lépésköz. Ezeket minden olyan parancsban, ahol egyáltalán értelme van és lehetséges, az AT és a STEP kulcsszavak után adhatjuk meg.
Egyes parancsok hatását korlátozni lehet a programnak egy részére. Ilyenkor általában a program sorszámaira kell hivatkoznunk és a korlátozást közvetlenül a parancsszó után kell írnunk. Ezt a lehetőséget a már korábban megismert DELETE parancs példáján ismerjük meg.
A parancs hatását korlátozhatjuk egyetlen sorra, ha a sor számát írjuk a kulcsszó után. Tehát a DELETE 100 parancs csak a 100-as sort törli. Ha a program egy szakaszát akarjuk törölni, akkor a legelső és a legutolsó törlendő sor számát kell megadnunk, először a kisebbiket, majd a TO kulcsszóval tőle elválasztva a nagyobbikat. DELETE 100 TO 200 törli a 100. és a 200. sor közötti programsorokat.
Az ilyen tartománymegadásnál a program legelső sorára hivatkozhatunk a FIRST szóval is, ez kényelmesebb és egyszerűbb, mintha előtte meg kellene néznünk a sorszámát. "DELETE FIRST TO 100" a 100-as sorig törli a programot. Az előzőhöz hasonlóan a program legutolsó sorára is hivatkozhatunk a LAST kulcsszóval. DELETE FIRST TO LAST az egész programot törli, mintha csak a j NEW parancsot adtuk volna ki.
Az általunk ismert parancsok közül a LIST és a RENUMBER parancsban adható meg még a hatókör. Természetesen valamennyi ilyen parancs paraméterének van alapértelmezése is, ha tehát paraméterek nélkül adunk ki egy parancsot, akkor azt a gép alapértelmezési értékekkel hajtja végre. Például a LIST parancs alapértelmezése: LIST FIRST TO LAST.

Az AUTO PARANCS
A programsorok begépelését meggyorsítja az AUTO parancs, hatására a gép a kezdősorszámtól kezdve a lépésköznek megfelelő értékkel növekvő sorszámokat ír ki, amelyek után nekünk csak a megfelelő utasításokat kell begépelnünk. A következő sorszámot mindig az ENTER hatására írja ki a gép. A szolgáltatást vagy a STOP billentyűvel, vagy egy üres sor elküldésével tudjuk kikapcsolni.

A JAVÍTÁSOK VÉGLEGESÍTÉSE
Ha a program képernyőre listázott szövegét módosítjuk, akkor a gép először csak a képernyőn végzi el a változtatásokat. A valódi módosítás csak akkor következik be, amikor a megváltozott sort elküldjük az ENTER billentyűvel. Ehhez nem kell a sor végére mennünk, azt a programsoron - amely esetenként több képernyősorra is kiterjedhet - belül bárhol megtehetjük. Javítások után azonban soha ne felejtsük el ENTER-el elküldeni a sort, mert különben a gép - nem veszi tudomásul a módosításunkat.

A BESZÚRÁS ÜZEMMÓD
Az eddigiek során mindig azt tapasztaltuk, hogy a begépelt karakterek a kurzor helyén jelentek meg és a korábban ott levőket eltüntették, mintegy felülírták. A gép lehetőséget nyújt arra is, hogy a meglevő betűket ne veszítsük el, hanem a sor kurzortól jobbra eső része mindig úgy csússzon el jobbra, hogy az új karakterek is a régiek közé beszúrva jelenhessenek meg. Ezt a szolgáltatást a CTRL és az INS billentyűk egyidejű lenyomásával tudjuk be-, ill. kikapcsolni.
Természetesen előfordulhat az is, hogy a jobbra mozduló karakterek nem férnek el a képernyőn és eltűnnek annak jobb oldali szélén. Ilyenkor ezek nem vesznek el, a program újralistázásakor rendesen megjelennek, addig pedig a sorszélén ">" jel figyelmeztet bennünket arra, hogy nem látható az egész sor. Ha mégis látni akarnánk, akkor a CTRL és az F1 billentyűket együtt lenyomva, újrarendeztethetjük a szöveget a képernyőn.

A KURZOR MOZGATÁSA
Azt már megszokhattuk, hogy a kurzort a beépített botkormánnyal irányíthatjuk. Most csupán arra a szolgáltatásra szeretnénk felhívni a figyelmet, hogy a képernyő felső vagy alsó szélét elérve és a kurzort tovább mozgatva a kép soronként lépni kezd, és a korábban eltűnt sorok újra láthatóvá válnak. Egy hosszú program listáját tehát mintegy mozgatható ablakon keresztül tudjuk megnézni.
Ha fel-le lépegetve a botkormánnyal egy időben lenyomjuk a SHIFT gombot is, akkor nem egy sort, hanem egy teljes képernyőnyit tudunk lépni a kívánt irányba. A SHIFT helyett a CTRL billentyűt használva egy-egy bekezdésnyi (programok listáiban: utasításnyi) szöveget ugorhatunk át egyetlen lépéssel. Az oldalirányú mozgásnál a CTRL billentyűvel együtt használva a botkormányt szavanként, a SHIFT-tel együtt pedig a sor elejére, ill. végére tudunk lépni.
A következő táblázat a szövegtörlés, ill. beszúrás lehetőségeit foglalja össze.

Feladat
Billentyű
Hatás
Bal oldali karakter törlése:
A kurzortól balra karaktert törli és a sort összevonja
ERASE
A kurzort egy pozícióval balra mozdítja, ha a sor elején állt, akkor a sort az előző sorhoz fűzi.
Bal oldali sorrész törlése:
A sor elejétől a kurzorig törli a sort, a maradékot a sor elejére viszi.
SHIFT+ERASE
A kurzor a sor bal szélére kerül.
A jobb oldali karakter törlése:
A kurzor alatti karaktert törli, és a sor jobb oldali részét balra lépteti.
DEL
A kurzor nem mozdul. Ha a sor végén állt, akkor a következő sort ehhez csatolja.
A bal oldali sorrész törlése:
A kurzortól a sor végéig mindent töröl.
SHIFT+DEL
A kurzor nem mozdul.
A bal oldali szó törlése:
A kurzortól balra lévő szó törlése.
CTRL+ERASE
A kurzortól balra lévő pozíciónál kezd törölni. Csak a betűket és a számokat tekinti a szavak részének, az ezektől eltérő karaktereket nem veszi figyelembe.
A jobb oldali szó törlése:
A kurzortól jobbra lévő szót törli.
CTRL+DEL
A kurzor alatti pozíciótól indul, egyebekben az előzővel megegyezik.
A karakter beszúrása:
A kurzortól jobbra lévő karaktereket egyel jobbra tolva üres helyet hagy a kurzornak.
INS
Beszúrás üzemmódban a szóköz billentyűvel azonos hatású, csak a kurzort nem mozgatja.
Sor beszúrása:
A kurzortól jobbra lévő karaktereket egy sorral lejjebb lépteti.
SHIFT+INS
Ha a kurzor a sor elején áll, akkor egy üres sort állít elő.
Beszúrás üzemmód ki / be:
A beszúrás és felülírás üzemmód között kapcsol át.
CTRL+INS
Másfajta kurzor jelenik meg az üzemmódtól függően.

A SZÖVEGSZERKESZTŐ

A gép egyik leghasznosabb szolgáltatása, amely lehetőséget nyújt különböző szövegek - levelek, tanulmányok - legépelésére és ha sornyomtató is rendelkezésünkre áll, akkor a kinyomtatására is. A számítógép előnye az írógéppel szemben, hogy egyszerű javítási és sokféle speciális szövegformázási lehetőséget kínál.
Az Enterprise beépített szövegszerkesztője akkor is használható, ha semmilyen programtárat sem csatlakoztatunk a géphez, ilyenkor bekapcsoláskor rögtön a szövegszerkesztő jelentkezik. A BASIC rendszerből a TYPE paranccsal vagy a SHIFT+ F8 billentyűvel léphetünk a szövegszerkesztőbe, ilyenkor a gépben tárolt BASIC programok törlődnek, a képernyő alsó és felső részén pedig a funkcióbillentyűk hatását ismertető címkék tűnnek fel.
Figyelem! Ha korábban megváltoztattuk volna a gép karakterkészletét. akkor mielőtt a szövegszerkesztőbe lépnénk, állítsuk vissza az eredetit!
A szövegszerkesztő nem értelmezi a begépelt szöveget, tehát sem hibaüzeneteket nem kapunk, sem a megszokott szövegrendezési parancsokat nem használhatjuk. Az ENTER csak az írógépeken szokásos "kocsivissza - soremelés" műveletét végzi, de erre a sorok végén nincs szükség. A szövegszerkesztőbe beépített szolgáltatás ugyanis azokat a szavakat, amelyek a sor végén túlnyúlnának, automatikusan átmásolja a következő sor elejére (angol jelölése: word wrap). Az ENTER nem a sorok, hanem a bekezdések végét jelzi. Egyes szövegformázási szolgáltatások ugyanis egy-egy teljes bekezdésre vonatkoznak.
A szöveg módosítására minden, a BASIC rendszerben megszokott szolgáltatás használható. A következőkben ismertetendő szolgáltatások a szövegszerkesztőn kívül is működnek, de funkciójuk alapján elsősorban ide tartoznak:

SPECIÁLIS SZOLGÁLTATÁSOK
Ezeket a szolgáltatásokat a funkcióbillentyűkkel és a CTRL, ill. az ALT billentyűkkel működtethetjük.

CTRL + F1 - újraformázás
A bekezdés újra eligazítása, elsősorban szavak törlése, ill. beszúrása után, ha a sorhosszak nagyon különbözők.

ALT + F1 - kiegyenlítés és újraformázás
A kiegyenlítés a szavak olyan elrendezése a bekezdés soraiban, hogy a sorok eleje és vége függőleges oszlopot alkosson az újságok hasábjaihoz hasonlóan.

CTRL + F2 - középre állítás
A szövegsor középre állítása, ami elsősorban címsorokban, fejlécekben hasznos.

ALT + F2 - a tabulátorok törlése
Az írógéphez hasonlóan beállítható tabulátorpozíciók törlése, az újak beállítása előtt.

CTRL + F3 - tabulátor beállítás/törlés
A kurzor oszlopába tabulátorpozíció beállítása, vagy az ott levő törlése.

ALT + F3 - vonalzósor ki / be
A vonalzósor megjelenítésének ki- és bekapcsolása a képernyő tetején, amely a bal, ill. a jobb margó helyét és a tabulátorpozíciókat jelölő függőleges vonalkákat tartalmazza.

CTRL + F4 - a bal margó beállítása
A kurzor oszlopába állítja a bal margót.

ALT + F4 - a jobb margó beállítása
A kurzor oszlopába állítja a jobb margát.

CTRL+F5 - a margó felfüggesztése
A margók ideiglenes törlése, ezáltal írni lehet a margókra is. Bekapcsolását csillag jelzi a vonalzósorban, ismételt használatával a margók visszaállíthatók.

ALT+F5 - a margók törlése
A margókat a lap bal, ill. jobb széléhez illeszti, de úgy, hogy később újra beljebb állíthatók legyenek. A tabulátorokat is törli.

CTRL + F6 - felfelé léptetés
A kurzort tartalmazó bekezdés egy sorral előbbre helyezése úgy, hogy az ott lévő sor mögéje kerül. A billentyű lenyomva tartásával a szolgaitatás addig ismételtethető, amíg a bekezdés a megfelelő helyre nem kerül.

ALT+F6 - lefelé léptetés
Az előzőhöz hasonló, csak lefelé irányul.

CTRL+F7 - a sor színének változtatása
A kurzor sorában a papír és a tinta színének megváltoztatása, 40 karakteres soroknál két, 80 karakteresnél négy variáció szerint. A billentyű lenyomva tartásával a sor színe oda-vissza változik.

ALT+F7 - a bekezdés színének változtatása
Az előzőhöz hasonló, csak az egész bekezdésre vonatkozik. A szövegszerkesztőben a funkcióbillentyűk kiegészítő billentyű nélküli hatása is megváltozik. Egyes szolgáltatások - mint például a 40, ill. 80 karakteres képernyő váltása, ami a szöveget is törli - védettek a véletlen parancskiadás elkerülésére. Ilyenkor a számítógép visszakérdez, és csak az ENTER leütésére végzi el a módosítást. A helytelen parancsot az ESC billentyűvel törölhetjük.

A SZÖVEG KINYOMTATÁSA
A nyomtatáshoz csatlakoztatni kell a nyomtatót a gép hátulján levő, PRINTER feliratú aljzatba. Bekapcsolás és az ON-LINE állapot elérése után üssük le az F3 billentyűt. A gép még megkérdezi a nyomtató ún. címét, erre elegendő. ENTER-rel válaszolnunk.

A SZÖVEG KAZETTÁRA MENTÉSE
A szöveg kazettára mentéséhez a kazettás magnetofon kezelését tárgyaló L fejezetben leírtak szerint kell csatlakoztatni a magnetofont. Ha az F2 billentyűvel jelezzük a gépnek, hogy menteni akarjuk a szöveget, a számítógép megkérdezi, hogy milyen néven mentse. A megszokottól eltérően most nem kell idézőjelek közé tenni a karaktersorozatot, csupán a később, a programok mentésénél ismertetendő szabályokat kell betartanunk. A magnetofon indítása után küldjük el a nevet, mire a mentés rögtön megkezdődik.
Az így mentett szövegeket természetesen újra be is olvashatjuk a szövegszerkesztőbe. Ilyenkor a programok betöltéséhez hasonlóan kell csatlakoztatnunk a magnetofont. Az F1 billentyű lenyomása után a számítógép a betöltendő szöveg nevét kérdezi meg. Ha erre csak ENTER-t ütünk, akkor a szalagon talált első szöveget tölti be.

KILÉPÉS A SZÖVEGSZERKESZTŐBŐL
A munka befejezése után az F8 billentyű lenyomásával térhetünk vissza a BASIC rendszerbe. A gép ilyenkor még megkérdezi, hogy biztosan befejeztük-e a feladatot. Ha erre ENTER-rel vagy a BASIC szóval válaszolunk, akkor kilépünk a szövegszerkesztőből és a benne levő szöveg törlődik. Ha a WP szócskát adjuk meg, akkor újra a szövegszerkesztőbe kerülünk, de a korábbi szöveg törlődik. Ha pedig az ESC billentyűt ütjük le, akkor a korábbi szöveghez térünk vissza.

A FUNKCIÓBILLENTYŰK
A funkcióbillentyűk a gyakran használt karaktersorozatok begépelését gyorsítják meg. Ezek a szövegek lehetnek parancsok, de lehetnek akár értelmetlen betűsorozatok is. A gép bekapcsolásakor minden funkcióbillentyűnek négy jelentése van aszerint, hogy önmagában vagy a SHIFT, a CTRL, ill. az ALT billentyűvel együtt ütjük le. Ezeket a funkciókat azonban meg lehet változtatni.
A következő parancs az F1 funkcióbillentyű jelentését változtatja meg, a parancs kiadása után a billentyű leütésekor a számítógép az idézőjelek közötti karaktersorozatot értelmezi.


SET FKEY 1 "Mostantol ezt jelenti az F1 billentyu"
A különböző parancsok kiadását is megkönnyítheti, ha ez egyetlen billentyű lenyomásával elvégezhető. Ilyenkor nagyon kényelmes, ha a parancs elküldését is automatikusan elvégzi a gép a funkcióbillentyű leütésekor.
Az ENTER-t helyettesítő ún. "kocsivissza" (carriage return) karakter a következőképpen írható a karaktersorozat végére: & CHR$(13)
A PRINT parancs a F3 funkióbillentyű leütésével a következő lesz:
SET FKEY 3 "PRINT"&CHR$(13)
A következő két táblázat összefoglalja a különböző funkcióbillentyűk alapértelmezéseit. Ügyeljünk arra, hogy az önmagukban leütött billentyűk hatása a szövegszerkesztőben megváltozik, ezeket a második táblázatban találhatjuk meg.
  Funkcióbillentyűk csak BASIC-benFunkcióbillentyűk BASIC-ben és szövegszerkesztőben is
Billentyű NORMAL +SHIFT +CTRL+ALT
1
START
Lefuttatja a programot. Ha nincs program a számítógépben, akkor előbb betölti a lemezről, vagy ha ez nincs, kazettáról.
CONTINUE
Folytatja a STOP-al megszakított programot
RE-FORM
A margóknak megfelelően elrendezi, szerkesztés után pedig újrarendezi a bekezdés sorait
JUSTIFY AND REFORM
Egyenesre igazítja a sorok széleit
2
LIST
Kilistázza az egész programot képernyőre
LLIST
Kilistázza az egész programot a nyomtatóra
CENTRE
A sor közepére igazítja a sorban lévő szöveget
CLEAR ALL TABS
Törli a tabulátor-pozíciókat
3
AUTO
Automatikusan sorszámoz tízesével, a STOP-al állítható le
RENUMBER
Újra sorszámozza az egész programot tízesével
TAB SET / CLEAR
Beállít vagy töröl egy tabulátorpozíciót a kurzor oszlopában
RULLER LINE
Be / kikapcsolja a vonalzósor kirajzolását
4
REMOTE 1
Be / kikapcsolja a "Rem 1" vezérlő kimenetet
REMOTE 2
Be / kikapcsolja a "Rem 2" vezérlő kimenetet
LEFT MARGIN
A bal oldali margót a kurzorhoz állítja
RIGHT MARGIN
A jobb oldali margót a kurzorhoz állítja
5
TEXT
A teljes képernyőt szöveges üzemmódba állítja, és törli a korábbi lapokat
DISPLAY TEXT
Szöveges üzemmódra kapcsol, anélkül, hogy törölne
RELEASE MARGINS
Felfüggeszti a margók használatát
RESET MARGINS
A margókat széthúzza a képernyő széleihez
6
GRAPHICS
Az első húsz sort grafikus, az utolsó négyet szöveges üzemmódba kapcsolja és törli a korábbi lapokat
DISPLAY GRAPHICS
Átkapcsol grafikus üzemmódba, anélkül, hogy törölne
MOVE UP
Egy sorral feljebb lépteti a bekezdést
MOVE DOWN
Egy sorral lejjebb lépteti a bekezdést
7
CLICK
Ki / bekapcsolja a billentyűk leütését jelző hangot
SPEAKER
Ki / bekapcsolja a beépített hangszórót
CHANGE LINE COLOUR
A sor színét változtatja
CHANGE PARAGRAPH COLOUR
A bekezdés színét változtatja
8
INFO
A gépben lévő programokról nyújt információt
TYPE
Átlép a szövegszerkesztőbe
  

 

Normál funkcióbillentyűk a szövegszerkesztőben
1. LOAD
Betölti a kazettán vagy lemezen lévő szöveget
2. SAVE
Kimenti a szöveget kazettára vagy lemezre
3. PRINT
Kiírja a szöveget a sornyomtatón
4. HELP
Német vagy angol nyelvű listát ír ki a szövegszerkesztő speciális szolgáltatásairól, az ENTER-el kapcsolható vissza
5. TEXT 80
Törli a szöveget, és átkapcsol 80 oszlopos üzemmódba
5. TEXT 40
Törli a szöveget, és átkapcsol 40 oszlopos üzemmódba
7. CLICK
Ki / bekapcsolja a billentyűk leütését jelző hangot
8. EXIT
Visszatér a BASIC rendszerbe

A PROGRAMOK TÁROLÁSA KAZETTÁN
Gyakran előfordul, hogy egy programunkat szeretnénk máskor is használni vagy másoknak megmutatni. Ha azonban kikapcsoljuk a gépet, akkor elfelejti az összes benne levő programot, és az egészet legközelebb újra be kell gépelnünk. Hogy ezt elkerüljük, programjainkat, a gyáriakhoz hasonlóan, kazettára menthetjük.
Ehhez először a kazettás magnetofont kell megfelelően csatlakoztatnunk. A még szabad csatlakozók közül a nagyobbikkal kössük össze a számítógép OUT jelű kimenetét a magnetofon MIC jelű bemenetével. Ha a magnó távvezérelhető, akkor a kisebbik csatlakozóval a gép REM2 kimenetét csatlakoztassuk a magnetofon vezérlő (REM) bemenetéhez, és a Si-iIFT+F4 billentyűkkel kapcsoljuk be a távvezérlést. Természetesen a magnetofon csatlakoztatásához nem kell kikapcsolni a számítógépet.
Ezután meg kell adnunk, hogy milyen néven mentse a gép a programot. A program neve legfeljebb 28 karakterből állhat, de nem tartalmazhat szóközt, csak betűket, számokat és egyes írásjeleket, mint pl. a pont, a kötőjel, az aláhúzás és a per jel. A program nevét a SAVE paranccsal adjuk meg:


SAVE "Program-1"
Mielőtt a parancsot elküldenénk, indítsuk el a magnetofonon a felvételt, az ENTER leütése után a számítógép ugyanis azonnal megkezdi a program mentését. Erről a
SAVING Program-1

üzenettel értesít, amelyben mindig az éppen mentett program nevét írja ki. A mentés befejeztével az OK üzenetet írja ki, ezután leállíthatjuk a magnetofont. A távvezérelhető magnetofonokat a számítógép maga indítja el és állítja le.
A mentés során a szalagra kerülő jelek halkan a számítógép hangszórójából is hallhatók, ami igen hasznos a felvétel figyelemmel kíséréséhez.

A FELVÉTEL ELLENŐRZÉSE
Az elkészült felvétel hibátlanságát célszerű ellenőrizni. Ehhez tekercseljük vissza a szalagot oda, ahol a felvétel kezdődik, és csatlakoztassuk a magnetofont úgy, ahogy a beolvasáshoz kell. Ezúttal azonban nem a LOAD, hanem a VERIFY parancsot kell használni.


VERIFY "Program-1"

Indítsuk el a magnót és várjuk meg, amíg a gép ellenőrzi a felvételt. Ha nincs hiba, ezt az OK üzenettel jelzi, ha azonban hibát talál, akkor erről megfelelő üzenetet küld. Ilyenkor ellenőrizzük, hogy helyesen csatlakoztattuk-e a gépet a felvételhez, és megfelelő felvételszintet állítottunk-e be a magnetofonon, majd próbáljuk meg újra felvenni a programot.

PROGRAMOK ÖSSZEMÁSOLÁSA
Ha egy kazettán levő programot szeretnénk egy, a tárban levővel összemásolni, akkor ezt a MERGE paranccsal tehetjük. A MERGE parancs hasonló a LOAD-hoz, a magnetofon csatlakoztatása is ugyanolyan.
A különbség, hogy a LOAD betöltés előtt törli a már a tárban levő programot, a MERGE pedig nem. Vigyázzunk azonban, mert ha az új programban egy sor sorszáma megegyezik a régi program valamelyik soráéval, akkor az új sor felülírja a régit, hasonlóan ahhoz, mintha a billentyűzetről írnánk be az újat. Az összemásolás előtt tehát sorszámoztassuk át a régi program sorait úgy, hogy az újonnan beérkező sorokkal ne keveredjenek össze és ne írják egymást felül.
A betöltés során a magnetofont ugyanúgy kell kezelnünk, ahogy a LOAD esetében. A MERGE parancs alakja a következő:


MERGE "Ujprogram"

ahol "Ujprogram" az újonnan betöltendő program neve. Próbáljuk ki a programok tárolására és visszaolvasására vonatkozó parancsokat, és ne veszítsük el kedvünket az esetleges hibák esetén. Próbálkozzunk újra, amíg rá nem jövünk, hogy mit hibáztunk el.

A FILE-OK
A file angol szó, a számítástechnikában a szalagra vagy lemezre mentett információk egy-egy csomagját jelöli. A file, aszerint, hogy mit tartalmaz, lehet program-lile vagy adat-file.

A LEMEZEGYSÉG HASZNÁLATA
A lemezegységet a csatlakoztatás után ugyanúgy használhatjuk, mint a magnetofont, ugyanazokat a parancsokat adhatjuk ki, csak ezek végrehajtása sokkal gyorsabb. Ha a számítógéphez lemezegységet is csatlakoztattunk, akkor automatikusan azt használja a magnetofon helyett.


3. RÉSZLETES ISMERTETŐ

A KARAKTERLÁNCOK
Az előző fejezetekben a karakterláncokkal csak igen nagyvonalúan foglalkoztunk. Most, hogy már rendelkezünk alapvető ismeretekkel, ideje, hogy részletesen megismerkedjünk a karakterek kezelésével.
A karakterlánc a számon kívül a másik fő adattípus, amelyet a számítógép kezelni tud. Abból a tényből, hogy a számítógép nem tud gondolkodni, az következik, hogy pontosan azt fogja tenni, amit használója mond neki az adott parancsban, ill. adattal. Tehát a programozás alapvetően adatok rendezgetése, átcsoportosítása, módosítása.
Az előzőkben már megfigyelhettük, hogy ha azt akarjuk, hogy gépünk ismételje meg azt, amit mondtunk neki, akkor a szöveget idézőjelek közé kellett tennünk. A gép ezt a szöveget módosítás nélkül, betűről betűre írja vissza, így nem szükséges, hogy bármilyen értelme legyen. A gép az idézőjelek között lévő szöveget karakterláncként, jelentés nélküli szimbólumok sorozataként kezeli. Lássunk néhány karakterláncot:


"Hány éves vagy?"
"Most múltam 24."

Figyeljük meg, hogy a karakterláncban nemcsak betűk, hanem különféle írásjelek, sőt számok is lehetnek.
Próbáljuk ki a következőket!
PRINT 2*2
Ez a sor arra utasítja számítógépünket, hogy végezzen el egy számtani műveletet: 2 értékét szorozza meg 2 értékével, és a kapott eredményt írja ki a képernyőre - másképp fogalmazva, végezze el a szorzást, és írja ki a végeredményt.
A következő példa első látásra szinte teljesen megegyezik az előzővel:

PRINT "2*2"
Itt azonban a 2*2 idézőjelek közé került, és így karakterlánc vált belőle. Most tehát arra utasítottuk a számítógépet, hogy írja ki a képernyőre azt, hogy 2, majd, hogy *, végül pedig ismét azt, hogy 2.
Számítógépünk képes arra, hogy megadja egy karakterlánc hosszát, ha felkérjük erre. Próbáljuk ki a következő programot:
100 PROGRAM "Klanc.bas"
110 LET A$="COMPUTER"
120 LET B$="MICROCOMPUTER"
130 ! A fenti ket sor ket
140 ! karakterlancvaltzotdeklaral.
150 ! karakterlanc-valtzok nevenek
160 ! vegen mindig egy $ jelnek
170 ! kell allnia
180 LET A=LEN(A$)
190 LET B=LEN(B$)
200 ! A es B numerikus valtozok,
210 ! melyek ket karakterlanc hosszat
220 ! (az altala tartalmazott
230 ! karakterek szamat) jelzik.
240 ! Ezt az erteket a LEN fugveny
250 ! adta meg.
260 PRINT "Az A$ nevu karakterlanc";A;" karakter hosszusagu."
270 PRINT "A B$ nevu karakterlanc";B;" karakter hosszusagu."
280 END

Próbálkozzon meg A$ és B$ tartalmának megváltoztatásával - a számítógép mindig a helyes hosszúságot adja meg.

SZÓKÖZÖK
Érthető lenne, ha azt gondolnánk, hogy egy szóköz semmit sem jelent, nem számít, hogy van valahol, vagy tetszőlegesen elhagytuk. De próbáljuk csak az előbbi programban megváltoztatni A$-t egy szóköz hosszúságúra, és B$ öt szóköz hosszúságúra. Megfigyelhetjük, hogy a számítógép pontosan kiírja, hogy melyik karakterlánc hány szóközt tartalmaz, noha mindkettő üresnek tűnik. Egy valóban üres karakterlánc a következő: ""
Amint látható, ez még szóközöket sem tartalmaz, ezért null-karakterláncnak, (null-stringnek) is nevezik.

KARAKTERLÁNCOK KARAKTERLÁNCOK BELSEJÉBEN
A számítógép több műveletet végezhet a karakterláncokon. Így például készíthet karakterláncot egy másik felhasználásával. A következő program erre mutat példát:


100 LET NAGY$="par szobol allo szoveg"
110 LET KICSI$=NAGY$(4:9)
120 ! a 110-es sorban egy karakterlanc valtozonak
130 ! adunk erteket, mely a NAGY$ 4. karakterevel
140 ! kezdodik, es tart egeszen a 9. karakterig.
150 PRINT NAGY$
160 PRINT KICSI$
140 END

A számítógép egyenként átmásolt néhány karaktert az egyik változóból egy ettől teljesen független másikba. Ezt úgy értük el, hogy adtunk egy nevet a készítendő, kisebb karakterláncnak (KICSI$), majd egy másik karakterláncnak (NAGY$) a nevét követő zárójelek között megadtuk, hogy hol kívánjuk az új karakterláncot kezdeni és befejezni. Így például a
LET MONOGRAM$=NEV$(1:1)
utasítás a következőt jelenti: hozzunk létre egy MONOGRAM$ nevű karakterláncot, és értéke legyen NEV$ első betűje. Természetesen egy karakterláncból nem csak úgy emelhetünk ki egy részt, hogy az egy másik karakterlánc-változó értéke legyen. Előző példánkban a 150, sor kicserélhető pl. a
110 PRINT NAGY$(4:9)

utasítással, mely a következőt jelenti: írd ki NAGY$ karakterlánc betűit a negyediktől a kilencedikig.
A programozó saját belátására van bízva, hogy mikor melyik megoldást alkalmazza. Általában, ha egy karakterlánc bizonyos részletére többször van szükség, érdemes azt új változóba menteni, de ha csak egyszer kívánjuk használni, akkor a második megoldás megfelelőbb.

INKEY$
Nagyon fontos és igen sokkoldalúan használható karakterfüggvény az INKEY$. (A BASIC-nek a karakterláncokat kezelő funkcióit, karakterlánc-függvénynek vagy karakterfüggvénynek nevezzük. Neveik legtöbbje $ jellel végződik, jelezve, hogy értékük szintén karakterlánc.)
Az INKEY$ függvény lehetővé teszi, hogy a program futása közben nyomjunk le egy billentyűt úgy, hogy közben a program látszólag egy pillanatra sem áll meg. Bizonyos mértékig hasonlít az INPUT funkcióra - a különbséget a következő példán keresztül szemléltetjük:


100 PROGRAM "Inkey.bas"
110 PRINT "Erted ezt a fejezetet?"
120 PRINT
130 PRINT "Valaszolj I-vel vagy N-el"
140 DO
150   LET A$=INKEY$
160 LOOP UNTIL A$<>""
170 ! a 150. sorban a billentyuzet
180 ! figyeles eredmenyet egy
190 ! valtozoban helyeytuk el.
200 IF A$="i" OR A$="I" THEN
210   PRINT "Remelem nem tevedsz."
220 ELSE IF A$="n" OR A$="N" THEN
230   PRINT "Akkor olvasd el ujra!"
240 ELSE
250   PRINT "Hibas billentyu!"
260 END IF
270 END

Miután a számítógép felteszi kérdését, az ezt követő első billentyűlenyomás a válasz, továbbengedve a program végrehajtását a 170. sorra és tovább.
Az INPUT kifejezéstől eltérően az INKEY$ függvény csak egy billentyű leütését várja, nincs szükség az ENTER használatára. (Így roppant hasznos játékprogramok írásához, egybetűs válaszok leolvasásához vagy a játék folytatásához, amely egy ciklus közepén várakozik...) Megjegyezzük; hogy a SHIFT billentyű használata nem jelent külön billentyűleütést.
Másik lényeges eltérés az INPUT utasítástól, hogy INKEY$ használata esetén a számítógép nem vár a válaszra, ezért kell példaprogramunkban a 130. és a 150. sor. Ha ezeket töröljük, programunk a másodperc tört része alatt lefut, nem hagyván időt a válaszadásra. Amikor ugyanis a számítógép a 140. sorhoz ér, megvizsgálja, hogy éppen abban a pillanatban le van-e nyomva egy billentyű, de mivel nincs, ezért A$ értéke "" (üres karakterlánc) lesz. A 130. és a 150. sornak éppen az a feladata, hogy a számítógépet várakoztassa mindaddig, míg A$ valami más lesz, mint "" -ezután lehet folytatni a programot.
Figyeljük meg tehát, hogy az INKEY$ úgy viselkedik, mint egy változó, amely, nagyon gyorsan váltogatja az értékét. Valójában a számítógép körülbelül minden másodpercben ötvenszer "megnézi", hogy le van-e nyomva billentyű. Ha pl. ekkor lenyomjuk az "a" gombot, INKEY$ értéke "a" lesz - de csak nagyon rövid időre. Általában ötvened másodperc múlva INKEY$ értéke ismét "" lesz, és ez marad a következő billentyű lenyomásáig.
Ez a magyarázata a program 140. sorának. Itt INKEY$ értékét karakterlánc-változóba mentjük, hogy ne változzon meg, míg programunk megvizsgálja értékét (200 - 260. sor).
Ha például programunkat a következőképpen változtatjuk meg
160 LOOP UNTIL INKEY$<>""
200 IF INKEY$="i" OR INKEY$="I" THEN
220 ELSE IF INKEY$="n" OR INKEY$="N" THEN

az eredmény hibás lesz, ugyanis INKEY$ értéke megváltozik (visszaáll "" - ra), míg a program a 200., 220. sorra ér.
Akkor, ha INKEY$ értékére a program további részében nem lesz szükség, nem kell egy változóban tárolnunk. Így például, ha programunkat várakoztatni akarjuk addig, míg a használó le nem nyom egy billentyűt, a megoldás a következő lehet:

100 PRINT "Nyomj meg egy billentyut!"
110 DO
120 LOOP UNTIL INKEY$<>""


UCASE$ és LCASE$
Ezekkel az újabb, hasznos karakterfüggvényekkel juthatunk karakterláncaink nagy-, ill. kisbetűs változatához. A következő mintapélda ezt mutatja:


100 INPUT PROMPT "Irj be nehany betut:":A$
110 PRINT A$
120 PRINT LCASE$(A$)
130 PRINT UCASE(A$)

VAL
Az olyan karakterláncok, amelyek csak számjegyeket tartalmaznak, ezzel a függvénnyel átalakíthatók valódi számmá, mintha nem is karakterláncok volnának. Nézzük meg a következő példát:


100 INPUT PROMPT "Irj be nehany karaktert : ": A$
110 PRINT A$
120 PRINT VAL( A$ )

A karakterlánc számértékének kiszámításakor a számítógép csak azokat a számjegyeket fogja figyelembe venni, amelyek megelőzik az első nem számjegy karaktert. Így VAL( "123ADFG45" ) 123 lesz, míg VAL( "A8123" ) 0 értékű.
Ennek a műveletnek az ellenkezője, ha az STR$ függvény számot alakít karakterlánccá.

KARAKTERLÁNCOK ÖSSZEFŰZÉSE
Az előzőkben azt láttuk, hogyan készíthetünk új karakterláncot meglevőből úgy, hogy kivágunk belőle egy részt. Most ennek ellenkezőjét tesszük: karakterláncokat fűzünk egymáshoz. Ezt a műveletet konkatenációnak nevezzük, és végrehajtásához mindössze egy & jelet kell a karakterláncok közé írni. A következő példában felhasználjuk a már ismert karakterlánc műveletek egy részét is.


100 PROGRAM "Rovidit.bas"
110 CLEAR SCREEN
120 INPUT PROMPT "Irj be egy szot:":KAR$
130 LET ROV$=KAR$(1:1)&KAR$(LEN(KAR$):LEN(KAR$))&"."
140 PRINT KAR$;" roviditve: ";ROV$
150 END

CIKLUSOK
Már eddig is többször találkoztunk olyan programrészletekkel, amelyekben a számítógép önmagát ismételte. Nyilvánvaló, hogy ilyen esetekben lényegesen egyszerűbú az ismétlendő részletet egyszer megírni és többször végrehajtani, sokszor egymás után megismételni a programban. Az így kialakított hurkokat ciklusoknak nevezzük.
Amint azt rövidesen látni fogjuk, egy ciklus szervezése alkalmas lehet egy teljes program vezérlésére is.
Minden ciklus kezdetét és végét speciális utasítás jelzi - ez alól egyetlen kivétel van: ha a ciklust a GOTO utasítással szervezzük meg.

DO/LOOP CIKLUSOK
Ciklusok szervezésének legegyszerűbb módja a DO/LOOP utasításpár használata. Ezzel már korábban is találkoztunk, az INKEY$ függvényt bemutató példaprogramban. Íme egy újabb példa:


80 INPUT PROMPT "Irj be egy szamot, es en kiirom a szorzotablajat! ":A
90 LET B=A
100 DO
110   LET B=B+A
120   PRINT B
130 LOOP UNTIL B>150
140 ! addig hajtsd vegre a ciklust,
150 ! MIGNEM B erteke 150-nel nagyobb lesz
160 END

Amint példánkból láthatjuk, a DO/LOOP utasításpár addig járatja a számítógépet a ciklusban, míg egy feltétel bekövetkezése azt meg nem állítja. Ez a feltétel két módon adható meg: az UNTIL vagy a WHILE szóval.
A WHILE és az UNTIL a feltételek két ellentétes típusa. Például WHILE B=150 és UNTIL B=150 teljesen különböző dolgot jelentenek; WHILE használata esetén addig maradunk a ciklusban, amíg a feltétel igaz (B = 150), UNTIL esetén pedig akkor lépünk ki a ciklusból, ha a feltétel igazzá válik.
Mind az UNTIL, mind a WHILE típusú feltétel alkalmazható a ciklus elején (DO UNTIL / DO WHILE) vagy a ciklus végén (LOOP UNTIL / LOOP WHILE). E két megoldás között az alapvető különbség az, hogy ha a DO UNTIL, ill. a DO WHILE struktúrát alkalmazzuk, akkor a feltételt a számítógép a ciklusba való belépéskor vizsgálja meg, míg a másik esetben csak a ciklus magját alkotó utasítások végrehajtása után értékeli ki. Így az első megoldás alkalmazása esetén előfordulhat, hogy a ciklus utasításaira egyetlenegyszer sem lesz szükség, míg a második esetben ez legalább egyszer mindenképpen bekövetkezik.
Javasoljuk, hogy a fenti példaprogramunk változtatgatásával próbálja ki e lehetséges ciklusszervezési módokat.

KILÉPÉS A CIKLUSOKBÓL
Az EXIT paranccsal bármikor kiléphetünk egy ciklusból. Az EXIT parancs nemcsak a DO / LOOP ciklusokhoz, hanem a következőkben ismertetendő FOR / NEXT ciklusokhoz is használható. Ezért alkalmazásakor meg kell adnunk, hogy adott esetben melyik ciklusból kívánunk kilépni: EXIT FOR, ill. EXIT DO. E kilépést általában egy feltétel vizsgálatával kötjük össze, pl.:


1000 IF X>25 THEN EXIT DO

A feltételekről szóló alfejezetben majd látni fogjuk, hogy hogyan végezhetjük el ezt a SELECT CASE utasítással.
Felhívjuk a figyelmet arra, hogy az EXIT utasítás az egyetlen helyes mód arra, hogy kilépjünk egy ciklusból, mielőtt az befejeződne. A GOTO utasítás e célra nem használható, megtévesztő lenne a programozó és a számítógép számára egyaránt. Az EXIT parancs egyszerűen utasítja a számítógépet arra, hogy a program végrehajtását a ciklus vége után kővétkező első utasítással folytassa.

FOR / NEXT CIKLUSOK
A FOR / NEXT ciklusok talán kevésbé általánosak, mint az előbb látott DO / LOOP ciklusok, de bizonyos esetekben igen célszerűnek bizonyulhatnak. Íme egy rövid példa használatukra:


100 INPUT PROMPT "Hanyszor menjek korbe ?": X
110 FOR I=1 TO X
120   PRINT "Korbe, korbe ..."
130 NEXT I
140 END


Látható, hogy most a begépelt szám határozza meg, hogy hányszor hajtsuk végre a ciklust. Ez FOR / NEXT ciklus fő célja - egyszerűen és félreérthetetlenül megadhatjuk, hogy hányszor kell ismételni a ciklus magját. Így itt nincs szükség külön feltételek alkalmazására.
A FOR / NEXT ciklusban a növekmény lehet 1, 2, 100 vagy éppen 435678, vagy akár visszafelé is számolhatunk. A következő program például kettesével számol visszafelé:
10 FOR I=40 TO 0 STEP -2
20   PRINT I
30   NEXT I
40 END

A STEP parancs megadása nélkül nem tudjuk gépünket rávenni arra, hogy 40-től számoljon 0-ig, a STEP megadása nélkül ugyanis a FOR / NEXT ciklus mindig egyesével számol felfelé.
Érdemes példánkban megfigyelni a PRINT I utasítást. A 10. sorban használtunk ugyanis egy I nevű változót, amelynek értéke minden ciklus után megváltozik: megnövekszik azzal az értékkel, amit a STEP után megadtunk, ill. 1-gyel, ha hiányzott a STEP parancs.
A DO/LOOP ciklusutasítással készített szorzótábla-programunkat mosT rövidebben megírhatjuk a FOR/NEXT utasításpár felhasználásával:
100 INPUT PROMPT "Irj be eg szamot es en kiirom a szorzotablajat.":A
110 FOR P=0 TO 150 STEP A
120   PRINT P,
130 NEXT P
140 END

Fontos megfigyelnünk, hogy a FOR / NEXT ciklusok esetén a számítógép a feltételt mindig a ciklusmag végrehajtása előtt vizsgálja meg, tehát előfordulhat, hogy a ciklusra egyszer sem lesz szükség. Ezt ki is próbálhatjuk, ha a szorzótábla programunkba 150-nél nagyobb számot írunk.

EGYMÁSBA ÁGYAZOTT CIKLUSOK
Ez a furcsa kifejezés arra vonatkozik, ha egy ciklust egy másik belsejébe helyezünk. A legfontosabb, ezzel kapcsolatos szabály, hogy a belső ciklus sohasem végződhet a külsőn kívül. Íme egy példa:


100 FOR I=1 TO 20 ! Kulso ciklus kezdodik
110   PRINT I,
120   FOR J=1 TO 4 ! belso ciklus kezdodik
130     PRINT I;J
140   NEXT J ! belso ciklus vege
150   PRINT
160 NEXT I ! kulso cilkus vege
170 END

A ciklusok tetszés szerinti mélységig egymásba ágyazhatók. Végignézve egymásba ágyazott ciklusok sorozatát, a ciklusok kezdetét emelkedő, a végét csökkenő sorrendben kell megtalálnunk, ahogy ezt a következő ábrán látszik.

Látható, hogy a ciklusokkal igen sokrétűen gazdálkodhatunk. Sok ciklus egymásba ágyazása azonban nagy figyelmet kíván. Az Enterprise az előző mintapéldában látott módon megkönnyíti a ciklusok azonosítását, emellett segítségünkre lehet megjegyzések elhelyezésében is. Ezek ellenére, ha sokszorosan egymásba ágyazott ciklusokra van szükségünk, célszerű a belső szinteket függvényekkel kifejezni. Ez nemcsak a program elkészítését egyszerűsíti, hanem áttekinthetőségét is javítja.

A FELTÉTELEK
Gyakran találkozhatunk irodalmi művekben olyan számítógépekkel, amelyek ember módjára gondolkodnak. Néha mi magunk is hajlamosak vagyunk úgy gondolni rájuk, mint felettébb okos masinákra. Valójában a számítógép nem képes gondolkodásra, csak nagyon egyszerű döntésekre, és összehasonlításokra.

IF / THEN UTASÍTÁS
Tárgyalásunkat az összehasonlításokkal kezdjük. Az 1. fejezetben már említettünk bizonyos relációs operátorokat - nos, ezek a számítógép által végzett összehasonlítások és az ezekre épülő döntések alapjai.
A következő példaprogramunk bemutatja, hogyan hasonlíthatjuk össze ezekkel a karakterláncokat:


100 LET EGYIK$="mosomedve"
110 INPUT PROMPT "Irj be egy szot!":MASIK$
120 PRINT
130 IF EGYIK$=MASIK$ THEN PRINT EGYIK$;" = ";MASIK$
140 IF EGYIK$<>MASIK$ THEN PRINT EGYIK$
150 END

Az IF / THEN utasítás az Enterprise olyan döntési lehetőségeinek egyike, amely közel áll a valós angol nyelvhez. Segítségévei változókat, ill. állandókat vizsgálhatunk meg, hogy teljesítenek-e bizonyos feltételt, vagy sem. Az IF / THEN utasítással nem végezhető számítás, de segítségével a program végrehajtását úgy módosíthatjuk, ahogy azt bizonyos számok vagy karakterláncok viszonya szükségessé teszi.

AZ IF UTASÍTÁSCSOPORT
Az IF / THEN szerkezet nem csak egy sorból állhat, használható ún. IF utasításcsoport is. Ez lehetővé teszi, hogy programunk több soron át több összehasonlítást és döntést tegyen, valamint hogy egy feltételre több utasítás vonatkozzon.
Előző példaprogramunkat más módon is megírhattuk volna, pl. ha kicseréljük a 130 - 140. sorokat a következőkre:


130 IF EGYIK$=MASIK$ THEN
135   PRINT EGYIK$;"=";MASIK$
140 ELSE
145   PRINT EGYIK$
146 END IF

Az eredmény ugyanaz lesz. Ennek az az oka, hogy egy feltételnek két eredménye lehet: vagy igaz (a két karakterlánc megegyezik), vagy hamis (különböznek). Így tehát módosított programunk a következőre utasítja a számítógépet: ha (IF) EGYIK$ és MASIK$ megegyezik, akkor (THEN) nyomtasd ki mindkettőt, különben (ELSE), (ha bármi más a helyzet), nyomtasd ki EGYIK$ -t.
Ez az IF utasításcsoport egy IF, egy THEN és egy ELSE szót tartalmazott, és az END IF parancs zárta le. Az ELSE utasítás tehát "valami más"-t jelent. Ilyenkor az IF / THEN-t követő utasítást a gép akkor hajtja végre, ha a feltétel igaz, ha pedig hamis, akkor végrehajtja az ELSE-t követő utasítást, ha létezik. Az ELSE utasításnak mindig egy új sor elején kell állnia, nem lehet az IF / THEN-nel azonos sorban.
A következő programban hosszabb IF utasításcsoportot mutatunk be:
100 PROGRAM "Szam1.bas"
110 RANDOMIZE
120 LET A=RND(5)
130 ! az RND fugveny egy
140 ! veletlen-szamot allit elo.
150 ! a RANDOMIZE utasitas
160 ! biztositja, hogy mindig
170 ! mas szamot kapjunk.
180 PRINT "Gondoltam egy szamot:";
190 IF A=1 THEN
200   PRINT "Egyes!"
210   PRINT
220 ELSE IF A=2 THEN
230   PRINT "Kettes!"
240   PRINT
250 ELSE IF A=3 THEN
260   PRINT "Harmas!"
270   PRINT
280 ELSE
290   PRINT A;" Ez tul bonzolult nekem."
300 END IF
310 END

Ez a program tehát véletlenszám előállításával kezdődik. Erre ne is legyen gondunk a továbbiakban - de ha ezt részletesebben is meg akarjuk vizsgálni, egy ciklus segítségével kiírathatunk néhány tucatot belőlük, és kereshetünk valamilyen törvényszerűséget köztük!
Ezután, a szám értékétől függően mást és mást ír ki a számítógép a képernyőre: ha szám van az IF utasítások valamelyikében, akkor a szám értékét betűvel, ha nincs ilyen, akkor a program a 350. sorban található magányos ELSE utasítással folytatódik, és kiírja a 280. sorban látható üzenetet.
Példát láttunk tehát egy összetett IF utasításcsoport használatára, amelyben a lehetséges esetekre vonatkozó utasítások az egyes IF, ill. ELSE IF sorok után következnek, az utasításcsoportot pedig minden esetben az END IF sor zárja le.
Összefoglalásul azt mondhatjuk, hogy az IF / THEN utasítást akkor használjuk, ha csak egy egyszerű teendőnk van egy feltétel teljesülése esetén. Az IF utasításcsoport viszont teljes programot vagy programrészt vezérelhet több feltételtől függően.

SELECT CASE UTASÍTÁS
Ezzel az utasítással sokkal egyszerűbb vizsgálatokat végezhetünk, mint az IF / THEN-nel. A SELECT CASE utasítás tulajdonképpen egy változó lehetséges értékeitől függő többirányú választást tesz lehetővé.
Írjuk át előző példaprogramunkat:


100 PROGRAM "Szam2.bas"
110 RANDOMIZE
120 LET A=RND(5)
130 ! az RND fugveny egy
140 ! veletlen-szamot allit elo.
150 ! a RANDOMIZE utasitas
160 ! biztositja, hogy mindig
170 ! mas szamot kapjunk.
180 PRINT "Gondoltam egy szamot:";
185 SELECT CASE A
190 CASE 1
200   PRINT "Egyes!"
210   PRINT
220 CASE 2
230   PRINT "Kettes!"
240   PRINT
250 CASE 3
260   PRINT "Harmas!"
270   PRINT
280 CASE ELSE
290   PRINT A;" Ez tul bonyolult nekem."
300 END SELECT
310 END

A példából látható, hogy a SELECT CASE utasításcsoportot - az IF-hez hasonlóan - END SELECT sorral kell lezárni. Amint tudjuk, az IF utasítást nem feltétlenül kell ELSE-nek követnie, de követheti. Hasonló a helyzet a SELECT CASE utasításnál is: lehetőség van egy "egyéb eset" ág feltüntetésére, ennek formája itt CASE ELSE, ahogy azt a példaprogramban láthattuk. Lehetőség van továbbá egy CASE utasítás után több lehetséges érték feltüntetésére is, pl.:
CASE 1, 3, 5
PRINT "Ezek paratlan szamok"

Javasoljuk, hogy ezután a most megismert feltételvizsgáló utasítások segítségével próbáljon meg dobókocka-programot írni, vagy felhasználva a másutt ismertetendő ORD függvényt, írjon olyan programot, amely a karakterláncokat ABC sorrendbe rendezi. A tényleges programozás közben szerzett tapasztalatokat ugyanis semmiféle könyv vagy leírás nem pótolhatja.

NAGY MENNYISÉGŰ ADAT TÁROLÁSA
Már felfedeztük, hogy a programozás valójában az információk kezelésének egy módja. Mindeddig azonban csak kevés adattal dolgoztunk - szavakkal vagy számokkal, melyeket az INPUT utasítással feltett kérdésekre válaszként írtunk be, vagy a számítógép írta ki nekünk valamilyen üzenet formájában. Nem beszéltünk azonban még arról, hogy mi módon kezelhetünk olyan rengeteg adatot, ami egy játékprogramhoz, vagy bankszámlánk nyilvántartásához szükséges. Az Enterprise rendkívül hatékonyan használható ilyen problémák megoldására.
Névsorokat a programban ún. tömbökben tárolunk. A tömb olyan változó, amely több más változót tartalmaz önmagában. Felfoghatjuk a tömböket olyan nagy dobozokként is, amelyek további kis dobozokat rejtenek.
A tömbök nemcsak karakterláncok, hanem számok, numerikus változók tárolására is alkalmasak, amint azt a most következő fejezetben látni fogjuk.

NUMERIKUS TÖMBÖK
Ahhoz, hogy programunkban egy tömböt használhassunk, azt először deklarálnunk kell. Írjuk be számítógépünkbe a következő programsort:


100 NUMERIC TOMB(1 TO 10)

Ezzel utasítjuk a számítógépet, hogy hozzon létre valahol a memóriájában egy TÖMB nevű tárolót, amely elég nagy ahhoz, hogy 10 változó elférjen benne, Ezek a változók a tömb elemei, és bármilyen szám tárolható bennük, pontosan úgy, ahogy azt az egyszerű változók esetében már megszoktuk. E változók valamelyikére a TOMB névvel és az utána zárójelben álló számmal hivatkozhatunk; így pl. TOMB(7) a TOMB nevű tömb hetedik elemét jelöli. Folytassuk tovább programunkat:
110 FOR S=1 TO 10
120   INPUT PROMPT "Irj be egy szamot:":TOMB(S)
130 NEXT S

Ezzel a programrészlettel számokat írtunk a tömbbe. Futtassuk le, majd adjuk ki a PRINT TOMB(9) , PRINT TOMB(6) utasítást, vagy írassuk ki a tömb bármelyik elemét. Láthatjuk, hogy számsorozatot írtunk be a számítógépbe. Hasonlóképpen akkor, ha pl. fel akarjuk jegyezni december hó minden egyes napján a hőmérsékletet, egy DECEMBER nevű 1-től 31-ig számozott elemű tömb szükséges.
Egy tömb elemeinek a sorszáma tetszőleges tartományba eshet; lehet 34-től 79-ig,123-tól 456-ig, de 3675324-tól 3675399-ig is bármennyi, sőt akár negatív is, pl. NUMERIC TABLA(-20 TO -10).

KÉTDIMENZIÓS TÖMBÖK

A tömbök nem mindig olyan egyszerűek, ahogy azt az előző pontban láttuk. A következőkben bemutatjuk az egy- és a kétdimenziós tömbök közti különbséget.
Egydimenziós tömböt úgy ábrázolhatunk, mint egy listát; sorszámként, amelyet a hozzá tartozó érték követ.
A kétdimenziós tömböket mátrixoknak nevezik, ezek leginkább egy nagy polcos szekrényhez hasonlíthatók, ahol minden polcnak és minden oszlopnak van egy sorszáma, és egy rekesz a két szám együttes használatával azonosítható.
A számunkra fontos adatokat a tömb elemei, az egyes rekeszek tartalmazzák.

Sorszám Érték          
112.343   1.1 1.2 1.3 1.4
2234.78767   2.1 2.2 2.3 2.4
33   3.1 3.2 3.3 3.4
434.321   4.1 4.2 4.3 4.4
Egydimenziós dömb
Kétdimenziós tömb

KARAKTERLÁNCOKAT TARTALMAZÓ TÖMBÖK
A karakterláncokat tartalmazó tömbök hasonlóak a numerikushoz, azzal a különbséggel, hogy a NUMERIC szó helyett a STRING-et használjuk. Itt azonban - a numerikus tömbökével ellentétben - az egyes elemek hossza változtatható.
Egy tömbelem hosszának változtatása valójában a legnagyobb lehetséges hosszat változtatja meg. Mint ahogy egy vödröt sem kötelező minden alkalommal színültig megtölteni, senki sem kötelez minket arra, hogy egy tömb elemeit minden alkalommal teljes mértékben felöltsük.
Egy tömb deklarálásakor a számítógép lefoglal számára egy bizonyos területet a memóriájában. Ez - ha mást nem adunk meg - karaktertömbök esetén 132 * 132 karakter nagyságú lesz. Ettől eltérő méretet a következe módon adhatunk meg:


STRING TOMB$(30 TO 50)*10

Ezzel az utasítással egy olyan 21 elemű tömböt foglaltunk le, amelyben mindegyik elem 10 karakter hosszúságú. Természetesen, minél több helyet foglal el egy tömb, annál több adatot tudunk benne tárolni. De számítógépünk memóriája nem végtelen nagy, ezért javasoljuk, hogy csak akkora tömböket foglaljunk le, amekkorákra valóban szükségünk lesz.

Változók deklarálása
Egyszerű, nem tömb változók is deklarálhatók a NUMERIC, ill. STRING kulcsszó segítségével. Az egyetlen eltérés a tömbök deklarációjától, hogy nem adunk meg elemhatárokat. A következőkben változók deklarálására mutatunk példákat:


NUMERIC A
NUMERIC C,D,H,X
STRING A$, B$, HELLO$*8

READ / DATA UTASÍTÁSOK
Már több olyan példát láttunk, ahol két (esetleg több) BASIC kulcsszó egymással szoros összefüggésben van, külön-külön nincs is értelmük. A READ és a DATA is ilyen szavak, sőt hozzájuk tartozik a RESTORE parancs is.
Ezek újabb lehetőséget nyújtanak nagyobb mennyiségű adat kezelésére. Egyúttal alkalmasak arra is, hogy velük számokat vagy karakterláncokat töltsünk tömbök elemeibe. A munka oroszlánrésze a READ utasítással végezhető - amint ezt a következő példában látjuk:


80 LET P=1
90 DO UNTIL P=0
100   READ P
110   PRINT P
120 LOOP
130 DATA 1,2,3,4,5,6,7,8,9,10
140 DATA 11,12,13,14
150 DATA 15,16,17,18,19,0
160 END

A DATA sorokban csak adatok tárolhatók. Az adatokat vesszőkkel választjuk el egymástól. A READ parancs utasítja a számítógépet arra, hogy vegyen elő egy DATA adatelemet és tegye be egy változóba, amit ezután ugyanúgy lehet használni, mint bármely más adatot vagy változót. Példánkban ez az adat a P változóba kerül, amit azután kinyomtatunk a képernyőre. Figyeljük meg; hogy minden egyes DATA adatelemhez ugyanazt a P változót használjuk miden alkalommal. Tehát a program beolvas (READ) egy adatot a P változóba, kiírja, beolvassa a következőt, és így tovább mindaddig, míg az utolsó, a 0 elemet be nem olvastuk.
A számítógép minden egyes DATA adatelemet csak egyszer olvas be. Miután beolvasta, megjegyzi a pozícióját, és a következő READ utasítás a következő adatelemet olvassa, így haladva balról jobbra és fentről lefelé, ahogy egy könyvben olvasunk. Ha valamennyit beolvastuk, a gép megállapítja, hogy nincs több adat - és nagy gondban lenne, ha újabb READ utasítást kapna. Ha mégis erre kerül sor, akkor a gép hibát jelez.
Az következő program bemutatja a READ / DATA utasítás használatát karakterláncok esetén.
100 PROGRAM "Mese.bas"
110 CLEAR SCREEN
120 PRINT "Most pedig mondok egy meset..."
130 PRINT
140 PRINT "Ime."
150 PRINT :PRINT
160 WAIT 1
170 DO
180   READ A$
190   IF A$="Vege" THEN EXIT DO
200   PRINT A$;" ";
210   FOR Y=1 TO 250
220   NEXT
230 LOOP
240 PRINT :PRINT
250 PRINT "Itt a vege..."
260 PRINT :PRINT
270 END
280 ! a program hatralevo resze
290 ! a DATA adatokat tartalmazza
300 DATA Egyszer,volt,hol,nem,volt,volt,egyszer,egy,kicsi
310 DATA ENTERPRISE,nevu,szamitogep.,Ez,egy,roppant,vidam,szamitogep
320 DATA volt.,Egy,nap,Anglia,nevu,orszag,legjobb,programozoi
330 DATA honapokon,at,ejjel,nappal,dolgoztak,azon,",",hogy,az
340 DATA ENTERPRISE-t,a,vilag,legjobb,szamitogepeve,tegyek.
350 DATA Es,most,te,az,ENTERPRISE,BASIC,nyelvet,tanulod.
360 DATA Hat,nem,vagy,egy,szerencses,ficko?,Vege

Ha most betesszük a következő sorokat:
105 DO
265 LOOP

Láthatjuk, hogy számítógépünk egyszer kiírja a történetet hibátlanul, utána azonban egy hibaüzenetet ad arról, hogy nincs több DATA. Adjuk tehát a programhoz a
268 RESTORE

sort. Ez utasítja a gépet arra, hogy álljon vissza a DATA sorozat legelejére. Ha RESTORE utasítás után egy sorszámot írunk, akkor ez után az adott számú sor DATA adatait fogja beolvasni a következő READ utasítás.
Figyeljük meg, hogy példánkban a DATA adatelemei nem állnak idézőjelek között. Ha ugyanis a READ utasítás után karakterlánc-változó áll (példánkban A$), a számítógép tudja, hogy karakterláncnak kell tekintenie a soron következő DATA elemet. Idézőjelet csak akkor kell használnunk, ha vesszőt akarunk tenni az adatok közé (mint ahogy azt példánk 330. sorában láthatjuk) -egyébként a gép azt gondolná, hogy a vessző az adatelemeket választja el egymástól.

FÜGGVÉNYEK DEFINIÁLÁSA
A függvények, amelyekről e fejezetben szó lesz, programok a programban, amelyeket egy-egy speciális feladat végrehajtására hozunk létre, hogy aztán újra és újra bármikor felhasználhassuk őket.
Egyszerű példaként tegyük fel, hagy adott üzenetet a program különböző részein ki akarunk íratni a képernyőre. Ezt a műveletet példánkban függvényként definiáljuk.


100 DEF FIGYELMEZTETES
110   CLEAR SCREEN
120   PRINT AT 10,7:"Na most figyelj!"
130   SOUND
140   ! A SOUND utasitas egy hangjelzest ad.
150 END DEF

Minden esetben nevet kell adni a függvénynek - példánkban ez FIGYELMEZTETES -és ezt a DEF kulcsszónak kell megelőznie. Az ezt követően definiált függvényt- lehet egy vagy akár 9999 sor hosszú - mindenképpen az END DEF sorral kell befejezni.

FÜGGVÉNYEK HÍVÁSA
Egy függvény önmagában nem működőképes, ha megpróbáljuk lefuttatni mintaprogramunkat, semmi sem történik. A definiált függvényt a CALL utasítással aktivizálni kell - ezt a műveletet nevezzük a függvény hívásának. A függvény definiálható a program bármelyik részén, akár a hívás, akár az END utasítás után is. Példánkat egészítsük ki a következő sorral:


80 CALL FIGYELMEZTETES
90 END

- és a függvény már működni fog. Ha a számítógép CALL utasítást talál, minden alkalommal megkeresi, hogy a programban hol található az adott függvény definíciója, és azon a helyen végigfuttatja a függvényt, ezután visszatér a CALL-t követő utasításra, és ott folytatja a program végrehajtását. Az ábra segítségével ez könnyen érthetővé válik.
Ne feledjük el, hogy egy függvény mindaddig semmit sem csinál, míg egy CALL utasítással a nevére nem hivatkozunk. Ha a program folyamatos végrehajtása közben a gép függvénydefiníciót talál, átugorja, és az azt követő utasítással folytatja a végrehajtást.

LOKÁLIS ÉS GLOBÁLIS VÁLTOZÓK
Ahhoz, hogy a függvényekben a változókat hibátlanul használhassuk, néhány fontos szabályra kell tekintettel lennünk. Próbáljuk ki a következő programot:


100 DEF KOB
110   INPUT PROMPT "A kobre emelendo szam:":Z
120   PRINT Z;" A KOBON=";Z*Z*Z
130 END DEF
140 CALL KOB

Futtassuk le, majd írjuk be a következő sort:
150 PRINT Z

és most futtassuk le ismét. Azt tapasztaljuk, hogy annak ellenére, hogy a KOB függvény helyesen működik, számítógépünk hibaüzenetet küld, mikor a 150. sorhoz ér. Vajon mi ennek az oka?
A válasz e kérdésre az, hogy jelen esetben Z a KOB függvény belső, ún. lokális változója, és mint ilyent, csak a KOB függvény ismeri, a program többi része semmit sem tud róla. A számítógép a függvényt önálló kis programként kezeli, a saját változóival együtt, amelyek a függvény saját céljait szolgálják. E változókat a program többi része nem ismeri, és ha a függvény végrehajtása befejeződik, ezek a lokális változók elvesznek. Így példánk 150. sorában a program nem ismeri a Z változót, ezért küld hibaüzenetet.
Ha azonban a 110. sort átszámozzuk 90-re - azaz a függvényen kívülre helyezzük-, programunk fő része is ismerni fogja a Z változót, így a 150. sor nem okoz hibát többé. Azzal, hogy a Z változót a függvényen kívülre helyeztük, külső, ún. globális változó lett belőle. Egy olyan globális változó, amely a program teljes egészében ismert, felhasználható.
Ha most beszúrjuk programunkba a
125 LET Z=20
sort, megfigyelhetjük, hogy a függvény megváltoztatja a globális változó értékét. A függvény előbb felhasználja Z főprogramban beállított értékét, elvégez segítségével egy számítást, majd megváltoztatja értékét. A főprogram visszatérve a függvényből - ezt a megváltoztatott értéket találja a Z változóban.
Összefoglalva: ha egy függvény olyan változót használ, amely a függvény meghívása előtt nem fordult elő a program fő részében, akkor a függvény ezt mint lokális változót kezeli. Ha azonban ez a változó már valahol deklarálva volt, a függvény globális változónak tekinti, így ha a függvény megváltoztatja a változó értékét, a program többi része ezzel a megváltozott értékkel fut tovább.
Korábbi fejezetekben már találkoztunk változók deklarálásának lehetőségével. Akkor art a megjegyzést tettük, hogy bár a deklaráció nem mindig szükséges, mégis ajánlott. Most láthatjuk, hogy sok függvény használata esetén a deklaráció gyakran elengedhetetlen.
Egy változó egyrészt a NUMERIC, ill. STRING kulcsszavak segítségével, másrészt pedig a LET utasítással deklarálható (pl. LET A=20). Előző példáinkban nem volt jelentősége annak, hogy melyik módot használjuk, de függvények használata esetén ez már egyértelműen tisztázódik. Módosítsunk ismét kissé az eredeti példaprogramunkon:
110 NUMERIC Z
115 LET Z=3

most azt tapasztaljuk, hogy programunk két különböző Z változóval dolgozik -Egyik lokális változó a függvény belsejében, a másik globális változó kívül. Ha viszont töröljük a 110. sort, ismét csak egy globális változónk lesz - az, amelyet a 90. sorban deklaráltunk -, mivel a 115. sor LET utasítása önmagában nem deklarál lokális változót, ellentétben a NUMERIC kulcsszóval.
Mindeddig olyan függvényékkel találkoztunk, amelyek CALL utasítással történő meghívásuk után különféle bonyolult funkciókra képesek, így pl. szenetek kiírására, sípolásra stb. Most megvizsgálunk néhány olyan függvényt, amelyek egyszerűen csak egy számértéket adnak a főprogram számára. Egész csomó ilyen függvény áll eredetileg is rendelkezésünkre a BASIC nyelvben: ilyen pl. az SQR (négyzetgyök) függvény. Egy program egyik sora lehet például a következő:
PRINT SQR(121)
vagy
LET M=2*SQR(N)+1

Az SQR függvény kiszámolja a zárójelek között álló szám vagy kifejezés négyzetgyökét. Az eredményül kapott szám pedig éppen úgy használható a továbbiakban, mint bármelyik változó vagy állandó. Már ismerjük az INT függvényt is; a BASIC ezeken kívül még sok olyan függvényt ismer, amelyek sok, gyakran szükséges számítástól kímélnek meg minket.
Tegyük fel, hogy most olyan programot kívánunk írni, amely számok faktoriálisát számítja ki (pl. 4 faktoriálisa = 4*3*2*1; 6 faktoriálisa = 6*5*4*3*2*1 stb.). Faktoriális számítására nincs előre elkészített BASIC funkciónk, ezért megkíséreljük magunk elkészíteni a szükséges függvényt. Próbálkozzunk pl. a következő változattal:
100 DEF FACT
110   ! E fugveny a globalis F valtozo ertekethasznalja fel,
120   ! valtoztatja meg, es adja vissza a foprogramnak.
130   FOR Y=F-1 TO 1 STEP -1
140     F=F*Y
150   NEXT Y
160   IF f=0 THEN LET F=1
170 END DEF

A következő program arra mutat példát, hogy hogyan írathatjuk ki pl. a 13 faktoriálisát vagy hogyan használhatjuk a 7 faktoriálisát egy kifejezésben.
180 LET F=13
190 CALL FACT
200 PRINT F
210 F=7
220 CALL FACT
230 LET SZAM=F*1.5+3
240 PRINT SZAM

Amint látjuk és érezzük, ez a megoldás sokkal körülményesebb, mint pl. az SQR függvény hívása volt, hiszen itt a FACT minden egyes meghívása előtt egy globális változóba (F) kellett töltenünk azt a számot, amivel a műveletet végre akartuk hajtani. Ám számítógépünk lehetőséget ad a kényelmetlenség megszüntetésére. Töröljük most az előbbi példaprogramunkat, és írjuk be a következőt:
100 PROGRAM "Fact.bas"
110 DEF FACT(X)
120   FOR Y=X-1 TO 1 STEP-1
130     LET X=X*Y
140   NEXT
150   IF X=0 THEN LET X=1
160   LET FACT=X
170 END DEF
180 PRINT FACT(13)
190 LET SZAM=FACT(7)*1.5+3
200 PRINT SZAM

Ezzel a FACT függvényt a BASIC saját függvényeihez hasonlóvá tettük és pontosan úgy használhatjuk, mint ahogy pl. az SQR vagy az INT függvényt. Programunk az eddigitől két sorban különbözik: a 110. sorban zárójelek között álló X jelzi a számítógépnek, hogy a főprogramban a FACT szó után keressen egy zárójelek között álló számot, és annak értékét adja az X belső változónak. A 160. sor értéket ad egy változónak, amelynek neve megegyezik a függvény saját nevével - ilymódon lehetővé teszi, hogy ez az érték közvetlenül abban a sorban térjen vissza a főprogramhoz, ahol a neve előfordult. Így a függvény hívásakor nincs szükségünk a CALL szóra.

FÜGGVÉNYEK BEMENŐ VÁLTOZÓI
A programunk 110. sorában lévő zárójelek között álló X nevű változót a függvény bemeneti változójának nevezzük. Ez jelzi a függvénynek, hogy egy számot várjon adatként, amellyel majd tovább dolgozik. (Alfejezetünk utolsó példájában olyan függvényt láthatunk, amelynek két bemeneti változója van.) Ez a szám származhat a főprogram valamelyik globális változójától is. Helyettesítsük most programunk két sorát a következőkkel:


180 LET A=11
190 PRINT FACT(A)

A számítógép a függvény meghívásakor belenéz az A dobozba, és annak tartalmáról másolatot helyez a függvény saját, X nevű dobozába - ezt fogja a továbbiakban használni a számításokhoz. A függvény végrehajtása közben X értéke módosul, A azonban változatlan marad. Ha most ismét megváltoztatjuk programunkat:
180 LET X=11
190 PRINT FACT(X)

láthatjuk, hogy definiáltunk egy globális változót, a függvény bemenő változójával azonos néven. A program azonban továbbra is helyesen működik - a számítógép most is úgy kezeli ezt a két változót, mint két különböző dobozt, azonos neveiktől függetlenül. Erről meg is győződhetünk, ha két további sort írunk a programhoz:
165 LET X=100
200 PRINT X

Lefuttatva a programot láthatjuk, hogy a 180. sorban X értéke 11 és nem 100. A 145. sor tehát csak a lokális X változót változtatta meg.

HIVATKOZÁSI (REFERENCIA) PARAMÉTEREK
Az előző részben olyan függvényekkel ismerkedhettünk meg, amelyeknek van bemeneti változójuk (paraméterük), ezekkel valamilyen műveletet végeznek, és az a változó, amelynek értékét a bemeneti változóba átmásoltuk, változatlan marad.
Más a helyzet akkor, ha a bemeneti változó elé a REF szót írjuk. Ilyenkor függvényünk megváltoztatja a híváskor feltüntetett változók) értékét. A következő mintaprogram két számot, A-t és B-t kér tőlünk, majd megváltoztatja Őket oly módon, hogy A-t B-edik, majd B-t A-adik hatványára emeli.


100 INPUT PROMPT "Elso szam :":A
110 INPUT PROMPT "Masodik szam :":B
120 CALL HATVANY(A,B)
130 PRINT A,B
140 END
150 DEF HATVANY( REF X, REF Y )
160   LET Z=X
170   LET X=X^Y
180   LET Y=Y^Z
190 END DEF

A 150. sor két bemenő változót jelez. A függvény meghívásakor a zárójelek közti első változó X, a második Y helyére kerül. Eddig minden megegyezik a korábban látottakkal - annyi csak a különbség, hogy most nem csak egy, hanem két bemeneti változónk van, azon kívül mivel e függvény nem egy, hanem két értéket ad vissza, hívásakor szükséges a CALL szó. A REF szavak példánk 150. sorában egyszerűen azt jelentik, hogy miután függvényünk befejezte tevékenységét, X újértékét helyezze vissza A, Y-ét pedig B globális változóba.
A változók, ill. értékeik adásvételét a függvények és a program más részei között paraméterátadásnak nevezzük. Ha egy függvény megváltoztatja annak a globális változónak az értékét, ahonnan a működéséhez szükséges adatokat vette, hivatkozási paraméter átadásáról beszélünk. Így az utolsó példában A és B ún. hivatkozási (referencia) paraméterek.

A GRAFIKA
A bemutató-kazetta használatakor nyilván észrevette, hogy milyen érdekes képek, szép rajzok készíthetők az Enterprise hatékony grafikai lehetőségeinek felhasználásával. A könyv első részében már megismerkedtünk a PRINT AT utasítás használatával, amely felosztja a képernyőt képzeletbeli négyzetekre. Ezekre koordináták megadásával hivatkozhatunk, amikor adott helyre kívánunk valamit kiírni. Így pl. a PRINT AT 1,1 utasítással szöveget irathalunk a képernyő bal felső sarkába.
A grafikus parancsok hasonló módszerrel pontokat, vonalakat írnak a képernyőre, amelyekkel diagramokat vagy képeket állíthatunk össze. A következő rövid programrészlet egy vonalat rajzol.


100 GRAPHICS
110 PLOT 640,360;1000,700

Az első sorban levő GRAPHICS utasítás gyors és egyszerű módszer egy olyan üres "lap" kiválasztására, amire rajzolni fogunk. A PLOT parancs segítségével pontokat vagy vonalakat rajzolhatunk. Az ezt követő négy szám adja meg, hová kerüljön a rajzolandó vonal - ebben a példában a képernyő közepe (640,360) és a jobb felső sarok (1000,700) közé. Figyeljük meg, hogy az itt használt számok nagyobbak, mint a PRINT AT utasításnál látottak. Ez nem azt jelenti, hogy így sokkal nagyobb területet jelöltünk ki, hanem azt, hogy a grafikus lapot sokkal több pontra kell felosztani, mint a szöveges lapot. Ezzel lényegesen pontosabban helyezhetők el a képrészletek a képernyőn, azaz grafikus módban a képernyő felbontása nagyobb.
Másik eltérés a szöveges módtól, hogy grafikus üzemmódban a bal alsó kiindulási pontot a (0,0) koordináták jelölik, és a koordináták első száma a vízszintes eltérést adja meg - hasonlóan a hagyományos (x,y) koordinátafelíráshoz.
Ha lefuttatjuk a programot, megfigyelhetjük, hogy a képernyő alján négy sor megmaradt az eredeti szöveges lapból. Így lehetőség van arra, hogy a rajz elrontása nélkül írjunk be valamit a számítógép számára.
A GRAPHICS utasítás hatására képernyőnk tehát két részre oszlik: egy felső, grafikus területre és az imént említett alsó négy szöveges sorra. A grafikus képernyő 1280 vízszintes és 720 függőleges pontra van felosztva - így a jobb felső pont koordinátái (1279,719) lesznek.
A képernyő két része külön-külön letörölhető a CLEAR GRAPHICS, ill. a CLEAR TEXT utasítással, vagy egyszerre a CLEAR SCREEN paranccsal.
A DISPLAY TEXT parancs beírásával a teljes képernyőt visszaállíthatjuk szöveges módba; hasonlóképpen a DISPLAY GRAPHICS utasítás visszaállítja a grafikus képernyőt anélkül, hogy tartalmát megváltoztatná. Ezzel szemben a TEXT, ill. GRAPHICS parancsok úgy váltanak üzemmódot, hogy közben a megfelelő képernyőrészt letörlik.
Később, ha megismerkedünk a csatornákkal és a grafika kezelésének még bonyolultabb módozataival, lehetőségünk lesz arra, hogy a lapok méretét meghatározzuk és elhelyezzük a képernyő bármelyik részén.

PONTOK VAGY VONALAK
Most változtassuk meg előző programunk 110. sorát a következőképpen:


110 PLOT 100,100

Ha lefuttatjuk a programot, egy pontot látunk megjelenni a képernyőn. Tegyünk pontosvesszőt a 110. sor végére, és írjuk be a következő sort:
115 PLOT 1000,700

A program ezúttal egy vonalat rajzol. Vegyük el a pontosvesszőt a 110. sor végéről, és két pont tűnik fel a képernyőn. Vajon miért? A válasz a kérdésre a következő: a kettőspont arra utasítja a számítógépet, hogy hagyja a video-sugarat ott, ahol éppen áll. Ha ez a sugár a képernyőn van, akkor látható vonalat húz két pont között. Ahhoz, hogy a sugarat ott tartsuk, pontosvesszőt kell tennünk a PLOT utasítás után. Ezt a sugarat úgy képzelhetjük el, mint egy ceruzát. Egy PLOT utasítás elhelyezi a ceruzát a papíron, és legalább egy pontot rajzol is vele. Ahhoz, hogy vonalat rajzoljunk vele, meg kell adnunk két koordinátapárt, amelyeket pontosvesszővel választunk el. Így ez az utasítás a következőt jelentheti: "rajzolj egy pontot a (100,100) pozícióba, és ne emeld fel a ceruzát, hanem húzz egy egyenes vonalat az (1000,700) pontba". Ha kihagyjuk a pontosvesszőt, képzeletbeli ceruzánk mozog, de nem érinti a papírt.
A sugár ki- és bekapcsolására (a ceruza felemelésére, ill. letételére) használható a SET BEAM OFF, ill. a SET BEAM ON parancs. Íme e cikcakk program:
100 PROGRAM "Cikcakk.bas"
110 RANDOMIZE
120 INPUT PROMPT "Hany cikcakkot parancsolsz?":B
130 GRAPHICS
140 LET Z=0
150 DO
160   LET X=RND(1279)
170   LET Y=RND(719)
180   PLOT X,Y
190   LET Z=Z+1
200 LOOP UNTIL Z=B
210 END

Ez a program pontokat rajzol a képernyő véletlenszerűen választott pozícióiba. Ha most a 180. sort megváltoztatjuk:
180 PLOT X,Y;

akkor valóban cikcakkokat kapunk.
Természetesen a grafikus parancsok bármelyike előfordulhat függvény belsejében is. A következő példában a függvény pontokat helyez el a képernyőn, és össze is köti őket vonalakkal.

100 DEF DIAGRAM
110   GRAPHICS
120   PLOT 504,544;564,464;516,448;504,544;460,464;516,448
130 END DEF

Futtassuk ezt le, majd írjuk be parancs-módban, hogy CALL DIAGRAM. Ha a koordinátapár után vesszőt teszünk, nem kerül pont erre a pozícióra; a számítógép odaállítja a sugarat és kikapcsolja. Később látni fogjuk, hogy ez a PLOT PAINT utasításhoz szükséges.

TEKNŐC PARANCSOK
A következőkben másik parancskészletet láthatunk vonalak rajzolására. Ezeket teknőc-parancsoknak nevezzük, mert először egy lassan mozgó állatrobot irányítására használták őket. Ezúttal nincs szükségünk minden egyes képpont koordinátájának kiszámítására.


100 PROGRAM "Teknoc.bas"
110 OPTION ANGLE DEGREES
120 GRAPHICS
130 PLOT 300,150;
140 PLOT ANGLE 80;
150 PLOT FORWARD 500;
160 PLOT BACK 320;
170 PLOT RIGHT 35;
180 PLOT FORWARD 420;
190 PLOT BACK 285;
200 PLOT RIGHT 100;
210 PLOT FORWARD 340
220 END

Amint látható, ez csakugyan olyasmi, mintha egy angolul értő állatot irányítgatnánk a képernyőn.
A 110. programsor közti a számítógéppel, hogy a szögeket a továbbiakban fokban és nem radiánban kívánjuk számolni. (A radián a szögek mérésére használt mértékegység, 180 fok = PI radián, azaz körülbelül 3.1415 radián.) A 130. sor beállítja a sugár (ill. az állat) kezdő pozícióját - mivel a GRAPHICS utasítás a (0,0) pontra állította és kikapcsolta azt.
A következő PLOT ANGLE utasítás a következőt mondja a számítógépnek: "vedd úgy, hogy a sugár a képernyő jobb oldala felé irányul; majd fordítsd el az óra járásával ellenkező irányba annyi fokkal, amennyit megadtunk". Így pl. a PLOT ANGLE 90 hatására a sugár vagy az állatkánk egyenesen felfelé tartana.
A PLOT FORWARD, ill. a PLOT BACK parancsok hatására a sugár annyi pozíciót halad előre, ill. hátra, amennyit utánuk megadtunk, példánk 140 sorában tehát 500 pozíciót előre.
A PLOT RIGHT és a PLOT LEFT utasítások a megadott szöggel jobbra, ill. balra forgatják a sugár haladási irányát az előző irányhoz képest, programunk 170. sorában pl. jobbra 35 fokkal.
Figyeljük meg, hogy e teknőc-parancsok használata esetén is szükség van a pontosvesszőre ahhoz, hogy a ceruzát felemeljük vagy letegyük a papírra. Érdemes kipróbálni a programot a pontosvesszők nélkül is.

ELLIPSZISEK ÉS KÖRÖK
A következő program ellipszist rajzol:


100 GRAPHICS
110 PLOT 640, 250,
120 PLOT ELLIPSE 100,200,
130 END

A 110. sor az ellipszis középpontját adja meg. A PLOT ELLIPSE utasítást követő első szám a vízszintes, a második a függőleges irányban vett távolságot adja meg (képernyő-pozíció egységben) az ellipszis középpontja és körvonala között. Ha e két szám egyenlő, az utasítás kört rajzol.
Figyeljünk a 110. és a 120. sor végén található vesszőkre. Ha e bármelyikét elhagyjuk, az ellipszis középpontját pont fogja jelölni. Ebből következik, hogy az ellipszis rajzolása után a sugár a középpontban marad.

SZÍNEK
Már eddig is több lehetőségünk volt arra, hogy az Enterprise 256 színének legalább egy részét megcsodáljuk képernyőnkön. A következő példa valamennyi színt egyszerre tárja elénk:


100 PROGRAM "szinek.bas"
110 GRAPHICS 256
120 LET Z=0
130 FOR Y=0 TO 560 STEP 80
140   FOR X=32 TO 1052 STEP 32
150     SET INK Z
160     PLOT X,Y;X,Y+70
170     LET Z=Z+1
180   NEXT
190 NEXT
200 END

Az Enterprise minden egyes színt azonosítószámmal (0-255) azonosít. Az RGB nevű, később ismertetendő függvény azonban megkönnyíti a színkódokkal való bánást.

SZÍNES ÜZEMMÓDOK
Az előző programban a GRAPHICS kulcsszót követően a 256-os számmal jeleznünk kellett, hogy a számítógép valamennyi rendelkezésre álló színét használni kívánjuk. Ezt úgy mondhatjuk, hogy kiválasztottuk a megfelelő színes üzemmódot. Megfigyelhettük, hogy az ezzel a programmal húzott vonalak vastagabbak a korábban látottaknál. Ennek az az oka, hogy a számítógép korlátozott memóriakapacitása miatt több szín használatakor csökken a grafika felbontása. Korábban azt írtuk, hogy egy grafikus lap nagyobb felbontású, mint egy szöveges. Most azonban a felbontás meghatározásához figyelembe kell vennünk, hogy melyik szín-üzemmódot alkalmazzuk. Négy ún. nagyfelbontású (HIRES: High RESolution = nagyfelbontású) grafikus üzemmódot különböztetünk meg. Ezek a következők:

Ha csak a GRAPHICS parancsot adjuk ki, ennek hatása megegyezik az utoljára kiadott GRAPHICS parancs hatásával. A gép bekapcsolása vagy a reset kapcsoló használata után a GRAPHICS parancs hatása a GRAPHICS HIRES 4 parancséval egyezik meg.
A különböző színes üzemmódok nem hatnak a képernyő függőleges felbontására, ez a normál grafikus lapon, amelynek alján négy szövegsor van, mindig 180 pont.
A felbontásbeli különbségek ellenére a színes üzemmódok ugyanazt a koordináta-rendszert használják - így (0,0) mindig a bal alsó sarkot, (640,360) pedig a képernyő közepét jelöli. E koordináta-rendszer valójában akkora képernyőhöz is használható lenne, mint az Enterprise legnagyobb felbontásának kétszerese.

GRAFIKUS ÜZEMMÓDOK
Az eddig megismert nagyfelbontású (HIRES) üzemmódokon kívül van két további grafikus üzemmód.
A kisfelbontású, LORES (LOw RESolution = kisfelbontású) üzemmód mindenben megegyezik a HIRES módokkal, de azzal a különbséggel, hogy a grafikus lap vízszintes felbontása fele akkora lesz. Így a GRAPHICS LORES 16 utasítás kis felbontású képernyőt jelent, amelyen 16 színt használhatunk.
Az attributum- (ATTRIBUTE) mód a képernyő felhasználásának különleges formája, valahol a grafikus és a szöveges mód között. Egyaránt használható karakterek kiírására és rajzolásra is 16 színnel, de elővigyázatos bánásmódot igényel. A GRAPHICS ATTRIBUTE paranccsal állítható be, itt nincs lehetőség színes mód megadására. Részletesen a későbbiekben ismertetjük.

SZÍNEK KIVÁLASZTÁSA
Térjünk most vissza ismét a 256 színes üzemmódhoz, ahol az ábrákat mindenféle színben megrajzolhattuk úgy, hogy a rajzoló utasítások előtt végrehajtottuk a SET INK parancsot, amelyet a kívánt szín kódszáma követett. Hasonlóképpen, a CLEAR GRAPHICS utasítás előtt kiadhatjuk a SET PAPER ... parancsot, ily módon állítva be a háttér (a papír) színét.
Némi gyakorlatozás után megtanulhatjuk, hogy melyik szám milyen színt jelöl - pl. a 18 világoszöld, 91 a fényes sárga stb. De ha konkrét színt szeretnénk használni, és történetesen nem tudjuk a hozzá tartozó kódszámot, nem kell elcsüggednünk, van más mód is a megadására.
Minden létező szín előállítható a piros, a zöld és a kék keverékeként. A fehér pl. mindhárom összekeveréséből adódik, sárgát kapunk, ha pirosat és zöldet keverünk össze, és így tovább. Ez az alapja annak a módszernek, ahogy az Enterprise kezeli a színeket. Ennek megfelelően tetszőleges szín megadható az RGB kulcsszóval és az azt követő, zárójelek között álló, három számmal. Ezek a 0és 1 közé eső számok azt az arányt adják meg, hogy mennyi pirosat, zöldet, ill. kéket kell összekeverni. Így SET INK RGB( 1, .5, .5 ) rózsaszínűre állítja a rajz színét; RGB( .4, .4, 0 ) halvány sárgát, RGB( .6, .6, .4 ) pedig a szürke egy árnyalatát eredményezi. A következő nyolc színre egyszerűen nevük leírásával is hivatkozhatunk (pl. SET INK GREEN). A következő táblázatban megadjuk a hozzájuk tartozó keverékeket:

BLACKRGB(0,0,0) (fekete)
RED RGB(1,0,0) (piros)
GREEN RGB(0,1,0) (zöld)
YELLOW RGB(1,1,0) (sárga)
BLUE RGB(0,0,1) (kék)
MAGENTA RGB(1,0,1) (lila)
CYAN RGB(0,1,1) (világoskék)
WHITE RGB(1,1,1) (fehér)

A PALETTA
A GRAPHICS HIRES 16 utasítás végrehajtása után 16 szín áll rendelkezésünkre, ez még mindig elég nagy választék. Választani közülük paletta megadásával lehet; ez a paletta tartalmazza a rajzoláshoz használható valamennyi színt.
Mindenekelőtt be kell írnunk a SET PALETTE parancsot, ezt követően pedig legalább nyolcat az általunk használni kívánt színekből. Ezek a 256 lehetséges szín közül bármelyikek lehetnek. Megadhatjuk őket kódszámukkal, nevükkel (az előbbi lista szerint) vagy az RGB függvény segítségével. Írhatjuk pl. a következőt:


100 SET PALETTE 67,31,WHITE,4,RGB(0,.3,.8),RGB(.7,.7.1),187,190

ez esetben a fenti színek palettánkon a 0-7 sorszámot kapják.
A hátralevő nyolc szín megválasztása már kevésbé tetszőleges. A paletta 8-15 számú színeinek összefüggő színcsoportba kell tartozniuk. Ezeket a SET BIAS paranccsal választhatjuk ki, amelyet egy számnak kell követnie. E szám tetszőleges színcsoportot jelöl ki. Ha pl. a SET BIAS 67 (vagy bármely más szám a 64-71 tartományban) parancsot adjuk ki, akkor palettánk 8. színe a 64-es lesz, a 9. a 65-ös, és így tovább egészen 71-ig. A színcsoport tehát 8 egymást követő színt tartalmaz, amely nyolccal osztható színkódon kezdődik.
Így tehát kijelöltük azt a 16 színt, amelyet a továbbiakban használhatunk. Fontos tudnunk, hogy minden esetben, ha nem a 256 színes üzemmódot használjuk, a SET INK, ill. a SET PAPER utasításokban levő számok a választott paletta színeire vonatkoznak. E sorszámok 0-val kezdődnek, nem 1-gyel, mint a színek kódjai.
A négyszínű üzemmódban palettánk négy színe a 0-3 sorszámot viseli, így a SET PALETTE utasításban nincs értelme ennél több színt felsorolni. Hasonlóan a kétszínű üzemmódban a paletta megadásakor csak két színre van szükség.
Szükség lehet arra, hogy palettánknak csak egy színét változtassuk meg úgy, hogy közben a többi változatlan maradjon. Ez a SET COLOUR utasítással érhető el; pl., a paletta 3. színét a
SET COLOUR 3,110

utasítással változtathatjuk meg.
Természetesen bármelyik üzemmódot használhatjuk anélkül, hogy palettát definiálgatnánk. Ilyenkor a számítógép bizonyos előre definiált színkészletet kínál számunkra.

A PALETTA HASZNÁLATA
Amennyiben palettánk színkészletét megváltoztatjuk, ez nem csak az ezt követő rajzok, hanem a már képernyőn lévő ábrák színében is változást okoz. Ez lehetőséget ad arra, hogy egyetlen utasítással megváltoztassuk a teljes képernyőt, ami felettébb látványos megoldásokat eredményezhet.
A következő program ellipsziseket rajzol véletlenszerűen választott sugarakkal és színekben, de mivel kezdetben palettánk minden színét egyformán kékre választjuk, a rajzolás nem fog megjelenni a képernyőn. Ha lenyomunk egy billentyűt, a rajzolás befejeződik, és a paletta színeinek váltogatásával programurunk váltogatja a tinta és a háttér színét.
A program végtelen ciklusban fut, ezért megállításához nyomjuk meg STOP billentyűt, ha meguntuk a látványosságot.


100 PROGRAM "Szinek2.bas"
110 RANDOMIZE
120 GRAPHICS HIRES 4
130 SET PALETTE BLUE,BLUE,BLUE,BLUE
140 DO
150   SET INK RND*3+1
160   PLOT 625,330,
170   PLOT ELLIPSE RND*500,RND*300,
180 LOOP WHILE INKEY$=""
190 DO
200   SET PALETTE 0,BLUE,RED,GREEN
210   CALL WAIT
220   SET PALETTE 0,RED,GREEN,BLUE
230   CALL WAIT
240   SET PALETTE 0,GREEN,BLUE,RED
250   CALL WAIT
260 LOOP
270 DEF WAIT
280   FOR X=1 TO 300
290   NEXT
300 END DEF

Megjegyezzük, hogy a PALETTE, INK és PAPER parancsok használhatók szöveges módban is. Ezt a későbbiekben fogjuk tárgyalni.

A PLOT PAINT PARANCS
Ezzel az utasítással az aktuális INK színnel kiszínezhetünk egy zárt idomot. A következő program két kört rajzol, egyiket a másik belsejében, majd különböző színekkel kiszínezi őket.


100 PROGRAM "Kor.bas"
110 GRAPHICS HIRES 4
120 SET PALETTE WHITE,YELLOW,BLUE
130 PLOT 400,400,
140 PLOT ELLIPSE 200,200,
150 PLOT ELLIPSE 80,80,
160 SET INK 3
170 PLOT PAINT
180 PLOT 400,250,
190 SET INK 2
200 PLOT PAINT
210 END

A PLOT PAINT utasítás mindig azt a területet színezi be, ahol a sugár éppen áll. Ezt a területet folytonos vonalnak kell körülvennie, amelynek színe nem azonos a sugár aktuális színével. Ha e vonalon bárhol rés van, a számítógép az egész képernyőt be fogja színezni. A 130., 140., 150. és 180. sorok vesszővel végződnek, erre azért van szükség, hogy a sugár ne rajzoljon pontot az adott helyre. Ebben az esetben ugyanis a PLOT PAINT parancs ezt a pici pontot színezné be.

LINE STYLE ÉS LINE MODE UTASÍTÁSOK
A LINE STYLE utasítás lehetővé teszi különböző szaggatott vonalak használatát. PI. a SET LINE STYLE 10 utasítás végrehajtása után minden vonal hosszú kis közű vonalakból fog állni, egészen a LINE STYLE visszaállításáig. 14 féle vonaltípus lehetséges, ezeket 1-től 14-ig számozzuk.
A SET LINE MODE utasítás arra vonatkozik, hogy az egymást metsző vonalak hogyan viselkedjenek egymással szemben. 0-s módban (amely a gép bekapcsolásakor érvényes) a másodszor rajzolt vonal egyszerűen felülírja már meglévőt, a további módokban (1-3) a tinták színei különböző módok keverednek. Részletes leírás a könyv utolsó fejezetében található.

LAPOK ÉS CSATORNÁK
Mindeddig abból a célból, hogy üres laphoz jussunk, amire rajzolni, ill. írni lehet a GRAPHICS, ill. a TEXT parancsot használtuk. Az esetek nagy részében ez a lehetőség meg is felel igényeinknek, ám később igényelni fogjuk azokat a széles körű lehetőségeket, amiket a csatornák nyújtanak a lapok meghatározására. csatornákat általában 1 és 100 közé eső számmal azonosítjuk.
A most következőkben ajánlatos figyelembe vennünk a Csatornák alfejezet, valamint a Referencia Kézikönyv vonatkozó részeit (pl. Video feltételek, az OPEN kulcsszó). Annak, hogy egy lapot egy csatornával azonosítsunk, két fő előnye lehet:
(1) Több, különböző ábrát vagy szöveget tartalmazó lap tárolható segítségével a számítógép memóriájában, és ezek bármelyike megjeleníthető egyetlen paranccsal.
(2) Megadhatjuk a lap méretét. Így készíthető olyan rajz, amely (majdnem) az egész képernyőt kitölti (a legfelső, állapotkijelző sorba nem írhatunk); avagy takarékoskodhatunk a memóriával azáltal, hogy kisebb képméretet adunk meg. Megadható továbbá a kép vízszintes helyzete is, előfordulhat, hogy csak egy részén jelenik meg.
A következő példa kicsi szöveges lapot definiál és a képernyő közepére helyezi:


90 SET BORDER CYAN
100 SET VIDEO MODE 0
110 SET VIDEO COLOUR 0
120 SET VIDEO X 20
130 SET VIDEO Y 10
140 OPEN £1:"VIDEO:"
150 DISPLAY £1: AT 7 FROM 1 TO 10
160 PRINT £1:"Ez egy kis lap..."
170 END

A 140. sorban az 1. számú csatornát hozzárendeltük az új képlapunkhoz. ezelőtt ki kellett adnunk a videomód és a színmód beállító parancsokat. A VIDEO MODE 0 egy 40 oszlopos szöveges; VIDEO MODE 1 grafikus, a VIDEO MODE 2 pedig 80 oszlopos szöveges képernyőt definiál.
A SET VIDEO COLOUR utasítás a szín-üzemmódot állítja be a következők szerint:

VIDEO COLOUR 0 - 2 szín mód;
VIDEO COLOUR 1 - 4 szín mód;
VIDEO COLOUR 2 - 16 szín mód;
VIDEO COLOUR 3 - 256 szín mód;

A szöveges képernyőnek mindig a VIDEO COLOUR 0 módban kell lennie, ez is lehetővé teszi néhány szín használatát.
Programunk 120. és 130. sora a lap méretét adja meg karakterpozíció egységekben. A 150. sor a lap felső részét (10 karaktersort) a képernyőre helyezi, a 7. sorban kezdődően. Ez esetben, mivel lapunk összesen 10 sor óságú, a teljes lap látható lesz. Figyeljük meg, hogy a 160. sorban levő PRINT utasításban fel kell tüntetni a csatorna számát ( £1).
Definiálható olyan lap is, amelynek függőleges mérete nagyobb a képernyő méreténél. Egy lap max. 255 karakter-sor magas lehet.
A következő példaprogram 3 lapot definiál, és ezeket egyszerre a képernyő különböző részein jelenteti meg:


100 PROGRAM "Videolap.bas"
110 SET VIDEO MODE 0
120 SET VIDEO COLOUR 0
130 SET VIDEO X 42
140 SET VIDEO Y 8
150 OPEN £1:"video:"
160 SET VIDEO MODE 1
170 SET VIDEO COLOUR 3
180 OPEN £2:"video:"
190 SET VIDEO COLOUR 1
200 OPEN £3:"video:"
210 DISPLAY £1:AT 9 FROM 1 TO 8
220 DISPLAY £2:AT 1 FROM 1 TO 8
230 DISPLAY £3:AT 17 FROM 1 TO 8
240 PRINT £1:"Ez soveg."
250 PLOT £2:600,150,ELLIPSE 350,100
260 PLOT £3:600,100,ELLIPSE 300,50
270 END

Az előbbi program lefuttatása után vissza kell térnünk normál, szöveg üzemmódba ahhoz, hogy lássuk, amit begépelünk. Ehhez írjuk be a TEXT parancsot, vagy nyomjuk le az 5-ös funkcióbillentyűt.
Minden egyes laphoz önálló paletta tartozik, de a SET BIAS parancs összes képernyőre vonatkozik. A csatornák használata lehetővé teszi, hogy akár akkor is írjunk egy lapra, ha az éppen nem látszik a képernyőn. Szintén lehet karaktereket írni grafikus lapokra az aktuális sugárpozíciótól kezdve. Ha pl. a 3. csatorna grafikus lapként van megnyitva, a következőképpen írhatunk rá betűket:
PLOT £3: 640,50
PRINT £3:"Udv!"

A KERET SZÍNÉNEK BEÁLLÍTÁSA
Számítógépünk lehetőséget ad arra, hogy a látható képernyőt körülvevő keret színét beállítsuk. Ez a SET BORDER paranccsal végezhető, amely független a palettaszínektől, így hozzá önálló színkódszámot, színnevet vagy keverési arányt (RGB függvény) kell megadnunk. Így pl. a SET BORDER 255, a SET BORDER WHITE és a SET BORDER RGB(1,1,1) parancsok egyformán fehérre állítják a képernyő keretét.
Amennyiben a SET BORDER parancs kiadásakor a 101. csatorna-amely a normál grafikus képernyőt jelöli - nincs megnyitva, a parancsot megfelelő csatornaszámmal kell kiadnunk (erre a célra általában a 102. csatornát használjuk, amely a normál szöveges képernyőt jelöli). PI.:
SET £102: BORDER 116

A KARAKTERKÉSZLET
Az Enterprise-nak meghatározott karakterkészlete van, amely az általánosan használt ún. ASCII készlet kibővített változata. Ebben a készletben valamennyi karakternek 32 és 159 közötti kádszáma van. Egy karakterre hivatkozhatunk karakteres formájában (pl. PRINT"N") vagy kódja segítségével (PRINTCHR$(78)) egyaránt.
A számítógép ezekkel a kódokkal kezeli a karaktereket, és mindaddig, míg valami különleges kívánságunk nincsen, ennek megoldásával nem kell törődnünk. Rövid magyarázatként azt mondhatjuk, hogy ha pl. lenyomunk egy billentyűt - mondjuk az "a"-t - a gép jelzést kap, hogy egy billentyű le van nyomva. Ezután a lenyomott billentyű kódját - és nem az alakját - továbbítja egy másik részbe, amely értelmezi a leolvasott karaktert, és olyan ábrát állít elő, amely már kiírható a képernyőre.
Mindeddig azt tapasztalhattuk, hogy ha lenyomunk egy billentyűt, az ábra abban a pillanatban megjelenik a képernyőn. Elképzelhetjük tehát, hogy milyen gyorsnak kell lennie számítógépünknek ahhoz, hogy ezeket a bonyolult műveleteket egy pillanatnak tűnő idő alatt végrehajtsa.
A következő program kiírja számunkra a teljes ASCII karakterkészletet és egy beírt karakternek kiírja a kódját.


100 PROGRAM "Karakter.bas"
110 CLEAR SCREEN
120 FOR N=32 TO 159
130   ! Ez a ciklus kiirja a 128 elore
140   ! definialt karaktert -kihagyva
150   ! a 32-nel kisebb kodu un.
160   ! kontrol-karaktereket.
170  PRINT CHR$(N)
180 NEXT
190 DO
200  DO
210     INPUT PROMPT "Irj be egy karaktert, es kiirom a kodjat!":C$
220     IF LEN(C$)>1 THEN PRINT "Csak egy karaktert kerek!"
230   LOOP WHILE LEN(C$)>1
240   PRINT C$;" ASCII kodja:";
250   PRINT ORD(C$)
260   PRINT
270   ! Az ORD fugveny egy karakter
280   ! kodjat adja meg.
290   DO
300    INPUT PROMPT "Tovabbi karakterek (i/n)?":A$
310   LOOP WHILE A$<>"i" AND A$<>"n"
320 LOOP WHILE A$="i"
330 END

Amint látható, az ORD a CHR$ függvény ellentéte. Az ORD a karakter ASCII kódját adja meg, míg a CHR$ az adott kódhoz tartozó karaktert.

SAJÁT KARAKTERKÉSZLET DEFINIÁLÁSA
Miután megismerkedtünk az ASCII kódokkal, legfőbb ideje arról is szólnunk, hogyan lehet olyan karakterkészletet adni a számítógépnek, amilyenre éppen szükségünk van. Minden egyes ASCII karakterhez tartozik ugyan egy előre meghatározott forma, mi azonban ezt a formát megváltoztathatjuk.
Képzeljük el, hogy minden egyes karakterábra kilenc lámpasorból áll, ahol minden egyes sorban nyolc lámpácska van. Ahhoz, hogy ezekből ábrát formáljunk, egyes lámpácskáknak világítani kell, másoknak nem. Számítógépünkben ezeknek a lámpácskáknak apró képpontok felelnek meg, amelyek olyan közel állnak egymáshoz, hogy ha két, egymás melletti pont be van kapcsolva (világít a lámpa), azok egybefüggőnek tűnnek. Egy karakter definiálása ezeknek a pontoknak az elhelyezkedését adja meg, egy 8 * 9 -es mezőben.
Ahhoz, hogy ezt az információt számítógépünk számára érthetővé tegyük, bekapcsolt pontokat 1-es, az üreseket 0-s számnak kell elképzelnünk. Így soronként nyolc számjegyből összeállítható egy karakter ábrája, ahogy azt a
következő példában látni fogjuk.


100 PROGRAM "Set_char.bas"
110 NUMERIC N(1 TO 9)
120 ! Egy normal karakter 8 pont
130 ! szeles, es 9 pont magas.
140 ! Igy minden sort egy 8 jegyu
150 ! szam ir le. Kilenc ilyen szam
160 ! pedig definialja a karaktert.
170 DATA 00111110
180 DATA 01000001
190 DATA 01010101
200 DATA 01000001
210 DATA 00100010
220 DATA 00010100
230 DATA 00001000
240 DATA 00000000
250 DATA 00000000
260 FOR SOR=1 TO 9
270   READ N(SOR)
280 NEXT
290 SET CHARACTER 63,BIN(N(1)),BIN(N(2)),BIN(N(3)),BIN(N(4)),BIN(N(5)),BIN(N(6)),BIN(N(7)),BIN(N(8))
300 ! A BIN utasitja a szamitogepet,
310 ! hogy a kovetkezo szamokat
320 ! binaris szamkent kezelje.
330 PRINT "?"
340 PRINT CHR$(63)

A 290. sorban van az a parancs, amely az információt tárolja az új karakter: számára. Ezzel átdefiniáltuk a kérdőjelet! A 63 szám ennek ASCII kódja, és az egyesek és nullák jelentik a pontokat és üres helyeket, amelyek az új karaktert formálják. A 330. és a 340. sorban ezt az új kérdőjelet íratjuk ki. Érdemes megpróbálni, gépeljünk be közvetlenül egy kérdőjelet.
Ha egyszer egy program módosította a karaktereket, akkor mindaddig, amíg a CLEAR FONT parancsot ki nem adjuk, vagy a "reset" gombot kétszer gyors egymásutánban meg nem nyomjuk vagy a gépet ki nem kapcsoljuk, az új karaktereket írathatjuk ki a képernyőre.
A karakterek módosításával szinte új távlatok nyitnak meg előttünk, hiszen teljes karakterkészletünket gót vagy cirill betűssé alakíthatjuk, vagy a különböző játékokhoz érdekes új alakzatokat teremthetünk és így tovább.

A ZENEI KÍSÉRET
A legtöbb programnak értékes kiegészítői lehetnek különféle hangeffektusok Komoly, nagy programok is használhatnak hangjelzéseket (pl. figyelmeztetésre) a játékprogramok vonzerejét pedig a jó zenei aláfestés nagymértékben növelheti.
Az Enterprise lehetővé teszi, hogy a hangokat - akár sztereóban is fejhallgatón vagy erősítőn keresztül hallgathassuk. Ha így használjuk, a beépített hangszóró a SET SPEAKER OFF paranccsal vagy a 7. funkcióbillentyűvel kikapcsolható.
A hangokat a SOUND és az ENVELOPE BASIC kulcsszavakkal lehet szabályozni. A SOUND parancs beállítja a hang kezdeti magasságát, max. erősségét, időtartamát stb. Az ENVELOPE (=boríték) kifejezés olyan utasítások halmaza, amelyek a hang kibocsátási idejére részletesen megadják a hangmagasság- és hangerőváltozásokat.

A SOUND UTASÍTÁS
Lássunk egy példát a SOUND utasítás használatára:


100 SOUND PITCH 40, LEFT 127, RIGHT 191, DURATION 200, ENVELOPE 10

Példánkban a PITCH után álló szám megadja, hogy a hang milyen magasságon szólaljon meg. Ez a szám elvileg 0 és 127 közötti lehet, de mivel a 127-es hang már olyan magas, hogy szinte nem hallható, általában nem használunk a 83-asnál magasabb hangokat. E tartományon belül az egységnyi növekedés a hang magasságát fél hanggal emeli. A 37 PITCH-érték felel meg a normál C hangnak; ha nem adunk meg külön PITCH-értéket, a számítógép ezt használja alapértelmezésként.
A sor második eleme megadja, hogy a bal oldali hangszóró max. milyen hangerővel működhet, értéke 0 és 255 közötti lehet. A 0 megadása kikapcsolja hangszórót, míg a 255 lehetővé teszi, hogy a számítógép az elérhető leghangosabban szóljon a bal hangszárából. Ez utóbbi érték a hangerő alapértelmezése is. Példánkban a LEFT 127 azt jelenti, hogy a bal oldali hangszórónk soha nem szól a max. hangerő felénél hangosabban. Ehhez hasonlóan a RIGHT szóval adhatjuk meg a jobb hangszóró max. hangerejét.
Ez után a DURATION kulcsszóval beállíthatjuk a hang hosszát. Itt az egység a másodperc ötvened része - így példánkban a DURATION 200 kb. 4 másodperces hangeffektust jelent. Az időtartam alapértelmezése 50 egység, azaz kb. 1 másodperc.
Az ENVELOPE szó után álló szám egy ilyen számú ENVELOPE utasításra utal, amelyet a SOUND paranccsal összefüggésben használhatunk. Számítógépünk előre beépített ENVELOPE kifejezése a 255. számot viseli, ez egyben alapértelmezés. Az általunk készített ENVELOPE kifejezéseket a 0 és 254 közötti számok valamelyikével azonosíthatjuk.
Megjegyezzük, hogy a SOUND kulcsszót követő paraméterek tetszés érinti sorrendben állhatnak. Rövidesen sor kerül annak a néhány további szónak a tárgyalására, amelyeket felvehetünk erre a listára.
Mivel valamennyi paraméternek van alapértelmezése, bármelyiket kihagyhatjuk, sőt az egyedülálló SOUND parancs is meg tud szólaltatni egy bizonyos hangot.

AZ ENVELOPE
Lássunk egy példát az ENVELOPE kifejezésre:


90 ENVELOPE NUMBER 10; 2,8,63,50;0,24,-16,100;-5,47,-39,50

A kulcsszót ismét meglehetősen hosszú paramétersorozat követi.
Ezek közül a NUMBER 10 az ENVELOPE azonosítója, amint azt előző példánkban láttuk.
Ezt pontosvessző követi, majd több, vesszővel elválasztott szám. Ezek a számok határozzák meg a hang jellemzőit az első fázisban, azaz teljes idejének az első részében (példánkban ez az első másodperc). A számcsoport első értéke azt adja meg, hogy ez alatt az idő alatt mennyit változik a hang magassága. A példában a hang az első másodpercben 2 félhangot emelkedik az eredeti hangmagassághoz képest (ha pl. -1.5 értéket adtunk volna meg, ez három negyedhanggal csökkentette, 0 pedig állandó értéken tartotta volna a hangmagasságot). A következő szám - példánkban a 8 - a bal hangszóró hangerőváltozását adja meg. Az ENVELOPE utasításban a hangerő egysége a SOUND utasításban megadott max. hangerő 64-ed része, a kiindulás pedig a SOUND utasításban megadott hangerő. Így tehát a 63-as szám mindig maximumra növel, míg a -63 minimumra csökkenti a hangerőt. Az időtartam kezdetén a hangnak természetesen semmiféle hangereje nincsen. Így példánkban az ENVELOPE első fázisában a hangerő nulláról indulva emelkedik addig, míg a maximális hangerő nyolcadát el nem éri. A következő szám hasonlóan adja meg a jobb hangszóró hangerejének változását.
A SOUND és az ENVELOPE kifejezések együtt adják meg a hangerő értékét a jobb és a bal oldali hangszóróra külön-külön. E két érték összege adja azt a hangerőt, amelyet akkor hallunk, ha nem sztereo berendezést használunk.
A negyedik szám a sorban az első fázis időtartamát adja meg. Az idő egysége itt ismét a másodperc ötvened része.
Ezek után pontosvesszővel elválasztva következik a második fázis leírása pontosan ugyanúgy, ahogy ezt eddig láttuk. Majd újabb pontosvessző után a harmadik szakaszt leíró számcsoport fejezi be az ENVELOPE utasítást. Ha lefuttatjuk példaprogramunkat, a jobb oldali diagramokon ábrázolható hangot hallhatjuk.
Természetesen lehetőség van ennél sokkal bonyolultabb hangok megszólaltatására is. Rövidesen megvizsgáljuk, hogyan írhatunk le egy ENVELOPE-ban max. 255 fázist.

Emlékeztetünk arra, hogy az ENVELOPE utasítás valamennyi értéke a SOUND parancsban megadott értékekhez csatlakozik. Így egy ENVELOPE használható több SOUND utasításhoz is. Ügyelni kell azonban arra, hogy az ENVELOPE kifejezés a program olyan helyén legyen, hogy a legelső rá hivatkozó SOUND utasítás előtt végrehajtsuk.

A HANGOK SORBAN ÁLLÁSA
Egy hang kiadása nem tart fel semmiféle más tevékenységet a számítógépben. A következő programban grafikus parancsokat hajtunk végre, miközben hangot bocsát ki a számítógép.


100 PROGRAM "Hang.bas"
110 ENVELOPE NUMBER 20;-2,63,63,100;-3,0,0,100;3,-36,-36,100;2,-12,-12,100;0,0,0,100
120 SOUND PITCH 61,LEFT 255,RIGHT 0,DURATION 500,ENVELOPE 20
130 CLEAR SCREEN
140 PRINT AT 10,1:"Most egy abrat rajzolunk,"
150 PRINT AT 11,1:"mely megmutatja a felhasznalt hangokat."
160 PRINT AT 12,1:"A hangerot a kek, a hangmagassagot"
170 PRINT AT 13,1:"sarga szinnel jelezzuk."
180 SOUND PITCH 43,LEFT 127,RIGHT 127,DURATION 200,ENVELOPE 20
190 FOR X=1 TO 2000
200 NEXT
210 SOUND PITCH 25,LEFT 0,RIGHT 255,DURATION 500,ENVELOPE 20
220 GRAPHICS
230 PLOT 0,0;250,540;500,540;750,270;1000,180;1250,180;1250,0;0,0
240 PLOT 100,20,
250 PLOT PAINT
260 SET INK 3
270 PLOT 0,450;250,350;500,100;1000,450;1250,450
280 END

A 120. sorban a számítógép játszani kezdi a zenét, de nem várja meg, míg befejeződik, hanem továbblép a következő programsorokra. Ezeket végrehajtva elérkezik a 180. sorhoz, ahol újabb hang megszólaltatására adtunk utasítást. De mivel az előző hang még szól, a gép megjegyzi, hogy újabb zenei kérés érkezett, és ezt csak az első befejezése után kezdi játszani. Ehhez hasonlóan a 210. sorban kért hangeffektus is csak akkor szólal meg, ha a 180. sorban kért már befejeződött. A SOUND utasítások tehát sorban állva kezdésre várnak, mialatt a gép tovább folytatja programját, azaz példánkban tovább rajzol.

A RELEASE KULCSSZÓ HASZNÁLATA
Az Enterprise lehetőséget ad arra, hogy egy ENVELOPE végén egy vagy több fázist a többitől kissé eltérő módon kezeljünk. Ezeket a fázisokat a RELEASE (=kioltás) szóval kell bevezetni. Általában egy ENVELOPE kioltási részének azt a szakaszt nevezzük, ahol a hang valójában már megszűnt (lecseng), már csak utóhangjai hallhatók. Nézzük meg a következő példát:


100 ENVELOPE NUMBER 4;1,63,40,5;-.3,-32,-20,20; 2,0,0,25; RELEASE; 0,-16,-10,10; 0,-15,-10,15

Itt az ENVELOPE fő része 1, míg a RELEASE része fél másodpercig tart.
A RELEASE és a fő rész közötti különbség, hogy ha a SOUND utasításban megadott időtartam (DURATION) letelik, mielőtt a fő rész befejeződne, akkor megrövidül; ezzel szemben a RELEASE rész még akkor is elhangzik, ha a számára fenntartott idő letelik, feltéve, hogy nem áll sorban egy új SOUND utasítás.
Tehát ha a fenti ENVELOPE-ra hivatkozó SOUND utasításban DURATION 25-öt adtunk meg, akkor a harmadik fázis nem hangzik el, helyette a számítógép a RELEASE részre ugrik, vagy ha van várakozó hangkérés, akkor arra.
Ha viszont pl. DURATION 60-at adunk meg, a számítógép végrehajtja mindhárom fázist, majd az első RELEASE fázist, és ha ekkor van várakozó SOUND, akkor azzal folytatja a zenélést.
DURATION 100 esetén pedig valamennyi fázis elhangzik, és ezután legalább fél másodpercnyi szünet van a következő hang felharsanásáig.

MEGSZAKÍTÁS
Bár már sok érdekes dolgot megismertünk a hangadás vezérléséről, még mindig van néhány felfedezésre váró megoldás: lehetőség van pl. arra, hogy az egyik hang félbeszakítsa a másikat. Ha visszatérünk ahhoz a példához, amelyben a gép ábrákat rajzolt hangadás közben, kipróbálhatjuk ezt a lehetőséget is, ha a következő változtatásokat tesszük:
Töröljük ki a 140-170, 190-200 és a 220-270. sort, és írjuk be a következőket:


220 ENVELOPE NUMBER 30;0,63,63,1;0,0,0,24
230 PRINT "Nyomd meg az I billentyut, ha azt akarod, hogy megszakitsam ezt a hangot!"
240 DO
250 LOOP UNTIL INKEY$="i"
260 SOUND PITCH 37, LEFT 255, RIGHT 255, DURATION 25, ENVELOPE 30, INTERRUPT

A 260. sorban az INTERRUPT szó jelzi, hogy amikor a program ehhez a sorhoz ér, az éppen szóló zenébe belevágva meg kell szólaltatni ezt a hangot, figyelmen kívül hagyva minden sorban álló utasítást.

HANGFORRÁSOK
Az Enterprise lehetővé teszi, hogy egyszerre több hangot megszólaltassunk. Rendelkezésünkre áll a 0-3 számokkal azonosított négy hangforrás és mindegyik egymástál függetlenül sorban állhat.
Alapértelmezésként mindeddig a 0-s hangforrást használtuk. Ahhoz, hogy meghatározott hanggenerátornak adhassunk parancsot, a SOUND parancsba be kell illesztenünk a SOURCE szót, amelyet a kívánt hangforrás száma követ.
A SYNC kulcsszó teszi lehetővé a különböző hangforrásokhoz rendelt zenék egyszerre indítását. A SYNC szót- amelyet szintén a SOUND parancsban adhatunk meg - követő szám azt jelzi, hogy hány másik hangforrásra kell várakoznunk. Próbáljunk meg több SOUND parancsot beírni egy programba, megosztva Őket a 0-s, 1-es és a 2-es forrás között. Elindítva a programot, a három hanggenerátorra több zene kérés fog várakozni.
Ha mindegyik hangforrásra vonatkozó legelső parancshoz hozzáírjuk a SYNC 2 parancsot, pl.


120 SOUND PITCH 40, LEFT 255, RIGHT 127, DURATION 200, ENVELOPE 6, SOURCE 1, SYNC 2

akkor elérjük azt, hogy a három hang azonos pillanatban szólaljon meg.
A "CLEAR QUEUE n" paranccsal megállíthatjuk az n-edik hangforrás működését, és kitörölhetjük valamennyi e forrásra várakozó SOUND kérést. Megjegyezzük, hogy az INTERRUPT alkalmazása nem szakít félbe más hangforrásokból származó zenéket.

MÉG BONYOLULTABB HANGKELTÉS
Ha nem utasítjuk másképp, számítógépünk feltételezi, hogy egy ENVELOPE max. 20 fázist tartalmaz. Ha valami miatt ennél többre lenne szilségünk, pl. 25-re, azt a következő módon tehetjük lehetővé:


100 CLOSE £103
110 SET SOUND BUFFER 25
120 OPEN £103:"SOUND:"

A 100. és a 120. sorban egyszer lezárunk, majd megnyitunk egy csatornát. Erre azért van szükség, mert a SET SOUND BUFFER utasítás csak az utána megnyitandó csatornákra vonatkozik, a már nyitva levőkre nem. A 103-as az általánosan használt hangcsatorna.
Végül a SOUND kifejezés tartalmazhatja a STYLE szót, amelyet követő 0 és 255 közé eső szám különféle hanghatások kiváltását teszi lehetővé. Ezzel kapcsolatban részletesebb információ a Referencia kézikönyv című fejezetben található.

FELADATTÓL A KÉSZ PROGRAMIG
Az eddigiekben nem foglalkoztunk azzal, hogyan lehet megfogalmazni egy-egy feladatot úgy, hogy azt a számítógép megértse. Pedig nagyon fontos, hogy olyan programot készítsünk, hogy annak működését később is nehézségek nélkül megértsük. Ebben a fejezetben éppen ezt a kérdést tárgyaljuk.

A FELADAT
Foglalkozzunk most azzal a feladattal, hogy mennyi pénzt takaríthatunk meg azzal, ha leértékelésen vásárolunk bizonyos árukat.
E probléma megoldásához csak két dolgot kell tudnunk: az eredeti árat és azt a százalékot, amennyivel a bolt olcsóbban kínálja portékáját. E két számbáb könnyedén kiszámíthatjuk az árcsökkenés mértékét és azt, hogy valójába mennyit kell fizetnünk az áruért. Ha programot akarunk írni, az első és legfontosabb feladat annak a eldöntése, hogy nagyon pontosan mit is akarunk csinálni. Esetünkben ez program

  1. beolvas két számot, amelyek az eredeti árat és a százalékot jelentik;
  2. kiszámítja, hogy milyen összeg felel meg az ár ilyen százalékának;
  3. kivonja a csökkenést az eredeti árból, hogy megkapjuk az új vételárat, végül
  4. közli velünk számításai eredményét, és megkérdezi, hogy akarunk-e más árakkal is számolni.

Ez eléggé egyszerű volt. A következő lépés annak eldöntése, hogy a program mindezt hogyan fogja végrehajtani. Egy program elkészítésének mindig nagyon sok módja van. Mégis van néhány olyan általános szabály, amelyeket érdemes figyelembe vennünk.

MODULÁRIS PROGRAMOK
Egy igazán jól, szépen megírt program moduláris felépítésű - tehát jól elkülöníthető, egymással összekapcsolódó részekből áll. Nincsen értelme csak írni egymás után a BASIC sorokat, az ilyen, nem átgondolt módszer eredménye áttekinthetetlen, zavaros program lesz, amelyben rendkívül nehéz lehet megtalálni a hibákat. Igyekezzünk olyan programot írni, amelyik a legkisebb erőfeszítéssel hajtja végre a feladatát, és működési módja bárki számára jól áttekinthető és világos. A moduláris felépítésű program a következő részekből áll:

  1. a globális változók deklarációja;
  2. a fő- (vezérlő-) program;
  3. az END utasítás, amely jelzi a számítógépnek, hogy a program futása befejeződik (nem kell, hogy ez egyben a program utolsó sora is legyen);
  4. a különböző függvények, amelyek a feladat egyes részeit hajtják végre;
  5. a DATA adathalmazok - ha egyáltalán használjuk őket.

Ha ilyen általános programszerkezetet követünk, a programozás kevésbé időtrabló, kevésbé fáradságos és lényegesen egyszerűbb.

A PROGRAM RÉSZEI
Elsőként a globális változókat kell deklarálni, azért, mert ha a számítógép egy olyan sort talál, amelyben egy még korábban értéket nem kapott változó van, előfordulhat, hogy hibát jelezve leáll. Ha viszont valamennyit a program legelején összegyűjtve deklaráljuk, akkor ez nem következhet be. A változók másik típusát, a lokális változókat majd csak a függvényeikben deklaráljuk.
Másodiknak a program fő része következik, amelyet azért kell ide helyezni, hogy programunk legelején azonnal tisztázódjék, hogy a program mire jó és milyen az általános működése. A főprogram nagyrészt alprogramok, függvények hívásait tartalmazza. A függvényt fekete dobozként képzelhetjük el, amelybe a főprogram adatokat ad be, és az új adatokat ad vissza. Minden egyes függvény kezelhető önálló programként is, tartalmazhatják további, alacsonyabb szintű függvények hívásait, így programunk nagyon világos rendszerben építhető fel.
A DATA utasításoknak nem kell feltétlenül a program végén állniuk, de ajánlatos valamilyen ehhez hasonlóan kiemelt helyre tenni őket. Ez ugyanis egyszerűbbé teszi a hibás adatok keresését. DATA utasítások használhatók függvények belsejében lokális változóként is. Végül ne felejtsünk el sok megjegyzéssort elhelyezni a programban, amelyek elmagyarázzák az egyes utasítások, változók feladatát, és segítenek a homály eloszlatásában, ha egy régebben írt programunkat vesszük ismét elő.

FELADAT FOLYTATÁSA
Térjünk most vissza a korábban felvetett problémánkhoz.
Először is határozzuk meg a főprogram feladatát. Jelen esetben ez elég egyszerű: kérje meg a használót, hogy írja be az ár- és százalékadatot, ezeket az értékeket adja át a számítást végző függvénynek, majd közölje velünk a végeredményt. Végül kérdezze meg, hogy akarunk-e tovább dolgozni. Ezután el kell döntenünk, hogy hány függvényre lesz szükségünk. Esetünkben, mikor mindkét szükséges számítás roppant egyszerű, egy függvény is elegendő lesz. Nevezzük e függvényt SZAMLALO-nak.
A következő lépés annak meghatározása, hogy a számítógép mi módon hajtsa végre a szükséges számításokat. Példánkban az, hogy mennyi egy ár szarozva a százalékával, a következő képlettel számítható ki:
eredmény=(ár/100)*százalékérték
A fizetendő árat pedig úgy kaphatjuk meg, hogy a régi árból levonjuk az engedményt.
Ezek után már kigondolhatjuk, hogy milyen változókra lehet szükségünk; ezek a következők:

Mivel az első két változót INPUT utasítás kérdésére fogjuk beírni, ezért ezeket nem szükséges külön deklarálni. Azt tehát már tudjuk, hogy a program elején két változót kell deklarálnunk. Az eddigiek alapján már megírhatjuk a függvényt, amely a következő lesz:


DEF SZAMLALO
  LET EP=(AR/100)*ESZ
  LET UJAR=AR-EP
END DEF

Most, miután már tudjuk, hogy a programnak melyek a részei, és milyen sorrendben követik egymást, hozzáláthatunk a teljes BASIC program megírásához. Ennél lényegesen bonyolultabb feladat esetén természetesen nem kezdhetnénk meg máris a konkrét programozást, nagy valószínűséggel előtte még: rengeteg jegyzetpapírt teleírnánk az előző gondolatmenet végigjárása közben. Programunk tehát a következőképpen kezdődik:

100 PROGRAM "Ar.bas"
110 NUMERIC EP,UJAR
120 DO
130   CLEAR SCREEN
140   INPUT PROMPT "Ird be az arat: ":AR
150   INPUT PROMPT "Ird be a szazalekos arengedmenyt: ":ESZ
160   CALL SZAMLALO
170   CLEAR SCREEN
180   PRINT "A ";AR;" Ft arbol a ";ESZ;" engedmeny"
190   PRINT EP;" Ft megtakaritast jelent."
200   PRINT
210   PRINT "Az uj ar ";UJAR;" Ft lesz."
220   PRINT
230   PRINT
240   INPUT PROMPT "Akarsz uj arakkal szamolni?":VALASZ$
250 LOOP WHILE UCASE$(VALASZ$(1:1))="I"
260 END
270 DEF SZAMLALO
280   LET EP=(AR/100)*ESZ
290   LET UJAR=AR-EP
300 END DEF

Ezzel megoldottuk a fejezet elején felvetett problémát. Programunk működik, bár még találhatunk benne finomítandó részleteket. Tehetünk bele pl. még néhány megjegyzést, amelyek elmagyarázzák a szók jelentéseit vagy az egyes utasítások feladatát.
Programunkat ezen kívül nem védi semmi hibás beírások ellen sem, amelyek pedig hibás működéshez, esetleg a program megszakadásához üthetnek. Javasoljuk, hogy gyakorlásképpen egészítsük majd ki a programot olyan sorokkal, amelyek megakadályozzák, hogy a program hibás adat (pl. negatív százalékérték vagy a szám helyett betű) megadása esetén hibás műveleteket végezzen és megszakadjon a futása.

A MINIMÁL BASIC
Amint tudjuk, a BASIC nyelvnek - a beszélt nyelvekhez hasonlóan - több változata, dialektusa van. Az Enterprise ezeknek a tájszólásoknak az egyikét téli. Ez a BASIC változat az eredeti BASIC nyelv jelentős kibővítésével jött létre.
Azért, hogy a különböző BASIC nyelvjárásokat értő gépek között mégis tudjanak programokat cserélni, kidolgozták a BASIC nyelv minimális változatát, amelyet a legtöbb mikroszámítógép megért. Ezek közé tartozik az Enterprise is. Ebben az alfejezetben ismertetjük a BASIC minimális változatának azokat elemeit, amelyekkel eddig még nem találkoztunk.

ELÁGAZÁSOK
Már jónéhány BASIC programmal találkoztunk e könyvben és még egyszer sem volt arra szükségünk, hogy egy programot ne sorban, az elejétől a vége felé haladva hajtsunk végre, hanem valami más, mesterkélt sorrend szerint. Ezt a lehetőséget, amely nemcsak egyszerűsíti a programírást, de a program áttekinthetőségét is óriási mértékben növeli, csak az Enterprise BASIC dialektusának köszönhetjük. A Minimál BASIC nyelvben óhatatlan, hogy a program végrehajtásának sorrendjét időnként elágazások szervezésével áttekinthetetlenebbé tegyük.
Ennek megvalósítására két utasítás használható: a GOTO és a GOSUB. Mindketten arra utasítják a számítógépet, hogy ugorjon a program egy másik részére.

A GOTO UTASÍTÁS
A GOTO utasítás után sorszám jelzi, hogy melyik sorban kell a program végrehajtását folytatni.


100 CLEAR SCREEN
110 INPUT PROMPT "Szereted a szamitogepeket? ":V$
120 IF V$="i" THEN
130   GOTO 220
135   ! A program a 220. sorban folytatodik
140 ELSE IF V$="n" THEN
150   GOTO 240
155   ! "n" valasz eseten ugras a 240. sorra
160 ELSE
170   GOTO 110
180   ! ha ertelmetlen a valasz
190   ! ujra beolvassuk
200 END IF
220 PRINT "Akkor jo!!!"
230 END
240 PRINT "De engem ugye majd megszeretsz..."
250 END

Programunkból látható, hogy a GOTO utasítással egy programsorra hivatkozhatunk. Érdemes megfigyelni, hogy a 170. sor utasításával tulajdonképpen egy ciklust szerveztünk.

A GOSUB UTASÍTÁS
A GOSUB utasítás hasonló a GOTO-hoz annyiban, hogy ez esetben is egy sorszámmal adjuk meg, hogy programunkat melyik sorban akarjuk folytatni. A lényeges különbség az, hogy itt elvárjuk, hogy előbb-utóbb vissza is térjen. Ahhoz, hogy a GOSUB utasítást használjuk, programunknak egy részét el kell különítenünk a többitől. Ez a rész - az ún. szubrutin - végrehajt egy adott feladatot, majd a végén levő RETURN utasítás hatására visszatér arra az utasításra, amely az őt hívó GOSUB-ot követi. (Tulajdonképpen a függvény is egy szubrutin, amelyet speciálisan a CALL szóval hívunk.)
A GOSUB / RETURN utasításokkal kapcsolatban fontos szabályok a következők:
Először is, a GOSUB utasítást soha nem használhatjuk RETURN nélkül, Mert különben a számítógép hibaüzenetet küld. Másodszor vigyáznunk kell arra, hogy a szubrutin valóban különálló része legyen a programnak, és véletlenül, GOSUB utasítás nélkül, ne kerülhessen rá a vezérlés, ez ugyanis szintén hibához vezetne. Ezt úgy kerüljük el, hogy a szubrutin első sora elé mindig END vagy STOP utasítást helyezünk, amely megállítja a program futását.

DIM KIFEJEZÉS
Nagyobb mennyiségű adat kezelése c. alfejezetben láttuk, hogyan lehet tömböket definiálni, kihasználva az Enterprise BASIC nyelve által nyújtott sokoldalú lehetőségeket. A tömbök deklarálásának kevésbé hatékony lehetősége a Minimál BASIC DIM utasítása.
A DIM A(10) kifejezéssel pl. egydimenziós tömböt deklaráltunk, amelynek elemeit a 0-10 index értékekkel azonosítjuk. A DIM B(4,4) kétdimenziós tömböt definiál, amelynek az elemeit az előbbi módszer szerint nullától számozzuk. A (X TO Y) használatával azt a tartományt is megadhatjuk, amelyben az elemek sorszámai mozoghatnak, de nincs mód az elemek hosszának megadására, ami pedig rendkívül hasznos lehetne, különösen nagy programok etében, ahol takarékoskodnunk kell a memóriával. A következő programban példát láthatunk a DIM utasítás használatára:


100 DIM TOMB$(9) ! 10 elemu tomb
110 FOR N=0 TO 9
120   READ TOMB$(N)
130 NEXT N
140 FOR N=1 TO 9
150   PRINT TOMB$(N);" ";
160 NEXT N
170 DATA Ez,egy,tomb,melyet,a DIM,kifejezessel,deklaraltunk.,Hat,nem,egyszeru?

A CSATORNÁK
Azért, hogy a számítógépet és a hozzá csatlakoztatott további egységeket minél hatékonyabban kihasználhassuk, az Enterprise ún. csatornákat alkalmaz. A csatorna speciális, a számítógép két része között nyitott út. Ha ilyen utat nyitottunk, a két részegység között egyszerűen a csatornaszám megadásával kommunikálhatunk. A csatornaszámot utasításokban a # vagy a £ karakter után kell megadni, aszerint, hogy német vagy angol nyelvű a számítógép.
Az Enterprise bekapcsolásakor minden olyan esetben, ahol erre lehetőség van, alapértelmezés szerint nyit bizonyos csatornákat. Ezért, ha begépeljük PRINT "hello" parancsot, az üzenet megjelenik a képernyőn. Ha azonban azt akarjuk, hogy az üzenet a nyomtatóra kerüljön, használhatjuk a PRINT £104:"hello" parancsot. A számítógép bekapcsolásakor ugyanis a 104 csatorna a nyomtatóhoz kapcsolódik.
Ezek mellett azonban lehetőségünk van arra, hogy igényeinknek megfelelően különféle csatornákat definiáljunk. A következő programban változót használunk csatornaszámként, így program maga döntheti el, hogy kimenete hova kerüljön.


120 INPUT PROMPT "Irj be egy szoveget":A$
130 PRINT
140 PRINT "Hova irjam vissza?"
150 DO
160   INPUT PROMPT "0 - kepernyo; 104 - nyomtato ":CSAT
170 LOOP UNTIL CSAT=0 OR CSAT=104
180 PRINT £CSAT:
190 PRINT £CSAT:A$
200 END

Ez a program csak akkor működik helyesen, ha a számítógéphez kapcsolt nyomtató csatlakozik. Érdemes azonban kipróbálni 104-es helyett a 101-es csatornával is, amely a normál grafikus képernyőre vonatkozik.
Jegyezzük meg, hogy a számítógépben minden ki- és bemenet ilyen csatornák útján működik, beleértve a hanggal és a magnetofonnal kapcsolatos tevékenységeket is. Ha tehát meggondolatlanul bánunk a csatornákkal, előfordulhat, hogy meghökkentő dolgokat tapasztalunk. Ezek nem okozhatják a számítógépünk meghibásodását, de az megtörténhet, hogy csak a gép ki- és újra bekapcsolásával állíthatjuk vissza a helyes működést.
A csatornákkal kapcsolatban további részletek a Referencia kézikönyv c. fejezetben találhatók.

KIVÉTELES ESETEK, HIBÁK KEZELÉSE
Hibák kezelésére, a hálózattal vagy néhány más eszközzel végzett munkára és kivételes eset kezelésére az Enterprise-nak bizonyos speciális módszerei vannak.
Kivételes esetnek nevezzük az olyan folyamatokat, amelyek a programtól teljesen függetlenül mennek végbe, de valami módon arra befolyással lehetnek. Így a STOP billentyű lenyomása kivételes eset, mert a programnak nem kötelessége a STOP billentyűt figyelni, de lenyomása hatással lehet rá. Ha futó programban olyan hiba van, amely a program megállását okozza, akkor a számítógép egy üzenetet és egy számot ír ki. Ez esetben a szám a kivételes eset típusát adja meg. A BASIC lehetővé teszi, hogy saját magunknak definiáljunk kivételes eseményeket, és megadjuk, hogy bekövetkeztük esetén mi a teendő. A kivételes eseteket kezelő műveletek olyanok, mint a függvények, azzal a különbséggel, hogy általában nem speciálisan erre szolgáló utasítással hívjuk őket, mint amilyen a CALL. A következő program kivételes eset kezelésére mutat példát.


100 PROGRAM "Hiba.bas"
110 WHEN EXCEPTION USE HIBA
120   ! A fenti sor utasitja a gepet,
130   ! hogy kiveteles esetben a HIBA
140   ! nevu kezelot hasznalja.
150   ! Ez az utasitas az END WHEN
160   ! utasitasig ervenyes.
170   INPUT PROMPT "Irj be egy szot:":SZO$
180   IF VAL(SZO$)<>0 THEN
190     CAUSE EXCEPTION 10
200   ELSE
210     PRINT "A szot elfogadom."
220   END IF
230 END WHEN
240 END
250 ! A program kovetkezo resze a
260 ! kiveteles eset kezelese.
270 ! Esetunkben a 10 szamu kivetel
280 ! alt elo, ha szo helyett egy
290 ! szamot irtunk be.
300 HANDLER HIBA
310   IF EXTYPE=10 THEN
320     PRINT "Ez nem szo!!!"
330   ELSE IF EXTYPE<>10 THEN
340     EXIT HANDLER
350   END IF
360 END HANDLER

Ebben a példában nyilván egyszerűbb megoldást is alkalmazhatta volna.
A CAUSE EXCEPTION utasítás aktivizálja a kivételes eset kezelőt (a handler-t) olyan hiba esetén, amelyet a gép magától nem venne észre, mint esetünkben akkor, ha számmal kezdődő szót írunk be.
Az EXIT HANDLER hasonlít az EXIT DO, ill. az EXIT FOR utasításhoz, de természetesen a kezelőből való kilépést eredményezi.
Az EXTYPE változót követő érték a kivételes eset típusát jelzi CAUSE EXCEPTION használata esetén. Az EXTYPE értékeit különböző hibaüzenetek esetére a Referencia kézikönyvben c. fejezetben láthatjuk. Ebben a példába CAUSE EXCEPTION utasításban adtuk meg a hiba típusát.
Egy másik változó, az EXLINE megadja, hogy melyik sorban történ kivételes esemény.
Fenti programunkban a kivételes eset kezelése nagymértékben hasonlít egy függvény hívásához. Fontos tény ezzel kapcsolatban, hogy a WHEN EXCEPTION USE szavakat használtuk (kapcsolódva egy END WHEN kifejezéshez), amely a következőt jelenti: "bármilyen típusú hiba esetén ezt és ezt a kezelőt használd!".

A HÁLÓZAT
Az Enterprise egyszerű kábelhálózat felhasználásával képes arra, hogy más számítógépekkel társalogjon. Természetesen, ha a többi számítógép is fel akarja használni a számára küldött információt, akkor azoknak is rendelkezniük kell ezzel a szolgáltatással, amelyet Intelligens Hálózatnak (Intelligent Net) nevezünk. Ha több számítógép van a hálózatba kapcsolva és az egyik társalogni kíván egy másikkal, akkor eközben - a telefonhálózathoz hasonlóan - a többi elnémul. Számítógépünk nem rendelkezik előre megadott hálózati számmal, mint egy telefonkészülék; mikor összeállítjuk a hálózatot, nekünk kell e számot beállítanunk pl. a következő módon:


SET NET NUMBER 5

A hálózati szám 1 és 32 között bármi lehet. Az ASK NET NUMBER paranccsal lekérdezhetjük a saját aktuális sorszámunkat.

PROGRAMOK ÁTVITELE
Ha számítógépünknek már van hálózati sorszáma, akkor a programok átvitele rendkívül egyszerű.
A LOAD "NET-0:" parancs utasítja gépünket, hogy a hálózat bármely tagjától vegyen át programot. Ha viszont egy adott géptől várunk egy programot, a LOAD "NET-n:" parancsban levő "n" értékkel választható ki a hálózat egy bizonyos tagja, ahol a természetesen a kiválasztandó gép hálózati száma.
Teljesen hasonlóan adunk át egy programot, ha pl. a 17. számú számítógépnek a SAVE "NET-5:" parancsot adjuk akkor az az 5. számú gép részére elküldi a memóriájában lévő programot. Az 5. számú gépnek ilyenkor a LOAD "NET-17:" paranccsal kell várakoznia a program megérkezésére.

ÁLTALÁNOS ADÁS
A 0-s hálózati sorszám speciális eset, ez nem adható egyetlen gépnek sem, hanem általános hálózati műveletekre van fenntartva. Így 0-s címet megadva a teljes hálózatra küldhető általános adás, amelyet minden hálózatra kapcsolt gép figyelhet. Ez a lehetőség nagyon hasznos lehet rövid, mindenkinek szóló üzenetek küldésére. Hátránya azonban, hogy sokkal kevésbé megbízható, mint a meghatározott címre szóló átvitel. Ez utóbbi esetben ugyanis az adó gép addig küldi újra és újra az üzenetet, míg a címzett nem nyugtázza, de az általános adásnál ilyesmire természetesen nincs lehetőség.
Hasonlóan nyithatunk egy csatornát "NET-0:" módon, ekkor ez a csatorna minden általános adást vesz a hálózaton, valamint veszi a neki szóló adásokat is. Ez utóbbi üzenetet gépünk akkor is venni tudja, ha erre előzetesen nem is készítettük fel egy csatorna megnyitásával. Ha adott gép felé külön csatornát nyitottunk, e gép adásait akkor is ezen a csatornán keresztül fogjuk venni, ha azok általános adások voltak, és volt nyitott általános csatornánk.

KOMMUNIKÁCIÓS CSATORNÁK
A hálózat magasabb fokú kihasználása végett nyithatunk egy csatornát kifejezetten egy adott géppel való kapcsolattartás céljára. A csatorna megnyitása a szokásos, pl.:


OPEN £110:"NET-17:"
Ezzel megnyitottuk a 110. csatornát a 17. számú számítógéppel való kommunikáció céljára. Ezek után e csatorna a normál ki / beviteli utasításokon keresztül használható, pl.:

PRINT £110:"Uzenet a 17. szamitogepnek!"
LINE INPUT £110:A$

A hálózatban küldött adatokat a számítógépek pufferelik, azaz adás elölt, ill. után a memóriában tartják. Ezért gyakran van szükség néhány speciális utasítás használatára. Általában egy adatcsomagot a számítógép mindaddig nem küld el, míg az el nem éri a 256 karakter hosszúságot. Ezen változtatni a FLUSH £csat paranccsal lehet; ennek hatására a "csat" csatornához tartozó puffer tartalmát haladéktalanul elküldjük, függetlenül attól, hogy esetleg csak néhány karakter hosszú.
A CLEAR £csat:NET paranccsal a "csat" csatornához tartozó puffert törölhetjük. Erre azért lehet szükség, mert a számítógép azért, hogy az adatok ne kavarodjanak össze, mindaddig nem fogad el semmilyen üzenetet, míg az adott csatornához tartozó puffer nem teljesen üres.
A hálózati műveletekhez a 100 feletti sorszámú csatornákat használjuk (de az alapértelmezésbelieket nem - I. az OPEN utasítás ismertetését a Referencia kézikönyvben). Amikor ugyanis a BASIC rendszer törli a program változóinak értékét, lezárja az 1-99 számú csatornákat, és ez a művelet parancs módban igen gyakran előfordul (pl. a RUN utasítás mellékhatása).

HÁLÓZATKEZELÉS A HÁTTÉRBEN
Az Enterprise operációs rendszere a hálózat kezelésére az ún. megszakításos rendszert alkalmazza, amely azt jelenti, hogy a számítógépek a használó számára nem látható időben társalognak egymással.
A kivételes esetek kezelésével a BASIC is nyújt némi lehetőséget arra, hogy ilyen műveletekkel foglalkozhassunk. Ha ugyanis ezt a futó BASIC programunkban a SET INTERRUPT NET ON utasítással engedélyeztük, akkor a hálózatról érkező üzenet programunkban kivételes esetet okoz, melyet a megfelelően elkészített kezelővel feldolgozhatunk.
A kezelőben végig kell kérdeznünk a csatornákat az ASK NET CHANNEL utasítással, hogy tartalmaznak-e adatokat. Mivel egyszerre több csatorna is tartalmazhat adatokat, az ASK NET CHANNEL utasítást mindaddig meg kell ismételni az adatok továbbítását követően, míg az a 255-ös értékkel nem tér vissza, jelezve, hogy nincs több begyűjtésre váró csatorna. A SET INTERRUPT NET ON utasításnak a kezelőből való kilépés előtti utolsó utasításnak kell lennie. A kivételes esetek kezelését programvezérelt megszakítások vezérlik, így ezek csak futó program esetén hatásosak, közvetlen parancsok végrehajtásakor nem.

A GÉPI KÓD HASZNÁLATA
Az Enterprise agya egy Z80-as típusú mikroprocesszor, amely mintegy 500 különböző utasítás végrehajtására képes. Ezen utasítások mindegyikét egy (esetleg több) kódszám jelöli, az utasítás gépi kódja. Ha egy processzort saját gépi kódján programozunk, akkor közvetlenül, és nem a BASIC értelmezőn keresztül használjuk.
Két fő oka lehet annak, hogy BASIC programunkba gépi kódú rutinokat építünk. Vagy nagy sebességet szeretnénk elérni, vagy az Enterprise olyan hardver adottságát akarjuk kihasználni, ami a BASIC-en keresztül nem volna lehetséges. A gépi kódú programozás önmagában is igen nagy téma, e könyvben nincs lehetőségünk ezzel foglalkozni. A téma iránt érdeklődők számos ilyen témájú kiadvány közül válogathatnak.
Az Enterprise BASIC nyelvének több olyan funkciója van, amely segíti gépi kódú programrészek használatát.

AZ ALLOCATE PARANCS
Mindenekelőtt helyet kell foglalnunk a gépi kódú program számára a memóriában. Ezt az ALLOCATE parancs teszi lehetővé, amelynek formája a következő: ALLOCATE lefoglalandó-byte-ok-száma. Mivel e parancs végrehajtása az összes BASIC változó értékét elrontja, az ALLOCATE utasítást csak programok elején szabad használni.

CODE ÉS HEX$
A gépi kódú rutin a CODE utasítás segítségével tárolható a memóriában úgy, hogy nevet adunk neki. E név formailag ugyanolyan lehet, mint egy változó neve. A CODE utasítás csak karakterláncot tud a memóriába küldeni, ezért a gépi utasítások hexadecimális értékeit a HEX$ függvény segítségével konvertálhatjuk a megfelelő formába.
Íme egy rutin, amely megkettőz egy számot:


KETT: 29 ADD HL,HL
         C9 RET

Ezt a BASIC programba így illeszthetjük be:
100 ALLOCATE 2
110 CODE KETT=HEX$("29,C9")

Figyeljük meg, hogy a HEX$ függvényben a hexadecimális értékek idézőjelek között állnak és vesszőkkel választjuk el őket egymástól.
A fenti programrészlet végrehajtása után rutinunk a memóriában található.

A GÉPI KÓDÚ RUTIN VÉGREHAJTÁSA
A gépi kódú rutinok - hasonlóképpen a BASIC-ben definiált függvényekhez kétfélék lehetnek, és meghívásuk módja is a típusuktól függ.
Az egyik típus az, amelyiknek visszatérő értéke, és bemenő paramétere van. Ilyenkor a


USR(név,paraméter)

utasítást használjuk a meghívására. Az átadott paraméter a HL regiszterpárba kerül, és visszatéréskor e regiszterpár tartalma adja a függvény értékét. PI. a
PRINT USR(KETT,4)

utasítás 8-ast ír a képernyőre, a
LET A = 3*USR(KETT,3)

hatására A változó értéke 18 lesz.
Ha rutinunk nem ad vissza értéket, a
CALL USR(név,0)

formában hívhatjuk meg. Ez esetben is kell paramétert írnunk a rutin neve után, de ennek semmilyen szerepe nincs.

A WORD$ függvény
A WORD$ függvény az argumentumát két byte-os karakterlánccá alakítja a Z80-as mikroprocesszor által értelmezett formában (LSB, MSB: azaz elöl áll a kisebb helyiértékű byte). PI. a


WORD$(KETT)

függvény értéke a KETT rutin kezdőcíme lesz olyan formában, ahogyan azt számítógépünk gépi kódú ugrásaiban értelmezni tudja.

Vissza a könyvekhez
Vissza a felhasználói programokhoz