Tippek - Trükkök |
Látszólag több | Hibás a PRINT USING! |
Számítógépünk a rendszerszegmens 16291. ofszetcímén a
működő, a következőn pedig a rossz szegmensek számát tárolja. Ha ide mindenféle
hamis értékeket teszünk, akkor az INFO parancs a látszólagos memória méretét
jeleníti meg. A SPOKE 255,16291,255 SPOKE 255,16292,1 sorokat példaként megadva a gép látszólag 4 Mbájt memóriával rendelkezik, ebből egy szegmens nem működik. Legjobb, ha az értékeket a kísérletezés után eredetire visszaállítjuk (vagy kétszer megnyomjuk a reset gombot), mert különben az ENTERPRISE nem áll jót önmagáért. |
A Basic programnyelvben a kiírandó adatok formálásának
eszköze a PRINT USING utasítás. Szomorú tény, hogy az IS-BASIC ennek az
utasításnak a végrehajtását hibásan végzi. Sem a 12 jegyű, sem a 14 jegyű
számokkal nincs problémája, 13 jegyű szám kiírása után viszont leáll a 'BASIC data has been corrupted' hibaüzenettel. Hogy miért éppen a 13 jegyű számokat nem tudja kiírni? Végül is a felhasználót ez nem érdekli. A másik, talán még nagyobb probléma sokkal veszélyesebb, mert hibajelzés nélkül, észrevétlenül követi el. Nagy pozitív és negatív számoknál nincs hiba, viszont az 1-nél kisebb és -1-nél nagyobb számok helyett a tízszeresüket írja ki a program. Mivel az adatok nagyságrendjét a feladat határozza meg, a PRINT USING utasítást nem lehet teljes biztonsággal használni. Kár... |
Videólapok pozícionálása | |
Amikor egy videólapot a megnyitás után elhelyezünk a képernyőre, akkor
azt az operációs rendszer automatikusan középre állítja. A sorparaméter-táblában
bizonyos bájtok átírásával mi is pozícionálhatjuk az ablakot. Ezt teszi
a következő Basic program. |
100 PROGRAM "Vpos.bas" |
EXDOS képernyő | A LoriGRAPH gyorsítása |
Néha rettentően idegesítő az EXDOS parancsértelmezőnek
az a tulajdonsága, hogy a begépelt parancs a megjelenített directory-val,
vagy a kiiratott file-al együtt elúszik. Basic-ben dolgozva segíthetünk
ezen a helyzeten, ha a képernyő utolsó négy sorának valamelyikében kiadjuk
az :EXDOS £0 parancsot. Ezután parancsainkat a nullás editor-csatorna dolgozza fel de az összes megjelenítés az EXDOS saját video-csatornáján fog történni. A rendszerparancsok stabilan állnak a képernyő alsó négy sorában, és a kettőspontot sem kell eléjük kitennünk. A parancsmódból a STOP leütésével léphetünk ki, az ESC nem hajlandó erre. |
A LoriGRAPH (szegényes) ikonos menürendszeren keresztül
irányítható így viszonylag könnyen tanulható. Amikor a felhasználó már
igazán jól tudta kezelni, akkor nem nézi hogy mi van a képernyőn, hanem
mindent "csuklóból" csinál. Ebben az esetben nagyon bosszantó
lehet a program lassúsága. Ez főleg a grafikus képernyőkön való mozgásoknál
jelentkezik. A lustaságot nem az alkalmazott programnyelv hanem a billentyűzet
okozza. Az editor betöltő része Basic-ben íródott, ezért ebbe a részbe
könnyedén belejavíthatunk. A billentyűzet gyorsítására is van lehetőség,
módosítani kell a RATE KEY és a DELAY KEY rendszerváltozók értékét. Először
a LOAD paranccsal töltsük be a LoriGRAPH-ot, majd írjuk a következőket: 271 SET KEY DELAY 5 272 SET KEY RATE 3 Az itt megadott értékek természetesen nem kötelezőek, mindenki a maga ízlése szerint állíthatja be őket. Ha mindkét rendszerváltozó egyenlő eggyel akkor a LoriGRAPH kezeléséhez már nagyon gyors ujjak kellenek. |
Hol a kurzor? | |
A video-lapokon a kurzort a PRINT AT utasítással állíthatjuk be. Hiányoznak azonban ennek fordítottjai, a kurzorpozíció olvasását támogató függvények. Szerencsére a videokezelő rendelkezik ezzel a funkcióval, csupán a megfelelő rutinnal kell felébresztenünk ezt a lehetőségét. A kurzor y koordinátáját a WHEREY, az x koordinátáját a WHEREX függvény adja vissza. Az egyetlen szükséges paraméter egy nyitott videocsatorna számát tartalmazza. |
100 PROGRAM "Wherexy.bas" |
Németből angolba software-úton | |
A következő rövid Basic program a német, kétnyelvű gépek tulajdonosainak nyújthat segítséget, és a lemezegységgel rendelkezőknek is hasznos lehet. Sok olyan program van, amely csak angol gépen fut, vagy csak magnóról tölthető be. Ezen segít ez a program, amely a számítógépet alapkiépítésű angol géppé változtatja, mindenféle fizikai beavatkozás nélkül. 90 DATA 0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0 |
1 PROGRAM "UK_mode.bas" |
Megáll az idő | Jellemtelen kurzorkarakter |
A rendszeróra nem működik a magnóról olvasás és a magnóra
írás közben, ezért az ilyen műveleteknél és utánuk nem érdemes az órára
hagyatkozni; a "magnózás" befejeztével érdemes újra beállítani
az időt. A problémát feltehetően az okozza, hogy a magnó hangfrekvenciás jelének előállítása és visszakódolása a processzort teljesen igénybe veszi, és így ilyenkor nem lehet megengedni az órát rendes körülmények között "mozgató" megszakítást. A megoldás -az akkumulátorról állandóan működő CMOS hardverórát most nem számítva- az lett volna, hogy a magnókezelő interfész mellékesen kiszámítja, hogy mennyi ideig foglalkozott a hangelőállítással vagy megfejtéssel, és időnként (pl. blokk-közökben) helyesbítené az időt. |
Az EXOS videokezelóje megengedi a kurzorkarakter beállítását,
így ha például Basic-ben kiadjuk a SET CURSOR CHARACTER 95 parancsot, akkor a villogó négyzet (ASCII 142) helyett villogó aláhúzás karakter jelzi a kurzor helyét. Ez szép és jó egészen addig, amíg nem nyomjuk le kétszer az ALT+INS kombinációt (Insert üzemmód be/ki), ekkor ugyanis ismét a villogó négyzet lesz a kurzor. A hibát valószínűleg az EDITOR: okozza, amely az Insert kurzor bekapcsolása előtt nem menti el a kurzorkarakter eredeti kódját. |
String a kéz alá | |
Egy jól megirt programtól elvárható, hogy lehetőleg minden beviendő
adatot a felhasználó keze alá adjon, megmentve őt a monoton bebillentyűzéstől.
Erre ad egy Basic nyelvű megoldást a listán látható program.
A függvénynek sorrendben a következő paramétereket kell átadnunk: promt,-szöveg, előre definiált string, y koordináta, x koordináta. Az ASCII 184 a kurzor balra mozgatását idézi elő a stringben is. |
100 PROGRAM "Inpstr.bas" |
Ismeretlen hibatípusok | A vonalzósor beállítása |
A számítógép használata során az egyik legkellemetlenebb
élmény, amikor váratlanul hibajelzést kapunk. Különösen bosszantó lehet
azonban egy hibaüzenet, ha nem ismerjük a megfejtését. Mit tegyünk akkor, ha a számmal jelzett hibakód nem található meg sem a Basic leírásban, sem az EXOS, az EXDOS, sem az IS-DOS kézikönyvben? Ebben a rovatban megpróbálunk megfejtést adni az ismeretlen hibajelzésekre. Kérjük mindazokat, akik ilyen "titkosított" hibajelzéssel találkoznak, mind pedig azokat, akik tudják vagy sejtik ezek megfejtését, hogy osszák meg velünk tapasztalataikat. Kezdetnek két ilyen kóbor hiba: *** Error 185 - A fájl katalógus szerinti és tényleges mérete nem egyezik meg egymással. *** Error 187 - Érvénytelen .COM fájl. |
Aki dolgozott már igazi szövegszerkesztővel az megszokta,
hogy a vonalzósor (ruler line) tetszőlegesen beállítható a szövegben -
mondjuk - megjegyzés-sorként megadott minta alapján. Az ENTERPRISE gép
beépített szövegszerkesztőjével is csinálhatunk hasonlót. Lépjünk be a
szövegszerkesztőbe, és írjuk be például a következő két sort: L 1 . 2 . 3 . 4 . 5 . 6 R ALT-F2 . . . ALT-F4 Mentsük ki a PRINT paranccsal (nem a SAVE-vel) például R65 (65 karakter széles vonalzósor) néven. Most álljunk rá a kurzorral az első sorra, és hajtsuk végre a következő utasításokat: ALT F2 töröljük a TAB pozícíókat); CTRL- kurzor jobbra és CTRL-F3 ismételve, míg ki nem érünk a jobb margóra (az új TAB pozíciók beállítása); ALT-F4 (a jobb margó beállítása). Ezután törölhetjük a két sort. Ha újra szükség lesz a beállításra, a kurzorral szövegmentes helyre állva újra betölthetjük, mivel ASCII file-ként van elmentve, a szöveget érintetlenül hagyva hozzáíródik. Hasonló módon tetszőleges vonalzósor-mintákat készíthetünk. Ha gyakran kell a vonalzósort váltogatni, a mintákat tartsuk RAM-disken, gyorsabb a betöltés. |
Dőlt betűk egyszerűen | |
Előfordulhat, hogy megunjuk a megszokott karakterkészletet, és valami
másra vágyunk, mondjuk dőlt betűket akarunk látni a képernyőn (a dőlt
betűtípus neve az angol szakirodalomban italic). Semmi akadálya, hogy
emberfeletti erőfeszítéssel átdefiniáljuk a karaktergenerátort, de van
egy sokkal egyszerűbb módszer is. A mellékelt programmal fél perc alatt
elfogadható kinézetű dőlt karaktereket kapunk. A program az összes karakter
felső három pontsorát egy-egy ponttal jobbra, az alsó három sort egy-egy
ponttal balra tolja, a középső három sor a helyén marad. Nincs akadálya annak sem, hogy balra dóig betűket állítsunk elő. Ehhez mindössze a POKE utasítást tartalmazó két sort kell egymással felcserélni. | 100 PROGRAM "Doltbetu.bas" |
Directory fájlba | BASIC program listázása szöveges állományba |
Az idő előrehaladtával szükségünk lehet arra, hogy felidézhessük lemezeink tanalmát. Ha emlékezetünk erre túl rövidnek bizonyulna, Úgy célszerű ezt a feladatot is a gépre bízni: a directory listázását irányítsuk át egy fájlba, és később csak ezt "tájpoljuk ki". Basic-ben a megoldás:
Ezek után a directory aktuális tartalma a DIRINFO fájlba kerül. Csak megjegyezzük, hogy így akár (az egyenlőre) vírusmentes programjaink eredeti hosszát is feljegyezhetjük a későbbi összehasonlíthatóság érdekében... |
Nem csak directory-t, de BASIC programot is "listázhatunk" szöveges állományba az előbb megismert módon:
A Felhasználói kézikönyv szerényen hallgat róla, hogy az IS-BASIC szöveges állományt is be tud olvasni, tehát tetszőleges szövegszerkesztő programmal készített / módosított programlistát is be tudunk tölteni. |
Rövid dallamok | EXDOS kártya detektálása BASIC programból |
Gyakran előfordul, hogy elkészült programunkat szeretnénk feldíszíteni hangokkal, rövid zenékkel. Bár az emberek többségének jó zenei hallása van, mégsem tud mindenki dallamokat DATA sorokba kódolni. Rajtuk próbálnak segíteni a listákon látható programok, melyek elindítása után kellemes zene szűrődik ki a gépből.
Fóti Marcell |
Már egy BASIC program keretein belül is szükségünk lehet arra, hogy megállapítsuk van-e EXDOS kártya a rendszerben. Ezt ugyan megtehetjük egy, a programból kiadott EXT "HELP EXDOS" utasítással, de viszonylag hosszabb szöveget ír a képernyőbe, ami időbe telik. Az alábbi utasítás viszont semmi láthatót nem csinál:
Kazettás rendszerben viszont "Unrecognised command string." (9240) hibát eredményez. |
Színkeverés | |
Kedvenc masinánk 256 szín használatát teszi lehetővé. Ha egy-egy szöveges képernyőt ízlésessé szeretnénk tenni, akkor a megfelelő színek kiválasztása alapvetően fontos. Ez a gépben lévé színkavalkádból meglehetősen körülményes, ezért célszerű a listán látható programot segítségül hívni. Nincs más dolgunk, minthogy "billegtessük" a belső botkormányt, figyeljük a képernyő színeit, és lejegyezzük a megfelelő szirtkombináció kódját. |
100 PROGRAM "Colorkey.bas" |
Stringek a Pascal-ban | Stringek a Pascal-ban - újra |
A Hisoft Pascal az eredeti Pascal-t olyannyira hűen valósítja
meg az Exos-on hogy a rendszer nem ismeri a STRING típust. Megoldást jelent
a karaktertömbök használata, amelyekből annyifélét kell tipizálnunk, ahány
különböző hosszúságút akarunk használni. Ha esetleg escape-szekvenciát
(azaz nem ábrázolható karaktereket) akarunk elküldeni az Exos-nak, akkor
ne is próbálkozzunk a CONCAT()-al, hiszen ez már alapértelmezésben feltételezi
a STRING típus meglétét. Csak úgy érhetünk célt, ha a tömb minden elemét
külön-külön megadjuk... Ez van! |
Csak a tavaszi fáradság miatt maradhatott ki a hasonló című ötlethez
tartozó Pascal nyelvű lista. Az ott közölt szöveg továbbra is érvényes,
és íme, itt van a hozzátartozó program:
|
Megint egy START program! | |
Egyik előző számunkban már inunk arról, hogy mennyire
megkönnyítheti életünket egy-két ügyesen megirt START program. Most
is közreadunk egyet ezekből, ezúttal nem csak a programfejlesztgetőknek,
hanem azoknak is, akik játszani is szeretnek. Egy lemezen gyakran igen sok játékprogram fér el; a normál kétoldalason is átlagosan nyolc, de például a 3,5 hüvelykes (vagy 5,25 hüvelykes nem igazán szabványos) 720 kilobájtoson 16, az 1,44 megabájtoson pedig kb. 32. Egy-egy játék rendszerint 2-3, de néha 4-5 vagy még több fájlból áll. Hogy el ne vesszünk a félszáz különböző fájlnév között, érdemes a játékok 2., 3. és további fájljait HIDDEN (rejtett) attribútummal ellátni, csak az elsőt hagyni meg normálnak. Ekkor csak egy-egy fájl látható a katalógusban játékonként, ennek neve pedig rendszerint megegyezik a játék nevével. Így már könnyebb a választás (az EXDOS pedig gond nélkül megtalálja a rejtett fájlokat). Hogy a dolog még egyszerűbb legyen, írhatunk egy rövid segédprogramot, amelyet azután START néven minden lemezünkre rámásolunk. Az F1 billentyű megnyomására a program elindul, és kiírja a katalógust. A kiíráson kívül a margótól beljebb villogó, megváltozott színű kurzor figyelmeztet arra, hogy most nem az IS-BASIC parancsértelmezőjével vagyunk kommunikációs kapcsolatban. A kurzorral a megfelelő programnevet tartalmazó sorra állva rögtön kiválaszthatjuk a futtatni kívánt programot, amit a programunk egy egyszerű trükkel elindít. A program az illendőség kedvéért beállítja a dátumot és az időt, ha az nem lenne beállítva; ez persze játékprogram betöltésekor nem igazán fontos, ilyenkor a 120 ... 160-as sorszámú programrész elhagyható. Csak megjegyezzük, hogy az itt közölt program tudomásunk szerint a lehető legegyszerűbb módszer programok menüből való indítására (jelenleg - az olcsó beszédfelismerő alrendszerek piacra dobásáig és az ENTERPRISE-hoz illesztésük megvalósításáig - ez a legkorszerűbbnek mondható eljárás az ember-gép kapcsolat területén). Emiatt hivalkodik kis programunk az elékelő MENÜ kiírással. Mint minden egyszerű megoldásnak, ennek is megvannak a gyenge pontjai: senki sem akadályoz meg bennünket abban, hogy a képernyő tetszőleges pontjára vigyük a kurzort, és ott nyomjunk ENTER-t; ekkor ne csodálkozzunk, ha esetleg kellemetlen hibaüzeneteket kapunk. Nincs persze akadálya annak, hogy egy minden igényt kielégítő, álombeli menüprogramot csináljunk, de ez a legegyszerűbb esetben is nagyságrendekkel több erőfeszítést igényel. Talán majd valamelyik következő számban... Csak a rend kedvéért jegyezzük meg, hogy vannak, akik az egyes játékokhoz tartozó fájlokat játékonként külön alkönyvtárban tárolják; emellett szól az, hogy a különböző játékok esetleg azonos nevű fájlokat használnak, ezek ekkor nem zavarhatják egymást. Ebben az esetben a program jelenlegi nagyszerű egyszerűségében nem alkalmas a programok indítására. Nincs azonban akadálya annak, hogy képessé tegyük alkönyvtárak végigbogarászására is. |
|
Fent és lent | A sarkon áll |
Adjuk ki Basic-ben a Szekeres Tamás |
Még mielőtt bárki rossza gondolna, gyorsan elmondjuk,
hogy az egyes editor-csatornák által a státuszsorban megjelenített szám
jelentőségéről lesz szó. Sokan nem tudják ennek a számnak a jelentését.
Nos, az editor tárolókapacitása is véges. Ha már csak 100 bájtnyi üres
hely van a csatornában, akkor ezt jelzi ki a gép a képernyő jobb felső
sarkában. A szöveg további írásakor ez a kijelzett érték folyamatosan
csökken, hiszen fogy a szabad helyek száma. Ha az érték elérte a nullát,
akkor ez azt jelenti, hogy az editor legelején álló szöveg eleje elveszett.
A WP-vel dolgozóknak már a reflexükben van a sarok figyelése, mert csak
így menekülhetnek meg szövegeik elvesztésétől... |
Röviden az EDITOR-csatornáról | |
Egyik laptársunk egy olvasói levél alapján - arra hivatkozva, hogy ez az EXOS leírásból hiányzik - ismerteti a saját editor-csatorna megnyitásának módját, mégpedig pont az EXOS leírás szerint (lásd a 243. oldalon). Mivel azonban a lapban megjelent ismertetés hiányos, az EXOS leírás pedig köztudottan csapnivalóan rossz fordítás - és egyébként sincs meg mindenkinek -, most közérthetően, példával illusztrálva összefoglaljuk a teendőket, és kiegészítjük egy-két olyan tudnivalóval, ami sehol sem jelent meg. Nos, az eljárás a következő:
Ügyeljünk arra is, hogy a gépi, illetve videó-opciók (rendszerváltozók) idejében visszakapják eredeti értéküket, különben furcsa jelenségeket tapasztalunk. A Basic például visszaállítja a 102-es csatornát az editor videó-csatornájának, de nem változtatja meg a pufferméretet, és nem állítja vissza a billentyűcsatorna számát sem. |
100 PROGRAM "Editor.bas" |
Nagyobb méret | Torz Karakterek |
Megalomániásoknak ajánljuk figyelmébe a listán látható rutint. A program
lefuttatása után a szerkesztésre használt képernyő mérete a BASIC-ből
elérhető maximális méretű lesz. Az eredetit a TEXT paranccsal állíthatjuk
vissza.
|
Ez az ötlet tulajdonképpen az előző elfajzásának tekinthető. Az alapértelmezésű
videó-csatornát ugyanis négyszínűnek állítjuk be, és így igen érdekes
(értsd: gyakorlatilag olvashatatlankarakterek jelennek meg a képernyőn.
|
BASIC programok titkosítása | |
Sokakat érdekelhet, hogyan dugjuk el az illetéktelen szemek elöl elkészült BASIC programjainkat. Ismerek erre egy eljárást, amely lehet, hogy sok felhasználónak már nem mond újat, de ilyen formában összegyűjtve tudomásom szerint még sehol sem jelent meg.
|
Ha a BASIC program egyik sorszámát 9999-nél nagyobb számra írjuk át, a listázás ezen sorszámtól elkezdve nem lehetséges. A sorszám felülírását szintén az ASMON-ban lehet megoldani, ehhez azonban ismernünk kell a BASIC program tárbeli szerkezetét. A BASIC program a tárban tokenizált formában, soronként egymásután helyezkedik el. Egy sor négy fő részre bontható, ezek a következők:
Ha próbaképpen egy Basic programot az ASMON-ba töltünk, számoljuk le az első 16 bájtot (ez a programfejrész), a következőtől kezdődik az első programsor. Ezen bájt tartalmával előre haladva (mivel ez jelzi a sor hosszát), a második sor hosszjelző bájtjához érünk. Ez addig tart, amíg a sor hosszanként 0-t kapunk, ez már a program végét jelzi. A hosszjelző bájtok tehát egy láncot alkotnak, melyen végiglépkedve bármelyik sort megtalálhatjuk és átírhatjuk annak sorszámát.
Ezenkívül át van írva az autostart bájt és a 110-es sor sorszáma. Így a program autostarttal indul, nem lehet megállítani, ha hiba miatt mégis kilép, listázáskor csak az első sorát mutatja magából. Ez a programvédelem szerintem bőven elég ahhoz, hogy illetéktelen személy ne tudjon belekontárkodi BASIC programunkba. Természetesen aki ismeri az eljárást , az könnyen feltörheti, de ez időt vesz igénybe, és egy BASIC program titkosítása végülis nem egy egetrengetően fontos dolog, inkább csak az érdekessége miatt érdemelhet egy-kéz szót.
|
A szinusz hangjai | Villogó sorok |
A szinusz-függvény egy érdekes alkalmazására mutat példát
az alábbi program. A hang maságát ugyanis a rutin közepére helyezett
SIN() határozza meg.
100 PROGRAM "Sinusoid.bas" |
A WP "Line colour" parancsával átszínezhetjük
az egyes sorokat. Mivel az EDITOR: eszköz funkciói mindenhol élnek, így
ezt a hatást BASIC-ben is elérhetjük. A sorok átszíneződését az ASCII
246 kódú karakter elküldése jelzi az editornak, így mindenféle billentyűnyomogatás
nélkül is elérhetjük ezt a hatást.
100 PROGRAM "Flash.bas" |
A funkcióbillentyűk - máshogy |
A funkcióbillentyűk átprogramozása jelentősen megkönnyítheti a munkát. A billentyűk eredeti értelme elsősorban a BASIC használatához van optimalizálva. Más rendszerek - ha jól vannak megcsinálva - átdefiniálják a funkcióbillentyűket a saját ízlésük szerint. Így jár el például a HiSoft PASCAL rendszer automatikusan, vagy a nálunk forgalmazott - bővített - IS-DOS operációs rendszer a FKEY parancs kiadásával.
Ha elsősorban nem BASIC-ben dolgozunk, szükségünk lehet egy hasonló megoldásra. Különösen a lemezegységgel rendelkezők tudják rugalmasan kihasználni ezt a lehetőséget.
Az itt bemutatott program (FKEYS.BAS) az EXDOS környezethez illeszkedő funkcióbillentyűket definiál. A billentyűk kiosztása, ahol lehet, illeszkedik az ISDOS alatt megszokott elrendezéssel. Hogy ne kelljen a billentyűk hatását memorizálni, sem pedig a billentyűsor fölötti emlékeztető csíkot cserélgetni, a program a képernyő senki által nem használt alsó három sorában létrehoz egy segítő menüt. Itt a kulcsszavak után álló aláhúzás karakter azt jelzi, hogy a billentyű lenyomásával a parancs kiadása nem fejeződik be, ahhoz egy vagy több paramétert kell megadni. Az itt megadott billentyűkiosztás természetesen nem kötelező előírás, azt mindenki a maga ízléséhez alakíthatja. Nem lenne teljes a megoldás, ha az átdefiniált funkcióbillentyűket nem lehetne egy mozdulattal visszadefiniálni. Ezt a feladatot az F16 funkcióbillentyű látja el a CLRKEYS.BAS program indításával. Ez néhány kivétellel visszaállítja a billentyűk eredeti értelmét, és az előzőhöz hasonló segítő menüt ír ki. A menü eltérő színe is figyelmeztet a változásra. A lemezegységgel dolgozó felhasználóknak nincs szükségük a REM1 és a REM2 funkcióbillentyűre, így ezeket át lehet definiálni hasznosabbra. Megintcsak az F16 billentyű adja a visszatérést a módosított billentyűkhöz. Ennek a megoldásnak a hátránya az, hogy a billentyűk át- és visszadefiniálásakor elvész a memóriában esetleg ott lévő (és el nem mentett) program. Ilyenkor használjuk időben a SAVE parancsot. Ne feledkezzünk meg viszont arról a tényről, hogy lehetőségünk van egyszerre több programot a memóriában tárolni, és ezeket egymásból a CHAIN utasítással indítani. Egy kis átalakítással a "magnósok" is kialakíthatnak egy saját funkcióbillentyű-kiosztást. |
Szimetria | Ha letelt az idő |
Az alábbi lista begépelése, a program elindítása után a gép véletlenszerűen
szimmetrikus mintákat rajzol a képernyőre.
100 PROGRAM "Symm.bas" |
Számtalan olyan alkalom van, amikor csak egy bizonyos ideig kell egy
folyamatnak futnia (pl. várakozás billentyűre, várakozás karaktervételre
soros vonalnál stb.), utána egy másikra kell áttérni. Az EXOS-nak van
egy ilyen időzítője, amelyet BASIC-ből is remekül lehet használni. Ezt
illusztrálja az alábbi program:
100 PROGRAM "timeout.bas" |
RND-rutin | Hibás a magyar híd (BUS BRIDGE) | ||
Ezt a rutint ajánljuk azoknak a program átíróknak, akik egyes játékprogramokból kihagyták a nagyon fontos RND-rutinokat. Használata: egyszer meghívjuk a RANDOM-ot, utána már csak az RND-t kell hívni.
|
Jelenségek: Az EXDOS elköltözik a 160-as szegmensre, emiatt néhány program nem működik. A WD portjai is 60H-tól kezdődnek 20H helyett. A hibát úgy deríthetjük fel, ha kiadjuk a
parancsot. A hiba elhárítása: össze kell kötni az A36-ot a B36-tal a hídon, ezt ugyanis elfelejtette összekötni a sokat emlegetett magyar cég. |
Gyorsítás | Hol a hiba? |
A programfutás sebességét gyorsíthatjuk a következő két lehetőséggel:
A két eljárást együttesen alkalmazva kb. 70%-ra csökkentjük a futási időt. Ezek a beállítások bármely nyelvből használhatóak. Hsoft |
Titokzatos hiba bujkál valahol az EXDOS - IS-DOS csatlakozásnál. Néha, ha RAM-diszket használva akarjuk az IS-DOS-t elindítani, az EXDOS File not Found hibaüzenettel utasítja el a próbálkozást. Ezután, ha megszüntetjük a RAM-diszket, és újra megpróbáljuk, a rendszer No RAM disk üzenetet ad, akkor is ha gondosan az A meghajtóra váltottunk előtte.
A hiba elhárításához ismerni kell a 72-es EXOS változó jelentését): BOOT_DRV: "újraindítási meghajtó", alapállapota 0, ha behívjuk az IS-DOS-t, akkor ide eltárolódik az aktuális meghajtó (71-es változó). A továbbiakban a 72-es változó által meghatározott meghajtón keresi az IS-DOS az AUTOEXEC.BAT fájlt, a .HLP fájlokat, innen tölti vissza magát ha valamely program (vírus?) megrongálja az IS-DOS területeit, és az EXDOS is az IS-DOS következő meghívásakor erről a meghajtóról tölti be az IS-DOS.SYS fájlt (kivéve ha ROM-ban van az IS-DOS). Mivel az EXDOS csak akkor tárolja el az aktuális meghajtót ebbe a változóba, ha 0 van benne, így érthető, hogy miért kereste az IS-DOS-t a második próbálkozásnál még mindig a RAM-diszkben. A hiba elhárítása tehát nagyon egyszerű: VAR 72,0 (A leírtakból kiderül, hogy a hiba nemcsak az IS-DOS.SYS fájllal, hanem az AUTOEXEC.BAT-tal, és HLP fájlokkal is előfordulhat.) Egy megjegyzés: az IS-DOS.SYS fájl 5-ös fejlécű modul, így a LOAD paranccsal is betölthető, csak ekkor nem adhatók át paraméterek. Zozosoft |
Bosszúságaink | Újabb furcsaság |
Tudjuk, hogy a szöveges képernyőn a háttér és a karakterek
színe megváltoztatható. 40 karakteres üzemmódban kétféle papír-tinta
színpárt használhatunk. Ha azonban letöröljük a képernyőt, és átállítjuk
a tintaszínt, a gép erre nem reagál, a tintaszín nem állítódik át! Egyik
programomban az alábbi sorok szerepeltek:
(azaz zöld háttér előtt piros és fekete betűk), majd később
Erre a gép zavartalanul piros betűket kezdett el írni. A megoldás: legalább egyszer írni kell a lapra mielőtt átállítjuk a színeket. Legegyszerűbb egy üres PRINT utasítás: CLEAR SCREEN Ekkor már a helyes színt kapjuk. Azt bizonyára már többen észrevették, hogy az IS-BASIC készítői arra is figyeltek, hogy ha egy korábban képernyőre kerülő "ok" üzenet sorába mozgatva a kurzort megnyomjuk az ENTER-t a gép ne írjon ki hibaüzenetet. Ezt úgy sikerült megoldani, hogy az "ok" egy olyan parancs, amely nem csinál semmit. |
Sok Basic interpreter nélkülözi az olyan elemi szolgáltatásokat,
mint például az IS-Basic rendszer RENUMBER parancsa, amely átsorszámozza
a programsorokat. Bátran kijelenthetjük, hogy egy ilyen rendszer gyakorlatilag
játszogatáson kívül bármi másra használhatatlan.
Létezik olyan újraszámozási megoldás, amelyik csak a sorok elején álló sorszámokat számozza át, a rájuk való hivatkozásokat már nem. Például, ha van egy GOSUB 1210 utasítás a programban, az újraszámozás után ez az utasítás máshova fog belépni, mint előtte. Hogy egy ilyen megoldás mit ér, nem kell taglalni. Az IS-Basic rendszer RENUMBER parancsa intelligens, legalábbis első látásra: a GOTO és a GOSUB utasítások hivatkozásait is átszámozza (más kérdés, hogy az IS-Basic-ben ez az a két utasítás, amelyiket szerencsére soha sem kell használni). Nagy meglepetésünkre azonban az EXLINE függvénnyel együtt pl. egy IF utasításban szereplő hivatkozás az átszámolásnál nem változik, így az eredetileg egy adott utasításban előforduló hiba vizsgálata elromlik. Bizonyos szempontból talán érthető, miért maradt benn a rendszerben ez a hiba (ha egyáltalán észrevették és foglalkoztak vele): szinte lehetetlen ugyanis kideríteni, milyen módon kellene "átszámozni" a sorszámot az alábbi típusú utasításban:
A kiút: kerüljük az olyan programmegoldásokat, ahol a sorszámnak bármiféle jelentősége van (azaz ne használjuk, mivel egyébként sem tanácsos, a GOTO és a GOSUB utasítást sem). Ha a hibakezelésnél nem megoldható, hogy minden egyes kritikus programszakaszt önálló WHEN ... END WHEN blokkba tegyünk, vezessünk be egy változót (a főprogram elején deklaráljuk, hogy feltétlenül globális legyen), és ennek minden kritikus művelet előtt adjunk más és más értéket. A HANDLER-ben így garantáltan azonosíthatjuk a hibát. |
Működik a "Set func key"! | A német bővítésről |
Egy jó hír az ASMON használók számára: Mégiscsak lehet a funkcióbillentyűket
programozni! A SHIFT-tel együtt lenyomott funkcióbillentyűk jelentése
az editorban és az editorból való kilépés után is megmarad. Ezen billentyűk
számai 11h-tól 18h-ig terjednek. Azt csak úgy megjegyezzük, hogy így
akár "billentyűmakrókat" is írhatunk az egyparaméteres ASMON
parancsokhoz.
Tegyük fel, hogy gyakran van szükségünk az 1000h címtől a listázásra. Nos, gyomjuk le az 'I'-t, adjuk meg a 11-et (ez jelenti a SHIFT+F1-et), majd írjuk be: "L1000". (Figyelem! Az idézőjeleket is be kell gépelni, különben az ASMON ***HEX ERROR hibaüzenetet küld!) Ezek után a listázáshoz elegendő a SHIFT+F1-et és az ENTERT-t lenyomnunk. Németh József |
A bővítés a német (BRD), és az angol (UK) mód mellett tartalmazza a
kinyomtatását (VDUMP), kimentését (VSAVE) és a kép betöltését (VLOAD)
támogató bővítéseket is. A két utóbbi funkció meghívása parancssorból
egyszerű: :VSAVE "képnév.kit" :VLOAD "képnév.kit" Programból az idézőjelek miatt nehezebb a szintaktika, több programban látunk ilyet: 100 EXT "VLOAD"&CHR$(34)&"képnév.kit"&CHR$(34) Van ennél egyszerűbb hívási forma is: 100 EXT "VLOAD""képnév.kit""" A funkciók alapértelmezése a 101-es (grafikus) csatorna, de bármelyik videó-lapot kimenthetjük, vagy betölthetjük. Példa az alapértelmezésű szöveges lap mentésére: :VSAVE £102:"képnév.kit" 100 EXT "VSAVE £102:""képnév.kit""" Ha egy régebben kimentet képet szeretnénk betölteni, és elfelejtettük a hozzá tartozó videólap adatait, akkor gond van. Szerencsére a VSAVE a fejrészben kimenti ezeket az adatokat, melyeket az ASMON-al tudjuk megnézni. A 16 bájtos fejléc szerkezete: 00 0B VIDEO_MODE VIDEO_COLOR X_SIZE Y_SIZE 00 00 00 00 00 00 00 00 00 00 Ha nem nullás VIDEO_MODE értékű a kimentett kép, akkor az X_SIZE "80-as" karakterekben van megadva! Van két hibája is a funkciónak:
Németh József |
Logaritmikus keresés | |
Az IS-BASIC az egyik legtöbbet tudó BASIC "nyelvjárás",
nem nehéz például egyszerű adatbáziskezelő programot írni BASIC-ben.
Egy ilyen program írásánál csak egy probléma merülhet fel: a program
sebessége. Sajnos a BASIC nagyon lassú. Ezen a problémán normális BASIC
fordító nélkül (ami nem a ZZZIP!) csak egyféleképpen lehet segíteni:
minél hatékonyabb eljárásokat kell írni. Egy adatbáziskezelőben a sebesség szempontjából két kritikus pont van: az adatok rendezése és keresése. Most essen szó a keresésről, egészen pontosan a logaritmikus keresésről. A logaritmikus keresés csak rendezett tömbben működik, viszont nagyon gyors. Egy 5000 elemű tömb bármely elemét képes megtalálni 2 másodpercen belül! Az algoritmus lényege, hogy a lehetséges elemek számát minden lévésben megfelezzük (a számkitaláló játék mintájára). Az eljárást CALL KERES(változó) utasítással lehet meghívni. A változó a keresett elemet tartalmazza. A TOMB$(X) tömbben keressük a kérdéses elemet. Az F változó a lehetséges felső indexhatárt tartalmazza. Kezdetben a tömb felső indexhatárára mutat: a példában 500 elemű tömb szerepel. Az A változó a lehetséges alsó indexhatárra mutat. A SORSZ változó a megtalált elem sorszámát tartalmazza. Ha az eljáráson kívül is használni akarjuk legyen globális változó! A VAN logikai változó mutatja, hogy létezik-e a keresett elem. Amennyiben a tömbben több azonos elem is szerepelhet a megtalált elem alatt és felett folytatni kell a keresést. |
1000 DEF KERES(V$) |
Írás a státuszsorba | Amikor az EXOS nem osztott lapot... |
A CODE pointer átállításával lehetőséget kapunk, hogy a sztring-eket
közvetlenül a memóriába írjuk. Az alábbi programot lefuttatva, szembetűnő
sebességeltérést tapasztalhatunk a hagyományos és a CODE rutint használó
státuszírásnál. A módszer addig lesz működőképes, ameddig a Basic nem
használja a második lapot. ALLOCATE használat esetén, csak a kód elkészítése
után állítsuk el a pointert, vagy alkalmazzunk elmentést és visszaállítást.
100 PROGRAM "Status.bas" |
Egy 5-ös fejlécű (NAP) program 100h-tól BFFF-ig terjedhet. Nemrégen
történt, hogy olyan programot kívántam futtatni, amelynek a vége a második
lapra esett. A program nem működött. A bogarászás végén ellenőriztem
az első és második lapszegmens számát. Az első lapon a második lapra
kívánkozó, a másodikon pedig a 255-ös szegmenset találtam. Az EXOS elfelejtett,
vagy nem tudott helyesen belapozni. A feladatot a következő módon oldottam meg. Az EXOS az előző felhasználói szegmenseket felszabadítja, és kettőt lefoglal a program részére. Az első felhasználó által foglalt szegmens az első lapra, a második pedig a másodikra kerül.
Hsoft |
STAR nyomtató csatlakoztatása |
Köztudott, hogy sokan használják ENTERPRISE gépükhöz a kiváló
STAR nyomtatókat. (A STAR nagyon híres mátrix nyomtatóiról.) A gond csak
akkor kezdődik, ha csatlakoztatni szeretnénk az EP-hez a STAR nyomtatót.
Nos, az alábbi kapcsolási rajz talán segít. STAR IC-100 colour Printer
csatlakozását mutatja be az EP-hez. A kapcsolási rajzot Németh Attila
budapesti olvasónknak köszönhetjük.
|
Ellenőrzött INPUT rutin |
Ha valaki igényes BASIC programot akar írni, az egyik legnagyobb problémája az adatok bekérése. Mert mit csinál a "gonosz" (f)elhasználó, ha egy INPUT paranccsal adatot vár tőle a program? Elmászkál a képernyőm a kurzorral, szám helyett betűket ír be. Az alábbi rutint az adatok "bolondbiztos" bevitelét valósítja meg. A rutint (INP.BAS) a következőképpen kell meghívni:
A rutin a HFONT karakterkészletre van tervezve, annak keretező karaktereit használja és figyeli az ékezetes betűket is! |
A GET és a LOOK utasítás használata szöveges képernyőről való olvasáshoz | Rajzolás a pozíció relatív megadással |
A Felhasználói kézikönyv állításával szemben a LOOK utasítás is használható szöveges képernyőről való karakterolvasásra. A két utasítás helyes használatukhoz fontos tudni azonban a karakterkészletről, hogy 128 karakteres Nick módot használ az EXOS, azonban az ASCII-ban 32-től kezdődnek a nyomtatható karakterek. Így kihasználatlan lenne a 128-as karakterkészlet 0-31 kódú karakterei. Ezért ezeket az EXOS-on keresztül 128-159 kódokkal érhetjük el, azonban a videó memóriába már konvertálva az eredeti kódokon kerülnek. És ezt is kapjuk vissza, amikor olvasunk a videó lapról. Ezért a GET utasítással nem tudunk kiolvasni az ALT-tal elérhető karaktereket. A megoldás az, hogy LOOK-al kell olvasni numerikus változóba, és ha a kapott kód 32-nél kisebb, akkor hozzá kell adni 128-at. |
Az EXOS ismer olyan rajzoló funkciót, ami a rajzolósugarat az előző pozíciójához viszonyított értékekkel mozgatja arrébb. A BASIC-ből azonban nincs ilyen utasítás (csak a teknőcgrafikus utasítások használják a funkciót). Szerencsére az escape-szekvenciák használatával könnyen pótolhatjuk ezt az utasítást.
9900 DEF PLOTREL(CH,X,Y) |
Furcsa ellipszisek | |
Egy
Basic Programban a következő sor szerepelt: PLOT ELLISPE A,B. E sorban
nincs is semmi hiba, de B értéke egy programhiba miatt negatív volt.
Ennek ellenére a gép végrehajtotta a programsort! Igaz, a képen látható
alakzat a legkevésbé sem hasonlított ellipszisre. Ha ciklusban rajzolunk
ilyen "ellipsziseket" érdekes hatásokat érhetünk el.
100 GRAPHICS HIRES
4 |
Videolapok bezárásának sorrendje | Amikor szükséges a változó deklaráció |
Az esetlegesen megnyitott videolapokat egy "jól nevelt" program bezárja maga után a programfutás befejezte előtt. Ha sok videolapot nyitottunk meg (pl. egy animációhoz), akkor azok bezárásával sokkal hamarabb végez az EXOS, ha fordított sorrendben zárjuk be, mint ahogy megnyitottuk ezeket!
Ennek magyarázata, hogy az EXOS minden csatornazárás után rendbe rakja a memóriát. Ezért van az eszközkezelőknél a puffer mozgatás funkció, amivel közli az EXOS az adott csatorna kezelőjével a mozgatást, és az megjegyezheti az új címeket. Ha éppen kijelzett videó lapot érint a mozgatás, akkor ilyen esetben látható egy kis villanás is a képen, amikor változik az LPT. Példa a helyes sorrendre:
|
A BASIC nyelvjárásokban - így az IS-BASIC-ben is - nem szükséges a változókat első használatuk előtt deklarálni. IS-BASIC-ben erre van lehetőség. Fontos azonban tudni, hogy a változóknak nincs kezdőértéke. Ezt sokszor hátrányként emlegették, pedig rögtön nagy előnnyé változik más BASIC változatokhoz képest, amikor egy elgépelt változónevet kell felderítenünk egy terjedelmesebb programlistában, mert az látható hiba nélkül nem azt csinálja amit elvileg kellene... A Felhasználói kézikönyv eléggé érthetően magyarázza el a lokális és globális változók használatát, egyvalami azonban kimaradt belőle: Ha egy eljárás rekurzívan hívja önmagát és van benne FOR-NEXT ciklus, a ciklusváltozókat deklaráljuk az eljárás elején! Ellenkező esetben a gép nem egészen azt fogja csinálni, amit szeretnénk. Még egy esetben szükséges a típusdeklaráció: Ha nem deklaráljuk használat előtt a szöveges változókat, maximális hosszuk 132 karakter lehet. Ez praktikus, hisz memóriatakarékosság céljából nem érdemes ennél nagyobbat használni, csak ritkán van szükségünk ennél nagyobb változóra. Ha ennél mégis hosszabb stringet szeretnénk a változóban tárolni, használat előtt deklarálnunk kell a STRING utasítással. A szöveges változók maximális hossza 254 karakter. |
Logikai változók BASIC-ben | Programok |
Az IS-BASIC-ben történtek bizonyos próbálkozások logikai változók kezelésére,
a PASCAL mintájára. Tegyük fel, hogy A=4 és B=2. L változót tekintsük
logikai változónak. Próbáljuk ki a következő sorokat
L=(A>B) Az előző értékkel L=-1 vagyis IGAZ L=(A<B) L=0, vagyis HAMIS Sőt, akár összevont feltételeket is vizsgálhatunk: L=((A=B)<C) A felhasználói kézikönyv nem tesz említést a NOT függvényről, ami nevéhez híven logikai tagadást végez.
A zárójel elhagyható és akár IF utasítás kiértékelésében is használható a függvény: |
HEKTIK.BAS - Az akadályok között elhelyezett összes értékes karaktert kell összegyűjtenünk.
HOLD.BAS - egy égitest körül keringő holdat mozgat TANKWARS.BAS - A klasszikus XT-s játék EP-s megvalósítása LABDA.BAS - Pattogó labda LABIRINT.BAS - Labirintus "generátor" MAGICSCR.BAS - Magic Screen: látványos effektek character-defre RASZTER.BAS - Függőleges rasztercsíkok BASIC-ben SQUIRM.BAS - A Squirm című C16-os játék kísérőzenéje STOCKCAR.BAS - Autóverseny BASIC módra. TKOCKA.BAS - Térbeli kocka ZENEGEP.BAS - ENTERPRISE Zenegép (szintetizátor program) |