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. 20
ON 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 L
SCROLL < 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