               ********************************************
               *   P  R  O  G  R  A  M       L  O  G  O   *
               ********************************************



     Program LOGO má podobnou logiku jako program KAREL, a je tedy vhodny
pro  výuku  programování.  Vzhledem  ke  KARLOVI  má  však  mnohem  větší
možnosti.  Jeho  základem  je   bodová   grafika,  v  níž  jsou  grafické
struktury  vytvářeny  pohybem  "ŽELVY",  jejíž  pozice může být zobrazena
aniž  by  narušovala  vytvořenou  kresbu.  Mimo  to může program pracovat
také  v  textovém  režimu  v němž se vytváří procedury, z nichž se skládá
vlastní program.


                         *   1.   R E Ž I M Y   *
          		 ************************

      LOGO  má  čtyři režimy. Jsou to GRAFICKÝ REŽIM do něhož se přechází
stisknutím  klávesy [F2]  nebo  příkazem  CS  nebo provedením jakéhokoliv
grafického  příkazu.  Do  TEXTOVÉHO  REŽIMU  se přejde klávesou [F1] nebo
příkazem  TS.  Příkazem  PS  se  vyvolá kombinovaný texto-grafický režim.
Čtvrtý  režim  je  editovací  a  volá  se  příkazem  ED  +  speifikace. V
tomto  režimu  je  možno  editovat  procedury,  funkce  a  proměnné.  Při
přechodu do jiného režimu se vždy smaže obrazovka.


                        G R A F I C K Ý   R E Ž I M

     OBRAZOVKA v základním stavu obsahuje souřadný systém 320 x 200  bodů
překrývaný  zdola  pěti  dialogovými  řádky.  Bod  [0,0]  je  uprostřed s
běžnou  orientací  osy X a Y.  Příkazem  SETSPLIT je možno nastavit počet
dialogových  řádků  a  příkazem  SETSCRUNCH  poměr  mezi   požadovaným  a
základním  počtem  bodů  na  ose  Y.  Na  obrazovce  je možno volit barvu
podkladu  příkazem  SETBG  ze  16  barev  a  kreslit  čtyřmi až šestnácti
barvami  (VRAM).  Barvy  se  ukládají  příkazem  SETPAL  do  jednotlivých
palet,  přičemž  TEXTY  mají  barvu  palety  3  a  mohou  být zobrazeny v
libovolné  části  obrazovky.  Grafický  režim  obsahuje podrežimy WINDOW,
WRAP a FENCE různě ošetřující snahu o kreslení mimo obrazovku.


                         T E X T O V Ý   R E Ž I M

     V  textovém  režimu  je možno využívat celé obrazovky k psaní textu.
Nelze v tomto případě pracovat s grafikou.


                 T E X T O - G R A F I C K Ý   R E Ž I M

     Jedná  se  o spojení textového a grafického režimu. Nevýhodou tohoto
režimu  je  scrolling  obrazovky  způsobující  posun  grafiky po ukončení
posledního řádku.


                        E D I T O V A C Í   R E Ž I M

     Tento  režim vyvolá na obrazovku specifikovaný výpis s možností jeho
editace.   Kursorovými   klávesami   se   pohybuje  kursorem  po   textu,
klávesou  [DEL]  se  maže  znak  před kursorem, klávesou [INST] se vkládá
řádek  před  kursor,  klávesou  [CR]  se  vkládá řádek za kursor. Vlastní
text  se  vkládá  přímo.  Ukončení editace je buď klávesou [ESC], přičemž
se  editace  ruší  nebo  klávesou  [F3],  kdy  je editace akceptována. Po
ukončení editace se přejde do textového režimu.








                         *   2.   G R A F I K A   *
                         **************************

     Do  grafického režimu se přejde při provádění jakéhokoliv grafického
příkazu.  Souřadný  systém  má  rozsah  16 000  jednotek  na ose X v obou
směrecha  15978  jednotek  na  ose  Y.  Obrazovka  obsahuje  v základním 
tvaru  320  bodů  na  ose X a 200 bodů na ose Y s bodem [0,0] uprostřed a
běžnou orientací kvadrantu (pravý horní je +X +Y).

     PŘÍKAZY:

WINDOW           - želva se pohybuje i mimo obrazovku, její pohyb mimo je
                   ale  pomalejší.
FENCE            - při snaze opustit rámeček je hlášena chyba.
WRAP  	         - okraje  rámečku  obrazovky navazují na sebe. Opustí-li
                   želva  obrazovku,  kreslí  dále  od  opačného  okraje.
CS	         - smazání  obrazovky  a  nastavení  želvy  do  středu  s
                   natočením do úhlu 0 (svisle nahoru).
CLEAN	         - smazání obrazovky (také SS).
SETSCRUNCH A     - číslo  A  v rozsahu od 0.1 do 10 udává, v jakém poměru
                   se  změní  na  ose  Y  velikost  souřadnicové jednotky
                   vzhledem k základní velikosti
ST	         - zobrazení želvy
HT	         - želva není zobrazována.
FD A	         - pohyb želvy vpřed o délku A
BK A	         - pohyb želvy vzad o délku A
LT A	         - otočení želvy o A stupňů vlevo
RT A	         - otočení želvy o A stupňů vpravo
DOT [A,B]        - nakreslí bod o souřadnicích [A,B]
HOME	         - návrat  želvy  do  základní polohy (bod [0,0], úhel 0)
SETX A	         - posun želvy o délku A v ose X
SETY A           - posun želvy o délku A v ose Y
SETPOS [A,B]     - posun želvy na bod o souřadnicích [A,B]
SETH A           - otočení  želvy  do  absolutního úhlu A (ve směru hodin
                   od nuly)
TOWARDS [A,B]    - vrací hodnotu úhlu mezi současnou pozicí a bodem [A,B]
SETPC A	         - čára se kreslí barvou palety číslo A
SETBG A          - barva podkladu je A (0 - 16)
SETPAL A [B 0 0] - barva B do palety číslo A, zbyvající nuly budou zřejmě
                   parametry pro ěestnáctibarevný režim
SETSPLIT R	 - číslo  R  v  rozsahu  od 1 do 25 udává  počet řádků od
    		   dolního  okraje  obrazovky,  v nichž se vypisuje běžný
		   text
PD		 - položení pera, pohyb želvy se vykresluje
PU		 - zvednutí pera, želva při pohybu nekreslí
PE		 - kreslení  barvou  palety číslo = (3 - číslo pal. bodu,
		   přes nějž se kreslí)
PX		 - totéž jako PE
FILL		 - vyplní plochy až po jakoukoliv vykreslenou čáru, barva
		   výplně  dána  aktuální  barvou pera, příkazu fill musí
		   předcházet položení pera  na bod, který má podkladovou
		   barvu.


                      *   3.   A R I T M E T I K A   *
                      ********************************

     Aritmetika  pracuje  s  přesností  na  ěestnáct  míst  s rozsahem od
5.237e-151  do  5.237e151.  běžné  operátory  jsou: +  -  *  /
QUOTIENT A B  - celočíselné dělení (A div B)
REMAINDER A B - zbytek celočíselného dělení (A mod B)
ROUND(A)      - zaokrouhlení čísla A na celé číslo
INT(A)        - celočíselná hodnota A (běžná funkce INTEGER)
SIN(A)	      - funkce simus, A ve stupních
COS(A)        - funkce cosinus, A ve stupních
ARCTAN(A)     - funce arcustangens, A ve stupních
RANDOM(A)     - náhodné celé číslo z intervalu (0 až A-1)





                         *   4.   L O G I K A   *
                         ************************

     LOGO rozlišuje malá a velká písmena. Základní procedury a funkce  se
píší  zásadně  malými  písmeny.  Klávesa  [CR]  ukončuje  řádek a uzavírá
všechny   závorky.  LOGO  zná  proměnné,  funkce  a  procedury.  Základní
procedury  a  funkce nazývá primitivními. Z nich se editací tvoří vlastní
procedury a proměnné,které mohou být ihned užívány v dalších procedurách.
Názvy  procedur  a  proměnných  jsou znakové řetězce začínající písmenem.
Proměnná se od procedury liší uvedením dvojtečky před názvem.
        AbC    je název procedury AbC, uvedeným názvem se procedura volá.
        :j4    je hodnota proměnné j4
        "okNa  je jméno proměnné okNa

     Jako  oddělovače  používá  LOGO  mezeru  nebo  základní  aritmetické
operátory a závorky.


                          *   P R O M Ě N N É   *
                          ***********************

     Proměnnou  tvoří  název,  jemuž se příkazem MAKE přiřadí hodnota. Ve
výrazu   může   být   uvedena  absolutní  hodnota,  hodnota  funkce  nebo
aritmetické,  logické  a  řetězcové  operace.  Hodnota  proměnné může být
číselná  nebo  řetězcová,  což  znamená seznam prvků uzavřený v hranatých
závorkách.
MAKE "P výraz     proměnné P je přiřazena hodnota výrazu.


                           *   F U N K C E   *
                           *******************

     LOGO obsahuje tyto primitivní funkce:
NODES      - vrací hodnotu počtů bytů volné paměti
TOWARDS    - je číselná hodnota úhlu mezi dvěma body
CURSOR     - je seznam souřadnic kursoru ve tvaru [SL RA]
PAL	   - je seznam barev v dané paletě ve tvaru [B 0 0]
ASCII "A   - je ascii kód prvního znaku řetězce A
CHAR A	   - je ascii znak odpovídající číslu A
COUNT A	   - je počet prvků proměnné A
LISTP A    - je logická hodnota TRUE, je-li A seznam, jinak FALSE
WORDP A    - je logická hodnota TRUE, je-li A číslo, jinak FALSE
THING "A   - je hodnota proměnné A (totéž jako :A)
EMTYP A    - TRUE, je-li A prázdný seznam
EQUALP A B - TRUE, je-li A rovno B
TF         - seznam hodnot stavu želvy ve tvaru [X Y U K B V], kde
             X a Y = souřadnice želvy na osách X a Y
             U     = absolutní úhel, v němž je želva otočena
             K     = stav pera (PD, PU, PE, PX)
             B     = barva, kterou želva kreslí (implicitně PAL 1)
             V     = viditelnost želvy (FALSE nebo TRUE)
SF         - seznam hodnot stavu obrazovky ve tvaru [P R S M X], kde
             P     = barva podkladu (PAL 0)
 	     R     = režim obrazovky (graf., text.,text.-graf.)
	     S     = počet textových řádků (SETSPLIT S)
	     M 	   = grafický mod obrazovky (WRAP, WINDOW, FENCE)
	     X     = poměr velikosti jednotky na ose Y vzhledem k
	            jednotce na ose Y


FUNKCE  PRACUJÍCÍ  SE  SEZNAMY

FIRST :A   - první prvek seznamu A
LAST :A    - poslední prvek seznamu A
ITEM K :A  - A je K-tý prvek seznamu A
BF :A      - seznam A bez prvního prvku
BL :A      - seznam A bez posledního prvku
FPUT :A :B - vložení proměnné A do seznamu B zepředu




LPUT :A :B - vložení proměnné A do seznamu B zezadu
SE :A :B   - spojení hodnot proměnných A a B do seznamu
WORD :A :B - spojení hodnot A a B které nesmí být seznam


                        *   P R O C E D U R Y   *
                        *************************

     Procedury  jsou  řetězce  příkazu,  procedur  a  funkcí,  které mají
hlavičku   uvozenou   slovem   TO  obsahující  název  a  případně  soupis
formálních  parametrů,  tělo  procedury  jež  je  vlastně  funkční  částí
procedury a ukončení slovem END.

     U procedury s parametry je nutno při volání procedury tyto parametry
zadat.
     V  těle  procedury  je  možno  používat  všechny  existující funkce,
procedury  a příkazy. Procedury lze volat rekurzí. V procedurách je možno
využít podmíněného příkazu a příkazu cyklu


FORMÁT  PROCEDURY
	TO název [formální parametry]
           tělo procedury
        END

PODMÍNĚNÝ  PŘÍKAZ
	IF  A [B] [C]  při splnění podmínky A se vykoná obsah závoky [B],
        při  nesplnění  se  vykoná  obsah  závorky  [C],  závorka  [C] je
        nepovinná.
        PODMÍNKA  A  může  být  FUNKCE  nabývající hodnot TRUE nebo FALSE
	nebo RELACE.
	RELACE využívají relační operátory < > = AND OR NOT
	FORMÁT relace: A < B     operátor je mexi operandy [< > =]
		       AND A B   operátor je před operandy [AND OR NOT]

PŘÍKAZ  CYKLU
	REPEAT N [výraz]  výraz v závorce se N-krát opakuje, závorka může
	mít libovolnou délku


                                ZÁKLADNÍ  PŘÍKAZY
                                *****************

BYE  		příkaz nenávratného přechodu do monitoru
RUN [seznam]    spustí program daný seznamem
STOP		příkaz ukončující průběh procedury (návrat do místa
		volání)
PAUSE		program se zastaví za příkazem PAUSE s výpisem zprávy
CO		pokračování programu zastaveného příkazem PAUSE
WAIT T		zastavení programu asi na 2 ms*T sec. (T může být 1 až
		5.237e151
TONES [V D]	tén výšky V a délky D
TO		příkaz uvozující proceduru
END		příkaz ukončující proceduru
RC 		zastavení programu a očekávání vstupu znaku z klávesnice,
		znak se na obrazovce nevypisuje
RL		zastavení programu a očekávání vstupu slova ukončeného
		[CR], slovo se vypisuje na obrazovce
RQ		totéž jako RL
OP A ???	příkaz přiřazující hodnotu funkcí A ???
PADDLE X ???	pro X=(-!,3) vrací hodnotu 0 ???


                       *   T E X T O V Ý   R E Ž I M   *
                       *********************************

     V textovém režimu lze využít tyto příkazy:





TS              smazání obrazovky a přechod do textového režimu
CT		smazání textu
PR :A		tisk hodnoty A s přechodem na další řádek
TYPE :A		tisk hodnoty A ukončený za posledním znakem hodnoty
SHOW :A		tisk hodnoty A včetně závorek v případě seznamu
TEXT "A		výpis textu procedury A
SETCURSOR [S R] nastavení kursoru do sloupce S a radku R


                            *   E D I T A C E   *
                            *********************

     Editor  pracuje  v  textovém režimu a po jeho volání se na posledním
řádku  vypíše  způsob  ukončení  editace.  Editovat lze veskrze vytvořené
celky. Do editoru se vstupuje těmito příkazy:

EDALL		editace všeho
ED [seznam]	editace procedur daných seznamem
ED "A		editace procedury A
ERALL		smazání všeho, co bylo vytvořeno
ER [seznam]	smazání procedur daných seznamem
ERN [seznam]	smazání proměnných daných seznamem
POALL		výpis všeho, co bylo vytvořeno
PONS		výpis všech proměnných
POTS		výpis názvu všech procedur
POPS		výpis všech procedur
PO [seznam]	výpis procedur a funkcí daných seznamem

     Při editaci je možno využít funkce klávesy [CTRL] ve spojení s další
klávesou:
A - skok na začátek řádku
B - o jeden znak zpět
C - opuštění editoru
D - mazání znaku na pozici kursoru
E - skok na konec řádku
F - o jeden znak vpřed
G - opuštění editoru (BREAK)
H - mazání znaku před kursorem
I - vložení čtyř mezer
K - mazání části řádku za kursorem
L - posun textu tak, že řádek s kursorem je na jedenáctém řádku
M - vložení řádku před kursor
N - posun o jednu pozici dolů
O - vložení řádku za kursor
P - posun o jednu pozici nahoru
R - skok na začátek editovaného textu
U - skok o stránku zpět
V - skok o stránku dopředu
X - skok na konec editovaného textu
Y - výpis posledně vloženého textu
- - část řádku před kursorem ??
! - ??
