@( Exc )   K/BASIC   Zakladni popis
@29-12-1985





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%							      %
%       %   %        %  %%%%     %     %%%   %%%   %%%        %
%       %  %        %   %   %   % %   %   %   %   %   %       %
%       % %        %    %   %  %   %  %       %   %           %
%       %%        %     %%%%   %   %   %%%    %   %           %
%       % %      %      %   %  %%%%%      %   %   %           %
%       %  %    %       %   %  %   %  %   %   %   %   %       %
%       %   %  %        %%%%   %   %   %%%   %%%   %%%        %
%							      %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%





			   ( E x c )



	     Verze diskety K/BASIC:  1.01   (1985)







		   K  /  B  A  S  I  C    I I
		********************************



Konfigurace hardware	:		TNS stolek

Medium			:		disketa

Operacni system		:		C P / M    V 2.25





	K / B A S I C   je jeden z nekolika typu kompilatoru
zalozenych na jazyce BASIC pod operacnim systemem CP/M.




			O  B  S  A  H



O b s a h  . . . . . . . . . . . . . . . . . . . . . . . . .  2

U v o d  . . . . . . . . . . . . . . . . . . . . . . . . . .  2

1. Zavedeni operacniho systemu CP/M  . . . . . . . . . . . .  3
 
2. Format programu . . . . . . . . . . . . . . . . . . . . .  3

	2.1. Cislovani prikazu (radku) . . . . . . . . . . .  4

	2.2. Identifikatory  . . . . . . . . . . . . . . . .  5

	2.3. Aritmeticke operatory . . . . . . . . . . . . .  5

3. Vytvoreni programu v K/BASICu . . . . . . . . . . . . . .  6

	3.1. Prace s prekladacem KBAS2 . . . . . . . . . . .  6

		3.1.1. Druhy a funkce prepinacu  . . . . . .  7

	3.2. Ukazkovy priklad  . . . . . . . . . . . . . . .  8

	3.3. Priklady  . . . . . . . . . . . . . . . . . . .  8

4. Prace se soubory  . . . . . . . . . . . . . . . . . . . . 11

	4.1. Organizace souboru  . . . . . . . . . . . . . . 12

	4.2. Ukazky kratkych programu pro praci se soubory . 13







			U  V  O  D


	Tento popis obsahuje prehled zakladnich instrukci
potrebnych pri psani a provadeni programu v jazyce K/BASIC.
Dale obsahuje nekolik jednoduchych programu na ukazku moznos-
ti programovani v jazyce K/BASIC.
	Vsechny prikazy a dalsi moznosti K/BASICu jsou podrobne
popsany v prirucce:

	OS MIKROS / K/BASIC / PRIRUCKA UZIVATELE.

1. Zavedeni operacniho systemu CP/M
===================================

   
A) Zapnete pocitac a stisknete klavesu [RESET].

B) Vlozte systemovou disketu do mechaniky "0" a stisknete kla-
   vesu [ F ].
	
   Pocitac hlasi pripravenost symbolem:		A>

   Pozn.:
	Pokud se nepodari podle uvedeneho postupu zavest ope-
	racni system z mechaniky "0", vyjmete disketu, vlozte
	ji do mechaniky "1" a opakujte postup zavedeni systemu.
		 
   Pocitac se pak hlasi symbolem:		B>

	Pokud se system nezavede, je vhodne zkusit zavest ope-
	racni system z jine diskety. Je-li i tento pokus ne-
	uspesny, jedna se pravdepodobne o technickou zavadu na
	pocitaci.

C) Nyni je pocitac pripraven k praci.

	Pro vytvoreni programu je nutne, aby na diskete byly
tyto programy:

	ED .COM	  (nebo TED.COM)
	KBAS2.COM
	KRUN2.COM




2. Format programu
==================


	Program se sklada z jednoho nebo vice vhodne uspora-
danych prikazu K/BASICu. Nazyvaji se zdrojovym programem. 

	Pred prikazy muze byt mezera. Tam, kde je dovolena me-
zera, se muze vlozit libovolny pocet mezer. Mezery v prikazech
jsou nevyznamne. Proto prikazy:

	A=B+C
	A = B + C

jsou ekvivalentni.

	Prikazy K/BASICu se pisi ve volnem formate s nasleduji-
cimi dohodami:

1) Pokud prikaz neni ukonceny v jednom radku, musi se pouzit
   pokracovaci znak [\]. Pak je mozne pokracovat v prikazu na
   dalsim radku. Vyhrazena slova K/BASICu, nazvy promennych a
   retezcove konstanty nesmi byt preruseny mezerou, tabelatorem
   nebo znakem pro novy radek. Kazdy radek musi byt ukonceny
   znakem pro novy radek.
	
2) Vsechny znaky za pokracujicim znakem v prislusnem radku kom-
   pilator ignoruje.
	
3) Povolene jsou vicenasobne prikazy v radku oddelene znakem
   ':'. Prikazy "DATA", "DEF", "DIM" a "END" musi byt na samo-
   statnych radcich. Prikaz "IF" musi byt prvnim prikazem na
   radku.


      
2.1. Cislovani prikazu (radku) 
------------------------------

        Cislovani radku je nepovinne. Pokud je pouzito terminu
"cislo prikazu", musi byt tento ocislovany prikaz na zacatku
radku.

	Cisla prikazu (radku) jsou ignorovana krome spojeni  
s odkazy u techto prikazu:

	GO TO		GO SUB		ON		IF

	U techto prikazu se musi cislo prikazu (radku) objevit
jako navesti jedineho prikazu programu. Cisla prikazu nemusi
byt v vzestupnem poradi.

Priklad:
	40 INPUT KROK
	20 PRINT KROK
	30 GO TO 40

	Cisla prikazu 20 a 30  se nemusi v programu uvadet;
v prubehu kompilace se ignoruji.
	
Priklad:
	10 INPUT KROK
	   PRINT KROK
	   GO TO 10

	Cisla prikazu mohou obsahovat libovolny pocet cislic.
Kompilator vsak rozlisuje pouze prvnich 31 cislic.

Priklad: 
	108250147 INPUT KROK
		  PRINT KROK
		  GO TO 108250147

	Dulezitou vlastnosti cislovani prikazu K/BASICu je, ze
cislem prikazu muze byt jakekoliv platne cislo. Je mozne po-
uzit:
	- cela cisla
	- desetinna cisla
	- cisla v exponencialnim tvaru

Priklad:
	Spravne: 10 PRINT A	Nespravne: M10 PRINT A
		 10.0 PRINT B		   1M0 PRINT B
		 10.23 PRINT C		   10F12 PRINT C
		 10E12 PRINT D		   20;3 PRINT D
                                     


2.2 Identifikatory
-------------------

		
	Identifikator se zacina abecednim znakem, za kterym
muze byt libovolny pocet alfanumerickych znaku nebo tecek.
Rozlisuje se pouze prvnich 31 znaku.

	Pokud poslednim znakem identifikatoru je '$', identifi-
kator je retezcoveho typu. Pokud poslednim znakem je '%', iden-
tifikator je celociselneho typu. Identifikatory, ktere nekonci
znakem '$' nebo '%', jsou realneho typu.

Priklad:
	Spravne: K$		Nespravne: 250%
		 C22%			   1MISTO$
		 S			   POCET:POLI
		 POCET.ZAZNAMU		   P20,50
		 INDEX%			   .250
		 A250.500		   POCET ZAZNAMU
		 A250.5			



2.3. Aritmeticke operatory
--------------------------


	Aritmeticke operatory je mozno aplikovat na cela i re-
alna cisla. Vsechna oznaceni, ktera jsou dohodnuta v prirucce
K/BASIC, jsou platna az na oznaceni operatora umocneni.

	Znak pro operator umocneni ma tvar: ^ (bily ctverecek)

Priklad:	A = 2     
		B = 3
		PRINT A^B

Na displeji se vytiskne cislo 8.

3. Vytvoreni programu v K/BASICu
================================


	Nejprve musite vytvorit zdrojovy program na disku pomo-
ci textoveho editoru (pouziti K/BASICu predpoklada zakladni
znalosti systemu CP/M).

	Je mozne napriklad pouzit textovvy editor TED. Jeho
spusteni ma nasledujici format:

	A>TED <NAZEV.BAS>
	
kde <NAZEV> je jmeno zdrojoveho textu programu (max. 8 znaku).

	Zdrojovy program musi byt typu .BAS (pro naslednou     
praci s prekladacem).



3.1. Prace s prekladacem KBAS2
------------------------------


	Po vytvoreni zdrojoveho programu <NAZEV.BAS> je mozne
ho prelozit do formy <NAZEV.INT>. To je umozneno prekladacem
KBAS2. Prekladac K/BASICu se vyvolava nasledovne:

	A>KBAS2 <NAZEV> <DISK> $ <PREPINAC> <PREPINAC>	[VEZMI]

kde

<NAZEV> je jmeno zdrojoveho textu (predpoklada se typ BAS) 
		
<DISK>  je nepovinny odkaz na disk; pouziva se na urceni disko-
	ve jednotky, na kterou pozadujeme ulozit program typu
	INT. Odkaz ma tvar  A: nebo B:

<PREPINAC> je nepovinny prepinac prekladace, ktery je mozne po-
	uzit v dobe prekladu programu (druhy a funkce prepinacu
	jsou popsany na konci teto kapitoly)


Priklad:
	A>KBAS2 MZDY B:

	Program MZDY.INT bude ulozen na disketu v mechanice 1.

	A>KBAS2 MZDY
	
	Bude vytvoren program MZDY.INT a ulozen v mechanice 0.
Zdrojovy program se obvykle vypisuje na konzolu. Kazda chybova
zprava se vypise za chybnym prikazem. V tom pripade je nutne
chybu opravit pomoci textoveho editoru.

	Pokud je program bez chyby je mozne ho spustit nasle-
dujicim zpusobem:

	A>KRUN2 <NAZEV.INT> TRACE <R1>,<R2>

	Volba sledovani (TRACE) je volitelna (podrobny popis je
v prirucce K/BASICu). Neni podminkou ke spusteni programu.

Priklad:
	A>KRUN2 MZDY.INT

	Tento prikaz spusti program MZDY.INT, ktery je ulozen
na diskete v mechanice 0.

Pozn.:	Chybova hlaseni v prubehu prekladu i v prubehu vypoctu
	jsou uvedena v prirucce K/BASICu, v prilohach A a B.



3.1.1. Druhy a funkce prepinacu            
-------------------------------


Prepinac:

B - potlacuje vystup programu na konzolu v dobe prekladu. Chyby
    se vytisknou i pri nastavenem prepinaci B. Neovlivnuje vy-
    stup na tiskarnu (prepinac F) nebo na disk (prepinac G).

C - potlacuje vytvoreni souboru INT; vyhodne pri dlouhych prog-
    ramech, ktere vetsinou nebyvaji bez chyb. Syntakticka ana-
    lyza se provede bez zapisu docasneho souboru na disk.

D - potlacuje prevod malych pismen na velke. Napr. promenne
    "UHEL" a "uhel" jsou chapany jako dve ruzne promenne. Vy-
    hrazena slova musi byt psana velkymi pismeny.

E - pouziva se pri ladeni programu. Bezici program opatri chyb-
    nou zpravu cislem radku, ve kterem doslo k chybe. Musi se
    nastavit pri volbe sledovani (TRACE), jinak se volba sledo-
    vani neuplatni.

F - zpusobi, ze prelozeny vypis programu se krome zobrazeni na
    displej vytiskne i na prirazenem vystupnim zarizeni. Tim
    dostanete kopii zkompilovaneho programu. Kazda nova stranka
    vypisu obsahuje hlavicku a cislo stranky.

G - zpusobi, ze prelozeny vypis programu se zapise do diskoveho
    souboru. Soubor bude mit nazev puvodniho programu s typem
    LST.

3.2. Ukazkovy priklad
---------------------
	

	Tento priklad obsahuje temer vsechny operace, ktere
jsou nutne pri psani a spusteni noveho programu. Text za znakem
'/' znamena poznamku.


A>TED  FAKT.BAS         / .BAS je nutne zadat
			/ je zaveden program TED 
			/ pripravenost hlasi kurzorem
			/ zacina zadani programu

	REM "VYPOCET FAKTORIALU"
	INPUT "ZADEJ CELE CISLO N"; N%
	SUMA = 1
	FOR I = 2 TO N%
	SUMA = SUMA * I
	NEXT I
	PRINT "FAKTORIAL CISLA";N%;"JE";SUMA
	END

	[ STOP ]	/ touto klavesou ukoncime zadani  
			/ editor se ohlasi '*'

	E		/ provede se zaznam souboru na disk

A>KBAS2 FAKT $B		/ prelozeni souboru FAKT.BAS s potla-
			/ cenim vystupu programu na konzolu v
			/ dobe prekladu; chyby se vytisknou

A>KRUN2 FAKT.INT	/ spusteni programu FAKT.INT




3.3. Priklady
-------------


	V teto kapitole je ukazano nekolik jednoduchych progra-
mu na dokresleni moznosti prace s jazykem K/BASIC.


1) V prvnim programu (na vypocet prumerneho veku studentu) jsou
   vyuzity 2 prikazy K/BASICu:

		CHAIN  <VYRAZ>
		COMMON <PROMENNA>

Prikaz CHAIN
------------

	Odevzdava rizeni z prave vykonavaneho programu na prog-
ram, urceny VYRAZEM. Predpokladany typ souboru je INT.

	Monitor K/BASICu v dobe vypoctu udrzuje v pameti 4 cas-
ti: oblast KONSTANT, KODU, UDAJU a PROMENNYCH. Kazda z jednot-
livych oblasti hlavniho programu musi byt vetsi nez prislusna
oblast pripojovanych programu.

	Rozsah jednotlivych oblasti hlavniho programu je mozne
prizpusobit pomoci prikazu:

	%CHAIN <KONSTANTA>,<KONSTANTA>,<KONSTANTA>,<KONSTANTA>

	Prikaz %CHAIN muze byt pouze v hlavnim programu nebo 
v prvnim vykonavanem programu.


Prikaz COMMON
-------------

	Zpusobuje, ze vsechny promenne uvedene v seznamu, jsou
spolecne pro hlavni program i pro vsechny programy, ktere se
vykonavaji pomoci prikazu CHAIN. Pokud hlavni program obsahuje
prikaz COMMON, musi ho obsahovat take vsechny pripojene progra-
my. Prikazy COMMON musi byt prvnimi prikazy programu. Pouze
prikaz %CHAIN muze byt v hlavnim programu pred prikazem COMMON.


Priklad:   COMMON A,B,X(2)

	Tim je urceno, ze A,B jsou neindexovane realne promenne
	a X je dvourozmerne pole.                



Zde je program na vypocet prumerneho veku studentu:

	%CHAIN 100,200,100,100	/ urcuje rozsah oblasti
	COMMON M,Z       	/ urcuje spol.promenne
	DIM A(20),B(20)
	INPUT "N";N
	FOR I=1 TO N
	READ A(I)
	NEXT I
	C=0
	FOR I=1 TO N STEP 2
	C=C+A(I)+A(I+1)
	NEXT I
	M=C/N
	PRINT "PRUM.VEK MUZU JE ";M
        DATA 25,28,23,31,24,21,23,25
	CHAIN "VEKZ"		/ odevzda rizeni programu VEKZ



	REM  PRUMERNY VEK ZEN - VEKZ
	COMMON M,Z		/ urcuje spolecne promenne
	DIM A(20),B(20)
	IPUT "N";N
	FOR I=1 TO N 
	READ A(I)
	NEXT I
	C=0
	FOR I=1 TON STEP 2
	C=C+A(I)+A(I+1)
	NEXT I
	Z=C/N
	PRINT "PRUM.VEK ZEN JE ";Z
	DATA 19,21,23,18,21,22,20,19
	CHAIN "VEKSP"		/odevzda rizeni programu VEKSP



	REM SPOLECNY PRUMER - VEKSP
	COMMON M,Z
	X=(M+Z)/2
	PRINT "SPOLECNY PRUMER JE ";X
	STOP			/ zastaveni programu - rizeni
				/ se odevzda systemu CP/M





2) Ukazkovy program na vyuziti generatoru nahodnych cisel:


     50 INPUT "CHCETE HRAT: ANO=1, NE=0";ANO
	IF ANO=1 THEN 100
	STOP
    100 RANDOMIZE		/ nastaveni generatoru
	X=INT(RND*6)+1		/ RND generuje nahodne cislo
	PRINT X
	GO TO 50



RND	generuje nahodne cislo z intervalu <0,1) s rovnomernym
	rozlozenim pravdepodobnosti.


RANDOMIZE	inicializuje generator nahodnych cisel. Pro
	volbu prislusne konstanty se vyuziva casovy interval,
	ktery potrebuje adresat na vlozeni udaju v prikazu
	INPUT. Pro spravnou funkci je nutne, aby se pred timto
	prikazem vyskytoval prikaz INPUT.


3) Ukazkovy priklad na vyuziti viceradkove funkce:


	DIM B(10)
	INPUT "ZADEJ N";N
	FOR I=1 TO N
	READ B(I)
	NEXT I
	DEF FN.XYZ(N)		/ definice viceradkove funkce
	A=0                
	FOR I=1 TO N       
	A = A+B(I)        
	NEXT I
	FN.XYZ = A
	RETURN
	FEND			/ ukonceni viceradkove funkce
	PRINT FN.XYZ(N)		/ vytisteni hodnoty funkce
	DATA 10,20,30,40,50,60,70,80,90,80
	STOP

	
	Funkce vrati hodnotu posledniho prirazeni pri vykonani
prikazu RETURN. V tele funkce muze byt libovolny pocet prikazu
RETURN. Pokud se jmenu funkce nepriradi zadna hodnota,vrati se
posledni hodnota, ktera byla funkci vubec prirazena. Pokud ne-
byla funkci prirazena hodnota, vrati se nula.




4. Prace se soubory 
===================


	Pro aktivovani souboru se pouzivaji prikazy:

		CREATE
		OPEN
		FILE

	Po aktivovani souboru je mozne cist a zapisovat do
	souboru prikazy:

		READ
		PRINT

	Aktivni soubor je mozne deaktivovat prikazy:

		CLOSE
		DELETE

Podrobny popis uvedenych prikazu je v prirucce K/BASIC, kap. 8.

4.1. Organizace souboru
-----------------------


	V K/BASICu se pouzivaji dva typy organizace souboru:
sekvencni a pevna.


Sekvencni organizace 
--------------------

	Je vhodna pri pozadavku pamatovani udaju za sebou,
polozku za polozkou. Pristup je mozny na zaklade prohlednuti
pole za polem. Delka zapisovanych znaku neni omezena.

	Kazda udajova polozka vyzaduje jen takove misto, ktere 
je potrebne pro prislusny udaj a oddelovac. Nepouzivaji se zad-
ne vyplnkove znaky.


Priklad:
	Soubor, ktery obsahuje ciselne i retezcove udaje:

		"JOSEF","ANNA",1961


Pevna organizace
----------------

	Soubor ma tehdy pevnou organizaci, pokud se pouzije
v prikazech:
		CREATE
		OPEN
		FILE


Volba delky zaznamu:	RECL

	Kazda polozka udaju souboru pevne delky se zapise jako
jednoduche pole, oddelene carkou (tak jako pri sekvencni orga-
nizaci) s tim rozdilem, ze kazdy zaznam ma stejnou delku. Za-
znamy jsou oddeleny znaky <CR> a <LF> (klavesa [VEZMI])

	Pri kazdem vykonani prikazu "PRINT" se zapise jeden 
zaznam. Kazdy zaznam obsahuje pocet byte udanych parametrem
"RECL".

POZOR!

	Z toho plyne, ze spolecna delka vsech poli zaznamu musi
byt mensi o 2 byte nez je cela delka zaznamu (kvuli CR-LF).

4.2. Ukazky kratkych programu pro praci se soubory
--------------------------------------------------

	
1) Priklad na vytvoreni souboru:

	CREATE "SOUBOR" RECL 60 AS 1	/ vytvori a otevre sou-
					/ bor, zaznamy o delce
					/ 60 byte
					/ cislo souboru je 1
      	PRINT#1;"ADAM","BRNO","129"	/ zapise se na soubor
	PRINT#1;"JAN","BRNO","150"	/ cislo 1 zaznam urceny
	PRINT#1;"OTA","BRNO","210"	/ za strednikem

Bude vytvoren nasledujici soubor:	"ADAM","BRNO","129"
					"JAN","BRNO","150"
					"OTA","BRNO","210"


2) Priklad na doplneni souboru:

	TRUE% = -1
	IF END#1 THEN 100
	OPEN "SOUBOR" RECL 60 AS 1
	IF END#1 THEN 200
	WHILE TRUE%
	      READ#1;NAPRAZDNO
	WEND
    200 PRINT#1;"UDAJE KTERE SE PRIPOJI"
	STOP
    100 PRINT "SOUBOR SE NENASEL"
	STOP

Vysledny soubor bude :   	"ADAM","BRNO","129"
				"JAN","BRNO","150"
				"OTA","BRNO","210"
				"UDAJE KTERE SE PRIPOJI"


3) Priklad na nalezeni urciteho zaznamu v souboru a jeho tisk:

	TRUE% = -1			/ predpoklada se soubor
	OPEN "SOUBOR" RECL 60 AS 1	/ z prikladu 1
	IF END#1 THEN 500
	FORM$="/..../:  BYDLISTE - /..../   CISLO DOMU - /.../"
	WHILE TRUE%
	      INPUT "VLOZ CISLO ZAMESTNANCE";C.ZAM%
	      READ#1,C.ZAM%;JMENO$,MISTO$,CISLO$
	      PRINT USING FORM$;JMENO$,MISTO$,CISLO$
	WEND
    500 STOP

	Napriklad pri vlozeni cisla 1 se na displeji vytiskne:

	ADAM  :  BYDLISTE - BRNO    CISLO DOMU - 129
