BETA.1 ZX                  ZX SPECTRUM               TASWORD TWO
                         Beta basic 1.0
                        ****************
     Betasoft 1983                   92 Oxford Road,Masley
                                        Birmingham
Ma 26 novych prikazov a 10 novych funkcii.
NAHRAVANIE    LOAD "bb48"                (kopirovat ide len
                                          COPYPROLOGOM!)
Nahraju sa 2 Basic riadky 0 a 1.
Riadok 0 - definicie funkcii. Riadok 1 rezervuje miesto pre
strojovu cast a nahra ju. Potom sa riadok 1 sam zotrie a riadok
a riadok 0 zostane - nie je ho vidno, ked su uz zadane ine
riadky. Vsimnite si klikotanie pri stlaceni tlacitok - da sa
vypnut pomocou POKE 23609,0 .
Aby ste nestratili riadok nula, pouzite na stare programy MERGE
nie LOAD. Dlhe programy s mnozstvom skokov idu rychlejsie.
Prikaz NEW nezmaze vsetko, ale len program a data. (Riadok 0 je
ponechany.)
Programy zostavene s pomocou BB nahrat na pasku povelom SAVE.
Pri nahravani z pasky musi byt vzdy pritomny Beta Basic,inak su
nove prikazy zobrazene ako graficke znaky a dostaneme "Nonsens
in BASIC"
  Ak ste BB zabudli,staci dat:   MERGE "bb48": GOTO 1
lebo pri MERGE nefunguje autostart. Stratime riadok 1 ,nic viac.
Okrem prikazu EDIT su vsetky prikazy zadavane klavesami pomocou
"SHIFT+GRAPHIC" .
Syntax prikazov : to,co je v zatvorke < > nie je povinne.
ALTER <popis atributu> TO popis atributu             (G,potom A)
----------------------------------------------------------------
   Zmeni nam atributy bez zmazania obrazovky.
      100 PRINT AT 10,10 ;"TEST": PAUSA 50 : ALTER TO PAPER 4
   Su mozne i kombinacie.
      ALTER TO PAPER 2 , INK 7 , FLASH 1
   Ked nechceme zmenit vsetko, ale len urcite pozicie pouzijeme
      ALTER INK 7 TO INK 0
   To co bolo pisane bielym, bude pisane ciernym. Skuste aj :
      ALTER INK 3 , BRIGHT 1 , PAPER 7 TO INK 5 , FLASH 1
   Toto zmeni len pozicie s INK 3 , BRIGHT 1 a PAPER 7.
Nasledujuci program ukaze na obrazovke sachovnicovity raster.
Trochu sa pohrame s povelom ALTER.
   100 LET A = 2 : LET B = 4
   110 FOR L = 1 TO 5
   120 FOR N = 1 TO 16 : PRINT INK A; PAPER B;"XXXX"; PAPER A;
       INK B;"OOOO"; : NEXT N
   130 LET temp = A : LET A = D : LET B = temp : NEXT L
   140 LET T = 30
   150 ALTER INK A TO INK B : PAUSE T
   160 ALTER PAPER A TO INK A : PAUSE T
   170 ALTER INK A TO PAPER B : PAUSE T
   180 ALTER INK B TO PAPER A : PAUSE T
   190 LET T = T-T/10+1 : GOTO 150
AUTO <cislo riadku> <,krok>                          (G,potom 6)
----------------------------------------------------------------
   Zapne sa automaticke zadavanie cisiel riadku pri  zadavani
   programu - pocitac vam ponuka cisla. Pri nezadani hodnot sa
   predpoklada 10,10. V nasledovnom kroku ponuka riadok 20,Potom
   30 atd. Ak urcitu oblast chcete preskocit - vyDELETujte  cis-
   lo a zadajte nove - bude ponukat odtial.
      AUTO           zacneme od riadku 10 s krokom 10
      AUTO 100       zacneme od riadku 100
      AUTO 100,5     zacneme od riadku 100, krok 5
   Ked chcete opustit AUTO, vymazte ponuknute cislo a dajte  iny
   prikaz (LIST alebo cosi podobne).
   POZOR: Startovacia hodnota nesmie byt pre cislo riadku mensia
   ako 10 a krok vacsi ako tato prva hodnota cisla riadku.
BREAK    (SHIFT + SPACE)                  (nie v grafickom mode)
----------------------------------------------------------------
   Nie je to prikaz! Pre BASIC vacsinou stary BREAK staci.
   Z nekonecnej loopy v strojaku nas zachrani novy BB BREAK.
   Na to musi byt zapnuty CLOCK - Mod  (pozri dalej).
   Ked stlacite BREAK viac ako sekundu,tak sa prerusi program
   ktory sa v SINCLAIR BASIC-u  prerusit nedal.
   Poznamky: 1.Ked program pride na copyright Sinclair symbol
                tak nam uz nepomoze nic.
             2. (Pre programatorov v assembleri). Nesmiete
                 znemoznit prerusenie, ked to chcete pouzit.
CLOCK cislo alebo string                             (G,potom C)
----------------------------------------------------------------
   Mate pristup ku 24 hodinovym realnym hodinam (realizovane su
   pomocou preruseni) v pravom hornom rohu. Ukazuju sa hodiny,
   minuty,sekundy. Mozete sa nechat zobudit v danom case a  pod.
   (pozri aj FN T$()). Hodiny bezia nezavisle od programu,
   jedine pri BEEP a praci s magnetofonom sa cas zastavi. Co sa
   ma dat zadavate cislom od 0 do 7 pri prikaze CLOCK
   Moznosti:
         Mod       Alarm GO-SUB      Alarm BEEP        Display
          0             -                 -               -
          1             -                 -              ano
          2             -                ano              -
          3             -                ano             ano
          4            ano                -               -
          5            ano                -              ano
          6            ano               ano              -
          7            ano               ano             ano
      Hodiny bezia odvtady, ked ich zapneme prikazom CLOCK +
      cislo 0-7. Idu od 00.00.00 - nastavime prikazom CLOCK.
      Priklad: CLOCK "09:29:55"
      Dvojbodky medzi ciframi mozeme vynechat, lebo CLOCK berie
      do uvahy iba prvych sest zadanych cislic a vsetko ostatne
      (s vynimkou a, alebo A) ignoruje. Tak napr. zadanie
             CLOCK "xyz10"    bude interpretovane ako
             CLOCK "10:00:00"
      Ked dame a, alebo A bude to alarm-cas. CLOCK "A 06:20" -
      budik je nastaveny na 6 hodin a 20 min. Ked pride cas ku
      tejto hodnote,tak bude pri modoch 2, 3, 6, 7 zvonit. Inak
      skoci pri 4-7 na podprogram s cislom riadku medzi 8 a
      9999. Zvolime cislo riadku pomocou
                       CLOCK  cislo riadku
      CLOCK 9000 - alarm rutina je na riadku 9000.
      Tato rutina podprogramu moze mat ine premenne ako hlavny
      program. Ked vsak v hlavnom progame pracujete s povelmi
      CLEAR alebo RUN, musite si premenne v pamati rezervovat
      pomocou POKE. Nasledujuci priklad ukaze ako rutina podpro-
      gramu vyuziva cas. Kazdu minutu bude nacitavat data.
        0999 STOP
        9000 PRINT "Bezi alarm-rutina"
        9010 LET cislo= PEEK 27000 : POKE cislo + 27000, IN 127
        9020 LET cislo = cislo + 1 : IF cislo > 100 THEN LET
             cislo = 0
        9030 POKE 27000, cislo : LET Z$ = FN T$()
        9040 LET hod = VAL Z$(1 to 2) : LET min = VAL Z$(4 TO 5)
        9050 LET min = min + 1 : IF min = 60 THEN LET hod = hod
             + 1 : LET min = 0
        9060 CLOCK "a"+ STR$ hod + STR$ min : RETURN
      Teraz zadajte priamy povel :
        CLEAR 26999: POKE 27000,0 : CLOCK 9000 : CLOCK 5
      Tymto sa vytvorilo miesto pre ciselne pole o dlzke 100 ci-
      sel a prva hodnota bola dana 0. Riadok 9000 je ako GOSUB
      rutina zvoleneho modu alarmu. Ked teraz nastavite cas na
      nejaku hodnotu,  pomocou CLOCK "A####" nastavite cas, od
      ktoreho zacne prebiehat nacitavanie. Toto bude uz dalej
      bezat automaticky kazdu minutu. Podprogram bude kazdu mi-
      nutu nacitavat datove slovo z portu 127 a zapisovat ho do
      pamati od adresy 27001 pre dalsie pouzitie alebo spraco-
      vanie. V tomto podprograme je miesto len pre 100 datovych
      slov, ale tymto sme chceli ukazat princip pouzitia.
      Pokial nemate k pocitacu pripojeny vstupny port mozete
      program vyuzit inym sposobom - na pravidelne vykonavanie
      nejakej cinnosti.
      Poz:Mnohe dodatocne zariadenia tak zatazia datove linky
          Spectra, ze kazdy program vypadne pri zapnutom CLOCK-u
          alebo inej interupt rutine. Vtedy treba pridavne
          zriadenia vytiahnut alebo CLOCK nepouzivat.
DEF PROC  meno procedury                             (G,potom 1)
----------------------------------------------------------------
      Pozri aj: PROC , END PROC
      Zacina definiciu procedury - pozri PROC.
      DEF PROC musi byt prvym prikazom riadku (dovolene su praz-
      dne znaky a farebne atributy). Pred tymto riadkom musi byt
      prikaz (napr. REM), lebo pri predchadzajucom prazdnom
      riadku by nemusela byt procedura najdena.
      Ako meno procedury su dovolene vsetky mena ako pre
      premenne. Teda zacinat musi pismenom a potom tam mozu byt
      pismena, cislice, alebo $. Prazdne znaky nemaju vyznam a
      nerozlisuju sa male a velke pismena. Meno procedury sa
      moze zhodovat s menom premennej a nebudu zamenene.
DELETE <cislo riadku> TO <cislo riadku>                  (G + 7)
----------------------------------------------------------------
      Odstrani vsetky riadky v naznacenom bloku v programe.
      Ak sa neuda prve cislo, predpoklada sa 0, ak druhe, tak sa
      vezme posledny riadok programu.
          DELETE     TO 100   - vymaze riadky 0 az  100  vcitane
          DELETE 100 TO       - vymaze vsetky od 100 vyzsie
          DELETE   0 TO   0   - vymaze riadok 0
          DELETE     TO       - cely program okrem riadku 0
      Posledny riadok sa od NEW lisi v tom, ze zachova vsetky
      premenne. Udane riadky musia existovat,inak je hlasena
      chyba "No such line"  (Taky riadok nejestvuje).
      DELETE sa da pouzit i v programe, ale vacsinou uz potom
      nesedia riadky. Ked sa ma vymazat blok - tak musi byt pos-
      lednym prikazom v tomto bloku.
      Rozumne je pomocou DELETE vymazat DATA prikazy v programe,
      ked su uz data precitane - ziska sa tak v pamati miesto.
DO
DO  WHILE  podmienka                           (G+D, WHILE je J)
DO  UNTIL  podmienka                           (G+D, UNTIL je K)
----------------------------------------------------------------
      Pozri tiez: LOOP , EXIT IF
      DO a LOOP, spolu s podmienkami WHILE a UNTIL nam davaju
      pokrokove kontrolne struktury do ruk. DO a LOOP robia  za-
      tvorky pre nekonecnu loopu:     10 DO
                                      20 PRINT "Hallo": PAUSE 50
                                      30 LOOP
      Tento program bezi,az dovtedy, kym ho neprerusime.
      Zaujmavejsie su cykly s podmienkami:
      DO  WHILE  (podmienka) Vykonava cyklus, kym je  podmienka
                 pravdiva a kym pravdivou zostava. Ak je
                 podmienka nesplnena, pokracuje sa prvym riadkom
                 za LOOP.
      DO  UNTIL  podmienka vykonava cyklus do nasledovneho  LOOP
                 len vtedy, kym je podmienka nepravdiva - az do-
                 vtedy kym sa nestane pravdivou.
      Takze tieto dve podmienky su opacne.
          10 LET sucet = 0
          20 DO  UNTIL  sucet > 100
          30 INPUT " Zadaj cislo " ; x
          40 LET  sucet = sucet + x : PRINT sucet
          50 LOOP
          60 PRINT "Teraz je viac ako 100"
      Riadok 20 sa da nahradit nasledovne:
                        20 DO WHILE sucet<=100
      DO - LOOP pary sa daju vnutorne vnorovat,podobne ako FOR -
      NEXT.
      V nasledujucich prikladoch su pary oznacene,ale v programe
      tak nie je !
        DO a : DO b : ... : LOOP a : LOOP b       alebo
      DO a : DO b : LOOP b : DO c : LOOP c : LOOP a
      Pozor:Adresa kazdeho DO sa uklada na stack - preto z
      loopy nevyskakujte inak ako pomocou EXIT IF alebo POP,inak
      je hlasena chyba  "Missing LOOP".
      Pozn.:V inych programovacich jazykoch su  podobne  DO-LOOP
            struktury pod inymi menami:
                      REPEAT (prikazy) UNTIL (podmienka)
            v Pascale je rovnake s
                      DO (prikazy) LOOP UNTIL (podmienka)
            v Beta Basicu a
            (Pascal)  WHILE (podmienka) (prikazy) END WHILE
            je rovnocenne s
                      DO WHILLE (podmienka) (prikazy) LOOP
DPOKE  Adresa , cislo                                    (G + p)
----------------------------------------------------------------
      Pozri tiez: FN P (adresa)
      DPOKE znamena  Dvojity  POKE.  Zodpoveda  tomu  v  BASIC-u
            POKE adresa,cislo - INT (cislo/256)*256
            POKE adresa + 1, INT (cislo/256)
      Inak povedane nizsi byte cisla sa POKE-uje do adresy,vyzsi
      byte do dalsej (vyzsej) adresy. Dobre sa s tym menia  sys-
      temove premenne, opacna funkcia je FN P (adresa)
EDIT  < cislo riadku >                (tlacitko 0,nie v G-mode!)
                                      (alebo 5 v G-mode)
----------------------------------------------------------------
      Ked po ENTER stlacime tlacitko 0,objavi sa EDIT - stlacime
      ENTER na editovanie riadku s  programovym  kurzorom  alebo
      dame cislo riadku a editujame riadok. Mozeme pouzivat vse-
      tky kurzorove sipky - kurzor skace medzi riadkami.
ELSE  < prikazy >                                        (G + E)
----------------------------------------------------------------
      ElSE je cast IF-THEN struktury. Zvycajne program skoci  na
      dalsi riadok, ked podmienka ni je splnena. Ak za IF-THEN
      v riadku nasleduje ELSE, tak sa prikazy za ELSE vykonaju,
      ked nie je podmienka splnena. Ak je splnena,vykona sa vse-
      tko po ELSE a potom na novom riadku.
         10 INPUT " Zadaj cislo " ; x
         20 PRINT " Pozriem,ci je to 1 "
         30 PAUSE 30
         40 IF x=1 THEN PRINT "Ano" : ELSE PRINT "Nie"
         50 GOTO 10
      (Dajte pozor, aby pred ELSE bola vzdy dvojbodka.)
      Opat sa IF-THEN-ELSE daju do seba vnorovat.
         IF-THEN A : IF-THEN B : ELSE B
         IF-THEN A : IF-THEN B : ELSE B : ELSE A
         IF-THEN A : ELSE A : IF-THEN B : ELSE B
END PROC                                                 (G + 3)
----------------------------------------------------------------
      Pozri tiez: DEF PROC , PROC
      Oznacuje koniec procedury,ktorej  definicia  sa  zacala  s
      DEF PROC. Nie je to vykonny prikaz,iba oznacenie. Ked sa v
      procedure narazi na END PROC, tak sa procedura skonci a
      vratime sa za volanie procedury. Ak sa  END  PROC  pouzije
      bez DEF PROC, dostaneme chybu  " Missing DEF PROC "
      (chyba DEF PROC).
EXIT IF <podmienka>                                      (G + I)
----------------------------------------------------------------
      Pozri tiez: DO , LOOP
      Je to cast DO-LOOP struktury - zoznamte sa najprv  s  nou.
      Pouziva sa na opustenie tohoto cyklu na inom mieste ako za
      LOOP prikazom. Ak je podmienka splnena,skoci sa za odpove-
      dajuci koniec struktury (prikaz LOOP),inak sa nestane nic.
         100 DO : PRINT " Riadok 100 " : PAUSE 20
         110 EXIT IF  INKEY$ = "s"
         120 PRINT " RIADOK 120 ": PAUSE 20 : LOOP
         130 PRINT " Mimo LOOP-y "
      Ked v tomto programe stlacime "s", tak vyskocime s cyklu.
      Ak sa EXIT IF pouzije mimo cyklu, tak dostaneme chybu s
      " Missing LOOP "  (chyba LOOP)
GET  cislo alebo stringova premenna                      (G + G)
----------------------------------------------------------------
      GET cita znak z klavesnice, bez toho aby cakal na ENTER,
      podobne ako INKEY$. Ale GET caka, kym sa stlaci tlacitko a
      len potom sa pokracuje dalej. Pri stringovej premennej
      caka na jeden znak, pri ciselnej 1-9 normalne, tlacitko A
      sposobi priradenie premennej hodnoty 10, B=11 atd. Je to
      vyhodne pri programoch s "menu" riadenim (pozri tiez ON).