Hlavní navigace

Programovací jazyk BASIC na počítačích kompatibilních s IBM PC

13. 7. 2010
Doba čtení: 23 minut

Sdílet

V předposlední části našeho povídání o programovacím jazyce BASIC si popíšeme některé významné dialekty tohoto jazyka používané na počítačích kompatibilních s IBM PC. Zaměříme se především na ty interpretry a překladače BASICu, které mohly být provozovány v operačním systému MS-DOS popř. PC-DOS.

Obsah

1. Programovací jazyk BASIC na počítačích kompatibilních s IBM PC

2. GW-BASIC

3. Ladění programů v GW-BASICu – příkazy TRON a TROFF

4. GFA BASIC

5. Ukázkový program vytvořený v GFA BASICu

6. Turbo Basic

7. QBasic

8. Quick Basic

9. Odkazy na Internetu

1. Programovací jazyk BASIC na počítačích kompatibilních s IBM PC

Zatímco v předchozích částech seriálu o architekturách počítačů i o jejich základním programovém vybavení jsme se zabývali zejména těmi interpretry a překladači programovacího jazyka BASIC, které byly určeny pro osmibitové domácí mikropočítače (a navíc pro osmibitovou herní konzoli Atari 2600), dnes si řekneme základní informace o některých významných dialektech BASICu, jež bylo možné používat na osobních počítačích IBM PC a samozřejmě i na jejich rozličných klonech. Nejprve se zmíníme o interpretru BASICu dodávaném přímo s IBM PC, i když mnoho uživatelů se s tímto interpretrem pravděpodobně nikdy nesetkalo (pouze ti, kteří vlastnili originální PC od firmy IBM). Vzhledem k tomu, že počítače IBM PC začaly být zákazníkům, především firmám, nabízeny již v roce 1981, tj. v dobách kralování osmibitových domácích mikropočítačů, byly i první modely IBM PC vybaveny, podobně jako naprostá většina osmibitových počítačů, interpretrem programovacího jazyka BASIC uloženého v paměti ROM.

Obrázek 1: Fotografie obrazovky počítače IBM PC se spuštěným interpretrem BASICu, v němž je napsán velmi jednoduchý program.

Na originálním IBM PC byla kapacita ROM rovna 40 kB, přičemž BASIC z této kapacity využíval pouze 8 kB a zbylých 32 kB sloužilo pro uložení BIOSu (v dalších modelech IBM PC se kapacita ROM kvůli podpoře většího množství zařízení zvyšovala, typicky na hodnotu 64 kB). Interpret BASICu uložený v ROM se spouštěl snadno – v případě, že počítač po svém zapnutí nenašel v disketové jednotce disketu s operačním systémem (podpora pro pevné disky byla zavedena až s modelem PC XT v roce 1983), spustil se automaticky interpret BASICu. Dialekt programovacího jazyka BASIC uložený v ROM se sice nazýval IBM Cassette BASIC (i když se na obrazovce ohlašoval nápisem „IBM Personal Computer Basic“), ve skutečnosti se však jednalo o interpret BASICu vytvořený firmou Microsoft, která ho licencovala firmě IBM jako jeden z prvních softwarových produktů pro počítače PC. Poté následoval operační systém MS-DOS, ale o této poměrně historické události si však řekneme více podrobností v jiném seriálu. Při převodu BASICu na počítače IBM PC použila firma Microsoft svůj BASIC určený pro operační systém CP/M.

Obrázek 2: Interpret IBM Cassette BASICu spuštěný v emulátoru IBM PC. Při spuštění emulátoru byl použit obraz originálních paměťových modulů (ROM) firmy IBM.

Název IBM Cassette BASIC byl odvozen od v té době používaného způsobu ukládání programů na magnetofonovou kazetu – skutečně, původní IBM PC podporovalo záznam dat na toto dnes již překonané paměťové médium, v pozdějších modelech však tato „vlastnost“ přestala být podporována, naopak byla přidána podpora pro práci s pevnými disky. Na tomto místě je vhodné poznamenat, že BASIC v ROM obsahovaly pouze originální počítače IBM PC, zatímco jejich klony v případě, že nebyla nalezena disketa s operačním systémem, pouze suše zobrazily chybovou zprávu: NO ROM BASIC system halted. Současné verze BIOSu již většinou v tomto případě (tj. když žádné datové médium se systémem nebylo nalezeno) vypisují odlišné chybové zprávy. Z technického hlediska nebyl IBM Cassette BASIC nijak odlišný od většiny interpretrů BASICu používaných na osmibitových mikropočítačích – programy se zapisovaly s čísly řádků, programové smyčky se realizovaly buď pomocí dvojice příkazů FOR-NEXT nebo s využitím příkazu GOTO, každý zapisovaný řádek byl před uložením do operační paměti tokenizován atd.

Obrázek 3: BIOSy, které nepochází přímo od firmy IBM, vypisují v případě absence operačního systému na datových médiích jiné hlášení než originální BIOS firmy IBM. Například AWARD BIOS vypisuje hlášení „DISK BOOT FAILURE, INSERT SYSTEM DISK AND PRESS ENTER.“

2. GW-BASIC

Zatímco IBM Cassette BASIC byl používán pouze na originálních počítačích IBM PC, další dialekt programovacího jazyka BASIC, který si v dnešním článku popíšeme, již byl dostupný všem uživatelům, protože měl formu běžné (spustitelné) aplikace určené pro operační systém MS-DOS. Jedná se o GW-BASIC vytvořený opět firmou Microsoft. Vývoj tohoto programovacího jazyka a taktéž standardizaci jeho příkazů napříč několika operačními systémy a platformami vedl Greg Whitten, který do firmy Microsoft nastoupil již v roce 1979 a měl tak velmi nízké číslo zaměstnance (sám uvádí, že pokud si dobře pamatuje, měl číslo 16). Název tohoto programovacího jazyka zvolil sám Bill Gates, přičemž písmena „GW“ oficiálně znamenaly zkratku dvousloví „Gee-Whiz“, pravděpodobně se však původně jednalo o iniciály Grega Whittena. GW-BASIC se stal mezi uživateli počítačů IBM PC (především v dobách PC XT) velmi populární, i když se jednalo o dialekt, který nijak zvlášť neodlišoval od dialektů BASICu dostupných na osmibitových mikropočítačích – dokonce bylo možné používat pouze jeden segment paměti, tj. 64 kB, i když samotný MS-DOS dokázal obsloužit 640 kB, resp. 1 MB pokud započítáme i oblast BIOSu a grafické paměti.

Obrázek 4: Úvodní obrazovka GW-BASICu po jeho spuštění v emulátoru PC (zde se konkrétně jedná o DOSBOX).

GW-BASICu bylo možné pracovat se čtyřmi datovými typy. Především se jednalo o celá čísla, jejichž rozsah byl roven –32768 až 32767, dále o reálná čísla uložená v systému plovoucí řádové čárky s jednoduchou přesností (single precision) či dvojitou přesností (double precision) a konečně s řetězci, které však mohly obsahovat maximálně 255 znaků, což je pro některé účely poměrně nízká hodnota. Celočíselné konstanty se zapisovaly buď v desítkové soustavě (42), v soustavě šestnáctkové (&H2a) nebo soustavě osmičkové (&O52). Jména proměnných mohla mít, na rozdíl od některých dalších dialektů BASICu, délku až čtyřicet znaků a za název proměnné se mohl přidávat znak, který určoval její typ, přičemž tento znak byl pevně svázán s názvem proměnné, takže například A$ a A% jsou dvě rozdílné proměnné umístěné v jiné oblasti operační paměti. Znaky určující typ proměnné jsou vypsány v následující tabulce. Jak si řekneme v navazujících kapitolách, jsou tyto znaky použity i v některých dalších dialektech BASICu:

Znak za jménem proměnné Datový typ
$ string
% integer
! single precision
# double precision

Některé další vlastnosti GW-BASICu si ukážeme na jednoduchých příkladech. Nejprve je uveden způsob inicializace pole s využitím údajů uložených na programových řádcích začínajících příkazem DATA (povšimněte si, že pole jsou číslována od nuly):

10 DIM A(20)
20 FOR I=0 TO 20
30 READ A(I)
40 NEXT I
100 DATA 1,2,3,4,5,6,7,8,9,10
110 DATA 3.08,5.19,3.12,3.98,4.24
120 DATA 5.08,5.55,4.00,3.16,3.37

Načítat je samozřejmě možné i řetězce:

5 PRINT
10 PRINT "CITY","STATE","ZIP"
20 READ C$,S$,Z
30 DATA "DENVER,","COLORADO",80211
40 PRINT C$,S$,Z
RUN
 CITY STATE ZIP
 DENVER, COLORADO 80211

Řetězce je možné v GW-BASICu, podobně jako v mnoha dalších dialektech tohoto programovacího jazyka, spojovat pomocí přetíženého operátoru +:

10 A$="FILE":B$="NAME"
20 PRINT A$+B$
30 PRINT "NEW " + A$+B$
RUN
 FILENAME
 NEW FILENAME

Obrázek 5: Jednoduchý program napsaný v prostředí GW-BASICu. Povšimněte si klávesových zkratek zobrazených v dolní části obrazovky. Jedná se o příkazy, které byly do (celoobrazovkového) editoru vypsány po stlačení jedné z funkčních kláves F1 až F10 (PC XT mělo odlišnou klávesnici než dnes, takže neobsahovalo klávesy F11 a F12).

3. Ladění programů v GW-BASICu – příkazy TRON a TROFF

GW-BASIC taktéž obsahoval základní prostředky použitelné pro ladění aplikací. Zatímco v současných vývojových prostředích je běžné, že uživatel může postupně krokovat jednotlivými příkazy laděné aplikace a přitom si vypisovat obsah proměnných (popř. obsah proměnných měnit či modifikovat vlastní programový kód), na počátku osmdesátých let minulého století nebyly dostupné vývojové prostředky na mikropočítačích zdaleka tak dokonalé. V GW-BASICu bylo samozřejmě možné, podobně jako v prakticky všech interpretrech BASICu, vypisovat hodnoty proměnných či celých výrazů, spouštět program od místa kde byl zastaven, provést skok na libovolný programový řádek atd. Navíc však GW-BASIC obsahoval i velmi užitečný příkaz TRON (trace on), který prováděl přesně to, co jeho název napovídá – po spuštění programu vypisoval čísla řádků, kterými interpret při běhu programu prošel, takže programátor mohl po ukončení (pádu :-) programu alespoň částečně zrekonstruovat, co jeho aplikace ve skutečnosti prováděla.

Obrázek 6: Program spuštěný (interpretovaný) běžných způsobem, na obrazovku vypisuje pouze svůj výstup – sekvenci čísel 1 až 10.

Na sedmém obrázku je ukázáno, jak se bude běh (tj. ve skutečnosti interpretace) programu lišit po zadání příkazu TRON. Pokud je tento příkaz aktivní, vypisují se při interpretaci programu do hranatých závorek čísla programových řádků, kterými program při svém běhu prochází. V demonstračním příkladu ukázaném na sedmém obrázku jsou čísla řádků prokládána samotným výstupem programu, konkrétně výsledkem příkazu PRINT A. Pokud by program na výstup neposílal žádný text, byla by výsledkem jeho běhu pouze řada čísel umístěná do hranatých závorek. Příkaz TRON je možné deaktivovat příkazem TROFF (trace off). Poznámka: v některých materiálech se můžeme dočíst, že název známého filmu TRON, v němž byla jako v jednom z prvních filmů použita trojrozměrná renderovaná počítačová grafika, je odvozen právě do BASICovského příkazu TRON, ovšem režisér Steven Lisberger to popírá a tvrdí, že název filmu získal ze slova „electronic“.

Obrázek 7: Běh programu po zadání příkazu TRON.

4. GFA BASIC

Dalším dialektem programovacího jazyka BASIC, který mohli zdatnější uživatelé nebo i profesionální programátoři v dobách MS-DOSu používat, byl GFA BASIC. Jedná se o jazyk, jehož příkazy, procedury a funkce (jichž je dohromady cca 500!) jsou plně kompatibilní s GFA BASICem používaným na osobních počítačích Amiga a Atari ST, což bylo samozřejmě výhodné, protože bylo možné (i když ne zcela bez obtíží) přenášet zdrojové kódy aplikací mezi různými platformami, později dokonce i na Windows 3.1. GFA BASIC programátorům nabídl, pravděpodobně jako vůbec první vývojové prostředí pro MS-DOS, možnost využití grafického uživatelského rozhraní v jejich programech a dokonce i příkazy, pomocí nichž bylo možné uchovávat data v paměti EMS, což spolu s podporou práce s celou konvenční pamětí (640 kB) umožnilo tvořit i velmi rozsáhlé aplikace popř. aplikace, jejichž datové struktury přesahovaly velikost jednoho segmentu (64 kB) – ostatně je zajímavé, že například QBasic popsaný v dalších kapitolách, stále uživatelům kladl omezení dané segmentováním paměti.

Obrázek 8: Vývojové prostředí GFA BASICu ve verzi pro operační systém MS-DOS.

Aplikační balík s GFA BASICem obsahoval vývojové prostředí s plnohodnotným textovým editorem, interpretr jazyka, jeho překladač a taktéž poměrně velké množství demonstračních programů, na nichž byly ukázány jak vlastnosti samotného jazyka, tak i možnosti již zmíněných 500 procedur a funkcí (takzvaný kernel). V textovém editoru bylo možné provádět folding procedur a funkcí – jedná se o zabalení celé procedury/funkce tak, že na obrazovce zabírá pouze jediný textový řádek. Tato velmi užitečná vlastnost se ovládá klávesovými zkratkami ALT+Q a ALT+W (folding je dnes zcela běžnou součástí textových editorů i vývojových prostředí, ovšem v dobách GFA BASICu se jednalo o poměrně novou vlastnost). Další ze zajímavých možností editoru byla možnost zkráceného zápisu příkazů pomocí jednopísmenných zkratek. Po zápisu celého programového řádku se příkazy expandovaly (editor správně rozpoznal, kde se jedná o názvy proměnných a kde o zkrácené příkazy) a posléze došlo ke kontrole syntaxe expandovaného řádku. Například programový řádek obsahující začátek počítané programové smyčky FOR ve tvaru:

FOR i=x TO y STEP z NEXT i

bylo možné zapsat následovně:

f i x y z n i

Obrázek 9: Dialog pro otevření souboru se zdrojovým textem programu.

Mezi další vlastnosti GFA BASICu patří podpora pro tvorbu programů, v nichž se nemusely používat čísla řádků, což je jeden z poměrně zásadních rozdílů mezi tímto jazykem a například již zmíněným Cassette BASICem či GW-BASICem; dále podpora strukturovaných příkazů pro tvorbu programových smyček, podpora pro tvorbu uživatelských procedur a funkcí a taktéž například velmi užitečný příkaz použitelný pro blokové přesuny dat BMOVE, celá řada příkazů umožňujících jednoduše provádět operace s maticemi (MATRIX…), a dokonce i možnost měnit či číst obsah registrů mikroprocesoru 80×86 pomocí „speciálních“ proměnných _AH, _AX, _SI atd. – tuto vlastnost bylo možné využít například při volání funkcí MS-DOSu či BIOSu pro naplnění parametrů těchto funkcí (ty se nepředávaly přes zásobník) a taktéž pro zpracování hodnot, které tyto funkce mohly vracet.

Obrázek 10: Načtený zdrojový kód programu.

5. Ukázkový program vytvořený v GFA BASICu

V této kapitole si na poněkud delším demonstračním příkladu ukážeme některé vlastnosti GFA BASICu. Jedná se o příklad, v němž je nejdříve otevřeno grafické okno se zvoleným titulkem a posléze je do tohoto okna vykreslena Bézierova křivka na základě řídicích bodů zadaných pomocí myši. V zobrazeném zdrojovém textu si povšimněte především následujících příkazů:

  1. použití lokálních proměnných: LOCAL
  2. použití parametrů procedury Bezier0
  3. tvorby strukturovaných smyček: REPEAT, UNTIL, WHILE, WEND, DOLOOP
  4. příkazů pro práci s okny: OPENW, FULLWTITLEW
  5. práce s myší: MOUSEK, MOUSEX, MOUSEY
  6. zápisu komentářů ve stylu jazyka C++ či syntakticky podobných jazyků (C99, Java, JavaScript)

Obrázek 11: Výsledek běhu programu, jehož výpis je zobrazený na desátém obrázku.

Následuje výpis zdrojového kódu demonstračního příkladu:

OPENW #1
FULLW #1
max% = 4
DIM xb(max%),yb(max%)
RGBCOLOR RGB(255,0,0)
DO
    TITLEW #1,"Bezierkurve 4 Punkte wählen"
    CLS
    FOR i% = 0 TO max% - 1
        REPEAT
            PEEKEVENT
        UNTIL MOUSEK = 1
        xb(i%) = MOUSEX
        yb(i%) = MOUSEY
        CIRCLE xb(i%),yb(i%),4
        WHILE MOUSEK
        WEND
    NEXT i%
    RGBCOLOR RGB(255,0,0)
    t1 = TIMER
    Bezier0(max% - 1,xb(),yb())
    PRINT "Bezier: ";TIMER - t1
    RGBCOLOR RGB(0,0,255)
    t1 = TIMER
    CURVE xb(0),yb(0),xb(1),yb(1),xb(2),yb(2),xb(3),yb(3)
    PRINT "CURVE: ";TIMER - t1

    REPEAT
    UNTIL MOUSEK = 1 OR MOUSEK = 2
    TITLEW #1,"Linke Maustaste = nochmal, Rechte Maustaste = Ende"
LOOP UNTIL MOUSEK = 2
CLOSEW #1
PROCEDURE Bezier0(max%,VAR x(),y())
    LOCAL i%,x = 0,y = 0,t,a
    FOR t = 0 TO 1 STEP 0.25 / max%
        x = 0,y = 0
        FOR i% = 0 TO max%
            a = FACT(max%) / FACT(i%) / FACT(max% - i%)
            a = a * t ^ i% * (1 - t) ^ (max% - i%)
            x = x +  a * x(i%)
            y = y + a * y(i%)
        NEXT i%
        IF t = 0
            PLOT x,y
        ELSE
            DRAW TO x,y
        ENDIF
    NEXT t
RETURN

Obrázek 12: Editace složitějšího programu obsahujícího strukturované smyčky.

Obrázek 13: Nastavení parametrů překladu BASICových programů do strojového kódu.

6. Turbo Basic

Dalším vývojovým prostředím, jehož základ tvoří programovací jazyk BASIC, je prostředí firmy Borland známé pod názvem Turbo Basic. Podle názvu tohoto produktu by se mohlo zdát, že se jedná o vývojové prostředí vizuálně totožné s dalšími „turbo“ produkty firmy Borland, především s Turbo Pascalem a Turbo C++. Ve skutečnosti je však Turbo Basic založen na starší technologii, nikoli na známých (a taktéž patentovaných, což je poněkud zvláštní) oknech stylu „Turbo Vision“ s modrým pozadím.

Obrázek 14: Úvodní obrazovka Turbo Basicu.

Turbo Basic byl vyvíjen v letech 1987 až 1988, ovšem, na rozdíl od již zmíněného Turbo Pascalu a Turbo C++, byl posléze jeho vývoj zastaven, podobně jako tomu bylo u některých dalších programovacích jazyků, jejichž vývojové prostředí bylo vyvíjeno pod hlavičkou firmy Borland. Původní autor Turbo Basicu však dodnes tento programovací jazyk vyvíjí (pro platformy MS-DOS a MS Windows) a dokonce ho i prodává pod názvem PowerBASIC – viz též http://www.po­werbasic.com/.

Obrázek 15: Program obsahující strukturovaně zapsané programové smyčky otevřený ve vývojovém prostředí Turbo Basicu.

Ze syntaktického a sémantického hlediska se Turbo Basic podobá například GFA BASICu či dále popsanému QBasicu či Quick Basicu – podporovány jsou uživatelské datové typy, universální strukturované smyčky DO-LOOP s podmínkami WHILE a UNTIL uváděnými na začátku či na konci smyčky a taktéž byla zajištěna zpětná kompatibilita s těmi programy, které byly psány starým („klasickým“) způsobem, tj. s využitím očíslovaných programových řádků a příkazů GOTO, ON GOTO, GOSUB, ON GOSUB atd.

Obrázek 16: Zde je naopak zobrazený kód programu, jenž stále využívá číslované programové řádky.

Turbo Basic taktéž obsahoval překladač a přímo ve vývojovém prostředí bylo možné program odladit – krokovat, vypisovat obsahy proměnných při běhu programu atd. I přes tyto možnosti se však Turbo Basic neprosadil tak, jako jiné překladače BASICu a i z tohoto důvodu firma Borland upustila od jeho dalšího vývoje a soustředila se na mnohem úspěšnější Turbo Pascal a Turbo C++.

Obrázek 17: Nastavení parametrů vývojového prostředí Turbo Basicu.

7. QBasic

Jedním z nejznámějších a pravděpodobně i nejpoužívanějších dialektů programovacího jazyka BASIC na osobních počítačích kompatibilních s IBM PC je bezesporu QBasic firmy Microsoft, která tento BASIC začala dodávat společně s MS DOSem 5.0 a později byl dostupný například i pro operační systémy Windows 95 a jako jedna z přídavných utilit i pro Windows NT. Jedná se, na rozdíl od dále popsaného QuickBASICu, o interpret BASICu, což znamená, že programy se nepřekládaly do strojového kódu, ale „pouze“ byly prováděny interpretrem, se všemi přednostmi a zápory tohoto řešení. Mezi přednosti patřilo především to, že QBasic po svém spuštění prakticky nepotřeboval přistupovat k paměťovému zařízení (disketové jednotce, pevnému disku), což mělo velký význam především tehdy, pokud byl počítač vybaven pomalejším pevným diskem (doba PC AT a disků s kapacitami typicky 20 MB, 40 MB a 80 MB). Taktéž spuštění či znovuspuštění programu bylo takřka okamžité, protože odpadl čas potřebný pro překlad zdrojového textu do strojového kódu mikroprocesoru.

Obrázek 18: Úvodní zpráva zobrazená po spuštění QBasicu.

Na druhou stranu bylo provádění programů nepoměrně pomalejší než kdyby došlo k jejich překladu před spuštěním, takže se zde opět ukázal klasický rozpor mezi interpretry a překladači. QBasic taktéž programátorům kladl některá omezení, která vyplývala například z toho, že interpret běžel, ostatně jako celý MS DOS, v reálném (popř. virtuálním) režimu mikroprocesoru 80×86, což mj. znamenalo, že operační paměť byla rozdělena na segmenty o velikosti 64 kB. Právě kvůli segmentování paměti byla omezena například velikost polí, maximální délka řetězců ale i celková velikost všech globálních proměnných. Posledním záporem QBasicu byl nedostatečný rozsah základních knihoven dodávaných k tomuto jazyku (například v porovnání s tehdy velmi populárním Turbo Pascalem nebo výše zmíněným GFA BASICem). QBasic nabízel základní operace pro práci se soubory, grafickými režimy dostupnými přes BIOS (ovšem nikoli režimy VESA) a taktéž procedury pro ovládání PC Speakeru (reproduktoru zapojeného na jednobitový výstup obvodu 8253).

Obrázek 19: Ve vývojovém prostředí QBasicu je zabudované i okno s nápovědou.

Prakticky žádné další procedury ani funkce nebyly ve standardní knihovně dostupné, takže se není čemu divit, že se postupně začaly objevovat například sady procedur pro práci s myší, ovládání pamětí EMS a XMS, knihovny pro tvorbu uživatelského rozhraní v textovém režimu podobné Turbo Vision atd. Nicméně QBasic měl kromě svých záporů i mnoho předností. První a možná i nejdůležitější předností tohoto jazyka bylo to, že byl nainstalován prakticky na jakémkoli počítači s MS DOSem 5.0 či některém pozdějším operačním systému firmy Microsoft, včetně již zmíněných Windows NT. To s sebou přinášelo poměrně mnoho výhod, protože bylo možné distribuovat programy přímo ve zdrojovém kódu s poměrně velkou jistotou, že je cíloví uživatelé budou moci spustit. Společně s QBasicem bylo dodáváno i několik programů, z nichž nejpopulárnější byly hry Gorillas (jednodušší variace na známé hry Tank Wars či Scorched Earth) a Nibbles (starodávná hra, která byla později zpopularizovaná podobnou hrou určenou pro mobilní telefony Nokia). Právě díky přítomnosti QBasicu na prakticky každém počítači s MS DOSem či Windows bylo možné tyto hry spouštět i na těch počítačích, o nichž jejich uživatelé/admi­nistrátoři tvrdili, že na nich žádné hry nebyly a nejsou (kanceláře, školy :-)

Obrázek 20: Hra Gorily spuštěná pomocí interpretru QBasicu.

Další předností QBasicu bylo jednoduše ovladatelné a snadno použitelné vývojové prostředí (některé chyby byly odhaleny již po přechodu na předchozí či následující textový řádek, programy bylo možné krokovat atd.). Poslední kladnou vlastností QBasicu byla jeho syntaxe a sémantika, která byla již v prakticky všech ohledech odlišná od původních BASICů „staré školy“. To mj. znamenalo, že v QBasicu se programy zapisovaly strukturovaně, tj. bez nutnosti používat čísla řádků a s nimi souvisejícího příkazu GOTO, který však zůstal kvůli zpětné kompatibilitě zachován. Dále byly podporovány funkce a procedury s parametry a lokálními proměnnými (navíc se zdrojové kódy funkcí editovaly odděleně, takže nedošlo k jejich nechtěnému promíchání) a všechny proměnné i parametry mohly mít přidělen datový typ. Výsledné programy se tedy svojí strukturou podobaly spíše programům zapisovaným v Pascalu nežli programům v klasickém BASICu (totéž ostatně platí pro GFA BASIC).

Obrázek 21: Editor s otevřeným programem pro výpočet Mandelbrotovy množiny.

Pro ilustraci způsobu zápisu programů následuje ukázka jednoduché aplikace pro výpočet Mandelbrotovy množiny, která byla odladěna v QBasicu (povšimněte si určování typu proměnných pomocí speciálního znaku umístěného za jejich jménem):

SCREEN 13
cy! = -1.5
FOR j% = 0 TO 199
    cx! = -2.5
    FOR i% = 0 TO 319
        iter% = 0
        zx! = 0: zy! = 0
        zx2! = 0: zy2! = 0
        DO
            zx2! = zx! * zx!
            zy2! = zy! * zy!
            zy! = 2! * zx! * zy! + cy!
            zx! = zx2! - zy2! + cx!
            iter% = iter% + 1
        LOOP WHILE iter% < 100 AND zx2! + zy2! < 4!
        PSET (i%, j%), iter%
        cx! = cx! + 4! / 320
    NEXT i%
    cy! = cy! + 3! / 200
NEXT j%

Obrázek 22: Výsledek běhu demonstračního příkladu.

8. Quick Basic

V předchozí kapitole jsme se zmínili o interpretru QBasicu s vlastním integrovaným vývojovým prostředím (IDE). Ve skutečnosti se však nejednalo o plnohodnotný produkt, ale o ořezanou verzi Quick Basicu verze 4.5. Quick Basic patří, podobně jako například QBasic, GW-Basic atd., mezi produkty firmy Microsoft, která ho začala prodávat v roce 1985. Tato verze se v komprimované podobě celá vešla na jednu disketu o velikosti 5,25 palce a kapacitě 360 kB, Quick Basic verze 4.5 má ve zkomprimované formě již více než 4 MB.

Obrázek 23: Editace programu ve vývojovém prostředí Quick Basicu.

V dalších verzích docházelo k postupné integraci všech potřebných programátorských nástrojů, tj. editoru, překladače, debuggeru a nápovědy do jednotného vývojového prostředí. Úplné integrace bylo dosaženo ve verzi 4.0; posléze došlo k rozdělení vývoje na Quick Basic (plnohodnotný překladač), QBasic (pouze interpret dodávaný spolu s dalšími produkty firmy Microsoft), Microsoft Basic PDS (vylepšený Quick Basic) a celá historie vývojových prostředí BASICů pro platformu MS-DOS byla završena Visual Basicem 1.0, který vyšel v roce 1991.

Obrázek 24: Quick Basic obsahuje, podobně jako QBasic, zabudovanou nápovědu.

Syntakticky i sémanticky byly jazyky QBasic a Quick Basic prakticky totožné, ovšem ve druhém případě měli programátoři k dispozici větší množství různých procedur a funkcí; pro Quick Basic taktéž vzniklo poměrně velké množství knihoven a utilit nabízených dalšími vývojáři. Některá omezení QBasicu, například maximální velikost paměťových struktur atd., se v Quick Basicu podařilo odstranit, takže se tento jazyk mohl používat pro tvorbu větších aplikací, které navíc mohly být dodávány v přeložené podobě.

Obrázek 25: Program, který demonstruje vlastnosti různých řadicích metod.

CS24 tip temata

Následuje výpis jednoduchého demonstračního programu, v němž je ukázána deklarace proměnných pomocí příkazu Dim, použití počítané smyčky For a taktéž využití příkazu Continue For, For, pomocí něhož je možné vyskočit z vnořených smyček (tato řídicí konstrukce je v některých dalších programovacích jazycích neznámá):

'' simple prime number finder
Print "Here are the prime numbers between 1 and 20!"
Print
Dim n As Integer, d As Integer
For n = 2 To 20
    For d = 2 To Int(Sqr(n))
        If ( n Mod d ) = 0 Then ' d divides n
            Continue For, For ' n is not prime, so try next n
        End If
    Next d
    Print n
Next n

Obrázek 26: Grafické znázornění řazení prvků v poli (hodnota prvku odpovídá délce úsečky).

9. Odkazy na Internetu

  1. GWBASIC User's Manual
    http://www.an­tonis.de/qbebo­oks/gwbasman/in­dex2.html
  2. GFA-BASIC
    http://sites.go­ogle.com/site/gfa­basic16/
  3. E-mail od tvůrce GW-Basicu
    http://www.clas­siccmp.org/pi­permail/cctech/20­05-April/042999.html
  4. Mystery House
    http://en.wiki­pedia.org/wiki/Mys­tery_House
  5. Mystery House Taken Over
    http://turbulen­ce.org/Works/mys­tery/
  6. Ultima I: The First Age of Darkness
    http://en.wiki­pedia.org/wiki/Ul­tima_I
  7. The Original BASIC
    http://www.tru­ebasic.com/
  8. BASIC – Beginners All-purpose Symbolic Instruction Code
    http://hopl.mur­doch.edu.au/show­language.prx?ex­p=176
  9. FreeBASIC home page
    http://www.fre­ebasic.net/
  10. FreeBASIC Wiki
    http://www.fre­ebasic.net/wi­ki/wikka.php?wak­ka=FBWiki
  11. FreeBASIC Manual
    http://www.fre­ebasic.net/wi­ki/wikka.php?wak­ka=DocToc
  12. FreeBASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Fre­eBASIC
  13. The Griffon Legend
    http://syn9.thin­gie.net/?table=grif­fonlegend
  14. QBasicJedi
    http://www.fre­ewebs.com/qba­sicjedi/
  15. QBasic/QuickBasic Downloads
    http://www.fre­ewebs.com/qba­sicjedi/qbdow­nloads.html
  16. QuickBASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Qu­ickBASIC
  17. QBasic.com
    http://www.qba­sic.com/
  18. QBasic (Wikipedia)
    http://cs.wiki­pedia.org/wiki/QBa­sic
  19. Dialling with QBASIC
    http://www.my­sundial.ca/tsp/qba­sic.html
  20. Visual Basic .NET (česky)
    http://www.vbnet­.cz/
  21. BASIC (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/BA­SIC
  22. BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/BA­SIC
  23. Turbo BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Tur­bo_BASIC
  24. More BASIC Computer Games
    http://www.ata­riarchives.or­g/morebasicga­mes/
  25. How to build an interpreter in Java, Part 1: The BASICs
    http://www.ja­vaworld.com/jw-05–1997/jw-05-indepth.html
  26. Apple I
    http://applemu­seum.bott.org/sec­tions/computer­s/a1.html
  27. The Apple 1 history
    http://apple2his­tory.org/histo­ry/ah02.html
  28. The Apple 2 history
    http://apple2his­tory.org/histo­ry/ah03.html
  29. INTEGER BASIC Reference
    http://www.lan­dsnail.com/a2ref2­.htm
  30. APPLESOFT Reference
    http://www.lan­dsnail.com/a2ref­.htm
  31. Apple II Programming
    http://home.swbe­ll.net/rubywan­d/csa2pfaq.html
  32. Applesoft Lite: Applesoft BASIC for the Replica-1
    http://cowgod­.org/replica1/ap­plesoft/
  33. Simons' BASIC
    http://en.wiki­pedia.org/wiki/Si­mons'_BASIC
  34. Simon's Basic
    http://www.le­mon64.com/?ma­inurl=http%3Aw­ww.lemon64.com/mu­seum/list.php%3Fli­neoffset%3D54%26­genre%3Dmanual­misc
  35. C64 Wiki: Simons Basic
    <a href=„http:www.c64-wiki.de/index­.php/Simons_Ba­sic“>http://www­.c64-wiki.de/index­.php/Simons_Ba­sic
  36. Simons' Basic (evaluation)
    http://www.ata­rimagazines.com/cre­ative/v9n11/60_­Simons_Basic.php
  37. Bill Gates' Personal Easter Eggs in 8 Bit BASIC http://www.pa­getable.com/?p=43
  38. Kladivo na programy (je tam třeba popsán způsob nahrávání a ochran programů protí kopírování a crackování)
    http://www.gran­djihlava.cz/tmp/kla­divo.pdf
  39. Didaktik Gama návod k obsluze
    http://www.gran­djihlava.cz/tmp/na­vod.pdf
  40. Můj přítel Didaktik Gama
    http://www.gran­djihlava.cz/tmp/pri­teldidaktik.pdf
  41. Tip & trip pro Didaktik
    http://www.gran­djihlava.cz/tmp/tip­trikdidaktik.pdf
  42. Muzeum československých mikropočítačů
    http://cs-pocitace.ic.cz/
  43. Popis modulů a aplikací pro IQ-151
    http://cs.fel­k.cvut.cz/~bi­ly/iq151/
  44. IQ 151
    http://osmi.tar­bik.com/cssr/iq­151.html
  45. „Domácí počítače“ nedávné minulosti
    http://www.fi­.muni.cz/usr/jku­cera/pv109/xkr­ejcir.htm
  46. ZPA: IQ-151
    http://www.ho­mecomputer.de/pa­ges/easteurope_cz­.html#iq151
  47. Zrození IQ-151
    http://www.iq151­.net/index.htm
  48. Stručná historie počítače IQ150/IQ151
    http://www.iq151­.net/history.htm
  49. Old Computers – IQ 151
    http://www.old-computers.com/MU­SEUM/computer­.asp?st=1&c=1045
  50. Wikipedia EN: IQ 151
    http://en.wiki­pedia.org/wiki/IQ151
  51. Wikipedia CZ: IQ 151
    http://cs.wiki­pedia.org/wiki/IQ151
  52. ZX-Spectrum Child
    http://www.dot­kam.com/2008/11­/19/zx-spectrum-child/
  53. Speccy.cz
    http://www.spec­cy.cz/
  54. Planet Sinclair
    http://www.nvg­.ntnu.no/sincla­ir/
  55. World of Spectrum
    http://www.wor­ldofspectrum.or­g/
  56. Sinclair BASIC Reference
    http://www.wor­ldofspectrum.or­g/faq/referen­ce/BASICReferen­ce.htm
  57. ZX Basic Manual
    http://www.wor­ldofspectrum.or­g/ZXBasicManu­al/
  58. ZX81 BASIC Programming
    http://www.wor­ldofspectrum.or­g/ZX81BasicPro­gramming/
  59. Sinclair BASIC History
    http://scratchpad­.wikia.com/wi­ki/Sinclair_BA­SIC_History
  60. Sinclair BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Sin­clair_BASIC
  61. Sinclair BASIC (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Sin­clair_BASIC
  62. Beta BASIC (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Be­ta_BASIC
  63. Beta BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Be­ta_BASIC
  64. BETA BASIC NEWSLETTER No 8
    http://spectrum128­.ru/help/Beta­BasicNewsletter8­.pdf
  65. R. T. RUSSELL: The home of BBC BASIC
    http://www.rtrus­sell.co.uk/
  66. R. T. RUSSELL: A History of BBC BASIC
    http://www.cix­.co.uk/~rrusse­ll/bbcbasic/his­tory.html
  67. SuperBASIC (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Su­perBASIC
  68. SuperBASIC (Wikipedia CZ)
    http://en.wiki­pedia.org/wiki/Su­perBASIC
  69. Laser Basic/Laser Compiler
    http://www.sin­cuser.f9.co.uk/049/la­ser.htm
  70. Laser BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/La­ser_BASIC
  71. BBC BASIC
    http://www.bbcba­sic.co.uk/bbcba­sic.html
  72. BBC BASIC
    http://mdfs.net/Sof­tware/BBCBasic/
  73. BBC BASIC (Z80) for the ZX Spectrum
    http://mdfs.net/Sof­tware/BBCBasic/Spec­trum/
  74. BBC BASIC (Wikipedia CZ)
    http://en.wiki­pedia.org/wiki/BBC_BA­SIC
  75. BeebWiki – 8-bit Acorn Computer Wiky
    http://beebwi­ki.jonripley.com/Ma­in_Page
  76. Porovnání osmibitů
    http://porovna­ni8bitu.spaces­.live.com/
  77. Rosetta Code – Main Page
    http://rosetta­code.org/wiki/Ma­in_Page
  78. Rosetta Code – Category Basic
    http://rosetta­code.org/wiki/Ca­tegory:BASIC
  79. Dartmouth College Computation Center. 1964.-The original Dartmouth BASIC manual
    http://www.bit­savers.org/pdf/dar­tmouth/BASIC_Oc­t64.pdf

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.