BETA.2 ZX ZX SPECTRUM TASWORD TWO
KEYWORD 1 alebo 0 (G + 8)
----------------------------------------------------------------
Tymto sa voli,ci budu ukazane graficke znaky (KEYWORD 0)
alebo nove BETA BASIC prikazy (KEYWORD 1). V mode 0
G-kurzor nezmizne po stlaceni jedneho tlacitka.
(Tento jediny prikaz sa neda vypnut, ale stratena grafika
je identicka s prazdnym znakom).LOOP (G + L)
LOOP WHILE podmienka (WHILE G + J)
LOOP UNTIL podmienka (UNTIL G + K)
----------------------------------------------------------------
Pozri tiez: DO , EXIT IF
Cast DO-LOOP struktury. Precitajte si najprv DO. LOOP
samotne vracia program ku DO. WHILE a UNTIL sposobuju pod-
mieneny skok spat. Ked pouzijete LOOP bez DO,dostanete
" LOOP without DO " - (LOOP bez DO).ON (G + O)
----------------------------------------------------------------
je pouzivane v tvare :
GOTO alebo GOSUB ON ciselny vyraz , zoznam cisel riadkov ON dovoluje viacnasobne rozvetvenie programu. Podla hodno-
ty vyrazu bude program pokracovat na niektorom z uvedenych
programovych riadkov.
ON je flexibilnejsie ako ako stare
10 INPUT volba : GOTO volba * 100 + 100
lebo riadky nemusia mat pravidelnu strukturu.
10 INPUT volba : GOTO ON volba ; 90 , 135 , 60 , 40
20 PRINT " Zadajte len 1 az 4 " ; GOTO 10
Pri volbe rovnej 1 sa skoci na riadok 90, 2 na 135 atd.
Pri zadani zaporneho cisla sa berie jeho ABS hodnota. Ak
v uvedenm priklade nezadame cislo od 1 do 4 program pokra-
cuje dalsim riadkom - t.j. 20ON ERROR cislo riadku (G + N)
----------------------------------------------------------------
Ked sa tento prikaz vykona, tak potom pri vyskyte nejakej
chyby sa zadany riadok zavola ako podprogram -pri vsetkych
chybach v BASIC-u Sinclair i BB. Vynimkou su 0, "OK" a 9
"Stop statement". Skok sa da vypnut pomocou ON ERROR 0 a
je automaticky vypnuty pri vykonavani toho podprogramu, na
ktory sa pri chybe skace. V podprograme su 3 rezervovane
premenne k dizpozicii:
LINE a START (riadok a cislo prikazu v riadku, kde sa
vyskytla chyba) a ERROR - obsahuje chybny kod - od 1 do 9
normalne, chyba A dava pre ERROR hodnotu 10 atd., po Y s
34. Normalne takto obsluzime jednu ci dve chyby,inak by sa
lahko chybovy program stal dlhsim ako hlavny program.
Prikl: 100 ON ERROR 5000
110 OR n=1 TO 10: INPUT "x-koord";x;"y-koord";y
120 PLOT x,y : NEXT n
4990 STOP
5000 IF error=11 AND Line=120 THEN RETURN : ELSE POP
: CONTINUE
K prikladu: Testujeme riadok s PLOT,kde "Integer out of
range" (chyba 11) je casta. Podprogram ale obsluhuje len
tuto chybu - preto pomocou POP sa dostaneme na uroven hla-
vneho programu a CONTINUE necha zopakovat prikaz, ktory
sposobil chybu. CONTINUE ale uz nevypne chybove hlasenie,
takze sa ono teraz vypise.
Chybu "Break into program" treba obsluzit inak. Ak
stlacime BREAK - skocime do chybovej rutiny, ale tam uz
BREAK funguje (ak sme ho drzali dlhsie). V chybovom
podprograme urobime cakanie a to nam umozni dat ruku z
BREAK tlacitka.
100 ON ERROR 5000
110 PRINT " este raz,a "; : PAUSE 10 : GOTO 110
4990 STOP
5000 IF error=21 THEN BEEP 1.69 : BORDER RND * 7:
RETURN : ELSE POP : CONTINUE
Ak stlacite kradsie ako 1s BREAK, zmeni sa farba BORDER,
ak dlhsie, tak sa zastavi program. Ak sa neobmedzite na
obsluhu niektorych chyb, tak lahko skoncite v nekonecnej
loope a pomoze vam BB BREAK alebo Reset system.PLOT x-koordinata , y-koordinata <; String>
----------------------------------------------------------------
Normalne PLOT tlacitko,nie v grafik-mode. BB zlepsuje PLOT
tak ze sa teraz da tlacit string na lubovolnom mieste na
obrazovke. String moze byt dlhy az 32 znakov - ak je dlh-
si tak sa nebude zobrazovat. Vsetky PLOT udaje su nadalej
pouzitelne - INVERSE,OVER,INK atd. Stringy nesmu obsahovat
CHR$ 13. Ak string pretecie vpravo, pokracuje vlavo. Ak
presahuje dolu alebo hore - chyba "Integer out of range".
Pri tlaci stringu sa nezmeni PLOT pozicia, ktoru pouziva
DRAW. Pomocou PLOT sa daju robit jemnejsie pohyby ako
pomocou PRINT AT:
100 FOR x=10 TO 224 : PLOT x,x/2 ;"< >" : NEXT x
Vsunte STEP 2,3 alebo viac a pozorujte vyzsiu rychlost
pohybu. Niekedy treba najprv zotriet stary string a potom
pisat novy o kusok dalej: napr. pri PLOT x,y,"i"
Moznost plotovat stringy sa zide pri tabulkach a diagra-
moch. Nasledovny priklad ukazuje indexy dolu a hore na
obrazovke:
100 LET A$= "Na-2+Po-4+ hat po cm+3-wiefiele"+ CHR$ 13
+ "Molekule ?"
110 LET x=0 : LET y=160
120 FOR c=1 TO LEN A$
130 IF A$(c)="-" THEN LET y=y-3 : NEXT c
140 IF A$(c)="+" THEN LET y=y+3 : next c
150 IF A$(c)=CHR$ 13 THEN LET x=999 : GOTO 170
160 PLOT x,y ; A$(c) : lET x=x+8
170 IF x>=248 THEN LET x=0 : LET y=y-12
180 NEXT c
Tu sa pouzili znaky + a - ako riadiace znaky na riadenie
PLOT pozicie. V riadku 160 mozete zmenit vzdialenosti
medzi pismenami.
Velke cvicenie: Pouzite PLOT na dosiahnutie prveho zarov-
nania textu na obrazovke. Musite lokalizovat prazdne mie-
sta v riadku a musite ich skratit alebo predlzit.POP < ciselna premenna > (G + Q)
----------------------------------------------------------------
Odstranuje adresu zo spolocneho stacku GOSUB/DO-LOOP/PROC.
Ak sa pouzije POP s premennou,tak bude mat hodnotu odstra-
neneho cisla riadku (odstraneneho zo stacku). Takto sa
mozeme dozvediet, odkial sa skakalo do podprogramu. Potom
sa da tiez vratit na riadok za tento skok pomocou GOTO,ale
nie na dalsi prikaz v danom riadku!
100 GOTO 500
110 STOP
500 POP loc
510 PRINT "Podprogram volany z riadku"; loc
550 GOTO loc+1
Ked by miesto 550 bolo 550 RETURN, dostali by sme chybove
hlasenie "RETURN without GOSUB", lebo navratova adresa je
stratena.
Ak robime POP a v adresovom stacku nie je adresa,dostaneme
chybu "No POP data" (Ziadne data pre POP).PROC meno (G + 2)
----------------------------------------------------------------
Tu budu tiez vysvetlene DEF PROC, END PROC.
PROC znamena Procedura - procedury sa daju pouzivat ako
podprogramy s GOSUB, ale nepotrebujete vediet, kde sa pod-
program v programe nachadza, lebo proceduru volame menom.
Pocitac proceduru najde podla jej prveho riadku, kde stoji
DEF PROC - ako prvy prikaz. Procedura sa konci prikazom
END PROC.
Definicie procedur su ignorovane az dovtedy, kym su volane
presne ako definicie funkcii s DEF FN. V BB existuju len
globalne premenne.
10 FOR n=1 TO 20 : PROC recheck : NEXT n
200 DEF PROC recheck : LET seite = RND * 20 + 20
210 PLOT RND * 215,RND * 135: DRAW seite,0: DRAW 0,seite
220 DRAW -seite,0: DRAW 0,-seite: END PROC
230 PRINT "Hotovo"
Idealny strukturovany program obsahuje mnozstvo procedur,z
ktorych kazda vykona cast prace, ktora sa da vykonat odde-
lene od ostatnych casti. Postupne su volane v hlavnom pro-
grame.
100 PROC ukaz HRACIE POLE
110 PROC hra
120 PROC ukaz skore :STOP
Ked sme este nedefinovali proceduru, dostaneme chybu
W "Missing DEF PROC" (Chyba DEF PROC) - toto i pri pouziti
END PROC bez DEF PROC (vynimkou je, ked END PROC najde
adresu na stacku - nemoze odlisit proceduru od subrutiny).
Ked zabudnete END PROC, dostanete "No END PROC".RENUM <(Start TO koniec )> <LINE novy start> <STEP krok> (G + 4)
----------------------------------------------------------------
RENUM samotne precisluje cely program zacinajuc od 10 s
krokom 10. Mozete ucinok obmedzit na blok riadkov.
RENUM (130 TO 220) - precisluje naznaceny blok
RENUM (130 TO ) - od 130 vyzsie
RENUM ( TO 100) - precisluje vsetko od zaciatku po
riadok 100 okrem riadku 0
Ak by sa pri precislovani bloku prepisala ina cast, dosta-
neme "Mo room for line" (Nemam miesto pre riadok) s tymto
novym vyznamom. Mozete urcit zaciatocny riadok po pre-
cislovani pomocou LINE. Takisto pomocou STEP mozete zmenit
krok. Poradie specifikacie pre RENUM musi byt zachovane,
ale niektore mozu chybat: RENUM LINE 1000 STEP 20
RENUM (1540 TO ) LINE 2000
RENUM (100 TO 174) LINE 230 STEP 5 RENUM najprv hlada pocitane skoky typu GOTO L*100 -ak ich
najde, skonci s hlasenim "Too hard" (Prilis tazke) a ukaze
sa cislo riadku a prikazu, ktory to sposobil. Mozete to
prepisat inak, alebo schovat do REM apod. (Aj INPUT LINE
treba takto schovat vo verzii 1.0).
RENUM precisluje GOTO,GOSUB,RESTORE,RUN,ON,ON ERROR,TRACE,
LIST,LLIST,LINE.
Riadky s CLOCK cislami treba precislovat rucne.
Pozn: RENUM pouziva obrazovku ako BUFFER. Preto treba vyp-
nut ukazovatel CLOCK-u,lebo bezi i pri RENUM a moze
urobit chybu.ROLL smer ;< x-suradnica , y-suradnica ; Sirka ,Vyska > (G + R)
----------------------------------------------------------------
Pozri tiez: SCROLL.
ROLL posuva obsah obrazovky alebo jej casti o jednu pikslu
dolava,doprava,hore a dolu. Pri preteceni na jednej strane
sa body ukazuju na strane opacnej. Smer rolovania sa udava
ako 5,6,7,8 (podla kurzorovych tlacitok). Pretoze pohyb je
len o jeden bod,pouziva sa ROLL v cykle. Naplnte si niecim
obrazovku (napr. pomocou lIST) a nechajte bezat tento pro-
gram: 100 FOR d=5 TO 8 : FOR p=1 TO 100
110 ROLL d : NEXT p : NEXT d : STOP
Pohyb po diagonale dosiahnete striedanim pohybov - napr.
hore a doprava.
Urcite okno sa definuje takto: dajte smer,bodkociarku,x a
y suradnice laveho horneho rohu okna (ako pri DRAW a PLOT)
potom znovu bodkociarku a sirku v PRINT poziciach (teda 1
az 32 - toto obmedzenie je koli setreniu pamati a
rychlosti) a nakoniec vysku okna v jednotkach bodov
(1-176).
ROLL sa da efektivne pouzit na pohyb figur - najlepsie
efekty dosiahneme pomocou viac okien.
Napriklad tieto dva priklady:
100 LIST : LIST : LIST
110 ROLL 5 ; 0,175 ; 32,88 : ROLL 6 ; 0,175 ; 16,176
120 ROLL 8 ; 0,87 ; 32,88 : ROLL 7 ; 128,175; 16,176
130 GOTO 110
alebo
200 FOR N=1 TO 7 : LIST : NEXT N
210 FOR L=1 TO 175 : ROLL 8 ; 0,175 ; 32,l : NEXT LSCROLL < smer >;< x-sur,y-sur;sirka,vyska > (G + S)
----------------------------------------------------------------
Pozri tiez ROLL.
SCROLL je velmi podobne prikazu ROLL. Rozdiel je v tom,
ze SCROLL sa da pouzit i bez parametrov - potom posunie
cely obraz o 1 riadok vyzsie (ako pri ZX-81). Ak nasleduje
5,6,7,8 tak SCROLL posunie obrazovku o jeden bod v danom
smere. To co vypadne na jednej strane je stratene - na
druhej strane sa doplni prazdnymi znakmi.
Da sa pohybovat i okno - dame suradnice ako pri ROLL.
Skuste programy pre ROLL a SCROLL a pozorujte rozdiely.
Pohyb stringu A$ robi program:
100 LET A$= "JEDNA DLHA VETA SA OBJAVI SPRAVA..."
110 FOR c=1 TO LEN A$
120 PRINT AT 10,31 ; INK 7 ; A$(c)
130 FOR p=1 TO 8 : SCROLL 5 ; 0,95 ; 32,8 ; NEXT p
140 NEXT c
150 FOR p=1 TO 225 : SCROLL 5 ; 0,95 ; 32,8 ; NEXT p
Ked nechcete prepocitavat PRINT AT poziciu na PLOT poziciu
mozete v BB pouzit v riadku 120 zlepseny PLOT:
120 PLOT INK 7;248,95; A$(C)
Pouzite ten isty princip na alternativne udavanie textu:
200 DATA "Bolo to pred davnymi vekmi"
210 DATA "v jednej dalekej Galaxii..."
300 FOR L=1 TO 2 : READ A$
310 PRINT AT 21,2; INK 7; A$
320 FOR P=1 TO 8: SCROLL 7: NEXT P: NEXT L
330 FOR P=1 TO 176: SCROLL 7: NEXT P